pax_global_header00006660000000000000000000000064140503010430014500gustar00rootroot0000000000000052 comment=6bc498e625e66e3d0c947639dbffb09d986318d0 micro-2.0.9/000077500000000000000000000000001405030104300126215ustar00rootroot00000000000000micro-2.0.9/.editorconfig000066400000000000000000000002301405030104300152710ustar00rootroot00000000000000# See http://editorconfig.org # In Go files we indent with tabs but still # set indent_size to control the GitHub web viewer. [*.go] indent_size=4 micro-2.0.9/.github/000077500000000000000000000000001405030104300141615ustar00rootroot00000000000000micro-2.0.9/.github/ISSUE_TEMPLATE000066400000000000000000000002421405030104300162650ustar00rootroot00000000000000## Description of the problem or steps to reproduce ## Specifications Commit hash: OS: Terminal: micro-2.0.9/.gitignore000066400000000000000000000003251405030104300146110ustar00rootroot00000000000000.DS_Store micro !cmd/micro binaries/ tmp.sh test/ .idea/ packages/ todo.txt test.txt log.txt *.old benchmark_results* tools/build-version tools/build-date tools/info-plist tools/bindata tools/vscode-tests/ *.hdr micro-2.0.9/.gitmodules000066400000000000000000000001461405030104300147770ustar00rootroot00000000000000[submodule "tools/go-bindata"] path = tools/go-bindata url = https://github.com/zyedidia/go-bindata micro-2.0.9/.travis.yml000066400000000000000000000002401405030104300147260ustar00rootroot00000000000000language: go go: - "1.13.x" os: - linux - osx - windows script: - go build ./cmd/micro - go test ./internal/... - go test ./cmd/... micro-2.0.9/LICENSE000066400000000000000000000020761405030104300136330ustar00rootroot00000000000000MIT License Copyright (c) 2016-2020: Zachary Yedidia, et al. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. micro-2.0.9/LICENSE-THIRD-PARTY000066400000000000000000001752411405030104300154050ustar00rootroot00000000000000Third party libraries directly used by micro and their licenses ================ github.com/golang/go/LICENSE ================ Copyright (c) 2009 The Go Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. github.com/blang/semver/LICENSE ================ The MIT License Copyright (c) 2014 Benedikt Lang Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/gdamore/encoding/LICENSE ================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. github.com/go-errors/errors/LICENSE.MIT ================ Copyright (c) 2015 Conrad Irwin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/mattn/go-isatty/LICENSE ================ Copyright (c) Yasuhiro MATSUMOTO MIT License (Expat) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/mattn/go-runewidth/LICENSE ================ The MIT License (MIT) Copyright (c) 2016 Yasuhiro Matsumoto Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/mitchellh/go-homedir/LICENSE ================ The MIT License (MIT) Copyright (c) 2013 Mitchell Hashimoto Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/sergi/go-diff/LICENSE ================ Copyright (c) 2012-2016 The go-diff Authors. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/yuin/gopher-lua/LICENSE ================ The MIT License (MIT) Copyright (c) 2015 Yusuke Inuzuka Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/atotto/clipboard/LICENSE ================ github.com/zyedidia/clipboard/LICENSE (fork) ================ Copyright (c) 2013 Ato Araki. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of @atotto. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. github.com/gdamore/tcell/LICENSE ================ github.com/zyedidia/tcell/LICENSE (fork) ================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. golang.org/x/text/LICENSE ================ Copyright (c) 2009 The Go Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. layeh.com/gopher-luar/LICENSE ================ Mozilla Public License Version 2.0 ================================== 1. Definitions -------------- 1.1. "Contributor" means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. 1.2. "Contributor Version" means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor's Contribution. 1.3. "Contribution" means Covered Software of a particular Contributor. 1.4. "Covered Software" means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. 1.5. "Incompatible With Secondary Licenses" means (a) that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or (b) that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. 1.6. "Executable Form" means any form of the work other than Source Code Form. 1.7. "Larger Work" means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. 1.8. "License" means this document. 1.9. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. 1.10. "Modifications" means any of the following: (a) any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or (b) any new file in Source Code Form that contains any Covered Software. 1.11. "Patent Claims" of a Contributor means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. 1.12. "Secondary License" means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. 1.13. "Source Code Form" means the form of the work preferred for making modifications. 1.14. "You" (or "Your") means an individual or a legal entity exercising rights under this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. License Grants and Conditions -------------------------------- 2.1. Grants Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and (b) under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. 2.2. Effective Date The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. 2.3. Limitations on Grant Scope The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: (a) for any code that a Contributor has removed from Covered Software; or (b) for infringements caused by: (i) Your and any other third party's modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or (c) under Patent Claims infringed by Covered Software in the absence of its Contributions. This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). 2.4. Subsequent Licenses No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). 2.5. Representation Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. 2.6. Fair Use This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. 2.7. Conditions Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. 3. Responsibilities ------------------- 3.1. Distribution of Source Form All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients' rights in the Source Code Form. 3.2. Distribution of Executable Form If You distribute Covered Software in Executable Form then: (a) such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and (b) You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients' rights in the Source Code Form under this License. 3.3. Distribution of a Larger Work You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). 3.4. Notices You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. 3.5. Application of Additional Terms You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. 4. Inability to Comply Due to Statute or Regulation --------------------------------------------------- If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Termination -------------- 5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. 5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. ************************************************************************ * * * 6. Disclaimer of Warranty * * ------------------------- * * * * Covered Software is provided under this License on an "as is" * * basis, without warranty of any kind, either expressed, implied, or * * statutory, including, without limitation, warranties that the * * Covered Software is free of defects, merchantable, fit for a * * particular purpose or non-infringing. The entire risk as to the * * quality and performance of the Covered Software is with You. * * Should any Covered Software prove defective in any respect, You * * (not any Contributor) assume the cost of any necessary servicing, * * repair, or correction. This disclaimer of warranty constitutes an * * essential part of this License. No use of any Covered Software is * * authorized under this License except under this disclaimer. * * * ************************************************************************ ************************************************************************ * * * 7. Limitation of Liability * * -------------------------- * * * * Under no circumstances and under no legal theory, whether tort * * (including negligence), contract, or otherwise, shall any * * Contributor, or anyone who distributes Covered Software as * * permitted above, be liable to You for any direct, indirect, * * special, incidental, or consequential damages of any character * * including, without limitation, damages for lost profits, loss of * * goodwill, work stoppage, computer failure or malfunction, or any * * and all other commercial damages or losses, even if such party * * shall have been informed of the possibility of such damages. This * * limitation of liability shall not apply to liability for death or * * personal injury resulting from such party's negligence to the * * extent applicable law prohibits such limitation. Some * * jurisdictions do not allow the exclusion or limitation of * * incidental or consequential damages, so this exclusion and * * limitation may not apply to You. * * * ************************************************************************ 8. Litigation ------------- Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party's ability to bring cross-claims or counter-claims. 9. Miscellaneous ---------------- This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. 10. Versions of the License --------------------------- 10.1. New Versions Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. 10.2. Effect of New Versions You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. 10.3. Modified Versions If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. Exhibit A - Source Code Form License Notice ------------------------------------------- This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. You may add additional accurate notices of copyright ownership. Exhibit B - "Incompatible With Secondary Licenses" Notice --------------------------------------------------------- This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0. github.com/flynn/json5/LICENSE ================ github.com/zyedidia/json5/LICENSE (fork) ================ Decoder code based on package encoding/json from the Go language. Copyright (c) 2012 The Go Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Test data based on the parse cases from https://github.com/json5/json5 Copyright (c) 2012-2016 Aseem Kishore, and others. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/james4k/terminal/LICENSE ================ github.com/zyedidia/terminal/LICENSE (fork) ================ Copyright (C) 2013 James Gray Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without liitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and thismssion notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/kr/pty/License ================ github.com/zyedidia/pty/License (fork) ================ Copyright (c) 2011 Keith Rarick Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/npat-efault/poller/LICENSE.txt ================ github.com/zyedidia/poller/LICENSE.txt (fork) ================ Copyright (c) 2014, Nick Patavalis (npat@efault.net) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. github.com/zyedidia/glob ================ Glob is licensed under the MIT "Expat" License: Copyright (c) 2016: Zachary Yedidia. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/dustin/go-humanize/LICENSE ================ Copyright (c) 2005-2008 Dustin Sallings Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. gopkg.in/yaml.v2/LICENSE ================ Copyright 2011-2016 Canonical Ltd. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. github.com/kballard/go-shellquote/LICENSE =============== Copyright (C) 2014 Kevin Ballard Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. github.com/stretchr/testify ================= MIT License Copyright (c) 2012-2018 Mat Ryer and Tyler Bunnell Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. micro-2.0.9/Makefile000066400000000000000000000061061405030104300142640ustar00rootroot00000000000000.PHONY: runtime VERSION = $(shell GOOS=$(shell go env GOHOSTOS) GOARCH=$(shell go env GOHOSTARCH) \ go run tools/build-version.go) HASH = $(shell git rev-parse --short HEAD) DATE = $(shell GOOS=$(shell go env GOHOSTOS) GOARCH=$(shell go env GOHOSTARCH) \ go run tools/build-date.go) ADDITIONAL_GO_LINKER_FLAGS = $(shell GOOS=$(shell go env GOHOSTOS) \ GOARCH=$(shell go env GOHOSTARCH) \ go run tools/info-plist.go "$(VERSION)") GOBIN ?= $(shell go env GOPATH)/bin GOVARS = -X github.com/zyedidia/micro/v2/internal/util.Version=$(VERSION) -X github.com/zyedidia/micro/v2/internal/util.CommitHash=$(HASH) -X 'github.com/zyedidia/micro/v2/internal/util.CompileDate=$(DATE)' DEBUGVAR = -X github.com/zyedidia/micro/v2/internal/util.Debug=ON VSCODE_TESTS_BASE_URL = 'https://raw.githubusercontent.com/microsoft/vscode/e6a45f4242ebddb7aa9a229f85555e8a3bd987e2/src/vs/editor/test/common/model/' # Builds micro after checking dependencies but without updating the runtime build: go build -trimpath -ldflags "-s -w $(GOVARS) $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro build-dbg: go build -trimpath -ldflags "-s -w $(ADDITIONAL_GO_LINKER_FLAGS) $(DEBUGVAR)" ./cmd/micro build-tags: fetch-tags go build -trimpath -ldflags "-s -w $(GOVARS) $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro # Builds micro after building the runtime and checking dependencies build-all: runtime build # Builds micro without checking for dependencies build-quick: go build -trimpath -ldflags "-s -w $(GOVARS) $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro # Same as 'build' but installs to $GOBIN afterward install: go install -ldflags "-s -w $(GOVARS) $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro # Same as 'build-all' but installs to $GOBIN afterward install-all: runtime install # Same as 'build-quick' but installs to $GOBIN afterward install-quick: go install -ldflags "-s -w $(GOVARS) $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro fetch-tags: git fetch --tags # Builds the runtime runtime: git submodule update --init rm -f runtime/syntax/*.hdr go run runtime/syntax/make_headers.go runtime/syntax go build -o tools/bindata ./tools/go-bindata tools/bindata -pkg config -nomemcopy -nometadata -o runtime.go runtime/... mv runtime.go internal/config gofmt -w internal/config/runtime.go testgen: mkdir -p tools/vscode-tests cd tools/vscode-tests && \ curl --remote-name-all $(VSCODE_TESTS_BASE_URL){editableTextModelAuto,editableTextModel,model.line}.test.ts tsc tools/vscode-tests/*.ts > /dev/null; true go run tools/testgen.go tools/vscode-tests/*.js > buffer_generated_test.go mv buffer_generated_test.go internal/buffer gofmt -w internal/buffer/buffer_generated_test.go test: go test ./internal/... go test ./cmd/... bench: for i in 1 2 3; do \ go test -bench=. ./internal/...; \ done > benchmark_results benchstat benchmark_results bench-baseline: for i in 1 2 3; do \ go test -bench=. ./internal/...; \ done > benchmark_results_baseline bench-compare: for i in 1 2 3; do \ go test -bench=. ./internal/...; \ done > benchmark_results benchstat -alpha 0.15 benchmark_results_baseline benchmark_results clean: rm -f micro micro-2.0.9/README.md000066400000000000000000000274541405030104300141140ustar00rootroot00000000000000micro logo [![Build Status](https://travis-ci.org/zyedidia/micro.svg?branch=master)](https://travis-ci.org/zyedidia/micro) [![Go Report Card](https://goreportcard.com/badge/github.com/zyedidia/micro)](https://goreportcard.com/report/github.com/zyedidia/micro) [![Release](https://img.shields.io/github/release/zyedidia/micro.svg?label=Release)](https://github.com/zyedidia/micro/releases) [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/zyedidia/micro/blob/master/LICENSE) [![Join the chat at https://gitter.im/zyedidia/micro](https://badges.gitter.im/zyedidia/micro.svg)](https://gitter.im/zyedidia/micro?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Snap Status](https://snapcraft.io/micro/badge.svg)](https://snapcraft.io/micro) **micro** is a terminal-based text editor that aims to be easy to use and intuitive, while also taking advantage of the capabilities of modern terminals. It comes as a single, batteries-included, static binary with no dependencies; you can download and use it right now! As its name indicates, micro aims to be somewhat of a successor to the nano editor by being easy to install and use. It strives to be enjoyable as a full-time editor for people who prefer to work in a terminal, or those who regularly edit files over SSH. Here is a picture of micro editing its source code. ![Screenshot](./assets/micro-solarized.png) To see more screenshots of micro, showcasing some of the default color schemes, see [here](https://micro-editor.github.io). You can also check out the website for Micro at https://micro-editor.github.io. ## Table of Contents - [Features](#features) - [Installation](#installation) - [Prebuilt binaries](#prebuilt-binaries) - [Package Managers](#package-managers) - [Building from source](#building-from-source) - [Fully static binary](#fully-static-binary) - [macOS terminal](#macos-terminal) - [Linux clipboard support](#linux-clipboard-support) - [Colors and syntax highlighting](#colors-and-syntax-highlighting) - [Cygwin, Mingw, Plan9](#cygwin-mingw-plan9) - [Usage](#usage) - [Documentation and Help](#documentation-and-help) - [Contributing](#contributing) - - - ## Features - Easy to use and install. - No dependencies or external files are needed — just the binary you can download further down the page. - Multiple cursors. - Common keybindings (Ctrl-s, Ctrl-c, Ctrl-v, Ctrl-z, …). - Keybindings can be rebound to your liking. - Sane defaults. - You shouldn't have to configure much out of the box (and it is extremely easy to configure). - Splits and tabs. - nano-like menu to help you remember the keybindings. - Extremely good mouse support. - This means mouse dragging to create a selection, double click to select by word, and triple click to select by line. - Cross-platform (it should work on all the platforms Go runs on). - Note that while Windows is supported Mingw/Cygwin is not (see below). - Plugin system (plugins are written in Lua). - micro has a built-in plugin manager to automatically install, remove, and update plugins. - Built-in diff gutter. - Simple autocompletion. - Persistent undo. - Automatic linting and error notifications. - Syntax highlighting for over [130 languages](runtime/syntax). - Color scheme support. - By default, micro comes with 16, 256, and true color themes. - True color support (set the `MICRO_TRUECOLOR` environment variable to 1 to enable it). - Copy and paste with the system clipboard. - Small and simple. - Easily configurable. - Macros. - Common editor features such as undo/redo, line numbers, Unicode support, soft wrapping, … ## Installation To install micro, you can download a [prebuilt binary](https://github.com/zyedidia/micro/releases), or you can build it from source. If you want more information about ways to install micro, see this [wiki page](https://github.com/zyedidia/micro/wiki/Installing-Micro). Use `micro -version` to get the version information after installing. It is only guaranteed that you are installing the most recent stable version if you install from the prebuilt binaries, Homebrew, or Snap. A desktop entry file and man page can be found in the [assets/packaging](https://github.com/zyedidia/micro/tree/master/assets/packaging) directory. ### Prebuilt binaries All you need to install micro is one file, the binary itself. It's as simple as that! Download the binary from the [releases](https://github.com/zyedidia/micro/releases) page. ### Installation script There is a script which can install micro for you by downloading the latest prebuilt binary. You can find it at . You can easily install micro by running ```bash curl https://getmic.ro | bash ``` The script will place the micro binary in the current directory. From there, you can move it to a directory on your path of your choosing (e.g. `sudo mv micro /usr/bin`). See its [GitHub repository](https://github.com/benweissmann/getmic.ro) for more information. To uninstall micro, simply remove the binary, and the configuration directory at `~/.config/micro`. ### Package managers You can install micro using Homebrew on Mac: ``` brew install micro ``` **Note for Mac:** All micro keybindings use the control or alt (option) key, not the command key. By default, macOS terminals do not forward alt key events. To fix this, please see the section on [macOS terminals](https://github.com/zyedidia/micro#macos-terminal) further below. On Linux, you can install micro through [snap](https://snapcraft.io/docs/core/install) ``` snap install micro --classic ``` **Note for Linux:** for interfacing with the local system clipboard, `xclip` or `xsel` must be installed. Please see the section on [Linux clipboard support](https://github.com/zyedidia/micro#linux-clipboard-support) further below. Micro is also available through other package managers on Linux such as apt, dnf, AUR, Nix, and package managers for other operating systems. These packages are not guaranteed to be up-to-date. * Linux: Available in distro-specific package managers. * `apt install micro` (Ubuntu 20.04 `focal`, and Debian `unstable | testing | buster-backports`). At the moment, this package (2.0.1-1) is outdated and has a known bug where debug mode is enabled. * `dnf install micro` (Fedora). * `pacman -S micro` (Arch Linux). * `eopkg install micro` (Solus). * See [wiki](https://github.com/zyedidia/micro/wiki/Installing-Micro) for details about CRUX, Termux. * Windows: [Chocolatey](https://chocolatey.org) and [Scoop](https://github.com/lukesampson/scoop). * `choco install micro`. * `scoop install micro`. * OpenBSD: Available in the ports tree and also available as a binary package. * `pkd_add -v micro`. * NetBSD, macOS, Linux, Illumos, etc. with [pkgsrc](http://www.pkgsrc.org/)-current: * `pkg_add micro` ### Building from source If your operating system does not have a binary release, but does run Go, you can build from source. Make sure that you have Go version 1.11 or greater and Go modules are enabled. ``` git clone https://github.com/zyedidia/micro cd micro make build sudo mv micro /usr/local/bin # optional ``` The binary will be placed in the current directory and can be moved to anywhere you like (for example `/usr/local/bin`). The command `make install` will install the binary to `$GOPATH/bin` or `$GOBIN`. You can install directly with `go get` (`go get github.com/zyedidia/micro/cmd/micro`) but this isn't recommended because it doesn't build micro with version information (necessary for the plugin manager), and doesn't disable debug mode. ### Fully static binary By default, the micro binary will dynamically link with core system libraries (this is generally recommended for security and portability). However, there is a fully static prebuilt binary that is provided for amd64 as `linux-static.tar.gz`, and to build a fully static binary from source, run ``` CGO_ENABLED=0 make build ``` ### macOS terminal If you are using macOS, you should consider using [iTerm2](http://iterm2.com/) instead of the default terminal (Terminal.app). The iTerm2 terminal has much better mouse support as well as better handling of key events. For best keybinding behavior, choose `xterm defaults` under `Preferences->Profiles->Keys->Presets...`, and select `Esc+` for `Left Option Key` in the same menu. The newest versions also support true color. If you still insist on using the default Mac terminal, be sure to set `Use Option key as Meta key` under `Preferences->Profiles->Keyboard` to use option as alt. ### Linux clipboard support On Linux, clipboard support requires: - On X11, the `xclip` or `xsel` commands (for Ubuntu: `sudo apt install xclip`) - On Wayland, the `wl-clipboard` command If you don't have these commands, micro will use an internal clipboard for copy and paste, but it won't work with external applications. ### Colors and syntax highlighting If you open micro and it doesn't seem like syntax highlighting is working, this is probably because you are using a terminal which does not support 256 color mode. Try changing the color scheme to `simple` by pressing Ctrl-e in micro and typing `set colorscheme simple`. If you are using the default Ubuntu terminal, to enable 256 make sure your `TERM` variable is set to `xterm-256color`. Many of the Windows terminals don't support more than 16 colors, which means that micro's default color scheme won't look very good. You can either set the color scheme to `simple`, or download and configure a better terminal emulator than the Windows default. ### Cygwin, Mingw, Plan9 Cygwin, Mingw, and Plan9 are unfortunately not officially supported. In Cygwin and Mingw, micro will often work when run using the `winpty` utility: ``` winpty micro.exe ... ``` Micro uses the amazing [tcell library](https://github.com/gdamore/tcell), but this means that micro is restricted to the platforms tcell supports. As a result, micro does not support Plan9, and Cygwin (although this may change in the future). Micro also doesn't support NaCl (which is deprecated anyway). ## Usage Once you have built the editor, start it by running `micro path/to/file.txt` or `micro` to open an empty buffer. micro also supports creating buffers from `stdin`: ```sh ifconfig | micro ``` You can move the cursor around with the arrow keys and mouse. You can also use the mouse to manipulate the text. Simply clicking and dragging will select text. You can also double click to enable word selection, and triple click to enable line selection. ## Documentation and Help micro has a built-in help system which you can access by pressing Ctrl-e and typing `help`. Additionally, you can view the help files here: - [main help](https://github.com/zyedidia/micro/tree/master/runtime/help/help.md) - [keybindings](https://github.com/zyedidia/micro/tree/master/runtime/help/keybindings.md) - [commands](https://github.com/zyedidia/micro/tree/master/runtime/help/commands.md) - [colors](https://github.com/zyedidia/micro/tree/master/runtime/help/colors.md) - [options](https://github.com/zyedidia/micro/tree/master/runtime/help/options.md) - [plugins](https://github.com/zyedidia/micro/tree/master/runtime/help/plugins.md) I also recommend reading the [tutorial](https://github.com/zyedidia/micro/tree/master/runtime/help/tutorial.md) for a brief introduction to the more powerful configuration features micro offers. ## Contributing If you find any bugs, please report them! I am also happy to accept pull requests from anyone. You can use the [GitHub issue tracker](https://github.com/zyedidia/micro/issues) to report bugs, ask questions, or suggest new features. For a more informal setting to discuss the editor, you can join the [Gitter chat](https://gitter.im/zyedidia/micro). Sometimes I am unresponsive, and I apologize! If that happens, please ping me. micro-2.0.9/assets/000077500000000000000000000000001405030104300141235ustar00rootroot00000000000000micro-2.0.9/assets/micro-logo-mark.svg000066400000000000000000000074121405030104300176470ustar00rootroot00000000000000 image/svg+xmlmicro-2.0.9/assets/micro-logo.svg000066400000000000000000000172461405030104300167250ustar00rootroot00000000000000 image/svg+xmlmicro-2.0.9/assets/micro-solarized.png000066400000000000000000007712231405030104300177500ustar00rootroot00000000000000‰PNG  IHDRè ߇PLTE(3‚”–Vnuƒ”•Xnu*¡˜(35Aƒ”–???(5Xnrƒ”’(9(45B(3…™”–+5///*IPmu*3+3+Q)=ƒ“‚Œq2Z<[#,3 )3Xmhi’–ku& ˜UJ6-r*.BF;YN7€€eGUQ8As“–<4B<4#iŒ*`sQmOw ž˜Wkdl^EIbj2[l.ERfkDLUfb/*:?Rw„UL;z<0%——D$«ED#„¸#ˆ<†•'vT k„)’ohbt~ „IMZ‚qp ƒHo'~[#fa•qÌbng[A}†¬i!%‹yu•grj5<±|NŠqe&O7z [®%„:|XscX)G–]~††eajX|~.T>R%G\/{L…·…† IDATxÚìÏOÛLÇ#Ë »‰²„.Z…"Qé@¨D¢¨RDQl.üz¹rA‚ •P‡JEꤊüèÛK‘8 ^*ñöÄ­«÷²ÿÔÎŒãØóÌÄãà”PúýÚLmŸñLŸï|{ûð û;ð  àW1ÀmM&…¿ ·À€`€a€`‚ À0Àd€`€a€`z Ü#<ºûåݻ˃y`¸ð[Pù’Ø_· ›Ëïë”ï–¡³Í?ãÕÏËf$g~•÷¢¦Óï¶¿üý•ÎáäÒ}Чñ0Àÿêùç¿ë`Gl¿N5l€ŒÞ.×ú¢ ü³å³û¨*Ûo./¿þ^£äøÕ·û‹ñîúý¼ãp×x!oO ÖJí×G¶`ÇÛ#W²Ç ‚œxe=(»ùh¾šÀÃØÂîIa 7oö.v:6ÓvS-¦ÕEÛe­ç—Xs|.kO<‚þ1ýu üýq¿úåò}S'\ãiyü€&àOãŽxÌŸª£Ç‘ô6”~þ\†á¾ç3)¾{ ñèØøoVœn"ìa$¾ }뮎Çï] ê¡3¾a€Í4À#',ßy‚;zV´çÿ:??*.{»LÛF\.É™†–Ý|d÷u5l€Å á·€ÔXX^ù¼}pùH[¾k<0œÜé¨nNg2™§yà¦õ×mºÈ×·@ê¾fL¸"ÆÓòøÍ1À£“ö&Ûõ¬ü ×ãhzF?2ÃpßóY Ü·@~”óvòfïü¯ñÞgá ñé›c€mÛ²·ž5¦‡Îø†4Ï^Ù…qOpÛ?“Ë¢0ò¦¶Ï'Ëh€‡V“³þçXhÙ3À…™Æ pߣÌçÁëñúw Y†—NEË&»“©r+7£ï–Ÿ€n^ÝÚ­žpEŒ€b€Û¯¾Š¿öóöÚŠN#êmý„¾_¸ÉúØ .—ìÞC~ºÔ›÷¡O ŤoÌ¿Íd¶NÆí­þFô°:¾a€M3ÀíÌÛn}³j‚›+%—éûH•l2k2À•bŸ$°´ì`ÛÙÞóoŒÓ«î-lšãÊyÜÀF±#!އnba À1À>.êô8¢Þ†ÑOàûe€›¬à¡Õ°Ï Ü*>n€ùt)ž+Ùo;8Iu|Úh€7¿¶{‚;Ê>®}ÊÃÉåUƒî.Ìȉ®0£ÏG¶åHVc8V.ÕÛ=}lI7·iø~àhý…  0Ì·UŠÉCGÕÛú |¿ p³õ±1Ì&h ¾ŸÓP|®æÏM72ÐÜñ  hšnåªë nyÑ¿ö•óNÒ¤Õw`0ÀáVäù¨÷›%VW¨àÄîùxqs™/Ò‘˜n²ìd¹rém¼&๬ø7/V¬—OœüÊêëò'dRöÕÏHM² œ9?*Úâj`éöXlãÝQ¶p³÷Þñ²k=Ý'ã/bìÏ› õøçÎ;.³XŽGÅ>§½©ýõñͽ.ÝñbØeÛÝ yìÙäæë½Ó::æ4ŽQ½~Dhh}Áý£x_¼Mﯺ ·~¹ý´?4틲 ÎWñ¨óΓ:áª{}ôøë'ñ,d½y+û±¢ƒ¯·¦MñZl€Û?Y½ÿÓèqT½¥ú©Ëÿ<}7oöNû C¢’µ?v)ùU“o4ò"éÿ|Æ|B¿"çc{ý z£ê)?› ðê£&i~¡/½ýóM{¥øtó¿þÕ 0k9ï~e}{jã;„ÞEÏÆñx0¸MÜ…ìü)Ùx\\;1àp+r8ùèª$Þæp p÷‰³æàüŸq~3‘å¹tÅq¡8[ðı5ñD'ét‚'à4ÃÉ_¤,Õ_M°©kñOu °{z¿T]Dd&î`¾äá˜Xøçä† 0‰‡’Î'Ú»±nùe”ç‚4ä,Âè%z‡>ýmÙÔ‰»C=,ÕgèÀûãmz™ 0i¿ÎËíK\»hêOÕÖ±î¾>Ú•ê'ñlLÛîÄÕ½‘nè_Ãõ&ý"~@« p.oMiô8ªÞRýÔäÿ'}ضȤUÃÀÓèXWLkä|CˆSý‘Î÷Ü”ï úÕ„|,·Wk€ýz£èO`~Vâk±>ªñÈó6‘Ã&óåz“øÔù¬žfÒÇ>i °ÚžÚø6è]ôñlœ?ªn?¶ÖVÚ÷×Ç ¯÷k/h3àîU[Z–%|qf½ì©àÔ++¹|‘9Xï(-ð7=Rg6Wíô1ÛÁðr>¹×ÆÐª—๥eR¿“`¯‹ó{¿_eë`ÿöܸ½uúy{ÿ›x5†àwÙåuë啸ó‰z|&“a©½¾¦ñPäóñöNÛ[߯¾YŽ2‘ã™ }˜´Ö¾¯0ïÔ<Íóã3Û_ô·èS¯ŠöÛaêĪc€åú ý£x)Þ¦÷—ÉÓö“þPÚ—f‚·uøGfû:Ò׎ëÑŸ´~96 to¸³¹!ÿ?cê_Ãõ&ýkŽÐJÜÞ>º{R²}o px½¥ú©æÿa{~¯áûîÈ3 ®_Ð9ßPhþ•ÏgÌwýŠžI{µد7J90?‡1Àw©j:ÿ!úçàÄ™ûësb€ÕöxãÛ¤w‘dziþxÀØžX·¶.F®óöÖïbQ¬­•6ƒ»"GÕ§æøúŽfùÎÉmé ÿ^¸s‘e¯rvy:¹ë^eÊýÃÂR‡ÞðˆT,¿#ã/“ú{¢b~ÏÛ¾'fèö…¢Û”…,‹i Ïõ s‘?n3°X5ÀÒñ¬Ä£\é|, ÛMðEÍõ¿«çlçWVª@?!Zue§®–ê3õ*ðr¼Mï/³VÚO °Ô¾Äœ»‡ÞÇ”wÎ|Ç÷›ûSW¿?žÔYõÑD6Ðùucÿ®·¦ã´Þ3<Ú7 ·T?•üÀ U\è~þÔª“$4†AÎ7¦=Ÿ)ß™ô+j>¦íÕ`IoH9D~6¼|·úHã¡ó JÅ’™¢ûkÚKã•ôêŸÏϹœ`¥=¾ñmÔ»¨ãÙ<þ×ÛÂñòGŸùrX•¬øu†@zE7m>ÍÛ;Žöž ·Þ†¦“3üÑÚWÖÛŽÎa–W]· ºnc€Iý"Á:nã|ï½Þû¶³,íº<‘º™f¹šàÙøí °õKòùx‚®ÊD¹d/©Ç³½¶ÊÅL¶C!`rÉ•½ºXªÏÔ?—âmz™ °¦ýÄ×i_ht}tõKã#W‡”Kâ3cÿ®·¦ã´Òó…¯v¯Ö‹¾g  ¸½¥úIó_Œ·‡t¿çt†AÊ7º„çÏ¿J>2ä;“~EÍÇ´½:,é )‡ÈÏ&|§úHâQæ¬ì¯io ¦úç5uVÏÓöøÇ·Iï"góø<`,¯óƒHƒåa[ü*p .“{åz÷"]̲Tï3Çç²Þ;$¬ÌÒßlj²·¡8ñäii¬Ãy‡)³½Ë&Úw8L‚Aê ¶¶ G:¦}Ø·ß`¬Ö5Ä?äyÖ߃z˜þ RVâ!ór>þˆÎŒ«c¼Vz<”Y·f!Héý<Ûrsøýõ¯ÔÞÁªk€¥úLý£ ¼oÓûËd€5í'˜´Ï=>´º>š/Ôú¥ñátsí"û×p½5ý? Å˜«íqÖ[Ë`€Ñ[ªŸ4?øÇèÞsÏ/è•òÉ¿J>2ä;“~EÍÇ´½:,é )‡ÈÏ|·úHâQæÊüL~ZÙ_ÓÞ@LõÏg€'ë=MÛãß&½‹<žÍãðP ð'Ë~Y½ýöÎå'ŽäŽããvkp˜e˜õă—]a³Kd#œ¬ñ ¶¢ –¬°=Qâuå†;‚(b#d`ÁÖ® –Œ„x%ó°s°%)B²9­’uPÖj“kŽ‘rHrÈŸ®~LwWUWUO÷0<¾ŸƒMÝÕõøñûö·§»ê¡6Ú_Ôt/ó¾Âþ毰þ€êàš+Wõæ~%Jo)ýdòóª¬eÖ‚ ƒ?¿³øò/'‰óD¿"çcº½üe¯Tò³â:À{£T}˜ë ö†­ïÚ…ÙŸÓ^¡¦õÏ5Àí#NÑ´¦Úã‹o™ÞEgiü©®)ôçG­™6À/x‚<ëõ9)z›c€kj}‹ö7À~µ(jÝs¹»dùß›Eí¶gC;_—Vú¡âSJÂ`öà¨8—’½¢K}ìÞA%?ÑÇó MmÝÌXÎ~“†6À¥GšÜþ`Éø ¼UߨÇ+è|žöÐí`Ϭ¤†R–c€ÅãÉ-ßä’ “vV)Q_AóÆ€ýn€ ¹M-*àPzKé'“Üw(]n{X`µ÷§ó;Oþåä#q¾“èWÔ|Ì´—Ñ™–çgE¼7ú˜ù 0µ çàP˜Ñ?×?ÙNì‹o™ÞÅÏ’øVÜÔ¡»+"½?\oC6þã ò©KùÛ~IÈßNH 0É~k­ö;À7ýw ßd|n¤§–r§¸$àä^ßO6¿0¨+¾3s3‚fߎh€™úÔÒ;ÀvZ¶ÛOÏ74™ä8Yâ,·|gª]ÅËÆ'Pà+5^Aêî–Ï´_b€-[Jf,ÃKÆ“[¾?>È[Kmöš ªãØß¼ñ…`ÿàBê…Š§·”~2ùÁ|‰6 +š3i4_éüÎ%™ÌØù—“ÄùN¢_Qó1Ó^F?$X!?«à=ÒÇDÈw€É$Êm‚ë‘2 °OÿܳºV^l€ýñ-Ó»xâY€Ãj€;oè£ýÎ3Y-¥¥‚ß&3P麻Aj€Ó†Üûg5.™Åæ%2m`WÇèÙÓðÝrVkÑôP³&–g€ÙY #`¦>Lÿг@Û ú¢qž {|¡Iò—¹1ɲ­dù,Ÿ@·ëûx1w¬™ò™ö‹(XÛ†FàSƒžgýdýÃŽ'[>ïuè7œÁS߀þ毰þ€}`€ëŸh}Ë 8¤ÞRúÉæ‡&j}qs2åö«ZÊ1¨þüJç÷ ìüËËGÂ|'ѯÈù˜n/£¬Ÿ}õ«¶>Òõ‘ÍmìàWvèp@ÓúW2Àu+\}fÚCÅ·TïbŠç$– àè`C‡SóöwÁ)÷•ß`fFד‚º³°}s®v¡ÁL†f:%ÿ“L_ð®gÝ=’§ÆGRw”¢Ëk€¿m¯ƒg.ˆw:ºfê“`Žõž¯” ÇGtk9êxæà£çÞ-wÝØ&ëÆæøˆVÐywð“ŒOÀ;õ}¼˜úúËçµ_d€«1òÈ”¡ÏA@—^+"ëFÊú‡í¶|*>ŒNnëÝnûU °Óßœñ×P}ÜuI/™^‘©·´~2ù¡qDÏ¿°¬»n*QŸüW’œüÊè9ùH˜ïdú5ÓíeôIb€ò³¯~ÕÖGº>ôõooï“]ôþa 0­Ž®{ž+½Ù+4ÀT|Kõ.b<+ÄàÐ`ò€³9á³ý„³!Ä}ä]¤®mÝ#ÂØXß`z;È'Š{õÔZÿÓ©…Mó›E²l1”FV53ðÓÙìµV+/×­èùùáÍV½û¹š`På‡5À‰¦½wùéÔ̶y~eœÍºK©llg¹õaªï|dj†ùÇÙ©%=;É9ž¤Æ‘¾¡åÇF‡=Êq¨[jmkºUŸœæ®Ëœd|X÷×7öñ¢/¸¨òyí÷Žû¦÷®o.é-A“`¥j©¡ÇFî^–÷S?Nùt|™=KïÓIÆWÖßœñ×P5ܵ»e>f5sC³V_ õ8¢ÞÒúÉæ‡‹ƒÆ'ËÃÃ[«KçK†|ÊÕ[FéÏ¿<½å;™~EÍÇt{}’`y~öÕ¯ÚúÈÔ‡º¾`éêÐG3¦œe÷W5À޾ÑúgÐîáá…ͱ‚û®®O©öÐñ-×»hñ¬€Ãb€É´Ï%L;С§vVÇrúdÜäz}«ÏÑÛ¸ý†½LA㣂uvidSëcò(NÒ³Ž¡s_ï½Vs€¡µYéòCàÚ¹ëð¾’ê˜Pšºð‚Ye'áSõ¡ñŸÏ\¨ÝÚ´okRÇ3øªî h ÷Ѳ.«2“m]9Þ:‰¬À‰Ç‡xª¾qsBù¼ö{ǃißø¶ù˵Ù`CH—"4_–÷3œœòéø ÛnˆÇWÚßœñ×P-ÜdÓÝU"·ùy¾GÓ[F?Ùüй­y²· щÑËl~eõˆ9Ÿ?ÿrò‘(ßÉô+j>6Zæo/­O2¬Ÿ½õ«º>Òõ¡®/xWÆ;¦w{xû+à’¾Ñúg`›ÞgÜë%ú4*¾ô.R<«ÄàÐàú¹AòQjg¸Fn€Ç·ý/’ÐÛÁ˜¼Sb=\;³Ú£åwô›7ÜŠšu#Ï^'ÁðüÄ'_v¾ìÉï,gª‚A•Ömš^ʇÏZ^6²¦êÃâ=IÐ=Oó©ãÙ;à3†tR;‹gùÅ_!ý·ØPZˆBf€ÅãÃxo}c/ª|Nû…81nßT 2„uc=F“H…¤ýÃ'S>颿íKñø²ýMÅg|ÅõTÉwŽXv&µ³U£`€Cë-«Ÿl~ éAËßy°Üàó«¿ÉgL~åè•+éüËžO”ïäú5SíeôCf€ò³§~Õ×G¦>¾ë þ‚µØðä,»XLëŸe€ýÃ+0ÀL|³ýs<«Äàp`.sÓÓëÃ*;Öw®ûòD-µ#¥'F“É£4‚î4ýª$³µâßïqÿUú|tù²öQMzA."¶£X‘I5Øøàöw õ”c€ÿhrém¾®7,ðÆ´!· 5Ö[¡~šeÓ ùU®Gtþ ›ÿ•òwÄ|æmoEô)DýöDÃõW¦ý£õõ­ÇñV¬ýS‰ï¸ã¹ÜëÀá0ÀÖ»H*{¥³µ¾4Coƒ=7À ,êV*»ìA…ÊG|°¿ °Á±Òej„Þ"ß ’éd&^ÿ[žþU<¾ÏÀ— º™ôÜbÆú!`Uˆ}^>â€ýo€OÄd€¡GúŠxÀÃh]Ô&?~:µð2W‘I/*]>â`è8ŠúŠxÀÃrÈ93ά>ˆå#>€†£¨¯ˆg 0 0(‡©]sÈ¿&dùˆ`€¡GàHê+â @Y¤KÿÌò0ÀE}`€†`€`2 ÀC`‚ À0À 0 0 ÀCo`p„IϬ¯ŸŽð{€`€Ãà+3›ÓÓë !ùÂ¥üyÑvl´¯L¼HÚ?5Ý õA"`[FØý÷Þö‡m_Øöžº”º]^-›rÍ—Ëêßö­¥!ÂïQê«aú?ìßÃ^Ä£¨þjã];7Ö£å'†f¥•æ þý‚#f€ß:óÆõ@l‰íÖµÒõ3ä¡Þ~õ;wî³/[E;Ç^ÝëL"ñÎÛo~OºóßÿýúÏB•^÷üÕý“ßûO[Àv0o\¿÷»µg1ŽÈwN~ëú‡©ß÷ÿ2îóŸúý½O2e6ïÓ?½ûE˜ýÿ÷®Éëï²h|ôêþw½ö$@¥ ð@«Þû W€Ÿ/é&wÉÆMwh¹&2ÀµjÝgÛvj»Z*N·ݾ¹>Ҫ轧ŽÝ>ÙñÞöBœ4.'r”_q¦ÿeÕ0tTý}ñ¥4Þ+VRm“þ=Â`~Òc‰aß疺μì1CZ›\4À·þuÎâÏqIÔojVSÑúÏ××þkãÀãßûÃèeAñ?>i¶Þ±~ô¶H®;qâÍ?¦[¥ó{³pYØíŸ¨˜:ÿÏOzŸxí/æ‡_ÿæ‰|­¼¼Òߢ °¬¿÷„ÚߘÝ ¨´î|”Ó=øÊJAïÛ]]]* …2À]£¾ºôv ¾ØòúõÂ¥ÔÝŒýs:›Íz  ·e„Ý¿ ¢ÏïmØö…moT\Vÿޤnf"ü>FÌ«˜þ—ý=T!éúûN§2Þ†•Ï ?Z°Eý=Vš½>qà+Wõ ClÇrzjÞ¼ûüC=E>XÒõæå üßsç¾ü?{çÕ‘ðý•çfa»À+¨U@WW`AKh‰‚?(w­VŠž¢¤Ò+EÃ(¨w)DHZ+ñúXµ©šxþˆ&œ1žÒöõO4¡Ñ´1VZÿÑœ¦673ï½Ý7?Þ¾},l17ßDÜÙyï;3ß™y3Ÿ™ïkMLmÛR>N#Ô]³ýhß»°ëpû÷é€ËM·ŸÌVÉ:Íûœ'c“¯õô7t8…þ°Ù]Úl=?/ë¤ÉXXeŸpØ/}˺+uŒUit¸²ÒåÂîѱwDäOsìç÷÷ÇÅ üÂ… —‰༳]¶ìÂÇüÃU…‹?’¸îØ—’œ ¶:@‰úE†Ö¸2_ÔjøÿQH:‚iö€bP¡ç%`²üFËç‰ É¾B~möûÂØãÇ€Yù7jÿ ý!òí‘Ì¿a7`EÑë-À\^RŽ9F՘Π[]5üp¨ý—·Íg[¢1Þ¶ßL»ÉUéŸg à»heÍO€Å{n÷Óîû7Rî=t?€¾=Ðß¼»ö ûÛ)šüN€'.>ÜåƒJ–Íf]£¢?ìèqI_4´t%d_îh IßÒÅÕo‰EÖO–O­Ï“Q—’t¨°oÀþ^`滟U~gg}¡¯ñrGOj(åà3lþݬž û rì®/l¬`•—oÊk,´h°c÷aݪˆ¹š4œß`€EÚŸ¡U>¬?õEµ/uzD{¢Ú «<û Àšú${nSyá¡?böÐiO¬þ@ÙSììjJ´û;OØ› —IÀ`œñú r ÆØí·ÒdxéNKkt'í¦`j»sKí"úŒ¼ugˆéYɳÑþA 0tÒ¼óšÖ€×~ï!àçm€*«vÇ€7ÄN[‰UF IDAT.õß“æÔ?˜QáÎíùÛΟöK=6éuûZ—£³ât‘y]ÀÕtü& h&Ó—ô›±ç.—ûÿ¡o÷@7YWáSKPÇõ\ëú6*¿tùqûú£ëxYôIö †bý«  àÜò†S{οfÊÓÙú)˜­|<<2úLÙ¥ÓýÛïÈ/þßLÈ0kÕXÓÞPn?ñŽ>» ¥_ù½÷ËÔ ¾òz‡a2=:ž–øMÖ]üü/.\&€§à\–PÚ3Í–2BØ©ò‰e£‘Y<¹A,± v™ïSøì„>¿lš€(”(ÑÒ–U±3GvÓ¹ZA,tùp}pÂ]ê.AŽuј>ê~Fù×Ë~ʤ”uʇ‡Û,uÊ@Wâ[1› À™’Ó_¹Fqýt¼ã¬Ïà$ùþÒFfŒ3ž_£Œëc–OÝðúb´/ÆÚ ¾¡þCµ¯àú JÑXãöÐiOŒþ@Û3>+жY훈'ú.“€§gØ–¨}LæõZf¼ËoáQÚ`ŠE À©·VœDË|¾’…µ6(~Z”üÀ ¯@|´Ÿg=Ý¡<P¨ã+3â]?P 2‹qq[ðú]~a@vEÈ4{¥mÆ€×k[« ÛsÙ‹‚dú@ÐgEe^z×,åLP…?ÉüRå'ìCêƒÜp¹²Z´šUô ¼ܾ¶þ]ŸÈÒ¯´ÜþyvE¿€¸nxeOÏ+Ì`M{ƒ$~“ï¿ãR€¶òWIç#L¦GÆ3'ˆ›ñŸH¸páÂ%sÀRWÓY_˜ýaÇ匰-»ñßÇà¤Zæ‡ 2ƒ9;ÀPg/ ÑD0›‡w³aUìÜæ³­èé+>daâ [ˆnÞ÷eZæš^ÃÍçl¥é!èÓ`\˜ð·$TÕ[–@g“úèû©ò{²l¥Ð'oKWzå£K©©ÌU¬:ÀòÉJKÝÕj€!K\´~u¤>À¯˜õ;•k_›Ê(Nú#¯öžj®¯ùá®yZ}îO߯Â÷0Qúq0ûô‰wôé‹a¯÷„HÀŸ£ïµ}öxX~×f°¦½AðzŸ¥ÖýDæW´¿‚¯¨b„ÉôÈxæ¬þÝ\¸pá9Ÿöõú¤·|ö¨_ƒTÚQ¬ À% ø©@2LüÀ§Ú-Š"Ü‚)*+J„䀙l|V#\@s¬‘ %?ž&ö‰~  ¯/ó•‚TŠƒ0¹_*¡áû寄>r 4Y>BŸ'£´p‡kaÎŒ®®¥°¬¤>–}°ò'­„+—(·¢Bùˆ°³×²¬M. ã³l¾¾©h/ÒGèWÇ#û,Í—Î5ÎOO^ax{^æ«[?¡ä7(ö§ô1˧êªúrìö€‰öB¥o°ÿ틪omŽÚ!˜ôû#a†½ÔõÃê”=Û|Øk°ÈúÁâÉþÁ…ˤà‚,zx)IÀ\Q†À`@¾p»©|RÞ€Àücü ËzPPpô륩pç¯yQ+‹°î?Mí¾ï^^yïa¹ q™½3£/¡^L®¨êðüé„mü&3".À;kŽ¦Ãœ¨ØqÒÌ<»K¦ô¡ì›ÄOcçn^$ŸìqÄ)êôó'½L”Ÿ°©ðÎX¨Ê¹UZ‚&Ë£“> À|ªx®ã3×Þ•z|æÜrZ?§fG¼f›„v‰PÛ‡½£C¯‘ðC9Ö`-{C }Òwý% Ýb€–!:L¥G^Ïœ nˆË˜ .`ÛŠzKÓ±}‹ÏfØšà¬Î–––Ãõ…`Œî[ ÀF<`¡IqÈN°â+Àìµ ¡jUÔû¦¤ZyF'Õʼ£ ÀXÞÁ²–{ RŸÞ`BŸ'òO|ÚþY&üŒüQöÁÊA0P>2\…”9Ö0OmÃí¤ H¾IýX| R#ome°s¥Ìy"¸?eâ{ÀXòk€1}Ìò©ûQ_¬ö€‰öB¦?†þCœÆë›5=QŸÖë¤=ÈüõC•iOG1öÞ%ª¿«ã {sá2ðÿ²ùw tB…¶@›At:˜+ÀiƒËå0ŒîAx(X[øš5ÓnE( 2ú/¬ÁîMbœ  Òö^yC.ë ðVâ̯:œôºyZŠ|=ä;ÀvÈ¿k9Š"ÓÏW¯* ©J¡JœF5"BÚDB†*U>T¨ R¾´R«*êÌììÞÌ›ÙÙ3Wš÷Å7ÞÝ7ófgoçwoæ=¼tsOäp¢¸†Î»§Àˆ÷v„ü±²ÛªÍ܉mqw¢©ûá¨RŸ€¡>4áߌ1¯%~Iû|8ÆlâÕ²–Ka”»¥?Z V”Ò_-æ/õÃã¨û¨cPÀ™ã¶«]%ùC#ñ›ö}o<ÀÏ®¤Äˆ=ÆÐUýJÆgoÄ^è¹]ˆx…þ|а’*ÎÉhèot+0÷«ÎÊžìÑßè܇ö^Þ{îž_ûêßüçßGŲP<_òÊü°ðyÖ߈#ßÓ|„«¶pá¯:묽»äÜÈ¿ª„² úœßbmÎo™¿´3½¾¼º®)1en‹8Óz@,ª°¬øÄ©a{-g²¿<óÑGŸ€¡¾Ê |9ñÓÙ~Iû|¸´JiŸPNÏcA›<· –ÍÎyX3Ô§’ŽýrN%3{Hu’×t’óN%pD'bVÜö` O´}Àý’Ž/_ãÖŸÅóØO_`†ý¡O‚}:ãEµâÃ8ŒLkÆoÛÓI7 –7ÿ:Q ¯ûE¾e¯€öû(öhe ¿ïïð®K³¾úÃp@7•µŽ}¸Öfº àe/¹K¢s "v¼Üž¨ `)²¼~T+]¸Mçã)5þ Éð§èæí‡ýõ!6¥½Ô°× íQÕ¯`\ûì ý%ê÷Ód´çŸUè,€|„eoöèo7¤ keïCjLOˆ/s•8áùP°9ï›h FŒyúüzÄZG9÷td/‡ñpí)é 9`¬@à‚=‘ÃØsUÙ]»$•¤j§ÀÌÎF/@Œö_Á!cwâ¯ifç¡t*-èS0Ô‡£Þâ ?>Oøeíó`°•VÃ>!Jo/^d*Åæ…%À"èÇ ñà´µŸ#ê×Üêö½ŸXçG/v¯/údÕÞ`Ìë“ØÇ=à~IÇ—" 4;^„ú³x~<ò?&ý¡O‚}:ã¥Òw ÉÓÙjnÄÈTø™U- ûìÿ>ÌD|½<;y€=\€ä¢D"Ê(úOìãÄõ€ÖæüôçŽPðÖ„¤N?ÎÔtÓÝ£€‹·ñÁœ°¶h¹'óöÃþú2y€—†ö¨êW0^ç<{#6…°Ð_à§ fñ§¡_!꜕ÐRXÀUUŸ»ò£“ÖˆiWëƒçË8ïÚJóÕaĈ‘§ ÀÏ´¥­…ÎG>C[$þžô…Ü™äÁ–EÑ`4-nJŠ–´X›Û";Ôn»KN N{b,°/iYKÕ`AŸ ,ýþ`À’ö)=À³ÚÊdói*)ßñ êÇÑlêLË=Àñ «›ÖÔ!K£ùc$UPíŽÀ@Ví‹öqϸ_ú`»ýAXçùy²œ„)Š|Ç“ÀãEoÏ¿#Ó€ñû•üÀœêöæ_?ð—L`€ûÅ—@;ذÂùä'nÞÕo„qº\(3y‰`°ÓØ €½—@³õǶÓ-²¸~êæƒ8ã%Èo¯Í¡!³„öBûaÿ@}€¡=ªúƒ°Ð_@20{ïsœ8k°G­1*x?¸?Ë=À~+:8v£ðYã6bÄÈSàT•Ɉ´Ž]ó|Ú€‹kx0eÉw\N%×A‡ÑôxáY'ʸ”Öê™'GéÇi`æ)÷ ú\c*»-­=À"Ãö©ö³Ü¦e(/oGŒp6Ò”Ð`N¿(íæô·[{€7ÀõGȶ߂å—GâŸf”U{§À¢}üó ¹_¾{€Áx ÀÏÏ`ØŠñ$ا3^{€çw‚‘ÿN“÷k}»4Ú¤'OR¦›¡XµX ‚åáO² KžJÏß°ˆª³7)xnp4z°w,¶~À´Õºré`~/ÐåÛ ó^gŸÚ+Øê…ú\ŽÙ íQÕ€…þâ%ãN|Avßf½Ø£¿ÉÂjvuº?K÷û°}SÃ[;#FŒ'y!Ž€%x€Ýmz1 àô·[dº&Ùn”¦©ÁJÇn¨¿7’v|Oü„ý-ĶúVÓ<­$aë,µ¾âëP—ãûœ%Èœ}@ŸdɧÐ>¡ø<À½Ví{öœçTeŸ¬Œšby-—øB{ùãkêˆ&Ä“ûÓ^y€Ù‚ØÉÇô+/‚C§ 4S`Á>ø<€û%_l}`<`ç‡_€a(Æ“`Ÿt¼ÔŸãâ Ï;{ô·#Ó€kÈÒ«úv7–༿óÿÞ•{€1OR‹J 2Ì®Ñu¤<¬€–- ›]g—pcå¼_j-Æy{©34và˜7¿˜+ÍŒëG¼‰ÿTßÿÌöà®~#<ç[!y U†þ‹‹°½‚ý  >èìQÔ€ý€O˜¥i€Cnº_&0[ö`¯þÆûÐ>Ðór© € z„ú 1bdÚð $$à3úK_Äx/Rã8y!W÷Àë W½[gÿ¾KZÈ=3¿eqú\TTÔ‰ý¡ëh NGâ;/µŽÝ–ÒGò  Y·ÍO¸ÑåQvŒÊE^e0YŸ¿z¤Â8âæ9eÏ/éíØ9z¡¨¨õLÒ6$Õl­½xppÜêX¢¡/ÿ¬UûÚ®ËVÓ»‘ÌîFÆ>^Ÿ0á—´OèÞþêntÅè®]WÏ,QÛ'+´¥-/'<¨_ô€F¬õ—.X Ǹ Xn}ù{"ñó/\yG¿^k§r8ïƒ][o]aMÀ¥EE'Ï. ÇäX²=<ç£K}Wr¶~¬+”ÿvaÞµ›èû+HnX‘÷‰NýÅÛÂy×NŒ_ ¿9^hlª ÿçê¥#W¾çh¨q£¼½‚ý  >èìQÔïÀ¿¥ß§" úyÁ¡¯Ž ÿ÷ÏUU¢XýðØðW÷©+–)'‰„N‡z¾¨ªzøÇcÃ/}ßIƒäçêÓàØv~Ä1bÄÈ“`öÙ•&êêOœëKZx)Vueíß7ÒlY7e¿Hw&×s¿C²lBîVG'äxy'€ Ù¶íÞéL; AɉZ·²‚”]&,³m´,mLv¬ÏGís:ľ>6Tg;¾ÕÑ·†”ã;gf¢0söñúÄ ¿¤}°€ýõã´Åd³Â>iÿ×X^ÉR ú…ãýãäøùclh¶¾’3i»¹ÿ‘¢/¨G½>šE{Eæû‹íyûÄç!Êß/ÉøâêãÇS`Öy~Øñ•%û<|(Æ“øÚ«þj©ÏQsaGgëªë[r‹.4©Ù]^±ïuËCDõO^ã ¿²}t~èþ‹/[ŠV7íí®£¬ü8ÕÛ+…ˆ,_ùzu ÿjlâZ…æ^`w$8Ï–ÚÔ§ñöF'ÀDÿ˜û9^ÊùEÖGÌ'ìgÿ‘Ï¯Ø 09Þó‰±?(ç‹§ÜB<Ûˆúu*ß$/óë«Q”÷·ßºý®7ô`J€…ûæ_oë­Û|—ùp׊²ôÝ^R€ë.OÐyç8¿€Zë.ßÝÁ~q¼ÔXwq‹Û¥W€M|󥯬ºËký .S€'²ònè«ß4^¬¿²»x»(¿šrž=7Å ú6õ ¨É5æˆ`Éâ/pD{û÷³ÖŠoõŸÌ]žâ0ÝÍúµ˜8¬,Ÿ ³í_l”n›!V¿ë«ëíÃÚ;F›Ü̘%Àêù–”öKÁiÛ;Î{M:˜®O÷ž“~Ÿ€x 0“æúú£@gt+i8)„ìSf%>†y*ÖôãqbrÂiÔÃeóQ•Ç,ß@ÿ"Ù^z)pJ9g<ãG¸S.—|WRºræ«_õÝ•íUÛäã•ùNàþƒþyÖìõzÝH¾ˆ­[g¯méÇà A× ëë6}+s`:Ë ‚s{Ýœ0ÁÝn/NpŽ._ÁkÞ+ÂíÝîÂ…fÿÑSbŸLÜ΢}i¾óÚ(k¬o ¬ò±ã¿XÞŽ‘Ÿ(ûcôcÏ¥¿ü /ǹ©ÑþÁzr³26UpÒF:ó(›«Ðjº>-†.É;Ï@—°ÿÚ`=ïreóÄg-ƒÀ¹Ï’â7Ê›;!?)†ý!>Ò¬‘UYI#Àâ)µvÍÇ à˜™•ñŽLW’øšËêSeösCSWè9À©“sB#Žw¾ NI} €8 pÌdäð“rW IéxÊÓq‡_@r °=qãï˜í‡÷Ç쒔خN U§ÍÖDù/S€“:?)žo&SÚÏEv&!@€.žhËÞöN®ãù”Ödž׵= `Õ§FI—*'_ &šíöe pç'ÕóÍÄy"Kº3Ù"|€ À .¸–K÷; ßl<ûþÓh† À n¼3×QSù^ŠŸ>¼Î‹‘@€D)KäõüjŒ|'¼²'ËÄa‰áy¤ À 2 ÀX0 À` @€±Þ`Œõ€`@€0†`¬¤¤ád}ýÑmª1{A.Qôp¸8fî«ù ø{’Å&àxÒ¤’ñ#õ ß\Uj)ª©Ü¤G>^FËËáx>žùÐ_~ŸÜ¾£ScŒ•ùt™÷Êï9QU€ý‹ë™'ÔâØ ðæÏî}î&þ¥âþ¿ïefÞû`ˆæ¶ýûåMÖzçxëÕ«MO{#þLþ]íwäÝ[‘Õùsã?­iirÎciã~&µåÏm¬´¯0´Qß/ûu¶%ýFØ­Š«n6öÊ7™v]ö#µÝ&ܦçÄÚ‹ûilÔ{ÎàgÂÅÇÛ=§ZÛ]Œ_eœ\ýONœgo6fÕÕ~¢¹ÿ»¶J;Wú"cå{öÜl,3Ý €ÄðÌA¶Ç Fg[lë+2«,ÈürËw¼aâÀ®Pn x¹ðäQcbÕ'×öxø °áötµïi¯.ö쓲h[5„D>^:Ê#úްü„ pÔóO‘ïÔžß<¸|°Ô¿Îx[RÞ *Žƒg¿/óz>῟eúÙÈÞBx¹ƒÓ+žò#f©¯ÓòÙo¨®º::\l:Ê>m@,x¶(Àc¤ýÙÄÿ6Í/¾ñ`¢>\xj‰4ML¸‚àœ‰Bòó®ôH”;г òTÙݤc¼c/Àäø*ã¸ö?4×tüÈ¡~¡Ýú¢Þ/ ?ñ§ÿòªÑÌöôœ*þQW{q˜5¿p¡³G7j6!ÀŠýW¹Õ‰ˆ´€Dpñž\›L€Köùl3®¶¶¶ø*™±Ú‚¿x`¸¤ÜV#,®U¹6ÇV#À»>ÍìðÊ-ê£ÌÌ/Goß¾ô*_’…×?×)D&§ðe÷廫Kÿ+Ðd1e`úsábÓø©Ö—¼Ñðàg²ýø•7í§&×¼´_-MŒõ¹ é='œ ¿c¶Þÿ´ø™môpE…ÛMlÃ7T6[Ï I¨ ˜íçFëïØ 09¾Ê8ج;I’û홬.ÀÂð˜#Ì.›weoÛº5­ùÚm&³0 ‹Âí¿Œ`?·£-;§¥¤`ñønQiH€3ú•RP¼†«-È…ËÓ圎;—ƒ™>Ç“ëS_È9Ϣ䪀pT,H …/ò ÀQÎ?:ß`’S€3ŽŸ‘þ×<ȶj1#އgo^ê&„øï™nÑ¥T¾¡Và¡K¬s%vnóF(À®u‹ÝQtO`¹Ý¬O†Ýšæ÷Øø 0Y_P±ÂÈ‘à¿éc¶FûÇ܆¯>UfkÀ±à^CÚÖm{çN–}n®`:ßÌüÇ«ÿÕgD®e¥¿!ýq &=â_0ëViA€§j[×°ìˆtÆ…¢=‚ÏjÜöõ#öëú©u·°Ãñº3nT€ÇŒú:œGRQ€3ZlkÏùWðèxA€c*À3}ä±{:Žò Àñ`’D€eëpÑø© IDATŽ0qLo‚Ź Ó}_õÜç‚/Ò)D—÷Î)9.BŽJ€ ~<î≱¯tOŒ“õéàÂ…æ¼7Ül™D€+½6Ê:«{¢Øª»ósÞï»B€é|3ó·þû¯,ÐÃØâäOè¿\V`ñr~^ÖËçí1I,´Šç‡±ÎRùEjE™ö¹ÏQ ðÐ%yç±€äàš·É p‰ð§ü—g:V[sFßªé˜ØÁ!ÀÉ,À®âR:Ž­ò À`¾VÜm’ϱ#\Ç»@D]Ìàçt çÛš×ï&X€;&*oÿ•oz#Àd}ÚìZQ–¾»ó½1`é¤Ö‰`nÊ@ëK\0ofþ$À±Õ¬»¼ ÷?ÚF)Àâ”0«h®PÝ´|#í3,ÀÂ7L$¡w+-8$Àcç“÷º¢c•Yß°‚.¡W€ù§lë9ñrbÉÚÆŽÜÀ=6Bº|xzÄì,·mà\Å­->[@hø†ÖR_Må!f{BÂ8É2a€r{I ø†ªRYô '½Y@Ü^Çûåí)´*ß³§tÿ!“ðß ‡íq6 Û7ug´wø [ðìâ‚ù ·£·WôOhïrËCò_Oé˜Ì—2Ÿäò¤/º‹x\]™oE{ À$™g´ô}/L+Þü©t·«ŽàZ[³à/~ÐéQéµ—ïnñ2Øy쵥≱ºƒìÙùñ­?ýe{°}ßZ&ðJà_Ä—ÇÝúçßÖd˘Ÿ· íÍí!vÍK1*Ë#ëÓà‚gíß@ÊlÅýÚÿõEçYR»¾ºÞ>¬½#Ø':f5Îù^8©1*€aÇ»ófg9ÏÚçzãíŸÁßU`j<£ƒÎ73ÿqë?%œ³‰CcÎØžÞ”__ÍÒ}Êp§GYYl ùÿìkl×€gÇãeµöo½¶–`ÀŽÆoXˆ›‡‰,Æj5 F1`baSÛiiKC FÁ·BBSA8ª‘¶4n„h›?ŠDBQÔ?¤È¿J½Ïûš™]¼ÆFšóæÚsï=÷œÏ|sî=÷ŸÊþƒù^ËçïWËçésCÎÓÏ?"ç¶Û|ñÄ“Éài<·E[q ¢…²Í9¹ Xô³8ÄäÄ2dd6G G›-:z£o‹¯ÕÒÀ¡ËQØšØÑ(N» ·Ž‘ôQ0SM5Njl3âiß`çó9} ó—¡ÄÉ@!¨O_/ªß´OÖ7Ø­÷Ð_K¼©X ˆL}y|¦„€jÁ.ʼ~ {º°ÔžèÞþ²½„þ]Æ'Ø?‰ö¥«õ2­ÆgÕ4­/úUú[èéÊ%R|{.÷ƒÜ_¬YGS-Ì–(ú_²·ŸÓ'‰ö=ñÄ“Ç À%ƲUå‰`¿°ŠMŽ<W¡4ÏʤGÁC9W¹Ï›Õ—ÑÐß‚Ó|cÏ19z^ΓÊJîC©}á‡zðFW §ýÙFŠ8 < lî… ûa…F¸êÄÝÌ/qd7v ѯÀ ø×™Kê&ükpÐ`¾=¾?W652S‡QxÿC”Ùù>Ìa­…oÞ©$™žýª²€ý;k‚n) “¿9FslcÀߨ? $ÿÊþ¯ˆöVÚÂÆ/gh{âû&F¹>w?¨eCNÒS†à‹>ʧ6\öƒŒ…åþÍHd;`+%ç? €ýJ–ü«~…ÚÌ#¶'žLQž>¢÷l>Ô»bá®вÍ9¶ÃàÒ‰eA’`À¼àµ=t¼½ç†µÀÚ·fœ|9Þz`ý(žÒêÖ³:OG†{õÖyÉ0SÍÛÍzϧ[–(7/ uǦc§"«Žê€ÝÎgõü³hg¯¾rý[ õ9²ÆèÿtôŠõSèK-_½F塾4¾êV{0ø.–ýd{Š"øKjÏ€öZVôï2>ÁþîíKÏWýGÞ‹ \Æã+Xaô;50tÅ ãô©*¿ _8§`Þÿ|{î€*öW¶‘ôòG‚Åûƒ×Ç`O<™Z<}ú³{Ö‰•Fb9½S #‚œØI ³ró©§þhÁ`»ï̉wÿåS/3-k÷e°¨ú('ûêg§†Æ|p¢+ôÉàUà?ùøðR-æ«àÚÀ™ÎÓ§†o4"^=7pæí÷*F{Wæ+˜Ž[£|á\æ·_½ õ.zžþýöƒÅ·7ÌüíWÓ†Ö}a0å_U˜oOèÏ€«OúØ9ãf¿{Xyÿ»ÿÝ®¬¼x÷þ«û?¸Mö:ËjFñؼô £¿-†ÁO?òwÆÇÀ!×|6Ìû3]q)OÐøEà,*¤×nn;´‡TŸ¿Ôr(ç­m)pÑÜìÄ=£`p&t€Ð]{Â=8JËûÏ-œ3u=ñdJ08>Ç»´“Ë6ä–(¿ªS, „˜)ЦiÂ)™¦MD°¡¦g€†Ý0 \G«nœ¼;Ú„&c ‰f­ c^„@ ê£`¶~îcwüD>šô­s«<«~ç³ú”•´® WÕÌyg0¼ÚbyMÖ.½3OóÊ™S*ë:®¯ÜGR©X߀³FeÑ^’=R§à,Kãaí…ì/öï2>Ñþ®íK –P.¶'hE–ý}Wðf»¢>mñVh»”ÿ¢ÿÅö\î¹??à3y +àÌÝXŸ ︶ï‰'ž´¯Òù¹¯¡©3åµ€w’ä?–îj¦ú¿¾ô‹¥w#ZGÙÁL8UV«1ÐB­;—ù„¸31:ø÷îaMSE€…öìË€gbn¤ß#ÌÞ©¼W¬ùaøÀ?·+ïÿ¦-ƒå²m—|¦ €ÎþNpð"vDy:]3å@€ýËùs² (ã3¶Ù÷ô÷È…¯O©¾p?(egÎ÷SàHõñÂlfÞ…€¡§Š¥þ%üçVÞ¿ò ÿ†œù{òD°ÑÔ«÷8¼ør‰Ñ¿^*«È©dÀB/ñI'ÁÊݨ£!Ú¹&k‹ÛAe¼lô—jØ@s¨ i–¬ €Ùúh`µÅ{«nb;(™$Øñ|AŸ²ÈG¹›àôݲM€iýjDÞ~ 5YÈ8ÁuºùúŠ5ÀAqÍ/[–ì%ØÃ €í‹"¬ÑeìUªô—ãøDû»µ/ýí^§“cn‹ÓK»- —XKúX'Ø0ç±=—ûA1þàHÜìÖ{–h6,êã­öÄ“)À€x+Ôåô'ÁbØ Ó5ÀáÙv¯°Lšè¢Âžâ ^mRÕ.k Î â‡Oì9Ì­0 D(Ã5 À ¼½æZ¸Æë’`1ù° gfbà=ô Ì x÷ËÃÀˆM>àÖ[ü«ˆóí¥ ÀB%³c ïÍD ÷æÊ¯å²;&fJ ýMØ9‹"œutñ1(MZlùSAè3ç²ûØÎß(–'€]¯wÞÖågñÅ .T˜b}Åý jšÆuütàì„j%7ƒ¿CªþƒÛ™ Ê¢ÿÒ²¸î¤=ì{âÉÔ`Cïߊ÷?2¥²òœZ¬”²@W¯ÉzN}îÖ÷„sn/c"è{æ*ÛDgâ’Ð]ÌÖ@Ó?‹Pý@Ý¢ñìx¾ àµð3œÍL˜Žj 0Å!£†” &ÖO€%{ ö˜æì¥ð—ãøDû»µoïÀÁu4•¬¹Ç/ë~°Ð>Ÿ–ØŸÔž *ÆkÖ cá{Ëúxì‰'S€a"ʽ£½qfγXž@ÖÐ6¿ÎI°"7ÿËð 8wAxÓWŸïoùÆÈÀ;ÑÎ|‰æ¿©§û´¤ Àó—0T`µGxæK×?K€1ðjå¯CÒ-G»ÆBÁük毸¬Ï€-þUD€ùöR`Àl´F€I`îç~íßd)0ÀÜÛ•÷fKe[.*´O·œ:úð©U£×j/@?ÍÆÝÚ°åÏ7Ÿv½Þ9†„YŠÚDfÄúŠûA–òÚESàÀ[×Ý#À}ýs,úÏ-œ‡ö^ËYä½qxò¤0Ùn€T!–•ä!ö×Pã²aLò ðjm¨yNi[¼©¸ªfY8-LéN-ˆZk"UU³õ¶] )ªE§?M°ãù‚>e%ð$§L•«*!- ö+@‘D³E=ÃZ¬Ÿ*Köì1ÌÙKá/Çñ‰öwk_öµ`P&ºW£CIs¨ýåÈa[fû“ÚsTÕøã{fÛØ[ÖÇ`O<™J Ÿ®#Q.ë•Xž@vÏ xcèËïùB SEuú0•wYïïä=9E¦Çõµ˜êkg¼ª±lŽ€®²?éÜ—,ÿ†ÄiWC`57ЉË$\w.“ß?ð-À¿³5€­5Àl{)pð"?UÙ‚Ypô¹¿ãaå}òŠe{^ÍM­:û`ÎA–ýr)æy‚µ¶ÌûS²G„S.?~Nâzç¢íå]!!P$U¬¯¸Ü•ÐÇmüx ôªÑk$°n Àxƒ2Eÿ,Kþwv˜ññ<ïQàÉÀïëÆJòåyDïY/–Uä3`¥6»õ=0ò[¶iἂ(iv¼¼Çϲ¸±{•yÉ0[ßÚGV PÌÊR ÀŽç‹úÀ,ЀaUÀTŸå5ê)³Àü}Õ)°4©~Ê,ÚK°Gú˜·—Â_Nã“ìïÖ¾ý ÀÌÊcÌ®²>þ¾ ï:]Ø™¯`®?©=WVŒ®«^–ggoI€=ñdŠð´g›9ëÊ“†ü|è-N!FðGf 'ý©oÌxã'T)L{)‡ÀÄL kfߎßù×O' À¿§GK?@_ò—pîÁÌ?‡¾H`qõ™,ÐL{ã`k`xôµ¶Pn¾¼³Äòc`g#ÎþñßzŽ„ Lìµ`ÖŸ“#i¿ Àu'á$âÜv| ‹õ÷ƒ¢Ó³I/™%I°‚ÁµÙ?wàºv˜¥JÑ? À’ÿÒÀÙŸ,ñž< <­%nÀxÿilȳ‹ÁöÁ«ißg.`&€³Ky=#Ò¢u„N¾Ó‹ŒûI2&¢àìŒEûÁ×D¦÷©yoâ Àá:´,¼>š®ãc`5´ï€±ú˜0ômN¥Ú¯FîsÏX¢r>Ñ>û=À?O¦ô—UûûÇÀò¯—0ª4}0¥>!Ó*åØp,{€ñëe—ú›yCR(||`õaÌ„Iâp‰ïM+}ü<À⾯¿ÉÄ@Ô3žREØçÅSVŽÈØX”=À§Õ 1á5œNŽ@ù™25 ‹3†è»GùWªE·ºøÔz€ ßòTÞ‘kôšºäyJ7 ÀzIQ0Oº8ðWi·oÌ{€ã˺¿IVC­öZ°HàÜìà~Gm^Ë­ø^=''yÂϧŒR"-™t{˜°±~T–Ñ—r} €ÑþÓ:oÊjoÌA° _âž`A°˜L._É+ ç<ÊO_JèÄ F¼Âpi¾ÝÍŽpzÏœ˜Ãyß텾̊ҽjÔäx°Uפ>á:¹¬Âfw, J&¸LÕ cõ1à‚:%ñ+i¿šߎ¼â™Ö€¨œO´ÏièÑ`¤=¸½(ýeÕ>Âþvåãl)}êsó–Q ñùŸIZ%üz”(Жã¼^¤ˆŸŸ Z«ÇÄ&©eùL˜0N=ì®>`¡§X jYÝ´ ýc«“¶¬NÊ/ƒóâÐ\n¬ÁjÔ7‰ëV`@·2IÖs^£ëTÐÓê8`¼€iÅ<²ð¨Q =w €]‘ÏÑ—¥O§üRŽõÇgåEÀh$fÁoc¿4HÖýði%½m¸–Sé_pâ°Õýްÿ· “Ûf(§áçSƃeM0 ¾Ø€a~¦ÅÔë#Œ÷¸q%Ø\å̘¿ä,˜åf2A¼w}=Š/þëÄ 9êX„XÛ)R^ ‘•¼„K`R¯EuŠ'Ã5¥JÆqw&YŸô"‰#;çbY-¥¡Íç»K$D±;«)Gšyu3a?`3Þ– ˆêùDûl˜°Wü³?f/²¿,Û‡Ûß¶|¢<É’€7Á%а-RÞ^)ïd²>)­J¥ÄÇ©QÈðëåÙŒ¢ý fpmsM†¾ ØhoJ}¬ËgÂ„ÉØpEĘÄõñÜÜ·`0AÖKÜ÷—ÿïüe±r~SÒåyÕ*ªJ¯U|µÊó×­<À®×¦IÀ©OÛ,-œ¬’˜ºxÓ—¨i€=Ÿ÷_Á€§R`ȺG”Ä1»Â»À§R}dÎ-¨¼°ZžFìUø·Bÿ¡Tó+i€]Zº_C`£nÀék¼æ™gb@³þÆØ5¯, ^·à*סú‘þµñıýv…×x“ÔN%Î'Çe‚<积f €s§éNà”›eò-äõ‘(Ðxÿ}g™Äíá«ÉÛÌ–@ã—0“‰À©@ä€Ï©©Ê‹·î=ª’_À¸Ž½CªŽHYpökr°°ÔÎÿ;·¯±?¸tp„BΠ<)ï  &mI)œàõ¥%à5îÀuKNyÖí;´êXû Q"õIéã‹{ÖÌãçŸ €A]}‡ÎuæñmRžY[FëC`_O°}°—/þ¹`b?ÿòÞÌɇŸO´Ï€q{9`CÙ0ÒÂ^dY¶·¿mùÄíâæ—œ8ÙËO”ò»²«ø%޵w )‹Ž±ú„š«ôƒK÷gP ôXy6㿞¸\v!£úÔ¨gF{Sêc]>&LÆ €+FÎI˪ºVº¥l ¸>ZhÐߟ¶üàï“þ)¨@|qݱ¥7ÎrYï zy“ÔMÂáÒÆ~ù1õj’´4åõ´äË×ûÛ[[>U€G<–|iÕ±Ý7þû U‡ü¢úüÂ=†¡¹\Ò…-ŸrO?+Áúaíöû××Çá™2ÕCgÀ//mŸsXÚô]žÊ?¿Ûíyá§é‚r7øädkëù»·ßÐØ•½Ës º~CoyŽ~Øúx·ç3-Rž6Ú ú ‰Œaè«­{ö|ýÎìÙKxÿÞì/¶uσ×/®+‚0Y™™Ë9Z´îo€Ók¹äË;†ÎrLJÔ<¿HÿN¼ XÖí§0à=¯š2‰8ŸäùfYÖE‡ xj0¸»o·ýG.*?uî܉ƒï¥)ýDFÆû/TÏe½}¢ålÒ7‘ X†ù51~ÉÕ®À„I0 ó¬É|øIM)ï>Ø’Á·ÉKŸq}!×d,A~ÇÂuÐj—S€.¿…Bsɽäέ)Q Â >-Êq8OÒ5Ÿ'®[°+´¿D®Ž[­9RŸRa¾ÆÌ˜¢@»„ ¹2m³*2ªV +Æ«~S«a¿ô"~ãT3ÆÎÇÛgÀ¸½œ°±¿ìii/²¿,Û‡Ùß¾|ìþ‹ IÇÚš-°¸S¹BõŠ=Àý­(êýG\(Ïz<à׫(U¸¶Pßl´7­>Öå3aÂd¬8;¯9_¯Å=4}”Šê¶õÿæ“´#r§ÉYo¸í¿Ò€kßß@iÏ+îeÞäkÅÏUUÒ §Í™…rÛ•ÌÀàx•“S—>c¢¯‘—V„ÇpÁ2éà§få—=ùkɪ”®o—X–SŠ›7·ÛãYëñ|±>_ b坨%}â‘G+,Öt{þuð?Ê;A-0Zž6ÚKòjÑ‹$°"˳£@¼²È¿AຠÀP¾\Œp¨ÅJÛèòàZö7À\yÑîñ™ùMjž[cÿN<°uûi Z y>9ˆùR­×ëµ<ÀÞ¬‹:ëƒ.~ÉIO­Ív &L€SwÖÁ|ÃJÄ+\G$2„ºqÝ»R[ªŠ7íXE$Ëݲã.¬ï\Œ/»Ä®ƒUîâaÃå‘ú”ߨ*>ˆ- 9ðü½™JìGêCàMU% r¯Û„Ù/ÅÜ /¢ñ|¬}¶ŒÙkØØнÈþBÛ‡Ùµ¿ƒò1‰(öQ|ÐÙ›.¿ÕÄ]#U%¾MÃ{s\N˜,Ïz< ×‹¬Ônó‚M4F˜Ç|2¨Sócãww¾÷?˜¡ö¶ú+i9< 0(¯à…ªñÊôoÉÑ>^#Ô}ñKcQù/œ&9Mþù;àO `Ÿ¯-÷ý™2p°þã¹|¿xï†àº×‰iVi˜ûï™@€TT€gb¡‘ìw~´@€×þáo¿?ó³_Ÿø÷Ã:G ‰æ©|}<8lÖeÅeDaywüçïøû£ Ç/Î IDATf~-v@€A%ÿ>ð é ¼JG8ðà €`@€0†`Œ€` È€ @€0Æ[ @€1Þ+-À©ñ;§Nݘ*r@njMlsKI<¶ù§«£•[æFZ@Næ:¥ÄHö´gÞúÖÐáâïh-Ÿ½F’ ¡OK«90û¯2åÀ*àmÜð±£kƒí½p¡Ô¿üÓ5ýaø@ e÷Ñ*ŠàþF¹«9ŸŠ,NË*ÇI¢­W6pƒG¥ŽM.éµ+Àñ˜Üµž}¢aNÒÚk»Ð7ïÜ8]šså³÷_ŽÛê_f.±|K{Àšà+ÚØÚ÷„UàxRîX­üþó½Á‡‡jþiüe°\n»“NÍ)rß_/]šV²E p{Òê{|zí pSkèxUýÙ…±©BíÛÑÈøér˜/Ÿ½8Zn°Œú—[€K,¿Ø·«B€SÝòls19tŽ’ɨ»jøU:}¿¢7h?»ûïÆŠ¢ ï>ù@±œZœ–¦G®(¡¬šhû’¾|ë”ANb¦‰mrË`h/»Î•O¯aö7Ìû9cs{ë% 0_>ÿ¦"‘Ï_n.±|0`M päÖ=õ¿ÉFæëåÔ ìB ™OÂïC€+À2ÖŽÞÛgºm<ʲ‹±"Ì·ÒÇ]䌲Å2ßɧװóô+®sß% °GùE pe([ÿA€kR€™q8qÁHdb¡¸` À–!À#Oš#¦§ÈÃá=£^`D.a±>ý$ÀáÉuËk©ìU>V‘2JÈàöÖPv P9¤¨ÜšÜ~P0Ï«ÊJö]p‹‰€n»4­Ð-Å{¶êÏuŽd¯¤NMÇB#’ƒ@yæçŽ_êTò/×vË'ýZjù|Úç&·O<ž8-¾žcW«º;z/[¿£Ò–uE °µþÖú Þ?[¾àþ¼»–gÏOß+iþc³uôŸ¶ÿlåÛÛÓV¿ÚÉyâñÄì&¡»õÏŽF9¿:¼éàrlÀ p䊴ù;}©U·´eªjx׋ô3_ðƒ×KéôÒçÚç÷O^“ÇGš…œO„_§ßl²ç¿™N_ó5|±”^º-Œœµá·»¯ùj3/Ÿ>}®ÞmÃY5èÕU0€Ò8`àþX߬è’öG¡¬Ë€\D¬ZsKf¶E j¬ç.¯‹Ø+?Oƒ~}Ÿv¦ZíyfÓáɤ–óSáõ^© † ¢Êw31ÅèWöúsõµé§µ|ov/ϖߟ1š×a »µýß7XúO(À–ö´Õ¯-§Å¸–ÛìíåÑ?¤m†6êwÊ(][ñ¨zŽ7Ê=ÆR«¡Ù¶ªàb¼iC€ëµDzéŽ_}Õäy/ø*½¤Û0#Àfþ0à /˜â<ü’:ïîôõ&0€ pdFˆLæ:Ç&؈WmÝÒåfç¹aP¶„eâÓ¬?Uä®Ù…hÏEIØsÝÒГ¢A'ë¨à½0[/¡õÊo¿^ e¯G§rRß6C˜•¾‰ý·byfÓñNytvalò‘,¾ž'÷š‚×2h ÛqAœ¯G ¾¶ò¹ûÛØ£<[þôýGǦîL¬+ ÿì‚Îõ_¾­ýùú5µÊ}4Æõ©i‘{ôÏGIã'¯¥WÞ‹Ó‡U-À‘HjübR66Å“¡sªàç¯ÓK›|«+•ÙÁ©–^¨¦kà»uâ`6?à‹$ë¾ )æ¹_(ÀWÿPóàÙ—ÿ8Tó/¿vÊAÓY0€2 0y45§h‡Í2 ´”¡ý.r&fݕʧâDôT³Êè+(—׫‹¦Õ<5êS{H½òÛ¯í­Ó|H("L#±®ëT• fÓDÖºèâZÿð#íðZþzÑßb ؇é’Þ°1ƒËÖ_J¾¾Îœ/—›{”gË߯ô©Þê/¬ÿlúo'À–öäë×ÐMgrÕ»‡ýööòêŸÚ9iÏiŸËÏT·«kdú&zò±&/÷T·/¥ßÌû¢¯4~›N?£ŸÖ^¨ŒF©óFU|â`&?^Jß^ Ü/´×m\ó´æëóäõoò‡ÿÖC€”]€å®œ4zcªm±QÝonN< 8ÈEDÀj4–ÖæVª~….^ î“ô¥ÀbñÊÏCüHóâ0¹~£ö„ÍH†¦æV—#"LÛ鿉m>öÊÏ™{HU"Âdعº¨Öš¦œº\¶hùëË/ÀÜûçê[¢Pž5x²‘\ùøÂùÂúÏÞÞöþã˜mO¾~LˆÚ«€þ‰«3ÃáŒÇYQP LÇØ™‚e|Õ\Ý{€Õo,ýÁ O]mrß&Àâ=ÀL~5 ´Š“² PA¾"É{tÙ‘ô}¿ú·ÒNr°ò;]5f54K(ÀžùmB¦È#Ç ¶ùôcs˜ ¬if§lC^°NzÄR*M€­õ·Õ·Tö.Ëï¾3MC0g×Ò΂ì,Àl{òõlUfÛ«€þ!ÏõE,Àjà@ª[Þ¼?‘d–sUz ’ à¥ÏøÅ5>¦¿Ÿ$?oÝ‹Ù0‚Ësðé‘pðúÎ<³þ·€(À’Ç/Ö`¡²í*oеm¯ùxw ²xE*•?ËŠ>ÓDñlÂÝ.Ô³\³B.ù—[àj*h¯M|ÍHƒ8ý¤YaÝ^óéæù~vZÃk¦íÙwÕÃþ˜øšïöý´¢A\Êñ3çÙ–N^2Æ8ýÔz¾e茕½óƒà†ŸùO—[ýi^:–Ä?X,›bÅý5Q׿¹±Øl³%^P~6ón¸Ês¸oöIæ¸ÁÛ@ÓDeäpôÑL{)ÈÚÂÿ-çÍ7›¼½[C€n¸o¡s•¸‚oÁI|30^z¬­º®¼Ý¶4Y³}måîx3Zaµ¾Ó&0¨ºÊñÎê2‰ËNÔ`âKQz}Šá`¶¡Þª6Z>8*»8.ÇFç_T³òTžÍŸñIòónḶ毯$ß½óˆCyÖKÓóó"a<aàèNþÙ¢èÆTjs™ À›;Nt Õ3À3ׇðÌÝqÞÚµÌâहöRñçœbûG¼¿J½ Q!7_Æ>Ó!èÁáºà„ñÁƘÛYûþ9­ÏÌ“Þð–‡u6˜ë2p¼Ž§¯1'žÀ8‡\€MtèúêÂ!À–Óóyž ò2—çYWÆËÏ[ÿމ¹s/æNLÌ•Ÿ\a(ÏÃÿôàä‰çðc F¡‹êáŒ}ÂÑÓHC&À¸á`´ pÕÅYÑœM^J†:'Íå+f®'XK€ï»ÝE¡Šñ¦X«9ê½Að¤v-mbNš%iòp„ °sS^Ô”Î8ôBÂ&ÀÆË‡H€m|Çc¯ËOý=Q`"Á?¥„¥<ûIá pÍÀèà1K2íaà=± `t ð˜l®ÖàœbïÜWÞà9T©ð(°Ð¬.À¾xÃM·ÇžšÝî&SIŸûmªï»)ž"š›3úÂ;«SÔøÙ¿›'L 0ÓøçÛk¾ÛG4’YÃÛä¤vÞš&µ¯ty…ÁÛ‹ô¡W¨œ«c'351ÇÍëĈáÏ'$üʶÒÅ4ŸÎ3¯Ú "°òí&SV÷éyÛ?Í?&4å§UžÚyv¾)üª<~ß²¾Mk °4>¦¿µ­›"FnÒßšKõû“ÈpÏ¿¨!ÀüþÿÔšU©ùÇ+ýiú¿¯&À%_¥}ë"ûô§¥¥]%ù{'ã†7þ$Üg*ùþNÿƒÇ¾6UóÏWúù½ ̉¦r=âø‹F'sâšÆõ‹ÓK]€(bìùÇþNSJ¥ùÉ%áÝ{D€¬l|+ϸE2ûÁãs´Zþ+žìîÿO‘jyÑO~kp7™áLÄ÷©ÏÃ$ÀÌ[æuS7Fµ‘ ðЏÂÅØ¬‹ÜÔX–ɳT+dš¾ï¾Lsˆ8Eà"ÀÞI¢=íaò–‡/ÔxZk{ç‡^N?•Ç·Þ?ï29Oš_Oá\Àz€æö}{ Ç줙÷Ÿ0Ðap²,©ïDZA$daÉç{„Áqy=? ‘–‹·3ûÛmV+ú -ð"£+«¹¿¯Ç+ޝ+À²ø8÷ä%þE*Œ³?át×vV0Ú²¿õÿìklWÇ=¶e,ã8¶C „˜¤I(\–¼@!¨4 P`¥¶!<"ÕV i¨»éV l€€"¢Ph>° R´bYª¥Ñ¶Ë£[ò‘‡R-ŠØx› Ýí}ÍxæÎµÇã4H»9©õŒ}gæÞ{.™ù͹÷d«×.*|y ÀŸô’ÐNe¿ ‘ð…Õ ‰ìŒð%ªHšð¨´ €Ÿ«ø =(²Š;a¢¬j_ÿ”­’:Œ ¾ý\Åà„LJ€“½¾c[i §&gOW;Á_¬Ÿþ˜L}ÍŽgC…_0ëÑTWœýuûÞ~ÙÜw¢òFýA:!Ä¿‚&Ï|ÕþzÍKàŠzg­l@ `€S[·oI=ÜôÆÂ_b÷áòµö…›ž*Þ.Lƒ¤d@BêñŠ=À¨ÈæÇ=…=ÓdþíkΘ6÷qŸ€Abè`œrÉïîþîìá^ ¯‰ÜV…ð Á%z`vu¡20äjÖyÌÐÍ^Q~Ÿ;?†U-ËÏŸjˆ Àêß‹:çZÏÔ\y(µ|O¸©á¤¬¦ÒþÝóÜpÇ#^I›·)óõYÐ!­É×ãoë¥s§? Ñe•¨¼í/­gvýRŠÀ_õJe§ÏYê¬ †HûÍ`äýýmmÃ/~ÌáxHàQD¼Ãjy½z5à‚‘gÃ/XhhÄ¿‘gsÛÚF`u{tõÏË•û*½¿õµ_Ó_18ÑñÁpÒ×OßDª/ªÆžáAŸïÞð£›Ãÿòù~ôZÆ<òï 2öì¶ö§Ì|:ûsû8'?#÷‚tÞÿ»Q¨ÚM@NM]¼ï³–dD^ø›¿Ÿ?~<¹áA úŸ`´…`—daØÎ\ÁK×ZíÅÖïN2ÀQ0"_ìDc+…ñäAýç0‚Ž^€‹èŠÉôz =Açu"6Î\±«³lÅBOôÒœÊuw“çkÞcf Úó`ØÕpn6F€Ó¨ýïó69×·¯m“<³ Zœð^È]wywàB.åxíñâ0_Ÿìâ펣û€­;_X*k&åÉ®Åsħ@{HV¥÷Ód zØÙå_¿Ÿø2Eî' ¶¸h3‡Ã§@c¾×Ë€&2i´à¯o)Ð+pm#ò‚l9Œld@MìÜ?kÛÃ×zHÊšÂ:÷· ýÚþ°‰ñÁp²×w]Š‘j„³§¥ýѳ@û#_uxðÉÆ$êkz< ™í9:Þ{ð)}¡ÁÛŸÛGö v:ð[jwýx‰ÛäÇ þ9À  ÀKAÒª™¤Iƒ$ @ ÐK`ûò&ëŽóG˯¼jgÌ»øøT»]ZuCöÒ)Јœ<).¡¸°§šíãâöžÂ¾8ëý0#VCË€§/‘²ÈâAzHÞhYV×Òˆžñ»ëݷѳ?úBΛ*ÇÕ­™ÜÊ­‘Tïsç§“p1/DX zbî÷mÊ„V2É3»À™5ƒ®§Cë7`]}¸€Ly¹NA#¼ø¨ yq%`‹n °Ó¶>ƒö¬@úƒ|È+Ýà`¤‘~­`2%z(‡¨™òO£LR °¶=|ý-E´³RBõkËëúKÀfLJ¶Ï“½~¬@Zºï‚}{ú'Y_sãÙ@Ø~´#Äž:ûsûÑáƒì}_<^âöVE‡´~üµM\FÀKïÀ‡÷îÝûyÓè›ÓóÇ €Ñßøç@ `-Û­;¶ÐðÏ4Vù©â…‡ÖZ…÷crC–Hï.¤Ñ¯X²¤ae-pLÆ¡‡v(GgWâ¼0éõî<Ü··JµÌÕæ+ÀàlùVè13îü(Ò.+™µH Àªß]!Iö]!Ô¬õf`\Ê\½|ÙuI0_Ä1nAF=Ξ¥±ÂçÇ‹!»¯/‚¿Õ ‰ À“¿eŸ¥³_</^úÀ @ àh¤•Åv9ÝÑJ+º#—¯µÓŸÊ?¶Ï:iÆ<¬Ê¬àÂjCvuù[63°&G®åˆýñ†ÝŽKl'6àÄ*JÞTÄ)8¹¡ rC™öü&Xï#óõÑO–Ÿ[*KÑ–+Ä–|âö&Àµä2Ð IDAT„]FpÚÖÈ5óláx0 ÀAsLÚ#`º¸º¨r#_^g?1›üzÕä®of ôØêkn<0ö໘ðúäø,ö{ï‹+mçÅ^ÿpƒ&4£ÛíäcÜþŸÇ €gÖ¹»OžMƒÔÛ fÔ;³Ä͈ôæ¼ßÊnÈSå­¸Üǘ-þå=À ­¶X–­°]/`k€5Ž£¢†¬«è{O—ÿÃ^㨃‹flU艢2þü&X¿xŒ¬«.– D¤½®œ§öí:g\vÅ`‡7ÐŽÓeŒ€ÃŠGÇ2À.%ã.ÀéõÒšüD“8ñåuý (|Ÿ'wý„ƒ`¹¾æÆ³ñ±m=1íÏí‹Ö 8^»tHµ•4±¸X ¼ÇÇ €§‡¤õv@À*._kg ¿e¥fÒ{ öFQØ€ûÈs2N$ðãži†ìÙàwËQv×äh`qÝCì‹Ëë,#Ÿ 0¤PeÉ“,ŸôJΣæjÎo€õQ ÇÀºúèÒ É~Rt^/ö ÒÐKóê%€—Õ©|m y€‰Áåð¿oÊLk€±ß÷>;, Àáö;Œ˜¶GW<ŽT¹w°b|y]ÅÊÄÇkI]?á4Hc¯¯¹ñl`hèÄXZÀqÓ A`ÐDàÔ/¬ïœä¦DŸ„4H ½F÷áÉ­ xñÂÞÓ5Ô!\<ù˜!{pÞßáß»b0&ã¾-íˆ À8¿®“å¶í¦Å]ŸîG߯°‘©¡"É“¾ y¹d5næ Â%ózÝš2ÊŸß,ëò€uõYÐ!­É×#^•¥6Üì×z¥ßÉTe]²Ë‘€xT6B>8l†b“k€qàjrÔ€Àÿíó=óÆ`¹=|ýYÛäNЕçû+P&>>tÞÊd®Ÿ¾É)N5ÂÙóg¨¯¹ñl`lÆ¡i “sŒØ–ÓÿZTy€E³?€AÀ$ÒòùÚ X¯Ì@ h|8‰|FŸìFüÝ¥WÉ ¹ücš8ue‰:OCL°ómsc_ax 0ñÞ½µgJóã¾;±Øs¤ŠpÊ%¿ûú_Ïìü´é!8(ÑS?y¢ÆÀ“–vôTÔ‚ÉdzHšñíù¦Ë¶Ú  âÏo€-EÎs­gv^y(µ|oI€O¤¥E—`aFûiÂú Ž}Ì”‹Ü_m9[óÍeiÆm¡EÉ}ýÐÕËÒ¹«rž_W—ßÝýîÙ£ßü§ÑØ~|¾jn[˜Lfï%qD¬¶öÑ{·bp€Åm☤}üað¨«ÿ‰ÏçkŒÀÚöðõg|äd)’ôåùþ¥Éñ¡àd®_‰çaOkÏŸ¡¾æÆ³=ðL€àеýmý—½³mâ¼ø99]"'±Mº-Xئ°ÔZ©hÊ&± ÚnCEÔb1T¡¦]¶Œmd”ÐH-$D-/ãËÚñ¡­F‘¥*Uú6hÔ>&H®:µBm2òa ¥ê¢Ý=Ïù|¶Ï/—ø^~?UµŸóÙ÷Ü=þþùyù „û”œ=ÀF³ozfÿÈ€ÙœA€3^q§¶À-!À gOˆß—Û×Ê5¯–´™Jv[Î`M U–XC_;®š[2 °È›*ÀÆTPñâk耮k™8ù|Rë/п>šw…Ãþ©×+M(ÝÞéóUÝߘ7ì<2[KnÏÔ×Ýýœ£=ô;b̺!vç!ÀQ+qÒ5-³g¾òÕøðw€[J€g/T×=l„ÛebàÕ’¥z¸}²{•ª®{¿Ä#®ø¿7œ"ÀÁÎÆ¦²3foç)¹GëÁ’<XW¢Ïû{ûûªy€SXßöÁþšÞþ }we`cN­ìï|gOåÎ÷Z»ªÑ';:ï”3E¥0ï|ï³.y­á=;ß~.ÈW’?ßu°¢,9õúòï­~Iºl^=ÀÙ8¥>Jà‰ÆòªÂXÜf¼ú€•8f¥q¾[¦Ç/ˆ¨ãïÙÙö™ñ¹z€µèÈØ€±ôè5[vׯõM±ÑÓÕYø‚£+cú{7UÛVŽ~úE¶ŸOrýÍkn Rúù§^/'¡tu¤ °ëãW¼Z9+S‡gr{ ¾îîçí!”ÖX^,syqþÿ©ã¥NñÚsj˜X{8ÜDº‰Ð7ŸS&Js¦AÊ‹B pÖTl·®Of@†ì¬¼ä+}ùÈúÐ  F®™ª8 Z=þÿ™v%4îôŸ[þ½)S'ÀîŽïooyÝWœÕ÷ìí9%L¬=\^½<®Çï.}Ãq;ÀM!À¥×‘Wt^Ê’’ F€¯ž:¾\L%»8<|mÁŒý¿‹‰tH‚‹ÿž60ÎÏ}þMûñååÒ¦H€]ÿ»ùJKsöï&Ús*˜@{¸&¯ëQñj¥Xék3é€{oŸ¨”ëOTÓ6€#À×;õ-ï¹8:_8|yƒµmÚWãô-#Ù•.F¶¯k“{þ®ï¿ý¡¶·¼”{N> ´‡û ˜ßõ˜yè¿{|0 ÀÞ p±X3F€o®÷`¥ãÆ¢Ò±Ñ$¤±cÿ¸ýéoËËÛ¾ü{hªÎ\Ç÷®ó{hüí1¾‹˜ßõðßv«ìi¼å¯ `¼Á¾„tà¶ |ÌTŸÆMÈÚnd@€`&  À0@€`@€‰·0L¼@€`@€`ؽGÚ_ÛµëØ>³4J'šÈ®øŽ9ß|(£Ë`›_“ã/ñÀ~x¡ºz±U žìV¿•ú{ªÈ(´D€ %ÀGWÉ`»îý&ÇøK¼ðD€ë_¬Rm9T«®;{øpwíSŽ—9ÜR¥®ëB€ #À‘Õ§õ`«Çײçã/ñÀŽœìV—­JpðhmÙQ¨ÿµþ¿†¥êê­Òƒ[· "ÀÁWNˆ‡Î…ꎭñ—x à©­'~Rd ð캲-Mö—w¬ÏÖT1$  @l ´ËºÒã/ñÀ~úýÅÁ„Gô§¶žÞúµê ùlÉRû׸wõ±CÍ–ÛËiþûi8<º`ÏUÓ_ ¡ýZß4¤KmŸCY÷ßáMÏìÐ Øi€ü8Œ´¿X'ךL¿0Àd°þlß¡Z‘†pÇA‘¥A.‚U¿½HO.d@î¸ µWŒ†ÖRëé¯éŸ£ÈaS€kú{õW:œxQsù Õúãíù~6] o[óË eþ¼¸'•SÑ…vT¨ãjøòt)´Ã±ámzE>Œ °½Ü1þ£^ÍñdƒÃþy pÃR‘øÙ&§ø‹LŠ««[ŠZí«?¹PmÕÕ÷á:µõXS¤óTÑ™S^pÔìè=½Ó¥ïÊÙµ6æë,À3ïóÝaø²øyå·7Há-5|×&ÀIåÔã"=VQFÂáÝrCxØØ1!ÀöòE³ãW˜ó Ãþ.X7àÅNñ˜V‹dÂßÙuÆçàš:ŸÕ#ûÖz!À¡žþš šôÛóòA“z€…rvœÜþþ;Zü;¹zÕý•b ´.¼³þi”WÖͽסœ‚®­—å\Þ‹Öœ_©¸=_îN/ë¾lÖ¢g |¹:}€|çGÚ_i©c Óâ/ 09,óŠ„ ÆÆöºk—9Ö´d©,z~.Ü!ùÐcÍ N°¹LVTÑ´´·/j.µ(ß$…W …Ö (å¬%­Ä²VRx/›ËrE•ä²Qº¾+éiêþ.ÁЍ2VÁrˆ¿0€ç|´H}ÀÌCx h‡} VÃBO~‘ž.3!9t½ ÅGDÛ{€{C™ß~cqÛâ˜=ÀØ÷O-§ p8³Ø¬ÄÓÙ=©Ü¡[ÏIßÀMàȃêÜõÙâ/ à•—¬©U¿Z4×€×T•uy1$ËÈ„4]‰‹ïP| °2”—/j.ßœ´Á­ÇÂ翉¢å`ç`Æ+Àz¸5âkæø‹ÿŸ½³¢Ìø»Y&»ín»  ¼öPà°¨”Ò6*QV ¼'¯"/‘Íå0¯ X¸XNJm‚¼HËËÞPš `N£ÀQPñ"~4‰Æ@>xæb.äæ™™}™igv»»åð÷ûÐvwž™}æ?Ûù?¿yžy k¨ ŸÚ™[Í@Ú<ÐcÖÞNò/ =Vò°«Þ¬ÿ¡‰ñ$5?g#! ×U‡A þxˆî¿ªÛ°«´Ö½¡XýË÷ÚæÔXxìÚGGV ²à@$úø_WÂs€`H[€Ç=¡výv”`€L pPApRù­'âYâ^ßqgµ±XÍê0¬ÊwËýËzfG€…ôêý¾šù^ÿô‡ëÆýàL€óO„ò>º´ýkuߌ}3 Ž|7räç7o_qïëèc:ëÂüÓË›·ßýZï F€ ×Þ¦vónšÑC›ý99ÿ"À™`1íd õ1GsÆxü¶Ôõö¬›­.÷¯mo©ïñ/«É’{ÕîÞ Ú‹â]_оßaª=8`'À®²Ö°Ö¸pŸ+IC€½‘{ѧ ýô¦ŽÄœô«€4xàpϬö‘nGëý½Æü‹äD€ƒÍ‹Å[þ—'._{ÉÊ3“ų¾ŒÎdU°å‡ëîÿkˆ˜K¼i+À._ó'¡×í(v¥!ÀBiSœöÛ;ç‹]ØåÝuïê·Jñ*W i på+åj~õØÍȆü‹dA€-inh8M¿ÁMÇÚj¬Kfª¢>_\‡‹õ9™#ú›¾Î× x»öÙú ÐÞˆÓ¼Þ@A—¯t*Àîyëv¶à ¢À"¿Û–øfbþE€r$ÀÚ½ÁNJýNãŠü€½+H²ícå_" Uv!èX€å”˜| € À€ À0 € À0 €“`˜„ € À0 € Àä[&ß À0 À0Œ À°*74‘Í„œæZchcýíõU¯ õ+ÐÞ‰vCÞŸ9–¹#õø¯9ÙÞþÖloêòðóî¿§·fiż¿d¿~]ŒoZË­¨¬»ÖØP×ãûðäúöæ cÜÐÓ;àêM'•ôÚV“;ÞòË­_ç—ÈÝß*,¼õuIæÏÇO‡Æ¾ÑÅó¡=}÷\k K´ 5ž3Ü3QÜÊž8«—‹½g¼ø{Ö[5Yà²%ªfÉzª,­§Ñ–øtÎ_"öÏ­Èÿ²>ÝT…5uíUIê˜ZüG}R¡”‘òŽTÙoßÁþÊ[5¸|§$÷«)°V?¹£úåüø%Ä×.þNÿZkÕvvêÇ;9¾½&K²ÜïòCœ;r ÀÆk¹vÖ¥ëü›ñ|[ôխ«†SEä—B7lWNU€}F^JìÏû,Íó]ò‡œà29¤,À•{z{:àê™åžµí-;=þe5Yàü¡~—÷ZÿZ‹––Ÿ}Þ½¡8šÛŠŠŠ¦ }ÐXø£|®ª{ª „÷eéÅ?0e°ä¾¸ö¯×ŽÆ{\;Þ¾ƒý5”·jp=yP–—ÚêfT€më—óã—_»ø;bÔ I>²ovAÇÛ_ߦºÓ’û\‰ ²-ÀÕ“Dvm©ëíñoÍ‘»vý\x'ñüù®°ð·ªíÛWüwsÆØå@€S>ß™Ïhò¹‡ŠŠ¼|áÀ©WŸÙé=>&ÀÕÇ¢ÔõoNéíÙ§üªœÔÃÿ~–xÚP÷n¥ñî‹)Õú冶ü€[€û—Z¿íŸ7Bòüîéw3 Xjñd°<良·ìd‰#¶Û_[~opl°€Ž×¯¡äþ8~Iñµ¿ÿÍK¡ÏÖ.¾¾5­aȾ·©¿š‡ëã­’óoòmÑ–†óË®›…w”7"ÙÅà5m‚+¡¼Ô?ö§u¾3KvE¿©|× èáY×63žkƒ±Žáž×ÕŸëÔëÐãä3W…;×™\€§«ýÞù+¥~_ÜœRü{-’æé­@À‘Ûí¯ ^ Éržm3L`¥~MÑÖQà¾<~¶ñ·¡l‰Ô4?ϲA›¥Â=· ²+À yxô‹ü›•[޼ÓýÊÉØç4Øòà§Ãú(C]¶¥µýÎó]€Ôxí¥Á™æ‹ÍÁwÊ'*æ;§·GšU­ˆ²–¡3ž}§¤éƒ~÷ì6Ô½¡[ÆpuM€W…Õî{§Ûw°¿v‚Ö÷)©~°<¿Ø™+õÛPp_¿. p`U8owqºŸgÝ 7%|Æé GÜsJ¹‡EþÍÅ,Ðß%ÝœIöu*ÀBIPœ­ %îY-’­…Ï3k‡zaú{µ—£{{–eG€OHKc8W[ îW½ ˜¯ù“Æõ·wxc YL"]ÿ}U|ùé°¤lå± Êª-XÓÚx®ÊU¦üü£y}G’³çš²ÂÅÕ—úˆá·úh«ÀK¡þT“çøš+© ¹õ5?]‘Wñû­º•Tž=]±ñâÄÃQ}3” ”«×B]êŒåÍÛ3s÷æÕ©÷ÆTÿ$!reOIÉ œäøZ p|—µ ï€Ý»Ê-èh¹k“ܼúƈ¯¨ß›íŽŸE|íâoØžy_(/O!óˆØ?uùåÍÿNâ«îÌ"›‹R9‰össþÍx¾Ýò³:ÛÕ¯Q€ršÿ¬ó­1Ÿ&–õû®T¸ço6 pÒù.½|ÝkQ7];€ÿ_îi-ÀãÎú…îV¾âQ¯CWÎð_šáy´&ó(*Z©p‘‚3+k «m‰&uاHÈk.¨SkŒý“f(Êr·ZBà%Jãîzñs~Óúxö†¤µ^„:ÅÊ› PùWÄ$¼²*P>íoYÒg¶ô½sTv‹úÌ{Áë2—7ÔÜbsùäíY5jn*Mš ) °V¥6qDxRà/jQíàø˜¶oÚ_ãñ2•7_תpÓùS!½Jæå"`jÕø&ׯ»_R|í㟴=ÓþÞ'½<ê‚ú…Õ'åJ9¾jtVUЩ+8ÜóL9ÿæ@€½^!À^ƒüg>_˜ò©¡|T€ý7A€œz¾ö-I¸„¾WNê!¦¾ê9ê Õzƒï”ï«™äy.ó³R>¹(ÖW¯â*>\ôøÂN,ÿD(ïŸj¾ 5×„àƒ ÒØ}ÇZ+4ŸR–»ÏmÝ¿~[«¤ p]í÷7¤þu·¯…Äsb’Ö·gÜd©éòÞC5ÇÏþgj=ˆWÂM½[« Ô´¡òåãG¯{NÍÉ¥GÅëš3ßHM_¸Ìåã%¦óšË'oÏ‚]B€¤(Àk¶¥µÆ²IñíD€õý5/+A3_e ÒôAÕ_™–+--ùȲǶ] ‹ø&ׯ»_R|í㟴=Óþ–”¯Œ(üú"éȾ–’voÊñuEu~>wd]€ƒÁêM{Æx ž£ù7óœ‹"E‚c{Rr·pùÏ*ßó©±¼.ÀÿMìN:ߥ—¯ã£™º"ÀÁå«g«¢{žQ¯O¯ž­ÒÞ˪kïN¬´V»ã±×"IoÀׇDjÍ_)ý½³â8ãø­ït^Çq¾Ø1!6A ØórØÜHyQÊ›Óâ Ó¡(‰€ŒÛ@c*G„—”#‰E¤JùÄÇ ¤JU¾ð¡ÍE©*ugfwo÷™¹Û[ŸÏ>’ÿÿ ¶ovvæ™cžýí3ó ?Õ žkœ4ö'8÷öŽŸ©^;°sâ™j¶l–\ïÝÀڜ߉#Iu±kó©çzˆ=§ á¨ÍÔ®Ó—ó„ºÓ׉E¥¤¼ P‘óüB©<©O%vŒ…ë\‹\ØlŒŸr´>iEà=íO´-A>#ö¥õÓþ’ñ’Ê»Æ÷çæ_vÆÇ¶éöoîñ?39ø7 ØLÛW ãç´¯—ýi}R«w§8Úà Z»N¬ýöm_ó»~NóN´ APž<?xïb•ÿ-À–£XÀ À{¼˜ø?i¾ þ””<ÚÅ¿tðX'Æ_G~˜† ‚òàÕ³gŠ37,µïRZU=ÀoLÙ¬bžxîgo}™¿LŠãg¶ñßçZ›-ÖŸžÊÖÁ>-–CK×{ª.åjŒ*‚¨3J”+ð6{ª¹¨””·*Ö×Ï#vRyRŸZ¿n6‘ƒÓúMfΰØ'µˆúØ›ü˜b|ö[ý%ã%•wޝ ²æTåzÆg•ëéçì~£Ûµ)ïl¶ÛWLãGì›Õþ´>Ú_ú0YS­¯=%ìÉFÍ¿}Õ©€ ž¦ð¿I‚åàp2níŽOLzû?:_Hó=)Ϙóï¸@N<m@7–«@Aù°á“7.vp߬IÓX¡"àªV+PÜÌCk†CžÒhzUækúÍr,fU_Æ¢dU­†¥×çÐ8¨"ˆQÌ~¶‘7P¯¼ówûòvÍz7m´tM\*Ïêäâ³7RúòFUyw}04øàðpì|ÂÚs+ÙWàtéx©-=¾ˆaåê6‹äÎtüÓ÷÷à?,ÕGûktPäîJ°ˆÇjúƒo ¾éŠ|žwAf‰(wŸí˜åXö¿à_@”9 õt¾ ó=-ϳ@þÍ ÀþýõèÝ7ÎüA48n:Zb9cÀó»ò+zsä¸nsz#󢆯4Ë6§ ‡lð€ùo0sÇã— 63*½ÞKõ'tWãTDëí3?f6ÖW­éÑëÅ‚¯¹éËç¶ñIy Dޤè+S•åÝõy+ìP$’€‡&l-1¶Xa_ ÀÎþÒñRšk|ùš`¶÷¬v‰ˆ¼ÒÏy|8 À™—@àøù`©>ÚßÈy÷gMµÕß3ÕFIÿöM·Êµ´‚ 0ó¹}åv,‡ÿΚšú?:_Ðùž–7¸um9á߬ì×_³À9å IDATA3_4AåÀ/•Û'þNŸzÑðÇ,!eÓÖB$Áò ÀÍ-Á®?Zºê<—°Ž9d3>è`±Nšý‘;Tz½—ƶeÈ"ì:FÇyE¬s뀦ë•w>s_Î ž“Ês€Švßzó`< ,8ëË[C Àv’)3©°¯ ÀéþÒñRšs|ùž°¯Å…V4ç玀¨àœ’` óøù`©>j€­ˆ7áú·/‚†€K›…¬Vÿ;â`êÿè|Aç{ZžE€ü\®ì×_3Ž^oÄW ‚ Ê€V„Ž[ °Ø1H—Ê·oJ'„ñ°Æ(·›[†¨˜^ï%;\ÇÙeÔ¯¨@ ¼ãÒ”Ø)ªŒ €r¸*—gª°ëóÔ§’YØjžl3d¢§Â¾Î­ ãå høX§æ4:þiÜÖ’õ¤¿<#À.{ÈK -nN?ù¶¯£",† áàÒ—JF”üo1D€]þÎt¾§åùàs-"/Á ØÓ_G’;ÎÞLLA‚ Ê€W—úK:eÉÌ…"!ÇêÙ¡¥Å°Ø˜²rÄ`+õR«®`z}s†M"Q‡ x¼áBŠ‘—ri€’Ë»ëó’ç`©ýypý<“8#‚Äöõ`×xe41¾,Â`‹XÉç±ó‰^1\µëøÀ±ö}Pdã—ß`·=ä$Xà¿Á,ëÛ¾™R!*(Ï2Ý®ÓÿÃ`—ÿ£óïiy¾¸¾=Ý9qPœ“¿®?¡­A,‚ (?vw´º<$ÞG3>XZ Y À¡ˆŠTµmš€éõâàõ3:ÙæTÐy>jU«hKçM- @Èc¡Ê"œ äò¦Â䘚Á°Ôþ@`A+‰õù`£ÁÁì?f(Ra_WýÉxIåiÄ¡¦: Àì~ôóm aµúvMY[D¶¬"?b߬ö—³@“ˆ­t ’ ÀK[Y¿}Û׃AÃÀ†e™6¨ÿé0õt¾æ{R^ƒd̶ѷâƒ`¥¿¦Â9ÀAPþÜ´(ä á†¡g˜™)ÝG% óô¿ÂÁFÞýP~#mø_h›~Sëf±/É¡ÒëùÁã²²ïâZ7÷„Vùµø0–Ü.áõMÙßžÉÍØRûY6½¶êäÛÿÝ’ƒý¥ûÕTës^ŽÛh*Û×U?í//©<_÷¬ïJU«jOlÅ<-xeoÇCíµß§*›íc,:µ8ÆØ7»ýI}RÄ6¶¿ÅyÐpMuô‹M'ß08}Ú×ñb¿† ¨<ÿîE¾ßw÷ kñ¿àø†ôüž€‰ÿ“æ i¾w—780™ÖûËÌlÍw9ùkù ¢õ|ÝæÞ«Â¡Fœ•\Ï‚ðw™šŸð@°ØšYôÚ8uaƒÐÌÚÍêG÷õ› v_çPaR^ªO!¾îù½ÜŒ-µŸÙû¦¸Gï–\ìOïé«Öƒ·Þyû¹ùK²¯«~Ú߸{¼¤òd|—N¶—ï(küAŠH,XÂ/~ej À¢}+ß¾×Ï~/†ñ£öÍjRŸ±­]gf›¶^GðS™´Þ?Äa_Ç{‰åÏ`þ„ Âð„B+ï;ÖQš¹ÏÎA9©àÌdE³G€‰ÿ“ç :߇]å-fóМ-™Øžïrñײƶe|9 A€À¥MŸ,dŸ­Ü»¸´(8ùÓžD÷­í'T¬7zº¯o|Š¥Ïx_ñF™\/žeà@¸â“{ì‚g÷òVÎgõï‹g:F§âì¡ï{Ñ.Ö¡é—RÝ·~až‚ãA”ÊKõIÚð¸¬ì¹¾“öó{ܾ×ÓÝõe/¦÷[ÀrëAëG²¯³~¹¿®ñ’Ê»Ç7¶?‘¦´m-Ñ÷ãß9ƒõobÀ`à¼}zðTcqŒµ¯‡ý]õÉýv8<1 ÀÁ.fýŸ5ƾv¯Î%*† BpÃÖYÜõŽúëÅÒ`°Ûÿ)æ :ß»ý¥ ÀXs¿ß€½üµ¤ªV,W ‚üp.j8»k×éi…sÈ>ó}Ê<>ÉpÛC,%o|Žðö­ éøå×ßx}»VùEÜ`¾N!Èç~£¿J‘V‚†€ƒk·ªVðá]w>›+.L+Sæûã°.æ³þºÍ•Wñ]ƒ ‚†€‡Ý!»î?R$L~rN&Gþ~Éd¤x û1ÿ/gfîŒsp~ê¼Ð¢g\nA/f[tÏc~JþvˆÅ<‡ ‚ °?mx\öŸ8¾-Ъ4ýÔñUñ¡àÈîŽ-þ… ¡`\@-¬_ɼ@‚ €UºÿïÜ·ÐBPñ©óBŠo5Ì€kY1;ž A¸È5ú\‚g6|¦€ ‚À9*¶áÛ²ðÀ=Ñjè¸×3»¤ëúñÏ`O?)ª8ú}† ‚À~´ç#|S ‡†`p$3Bø‰R$™G&A‚ ü“sȱ$¾(A‚ ‚ÀpÈA† ‚þÏÞÙýFmåax<MFÎÌ$L $,¨„‘&‚ BŸé¶ ŠtùÈÁ†n!°[ ° K….€ ‘¬HZ±•6 `ô?€›­¸âb÷r¥½ÙsŽÇ3ö±ÇÇžd’™ò>ÑÌØ>ãülùÇ>>`2 À @€0ò€`ä- À€`  Àx¼9tïå‰Èáž·³Ù»Âáž?å«Âg"ôwCpÛ»¼ÓXŒ©o}÷Ë%ÓÆ(ZÑócßu9£$À%ÓŠV$àÆ£;räæÝ–Ä'yä“›w³S€+Ê‹WaŽy>9ɇ)—Ÿ>=¹®ÌM}´öõqþ¹Þ>M‘º/‘Ÿ€_¬¯Ÿå[6G}YßêK°w§Ⱥéi äšvXĵÕÑÀÚêåàýÝO ¸©GéF:]&òxºÌÁw¸¾]-P«;So¥f¨“ýNÿý¡p…?™Œc í|e‰šµ?ÖøÔ}/ýàïë ÀÂ<A^•ntž"‰|çÔåýÛÖk§9®O¢}AýRÉ?CýÜnÅ¥#?Ù$Àõ'úìØ0=Œ?ùæÚ?^V#cñùfoJAAÁê™ï”“w«á7õP˜…äÃINn„õžûJ Üè[—Ÿ ûƒr´ûŽ$?˜ƒ ÍܸÜ÷ùÓË—»'úrO«ŸLE?!¼l'X˜‡îó*°}²[Öç“(HxzßüaÉÿtšDõѵ/ª_ ùg¨_º¯#?Ù#À÷þê›·$.¸G4º½ôCnz:yõLù9ø+Úûðù©{ÇØM=J7ʇ®];p–¤Pð¹Ã/,g&ùÔŸ3çýAÙ?Ô@‚Ò-Ày¬¯sÞ©YÚéæ=Ì|¯ÔjF ä¡K.ÞæR€¹|²Ï‡êNyÓqfÂgËÖGß¾“ú•Ž¡»½Œüdç]ñú¾¸û‘7.¸yñ í¾ƒÓÓÈ]ÍöÇØw]€ÝÔƒ °ŸÊãê™M“œ}á8 pM‡TüC~&í¡gQ¹m€´ °.‡ç£/}šû],~?€;ÊC—ë?íX€Mùd—ÊnI /¿ßY} ígš{Ü 0ò-üùã9y‚›w¾–ž‰N:}ôY¹-YÞ.N]€I-Ôúze¸‡»šƒÊ2k °ŸãðÎYY›Ëxê|U„ë÷@€Ó"À²<æF€Mùd›SÚߟl®±ý_À`ä' ;8§‘Ê®…டÿñ9»é£(ÀƒRBÕªØ/yŸ?ù_9õ‡{Þžc³­‘±Aƒ{Þ4$¦ßi¦ãPT.%‹VnÞ?tâAƒ§†ü}ϼ¼“õ3ÌO®-_9õ)ùŠ »,Þ»ä–HáO"%KÍå ÖL׫̼þ,Y½žO^ßxýÔ8»ø’4ðhïãIæö,¸þþèáGË®«M ë_µ%°}F¦í…í €Ñà¼+Þé/Øà÷};Ô[Õ+Á'ÀÊ©Yw¢ÁžGoØ(‹|~Y勉ÿüüÏU~Ç_h—‡®ó½+R÷Z*™­`]^),=+úÙ?UÑß–o‘O¶ùê*7Û仹>ÆöÔÏ>¯ÛÇR€íÛç½&Àʳ(íÛíp{#?Y À9Ö‚»è~î»é£Èá‚‚ÝDx ΄§f¨™ý–èe݆¨ðìfC#Ö}¨*™.³9bÂÓAîmè_Ö'ظ¼n~*–¡gtÐÆ@\€õïS`? ÒZºº) 0É÷çëOkî0¦òAƒe{†úQ¿RGµ ¨kjlÏ$ÀÊùþ€L—ßð¿ÇAýÃgš‹ʸýÁß â6`Lxê,ß-Z_èÇ99—¼¿š“‰¬¨YÔ+\~Yæ Ï_~ž0aÂRGß&ÊC×ùÞ©¼Ü¤‹ÇØWáÛÒ¦2êvò?wŸ9Ÿù œ‰ÈúÑ'…õáÚwR?Û¼6nSýÌí ò>&À1ÿuº½‘Ÿ€¬àúåÞ¾9c!À ÚãÇgfnÄ ª¶ØOh0|øâÚ©a©÷{Ux~–êúnEÕ+ždºüàô·ÎIªðtw¾y%•tGß¾ŒÐq¹å…ðóSá}ÖÜ»ìæ¥Î¸ëß§*ÀakÖ#‰×tHêyenýI`l—nô]~%ÅoÓáë««aÑ ©÷É7×Zîÿw•¹=“W÷nœþ¶åÞk©÷'ƒú×\•ô}Æ2e(ÜâøjHU€óò^œô¹¾Õ7oÇÙKµ{3ó1H«gÒãû9Ý¿žì±¼ÂiÊž¯©oNM€¹UŽQ ³§l-Ю€ ëa-À‹†#•Z­Eyð+PÕ©î+s{acýȺ*ÕýV¦˜ÛëŠ$–¶Rµ%°– 9w í%®éLv¶=ÓöePJáÞ'p#À‹Þg>Ùÿ Õë«õ~±.'#¸+¢Š¥ß:¿¬ò…ç³M˜ðï2g_'ÈC×ùN¸¢œ>e@`.¯*úIE+zúÉÁ_é Îå“0üS_Kâx`a}¸öÔÏ6¯¹íÃ×ÏÔ¾(4ÿu¼½‘Ÿ€,àõóç}—3&ìa'‡k²ž) U¯¡g iÞ­ È›&kÑF*vó‰&<’Ùôá¸%j÷WÓò"LóÓsªÔwulxo„ìN°9¹'¹ؽÇìQëàÄ­Ey@í¢Eꣵ¢o« ȨáËùöxîŠwèb Äõojæ‡8ÉŒýÁ¼^&¬%lãù‰>_L`C`óAs¾˜ùúw~‡ù(ÈC×ùNS!ÄFjV˜Ë«Å{w'|ØN^/h§ $ËäùP?ÜL~,sV®'õ³ÍknûxL÷Ûå=`æ¿“Ýmoä' +˜ÄÑ’™¿Ç•™é©N"<• ±#.=åXѯŽñÚTÑz–µt# 4~y¦ù‰ðª ³xþô‹÷© °tX ~ýI`©g¼Ãýò>s{\ýôu°lvf§— Xh¥CÒ†Ò [¦-_X’£üyƒÌØ*Êåc8€Ò*ÀTyt×j} ë/ÕÎ;ÙêõõÍÉH&SüäEÒü²Êa¾Ó| °Ë|g§EWÏ”•1æóª°=¸-üIðùn©­¬hÍöVù$ÌÿÊ×R@VŸ„+ªß¾“úÙå5¿},ØÐ¾(ïÙ(Ð ÿu¾½‘Ÿ€làÆK^톤ŒàêNÝÇ­¬ËklÞ¦hÝW4Obq4ᡇó¢5¬3 H~y¦ù‰ðj]«Â‹÷¦4Ô¡(ÉxԮˇ B·#$á-׿¢\[öV¹Öª®=¾~žš«Æ§)ñíq÷/H̾ ¼Ö_¹mê*•ûÃjë®o0ª»ìËFÁjüÈ;ï4±`kÿÿ(|¾\ ÜqÜ:¿¬òÅA> Øe¾3 Jv1æó*Ô!°îˮ撥·ÊÛʬòIœþÐïI‘Ö68¨ß¾“úÙå5¿}Ìlh_˜÷ž¦È†‰ ÿu¾½‘Ÿ€là•ÕGf¢75Ë=Öø>öØU…¨ð¶bgt5áQûÅÒY@òË‹0ÍÏ{¤›ï’t°ŸÞ;ýͯâ9€‰S´ºöøúy ÛƒYðíq¬›Fé aýG*ÀiÛà€1àœÆå¾éëXøæžf×½±a¡3í1Háý{îH@ñ“ëÖBdΗb/À.ó]½1†¤d`>¯”A©^ù-ÝX¼ª:zÁŸšæ«ƒB‰êc`qýìòšß>ž¤Ïfí óž^^BxFRN²¾ÈO@ p}«¯¯%'c¯åžŽØ-@4Y¬„‡_^„i~—ü™ž&ë;zìiŠÆNäò러¦¨öJ¨\ýèÏà ˜|{Â+À‚ú´ tÚötáàÿì}lçÇïb×ñ.Ží³Åk€2h‘&DmÒB6Jx)Z¡À@h#*¢–uKJ²4IE¨x @¼TSHP”$K‹h$^BìŸü1MH¨š”?€?(šØ&íž{qîž»øÎö99—ïçŸØÇùñãß÷½Ï½=`¤8syFV›¾RÔ}èžz‰Ì0žºË×"ò“/èü2Ê—X˜åc¼l–ï’s—B­ÛŒÎ3B¿;²ýSOá›®cÉ@>‰\-ur³øP(³úè/6¯_¬¼–öI†–Ïð,¶oš÷â=ÀÊ¢C;Y^ÞÈO@ ðûc³þ–éTOs`1*<œ"<òݯ+7x„‡þ¼ºùã`Ó{œ¢é$=ÈÃ..|“•Æá£û ,rìw“Q jêGfÓ4Ý%Àú{€ÍêŸäC°R¶>à!€‘àù$v§,pïW®ÃR^9M€&,ꊈ§ éü2Ê—$pœù. 0³¸ÜÕ7à ¯„›Ô+L÷_ mÝ"^DÿC°ä£;CdÓúè‚e^¿XyM/ŸaXjß4ïÅ{€ ·„|ò-U–—7ò~,¼¡‡ tÖS ¥§ÒÂ#Ÿñ»$_û;{3k(<ôçE*vì.4uóÛ,Àòh„LÍuVàŨc§ 0y8ŤEýÖJaÆ >P©ú‘»®uyÃ׃X÷h³ú뇙ýõÁ0€àÀ™Œ5'ÈÑgE{‡TØy,(fî7úü2Ê—$8VZÞžSìßò… òJhpýCéበſqƒ¥ B д>ºaÌë3¯ÿ–—]?ª}Ó¼—†AzïûSÐhe¸þ"?i(ÀÅï¸iÛu“që䃑ܮ=º3~dûM|νÎ6#’º€¤?OhyÎó/† kzþ$îæ ò1¡\ÌÙ×}ÍJ`EoÃᬌƒKæ;úÃËE”sä9XA}ÿ•À/Pš{jµõÇ̹'ý@±?T{´ëÆ6«á—¬öš«Ñ_¤ïôZ&’àÒ×ÅØ´Wºÿ(pd~V›óxâEyÓœ-]TûFõ£Û•×ôò¡ëG·oš÷¢3sS=Œõåü8_€ÅDp…¿™òÍGjÛÕýûˆð±p8ìQoð•Ü™ì !_ßÍÓu»ªÁ¡Îø‘[o|}{{»ÙŽ^²åÖ$õyÂÀ ÏóUÃôŽžßæ‡`MÜÂæÜ>WÝíZwGy–ா«kÛÞúO•…zÂówsµL’]¼–‰êþ4ß•Êöe·ºå@£Û£ê'0e™Òs®qV÷ }{´3ÞŽý§ë.?d[ÿÎX¨¿ÿ@5pᨯÒŽ…t 9¤J€Kû{DßmZ!>yRH_qàÀòníP Îà76·þx³²½î`WD4!:¿Œò…FWVöbä¡¥í¹úûbÇkWäX1@…’ NŸOº|P·?{Á¶Ób,}Ô)žI5­Õ¾QýèzÅÊkzùÐõ£Û7Í{I€™ÒUlë ÆúòF~/À3î(oËÏÀúåœÿ>Lö†® šÈûïæbûH¥O™å^ÓòdõX÷¼ýÊ•ÏîOúOÎp¯isà0H…_Êaà’6—t~å :¯¬#-mÏÕß§°h~ú¼"á#^-):’¼Uw X“êö…í»1ïÏKºåaÌë£mߨ~t½bå5½|èúÑí›æ½,Àd¾…U–—7ò¶_€nßµæPÃÚ¶œ/FkÖw=ò”}½RâÖžÈtâ8ÀÏþwsÈWO6©ù% ‘6_hÔyeí;‡ÍCkù®ú¾¨“{~õy%¬»[ÒÏóI—êö »:%}̹zÖZ}´íÕ®W̼¦—U?}û&y/ 0ã/锞+Mÿýþòœ$£ñ£üq/çýy?Óò˜ÿÀÆïKžp<ßé©xö¿që%ݳãñP5Åú ·°9W‚Z˜ì;qGHR€]ëkO3à€ ÀçÏTMkº(LèÉ 8R€e¸˜ù;_Lò*þ<4Ùž'ð}±ó‰ÊMû®©±¿¿ÿæi«õ1Ê?mýé?µ|¨ú%ÿã%`¸?ü@€Ó…A~Swß[uhÜ>ç@ž°q{¼súSÓUæU] 0¹DÔk: ’ÎŒ¾yG^9áûè|Ò僶ý ÇŸ\û£^¯80ÚŸ@~ ÀéBÅsþiðÕX#œ(ÀÌ⬷ãÔZG,®©º›u!¿v °7^þypN3Ôù”Š|pRþ%»?ü@€Ó‡'ñÝ’¶›š®ˆx«Üè÷dv9ëõ:ê|4 vB>¥&œ“ÉîO ?à´Á_ñŒùÊl°)À ST}¿Ù;ܘòú¾Sg±å@€6Ÿ&¤(’ÉîO ?àt¢åЫ³F8U€çG ` Ç|ˆ¹?ü@€Ó%ÐÂXQ@€0€`2 À @€0ò€`ä- À€`  À8&¦óçzRÈ-Ï_5S*žý4ÈóƒßÿÊ‘Uó¯¯ÿ*¿ôo|ðÖW±?1ñøýæ2Ö÷ÖHx¥xRî„òa¸¸é"‰×eª¼&¨Þ;N€íÌëüi9+lÏçëõŸ´¿@Šªï7OÊM >%¡…»G°¿ÊëûN¥& òU#¸|TíÀ5²² IDATù„ȳèžý~ׂÈú*ìà|~–{ééeÑj÷Wff6ÝZ’A^gÔžHQ ‡…íåÝ\Mž>ç%v§¦,BóO=‰¼ä÷¯ý3O~mI€¹ ›a¯´ŸY"eíš›ËdýíóÖ0n!À¶æµ \SÝ¿ˆRï»ÓllÂ*²˜«Û3Šý)ìÚ.®6ñׇ‹O€w†Ô×'øîÅÝß1å¬×›s{¼fâÑÇê5ÁÎåSq“÷ܸ!¹4ªö8Jx9#Nfý°E€±?€c¸èøX÷°xÏõIÿÉ“‡Ýî©'RÈGŸðOóÔyúˆç_.:thÇ÷¤¦,Bû/’øxéoýCñg.¯ü£‰¯œáý¦­=ö`°|þ÷7‰×ê±î¬ýÊÁèyß‘÷kÚœzØÎ¼¶A€WÎðýA3añ*×§yI °×˲¿µþÌ}Àz;N­ 2)?l(Àqõ—kªîf]ßDÏý·ü0“ð&fà§éö/•»¾±Ù+—FÝž¸?6cH-é÷É®¶0öpˆ_>ìž·$*ÀÅçª3„‰ã{+Éqéâæ»ßNQ ‡[v5û˜*L¨¨HÑ¢"If2ç¨;æŸl&À%û¯óÖ8/Þ[Ø7K¼Þ*³ôu÷ÒJɃk+*Àvæu*Ø_WL´1A€×µ·×íêíôvÌ¥þþëSΩ¦ø pMáNÈwE|q:‘þr5]e^Å€ýdßêè㻹ùÛ— ÀJ=ò;•—t{“)á¥ß'³~Ø"ÀØÀ8“á®íy/CàÌ@ôÄðj÷_Ä åmt»ÙÔ$ç@Ê®}–6Òv^}b*ÀÛs¾ÅÊ`£mœÉ˜×&þùx­8aùX)~ø,ó:œ D€…Çq®uy£ÒŸÂ-lΕ`¢õIäà’2¹Ç žpȾq­'¯ OxþÿìlÇÇo}öyµ¾;Ÿïdcl@Æ”¨8¶eƒ}þ!c'Ä—mŒ 6á\Ù¸YAv©k£F×)¿Š“@IHůÊPa·¡Ð„PaÿTEP¥ ‰D¡ ©3³»w;³³·{ç;r–Þ÷¸½;ï̽Yí{Ÿ}3on?̸‘qõ©'æãƒØ>@N+DÓ˜ð³Q†xJþå¥ât ?ØW¶DûºrSòŠŸC¾Ç,1НáéLݯÁÅ@À<5–¥í%™•yV%óã÷À9üu‚0‚º“B”Õ¤&Ùww½ó½¼hí#M €£•ë¤7W‰p<ŽGßáåà·ŸæÅa|‹3ãW™­â”`ˆA ÄàÔj »^UN/Bª[—'Òo“»%]“ 9Ôìp÷øá ƒ[û¿Ù+ÿIÎB±É# ¯¯È ‡=6`«^eúï^ø£ÍÕøõÍ›ÿþ9~‡½ú("Îl³Àzæg€g_'^vgðó+û€#÷×Òð¼q¿³ÿ⃘ˆFU s¯ñb’!€ç:}c°ÿ²…ÄSà,$†¶ov¨¨Q°¶wlðl•­ýûCNü`À¶9Ç0¥°ýåÄè|èµZ°Ø´?X•gÆý[/.9¢´gß.ÿþJ¥¨ÂV±c.ý€€¶ÛžÍõþ ôƒ.¾q 'aU–®øí-;¬Ù[ÀQÚ/³MX¡>yûÞCt…<Ùñ)òo­Ïý’¼êB¯~̳oXÖŸ¾>yíSö5?›mº8œýƒ^ÃøâA(A8•ÀugÒ:)N>4ûÕgÀv¨,î_”ŽÕ“XbHž&„’ë .š(X{ÌQû£È¸÷k̼/|Œ ¸0–BG6\ ¬×¬yÉ/6`NÛ\¤¾Ll6ñ×’ì‹EA®^2GÈJ&0Ήg«Â7ÝþèþZö=äíCj™Æ¬:{Sþ ¸°O¶eû«/rÐùìäŒHÍúƒì±ï˜hÇß_ýS‡P½¤UÅO¨îR/À´}¨ö°ÝäöHOVø×š½CìŽÒ~Žn¿œÔ”Fþb=9ûñ)ò½+â©éÒFûùüÈØ­úúä´OÛ×lüÈ ÉDã*Ђ@‰ À•K“Ó¢9î8Ù×ÞŽœjСwTÈ0تÈuÒë=@ °Æ·¦Wo{¿\®}U2?Yyî<«<™3åêûÿE‘úëeωGw~ÐW|¢çGÙ6nø×mÂу¸#—‘áoF†9ÿܪ¬ž®w„=þonxñ¾Blü`À¥‡ð ¹`m|Îg?‹~àî1ÀLÂÃöh8}WúR¨O&„ŠƒÇÇüìP³‚v}èöê^†.ï?ÜpâÌC¬ò¯5{k2ÀÑÚ/³UÆW\`ôö·÷¯~û]®Œëñ)ò¯@¿{-Þxè üÓtö Àúï3×§¾}ƾfã‡,/í7šÉ‰ ØÀ9A^˜Š/ŠºH÷mî]ÄÇ›ôOp^A &—´’Iàú½U]̨ÇÁnefìôg«9$Tü\ 3|*»Tþµfof p4ö“Ô%Ó#÷çÜÏXÜ~ïáÚØO‘¿ã4™š^ëï8¡þ´ÌX÷}æúÔµÏØ×tüFŸ³w©›¹jSˆà¯`‘ŠIË1+ÀÒņŒÇ¨V(¾6ªAkœÙÄgŒVsåmt`â0e]{šÊªõV¼„x®!s쀭ÚO À’ÇãˆÏø`ÎY(œ½ã¼f‹ 3×'Û>c_³ñÓ$ðÃ0ă PÂpåÊäƒàµÎ˜¿ 0³R(¹UÝ´®]+_Xòõ˜ðÀ#?æ«1)m/uœEOÑ 0’£ïô¿²r6H-ˆôh «õçrö&ùŠÚSvÒ¬‹ ¡Í€C×_€Ê’Qüy”` €õS )ûèÚC¦--¯>Y/¯óµjïØÐ~Üç1 À¶îz;®#FÒ\ŸlûŒ}ÍÆOóü¢›_âA(¡xUVš¦ÆáâÔÔDÉÏl¦Š$FÀÒÈÿžNSQØt ð$X¾‹ MPô€ù\¦u»©Õ?K¢6b˜²`,§rÌOrgA’ …€ ç69E©|Ò-3ްtñƒ!Ë(ÄöWÀJ¯—5‹Ñ­VJ’X_‹²®=ô6ÅYd piÀëÈ£;ÎÞ°¡ý˜sÄi|/Z.â-‡bÀšë“mŸ±¯Ùø¹Oy‡ä¯¶ †E° €Ó)Ï›¾/iö«©© “ÎY¨TAœÛ$ŸÏñ,ö}@ `#¥˜ôÊ~í èuʚ੟&ˆ·‰!”#ÃHï„@Ù²fûÏo»%Ÿ /jfráK?pN€Û_€O)ÛŶ *‡ë§Š0ÖoƒDÙGß^­ßÞ”§Q¼ ê­s³Gæ^ öŽ€ìÜ)¾ãCذcÀ¡ëS×>c_³ñëöâwãö¦W/M¦çC¿Øš8`¼žòpSÚ²#Jöìà=e”øE°€A ?®›¯u»©•Kižªàœ?+¹äÉ»Ó_&ÜU8ᤦä" 3(Ir…EààºLÉaXºø¿ùêIÀx'! ¢lÙøñn¼dBتfTÃõ‡·,.=$hçܲöѵWsHȽ&wˆ´GØVr½‹-Ù;æÙOþÑhgŸXŽ`›Û‡ë›Æ€ÙëS×>c_³ñÍñÛ½o=0”蜎Tý/»ÞMZO\·.¹s‹ª†ø°§Ý¼‡…`×I¯óü¥ú¶ôÜ%#~ô0ã±ÃZߌX³¯;`íFïz:²áj@ ` ÷~ñ¹öóÊ$¹òä0Ù¡ò@YZgj°U]Ó6ôàÒ†Ã}»Çü„ÄrBîåã=ãö¦+jUâO6nø|\6*gsK:åý?{wÛÄ}ÀqÜv.Nd'΃B“†‚ª²’ˆ‡¤óìAxH•„´òPê <¬C ”.e[š†t)Tžˆ[¡„Ç>ŒŠB/JÅ‹H[™Z¤I™x±•¦I»ÿÝù|¶Ï‰iœÌ>?/ŠÏ¹ãœòûÿî1ï£G¶}úŸ5zÁÙåUòŠ-XÑãõïSº(ˆ\€÷ößw£X)21Ë=¾(YjÏ»´õÂiûÑ ÅZ£hyä‚u,÷h÷WÏ}eïüÜf²ØóVñÆ´Ñë'v~å‹Ä3½ÇÛ'œ~N/À¶ÚïÛ;Ÿ³%¸¾c ð#­?uC€ºçs˜¿µ«Œ8¼~µÂkEOßýû;ÿ¨õ;È÷W:ÍžuqkëWöŸü4þ}€©Q€ :$ÝLmŸïøˆ¬3Ù$¬@B[•9§hò©:u0‘uñéoV€ßxP”ÀA[àláP¸+Ó_TÄû!%KÍïdl.Ÿ Í¿¶o_«OšÚ­æ±{ãµ}­³%ó+O¦JN8¯'ÿÆ®¥µ×ÎqO*w˜ùh”~_ZÁnïüÅ@ éR+ð‹æñú‰:N½`)3;p•‚å2¬èñƒM;êWzK#ÿ碲Ó1zy£Ç…êë¹GŸªl Ý·v€å‘ ÖÎcêìþÐi3Ù,ö1†K^Ìú‰Ÿ³üKm1`ñ¾ï¬Ip}ÇàG[j/är¿Ÿ8ذ~•«|^ß‘=m|ôïgìü£Öï`ß߬9Ê»?]¿3(Àqu°sŠ\]—;Š7_ÙÔSaûfXNì¢&øPR pÙ¢¸›G™Y€ý몕luÿ±7"7^mÌI“F)œücû˜ }ýĬR3ê9ÀøóYÊ Ó_Ö8ÙßOò…=É_&ð?ãA€üãôŽìüÌoq°x‡œæz$ çm꼩´8â V¦sDÃ÷Nž §êr ‡C[þûa<P€ äD=ÿdîEÃC€Œ)À¹`$lÖ—öÜ£û¦Cvmi=mÏÖþËx8]åŸ,VÎ,z‰U`òñl8õŒrêxêà‰âšOö¿šñ pš+Ýûu‡ð€LÞb@þÖiP€]%sÚ.í‡ï‹ñ @Fü¬ðz¬ “·yÃp°ËÃje<P€ 0`ò 0`ò 0`@€ (ÀP€ S€ @& @& `ÁØò^{ûñÞF9ž’;¿?¬=ô,Éfü޵àÜÇ=ç °ÿ„¸Uä-y ÞÜþ§?ÀI àÌx_p¾4¿…séFoDŠ_Gp¯H@ç/Ô]†cwõ5èm7¸ÿ‘àÀg‹‹Çû‚¡ùÌfà¶ï|U»«BõܪòKÊË–ï3øÊãc½Í¼ªä7Ê~~cP—?ÿÃ@åÓÎåþ÷Fïþêû•ÿ9Úòëo `€Äpq"œX\<TîûŽÞ^ €ËË<¼ü¥Üo.g6E·´tl/Mê—ÿüåË+ï»Ýõƒ/KÏ|Tyâï¾÷å‘—[;¿¢üÍõ蟯ß$€[ÚÞùíOzNþnöÔ@‹HlgŠg÷”÷ÀÛc™$p÷€ð-äKÛ|innîâ{¿¿c[ךs—Úz¶´vtÔ?ÓVªÐÚ'¥¯v´u–µ®ûýå_ÙYûìè×ûƒlx UgË[éþᆿ¯³Õ?T€Xð–§gO?xó^]åŽ8Õ½ÿ^ €o%vß±ÎPþ«_\ï~Ö¿F€¤pI*û58I{ͽ@äÛwô_ÝëòmH`g0àDùâ¯Ý¼Û·@Û[ÀñÖyôïÝÿÑ¿ØÞ€Ž¿·~ê{ €í-àøët¹Ilo@€¶· €@Û[À € ° Ø €l@€0à›x©'{òµkóŽ± àûîßúXLØ^Ÿž|$Ø;XyXØÜ03]ûý#Áî°¸¤ýý. €äðê}­Ûã°½ \8ÛÜ"€ËφÀm½½¯\ZJí|ÝÁ q¼j_WíqÔØ^.~|:Ú³2¸ÅKs5ÇÓ+O^H‡À˶¿Ð~ØÁ i\¿¯kö8’ï¶×löΗ¶wöòÄJëfòu¯J¿Z}8Þ—ë 7€ï}ÜÁ i\·¯ëö8šl¯Øì|âÓÁ|ƒÁÍŸÞ[=ztGnêX˜ünSªH\×ïë†{¥¶×löÎË«Û`p'Gœªþ(x_zÛ{apÛ‹©çr°HV¯Þ×ö8Bl¯Øüœi<¸£Ÿä¦V~<³P3€wÊ>Õå`l”E IDAT¨n°¯`{ @\¸°/}~°v‡†Ü|&ÔÞúÄ–7+’À ö5âl¯ˆiç/ Ï<¹r-¬ócšÀöUÀÿ#€'G†®Tß’4‘žÎ„À÷<š:x—ƒ@‚¸á¾F<€í5ñ àÑÁÔXí Cåka…À->Ü~õó‡ €ÄpÃ}úU í5q àâ¹ô; UR8Üné_Je³î-@R¸ñ¾F=€í5q àê«ÒËÓA½ùyt©Ç œn¼¯‘`{ @ü¸rYކ}%œAî¦ýê½­‰ à+›#€í51 àɾÜJèæ«Ê§h•>„t¬#©ƒw;X$'€ïkÔ/‚e¯ˆ_—>©Ý©îf nƒM àÆûê6Hp§¸¸/X¿¾°½`“pù¬bypkg`•¶øð®CÙ§º,’Àëö8zl¯Øôœ¿PwŽÝÕk`m»³Üñbêyï) ɼ~£ÀöÜ ïö|ëY é¶×lú¾MÍùcnÁ=ˆ]oyzöôƒ7à;»·ö‰n?ì`³.IeãÀö|›:ÞYJí|ÝÁ ~œQÛkðíz©gù$±÷,pdØ^ €›À[N^›ºË±@G:€í5øvµõö¶:Nàh°½@Gå¢ €@ `À €0`À0`ƒ 0` °½ ØÞ€ `ˆ\ßwÿÖÇþ÷οqinîâåpöö¥žìÉ×®Í84àÉG‚½ƒ•‡…ýÁ 3Ó™ü…ôÊ§ÛÆ041€ûG‚Ý•Goü~Ïòâ¦gB à’ö÷»À…³}€;ÀåÕ­p~"Èølqñt<°B·õö¾ri)µóuÇ€DpñãÓÁО•.^š«9ž.=Y à™‹¿¨¸ìhh^˯2WøìÛÓåÅ ×~&Üü½ÝþBûaÇ€$pù'¼³—'ÒµÎäë^•~uùë+_ò`hb÷åúVr7Ÿ¯ÍoƒámVßû¸c@²øÄ§ƒù‰õ•›?3¼wZ@X<º#7ulíÏ{ Ç‚mað»=N Ùœ).¿ñh}åNŽ8•ÀRö¥·½·.€GŸ+Ÿ€ÊÞ¶½˜zþ!Ç€Dp¦q~’›Ê`)€óg†g k¸x.ýÀ“!íí®CÙ§ºðº.ìKŸ¬½G8:ñÙÅA Í àþ‘Ü|fm—ª¸ôlH{»õ‰-o:4àuœ¿0<óäÊE²–x{L@“¸°?8?¶6€óã}¹©1 w4€'G†®T¾377·x|O)Ï `hJ'Ò³Ó™5œßÓ¸›³·÷<š:x—c€^À£;‚Õû;Vøx$¨¼)XÀmðxßЩÌÚžÙ ›´·>Ü~õóG\ÀÅséòÖ^:˜™ÀЄ®½Ô¼*€7îßfímÿR*›u/`p}W_•^w®Vƒg}‹àëðxõ Uó·èßfííèR@¯ àÊe9ÖŸ¬•Î]ÀÐü.lÿs÷o“ö¶ÿ™ö« ô¶:>àg`õ5(ÝL挀æp¾ª| téCõåçÁL¨|Ï‘ÔÁ»p}—>©Þiõ)Ðû‚04!€ÿËÞÝþD‘gv'ìdwaa xˆˆž9Qˆ°®âÁ‰è¡¶øæ4¸jˆwàÚžZ9%AO1žJõÅùøÁÏkržU›jÿ›4½øÊ틦/úªó´ëìÌ,¬®¿ŸÊ:ë8;2~™ßü&6ê*zp Ç5¥Îãló$l `¹t«l~]_.N+%€p"€ÃkÄ¥Õ0°2+¢°6K=xvÛ1eîçÈ@¹X{’Ç àH/Ù,6펪væ|»°QZ›Å±¼Ï¸`˜†c©þ3hÃ¥Þ%sEq×W§*D±ö‘‡À©Ž©uè–£ŒíÂ6îÀƒpøOê"ßo{`þ8íx°xÇð>ðÐ"‡n9þTY“C'äŒÁ‚Çg¿ß»û¼Vp¯rïÖ 7''§fúàñ7‚ÒåÚŠ~Á¿ÿ­ xö AºÜ[—5ö§÷P[¿à¾;“o>p¬œuµŽ,wÉ'Û¶<Ñ×MàT+×wçUÄ8rý`T›KùÃÀ…2_“º0¼Û¡rÍt÷9Þ¼Ñ×™{›³ŒË'Žån ¹ï–ÖþP(øëÛ÷¯ßxÍu„÷§·½¯R¢€ÀIpä‚+Àë·Õߺfèã¯`Þ}äsïžÛŸ¹¢ì ~*½OœåkªvvRŽÖJ}¬nc9€s¥ÕêuÚÙ Ò¶ßjs¶÷²FÓþÌxr¯Ç·x¨^™çËÓØp^žw’À©Þõ¨4`àØ‚ž²ªf'"/jvvVJï-aõä÷5€KBþÃê郟¾Í2[+ýg G×þTaÿ…o?ð¼d®¯i‡)€=+Ë|0°'¢Ä®M×—×*'à%›íæ¾z·|CØÀ;KýŸ‚ûËôÄÁæíú±ó@Ç«“éÉ®?îýãIk³¼]›û+…u¿¶ymç_?ÿùÓô¤?Oø‡þПª.Åþùý!ÇO/» m?{ôj­2p9=mj‘œÁÊ$ÎØmþ*÷amùËú3_:NiZׯ,—w޼–âeò_-ÞÔÞ×ywAÚù×ÜÆ!"`Ox¹kÚ‰Ö+ÀSžÀ8Àû^òƒOóª>¯ö¬£œ™“³]¶YrÁ6§¯Rý¿ÄѸa¿‰™Þ¯oÆSeÒd)ÀÆ×6¾ù9;;{Y²¹ÝsEr»•µýRý ^mÝ’›‰9nã.Æê5·QÚ0N àÙ•Ü”î.°Ù~%PÛªS9Ïÿ…ºÿŽWÆÝ<œâþ´¬?m¼¼Ü­¾Cà-òÖ­Ý«üºa\¢ã‘Þòs ±y6ܧk õ Ý¢\4•x_£p¹÷ü A»Ö´ýr Þ{(Ìï½ÚÒþ朋‚±¬SÝŸ–õËËÝwåp¢Oи­åå aB[èÕó òÜ¥Ç#·AËc €ð¤r_·ÇÀ@äÐwå¢íGìQœ àÀ…²uÑ%'ΕiE:; ¬ÅÓ ÁVÒ¢ÝñšÛ($UXæ÷ËÁÛÑrù£495£÷ÚÆÖdgÿ³0¹Ï3«AZ­N€<»AÜÔÂÐvµ7}ìS{·+…9µÈß©N =«A˜ÿ;ëöËÚÜpDÏí‚úÜ߉êÈéw¶?-ë/iQ7'-óxP à£g²®­ëß_x­¨xSÂãaÛ °]‡×ˆ½ÕÆ^2W} ð±j À°p}ù¼;ú±ªÍµçê‰ðÀ qO3÷o7ܳ:T°_¤uYZæÆ`qWe-ï—ƒWRz×Àq¯mþBßõbðkÖ h HÖ·{¼ÑÄøÞ$o…ä¾?N NåS›·?•äÞ î­Víó,®ôþ÷§yý £7óFXš0SÞji‚6:ññ°nÀÆ)8>síiöXX.àR€á `ù¬?úH`Q=C+Cµl¦Ãö~]Œ‹ƒÉŒ¶¼_^­H?.Ÿ²ÀæµÌô¬´äØ»E¹Œ«’Srm–²RÁãgoÀÚäÌ©WÜ_Z·_^kñ½0•K¬rwš»=¥ýi^ÿÔ+ú,ÕÑVV•¿J¹êöÈðóëÔhS9«b<·ïè$©àñ%›÷'ÁZ¤O‚¥? X»„jÞ~õ1EZº¾“býZ•X'­ü¡À  €,€WºD£nC/§ÔÀ WkÓrDÏÐeâ´ÒèÉzJÝ(¸÷ Û!YÞŸbo5ʱ,¶^VÿCúÆ&¶AÒÓ4¤|eÞ~s§:zˆõ{·è·ø*¥mÀ C ÀoÀwâùNÀ W×çùîÒ ê‹=®OšGÃ=ÀotaÑòþÔøÍïVee…ûBvÏ2L–¬]2°vK°eûcêÕ8ÕI°†X¿òy´Y³^² à„ǃI°Àƒp@§ –‹kã2߀a `ù…a¨sx¨¿Š,§U†Y µY‰¶~q$Q[Þïl[gÖ¥+Zf]aI(:ÉÔÆ ’¾±®YïÞŸeÝ~ó`ócRÝŸæ+À·ôÇûÎjlØöx¤ñ$ðÐÏÖN³æ{€•›jÏÀ SË¡k¸,Ÿ‡}Ýúµ`_÷ÈÏ­<—v¡ö÷vëK}óïììÿ$ŠXóûß"€½§ÿþ_» ¢½ÖI°,ÏSÿhÿcïlc¢88>Ãe2ì.ìnPdA7PIU0pê²_¢n}ájõêk=áR8îlˆ=¸Š+MµWÜ’¨§6Ô€õe›ÁÄÃ5=±éé?^ðK_4iýÐ\š»\ró²/³ÏÌÎβ³0Àÿ÷Aû8³Ï<ûLwþó›ç™™èdâ¸ú êYI «êÄÉÐæ…SH¢ýŠàê+ôö…Æõ'YÿZ/# \WÒÂX°B€Õö‡´MV×kš¼^ñx,å3'!À€1,LÀð™Åg±¸ÜþQë³ð󉩧/G¢wø’ëO@€Oÿèp|·@ç·© ±ýg.·ßxF…¡àÕõÁšúÚÏ yÅ]E}-^æ6ÿíÛFiq踬Ôz«©oë?†i÷÷•ö+F€ígýÄ‹†ÓêO²þ‚zÚz÷ó‘aºÄɹR€Uö‡ÀÚ¸ño€'àuc×ÅiV§vd-;× ™`á1ÏQÖ‡'=¿!7Ý=+²sïô´ÎÉ>¶;g²X8WˆÍì-)OÂÕC~éd‚¹)µRvQ€ÿ¨zbý °8ïù}_Æb»’6·ï]¡ýÕWèðÖ#ͯÏR4èd»6ÓVq µ¬T\›¦ƒ竵_1,Œ9ZhX’õ[ʤ•û߬l~+ 0'`åþ7Y¯>3 À xþ¢ì]c=BÜ.;“¦J€óº~'¬’{§)ÇLq]÷:÷÷„—7þðRC€‰õ' À?;ÿ*Ôý}ªF†½÷7‡ßzT4pá—N§5p÷ð\õúж„GÞ›WVʄ־µR½ýŠ`ÊÞâ·v{ŒêOeýîuv/y_¢VÙâ°°Àp*ìû`¹Źw®ç@€€ °.ºNžü¦)Ç,l'xe§N?wÔ¿~ªX_ÿ/ÝûY9{âúÚþ66ö ¬¬Ò=À e×ÛþüêÚ}+ßÀþLþ‰$Ÿ·=ò2{q0Ìì;v¡T[€£W›y8ÉÇí¹œ00¥,Ý+lâ@~úRåÌÆaq¹2^Ÿ].À©Q5N»šçÿº¶!?+› ³V€…[ZX}œ ô(0©læ@nüÙñSþÌØc`jÃ8Íö÷î6Ep§Z‡iþ €Ç ÀÆðôÇTnÑLµ yÅ[ͦ¾ýµ4Ëšj< Àxư½ñµã?3F¸&&Àåk}Üiæ jw{¿Æ/†àŒpú¯3gMT€MgÇ À8#Ø]ØÑ ÀxV< €`0 À` @€È€#0 À` @€‘·€#o€-À¶;WKÄRÁhàã|iý¬S8o°4²þéFÑ@ÏØØç»=éÔák}ÜY¼`²ú;1ójw{¿Æ/0K¸xÁ¼Z“pY©ûmÅiÿ“Ô¯d­³æ“IÞ)²¼›4"ù‹ü3 ðžEÙ›—JÿéÛ‘ãh“¢œ®nc— Ga¥—ݾPZÂ% äê+±Ëëûç꫚éï–-¶~{Ø_ÛZÇVj}@eyõP³x–~§}òQË÷ÃBü6`‘ù+²×k•'K€'rüË›T˜Ë¼+òP–w)ÓâŒ|¿’÷ô÷R,‘`ö}9'{JØ6èt?¼Ô×þQdhÞaNx"ér¹¶•§'ÀdýÓ ¾ñlðÅŸ6þ7:€ËwÇûZŸP.¯§ÙþÞÝùôwÚp§Z‡iææü8àpê®×(OšOäø—7&Vä¡<ïR`öPaª,Ï_ä˜D€Wݸ½lcT€W œŒÐšÅÿ#Y΄o+gºùpà"e{{S¾|y‰V s}}}-~ëþ/—Îú§•ÍÌþÏDm=ç™ óùk•_sN«¿ Pà¶!?‹3Xݯ²â„—,O¢OàøŸ–sS ÀdÞ¥(Àîƒ) 0‘¿È?0ƒçñY{ìúÎ˜ÛæÉ®B'®RÏÌ=À-~í LÈkýšJ˜¬~3á#·X&&ÀÕ ´ûV¾‘ý.¶G^fï\ü<à_ÏÉ#^²<ƒx*F€Ó:Wq²áùÓºX‘¿È?0…ÿùÁÒ¼ÊÁݼ‹Ë77i”`î½}A8iýf¦hâ~¥ØÞâ·v{ íïô xÐéþ?OÀ¬àu¿Ê=üLxÉ2F€Í$À mý4Vä/òÌ À9«¹Uà=+v×*(Àƒô¡è¡ ñLùÐ’8¹®{Wç-j<ïæSñ!Ç+Õêçñ {;îo6ðQŒ¯Ÿ÷¶E÷ÚÄö¹®EÃ^kàþ‹35Ul Ðt¾?†ýÂs²oR[^QÇZhX«õ¯lû%å‹´ uÞ\IUó¾™`QTAý4¾( °oKÖçdÂK–`ñøýð3Lä‹"¯”_?™O”íËÇ| Ü?ú@0÷È+Üës5"Ðöß:‹7éko*LäÞ¼’ pÍ3ºx‰\€eyÎ50'ø•…Ä/QÚ›¯’¿È?0…ç¨ ðº‘ÜÃZeÃØîrá…ÌÅ£OȪ‡üâ¹D06­ˆà¶QñQ–5¿Q©Ÿâ.†X†áï{×bP/Ÿ~îp86éÕ}bûÜ£fñëÐêO¦äÎ:™Û±ÙREkXò¡_E|0b™?ÁP.·Ÿõ»Ÿ×ߊþß¾pBÑÀŸììmþ ²¿(ÊÒâµâ8`– pÞÅåG/ùbÂK–àªQñµ7Wêà¸ã;™WмQÖO|ž¢6ŒKo5`EK pØcl‰ p²öj hŸŠëÉ+™/î Y…‡8.Ïí×èýÁÝ™n‹°î‡ÊüEþ€©Ø·%«w©FÙ°@^]Í'ñâ)ïg®Š: !³ :­·ÿÙ×5J¿Uà[£tMï7C^v¯GY?UbûÏ\Þzã|bP/!ð+“ÛßV.”Û—´¾¥ún„Šzš‰E¿Rpùþ`nòœ¢U¸ú -7ëtû›ì_bûü Ekó‹qº¸Õûê±SxnµÚþâ)¨KüÖ*˜<Eî™™ð’eÃøx=ÝßÛ3N'¼ •<þËŽïd^© p|ýäç©uµtð᥾­#¿Ä8â¿j#ÀIÛ›Šy§;¯d|@š”àø€±ªÎ°IH?8?yô­«Ø~‹S ÚDÃÑ–ùÏhÖÿeßRñ¾+:¢]ÙÌÜÌÙ~Ö)œ`(–—”‹W£êo²‰í—”;»ó¯–î>á¹Z*œ'¨í/Jœ‡=}ŸLF°oGvïV™ð’eÃØÚ)°+êèš¿$`;‘/d^‘y£¨Ÿüüê+tÍïÃàŠ°-â¿*#ÀÉÛ«…"ãóNw^ɸ¬Tx‹‚$ÀDž—…ø:æÕBü—âöýQ‘¿È?0µïY±ìïZecï>®¦­‘¼K¸B½96N€Yfa$ª”õ·D'$9 é‹?„Û+ÇP +¶ßât'‰öúY¶ÿxÔ°ãîiZ¹™(r‚AÞ¬|@XZýMö/±ý’r¶x nÀKÓ¡Õ÷—z»`V ðªYÇšrbÂK–`Vº¥†?^'zˆ“üø¯È—ÿ³wv±Q¿óŽÓù|>Ÿ… 6&.*Œp ÆXÄà„ÏRÔŒKåJ¶ÀPJhUÀD"¨H)#5 l$‚Q$¾S¥ô…Ç ¤ªU^xHó€¢*U¥îì×íÎÎ}˜»³üû½Ø{w;»;þÏogvÆ›WÒ3Àîò=û×7¹ÃF°î¿F$y{€ÓžoƼõ)&Ár p¶yåà2}eC€¥<_ÐÙ·Isè]ÚïóºD©rŽü(Bn{=Ø»$Íö pm§ÕqÙš°Ç(¹øsÍÍ[¬Îò#Ý~k*í“bŽŠ| ų dïñµð­¹ÿ״Ň–=ñ‡öÊîG¿1'e*Ör\܇Î[}Ëõ+¿vª(jü q×»¶Sk(¿/£¥ø-ÿA` ð²ªF1·¤-¼òvØè±Œ½ÚØ–Y€=ùâÍ+Y€]åËû;–õ3ÂHpÒ=ÀiÏ7wÎ6¯¬•Ø[§ °œçc»¢ëbk£_þÂßQ7~Åú)ªü%ÿŠU€[N•¸V<’·GR€ë7&Ÿé±sÍ=ÚÜ·µÉ2å,Þ¹°õû¼®ðúqù¯òƒHD~×{ü؉Iþpôfoº9.CeïjúÑ\o kùj^e Ž\ñ µÊ©¾¥ú•_;Umü }ð—hP(¿/ã,•CÃF‰[·–-á•· 1z¥šî¿úÊ¿ÿÞ|ñæ•$À®ò=û7œ“R·5±¦*鿊à ç›>o3 p¶yåà²Kþ5›t–ó¼¬;°­ú9ïoiŸðÖŸ&uÔ©ò—ü(V6ïB§ÜInmìù…²غ±Z¯à±]öÜ"Ч ÷¢:þŽÍƒþp¸æ~Úu™fÞ¶'qºvm¦öH€åú–êW>¾>ŒLûxQoP(¿/€/+ :9"opàÔ]Ž¿ÿŠ|‰Éy•b`½|ÏþŽ4К˜³Pà))8óùf ½g›WNýĺËy¹äï=¿µ5Ëë›´€C€^6¦á“r{„{€Oe/ÀïîqRéy[}üêk·šÂá ¯¥Wgk—w›,‰¤-Äh¹¾e–ŽïiP(¿¯œÚ3/£&oP€[›¬ßÒ °"_ä¼J!Àzùžý5MtOŠ,†@_j·—ú³Xû¼[€Õç›!o‡,À)óÊ%À¡Q´ IDAT‘+‰¾^U°ï£ÄONlÜjx#pr­˜ãƒ!Ð/ޝ®*uÏ€%mô3ÀÞ§*Ž(¸0Ï'ú3À:ñxó@SúuB[æEJlNÕñÃÎp!&Á’ë[ª_ùøž…òûRŸÀhàr1äYûáÙ.œ‹¾ÙŸf#Àž|‘óJ-ÀFùžýµ—]B¨?ÜЈî­sfLL•é|s8Û¼r °oÁÒÀÍ©Šg€5žp]{=v%±¾[†˜I°^Ö6ÜK IÛ#> ´wõ¢ì{€Õ³@÷üüƒ–€Q/Àö(+é™ßB®¼ÜÒÀÞxfV䋜W®¼‘Ê÷îßÚè¨sf·XiÇmt[Üð^ãØÚ+nVŸo6ìÎà œ*¯$Ž­MDŠY µ×<1&‡œ£ÿd$€F€[]SBËÛ#+Àb]Aófqä½Ò°ºX¹ð¡g߯s¸€ßý㻹ª×“rÈǯ¾lžZ™=XL]^™ý0‘ýÜQ$¤·'ÄÆÌÛþ}Ör×û¾†s~÷˜³Üê[®_éøž…òûÒ™¾Ã.ŒkBj ˜œ7®9 ¤|Qä•+oäò=ù4æK#lõ|ÒØ7ó±öªØ¿T÷Üé·£]C ç›2‡Õ“`¹ó0ƒ«òÊY?ÖâŠZއëû¦/ øÅÔÚ1Œö…7É?€¢`1àªE°5âJË^—ðÊÛÃ"À'+++CÎ@¶²/»”ˆÞ¼{f÷{ÛŸè‚+ÞÐøoæ2õûêûÃŽœÙ}퉿ÏZÏðÑÓŠŠŠMχ¾®¨øË+Y~X:þ¼®¾¯în8¿ûè@“}‡ÛYÞôÙ½gôË~·ßºs¹’ˆÞXuþè½ÿnÒ ŽÞ<|}ÐázÂZöÉù¾/öQ»´pcNõ-ׯt|oƒBþ¾ì†UþVa@€³àèçÎ/¹7h §*¿œÿå|Qä•+oäò½ù4±S¼rõâþiƒËmöµ­ð÷‰ÍênÍý‹Û_X³@{Îw¨í Wºó.«¼rÖ%ÀZ¬ê,çyù°¾Ž’²†ázó—ü(.?ë˜vc¾9çÕäî9°&·‹¶BräPíT½ñ`ÞHmh7úʸZàXè·š3õ‡ÊNô_óc³ü˜.Àß>ÿèã°ÞÏî³òñÎùͳO.ôë,Ok9Eï4þrá`r$ßØÛÆ>}Z ‡^5*çÂkõ­u ïë÷¨Ý³]çTßrýJÇ×gƒBÚß:dWú‘fpþ×øý}¿Ž§Ê/çßÿ¸”/ª¼ræ\~Ü“O¡‰Í"j,>7'™gÑãìu€=ç;TÜyèÊ»¬òÊY?–ëf/XÊs-\îóÖvsAaOþ’ðó™/òá­ƒ‰}wv«ó¹8ìàT=À>ßÌëƒMûî,J®:Ôóϧ©8VéB}=Ï**þžý„ÒîãWzü?Ñ=7{¿§*¯a ßHïšÉ®¾÷ðà¾=_éà[pëà>±smòQ'×û±-íÑ“uùªooýºŽï½£.íoPv)Qà p@€‡_€÷Ýysnêürÿý—òE‘Wμñ–ïɧPõ'E |ÿð¸¤ûb­ýƼÒmâóGâö2H=âÃoÎÍá¢]yèàLyå¬[€Å3¿ë¼y.>֯Ǿ\Oþ’Å À92Ë÷òy1ß¡U¨?0Û&)¦Í õ|ó¿\Ÿç‰ÄR”ŠØÿàÁƒ»g\¯ÌPŽ÷ã ÝþšÏãÃYß± û—}Ñd-j ð2 p`Í®ã“Ò ð0çm(ä‹å–_‘XºÃÈýqÅSÛ;ÚÃŽáÐ/­‹!¼á¢àçWI®<‚äX?rþ’pqÐó¬âßñ—øŸÁ‚Çþð…Ó«Šâ#¶úä?Œµ1E!ÀùÌ_ò.}=”Gx_Dv 4é¢ü™L_ꇋª?F€ Ÿ¿ä\$Äz¾©øî¥¤æíGÆ.ÝsóôùŸ 0<8™¿ãÉ?¸X8ô1ÿR†S‚cÔ Àð(`1ò.Š@ªä À0 € À2 € À0 €“·0LÞ À0 À0Œ ÀpzÊ\Þñ* 0$žðÊø¥0@‘ ðêiÁE3Œ_›W“lÝ ^úðz‰Øøó* ¯n¹v<ظÐà–O÷[l//6oÖÍ·åì¬Ò#0@þ¸EX¯-À[/^6¸JÞF€Åç]Wß.±xL¹ã®ô¯´m?+ýÌÜœO äO€—U•V%ØŽb9(˜ï¼;£ümoê–Ÿ˜¥yž8»ñ˜.À›`€< pÛ륽›`€áà1-"u¼zö;ÇŒtöêÓtL3z‚ d€|póâ’ÉG`€áà1jn»^Úk%rã]Í“O•LžA äI€ËOÌÚúûf`ä¸yqÉéä¼Ð½GOÍÚÊ2Hyà‰³KŒq p0ظóÁÅ0À0 pùY‡ï¶­, Î*ÙµŠ@È—7¯ ž^" °àÃKÈ[€aàÕ³“ü¶œ¨ K{— Àÿgïnc›¸8ŽÛ±ãx—GÇJ(á)ƒ­kˆ$!XBÉB»6VM‰Z k€@`jØ  „–åa)­Ð#ÚuSñ „„P×N  JЬ/&VíîüxöÙ>ÇgãFßÏr¶sgŸÃýþ¿»ót*ÀŽ“ë}/1ÙÚÜܼ«a‚Xwó‘#âY€¥ _yúnÙÎ⑟ORÍc€žàª\ùKü¾carYw‰Ùuò€¸`ÇÎ$ùÜ»¨G¶‰-8‰=ÒèT€Ý»š¿d°¦Ä¼´ž¼ nصWÚ=‘Ú&N2ŸL  C®r}â×¥Mqn´O “·Ä¸;/ËápÞU¶ÈüÃý ðŠ»R? oˆW®ÉõIÞ%îÝÒU¹¾;¨ dz\€3]¤S Å|ïj§¿,Nø|åo§öz«0 @TØs¢UÀg€“8ã €ø`1y}‹µ×y>tf{q*ŸI ¶¸¦Äüx!y @l °t–C*Àî3°Ä,öý@ð"çWgV•˜+¹*%1)ÀÃ6J)ëè.1Woå[ˆMÎÜãsŽñ®Ë^ùîzXb6/¿°k[ @Ì ð1n_ß6Ál®>—BÞðˆ pJëIç#;dbS€Ëþ:ANÛÔ§·Ä¨k¹öHsóÁã)™2Ú °ifã¶Á¡ °7lSrܪßÍ NØÌ2‘`‘Ѫ±‡Á ž˜@ âl¥@€LÞ@€LÞ@€ (ÀP€ S€ @& @& @`(ÀP€)ÀP€ “·P€ “·P€ €Xà̵Gš›OŽ] ·<¸ûm–â–ºoþs×f»û§r­æÜy¿ëÇŒYÉ’òß…xøö‡ßýï±Ó*Ò»/¯Ï^Óôµóõçœiú¥kýdlΖÆQi¯F÷ ”ó×}ýxŸoPe —×÷d0ôÒôçÝcÞŽËë+ŒÑ¾jˆ{î?¨ï”H °CJ܃oÆ"o‡ î÷lD¿06{Ô=ZÒ°Ò™ µçžy¦^zõfúU<óQçõ¡Ñ²#.lœn‰Óò¢ûûØœœ|Ó’~(¹\“ YòÛ?Fôë‹kO¼Õ»©\¾¶ñ €Ä)À5Oš+ ?–=oöZZ/ÞÒz2Iú¹±#VØ~í®í’b[_÷ÀæôFB®Õ±µÉŸç»~[€]¯åUKi5Es娶º†ÃJ­Ï=á¼GèE{½‡^ê£mþ¡„›_ßiÒ=kÄ­þ:Ÿ¡çù›ëÑùò¸P ¿)F«µßùÐ;„Ã:c a ðÀóxÏçîmÎø]•XС‡Ïƒ(E‘—ZÚ`Ã…Ñ‘àô1ò“ þ¸HòQçõ¡ÉðOJå•v`´þËëÙx!Ìhì3ƒð—dgñV._Óx@ÂಹæàX,Ç#?ÞÕk®Þ«#ÀÛïÙîçûvÆ[6ÛGoÙ²àẄ\«ã6•æî¯‚ÝnŸº$xûî¥ïþËf[¨>­š ‡³ûïè\¹b—3Ÿ™fZﻼ¡Ñ`ÿùG_€­V£ñÀÜ·ù>_õ„ýÒh=°{z–ü‚Ö63šN…<=u¨õÔÖN»ÝÂÿh½­K©ë.ÀŽÅæê »vm+ž×KŽ‡Íƒ(E“—ˆ¿þŠ®8¢|Ôy}„—Q5Øh:»üõË]3꿼BÿE/IÞ'‰÷þ‚GS€•Ë×4ž ØÑ½ÍûH…eG+¬!cli„£6øž`Çž$OÎÜSœ:Oã²½äp¸<ˆVTy©6¤‹Y9¬+øã"ÌGÝ×G¸¿ëÌÄÇ[ŠšŸÒy=/„&޾öK'";{lü °rùšÆ3£gŠÙÛxüÅ$wNÉôÙ+½Jº{éty²*7&§dÉ,YŠ6x-QÏ}¾ Z€oÉgw×=°Ý·¨N«n“+B9ÂúØ ŸÈŽ|þ‘ÌO 4ñ•‚˜ø3ò5Í­h®±ß‡ŠÄK¿XjšÑ'ÄXj~¿ÓügÐ pUnj®»,I79vÁzG€c-ê¼Ô¹Ë빫ǟÌG×GH9sŒÜ!ú/¯ã…0 6I£¯±µoõy4X¹|Mã‰R€—Ÿ+Ìô)Àž;Ú‹+ë¥ì æá#̉ÑU)où}$øû_€[nÛ^QŸV!üÁøÜ à°óïA–΃2j‹ÁŒÅioûEŸtÕ§!_ð§ügÐ ð¸©ó¹rÖ!Fq}Jâ`!ñ pôy©z^€ÕòQßõ¦ÍšVgÅny‘ÂyúTy‡,ù(ÿÑ`åò5g$FNqHeW¥×”Hú÷²¹Íu@x‘¹ºCÿ@n¹'_Jq¡>­öú_ó¼þyädú…%x +ׇ_a•[ºHcÓW£Õæ/*;y¬tÍÙÊw5`¡õÉc¥iMg¿jË÷ 4Ã.©¥<߀÷£`¶õµ€Ÿ3'TˆæÌ1­æó¿z_.›”ôø›î,X`9Î¯óæ‡¸qŸÜ'º†ï;.‹rvé9é –» KM/­3üÞ] 3fe÷Ÿ¨:?ÃZqcŸÖ´>[ÚÞ‡Ïßܾô¬öí}Ty©a}`ežª¯goVä«ÿó œ_`>*Þ¿ù…Ëwµõ!½?ÒëS[ÿEcŒ£~­¼I×åE>^'ýЉÒìf–§çµß¹zý‹-ž÷óÎÕZiÔö–ëéîò«ÿ¾±ÂîS€…YµÉmñèŒYÉÒ1ÝÀù ­7®×–_½~c¿EeùšÆ3¤§¨àq'SçÉyœÚæ9#Úýcl °Å"`‹Dõ7ŠŽVÈc‰ ÎÓ„¤ fúE颉VOöÖ¡/»#uÞri;g(ˆ°‹¯ïÒè[Þk^ùOȰÛ.Š]¤-ÐýÖ‡J^vF¾H㨟ªÌß ´wYM&im½`ÑR€纵WnôZÁli×±j ù¾›+ú] X‚eqiˆƒ¼Â\ee€^Q€3Û‹—v”¹ pMnuG¬ ðð3R±žr6˜<1?Lò“s¾g¾4:Ÿ¬\u]ØÕ½Øâ-ÀÊùI!Š5h“Ï-·ÅÁD/(ʼ ³>òÆX• ÈÓ ‰å)À~ùªV€•ùÊ÷Ão~áò=p}Èï5Øúð3¿k]ê¼¼ˆÇ áÿÖJE6oE¡Á]€‡’¿šãsç‘ݼ¿Ëí×[€Ç9ïN.—«®«»ú¯· Þ¬˜Ÿ°Ù9»r÷7(—¯i< ¡ pÙ¤¤Ý…Οçy¾¨AeßtôOÑ^W'–Âû~ßxXسÃïpvÚŸþÖÙzƸá´{ƒy±bCåÁó=Øw:ú¼ïPò‰/Vˆ›Ñ›y{o/ؤ½K‡|m¶K ƒNûyzŽ'o壞òòf‡tÿõX€?ßÉÄ52"æ¡6²Û2ÆGÅ8”4\b·<“©)8¤mJ›Ô`ƒIy(¼ vˆ]ž‰1mx((PPÚ(R„B‰•?ª þhø#E­ªÎcgwgvv÷ö`ÜùIÀÍùî·»3x¾ó™ßÌo&dlN'œµ-mõÒ¬MMSÇýdãØðkõòÁ=»¯Ëx›"ÐÏ)С·“1Ož.·\|§«öý¾éLø—¦ýOú.y·«ýR ìïõ€cÛ!/ˆíyÕK‡úà0¥§–õL˜ÑWöþLþLúÈ´ãÏIßMõÁ´kEËèºKöõ\bGJ€÷(·¯íÐz ÎpÁÀíöææ²«*OnUŽ\Ûœ¾iÖ€ ÿò"À´¿«»ŠM³n å\?¦ñŒ0aÂú3gís_ULóâe¯è‰*“»8$ø7N\´ ïÉ©—Q:ÌõË`BÁa€©r¬|ºÆà9íðß‚g:sz±eAÇ© ³õaàõ8t ¾,ÃsYÿ… ý3QÂÂâ…Ö‹vŒ¼2‚AÛGüA 6ÓürA£Ú#¤g'§]v[‚ó#£ &l pÙ³Þ=µ:%nß5BøNJ8ó-Ïé\Øñãµ®€x`Q mÁ}le‡<ñ‡j·%$üˉ3þô,F‚¢ï¶ÕŽA‰üfh|ìV/ê#„NQz)J"œ”žZk’æék À”>›ô‘iÖŸ“¾›êƒÓ>F[¡÷K'ûz®Ç nÿ¯ª¾R}+*5¶*hÉ^Õ"XÄ@ ·²Gù!nc4¤-þ½µU’x`Æß–EGð×íS„’µÅY˜0a€çLw’¼ò®ë®­ØÔ—v¦/5,Q싆ÉàðPι;y“°NÀèÑ p‡‰êëL•9“˺-`Ë<Vpzƒ-Ú7,Ý…ß{að”wÿ“Ë)súΗ™¿v‚nªû=/æbiSNù_©-¸²Y´C0µBK´@ƒ߉IШö°J¨e—¸ Ätª0aÂWÌJƒÇ êìýnSÚºîö²ÞQÞu³SÀ~ÏéÇ0àA©$› •Òbñ/– s˜ölGã¿5Ûè3‘éå>¾^']/ëôX×S;Â!ÌÓW€}fuiÖŸ“¾³×ãµÁ@­ÐIÒ’}=×ã׬(x·,‚£2À»Ù*1¼©ü Xç_N˜ö>ßù;Ã×-Íá$a„õWžü¤W;Š¡nšŽöîiöA°„&€­“`åÏ#U8 :LÜEO™ðx9§œ8ïÀ{Iª}´Ü=y'ûþ?²³ŸA¯V˜Ë‰ º©>Ì<º\}Sl£ÿ@ƒLb«PšÂÎyþ<ÿà‹âpÐRЌ햯kà ¬Òf7|±Ûo%L˜0a$× ÷v:À^DÄhÏÑk)`Ñ D{¥"ÂÝ® |@(®CY uþåD€iºY°>«æ K)`V/êƒÀºžþÚ²šI˜«¯ SúÌê#Ó&únº¯}l8é×s;^ˆ€1ðJE«à(­Ò pàÏI:ëüˉÓþ¤ü6¥óÚòX~Ñâ>K˜0a€+vbØpá·ãÇé®-~ò°mè¢eúž¤K Ã$ÑÁÄ)³æ3X `.›˜Àn\ m(TñïCà}ÃTNXÐMõa`òݪRU°þ+;üäue½ß*Ó”€CÛ dæÙ%o² *ÞbI“±=G-–Íà/Fè9õ„ø]&LØ`2Õl`DÄø@¤±©Xý#‚² —À£ª‚ |%Œ TEæÒù—¦ü•¬J…5Û곓^'Y/êà À&=å×3`®¾2K )¬>2íaòç ï¦ëñÚ‡âAz tÒ¯çv¼à€;Õ±Ø ¬¡ùŠ:jS#À•=Šñ¼"À0½ËP‰`}°Ñÿ´)Jõí]7b5ž&LXÿ`uVšÕêQ)I‚%¹‹WÕxÖÿ‚˜¦—l9ACÇ ÅÀàQÆ `ïå1_ÂÌ–w™r‚nª3ÿŠG°rê5¹R;€¥ÐšWŽË~ÿà‹ïÒ\©¹bÍØqpæÙrñ»,L˜°Àui^£mÎÚ—æ}Z|Þ–¶zv ÏF!* *æ©ÀgÜ_WE&N<€)†¦5'SŸÕK§ú,Ï.*!ÌÕW€)¬>2íaòç ïìõ¸íCË-UwI¿žÛñBü!yFn0à«Þ?àœVåã0ÀGÕXÔ÷ Y  þÐíÞüBQ”Îk{ 6ð§åà,ÖÊx»?D€™Cí]p£Ñ¢ærr¸ñ[üdwïd žj[N\ÐMõá€ÝG€¡5÷~RªîÔÑ \I]ìd'h®—@¢Í!`a„ l>™^7Þ;|,ùÙã©àªRð*Рn‰…ä¥F€é$Äp ô5xŸ¬€ÁçiÆþt~[Y“ vÒçDõÒ©>â`7`Ê«L{ð"²n€”Û>ÔX†>)é×s;^ˆ€«W:pè’-—©À{a8ÊðU€‘?ü£¼º¿/R”ËíÑÄhaÂAž3(ãd:/[ÇêÙýb0=±æ€ãØœƒ'»§>ÊjÍ–tS}Xp€+Xî÷# ‡ËŽ•ªÇBAÓ‡¶‚O¬’ù‘K˜0a €³TƒK Á?hç¯*ÅYÛÒž^š:†±Î¨ÿÇ¢7cž_ÝLïA…\ÒÉ|}(Mƒ€”(ÆþBG#-øë… å$p*öSzéT–°` †ŸI1ífü1:È´gO®­¾›®ÇkJj'ÉÆÇJúõ\â`ˆ¾[Õ¿Q+¶‘=ÀG–³\rN©þ ßÁ!²ä9¿`ݲ2Ív÷)’` ö(p—tÓ'ÿÀûTíÃçMbNëé÷Œž î´ÂTN€MõaÀ3¶®³@VÐ-¯A;ÂVÐâ9Iœ,L˜°ÀÚª+u0\~¥ªoÅ4ïðÚÔðŒyž×Ã0B‡S'ÖËøªJ=Ôù¶è¤5çåÌWà ±ö€whÆþàR¤"% ²¿?0«—Žõ!ISæby±F€®¾d¥¯v`“>2íaÎÊì*"ËmæÆQ;¦êz®Ç З¿ëjb Xð¦ \Up¹°G!Y •¯| Kkz”Îý>ãXn üüc&ºõÅÕÜÿ”â$aÂEÂkN¾‘^6-íùTœKÈ`Û0ܤ¢NFÖ¾)%´8À$Õð“`%Àß’GJþ{S9q6Õ‡[ÌØòÎ) lÿëýr Î;¬~5ˆ‹Aƒ'eìôÅ h%òLÎÒoÛƒã &ìÿ€³ö¥elNÇY Õ)`xh€ø ö»ÅçåŸáØge‡<ø3Üa|€¥âëà]XüÎtÄG…ç3ߢ–@‡ üPFÖ4DÖǽÚ¤?6úœ¨^:Ö‡a,¬^˜s¿ÿÄp0íÕG¦=8çòºŠÈòÚ‡ºÿœzy®a`’ìë¹/H8Zp/Æ1Ö²r 0 Ô÷(Õ€!ëPbÒX*lïâñâÜâžê+ÁÞ­Ók©]Œg„ ÖO.ÀB 'Ñ ,¬ÅFÞ„–a•ퟱ$=…nŒj} -?ˆdžýtoóÚàòá- IDAT¦¨~HI°¢Ñ(ÀQãºÝ½“ý ì·ÃˆïårS9VAß ÜûŒ‚®]­ø¬Ÿ«pœ±-zÏpóÞæÞrËçz{d_&Ó䌿Êú–¿}º´«¹ýX) A{ñĉîÝŽøµ™uê~Ùöm©¡&ŒmF ±çŠßfa„ l†y¡Ÿ‡¹6&÷ñæ¡“À™XÚU{Ḡ´€w2Ïnì;.ìSϵ2¾s¢û—£Ž?£°4ù{r ,æ5ȃ/v7÷¼p‰d¦üåM’=§66ÝÿؘËZøã]œ-!½t®)p4’yzvWû…¯àG€ ÷¸´æ† Õþáè«ñþLþLúÈ´ã/ƈ¬v=^ûÐõ=¬À?ñ9ØBy‡Ç$ÿz®Ç Êj¹\ŽÀûk›+ö ÍiUª?î½Ù¦ì˜HÔgxçðÚµ½7¯|¨°4¤U9£yç”Îkkgµ)·´$X”¿Êž#7׎6o¸ÊD’ÝŒg„ Ö?¦Ôì)uÖ𱆟güô»›¦z3–Ô¦€[bí#ÀRɱ<˜ðœó°X¶_`TæM6н|ÿ¿ÿ¼“}üù:—-Ç(èèqµ•Qù#Ñó«Åt}”th§rûƒ—ž¼Yv{xû'·À{“*¿½§Qïx ¿plvøóS>^ðŒ¡ ð‘®nß“®òzÝî;Mê:=ÏHÎy¸×ïîêirø˜Ü¾‹™ç:ÓŸ?eò½8¿Ë]ÌJÏYÔÓë.Χ“ Hñ @”„ú–ºººsóÅתSlñ{}|¥‘׫9äÕ¥ôþOÿûy²ÍûZwþrÿ {{˜Jïÿìþ‚[|«üÚØ2JôÉŸpbuCÔcžÓË“?ÆÎ ˆB6<½qï8iæÒPWw¢LÍxk2)?&S¡¦æ%ÙéIïpÅŸpÅKaùÅc½InymYuÛ–ÙB.žH|TcpåÏ1i˜¼ö&ªß£ê`R+?Eãòú­·W+êáRnŠl“äGaF¾/ø…úÈœôJ©Ù2V‰Í<Øx%, šXFpX¨ÃfÀeíar8ÔLžz¢ÊUÖ9ãê³fúzê@Яh€è`ê¢O³fžÍñÖÿÝè‰?a/¿ ¼Ö~•ŸUÁR¢_3"`{[UÍO1×ûÄ>Û‡ï=Àò :ž@€‡VÕL41ç+½ùX#s–œ¨¯jÓ¤ãÅ¢ñæ‹ÌïmlV,ÀQoUà¡^~v| ó8äð+L5U–Ço€qOXò+}˜xÏ¡íC©ËÏ À`¨R}6“¾5N§›B=##ØùnK+}cUüj´ Ìå÷ÇÇp éJû±ÆƒÍ›Z¦gŠ<ŠR§Íü®ßUrKxdXÖxC—¬ªNýá5—û´óí\z0 ôå÷ÆÇ0c«,÷^”¿b &)ßµô~âJ…L —5ž@€ý@ Âá0¡±`$Ê ¦êÏ;]µ5·?²EM~[wGpûP~01´ïo @€±ƒh3à¨ËÏê@¯ À` @€!À€# `Œ€ @€02 À @€0â-yN¨¯îÄ9ÿrVK]݉©ÈÞ{¦Éó«u¥‘"ÿÔ`«cVU§kôXê·]Fã7&ËIc~SdJŽü-vºìµ5ßMfúﳚ?Ø<ý·ËNSãWk§åƒ×—µý…‘Üâ3j¦¯6þòG’´uG>ÐV{p·§Q j.5Å1\U=vÔ ðÖ‡}ßÛ8)½ÿŸ¾Äľ/'‰Nq¶êèØ¶,5ñ0m\òÊvCû£›CÊ1=óéçuüx%`0îÏRõ >^Q†¼ösètèµ4J„*ÀEc ý‚Ûp!&–äÓeÌbö¹ÔâÒmó£T€SV®|Gå¡¥ñÞhªu®´{vÊ3òàgËéqœ§¶7uÄ_Œžý.£—ª4/ÿPÈ(¡5×ìФgš—ü’YChO€ƒ×—½ý©!ýLJwwEDÚm€X²~Ú`îö4|ÞlN¾:±2¢ZS´-ÀÉ« 0OâýçDÉÚ5QÞ{ž™V¯49å`˜ðòÅXÆö“Á‘ðuئ2N¬Lє˨/wû ¿@ö/}°¦X°=Õg Ì0à pöá¯g·Ôy©Š)œªJ¼ul­àïÞ¼•xüCiéPѧ—VОoy#5DfÇÃHÌóã? U÷g¢¹¹¹² þoäGhã ¾'SiQÚú‚ÔW²B©aÐöËÍTxÖ IN cïÆsOùcmÞ*Ft³ž¤C2ùcc™gbX!À”EË칞H¶g”è“?ñG )Û©Úå¿ÅœÿÝE]KI8¬ä¿©/ÿPÚ @z ¢-î}#,`M °Èöd¹–iX>B"$À “â’<<,5+üŠJñÖdã¸Æõ¡qí3c7/轓)4æÄÃHÌEíý9· `‹É_¸Ÿ2)Ù?!¬ýÒË“?Ʊ €Á À®LM` ð˜Y3öxf‚©\”»Ó{’šYŽn6èã·(`keAüþTÿòc'©!}Úº?3«4ðŸ—c ÷õKÆF÷»¾`0«=Ķ'ꦀ¿"\FH€ó¦Ç­}Ñ+À¾À¼ofaÙÀÄÛoy·fœ¿ÜOªP€¹ñ03À2 NÝýYR€ƒŽ/T`þx%$–n?r€€£%ƒ@€‡eSÁ–=<=v-3ãKÍ'Žyä ýœ¬Y3’˜àÇþ™Ó­#ÒÜÈɹṫ-ýùû SEØ·`}óïTá÷Oçä4霕7rn´Š^r:jG~“β°×íî¡sµ¾ýõÝ~0ÑpÙU[óÝ“7B/· «Ú ôtÀã/ëtYÚ2kÛ êD?O&7±-3¾¦ýöÎTÑõè×úѓي•?Qbx•ü‘vœJiÇ—Ûtº)¿5¯a,'ÏWPuüÆF/îâ °ó$õŒ†¿w3wò—Éò÷t¹ÓýŽøç©íswn@^þ¢´xÒãíݪ_ã»@j =25üÞX€9ý3j±a ýéšÛ³ýëÉÆ'S!3M?éÙê³®‹³uäÿDúWqy¥ë+Üþˆ²}óÝ]=M¦@Û[¯»˜úÖ[»Å?PO'à¦ûC¾°¿ˆ¢^w¾»Ç¿8÷Q¸Óó²CT¥úÿ4uƒª·vˆ?øšS~þþÈ/¿è ˜[>ÉôDÒç–_ŽSvu{[[Ð^<8éû¾HùésÛCt{þ\“B@5Κó‹7\4kén9Úz—~ÚÕ=W€ÃùÐ$¥ñLÈý[_úqÑôtõdcÅ׸ìT{ â•x{rögË5o(êû ˜ûy‘ñ/}I¶¼o70öê$;j³X|”O²BÜ¥‡ÃŸ£‡I€hàa<&•wÆÒ‹ßþ?{ç[Åqà]_ïõêâ{±|e„mŒPK|-\Œß±ê¤8n·”ppoq 5ˆ: µJÓÔl*9¡‚¢@C«BHI£ü0 XKV©"ÔÉú³óØÝ»sfvç> q¬=?—™={fvÎ|÷Ì#mA©µ"8£ªmÖ?ÚÒ4OO.CÄ[kp½¨{×OîÆd"K <¨3F†6Žåaνg+NÀ»¾ÄLЈǑJIÊ\v±‰Œúè´Ü!oàM u«ƒ¶_‡uŸ_ýØ/J ëªxçÄžìÅo gbb:(ûóCÔµ…ØûùqÚø` ¦üÏì%„^Æà·ÛøF€ËÐ;PXl¿×o£{f?ký>’åœáŒ{¾h¶Ü(CáðÀæše9³õƒx×(Ù¸£òGôÐ}Iaðz4øiïÅÿ’]B@ý&ª¯ä}¹öˆÒ-Éœvnλ5v-Û88`ÞÇõÁ•ëW)#å5j'Màn8clІÑ팓³¤õ¼¦½ne C¬ «?ü¡þ±ë'-+ŸÕŸ?/¡‰nÓãìÅ °,?ÿþ°|ha{ò÷TxAo€g–o?\¸áƒY3 ûý€ýX¦ä•ôg"ÿ…4|6^ÜþPâÿÙ¾«±Ù­H¸©ÓŸó÷?ÄÀºd”l+}¥š÷ÄÝ¡»Në„ô 6ø7Àþ³åá"/¨;0oOæ{Ž ‹7¬JÆ~ƒôÜø‚-Ÿ·'ˆ—W‰y†™¹÷eŸ'­Ÿ$Û£{Xoû ÝO<™9Œ×-ÝxðHùv| Ò’ïêENúhóŠôg~5-xâ«Ú±ûRbÅ0»õ`Yñ=Bº _ÌG€íùÿe]Ù‚Š™ð xèŒvi|7fNú O…Kö§ÀÁsÙ™W?=µoTíû›ÙAßhêûÁÛGº­Ú~¼ÙéþcÍ—ïª}Ÿ‰Ò?¿ßï-}gç3sÅü"ýÜpPìó{š[ "xC|àN€<’К;`"À“Ñó㻢&3×õQíþîÞŒ–ýÆÞ'öÓ, r·-·\"ªu–¿$¿â’ú[çÀ ~ÿ}T­<úöÅ ½½Þ÷]A?xQ¥¼³ûßwÔy;+þóÏl¼Ï(¬ßõ•½/×þžß¦Ý?ÑÛ[³o夀ƒ¨áâU·Ä|‰úþ‰æÞšR\ù°¾‚·´ÆÉÒÞ}_jçi;h@5;^Ú›±oåMKê¿x›ù¬œýÚ\ø=Býük×OZW>«<üîíþø›(ád–È^ppÉÚG–ŸÓ–ïdОrÖ9‘=y”<Ù¬þ ÀU+ÒŽ–>’cÃ]]‚-¶N@‚aád%Q&×0¿çó ?”ø?¥¤Sõ]©v`¶?çõ¥NõôÑ7î¨tÙ(›÷7Ï©}ןj~çƒÿÅØä_Q˜-¥ÔOo|ëÔÁMØ^œ¿r°§ý{ŽTèº#°%j?À =7¾`Ë—°RЪãÈoqÝù™{_öyÒúI¶=ºö‡F]yâ‰'3€3ÚÒÒËÓ~³Šn‰Eóüïn_…m_5-x¬öëcJøà‡µµã$4rl ÆÌknS,ŒÛòãðXí¹S¨ã¼Gïs¬}®}ˆFÊÁkVˆ-'ŽtÓ+9*éqQ‡¼§ûôw° 0;hûuÉ:ý²Aá’ut’Lß“M;z‡Á vPȹʲóüâaä»rŸÛ3Œ¼t`=.°`‰;Jlhã×3ÚÍèm‚2&Û¯Kök· w-7þ÷ ÆiJa0æQ…L ƒúA¼']‚[TrŽF¤Ûwu.ùå9›pß«‡²FŠV¿··p¤`ý&¨o<¯Ë´?Ä‘¤w)âMÉ꣓aâÄÅ\¼4oûZ¦|X¿ZW!Ä«ÀêŽQ¡0ÀŒ ÏÁj ²úÏ»fª,Пûú³ €ÕOV¼†úÃ÷ãÍÙx?  e¼$²Ÿƒòeù¹÷‡åËìa6¢sj’k=I €«ÚÒ6Cžýf9ïk§È߆;ÿqª8A&|,Ó ã{ç%þOñÏ¿«êùÖüâ9õîç±ï—íÏùûÀe¾J2”¬S+_áó+uÇÕÊ_ßXØà É¿‚0(od‘oÓcM{åÙÓþ=ï5àv*줇ã X>gOÀôÊØ‚< ó†…%jl3ó¾ày²úI¶=ºö‡ŽìÅ{âÉŒàÙƒsÒÍS)W­˜ÕO–OOÆüŠc»€Ñå×d¼øÊøC¾ØžGЉó}h懬Ñíc,€H€óž¢…U$‹“ðoš¸?¶uÐöëk‚1I¦ÇÇ ¸ñ*zJì„Ixþò5}›‘ϸډʮëÄ ¹lxAË €Qà˜Øë›;Û¯¢' ÛôDÏ Ò“º«*M©MHÖo˜ÜÖOn«î[;×´$jc± Àú¼'‘iõyt:4_¿‰ë+¦ýõvØ“ñ,Æs7). ê+–‡€rHa`ÖÈJë?bäGŠLfÉõ‡ß£HÐvýdåÁkNé`M£€=@ÒçIìË—å‡úÁûR{ˆµž<6®Y™†OYüÓeKÿšñˆXaØÎ2×gNÁAv‰ú3±¼¶ÉЃcÂw œ?”ø?$U£MH…—,ÂfÖ‚þœ»¿“â"N©Fé±×àòG*X炘ð/uA|˜-/H—º°Ðžv=ƒçS%a?ÀLz8¾àÊw<ØäV¼ xïEµr³âÀP?×úIº=ºõ‡uÇUoºŒ'žÌH®:R¾ôOmiäô_€Ë”âDÓ€Çð±ëÁµ-ÇàŽSÌyh.âµ°8Ë#À‡IþcB6fçÖG/mJ€ Ö˜ÈzúÓ&êi¿|ÙÕÜu`½j²B1¼GLà+ÿú§®ŒÂÝ[Hx~Ngæ/C™ŸlQÛ s[7,Ä~Ã}óÉ€é¾abâw°|!dÉ/ü|zH©IH"ª 0¬dõÅÕ†‡Ä?Ó=/-ÆEå¶bo^°™š«ßÄõ•¾.Óþ h'ÇI'²ÍÜYJ `(ûâÀel}ÅÒ÷Ðsà7{݈òú/3®àÀɳqè¿G‘þŒ±€~²òÀ5¯¿€)â' ñö¨Ç”/Ëïüþô¾Ì¶‘¼ï÷žÃ|ìÜ2‡œ­À0Þˆ²ùñ°B®S· V‚þL,!¿ùÓ— €y(ñú[Ï:é•(Пs÷¡?DÀJ#œ¡âaß>¿íØ%ª0àÿ "Àly1{:°ÐžÌ÷ìÎMÊ~ ‚ô`|Á—/`Œ—ºžÿ‰_ìŸyý\ë'éöèÜ_þ8ÛØÿÃO<™Y\³2mi?¢`JÀ€~ö“Ã8Qú4M×êú…Ì€ŽÉû‹×Ûò“] ‰8p£5 œ ŽtÇÖ°~uÈæ¯‹!…½&ÎÁZÍS×Iþ„éCƒEªžùÑÆ?¸pðœºz3`ðüàzߎ¼§*×Ó4ïÙ‘¢öB|fûÔHÑ`:| ‡»¸ëº3ÖJIãO˜>5 ‘¹P='¥&À°~Ûië+*_Áþ–LT‹0¶Vn+™<Ž˜«ßÄõ• ÓþBƒ4­ñþ‰SbûthF«uˆ@Ö[Hç°½¾"ÑØXœ×j¡3ÇQÿõQŒ¤H½ÛŽCø=Šôgº V?iyàš×_¾ ôYË C¼½ê1åËòC}á}™=lÃH÷¥ž< 6Q—àš#i‚Oé.Љø³¸Ž÷Û„xhö{áü¡ÄÿÑ2ƒ¿F‰^¨æ öç`AX\dúŠ‘"ä¸üeÇÁòÛúìÕsbü+ˆ3å!/“o<Ü€…öŒï{NÎ~véÁø‚/?ŽcZuæ^æ}yý\ë'éöèd?\ ÏmSmO<ñäÛ À-sfõ“8pZúÓÍx¬§‘?ÆRÖl®›`Û.Y°xhÅÀ'¦€ë›|{~kŠñ e{–(™ëœN«»Æ®u!Ÿ^ íÚúþ õú[ŽŒm§ ž8§¶ãÈoÁšüF*°hhçëœýÖ¿Œ¢HHŸš,²mŠ¡‹ç'À°~È1HÆ€ uPYÆ0É`:Oÿ'`®~×W&l8¤äL|Žég\4í Gö#àºD€¿`€Y»iÉûL‹8Žú§“’á7å¤?ø…ú3¥³úÉʃ׼þqŸ\LbÍÐ^Üo |Y~¨/¸/µ‡Àß(·¤¥Û¥ßþVF€ôg© ïÅÕÿ™²dT5!ËP°?€M~#!C.¿MAš¿>»òû€:0Sž- é ÀB{Æ÷='g?fz0;Þã QùR®ëTõµsü37¾q­Ÿ¤Û£g~Tíumžx2¸ª-þYµ5ý‰Ãä¤Ësð*%sCèéÀpX)Ž„¬%7‰QŠc, *–BÍ#„GCR¦¶I PxWU*$°âRÕ¨‰üÑ¢ªU¥Îììk»³{¾Ãg3ß?öí<ö›oßüö›ù¾hûRÕŒ¿stñöe«ý‰™ÞõðÎ÷43°åo¦0—0)7¨WŒ æe`ª3€©ñ'Çkn%}ÚÝO )3½@ƒ§Ú¨n²´›û«,‰ux‚¹Ø;éÿ&h6f—=ÿÄ|dòoï>òw:à÷µòð?R^äjưۖ'ù%Ò¹ò0íäÅè!Àn±†­Ø•>ãRÊLô –…¼ÃZÿ™ ŸGµÕb˜XÏ)€EÖðÛ¬ ðUÀ><ˆ<}¨ZŤ`À¨>Ï5U»ÀÎæszò#ïÇšöÄþ" p¨; 0授¥~–ðýmÿ¤=­ä'ÇZžN&`A‚F ?Eý _3&Oñ|õØÈ!Ç‚)yKós§ÀÝíƒrÁ\TG|h´_ ™w€é<©ì©`úñG Jš3Ï{z¢z˜pšøÐqð<Ü}¡A¹3ÃsŽãÎÒï8ÊÆÐÏ2<$äq½ŒÉGÀ²€UÔZ[``ªÝóËm.ËZZ ÃâЊÝí&¦¸_‹ž[¾ÑçÄ\´œßg¨ð»f€è¤ÿGoôýiï¦dšÒÌâ߆?^}À¦øw €Õ’¤¼,Û'kw€íË“üé\yXnjÝ '`Ýë°¾qHª¸Ð§>eœõä¹¾œé‹æŸœ›üKÖüqë£ë§¼@cí³Àµ:ÞgÝm¶”¯<É™ÞÄ“‡&i(°îyÒ¸Ì 7˜[à ê³A`–—a„o-ôŸ gU¨gNaë#×s2IÅoµuÞÕFùYÞ…Åæõ†Aj>ë ¾A éðÀ¨> ¯Q« ž€ŒÍçP‹åqæ´äLJÚ~ƒÜ_0êÇåIà9ó‹ÇÖÖöMµÀØþƶҶ롈,HÐÈÀö¢óW£¶çÁ­Êy¬GÞQÝu˜B%å,Öãƒe²”aD`e‰ƒ.4ŠPr‘ý—ÀY±ÃX‹_[)ý²e^õc°Üò:fÅ6§Ç«{™~K’õ—ÿLÅ0¬' ÆÆÞ_:Ï«DàJÕO–§4¨+ °ç´ÜˆKàñƒ™ôMʇ°Ãý ü]~Ö³~±§0Õ¿îùå6×<þBÇTøcŠSMà¿ÏÁp)?à«b`Õëpó_Ÿ£;ÀðÌ­ (cm°¾æ¾Î=è¬WmѲÃþy|Læü“ó‘Å?F¼úÈßÿDû¬påõ,2)/ºíXý¼òÔzD¤så¡Ï€ˆì‘xÚXŠ6—,À™ÔgÌͤ¯°ç´,JòôŸN!ýp±~OUöSë9•NêC °À«TG•Ÿ±ËSøÔ`¥¼€¥òäçxÜ<ç–ž ®ÃŽ@kõ½7!›ÕÜ]åê´y>p]xÂBæiÉÏ€Éüäþ‚Ú¯ò$0@ú“•ÂMË Gaæö2ø³íŸtÇ£íz(° A#ÃXÓ F'°€&VBª™’§¸¢¬£¸ƒ®üõ¬ƒY¹€ãw§OiÃÜæ’î/TO^žÜ:»^|m~ @É™½lvá °Ù§ïÕ;ViC‡¢ÁÓçßmmYqS¹“Ä[ ËºûÞx·õØMõ‘>cIû—ç_ÜÛúfO…¢YÕ OÁïÆpxs5ÀÄû»JÜ€‘mnöuînA4W’¸`ˆ8n·´æ×lôùd €,ð3roÞºËoÀzÿò!,Àð*Yðôú㽞}ÇáΆÀdÿºç—Kæñ7ãÀ‘–ɱֶ~Ê«¡µª“Ç6ùÞªO~Àß0,ïíÃó7úNv`XÎd…úA… CÛæ÷¡ù0~xp¸¥åØ€êäI9>›ÜZÙq»ÑYÿ‡ë“>+£*É?ÃJñO|]ÁøãÕGÍw’²}4Þ=·uZÇF»Ùò¢¾¹~^yŠ?"/µ4fÿ4tºÝÈ>ޤŒõÎ-Ψ>có§ë+.ú§ÿJ§,UV½Ð+]šeVîŽO=³÷Í ÿý)µžSé¤>,™<ñâÞ¹zU@K—_ŸÝ¿ö›½OéXšýCO;üoð^Ü¿¢×»ð²æ«/>ÓãýhýŠ›ž^1;Á2ô•…<Íó¹¬"°täáR~TŒÿQUd~jAîWHy6Eƒ'Ž"‚fjù2/F¯Fèö2ø³íŸtÇ£íz(7;A‚ K<ªÃä†ã»Èœ÷Ú¥ÛÈ{z«)ïµ;·å1Cæ–KïjQÔ³ÐЬøŸèÿ—c™ômŠƒ«`å·†áÂʆák«$zªÕ@xJdBÎímïBÙýÄÏHOÀ zJmF CåÙ/p¬hêçé÷tˆϪVè•>§zodS“Ï—D„Ì„q{ °›…¤£áª9XàÌ)¹·cq5ÏTê‡d\>¤Ø_‚2ï{´lYûÇËfLö¯{~¹Í5? n…ª|¾“[X¹K6 ¨±,Ùù>#}ŽRYÕÉ-f/Ðxœg¬¿äD¿y'‰L—áÙ•7øô££Už”úô?äá-«þ'ø§æ#ƒ^ãüqê£ê'ù'ÛG`5&ÑÍìLÊ‹ ¢~^yŠ?²~®<´ÕàG }™øÇyßÈ:†¤YÝZ€3ªÏXdÖW<"õ!OÿŽž{ìgOôa¤ÑgQxÛ–XÏ©tR–LP’<žöŸ+­ŠPåýão¨,š0Ì÷¸ñ¾à©±z`¬>iÎ<¥ôâo™½@›ô[žæù,— YÁ9·òKìÒ]6*¦n2?µ¿ ÷+¤<õ8À¨A%Tƒ-(ßþÝ^vý“æx´_G/Ñ?$h$àü ÇÑ“•ï¨G²Þ~þ|zýÜüá€Á’[ ðµu·èŸ¸gÔ_O¡ïÝ~­¡Åf[€‹2€ÁãŽÍ†A’7|².ºæÜÊ­Å’£ºüxoÅšsßÿ-;=~pÛ¿×Eƒ«N/ÕOð¤¾*(øóXÃ;9ÏÓï‡ ]W¤Ý¬ 7Uw[r¿Ùˆ;ÊÀ4À©èKvÞÖ¢ô0Ð (>Œ‚—IŒË‡´ƒÊ'ëÖ@a+£-Àdÿºç—K8@]0pëJ²êÊí=Q…gߺ¢$-g[Y+ûaº_r€d[pë xßu}¾Å;àƒ¾ø ³o@ÍÀíå™å½sœz>ÒüSÕcüÙ×ǘï8ÿtû¸³ïz£µ¼$›ùQ²¼ªïJÒº<ƒ?¢~¾<3I¡0ß§ØÎŒâ”ë”}F‘Y_9 BÚë¿DOBK…§Œ{±ñ Ÿ®[³êKÄ0¶ž3Òq}ˆëšsOêg„©òþøÛŸB<²~¬€¥ð¬.äÇx6ÌÿFDƒä]3õ5¦Kn0>ŸC—»<6.¡ÝÉÏÀè„‘Ÿ±¿Àë'å‰àRý ´4~bà¡©ŒöÒüÙõOz㑳Õ‰ã2‚̺ÜvxíÚýGóGéÚù ø=9{ yp$Gˆ¾KIþPÈüD«¸¾LI!Y‰yî§Ê‡aN=zÊ#1ËOæÒ/ÿZ` 'œð›²)ª»?õÿÙÜïã¼?’h°¾BäLk@ȲmÞxǞؠŸQQºïŸ°Ëò™á7¦ ÚÙaÙ¶ ¬Óü~ªÜî Káp Ÿ.þ”¹Y1ÖJá1äeQ¿rØ]y"Ý»þq?yëaÙ²ÂÅÚ&HЈÀ¥BB g¥Ö«w žÂFùcƒÂ“ÐcÇÅ{zç%–Åä½o)~ÆÆ|Ÿ‘8{ÔÜS°:ž/hði ä2¶&‹8åYÖgƒÔWœú"þA*ùlêC#p&çsYפgs¨?²Lƒíîz¨„h$HЈÀù÷)Ξûªàï‘aÌÿœžÀ¾ß<=)(û$×'?hb¸GXn[Ñëñ ü›]¦xdê³Ö‡ƒÀ¬ùœ˜éÝý“±õ°vbà#ë M‚ XFWÿææJS.RsO…r•Mô¥ ¬Re+ô_Ík,pvèÿìoLéÇgv68vÜ È987§²F\W‚X½íY° ©ñxp½µ'Òbˆ/Ò…özwrÔ­µñô¨6A¸½×X½ÆÚˆÖ3Q›¾ì®é›{图hšË½ê<ÏÌìÎ<3À.2¸ì~?/tpvžùí3îþøÌï™ç©"sì,ñøðòηË?Ÿ¥n>|Q¶ú<ïŸáÛ p}ïûÐ}ƒ>¸ìz_p@€ÁxÿgåwË>ÿ„zŸ B€ÍŸ•¿Ò)‹ÿ€ÐK$ÀR^SôÞÈ5ô38³òYªæÃ`ËÏó̻͡ÁµÀë“à÷aÑåoy0`0ÿ}@¿üóÇßûÇ¿þÈá ð%`Úét3ù,5>ï/þ °éó܇ëeÃ÷¡äóá>-`0'ú€9ìƒþpÊæ[ä3`d„`@€0†`Œ| @€0ò- À€`  ÀXGΟÿê³/–&!÷xÅè½ár\+i'À%« ›’à9òïòï‘ïæ÷-w‚¦låMG‘;O3¡Þgƒ%«9®²¢ø‡‹sþùH.¾¥'ßbRؽ7r d@º ðþµÎb?¹ípÊüeß,û[€e\sq±dž—mrnŸ=ÿ._…‹YʦtÈK\5ÅÝkæl¶z²‹vkò,-‚ÏŸý—¤»#ä¿0}Þ¹j!ä5ñ¢Xü¨e@: pè“|§NpËÖ:ßûêS9 ïÍ€ôàuÄrõà×Ê£HÊhv¿ Yêæ¬ÁÅYúãÕs1Ýeóoê pèöTpàÁNmj`éÌÚ© +úà«¥Á°Rx tÉ[:–…¶ÓôE¼=vE½DàªhG 'bªV´U<+‘_Â+‚WÕ.ê~[ ì¾õl0úèt, ûò‹åVÖ½©êÛ'Ï¢Ž?$ELæüš@{y‰iZ´—d|6÷Ÿéxc|Êû—ßîóóY&ÝVnÚÏÄ_ê_÷ÖÉÉÁ;[¸jùÏ×b§ÈëàÕf mx#¸9W5eï½ìxuƒÕ~r}‡üŒ‹ £8çBíñKñz¯UþM%–.Œ‹‚ ¿•ƒ?ÊRD²KdÉjfä@pìkñ@9¹É-ܫРpÜÝr´AqVÁt+ç ‚ç9Öå%ºqšè®6ÉSÑdX¤Íi¼c†W:Ÿú#sþ˜gÅØØž”\|v÷{<™!;L¢ÃÄ Lbö3ñŽÈïþ@ù³-6ì9«'èB æL>ªé»û=ž‰¼×ݧ£g¦ù¡/ Üì§+*1û™øeîíúf†/é >æ-‰}IýOÒ\€WlÛãpÖ:Ní[l`ÙwG Oüšóo pU»¸›N¼±]ÛãUDÊúñÒ@ðÈ­qR;l¹`w|üó„_8²^y©&yŒ`F»Æ^#jJ÷—úc+ã*ìîÀøÍ‘fºèœç¬— pýU~óO”×J>Ît~s˜i/Ùølî?Óñl|.å 鼞kL€¥›Ê‰˜ýLü¥þ¡Á‹¹§úË'*ˆy«H7°T% ý8çB¾Ó™ÝÙ¸d\´•ÇÝE%Àu{§Ž§¼ª3åßàžØduPlw®É…e;Ú!¶•»#‰‰˜SÿTêî¿î}nnÁ‰Ÿi‚Ù6,™XY! wW)Âëz—¬ª p ¨kŒ3ß\6¶—t|6÷{<Ÿü»”R·•ßñWM€=ÆiE›ÝÏÄ_êKÖs¥­dæ-2Z×oa,U Hw]®­ùõ‡sdÃR 07áwÝ}ZŽË cxW>ôY?ÚœSG€¥¯M-UØBgîe©øÑÓ9nÍ!Y9w´lþ(.Àqÿ”׿&ž]0åÛ±é•-ÔÛ ž) «RõTŽ 'Èj¹.e4™*ÀR·±r)1ç7W€í%ŸÍýg:ž/þs­øRm¼~?(îÞ™÷3ñ—úÉ[+l!UöÒV½WV`˜ ͸n¯£fXÎÂú l·sedž ¬ S˜ÌùÜh`«ü›:\U<¢ªc}Ýô\¨àE×½ÎÓ³ \³ßõaO¸m•&ÀóãþÉ5‹ßáæLmx˜‡£Ëá„¶²‚Ôi••’ý˜\Ž pu<`õ„Æó›+À†ö’ŽÏæþ3ÏÆP¦Ô¢’­,ÀÊ[®6e 4³_?ñc?éÝÂÅ¥õÜlzé'À»ò³‡é}h‡s{ãR ð¶/@æð.‡SϰuþMÎëˆéQK:ÕÉcSäöõ£k³\ÑVþÎŒë «¿! ¨:•® ;»`ê—ˆ0 °ök-QJÝZ…T`]ÀÊñÆó[/ƒo/éølî?öxS| a!úK/Uv <8~^ ’ÝÏį {.l!]d–‡ö8•ÍÐ1ç+—–H€ËZ]w/úðý SØ2ÿ¦r˜Jà­ûAõIR ãz™É8>úFXyÎÖà³=áDÓ<ZÖ† ¼%EÔG\IËjظ¼ñüq–_o`¥½dã³¹ÿØãMñº´ ¶B|hµAfÂŒ!Ѐtà²Mä6´R Ö¶lŸ+·àbÈÎQ!C å¿fÉ¿©ü 0%774´Z'‡ ÜŽ‘,Aàêˆ×Õ_N_pÓ;¤heU;Ÿ`š&ÁÒ¶›H"‰O±¶æVQ}Ø Ìsþf¿Úœ2ñÛž'éøìí?öxS|¥­ÆB-+Àìþ„“`Ò]€÷ÇÒn<c$`Q86ó¤ö °eþMåY U²ÜÝ´‚j%pîOŠ 0wršw ÚÕãUZ©ŽðbB‚iZIÖæV¡?—Tl•U…ª:x*À\CP8P®hãùK[•Ѝü/FVÚK>>Â៞β©ÿØãÙøŠ¶òáe˜ÝŸ¨c$@Ú °œvG•Åj³ÏC€€¥`Ëü›Âë}^ ™–6ø˜“~÷ïï¶èŽóøÈüP:æ6ÎðÅO²è?RA;ñFb\}•×iÖ„U^*h²ï’BêÆi~@©×_•Ϥ4 eq¦ó6QÏ­šv †@kí%ŸÌÇÿ]¹ò¹öô{¼)¾@— ·ÿÏÞ½Å6uß÷±lËvìØ^RJ¶4¡–Ñ È<‹5â2TE% µA$!…`¥ÂÙ–’H%T’f ""‘H4UQ;Bé¦1iãq /«ö¤®Õ4Mš´s±OŽ/ vðIƒýý¼ÇΉãƒôÓ×>çü§~™À‰÷§ÀEoÙYª@ް|VP\å,y+KzjÅúöäûÈ[Z39Š€Ü à¤ù»ÂØTyÍ~uðƒÓ· gÿ¤Ìî³ÿ˜m¿rúüÍMJI*ø•×ûût§Ò°©îuáìn¥¿ËÇý„#ïè/2uÑï^$10ÝçvèÎ}që“ö+¡{“Ñ -j\3ýÓ“ÂÕiõ™J÷Ëß™šˆTLî6%ÿþCBÉç“–½_Ä®·½ŒŸŸäác¯×ûSƒ^¿„ŸOz~ú\3³œ>ÕùH¾vR'ÜŸn¿÷y5ä@{Æu—áØª¾-vÝ6‹MC©î7` Žp0 Ÿ8qþ®´¶\¸¦þ)ûÞ pã¯õ¦ÅòñºècÞÿR À3‹pዯØ7ËÁ¶m—²ëôWYV6¨éœ˜¯¾eŸß¦¼n¯²Êpö]åQòveW¿_Ù¡ mUÖX”•è8öû­êã]·WiëÇm/óçgr+üoƒ^?GüÏ'?¿7wD·(o0)€îOÀŽä.jM8rr/€mÓêwÂ#¶e `Ó9Ÿþr ä_'Ìß÷ °É´azrSÏÝúèª=«¯ÿ§ÏçêžiÓŽ=ü×û×U‹°ÉýÚ5õºÇ'«úzfËLé¦ûø×Ųøî¹ûãƾ³í3i{Ò“ùÞþè‰UÖÕ—ôùzî–÷¯2¥øýuòã µe,Ýòƒç·—éó“þþ¿?^0€Ÿúõ39â>ùù9>“ÿ‚ðü"%püýé}\𡯄€äX§:#¸÷F$21eó¤ñØì<ÍÊÖä\[ö…‡×,ÀéÎßû‡:Üó_[ý¿'ž/jEëpdö› 7J>)Lܘ;Ã'lM}™*õ`ýö2}~R[›ÞûÒûƒ_?Ó‚ÏÏý„å$ÝÖ'ÿñ ¾ØdÙËÀr?€Õ)œÞòÀ\bs,RkO?€›¿ÏÆ_mõûܼ|«Ï :gj~à§ñð±÷Í•ûúeêäÍvíølÈõ¶-_ Ìq‰}@N°=Ó¶=Ël´ms‚ýêXsáJ àÃßxÿU˜#¯µ£·sR°Ð¿àläã>õ|š2v€&€uòæ&åÔê•À¿ŠÂûì{U¾Æ–aŸ·@~°¥Gw`x!Î}+3€Ý‡¿öþ7W‚ÑQ´«{fì7ü@g} ;bëé@Àß’l|üÞ¯rê%q¸ùo€f @#·Ÿ×``˜y  ̼€€000  Ì@€€f @kìé½™˜ÒݼÑßf N÷…çw¥ÀòøL…Œ™·Ç}öžî™Á2v €n©ë×k·¦Í¢äN³r«÷Þvå¦9hÜ;Òä_vš_: `iÊjo873oG…#/³oyÀ¶„öŒ›«g¥.¾lŽûÀWº]ÞL¥ö\¨91ÐØ9¨]+öe¶çí–VûÞBö €Ö°‰[jè_€¥pC±²è‚Àž†ZQ1v¾Ñ¨6ýö×í?–±w°ÀÁ=æêA©‚u¼pÿÀ,!€å5Bñ‹öÞ®©¾3ÚPeX›J绵€°À ÅÊÕ®äÞzRÿÀ,!€Ì¢žþ:“uF]Ëdª›óÀx>€¢úeà˜X®¬CXzpáþ%€xúþ(îàhçAó¶t¿ëöÈ¿•ý €µÕcXùJ¾Jåz @öØ%-ýu¬¸…³y¬CÂUì<À-űVSØsÁ\Þl#€ÈbkWž<–xÂoÝÁØ)H,ƒ€Ñ,eïXH] ©F>+ИjÀÀæ¦ €1,€”X=KšÄÊ)¿òr õíÊÑm§bB0†ð@{t-Bg›Qo8oiµï-dßò9€=ãºËplU?»î›Å¦!õH,MŠ·¤y‰ÈB×c0W IDAT{ÆÒôíÜ.¦¾òdVžTÁQáç`}Û¦Õï„Gl0ËÀêôíš wÊÑ9ßÞdßò9€SÜ{#™˜²yÒx,/1 °e_xxÍ⬟¾×#‘ÈTÈÈy[ÙÁÀ8åNïa¼Ä,ÀÁžn/Ǽ­ìp½Í¾Àßò@ 7ؾ‚¸``NØ|†} € `r9€û”ƒ²/–±o0 @ް¥g¦í9v €&€ÈévøýVv €&€Èù€&€ € €ÈÀÀ d```˜y  ̼€€00pÆìé½™˜ŠÝ J·¤›!£òûŸ®ýÂw~çoY»öÓ?ÿb‰Û.¸õ Ï×ÓýÏuÊ­¢ßu¿[øöÎ7¦‰4ãv2hK   ÐÃ?s¬B¨¬J<»"²®DAñN0gs D ñD„¨¹Åù“°¢ˆâ _Y4Aw7·¦œxžž¡oÏ5¹ä²¼9r¹÷ârÉ%7óÌLé´Sh1–ïç >}žŽ¦É¯Ÿþ~ÏïŒ_Y„ï%±¿ZÜzF§¦Ú˘%ÏÆQ÷úÚºtfíKOoßÇ'¢B€×¥¯=°v ó7 DV€fÒ…s·ã‰–æù¾ŒÈðÀ^šP:YÑ€lœG€Ý3œÈË¥­m;E4•Ýþ%¹ÌÊgmG KØœgùdÒàŽp °m¬†|OâåüŲ©Ï×à³ Ñ-À¦--³‘DXçMqKÛ‹ À@äØq3‰öà´Lº~ªŸ—àÂj!ï®úë’è˜Î–žå¸éædkËéKZ9nÄ’ú¼ï^ãÅþtrý³Ïu—­Ò˜!!!áàæÅ¬±8ƒÒMÔŸ=T~z)óÕŒúм]f&7tµî!¥ûf >¼°ºØyÄ.DÜn:¦ª DH€ãÝtîÞ9vœ%æë°ã5 “ZhSG&}®úe€[§9//¬f·™YÒÒ7ënðrið½UcµÙ|ý¢vC[~˜ŸÏØš¶,e¾ªÿÆúå| Æ\, ¢^€Ï=!‘¶8‰¾ÍÇbÇ~mÌc0~nxtDëà‚“bàu”Ð{”¯Ëíú@`y„Yšÿjj]Rís%°‰•TÛg˘Œí•úÂÈã^äëŽ%ãã Ñ-À…þÛ}ù°ÛP-bfC€€ pýd¶ÉO€ÓòDÑuœU°¾Øó¡x–ãN,caÃ×Ô¡ô° p­KwÙN6ÖºboX•Ï EÛÆÇV‘M¢ÉV#瀖VùÅÿ£@8Xx]%þ­(ÁâõO^EH€[g¦=œÇëëqÕ2ãå<Ó/?V¬bÜ=ÃyÌšßÍx=¡zdF¨/|Æ[É7ݯ™ÐkèxvíÊ¥t©æ›m»¨íÍó ´ãÉÃü+…÷}Ëe>̽4ñc§Uuý­ì›ß&±riU,„Ù>"Ây¹Ib †á`}€ µÎ“¼ßÒnôÿe:-“Þ¡¦³^οɳ{Ö#^M‹ÂÈ0³œ'ЉKK¨ °1!á /À <ï'À¶1ù®Ò¦,K–_{œýyò|lèbu:~~ùaò†5d9Jî<°¾ñ+Wê_‚Þ†©ÍE VK8ôŽ’˜É©-4ˆ¸ »r«®ß²Ÿ+“GMΫ7óÄÀ€ÜëᜰµbޱÄþþÕ½Ž?PmߪÜmVrnÐü¬!v°óNÑø;ªxíÁÍÂucöpݧkÔÖ·Ý¥m ~ŸÄŠ`ÑULÓ¹õSÒ¹¿9Ûˆõšzì·‹öÓŸVC€€•`}A‰–¶kÊæj¢CK¸ü€lìæ<'$¶×Ëyyós[y±]£"Àãä^?³õ½X”Ëy8«FÜ‘›XI©h­%x¿¯ÿü­ì!ÒÀ9§B,b®µˆ¢Ë„XýfÝ •bkÃ5ç.¿ÏØ‚“¤óFZæ¹2>(û~ƒ†‘`SOíw ¡(À|€ÎŽHxV®\XðYâà ? l¶5›I ´†aŒq•qbÈ ê,¸ä¿=À pÊ.jÙ|kü…å“àÖ[ü³©ŸÍ'Àµ¾‚f©ˆ¹Ö¢¨pZ·+ö—jwêyQ!Àúަ¦¦þº½|„N?ر?¦“l†+$ÀŽ[öÜö-‰Çr£¬«ÃuvÕèeßaë[Îk&B( °ïZÓ+Õ8kÜD€_/»åZèÖ7o›—/ÀëˉâÝ•è…ØpŠúdŸøpíçì13Ù4œúü•&Ôúü‚å§ÕîzC†î·ø@ô 0¡È1žGÇTÉÜcߘ-e0°Bì<¢Ííä-XaÀüÓ=Ij]°–}‡¼ö¾ñ= ™çF8î–J¡ùG! ^”gÕøJ¦Yµì%Ð;ï²ò{í¬$=û´ªE}}Ã×!Jª—Fˆ&&mŸésÕ¢œ,í‚2h`…¸8)¦“äµJáu^v@¶öÊÐRXh‰å•QàÀq± ô¼ï±(ÞíÒ]úŒJ¬š`%VúzWÙîJÇ]8ûbÙÔç÷ÕÖ‡À*`á‡ç.¡ Öç-­pþ‘ó,š`+$ÀŽZ|è8K‹'ÊkcºÂŸöm–2À½^9ï+H±ŠއY€³j‚3¼ Ùÿ¤à °@Êø³|–ü©Êú(€U.ÀB|}LŽAOj¨žk "/Àiyt§œ –I×v>@G.Üú–n.ØÆ‡ÛóÝ{iºtRîM×÷÷wÓtUX!Öw<Ÿiè›AÛÉUÌ÷ô`{ÆËy_&K] yÃ5·¼ñrœ÷m³Uà °b\³Ä ð|¬1t<»f¹2ÑÐe•ïðßññõ[!GèéÌ/0¸Cu~Γ‡ùW& ï‹W)ÃÝÿ¹f‰½ô´J®hXßX늽aUÞr܈% `ˆfvüqo@|uÞ$Ï”¶é!À@dXmGðÕѦ¦ô&)D7ñ—×Õ_žÛ4jˆÂšE‘u»ÝäÂìç¼ c7ÂûŸf ìIŸÿõ?Å~\Ã…Ñ©©ö²ÅÓk0†Zßl;E¥~§øƽÈ×Ã`øØXWÞÐr°“„[ÿí¾BÄ}Áx @€CXðû½,‚÷nd–7Fi¯¿²‡‘œ¨Ôç~æ c.V.¿ÿgïü¢Hï8¾Ãn–ɰ»®K@qA9Ps"9tƒ˜Ó­üÚó<¿ÂEÚŠÛj¬tµ­ÞåHx^<•;@0A/‚‰§^¬É©Ešžþô—^üÉÚûcç™/»ó<3Ãììή-y¿~0 3óÌçy>˜g^ûyfþXDy†ÏÏŒ(MÆ„œC6ÏrüØÈ¾ ùY¸Ð3Źá¿0?˜‡`@Ñ;‘s¹ª[9ž§êÁ À˜oð<¢¡çe?à’Öø“‘›€c¾ ÀóŸ@c`Ì·€ @€0€`LÈ€cB ÀC @€0†`Œù€`Ì·@xÁ…oÏߺ‡ ÈH€K—•´B€5øï¿ì‹¿Y-m=ÿ!(ï\ ‘aòýÚ©+•ìr’išøLièyÙ_ºÌ媬ï°Õxs¨þOiEU9ðÛÔãs¨ÿŽç'Û˜å?Ý|ÙÎ¯ÍøJZãOFnšoœàVy¶­Il >ÈóˆüeŸæˆ¥ë=ïC€‡xÁ7Òd+±¼Eù=Ï¿ù¶¶CÒ(^Q¿š¿{…¼Gp@°z{^4Ú`ÿF)óã4ñ™uh2&¥Ù¾ °u|éŸíüt…ÔÕY±d‡”«sñ7‹ÒÏ¿½| w9÷©8ÓøŠZ9žO/6Û8+À _{4îÒUžÓ/®‹¼íxò=0Mfæãù7ßúï„ÂÓWGû~w}™´½y—ûl¹*………;WfäNâéG`m|†¬åø±‘}A×Û©[Æ—ÁøÙÎONX„ã6¦››ùjºÁóÇÙà â.ôLqͶ ð†û_xê¶$'܆“’ùnøf]ÁPâ2KC€¸ûÖ·2÷Œæãy8ßî\é¾"ʇ nú޵ûËr+À.ÿèèh͸ùql|>åSkto£l_¦l+?]¡ð«Qov¸tõhßð_gCü¡Åéåßn¾&*‹RàLãz'£¼ÆxÙm€SL>>soo^bÂÝôqÁwJÑ7¡¼Û‹ Š!À€“L¹®n>ž‡ómWtnç˵Kb3žö³Âµ\ø{ÕßFØñÏ'¶•Q€wdñoGÌÝÒºÿ .ü*­üÛÍWàpˆç}Ÿ¤,À™Æ'ž;qï_d¾ pJ€O?_³@3á.]_wI©«Ê»é½‚Γ` ‹ÌÌÇóo¾îr²#ü °¾º¢¾+å®4X€§'ÀÞ+Ýg½iäßv¾–läâü¡r{œv|R+wBá¿Ï± pD€ó7YW[~ÏÓ)? ,W‚EþyÞòa0=ÖÍÇÏ·Ò 7y süµúˆ¢0øÃT”ƒ«Ú*ºMÕ‘ÞÉþ‡®ZñßwÕýýçâo.™¯hý÷OÛ‘úzWáw,±8´Z÷)¯¹`Q×—DŠú3ƒøƒî¯!nx09÷lÛMÃøôíU·ñÇ’¯ J!>—ÿ«—b‡žu?'E=U€…™ˆûÐg® U°‡C¥[ Ûs]øx*ê‹÷‡ˆëÆoÉF~PáRdözìø¥ WME|ñg¯‡Të¤úÏŒñø%óŸLWQ›"¥6óo™/ït_¹ÁW19žî_æñÉ'·Ó±ÛG8Ÿ™pŹî¹8_Ë[.ÿjÁåuÝW À@8?ûÜûTzQQý/dcšŒòn)8E€;Ä›õý}äßCÄPjÅý„IJQ–?ÿ´pá­)(,ÉVü7)¤Þ¤Óí 319@ÞT€ý31uÊ,_O7~ ° ÇÂs‰7IÓýgÆGß_:ÿ”`î/·ŸË|é{xt7¤tYw<Ó¿Œã“ñvE|Ú’/» ÈŠ“‡ë:‡¯­ëÞ§®‰.ʇÎ °ÇSwúÅ­59àïŸrõ#·&#òý¹ÿNÈýpèë¾áINàžØëY®´'òæeˆ|OŒ¸ß÷øÇÑÁ§ÜÀ#“6¿$|$µë7µ'îÿ¥¢¢V·Í!XÌõEù};76r}–“‹¤ã7 º¿&$¸fœúºåþ?¸W.}|ºöjopÚï ²ˆOdS+70}u´åöƒÿ$Xõ_£ 0Ýžx$?Öystx&JW7~D€g¢Ûn]‹¥QÖŸe~¬xçJ2ž}kn÷üL.û3ýgÆÇhü´ùO &y•š×~þ­ò¥ÃßÁí^V9®üõèŽgú—q| ¤~¬ ‡ÝdE€ó7íÉó¬Ë;³/áÃ#-`Àq&|øyKŽ8"ªå?Á¿uÕÄÜÉ{àbHàþ+Á‰ŠSgË'*ȲϚ˜üÄdQ;gvþË.\ø¯òôX¾¹ŸC°˜ëWVøú¥€«Û¸úOuña#KL Õ 3Õ_ó*u¢\ÝÆï–^¸»¶-±è´ˆ`züÊdÏI ÕÜñ¹šnpõ¿R.Z¨ °_õ_ƒ 0ÓÞÄJ÷1)Àä3ÀEŒÇccï’3Ó¨ëÆÏ2?,Ÿ]èU¶åNÔØþ3ãc0~Tþ‚)Ü•¶›«|ý9,jçå¿ÝñLÿ2ŽOýƒ¼ÃQφ³Û€ìð‚ËÅOA§<oØ›wæx>pR€óÏŸ?½g‹¨À#kr"À¼[þz–®ñÛ&õáBU€ùÒÕ®²ƒävŸ,‡&o*•÷U™Vy¿ürÿ/ƒ“ž œÐ<l%Xìõ++x÷ãEr¼ä(&~óŒe²¿s„*À]‰²ÉE§´ÓãçjŽR¯Œ²Œ¯&Bw–°ä¿‹i!MT€éöü\•Ü sæ‰ÿÚ`“g€Ó`õó Ù3É×"i÷3ýgLJí/›U0—Ç¥ ¬íü[äKOs$|”øgø¨áñLÿ2Ž/qY:NÝ6 Üpm]Ýç{ò”ùx{±ôRh0à¤K´4Ü_ï)èÌW5*wÔ䆻r\ù‚U€‰ž”ì"öRvP4޲ƒj¡¶9dº:à º²$ÀìõE‘+´QYOéâ7Œd?5µ,tpꫪÄ3÷˜?ÑË(Ï´ŠOì<]Ù#œô_ƒ 0Ý^r<ÌX6²Íëßi´!ÀÞ, pÙA><ý£6ùTÿÙñ1ﯜI0G[nÿáw7ºìçß*_F­¤Ýš˜ûlÐèx¦™Æ§ Œ~=4» È‚oØ›W7$Z°lÀäÐ-` ,òÑzO÷ñœ,Vd¦9"Þp‹> Üv«Lô¤d‘I€kbÉgS*Ay5BÆÌ^¿²BÝ7Q!žÅÆo TMQ¸é¯ÆÖÔ®þÈ,¦Úî2Bg_mò.Åë'ý× Lµ'×#-X]ªH!]Y¨ÓÏ.Wp¼ïI§òÎd¦ÿºñaûËæ_LùS¾C«Î·Ê¿E¾ôý©–ßeUÝ*WvuÇ3ýË4¾;é¥Úºm@x{qÁTÎó¼ß’¿]yBIa 8)ÀäƒçK¹y ´*Pâ ·RßÒ0YgZ²‹üRàæ¨;þG•GŽŒ‰-f¯ŸüV©$ÆÆo$ÚþšÆ¤pQ{B‰ª­0`ª=½PÍŸæò…›Cõ[D^a*ÀT{š¦¹+…ë”Ⱥ»½'§8žOKß+Åô_7>Luù—ÓwîY÷¥ áùVù·È—žš˜´^¼ú6æxº™Æà- pÃücÃIÏ;WYþ 8)ÀâT[ð_öÎ>&Š3ã;îf˜ŒË¾ÁkjE#¾¬©šâ^=Qôj‹ŠW5¹jÏ»’*X¹•æÀ+‚‰Zð¢žÔþ¡`ÒJŠgZy›†þÓ?/˜\ÎøO›ôüÃ4—^.¹yž™ÝyföÝvõûùGf™yæ÷<¿iŸýð¼Ìæ p²Ä’˜‘KßÿOùõjr`öþ!Ùä•~b㟩Ç3¬)O?¥6r|’V«7!–×ßòÉëJÕB*¯`¹¼¿5ø’*ÀÊý’/À ß<|ß«¬Lfê¯k¦¾ºü‡vY6¾>Zþ£äKÿ°’';VmòR5<¿ T¿DãS†)И-À‹Ö†y·Ï“~r*)ÐÒ?˜ $W€/š+Àb@€•­­ªk#^X×ÀS*Ökî2¶ö¶.þð‚!FàÀ@_ô5ÀLyºM•"Ç'}¬0º¸¬Îc?U¤ ^ÞˆŒ-ÏqÛÓ!_^z€K†³÷K…[,.Wù€—ý2õ×µS_]þõ‚gþ#çKGnh×r:!ÀøüPýŽ/ø‡l‚€é¼g^@€C*Œ5À@ЏâWdÆ•é#À·•×û–ä ¸`#§þBoº³÷ Hu-Ù•ˆŸPY«+‹u¸Á'¯­¾ 4Sžîµ:QâÛäµjÞGL_ƒÔ4ÊÙ¹d•ë.}¢`¹<É/å¨Êê8!f®ÿýGáþˆÁÞm¿ä°¤ˆ×ühë¯k¶¾lþYÁŒ;ÿ‘󥣤8$À¤½ÃÏ+õK8¾À…x æ °¤½=Ûä—!­›ÛR*À{ÖÛ–®2}˜ø¸Z=ʵ±*Óíoea?øÈ¸Lñ¯ÿüÙhÃa1 ›`±÷ˆ$ò[m´ñÓâËLEÞx„Í Þ _Äð`myeŸrê9½Qã{õS®ðÙœH|²[VOKŸ’ÃùUÔ«JGííš)Ðò>+¦‚ÕTçñÇ<úÌ3·û'W˜ç¹Û~±°¦=.èϘ«<˜©?Û>l}Ùü3‚þ£ä‹©š1}ÞGwõfÎgë—p|Áÿ&´kÅÙc@2˜Lp® ®<ÃY2]ú `çöõ¶­G À@*xuc'ée+†×ÛÞê2èS<,}çì÷:G¹Þbbzξå±ßÿ¤ùƒÆGáFPÏüèvû0±‘_ÊÉÉáÕ‚E–]Êb¡½I±ýî‘ëÛ&adâ§åßöØ¿¬¹~aâ¿GGØTñŠ{ÈÞEŽíÅ¿XÙ'ôžû¤yø×ñ­A|ºòç}êÁFoQ-ùdèfëòÁA¶lÞÉuÂ:®ðÁÍÆAëÞ‡] 5ålä¬w:qï¼§Þ+Ô~üÝ÷n·;Ì;Ùû±í5?lþ<ö»C2¤e_=ØñdüÈõæ ^eÄT[¶}Øú²ùg3îüGÉSI—ÏêÂZ²&œ=Ÿ­_ÂñÅ90ÿÀøv^Smsõš<l;1yµ{ŽÒ!C€€¤ ðæ5Rw{¼{‹ÍöÖ¸aœâ`¾d ¬÷å•ïvü]`Q-À–²Ÿòb×;+ŒË¤óžÿœˆ«ÞK‹ÞO¨ÓÞ_™’ÊqRriã—ËåègGGØTñŠ·8û؉ãS>aÃô>ûbŸ2áu7oŸ¾¼ÒÝ¢e¡Š¿hZO(T 09oÃÑ`>ì_æß¬)ÏRYE¯Þ¿B½ ´ªýôì ü“q2Øû±í=?Lþƒï–/ R9 <>Úú3ÏŸ¾¾LþYÁŒ?ÿ‘óÅÔ§zYpºrA'ÀžÏÖ/ñøÞÌzt<+3ଳ#ò''¯dA€€”pùÄÚÛÎýj(ËTŽ8UÞoo¹w8l7tÚ`Xúj~ö~»§eìdWQ˜2럹ÝÿÈO•kï_Rlõ“£_çÜjâW\ebª½Åÿ„\`4¦Š×qñ‘G–«—ƒá¬ô¶Œm½aŸ¾ïþO»Çî'M`1¨?Ó>úújóÏ füù–/u}ç=!+•®;­?Ÿ©_âñÑRny Õ¾ì1 )l´"¸­¿µõæP–3†sÑÄ@¶î;Ù]v pínWeÅ„9Q;´GÑvæëŸþ/…ëú] yž‰‘%‡5^WyëädgkÆá¹Êê¸Â»Úë£Æg”qÄúú/¬ŽœÎ3Ýq½Ì*rûÍ$ÿbŒía_Ç ^!þèùŠ^}~EGÛ7û¡×º7/ü1 e,[p:uÈ@ 0™2)D} R÷·|NŽY· ½‡5™ñ:ŠŸì`õ ?ëKV¿ùON}Ì—‰ÏéG IDAT³M>A½Ü€=¤X€³ À@¢,<×l"fRÜTNsBoO£È)®oý3÷¿]ȯùJ±­qS-·g` ž]š¼t©wzÖ÷»ãY¢ý"ä7uùJ”R²Ç™j|š=@€0xÖ)oœjOOvÔ?uÿœüš“¯s«ü÷zn„=@€0õÄ™‘ß BLl-€ƒGÚ†`Œ€`tÈ€ @€0ú[ @€Ñß`Œþ€`$*ÀζþÖ›CèÁLiꟜì¬á3$ÚÜQÿ‡®8¯)oœj_°8ýê2¿Ê¯çž@ÒF€,ž_»;Û>o ×ÿ¢E€¤ ðžå¶­«‚GgGæØ$¾ª¡½ñ5z@Yº-;äÏŠ­Çð „%»Ž|/³¶ø8œ—¬2Wß÷’Bí½¿HË|65Nj[év½WeïÒïµé—ŸÜ*N äãÉ ýX׿¶Ml¡ŸÌ9y ¤N€Ë/ϳ©xÑrۉɫ’o=~AX‚î$ÇWÛ‹9ëØ‰ãS}ûަe>«—Ù«ù r§õTQ\†?Í ½=5®tÌØÖ8ÈYï¬À£ @Æ °óMÛ\©û½Úm³-¹R$ÀÃݶµ[B\þGj¾×ÖÍ='wÐïßì—Ê‚?‡¼`Åõæ ÓaRÆ KŠ…}»%7äËZW¤e>uìh>—ËJþk7kŒuù›| €Œ`Mÿê¼ÜIÿî\ñÞ:Ûk` 5Lþ}rèÍ9AÞ|hîT„M;`é÷ªÙÑàçP€wÑ™¼Ùà ¿MB¹¹Ž³Ì Ž“²:®ð®+ó“ýÐkÝ›‡‡€ô`¦u:³”þ× ãE‹Éà㫜*^´~m—2 ~˜¯^f=•„m«|ÖS®´Îg‚ìhðÙ/¥w~²oy ¿Áà @Æ ph&ÖR0Ϊ ½°zxí°¼˜Ž›!ÀÙ—§Ú[ücïç¿)”Ç¿ñ,x]ú·`£°×%ž=4èãä5¥âÙåƒ^»ìÉ9ÅBÊG½-c[•­oÙóõ¤=Ÿ¹ÿ¬ÇK.¸/ÿCoø{ýùzž>þzGŒ®,Kîa‘r©péÛÚ+±ÕGoÙFnÃ_4¾:ëùÔÖ‡àRúÍÔzŒSÞüÖÓ–ìá©vÿe néá—L{ òÃÔWW=ù ·k1þÿ@† ðæC¶?a 4"ÎbXê‘׎K^ü·9ôÐ&på4'; ê^%Ùɦ»QþYà”{Å‹}‚ÕJ~»›·œÏ {>sÿY×R6à£tÈÓlÙßëÎ×sæ±Ûí~}¼—(Tt+à•XêÃÄ»°VØŸg$À³–OM}¤ÒB@uÌ”G¸iÔCNÚðÛó>f*rJŸ]~ØóuùïÞàµc€ `©ÿ]RL`²øhíá ÿgïÜc£8î8¾{w9¯–ã|BÁŽyH ¶ì‚ƒÀ4à–ž€Rp NÅ•€‘…b¨ã“âP0"TmU@±-Y±Šy¦#µüU¥ U©ÒJ®øƒ¢(U¥îÎî=vfï|>¼·ëòýü·çÙÙ™ý=÷¹Ù™9³hOt¤…ïÜéÊ7J€W”ñ-·OŸ^ìÿfmœ´»¥-«»ÎTX7Wè8rvþÅÚ5ò:åã`ß¾åsN'=-Ltzêú¦—wâ%ŸëÚgçò-Wõ~NëpRà-£àusí§œäúö¤ëæs“©UÞ¼jÍhªùñÔÖ‡`·ßï_°5¦ÌT~’<È/nïê(ßžãµ{&Û˜øÐééüTäñbÌÀò¬×¿f¶)kPB€€ôpÆŠ 6Ç"Û¾ í6 å­AC:äeçøÅ?S^Š~ý´úêŽåÕ…‰@Ôø1TeÁVa=Yð¶`«òÐ'ž&&=u}ÓË›W­Ì0TŃ¡NëúÒë}8c”,^ñ… öšlRÜ$êC—·ÆçÚÎé °Yñ¤ê# ¯ü´_&*‹Q¦ó“¸Þ÷Ú!²Ù÷7GñÐtµ:>Lz:*â%~ñüÀúÌô¯™k&OØ„éà̶ÉG¤ÿ=ÜØØøAí*©‹nÏ7¢CÎ h† õFÐÙ¢¡yµ&ò@ªúÐ'ž&&=u}³Ë›µ\ñ,9¿Ü-:ùÑǺœ|S-" ޲%®»Û:ÉÂÁË“Gc8Q}¨òJÿj$7;žL}tÁŠ`:¿©¯veû¡%%¥Ú³ nt|˜ôT~èr,'ÀºýkæšUúþ  àâ3‹¶n°i|7XÜW$9±²¸[;R¥7‚¦|Â_Y4S^†(§RȾýYäôm¼ª5²ªlò°éµÂĤ§¯ovys*Ãký–(C{t~ô±n§‡Ÿ^¼ÖËÙÍît½ÇQœ >tyã °Iñdê“X€™ü¤s—¨F)g,UPó½ƒÑ튛žŠG´â³ìïá Ö`½þucQÿ…ÆðÒÛ‘,ØFøn,rìÙ9örá9á)z3‚žÌH¶•u·Íâ×ÀŽCä­eÑÓ—U‘—tz­01ééë›]Þ¼êèUâit~ôñH8cE=VÖPr½6_©…ºˆsŒ'¨SÞ¸@›O¶>‰˜Éoê+៕äœÄ+Zá5º=PñaÓSñˆ°ŽzT`QÖö¯ñý #Àk&“Õ7d~9¶–ÅøøØwÈ“ªâ¬¬ÙF&ö wÝ[=¼ dß¾ =]V‘9lz­01ééë›]Þ’R{ý/Ã\ÕÉÉÿé ‚åj¸±ç8ÉTÜaŒàõaÊ›Ô"Xé‹'[ŸÄÌäG¶ART_W€nT|Øô§‰€q(ÀÑþ5ÿB€C¸xƒCyYü–cæéØDkldcà±Ö,ªÉ4ô‚ãœûû®”™’º#h „IoÄP»¨¯Éåͫ֎ >­‡bñë p솱â6uJ¯\ŸÜ‘ëÔ7î6HæÄ“­ÏèG€5L?mt{ âæ'm"x€ñ#À‘þuÚëñý "ÀÓŠGÂCÁÍF m†°¸›×EÄN$“Š'çñwdÓÒC™@˜ôæŒÆ_KÊ„òæTRwO'ÀI/‚s”Dë*…Ü‘ëÔ·p9¯>sl‰x²õõ`Õ#EE€éÅ¥Œn:ñѦ§â‹`0ŽXí_‹7è®6  àíª°òˆÖ¨á1êKv²¿jD•źA>@Hùåmi~¨¿ŠnabÓS×'„Þ<ä4©¼YËùXáI»_Q·^PÅ'àh}˜òÖ”ÚßõX&žl}8ne%56šxhí0³ ’Á튛^Å©æ©8¶A`ü°Ú¿f¶ÙfVd@€€´ °¤½íAe3¤EŽkéx!ߘ}€³ÿ¨|â%±˜ZFüiÁ «I÷Ò¬ËSÂf@nÕÛG5‘0éí{}™æÇ^ïIåÍ«¶¿«•¸÷Pj,žüÛ·z D‹ú‹`iKò9y ±`oàÃÛ0%ªSÞIUüæ«ÑôfÇ“©OÌ<Úp¼GØX;\xŽ×<ólp{ ãC§gâ‘úÑÍm˜(ÀjÿZ¼A»ô0B€3%–Ê,ý¯Lý%S2×9VïÌÈ(¨m•צ\ÚWä(?nH‡<­’w ´öv5¾Ô³Vú@¿Ï¾ÝUÛcßtWw¡eU-_ÝÜy~ÿ±î€2Ò˜×)t9»¿ïßò9§/L×z*œ:é©ëËÜöz½»L*ïÄK>×Àͳû÷Ö> •‚7íõ~:=¹»O –ä¯Ríú{øŽ~B©>ty¹Ù³„ůzˆëÍ7?žL}äQaŸëZÅùc·þ³+"À§ü~¿âÀT~̰ûh©vã]cÛ:=“_䋌Øña€˜î_W¼îر7L "À™Ú^V†€ïÜùà„Mé ¾'¾}b•ÃQ~Ó˜o¤=Óîóʧyù çì¹dGkSôWÑ-<§&¶Û?"#aÛ:•76¿êÔ&Á®nÓC†ÄèôœSs}Yqˆ?1©¼\aw©z9!&Ï=HM€=J}„Žóª[®&Qº¼œØ&ÝñåouÊ“cÍŽ§“®,¼ƒJ‚–ˆ“(O6Sù1#ÀòìsÒÖèø8©ôl<Âßc¬ŸŽ¿X[€WPý«$ÀÊOC€€ôpÆá~å}¤û-¾µŠMø¤×¨G²œYï5ùnÌl%Os®¸ÞÔ0pÄo™¬‹'¾iò¹êv„Ÿð,èï 4ÜX}A_%ab…‰NÏ\ŸãB_'`ƒË+©ÖáëröûŽÏàRàÐc¯÷‹$77fF¹•r}¤Âæ(SeG®¶¼rå5‰%%ëXb…xRõ!yÞjj¨ÿ*\`Sù1#Àœ»¦ÔujFºÚ:=“G†å³1 €Õ˜î_!À@XoFðÁË]½™ä c)9Ì·Øœ$Ñm\Þn®ùïÞí¦•×ý´Û·:CþûÝôݶ¼bÝå;wZ+œ‰§þÔï±§pŸý±ÇbíW“ßÄ»û&ÌÀ lß¼ïĬ¸s€ö¯` M¬Xð3Ý!ßÖY0yüàôûM.€ûÿù·ªà>Ÿ}{ŠuËW×]*Ä> 0O€%Ôy BÆS‚; )ÀÏt‡zì}èAëqXyŸ:Ú+,ÙDăµ=¼þ €uX€`Ksï뤧Ђg’ºî™Úg½’-(ãÁÒãÓ@€Ñß` á=ò~ )®j² ‹“ÊêÚ/ >@€08Iš–Æ-¢÷0†'‰Û† @€Ñ!` 0 Àèo0F @€0 À` @€!ÀxÖ8óàåÆ®Þ˜7–Jo4v3ªCn~<üÄ£y'ôèßÃ^ïðóŸÉ¨Múçï~£¾tÿä9™ïÿ6ñYï5•ò®íhñ`)~~úÔ²¤Xél{ƒà¤ûËÁú_xÆæ|÷QŸ¦‘{ÒâÚ¡¦ç§§»”ؼklî—|篞7ï÷úUÊhã1±o¨É×Pÿ¯ù)Çw,Û×Xæ7µ¬~ ýÂhïGúH®|ø¼ ¬$À_r¬Îî·9$>©÷È}'„ŸÓ!ûï {?Õü®†{ŒÏÛ.ÿ¡3õÓK~úÜ_f¨¯“`ñR Ö˜)À™Úa^ÊÇ«”ƒò›Ap²j'¬Ÿ=¬«½³$~âœÊÈp|îæ|19A*ì®&aŸLݯQQãË^¾‘cöy#ôy H1*ÿcï܃›8î8~gÉg°eYc;6àXæ!¨m<¼ª© Z’º€m‚Õød\SóªÍ ƒ `ŠÂä¤ãb:@ÇÐ $Lëcžáå?Ú)º…!aø'Â0™îã$Ýí­t’%'Rf¿غ»Ý½½Ý½ûý>·›PjQ—·a€õë³}ùrÄVð•ÉÀ³ÃB2t™… Û+ ϳy.µ'9\Û§_ùcþ*Spþ¾¡Z ¥]}±@ð¬jÌ¿r´¯_loÿMNÕ dçW OÒ¥ÏÃû Ï'µµ-{±%2‹äÿ¿ADŸ¶}úß\ON½ÙlžûKž›©;½»ÃlX‹gbbbŠT.ø1´¾íõCµCv0öO3Š5éRk»4 –ÆGö6SÅ5×>ø†1Â^¸˜(¯XW™j~lµÞjJJß²¼t`ñ‰úˆ;nJíÙß±nMûˆÕ¯ïöåC†Å&@€|5›! ÿÁ¶Wæfjö‚ Ô{iªõ«Ò¾|OV)WÁëJŒ\Ü/§ ¨½RsÕ »Îa~ÇíS5Ì_e †o ×þiA”€§-òg„»óµ¯¢á‰CªŠyQAþäëØ±Ï¢‡rt‡*­I=Ã;S¤°dö‘lönÀ‘:«p– M¨àS?2F\±x8ÇÝxì³00þUÔG­=oCõT!×€BN,×ÁnòÄò–3Á·Wšâ.åjJ’·}úÎóW™Â €W_/àá±áÍp8Tý-¯JyŸ˜‰¼4„É©0x¢_e‰‰‰é{À1¯å aŽl¨µÇîM¼b køØÍ¡àÇVkéÀc+êCßÅÏñðÜÌÔ9\JñúܬR.e¶o8£AÞWø}úÊóW™Â€c  –öÿP[…§£žàiKhk_…Î 7…V»’­Øçޏ}Ÿn]ßp¾îBÇÍGSÀé…àÿKSt%F}ë’“v?ðõ­£NæÆ6œ¸C|*äx2wýùYâRuŠð Â' ù/w ÔãÊðTöwˆGÊ;ÓÇŽöÅÍ›ÿ\†¶·£E¯Þ€ËU:Sd0ØÿòµÁààíÛÓ—çøoo¤ö¶ÖžºÔƒ¢Ø ö‘}2l–Ndä-%F2cPÁjV ÞBž>À”ø$ ÉãscÊt•ž%ŒRŠ5›Ñ¢Ã 'yƒÌÁ9Æ… ©¬ÒU'¶žžÄMGÒÒ ¬¾(ç“ùC ÿh(¬Ø†­&ZyÑÒƒáaþiõ_kÊûŒO-`Ùù,ÐCéõø½€ `7°6ß¶ÞÀ¿œVkÇ9îZo Ü–»·¥KDÃ5£»oß½òв>`yç+“^¿rQâ+ÊWê΃6méüË–3à4pª`Û+ý~L,÷ ùÊòPko½ÏûlýÏÎàãŽÙ9'Øe³]¡lƒŠùærŸ­ï‰øÎBy\%Ì_e 'Ž!޽º—¾ŠúÜõ³¡¯ïÿvX Pô(3îñØ›€VÑ À‚€ã.ÁEðð\ëxqäŽ~O§N£G*p”ðÀRÙQ„<Œ„<®¯”ãi`¼ê ȼÓ?€íCQ¾r´+Ó¬eÔS¦ ²`Û+ý~js½t¢’å¡ÚÞߨ°î]@ëxчö\¡l{ûÄð7Zxµü1•)¬NþÍ®Úu §~)~OT]u|kýÌì_m7(C Í€`7»¿€”àíSBÓfó-=û;ŠŽ}ø¿9^z€/Ù[f9Pƒs3u‡w¼·nܱú¡{nl'Ü.:õßr£„;nŠ={­£õgpÇÉmê+µ„ç8~ÿÑücÍßߌþ·€žßæ1Û`×µ31111EkµÙ«/ñX×øø‚Mû&j©3‚ÏQì›°¿ƒVåöVßÅç5¹YR­ïüÔÚ罂³¾ r ‘?d/Ë|™>ÀD|% ‘ñ'â¥ß°ùÑ9>ïà‘¹íAxÍiàpì:Ác®¯yxO«ÏýòSüdzÖ—â|„?¤ðoô—ru‡«~ß±ë’R^ÊôˆðD×Ϙ8à_—ó‡¶ßã}Nuã—ë H@ÝFz0r£éónkw’‹o5%'þüÖ e}L.wW?ªç€ë—t­Èødùo+iA;½G.LµÃ ¶½z¹ËD^Væ@VªíÍqßf{6²ÍùµÈ¯h_€]Ô^¡lþí_º¥íé@À´ðjùcþ*SxpÌ´ùQÚœ¨µo¸ŽF_i¨Û?(o¤ œ€›Õxò!>ïâ‹$3½¸¡æðHø(FŒZ¾ñ=˜æ¡êÆ—áAdø±5xEb9î`ò8¹MCzÀþN·Iy'úfôÇmàAõW÷Ç`ýbS{ 0111E£ïþn+rÏA’n†ÚÞoßÐWdß-ô!ÒÞÂz±)®ÍES$}çÇÒ‰&S6t‚°ú ˜!Jþ%€b@_¹Yjvõ*Ò‡lÆ8e| )â»/À ¦E[€ý^Á£í±5š³ðM»a§ pËֽƣ??Ù˜~4r#™^€õ¥8á)ü›£™šJ´Ã38QÀòô(áI¶dÀU–1“ç³dÄnE0¦ÌýªÃ‡Œ^ØÓ Ⱦmg ÃÌ`le}pýR$¯(_«àK:@;íâ+“£ÏÛ^½Üúã<}†1Qª×€ö8nlþÚö( m_ÿrNp^v°t»ùŽ­\¶þ(¥„WËóW™Â€ã÷ ÕjÅ¥ŸãhgÕG­=²+ÿÔ(-fâÐ/Ê!`ÁltÍ6¦›i!Wö4£õëàóÂÀ²!µî"â "üKS°€é¡ï’é‘Û4y–±F/Ë=*¥pôÇÈ™ØýnÛA¿Œ)SØpLëÆÛëgæ=8NÀ€€eÄUHìç\&øißH{WÁãΟ S4¸ƒÌg~f,lY|ø³å îär€’?pds*é{¾ìþ‹/@RÄŸj—ÍØL)Öi%»Ð˜ÈE.Ö¥†çLÃá•éX_äùHˆRÞY8_,Ož`ÀÊn0“ç³dè4g“ðõû³Ô”`4:àhN qzj°µ»P܆€å솓‚="êâÕ b€m@õ«À ÿ‘87 ß겴©ö´Âãš•\ðíÕÛý¨¼nê~µëƒüŠw?µÙšð[?<‘€¥Û½bÇ/"ç»”ðjùcþ*Sxpþœìmó£°=¬Z[—‡¦,‡rÆ/˜½/‚¥_!³Dëƨ_ž„ ^jÏ5É:×»'ðè/1*Â{FHMÅ]Çdzä6EæÞÿÀヌÏ÷&š8ÇmúÄäšÄÄÄÄÄ)ŒT”j¢vH•{aÊMÇês¨c ƒÎP(ìgŒœöMioÇÖ`n°t¶ÌQÏObyì[†Å±WWð%é)ÅpqJþ|…"ý˜Œ8BÆ!લ&‰?tL,xd7äSŠa¯Ü°…€@ù °¾Èóþ¢¼=ñ½°,=Zx€a7~c:`ÅùãRƒ¥ Bìò•=ÀVÜ‘,~,é±{.0'r™Í€ØŸúÄW¶gB;MiÇV&´ZÎl{õv?Z24›i·&Qj×°õžËÛëžó‹×ùüY“rð²Ø¯ï¼c{”® ¯’?æ¯2…7,ˆú?{×Åu…gØíxµ¶—ÝuxÔæaì ±eL`18*,4¡b«xÅÃ¡Ô µ\Ç OÇ lQ )•À Q05ŽÀÂ#PQdó«"XTY¨4ü (¢ êܹ3³3÷Þyygíu9ßðØ÷Þ¹¯™s¾9÷œóR³È‚1FXÎGXúsF¸Žd`Ó(ÐŇ|º·Ë¬|] Hÿ´äñ¾Œ®µ;äoOjõÙ>9H¶|aUÜ'Cz/‘í‘×,ˆXU ü~VÈn? 0ê°GŽ/ €!F€Q´ÉÞ·5Œ·´e$+ VÂrE¾ia.ßhy;»B¢'™2K±èOf¥gcöœ™›«£cÏ“}*Éþ™ ª}F$3‚DÖGNÌ›uX©[™¹i!òÁ_…£Ò?| ‘‰Sýq¸^ÄýH}ˆšï²ˆvÛð´®=VyŠgžä—¯—0u¿ü½Ÿ ”E§¨*,ÌxïB`Ú¯FÏãb⨳Á|XO i%…µÂ„·OVŒÓ_£«=˜¨û‘,oÑ?ÐW©M€Lo–ìÀÃF.Jóe¹Ü2ìíeƒnQ¡w®g§AÒ}«ÝÐÎû|9WÔ¬·² IDATè«#Ñ1‘*_õÔ¿¯ “ÑÕ>›ÛuqÒ %J€3ºfÁ^€!J€Ñ‡gmâßÒW¼’àräŠ|³ZÞvG1Pr YôÇ’/G–ß±+r~ZÙ'0ûgF(¨ö`²>ƒoS£H Eò%[ŒÏ-£_J˜êÃõ"îGêCä|k ‚†XÛ³/ÿiѰ ËRÁ¬ r§`ñÉg`ŽêÎ\Œ`O ¦X[¾°Šð\é‚ÐúÕuåÓ"+ ØŸUwâRx |R€!J€Eñšþgâú£dX€]oZýØ\¾1,fs_ó”çªq`­ú³;¼²¥ê]¡xŽgß*%f‡BAµïج¯OÖàJÙåé#,LõÇáz‘˜Ð‡ÈùÖð¡ê¨ Ì,O`ÿ§á¦µ`…—Erlæ‚d[€ÿ©É¬#À“˜¬çØl½N,ÀcW伟ó&úpsv’‘>êh¿=6@[ïö½¢[œ_ŠkN€Ù`ý}ÒxÜ o³b F?‰×òŸ†· ›¿.|€u¸úöÀ& ^Á`É©úvÇôÖ–å£þÃU?ë¿¥PaKà 0þ*À—CP¢¸…$ÀÓõ×®ù',ß4pîŒãÃÊ9¬ûSX5¦CTំ×T6u:'Tû 0UŸ ‚%ëù~…Ë¡†¯ð±0ÕžÃõ"îGêCä|‹óÖ„ÿ\ðoJ€q{Ìò4ææ.ôtMbû+‰_ñSl¦ÊÒàn™Ëο¤˜ôN4–õpâ,>èô ¡:Ú• ĉîW£çÑf,«ñµ^/Bó0 ¼Ô5˸ÏIÿ@_¤2~}¤B€1.Yâ•>—¾â}þÕA·seΧ<àøeV{‰7!À"Faþ°£@kËgÏ!¢Û÷GAð«)†C^5ºyޯϴtR¢@'.ßì`VÔÜü<ÏÆêˆì*kÕŸ±“–÷âàR3{m)»Bc{¢ÚwH€éúT$‚ŠC TðLLµ'‘Œ·v6׋´“ú9ßÕa<ëÅ•¼Ï†˜YžA€E##ÌŽ-àÅâ<­ÇÇ ÀÝR”‰aFÿ]e¼œó(ÐŒlFÆûÃ" ´”†iŒ”Êç[™ëÂ~5xí¦A²_< ´=ÌŠÝ礠¯R™‹´÷ N€Ô2Áåpz³üù‡Aµ£ê9ÁOœ_@_ܤ÷lÁ¥ŒFæèìOä¦2ñá$V`Ý ¦°Êó.(þwvôSAÈje¾ðýì X@€àY&À¯ÏP}”lHtÌIWò',ßü­2˦|cäMuò¶^^amý)Xèá‘%M$ lyM ÕOéTû 0U¿ø¯=sLZdE>Šn>õ߀, ¦ÚCúÏ£PèqÐÞz‘÷#õ!r¾çùе•áú¨ 0³¼v½eŒîãcçÆ¸ "N€Lǧ'À”÷7Wâ¿=l 0bÆÝòÞèõpJ€YëaF€Yy€µó“Yé“v²Kû,Ñýjð<ŽxÃÇÎ$DÎ‡ÕøDÛ7JþL1ÞŠbJú_N“¸ÏIÿ@_¤.B ð,þ]¥ÀÃÍÀyDA¼ù"½Ü‘,à`LÍKonæÆ­à3ºvž>¶å…vñU›]Éç\=VÓî)ÿ‚kvEÓ×—×®Ûs*‚¿Hõµ5\w¦—oú+Kàgž gt]þ¸îš^IÀô‡?¼zlóœ“Vò¢+8Kû Jó¨ä׌†ÝC‰O­Ù‰¤l陲˜½vZúþ¼u‰>&–kòÖù&ÊëÐõñ6ïGÊ[$é"šDý)>„‰„Èj°FÍ&û²ÔCWÈA5ãܲÃ{®üg=£}6ÖÖ—’*oÉúݪ PG Õ TH;éhçÛ:Â(Y.E€Éö8)ff(´ÞÞzQ`B"ç;{ï9»³¦—_ókm,u¼d{¬òÚõV°8 &ï—Ÿ—ñٺï^ii¹2¡¦ãÓ`ŽCüvûúîÉØ>À’xrÏÍÏmÿ¦û½Øþú² p¼>c?kçG¼¹´¿Ð¾Ýȹ°_ žÇ2¦ý™1Vã‹ý£¨¨¯sLJo=½£¤A2³#ÂüàÍ>¼#›‚ °aÿ@_¤FažUü›€½¿½v`ï0,¥OÓéçÔŒônZ––4Œ XÍ-À\pÜ]>žÈOÈŸ$Ex?7šºø\Øã9+}¹Ël9бügóU|**×*ôGAx25þŸâXºþ[®Q##*âÇ0$ðËÓDqû›½ó¼Þ¥—¥sV/x—^;€ÄíKÍiI‘·‰Ë7éÜóf{wHy+Ÿ&€®yDBÍueQ‹šT]=ù9â–ùØ›•hŸI€õõÇJ*…\Ѝl€šè¿¤UÖG|m?*¬jêÄد%ÀT{\@"ˆí­eæ>Dé7sJ]ù¢6 t|¼T{ÚòÛéõV°ÄôWÓ÷CGEð|Ó{Ê*YŒOO€cˆßŠèÏŽJ|9YÆ-z=ØØÉú²°¦>c?kçÇ¿*,M¨ºoݯìçQœ}ƒ“Í9ãbO•,H¶Û À15q¶ñ° °qÿ@_¤4NÛÕ³Iö@¾ë—èéç×¥ ¶°sBöïo6†>Ÿ°S*õòÅÆ†®æ Q¤ì{¿k gÔw­UNdLíh4|þ“#Fß¿ë"j~ÓG¹\ÿ‘Á‡¾µù€»B€•œ2¸äÊœïÕ Üþ——êäàUᶃûט!BK%@€“?>w×#•Q€b”YÚwo>lõôU`€{ÈþÃw<¼P0 É(©¹ÙèÁĆž¤JR˜`u•rhå‹ýi€&À3>÷Ö#¥á±°¾ëà‘”›ý}àî»'+K€Yü½sŠâ>àøî=w8Ž»‰¯‹ pžŒch-£­1Vƒ„JÀê ±b­€1Pˆ/ê3>5Õ¤ ‰Ö ZcM™Žšj3c2Ú‰ÍÄþ‘v:þÑýíÞÞíîíqÜ Vòýü!÷øý~{{ÎÍw?¿× ÀàA¡±U=ŸÅPó§« ëëît[‚ª¯4¬¦ó zæñùp½ Àyû]ĬªÅ #üü`0 Àd @€È€ @€0ò€`ä- À€`'À±o8üY½$n¿ÚP@Gÿ,òGª²2ëëε¤â;€ xì¸1sG7~{ïßÉ+eÿü×½¸¸{}Ä«l‡ãã@á\sµaì8Šš0>éÉŠ™·ZÉ×*MÂøÞº_Z‚<·1sëÎu¾Þ﫦ë³Ï~q@y`1ÏLÑÍ™ê~ÖtJ£cùã"òĹ@硺â»'ÀoŒ×¾ ¶öMÇb_ôvÑýKðI\¿Š?Ò6 ~LVŽÝ­qÇëÄB÷Ë)9ºÇÕ*À¶OïÅýyœÄ¿ãyY^658ÎÎã^u”K¬X½lk\!I—Ž/ãî³/”•)œ!Pfý7Zƒõ'À„d™›k+,!œž©æD6®*uÛFQ5×ïÿ]0y 2Lz ×½µÐã¶ùÏEu»:¡¹ŽõJ¿h„«¡ýŒÊ¤w|¥÷u½þ«ï-ÀŠõÙã!  ììÝ­\”• b¦ ‰é~ª0÷YL€œ¹œNzWˆŸ`8db.;´‹G…¥©øfýV.çWëϤžç"&Àk/N pJNV›k$XÁ±íÙs* ÀªhŸMü}e÷õ¯öÙLÁ °bý­VL€!àüG£ÊW©Y€e|![𛫠¢·¹UqX˜Š9fMú0,-å•ÎÚÇçª^¿ÿíÀó@„ؘKRX<ü¨®œ_ Ì»7ÊÊyºM¥³ýjÃúº ÕGŸt¦ùYëØï³c[LMÏ, üsò†©iÊIGtÝ…;ÂÖÆÎS'ë/Ìqmý(/ï-¨Òò²ã‡A€ý·_¢}É×z¡ZöX©¾i%ýü$ü˜ Òìüfâ«jàÆo¸Ý®î¤<:®¿Ûoïéû€k¢ì¦½Ï@ÕßìïéÛÄ¿›¾Œ¥ 'À1]Wê.ÕF€Ó¹/Zû‚ðùÆ<¥ý5_ÿÎ !Κγqú6ƒðTv=À',=\¾.6Iÿ°‚<ÈXýI©~¯Rå9€ °Q&Àl"g]d½x§f¢8˜óOE•«´Gzö-š¿º êë`ƒH€c.“M%NhMüc†víij?ÄhµäÝ(…òrA•——?dLû¦åôó£ŽÝPv–ןYÂ,¶àÇàØöìêÎG€ "À ¸ìë~gè>"œ¬—Ýå_ø€¼mÞZô%ài½\žžá_€ÍJ\ÓËm²<ý‡Ü+™' ¸ÿŠÍü4kùõ€ë¤ªa”Í<¢¿AN³æÈþãÍ>CÙ_ž&k}³Ê_Ý™]½HÚ+Ý9Uœ?—Þ|iÇ£§þó¤àË›çÞYÉ í¼ÉÌÁ–ßÖN=ºæ{\æd"Ï »þFoþˆR(/TyyÙñCàÁ´/œÛ 0׋ ܬÓe­}ÿ°ç. 9Q-FÕ 0e++c%Ø-Àî; ɇ…} ð×v{ÿ¦Qõwù{#‘`òpÓÝ{™á”¹‡›(+À/–Ð;wÝ¢}.Ë›m6[ú2‰¿ÛKOï<|ÂÁ,&*sÌ}öʦ^z3·îV~=à"~³4 «€Ó›õ·É”ªë¥·c\.¬€¿<0lÌ_ ÑekÖ-’Ä´Ô‡UÈ3÷ÐÓêò6›òp]åÁ‡I”rB[eåƒÏ•é˘ù܆Ӗñ“žäåe‚êU^vüPxPí³™€_€ O¿R(ô?wªX€)3%àÆ@¸£ßÞÏšeYê]{Ïhn˜5ßb^Œ‹9›Õn3ˆ8ºA{v4 Fzú&ÿÌË«D€ë¬KëYñ]I“û “;p+ŒãKhÎpe×î<–[ÿ%oÑ_#g±åµl¨¾ÖêS€Ó À0ìÛž ÓE•JguÕÈOÚQÊ#À ñY‹gXQUî W®IOòò2Aõ*/;¾ŒŽ/ãÄûàAµÏJñ€ÝÓaàÄÇ襣ðc€° °±iÆ »Ö<Á*07Å*w¡f]…QÍLIØ`³k€-©6ÿL¦;s)h`…w7lïá䯃ŸW ¹åÞ„ñŒö, óV«¯­®`F»”Ú­²¦sYÆy0'ÅÞ×ndŸÃGžûË÷äÕdáïÌ#³ö‘û+ø`y`(ع3;ë•hÊ3Ù«PlZ)í©UænvÎCdQò&éÒwõå´Ð÷ÊF%Yé*//T¯òòã‡(Àƒi?fãy«k=¦A °ÿúoLŽ>{%?'§s:»rtÜ&E ÜM&NÈ&X7íý|´tps Ùçv~`·£‡0ë¥ü^•ægD™'òu»?œ6Ãe´$H“—ûMåñC¿Òëñ•¦=%Àæ­¥gR)Ÿ#Àò<0,œ»P“ÕÂZ°È€swjŽ@ÎÜÃHöPzWÍÜ?íãi&ú\9¿§äLOõ™%ÜCyy© z•—ß·^²˜LþØû• £=ý°R$#ÀƒªŸBöá½€ ìÌM²ÒUW¸»š$hèÆ~»‡¹à~ƒH€M¿—vøN/È- JC,<Îs)Ôü–WܯôzÀÃ<éTlŸy>p¾sS “·¼ù6åK€åy`˜¸(!ª…Öè/^Êj3ªT€ãK¤›U(ßI\Ã\³ê$ѹK¯K«Õœä]^*¨^ååǘ@Û'}γ!fcˆ<¨úù·¬`ˆŒ“Žç6c‘kE°‹–7ÌjnO¿?Ü7° ±£<$;vÕÊà8¯@[÷+w¼®ü p`¤7ë¯%¾7k¯Á³!´‚‹óÀð°sŽè\¥{h‡h[õŽ‹7ô0›¤ÊLQ†Ú®ó~¥¯âð¬4B; {ä–‰±ù`ÿí›lµG{­iÞ]Æ&OÿsPk€¨Ÿ²$úìŽ6ܪ" À¬ûFu˸{Äwô‹6Ä2 ÷ö°÷hA€ó¾z`àŒJ…•Äžëñ}[žç~òµÞ3U¥7ZÉ'Ù¢Ê>óÀ pJŽÐí\”àzôLBT·Q­lZIKsÞd×ÞÉK_LQ‹ó„ƒ ­*®@€•ÖèJŽ/#k€½ÛÏÜC/ÊM°–ÓKq›Bˆ”·ŽuA¦@³Fàà>aʳë¹L€½7Á:´WÒiÅ!ðÿÙ»ئ®;Žã×Ém9qâÄ‚B2hZ^B"i–ÙÊ ¥@;¡¡-cX+Zx‰25¬0 40ñ¦¬ °A¥«(´…6Vm‚HT¬)š¦lÒPµ•P•ªÒ¤Ý{®_±;ñ…Äþ~¤ Ç×N}#ýýóÿÜsF2OÖØ ~IÍ"XùrÿõðQÀèëaIuWÏæàÚ@ì Faí‡ò-úFAž0.[ìï(†óŒb¸êKœ¬•<}[„§ä«@Ç ÀÑxý^àÄž?Ù}€}K7%Õ½e$¸Øót`Æ•-¯®Gà¨müøÙyÙ/ºz€ýàâÇÝc}–@ù6HÉ`e‚œœú/ãø$çðéoûÀƒÀZì5æ;ìªÊmöWæ°=’úâ>À%WÊèÐ Íàé¢NŽù o³t tñ ­v.û!ÈöŽ€eûô†¿~Ü\Ùý"X‰=’Xß«ñ+úd®­V‡—÷ËœT8°°~ܦ§$àŠW-á×üð˜ºP uüêïß|'Ùìï+eK²_,5îY³)úó@è9º_Û#²žËêû€m9¿_*êù6é%À`xPXŸpåѰ1ãJ«¼b à‚Õª±ô³vO_ÀÊÐy–¼ó[[[FŸzFL×-ù¨¥þTöÜ+ÒE°Æ×mùç¥ÅGÖí89ÎøF¹ì ûëM×ù̲E´^%ø\«aŽUòøˆ×OZOžß±Ðséi·Æ©Ø#ú ã®ë· ’àï#9~|´‰èE[¿U¯²ž3Õêì°•&û|vùBKB$€]côù¨Q×þ4â¡MÿúT¼QàüíSÂ7æöhÞ;‹Lûð”¥äª5ôú…|¸kU+€wkCk—ìï+ÎãEyç/\·¦þ3}õyÀo‚1ÿª÷V,xâ†ö›­ºcÌ„–&é8õ`N.8¶ìÆ$£¬®¾¼gV  ×Ì ÿjºïd—Ø£G§Wl6Rìppn|èŠWýÎÎ~[tZ»Þ0îxîûVy¶gû·M_ G>^±vyýàäŸ@]Ìé`ÎOrBnˆ»òEþ*±_Gr¼â\F}€Tà‰iåög;'«êìK¶þ€u.p"`A49­¥Ÿ¿çßé½—%`}Ô #°xß,–-?V<1ïø¥ð,lø(ðb&uTX©89Åÿ @ÿõy Paå3¥“缓óï[·¶å>êõ“ÀI?ÿy1¿žvH¬ï·À²ã•íE±Öô0×|8YTÛÜw[mý4+I`Eqmú˵Q£®}úr©"é+ù+¦äí.í€7\|2lγïË¿ J2:ÀZ‰k|_/§k›KåŸÑ&.¹š¢wË9ÿ§z-ýík±/ŠSÏ&`ÙÁO44´´Ú xl¿}gùýø´–-)ùCÌÿ±è»òõÍ~œè#=ö€äpöskw>ó`(·å¶„ôÑbêˆûcŸÏêò¹¬NG`èÓc°J´5tp¾ˆˆ®Š…–’w\]žÁjUÂêµÕ÷Åÿz±hr¾µ»ÏÎ+ã²S·,³ÏvææÍ5GzXÏ÷-)¸?ät{KÄ®ß.ìM ·l‰lK@7XŸÂkïv¤L«·jÊ£cÛ-%Åë)[Ýn3³U'§ØÃçC÷½z0-ÛÀ}׳#ío¸ãû²ð¿®¿š³±]º% ûl''á»íûëæ¸Äk;6ÖŸ²dß×ü›t=€3’óx‘Xé+ÁiÍ×ÿÓå’©¤¬(2®§¢<Ø|«NŽ—NßÿW3Ýb·Çï??ðz g¨â}_o¶$X0ó}_~Óã‚®àì ]€ÍSSÿñ怦¯?à7}¹žÀÍáv[{ä/_¹¯ ÷ïÂú`ÖǤÒ©”ïæ=0`0`ÀdÀ€)È€ @&@€L½€ ˜z 0 @€œl.Øx¢¡¥5ö8•yE‘}ÃúóM¥œ+@Úào=€kG«S˃£Æ³YªæÝ91Æ©Àš¼Ý.N ƒpÁ!Q\…áӢǀ‡ÌŸ¿€é¸fÏ@5,­®¾¼_ ½SKÇ©-È·{Ý›í–o¿ÄÉ€39ßñzOó—09{ÎìT+'‡pÍr‘t=‡ªr›dc3 rÙ’¼q²™€W¶œ0´JÆ`LÀú7Îk[geðÄæ¾%‚ïLu’llN.y†“ȬvõQô˜ €)xõ¥ò‚°<´º²Ùßù$›Q·1@&ó—07Ûé’w€Ã×ðíÐY3´§¹eåÐãl›83K­ÊZ;'Ö˜ @*°nöÖi²q:à6ï݃ŠûŽ€ïy½7õà:¸CX‡Û­g^· È;ÀaÇëà6ïñ#Šâì0~@pÁ®ªš»(X=ã”äâÇ-Ï?ÄÉdP¶5644쯟¬EÞå²q`=¿ê½]=kû¯è÷;:ý7º¿8üøcz§Xß{ãèÑè}U•[gfëo䨄‚|ldÞ¹?—rº™€…i5gªÕÜE1ÇiÖ>ªýë»saÙApoŠû÷ñ†`y8t¼ÞqXÏ2X€`Ϭ¬Ê&-õo䨔‚<´Ýb·³0 ð¦¶Z]¹8Î8®×êZEÌ€9€åׇ/VÀ€Þàs›Dß7K4M26¥ Ol/"21ë_47ǧÕ6H!Zn ŠÀòU C‡;À€”àš™ªq³f¹úÈÞè±)yè¼¼s{¸YÄqØ6#+÷­xã´ À§#!ï;¤˜0 5xhµÚhë·"Ǧ,‚µÐòü N #ð®ˆÀ»+°O ¸¯%€µt€¦àÚ`Ì5¢oä˜mHaö<Ýu†Uä8M;ÀÁU CB™ÖȽGÅg„/`€yX‹¹Œ wUå6G À¤0×V«ÃËãŒÓ4÷Vg­HÂ}G`—¸¥ý7Äøñ±ûot¦ èa.Ðxô¬ýk\ê+¶ü-˜Q­N]=6£ ¯³Ïuq²€ÇÖoÕ«ªçLµ:»Y2Nû\Üéõ.kœ¶jØï:ü֩ݳ¼|ÝÄùþ}‚ÿÏÞÝÄ´yßÇæ/laÌ“ÚY–Œ¤ ­J6Åöð¼tò&âmH14aY¢$Rl´D 7S̤­±DΔGìP¥–š 5–—’KHé¡;5W:MÚm=­Ó¤÷¼ØŒy`Ÿ|?‡”ç±1ÂOÅÏ_ûyyuªS®ä¿q 0@Ç–&­¢ ]ûX ΧSÖÜ.^Þì¼b¹Ì1À€×)€ƒ­òx½ž ™Sƒ¸hÙô\ýƒoóWAÊí ­|¬R¯ ü/íë«nÎ ØÉ¶%g´5ñÜHÅË;0︎žec^£ö¿ ©ÓÕ1›-¹lú®¨p6É üêß*\âØ/_Ékžh+>ùöǯ.UÕ–þø{0`+\êˆà‘©D"“µI«,ë?›ú¸0Àt\y:ž:¼ê1Àu¼æ÷•Š–MÀÕ{ÜE+Ü—*ªœÎ¥kª+*.åä[ÕµÊWU+¾¿V¹gm~éÿ¿¶À¹A¼ö²Î\s0YË,öu/ƒ´!<£Ejy zð.dgrÁÒv‹0_Û `à‚k.u'±{‡ØX˜Àä\9ü<º—m € `LÀÕnwÛ @À˜>€ €™·ÀÀÌ[``@@@ÀÀÀ d``200 € € €™·0€¥‘©D&»l1‘ 3ØT8¸ïÄf8 LÜ̘çí5—}øæóÑClZ@ùpO£èh.,%g¬B6ÛË_m1>A SK“êtU5ho2¦SÚò c°¬æÞ¶- ÌØ¿N, àúF18Ÿ–«·#–‹cÏlz NDÆ `v*€¼"2ŸN§¼QÎÛj·ûƒÇ –¶[l[@Y°ò~³'´Àþ«jù&½ŽQy1ت…°ÜÁñ €^ÜŸ™Òdµ^GTÆþ!£ÎÛ¦¾š l[@9°òt<{ÊZààyÇ3uüv‰vm>k»BwÖr—,Ê4€—}¤ì€åsDÃ? VSßþ“l[@yðà\³´$€ë}žñÜ'Áíù V´´Šå“š@¯È£8fô³@ßq± 4 ¼ØP¦ðÒO€[ET;Xù$8x^ŒvŽLÀìDË÷†Ñ/ƒT}Årù-¶- ¬ØVÀòDöÌ)§â°64«;Dç¸Kä¿$€Ð7€{ê"FàcçìïïaÛLÀJéz¢c¼ê±¿-¹Ïƒ•]£K]—§€­°žÁùŒ6¥»Öþ˜”y®ßn6jïûyåïÙ´“°-Øe^k\=÷Uà¸ÐN‚å¿*êvÝX¹ÎMâ±^uMÿ À®°t·Nˆü©({|"ž ’3ÖÙ}Ø–L$é¼›•I,:¬ñ̘ºQhïAoÞ~÷=Kï^¶-À\ìàõÜóX¹ü‘O{‡úáX €N¬ û§}ÂUXXã±Ü1GF=äè“·k>ûò[`¢œ²zFå .ðÈË”×3› ·´ÀèÀÚ®Vý15€µËªDj6è¼­_°Øí\ `¢î¬SOö¬p{x邜 Xyãy\=$øg¹ëßµöwtÞ\0ÀLìïÚ—þ«âÍegáËxœ@×¶uZÏä½¢¡9¿âMƒpý™šÏ&>rW±}f àzŸÍ¯]þu7 €¾|W `yþv®ˆ”ÿ,Øh'ÁºhéýÛ`¦î)dïb k{@Ÿ/Ú%š`Û8®îqåïÊ]wPYÑæ2HìFËÙû0¬½í]ºË³ÿ¸5bÔëP¶ÜãS÷}–&­ŽÑÜ$vŒr`v&€%™zÂIù¿Ú¡¿ê%€¥NŸèPöÀJÆr×FR®Ò@ G· ÜVl`Ú'"êûÍÁVí‹àŒXyhcÌÛcçìïïaÛÊ9€•ÓN´k‹ÁùtʪÍaiÒ!/ „´,&€Ð#€åÞƒ×S!!"s…‚³é:ï6è¼u^±\æ`€¹Ø–œÑÖÄ'–Þ>8Wª `¶Àþ—!u¾:f³ù‰œuíâÏ[ïù¨yáIùžºxù è«ò·jö.îÔ(56ö÷¥·¹åÜÿm~:ˆPªn#aVy¾6üýö£_JW,[ß àžFÑÑ\Èß«Å'r+÷CÊräv¸løÝ‹ÚsÝv«ôíúÇù[Þý³ò´ß|Ñÿ£?Þz €Ë"€?lP^(lùÍâ°ÿIŸWŸç^($?ýéªyö¼ÛÖôq>€•wпøxíW9ëá‡7l’ò3µgâô`êk}Ý£Û ÒÞ°íÈÛ;÷óVþ¾ËŸâׄæÔ×q_Ûl›åžMz’«°Á¥ëߣRóac_xÓ6éQT™’Ôsbýß¿T }ÿÚo ®Àv=Ø¿N,°ÞÙô@ˆŒk}Ê+çÓ)ሆË4€O\û?Ÿøèƒ¡ôÁ•7þñïï(|¶â«ÿ¼•`m»žÜèã­ùø¸\øÑ39p»ž*…[YÀ¿“’/æçÂÿcï|c¢8ó8¾ÃlöÙàÖÙ]sjºZðäÎ;6V¶›C‰-«©[@Á?9ÉQÈ•zÍÕ×ÜQO×MÀR …šóE $WÔK)%h@µé‘¾ôÏÍõ…’^_™¦¦É=fvfžyvvfšžï q`æ7ó<›ýÍï3ßçy„’&˜žv{¦VCÛ—#ê‡Uȃ¢èôÊ dïù6`2tdú¤ú¢…;Ÿ¡½TP«×o °kŸ›‹‹+ãÇ{`îSòY4¥¾óšX÷kùE`ÛùÈž ŒûÆß”ó™·ßÐ_êñ¥3v€YŸ‡Mú¾sËö—nv¾ÒD8ø(ú v­tžƒ Ud-]¤üê±×ëpd³þ¶ü¡Ï÷´çÑ­µûžº0W~üÑ_:ZÝ•k-Æ3‹ÏÅÅÅÅÅx±pñ(+ž­päfA=ËÚú–/OÀV1y»YþÛBgTFdYÄœÆRášji¤ÜíäB¨ò§ÀîØÅò<Ÿ¡½Tªõ]‹3‘°yåÈÅÅe Juƒ- ¸*€­å€mç#[k¥WQüÀ“–ÚOõ>Þ·ð„.•Ìø<ì°ô,çÑK¯eÉ 7ߪ2ø¶!{¸JáÍ0éEÀ­å&c“¿úÆç»ûØw×ç»õƒ—0r‚³ëý±Ï-Æ3ÏÅÅÅÅÅxqp  „†• J< r•JW"¤{Aè<Ëè æþ¸€Ýž™ˆÔÚlò˜ßkå.Àq±r~+¶ÈžÏÐ^¹?‘½wè°ü£žOæâÊØòDÃlµO“~lØZ~ѰÝ|dG{GA¨„ô…`±ýºÔã+Ïç6¦`w†üçkA)ÀwËÈ6mÆÀ[³ÒÙ‰bÊ[º%g•ÉÇ&{]ßB†üÃ:´™à¼AÏï­Å3ÏÅÅÅÅÅxQ°8A£,¿€uÝk»!ãñ Í"À"´{XHÓzõSÚ~zðžn/݆ ?˜ˆuJ€¹¸æã`¼ ´%®Ê€­Ü(´¼p‚w‡úrÓüd¨Æã3u€ÝFœàÒC„w! ·8_ïCŽð x5¬šÂ-+oÌ;÷LæßVþê^þüŸ÷¾žÌG:7¾ÎŸôÊ¿ú" £E˜Ûgþ޶ÿ©ñòzÿš—   «M®áÔÃÇ€¿Ç‡'ØQÐøÜZ<Ãv|êd´ýI· o=_â®õfÇ],öþ‘W„\\\\K€Ñ"¾ WŠÓ§É;^•Ç{žœ>îøäú¿›5ì™JgsÕI<†÷gÄ3hà2‰/Hp3Š·$[𹏍|%&`ȸl0–ã? Ò¾AÞ¾4EË5«wĉKñ«þtÛk~~º¿±#á¹û»ÿÜ[¨€T¯›<=92?£½t,“¿|ÍÅ•ùã*idÈÙ™¶Lå#C¾2|ÿ5ùœÊ/†ü£Äw¼ƒã[Ý_½qì:<~}ÊʼáÀCÞ×·îÐå§ß€§PÚ«Ýq¼i0®_¼rúR¸ãƒûë¨þ³¸ ´€—)\å„ÿ…Œ§‡ª–]«r®Ì7Cè”áq]O~þ~D¼s„~µ<7‹·“𦫸/Æ^Ò«KÖå+V¼ uÓÎíÁø‹ôýÇZxDÀ‡§Œgˆÿ¢¼e¯?PFî—ê4€5ýg€7mVlÞœB§³ m£û³tvë¹H…sGÓ¼žK`mýüY/ùÍäk×­žS"ñ‚ÙÜvP8÷á}A¬]etl«Ìe<¾á¡ÏwwîÑ­¹o|¾ÿyUÎÛà9âr¤Žgˆÿܰß3ñåGñ«™CŒøfyì•¡þfÀ\\\\K€§FA|ó–n@¦ÅzÆ#RÍÔÉèt™ À} TñÝÉöéËC*+üËr€õñ@ r¦.FÛg"¸ © xºö'}‰©\†GüÚJ­-…âÊÕ itzG“tvƒÛ:# x[sl¬S­Rêý¸àtÁ¹¦VG;Ól¯}x¸ ”V=[Ä£"E1-îV Nôñ!çw¬Úd%Vëç3´—ê†Ð$»‘ö²äþ3—eyŽÃ„ØØºÊ“00`:ÑùÊøý×ås:¿Ðù‡Žowt1èöÓ>}ôm+̃š\Çj?üMëL$ÔòlGÀÔñ)ûÃpýd üèt§ºÀÚþ³ Àá 'Y+Ô’åt–¡!Ñex¬·ªáNòúXó À§îìÅ£¡!àºzfóg×ʆ° Àù³“ð/§’°ç¤8±ÚáøÍ¡ø„ѱMÀŽžGO×õ<ò½Üððñ~Å^ñb®gb•Ñ:ž!~A³§wüù³ƒBÝ*ÀíÍ¿DWʘ‹‹‹k)pøéµA¼H¶vë‚Rë ê0" ±ô<*·èW¬ÅüËp€©x†ŠªZ~™#VÜ jðæ@7{PòšjXùå× I¡ ¿ÖšÝv8éé@¸—>QМ3A뀊ã‘ðHQšíµ ¤ªÜÙbJ¼âQmQ‰» RhÁ†Œ†\Ëç£Û»7%£—XIg@ÍNÎ.\\ "X½~ŸUR \¬|d–Ýä™§š¯ ßc>׿CþaÄ·³?ö·á¿ßoe„PK½s×Ð~ÀÁš¨% 6oÈßFXýð~‰ç˜ÀO¤µ™Àºþ³ À ¦Ðyt(Ž–uù³‡*–uâéÀóÀ ²Ñ‹ÞU„w÷2U“o2v‹U—wù=`ÏÙ}Ót° A°ï¯Žåx³òàÀl%žnûùaÍZyÿû »ÿræâââZâ ¤®Aò$ª‹uʆ«2çÞà‡µ`ƒXå_†¬Çð/d+<µ‰½ê˜ûã_k‹“éíÛÿtcV2§Ë Ћm0×úh‘ŽÆ˜s×~ÑŸn{­IN8À@Ú†?ŠÚ„k¡`ôaÝ,f/¹Ü˜Á`‘Ù»ú1—’V”\\\6„šXP’$™Î¦ó¯Œßc>׿:ÿ°âÛÚ¿Ödª#áÃã2ä+ò¹ÞÑÕçV|[û| Bý¬"°ÀàJ€ QܸnTx<ÎoB¯fްY˜\DM°¶ÿÒ`Ðqýý­[.E6mV¸ôÐë}h'ç ÆÎ/²LçȞĜ`€åe².€‘ïKPU<âJÃF‘¿ý×{*WþbEä“©r±nupfd~`<…à!×`å¹>$ÂA<¦X…²ãéI¿x¼ï¨ò/ÃÖÅcù%nµàAáe0вŒD±—=TY¨kÒ Eäs&]‹Àh-Uÿ¼°©ãb·½–T<"˜0ž,u™ŒŸ‡U µ‰²¦ Ž8ŽÁŠʘ..®´UÜçžÂ‰¥L`êûH壔bås½£«Ï?¬ø¶ö¯@¨ zÈb²` a68Àò\hQdì /êØd° uýAÍ ŒJX¬ë¿t8ñùýŠ,‚UîÏB c…[b,Ç*ò&$ô$ˆ·^eD´Öžô&?\}p^®ø®#=Îöz]Z†¿É¾Yäy÷ÿìmlÇǽìÕ{ÂÖ¹¨´ÉY˜€…“œ()øzjM N›ÃMŒ 6ƨ®DTãH J©‹]Œrjm Y†ÈÜDUe[¤‘lYÈ ø #ŠUá¯|„JýÐVHùÒ™}ß¹Ù·»3qÍÿ'$ß.³³;cß3ÏŸ™g²À•UbûG:Zø`1&1£o~¤ `6Y÷R¦˜áe¶Ô—á@[ux,¹¨bûyy‚£˜ÆR¬#Êå'—Àå¹F€³o¯×ýyY  ‡¬‘/€é:]×Ìåù‹‹ÃºÃ-+uÒ™t =UÀ‡1 €ÜhŠ+“9"×øI—Øï'ó}{äCgÚsfM¯ÕþpëT^ëÕ}~.úH8I¬j2·ArTÈæõìT#ǰÝÞ6¤ät«ÆenØÖ¹àêõEýÊ6HãëÛšÕÑùß©@Ý é[ºðýR_\ðe@\¹“~2«¾‘lÁØøûŸ M›}ÕÇD€õˆ´0@Ûhå]¼Ø©§Rô°}; m ´¶×!`°ùnŸÐmHùŠ;ú%ì»ÿƒ–Uq>pþ¦@»E€·×DvÀÜØ]Gn*‘TåðffÒì[¥š ßÕý@.(¥ƒ@”—þÏ5,ºÚ£Ø´çLD×&hyõ,/„#7zR’¿´ñ%™Û•Àæõâ)¿`›½mŠg¾Vú/œT’>ËŸ¬ysÏ›Zz¬£Ò2`e'$}¤FøÌÝ`˜ÈPštêÝ-ÊÄcº7œ“ö_»x  €0][¶7lF€kjõ5Àv¿€ àX§$ßÚ©¿nW¯¾cÀj}oìôê*ú%_kb“U1«¿®àvÀnI°ò'€ƒ·×K2ýí#ÜO8ë²éR ûy `Ç÷ Äc?&@ÁõTûȲ²×­>«#@,ÖùÀ{îÑåÕ´|X"íCq—}êlú–!H×g¦‰?Xí¿0]ý›"²w}(4D¿T ÷/‹>³T¶¤î¤ªa%å•’ü9ˆ~÷xª˜ P5ûë!7üÜ¡üG¾êc³@×l€`'LFr¢ÇˆC¢Î¬£Ófõ,жµµÊÒ§úýRòJ•u°×Ë3õeÆmSj:¦îNuÍ•gVdf$Ó±é´{>4– ;0‘Ɖ&^sž1p ´硽÷gûÛ;<<(UŽ ×ò^Gdq?N{]pS\/ÜÔ  @nÔXV}òöµ j| `‹=w‰èrëZ^1*s1N†=·2•’W9i}`åúhö`# ´—Vû/{œxg Í|%%ö…^TñöPæ4é¼`ªu•iТ„¿Ø¬é_EûÀ¯7 ¿%?_Ü«èà×g"]¹MÞTª$¯òQŸýøÄSÕ󭿇`û]qVÛ8%Óí ÉaRUvŸ•ÇTÃܘîj˜8U^Ü+þGÅÙd«Mëõ©laþ¾önŸ8pÕ[¨¿#·¦Þ²î‹[á°/nÌ>[ô€/!(4""D¬%®T¹K´ú —C°°±¤ÍC{=îÏö·g˜xh/ÿ,,NÅåÊ‘pî÷ã´×+¬¾?Ñó­²E0“å¦}Ëœi,׳öˆ±WŽØjÏ]"ºaký>"Àaöyb!Í”DŒÅ8™öœ1äÛ>ÂŽí÷À¤´²Ï½5ìÒö¶!®ç6ˆÌ–: `­ÿ|`™¤X‹ó÷*¯<¿[tT[ ŠÓkŠ&¤eÀTôjq_Uù.Ý~¸TVöЧŽ\kþSj~LˆýN=~鈻9Ú2&¼ÍVoxá…¾‹[„îŸø«Ï~üÜ•häÆÜ~ÓÚr¿âwÀ¬ÐÉÏÇ:Ú j‚–øòùõ×›¥—¬e®”’ãÓO¾*Z¸úCÓ¸¢w| IDAT2©–&ù=þU[­üË›zh[}ª$"–è1¹zGÛ Tý ®9RÝtWûã~‡IºÄѳn YѳFbšUO°äÒ¢â~ O˜×7¤$3,ÒsD¢•’QÛ¼`ç0I0,HɤͯŒ6桽÷gûÛ)Lµv_äš”t\à~œöº àîýÄy%¿¡Èãff19 –%wôTpQë&8Ø#Û÷™µGŒ½ÊÀ<{nÚNDÔ¨[c°òô¸ûlz~zlgÇì«q#²k³çL’‘`†–Œ=>Äi¿ƒ6ûK¹>j»õG†½%†U>¿ØÕ>Û6ª¿!°ÖÏôŸ·–?Y2ØM‹N,\jÙ*:šÒׇN\ºt.:šZ\¨„{UqY°ñã»4ö[öÅmucàužX›ÅÞÝ©”*T{22õíÃÙ `ýO÷Z±¿ú˜ãï|®ý‰“¯A°mJ,'´abRÝZ°î^S\ - ++È`›°`‘”ÛÕ(èå“FŒ}€Õ õú‡@2ô6Y–Ïjа©f奷œ8ÂMÊ,Vô[S“#9ýÙ(}®”'u§/´,ÌÅ-ZyÝM>”dýͺÅ":ß1þt ´@§SÞjÌC{½îÏô7?¬´W™Ù7Ù¬(ê]–¸§½®˜^/÷Î/ŒJ®«Þ”Ô©û"'u#Cí 1(ºf˰G62ìc¯øS®e«=·Ú— ûc©[c°òŠÞo(Ac_w«=çňAímYèiÖ“hÙÚÏÀÖþÒ®?7g™RîÜ™ö6¶[Y‘KþÕ½—Y?3f#€ÕãsºÜM^ØCOü´‡£ó¦{ÝÕ3GŸy¸T¶ô÷Í4 =éKw̾ý=]Nïšîê¸q¶x].Xì˜}Ð_è³¾ŒãÞé®hÇl[ÿÆ`€¶:8ÉÞã÷ucøh_büç#Ô×Ò†úØã¹>9}y~zÄÀa±!®æé$åÓã3UÆ>Àrº/e­85'%ËüÛú¡æÄøÌNsßÚöëWã‰Þãcla3lIaÜ=×¼€{‚:µLqääù{Æ #7ã†Ã$~hñ OˆÆCe•Š+øbFû’éùŪ|´×ëþöþ.wÀäcµæ×ÔJuïå|?N{ÝpxrNuìêf Èb MevPÏ*W¢¾³|c‹ƒ=bæ ³öˆ±W<l·çVA›iŒú¹Ø¥¼ú<±×GûRrz|úž=ç)àa%*Ëu{9íwÀ–þÒ®7£ÌnýÁ±·âž>9q¹ÅènkýÌxès °M§/Ÿ>}úªUí&È™Ñ8·t¾…µkM9¼±`òá}ídñZï r¡vÍJ`]!?€¦#v}Û9çma"Ì9e.¾5Î –¢È®y²OÜ+š±ÕFËŸÒò!‹ô@ToÂuúb'mKÀ"³E¿Úºh<¿ØÚsnë¢=KJù}–À«6rS]éìDý‰­¥=SÛ­rj¯×ýíýíð+äbÞî':u-¯oÈ/ìÜŽûUÐ/ä&€E§oyؾá‘Û÷“±GöÊÁë{᫼þ<êÌdÑ6Þ˜öœo ºÉ°~,Ì>‰öëw< gÙêcsÌx˜…\À)ìå’äW‡9ÁÎX§TéÏË+&¤ä­ÆmLýMq—œÇáîÝ)©úÐòzª9´w5"„EÈV v{$®°ç ±çš`ÎiL##ˆõý`ÞúX9xÙpÀ†cñxZÛSi*ž¼â×ež¤Þ}cQ¿Ñ}RþkÔ1ÙVkY_¶Ü!›¬Ú «ßù{7{¾Â €ÅSrï¾']³CqËš5oEû*]ñ´É§jœ“+¦ôVÐŒ^‰[O+›e{`ÕÛ#_ÏãfÏ!€!€€•.€ÃSzîù| ¬ØÞ6ÚçS ‰wnEz|ûØÓ }dÙ^XõöÈÇó¸Ús```Å àpý+=­©d¯CŠRg lÇμU•;Y¶V½=òñ<öøz°­ †EAXÆ ìÊÊ·´üí€ÿO{äý<«(0ðl `à™Xã-°ü@À00 @c@ €` È0 @CÀ0Æ[`Å`9ýÙéÓWSOo@>óïGÿ-¶yÿ_ÿyôüóþñÚŠìÕoþó/Ô>®;ü Êÿì~ÅK»ª„È/ð Ï”.ÙðâÞ¯K\Vv; ÚTû{gÛÄyÇñsì\,㘳%e¹·åE¼”Q!tÍ ‹`*+ee@9uÖj[E!Ø€%1 mË€¾0¡Ž©ÔRµZ`†RFÍ6cóÇÖ)ۤɕ¨Uø£ª¦©•vÏóÜÏöÙçįßOÕÖŸÇç,}ý¹çy~Ïw­GÕ¿û§>ßÎíŸMÉÒªA€¹Û±dº®¿'k ݇Ìû‹/ÀâµÞšRü÷ /cWi~-Êåoò#ùÂuµKêã¼Ø5è#ß~ ÀÎI1ó¶}´tœãÙÌþÒåà…Ó½V²µÏ*Šs5²¥Oëj<#@€sà(vÞV@€ÒžºÖ9½ To¹8}´¸ó–;`3fÑ»Ðiýe©JùIÚ–àRðãåà‰-î+ø08§9oË/À®7mËšr´€Ê p]+I]=pÛÖ:žWw"=åXq(£¿èøœV»J©I¥ðø\Û¾oçöÏö³—LXà\)¸úמh·=úc“vÎwIòÏ-ú W¿ôÓ«Wÿ¹‰¶÷Ñ¢WG‡%Àcרw`ÿ/@€s.η˜?Âqc†b¡èbíMⱟУ>¡tûC±¡p³Q€!h±éø@<ÊÚª)÷Æ•—GÃ|V&E·_¢:^ׄØó˜ïNvy× íGÆüÎhçÌo ,\—&À£4^îЖW€yž0O0}ÅÌ·Úéw‰½ï Z€Ö_î"Ïèll› ßž?ó)qÞEïž:v­Oý œ;MXŽS] 1•Ì^u¡ iíˆA€uÿÍŸˆiípJTÊ"À3.ØÈŸåÔ|£óª{DñI%íD&Æim«ü* À3f96°ç¾1ÇA7—X€9Q– ÖX?ɛ娢úAŸûÌõ_°í=­èåö½KŽîÒØØ6ãš×›ïž\E€þ®ö¿mýëºÚñ4ÏÅ©û†)ÀÉ»ã À#à¸?éQ,7Doª&”á&i|BZâ¿Ñžñ SâQƒ'çÓÇ•žH“Ô Œ«ý±ž†Þ8óg~víµ—ŽüÝf_Ù9|ÿ§]õ”Þ¶Ìo ÜúƒÁš÷TCÛ\Ræ<œQ€V<­Ë}PâȲbÛX€nïzí.Íš§´Í”[à|³öŽçj¯Ö¾? ÷ïõÃÇW€]ùî¸0Vþiâdyˆ™m69N 2¡%ÓÃäyYùWÐX÷_!m<ˆúC«UÖ®§äª,ÅUÁN`wŸýŒÒ1õ‡¶¹=™3À–l•ß@¸î‘9Žîã­ý'kΞ,s)Ì‹‚¶XÄ̱Øî¤5<ŠT®fê$ùià”¶É2ÓÁë^#«Í¸ö}*¾/Ô¾80B¾ÿUö À#`¨™cfe¾ËRK`Åc£ÆÇT€“ó¿ãÚÖ_&Àz?ŸHî)N`§ý É2Ï >÷æ{€ŸLÛókl[æ7P ®[:ÇAyéWË+!À=¦7{¬‰«´zR }t • &íoÍùæ|“¶ âµÃà_fï·Žn¾×ï9ï›û=|\ 3AU)¦ËþË%g€iUŸ‰ÿUë0§ ùcR&Àz›¼0b*À˦Ðñ“kÚd°…[æ7P®Ûóá{gŸ=Þ1cV…8gèi]ú’*§ûq Ú쪇3i›¡°®º¼—ËD€5Ù¡“Ø~ê.|\è`55£þo8åˆ -™ÁmJࡤÿfŒW´W½ž*ÀzE,&ó¾„×'ÙŸæ‡=l™ß@eX£íî²Áâ†7¼°Ý¾ýêä•‚a@z;‹ç»%—ƒT¨»ÏáÞ6@€‹%Àt.W_¨,éÌVH8¢/€æ„´ñ‚.Äê 0)‰Ó0`íàÉ“ì¿þhËü*+ÀKÇÚ_3ÀÚè,›O ¯¤Ý—ˆ%`—¸í ¾{0 àâ0›»Mh[zU&3À‹Ó˜.nÖG¥ŒO®˜V8f˜÷õäà…÷‘Gº»Þ´å7l‘ß@E¸õáVºêöä `Wð«¯4¶Ü\ f¾j[‰"X.ŠSMÎ袬ª³Ù`™mDHJŸœ°ªÒlauvtV´–±êl¡ ™I0;óÜœ;¿€Š pÛZÇÕ7÷¹‹/oÛºùs{F(À·nx¿äóûÙ² °(Š),ŸÈ0ëõ©_ @€­ò8S€£M ‰¨ŸgDL6ŽÇü~ÕˆéÚæXxטžx4¢ 05àŸ9ž´CáxÔJ0&sıpsCo|(u-µ&Àî÷6ëøð„­ñ yÿ ëm—Žo>a_y9¯"X–ù ”C€G¿RãÐy€´GmùÑÍ:Fmè0ë/‘´YàÜ3ÀÜÌ·ÚÙ— û©)#àÀÞœï`-Àµ„£I¦í¥l»†Þ&Îê¿y›<¦(BãF Fi+ÖGËÄu“Ç©,qáÌñuth5+‚Å ²bÂŒP™Ó?‡Í¶÷ç4ÑøÉ-ôD£3ãó«m™ß@e˜µ·\쨫çžVµÿ|ŸoçÝû%nd¬¶÷fž¡[ž¸Ê}F€&À!ÅCÑŽ%˜ˆÇü±H3™ù²•Ç ‘QÑpsR€9>£øôñ2i‡Ô*ÐÊ¡7¢ õHŸE€w~ðmí`?¾í|ßÎsÏ ž|Ø"¿€rpfïyc÷îÝowä·[©4?¶É^\¾ÀË‹ò­¯‹P”YÌ{ä´®ÆÓø0Àm'ÀöG»LÎày0SÄ XR+’õØ”9Îà®.ÚÍK<{d2ޣȴÔêCË2y½ äÐRž7;")O Îo ø<Ì@þŸ„Ëû~ìÈD·™“%ÃÎ’ p±ˆëgÃS@€ÿ¸Üt¶8O±_n/vV©KÁ[ %cÚ j .õƒ>Z)ä ü*\3À (Ò3^ê‡ü!œÔ ."ÿ»ÏpÕpP¯*MŽ Àà¢âE,1p•°0Š…ü¡hXÂß0¨æ¸ê/›Á ¬j4†U&À€ð_öÎæ¥­¥ãr"$$ âÑ'<Ä  Í øÈ…JQŸl¬Úl³)ØM©æZ‚B —>Õ…/½Ïæº(Ýz]¹ëåù»ž™ó’œó›9g’ZéÉé÷³h=3gæ7#ã'gf@€ À @€0&d @€1!` 0 À˜o€èðÈñ§££Ï«žôÇ££Ÿ#?!Š¥Gaé@æ¯Ú%œ¯ë㤞öûœ9ý¯ÁÞö‚ûåq¥—A˜<Ý]2Jí­×éûëïñbêy?eõ{=?½ÿsêÿî]€e¾\€y¶üKgú½±pÿÒNÿ½d¥ ÷Q“ÛFíAHÚÕâ&sÙ™rÕ•-OŽÏúp71ò¶÷>ÊZ{d}zàì•aÈYuúŽþöÕ¿¡½Óõ@€ûà™o€Áà… “u˜Ëpéöz×d›o-Þ`©öÿ®¯Ï›¾Œô„\­ø}¦ƒ¸PLŒ:?ÎŒÍå#-ÀßV=o<í½ò£ÖÞYŸ^8¹m”¶^üùê͇Ieú®þöÕ¿¡½Óõ@€{àÁ™o€AàÅ/g¬´Ôàj‘-¿°=x_ü?rqbý·¸]fµ(OÈó­Ôz"$íàƒ1ç[‰ì¾+ 1`Ú^ð`^ o¨Òô]!ý  ª<(ó-0È<ò_ƒíÞ0æÉgÖWu“Øß±Ÿ¯uŸGqB®—N†¥½¬±‹¸ pœ…s¸Qö¯U éû¬?€èððÈð`Ì·À` pûë/#æÓ®ó¹ó\Ñ?/´ØÃOÈãÅÒÓ°4QΜ¾-Ù4 àgà™o€àáEkã‘+ÀÕ&û½3oz7!ñŸDwIV'`ÉükÑÚ¼"ÀÉãë¥r{ë}àÍÎÌT{Épx'K·'¯òg®Åå/O.G•"Ï#y¼»ÔÍ@ËÓ †÷~Éó²³ÿ3}eˆçŠr{¥ú|wIŸîò Ýž\ŠI¯°Ã„¸g™9ñ¢ñµÈy2£¬®?|ùñ ‹W!¿3•½Xz÷~ˆÿ{ûÞXÑ€öÉ„"þsyÖY­\h*Üæï qÝpÚ—Ù6NxëOÒþöÊñó^ºa îª}“jå0¡߲ІÇGw½®¿tãÛ›_Š/¿ÄN€£=ß.ÀÃD€S®¯1÷KË“¯ŒégÑ{<ë[8+Îãl¼J&ùÅtÕ²„$sZ±S›Oªüɺ{¹r‰¶„yû`»þò¸þtQ+¾ÿ~ÙÃzž©›ÖÿR{¾úôP~ß,ìÚg3ËÊ„À¥íÙG㛾p+Ä…HQ]øòËñ —0quÍ:ˆ™ßPëžÝ€å×r|’Û†{”ÚP½¼<£`O~Y€3™¤Þ ÇÖA’¦í•âçsÿsñ¹O¦nXÜ(¯Óþ–⩉O×ëúK3¾ýù¥øëû€ø pÄç[ Vöêͧ“ µÿ¾bì|}Áÿì?•ÊÓ *½_¡h™Æã<³ŸÓöúësÌ+°y"Î4>:søKyóäÙG;^´¾éí2[æZ½0”B¥ë~9žáñâvdníO>ZÿÎa}»Æö¿~¼1Äý¥ú<®¸#m~M5æH~I€ç[Ýòĸ¤i9>$~~bç{úб‡܆Å0ö÷·Jh;ñ©ö$Àþëuý¥ßþüRüµý @ü8âó-/^\aö!X -ñ¦sAÝLm­FwB®›þ]“4MØôЯaœ3S룶ß(…›¥ý(×ÞÌeÃzÒ—Ø»±_¾Jó7Ê›Â[Æü|¼ÈÚåw“Ö"n‘Ÿ–—ÉdÄÓL÷ !Þ/‘3¹ ñbºœ}íµë“L8õÑ–ß÷g+âI¥Uz&a+UÛ\¶ÛúòêÖ&º‚(ÕG×$?§&^…üæÒÁè\eúì`ôqegŠ×2õÒØšàñ_cÓ³r}ÒWÆ“×CÝþ—ØŸ?D€SD€­´Ô^??UQçñb[,€Hn8xû›Öߟ'3ŠÏwt×ëúK3¾I~)þÚþ võùˆ—7*lÿÃêâéq{Óà‘ú’z>ŽÈ„Üó XCÞ÷wN' `î¶7eøèSrqÉ ÃYÊi P£ìÞºaŠ-¡RþîAìA£,þþ§å iöXÊõMž—ÙÁ¶±Óµ%"À´>ßw°˜„¿‚lvÈ8ZßlË5õÎY_}týAóÓxjâUÈ‹ÏÆ›Örܦ%ÀnþzÙ©†?>ÕJjÝ*A£ù{€“tϯ7-µ—ÄŸ&ÿfÕÜZãc%Ûrn@Æ7ÙÓë‰zxèõºþÒo’_Š¿®¿ˆG}¾â&ÀÃugËé»7¡¹ÌÇј{?«vÝÊÅ9?·8¹á$þÔ?LÈùù7J!úð\ûößù¹òô¬\žN0õÍ®¼±žó™|í•ë£àŒK@Zê¿wr£±{ïZœëEëË}òùPˆPéúƒæ'ñÔÅ‹ غÐH±šÙ`çÁqµÂT@d¹¡ÍX)?Ø ùû`©½$~„ùµÔS±ôyÛ8/:Åh84>ºëuý¥ß4¿];Žø| ÄO€‡ÿ>+—n?¬Î]ž£1!Wɳ°j%ä…DŠ× … pÎìîiTý]Ÿ3]¡±X<ÐräeÞúRÊŸ9Íó¯nßþ'PÖ;åÍÊåéCU_áü‡Ú+×'\€» ØbKÓO:ì~:!œ™Ö·n¸¦*]Ðü$žºxòâ"ë9ª+Àî]æòNI$>9ëÉ|¦®^aMó÷+ÀR{Iüü§ëé•éÙFyyf®RíE€C㣻^×_šñMóKñ×õ7qà¨Ï·@ ¸ó†¼sVÈ|‰ ¹°¾A€Ë¬ýÒåQ˜pYìÙ©h«Ÿœ?±÷éL<ÞšT ‚ûDÌ©<­+ê+ö•Ö&‚Ú+Õç» °´uÓzO`}=;Q8¼?¤ü$žºx‰Sˆ…€‰¬Ž»Âú¸¢^‚Îû…«¯ú¬!)ßLÛKâGÈl‡âÉo¡Yz”3… px|4×kûK3¾i~)þºß?b&ÀQŸo€8 pÝL½µŽƒnÏÇ‘˜¦ÿõ34}76Ãןw¸QV?–ó'ÓÇ»¦³“S#ßðXú¡ØÌì“„Ôí%õù®{€»{<Ø_ßî’oYõàÐÊIùµì//D€;Ïúi|¬ÍÙ9S½ƒ–æï¤»íÓ<&í `®‘µSó ‘]aëuãùн °®¿tLòËlâ¹/ø™8òó-c^Ü0¬ó ÖØ»_†#îŒ/2¾}õïA€C¯×ö—f|“üRüuý @œ8òó- á,þŸ½³ýŠâºãøÎî°îÙe—=lˆ4nQô€ '-Q8"šDÓúü€­Tƒ&€bO ˆJZ‰UL[mÑŠ4cµÝ#£ñÀ›¾Á¼È y£ÿAßôÎÓîòV­ IDAT<íÎ ³ ßÏ à²3÷þæ7sæîgîF€Éo¦ÜVÉöÃgs\ü@pÅÒèë“W sêe½ìóùìb&egˆï[]]ë{N\i߯:‚h¥K.^i§ÒǾØ2»ˆ.éèihä'ËÖOÞ»®¢£Ûç+=“¨¨BHäõ±£œ®Šn_ißšéËÚs®æ†‰UßÇ+Þ^•x"×o˜Ì´««£²r ³]í!N²xIl®®¦tº¾Ix/­4ý!__Sð¤õ©°ëX·¯¡¯ÎÞe“Ïê:Ü §|}÷Y:ûXå•tzÙu},ß^ &Ç?{|“J‚SìeÇ·$~qyÍý¥}G¼¾R€5ö7fàhïoSpÜ9kè=#˘²«n¨³¦ˆæŸÄQ¸#ô1;$eò†Ä’C‘Ê:˜!øߌt¶Ìé%ŸÉá6ߪV³³v{mò¡Ùœ;Ûø)¯{Ç®²>!áªc† !QÔÇMŸePê–¶W¸„÷Ú¬ÐmÀâíU‹'rýF±çZE/^Vœ,¿…\òë& ï}•ÆyØeëk ž¤>þ£Vä'a±ú#°Y–­¿œÏU‘¤ï)ЊíÕ`æB;}aCNð8—ßâøupäå5÷—Æñ-]_)Àû“ pT÷·€I˜+×Ý- rí tèM^ž¶8›;‹¬Ù·®÷ª‡ðuQöí¯…`ò¦öD²xðÛºt}wsÓPQŽ«îöÉT‹VÖGêè«)Ê® ¸½ÚµÁÍÈLç'SK·W-žÈõ†©ÎšýáÑõ)¼²ü0ù<™ÄÜ-»K5ý!]_‡à‰ëSຢÒøyKøü»ÃO;àX¼~>¼è`ùñY€IµÜ@©(}òã[¿޼¼æþÒ8¾%ë«°Öþ ¬4âæ¾¦¦¦Òiºø‘·Ï™Qâ‘òr4b÷9_¼Æì?`<X¿E¨ÊçÑ·¬ýŶ×nŸÈ½zQ„x–/10X>±ñ½¤ã'Âòѵ¿ˆ6¶mªoŸ«ÿ=ÀQÜßfàÉÕ!{|NO¤2?„KpŸµJt ‚(€`v®NÄã™aØ À˜A€K{|'¾NtíÂ4^€`fö¼Ï<2NxQ-@€0fàÏ]u1þ €`LQ_§i@€0†`Œþ€`ô·€ @€0€`tÈ€£C À€8®ùJSÓ@©P,`ŠCåèêÓæ¦¼©½”ûú£ÖøƒÏDÉ~‘ÇórãKîë:º>Uïò wë5ØF~Í£Ö™s˜¿ŽÇÄ|ow_ŠyãOÜ'ò²ñ|‰âñg¾WƾÝÇŸ~f¬jüW×yœ¹0Ïœ3c•nÖîoËǽ/yCBçsÀ,¼!.YÔßA+M¨ïàŠçŠh–uwK'­gíd5É‘÷‰áú«ã…úgmÖ£YYŸ“vl¿Ú¿TS[3´4â sk^3ÔFVû½ùû翊ù¯Åùï˜?ÿûL^ÖS4?¢xœQ(ÀšùŒx±aÙ9)÷¦ãÜÀ`ýí©€ß¿mÂBô”=h1p>Ì!ÀùgéξÝY“H¯;É^^I× u2e×±É*ÀîËñ)÷:ztïÁ«ã»§`–MoêÇP|/*À¤1Ç‘§ý/xAÿ­y±¿Ž¸Êò·m§i#ó å¸ÐµÞËí¡}1´x¶Æüí=‹jYWÈ’üˆãqú|>²Ñ$ÀšùŒˆ³¹æe»±'/¦œëéoúG’&.ÆÃÃþÇÎ瀸àz;]àÂÅtI%çÁõÌ︾v ¸-Þ_9Iø­y¶Ó¤óvާ~"À)ïà5ç{š÷öGX5ã1߬Ͷ{8|öqlÐÂ*Û–C¬VžHÕ)lž†JCß}È÷¥ØÐæ¬}Ìdçã1_t«—µ‘çGÏ,3 0ÙÎÚþb €©'Àzú[{ùœÔ‰ ÑsJK€¥çsÀwÎJ×üÒÊ 0)î_Ïþµ:‘þHº\öÉI*ÀÕÅã˜û`~¾­~fwn?ò¥Îx Åǰ}üùrî¡„Æìö‰6E vR)7C†šñ»7þÂL|þC’zYÇ>ÐÈÉØbqßϵmLÂé €)&À?B«5,;Ÿ¦ົ‹â‚œ¿–^Æ}¹84-šâ×$`çUj͸ï^ªŽ·Q±ŸŽC€ÓzÃi<cñ½ 'ÿLq?ï °§º8ötj¨üú%ænß´}ÿLU/k;»V~L'Àì¤ïopú`Š ðKìo5F€åçsÀ<­€±à î ù[ò÷Òë:$W¤_}­Ì<$¸ñ;±÷¯‚x¶ÆÏ\Á Ôej÷¸'pUÇç}GÍ\ `gÛZ6>;I4Ô¹“µÑ´^¶Ñ´Þ^A€- «R¾Ô¢ªŸ3Ö^gÛŽkÅԦߨ°üs‹%ðZîÁ¯JÎsn8[m륖,òó§D­vRò[‡¥Â&«/ƒýæfû@hrÆÛ¶O¹|? >é©™Y˜¹ë™m?c»c·X±Ý—¾x™øü½W½¬-ÀâüÈãQ`IþTâ%ŸsñÎ_¡Ì"ÿ?Y>ùÙÛü¥‹ØoÔ–Wk/¡ì.Ú&·‡ëoËGý #üÉâð°¿¥üùH ÅÂý´alö•Ñ‘Àð >†ò±á€dt›Pò¼–ßüþB‘X~>Ì ÀÓd,<{#­ä1³Óée¥Q*À™wØÇßX*N;/œŸo(a|<¿³7–ñ-A€³ú‹Ùï2Gnz-ž«Ô–TÆmm§í̲„F€¯Rlóšñ(â×Ï ©û~•CL5îü¬×a³1¥_Ø9ÞI²³±ù¹%‰yoíV’xí[’”õ© píöÑËyïpþF¶9‚í{ާ|+Π§ùÙ²ä‹Â”5åG[€¥ùSÆ›L>çâåX’Eþò|º÷¯7pW@äÇk˜öìÕ¹±`Š p¸þVE€Ÿ“r`:÷“`⸠öÙÎÞS#~öÕIV€Ÿsÿ{`áå¨y®â|˜O€3Ó|¼„æoŽ‹+h>³„{6V4 ðGeÔ…®Î'{Û¤|Äõõ² Œkê0àmÜ )/ÀîËñ±·ö´Ý¡˜{|«‹‰îº‰<ížNœ—, pÚ<Öš5ãQÄ'­ŸÒûÅGJ.ž­ +ÀâÏö:.ë.½þuä[V€kªž>¡fÖä>{Ï<÷9£Œ²ÝXY€Eõÿôel—ðÍ;T^×Åþ\ÇÆTÖs*Î÷œ¸_̶Ÿõ9¥úÎ$ŸF9 òüÈãQ°,ŠxÉç¶ǺNôSœËò#Ï¿±ãO‘Ï´¹B¬ eÌUùñ®½„íÜîL)Öèo½^"Á"&R<e^ŽÄ0QÜÇ-£¬[,Ä^K}…”Ùq^F€ŸüÃ-D‚eìW;o‡;Ÿ&à‚•4÷¬ü½Vš»¸p1ûZ£j¯%ŒŽmµÝšÎÌÔ¢òZ”#®!ÀDbN{^XÅÝ•PFCIë%nò~Hï’[lê`Ù³õyÝ3tM15 €+£™ÝSÚâþMÀ¬ÿX{×è‹kufüÃùßáóÇù3ÜCEŽ¢aóù)û˼A Ð àÉæ[sS/¡\ôzc­–Ê|¬¬lý?¨/ðE¯F5&ä«pº5À0@ h6pÎúådþÍ>uØØ:guÛ…¦e–9Yn`ñô— Ò°Xs›Æ[í QNd Wâ:GùuÞwüÛ¼ww‰5¡yë,wݶŒ§`¦}¤i«–¿¸Ê€“~¯Äpb¯Žª5jQ)Ưyñ_ñ‹¶h„%­ŸeQi–`S<o•ö͇(öRF§sóS`Ö¬½%=tOo€ÿpþwøüYøSßC¸•=?e%Åž0€@³ €ÓÏ·fF/qHXM0å%ôjTÓ°@âÆƒ! À„w;ï·Ó'à'0žƒ@ äBÎi»õɲ¥Wϯ«Xb0ž“εڕìÃO/Ymé0ŒSÀRkö]kwR7$Öx"ÎñÅ<¿›¿vÅÑoôׄ´èu®GiàÑi˜iŸ©žë7ž¬I©³k>“õ¶ÖÔ¡—E¥˜úæmÄ_b $ßîbQÞ´*›úãX]Á)¼•‘BíÀ•¾Œ§î:`ÖŒ½è.¬h70ãÎÿŸ?Ο8Çù¹ý$òÌžŸ²¿ zÍJN3ßšx„°íˆ`ðý$6Æ+~µÝäñËEôMãZ%øIø Œç ¹€T¬—µM°rôÕÁ/nvs`2s ÀiDguÖP®ŒzZþ¨ë ¼T³G~‹¶¾Ž bÑ6ÁR”;jt ÀLûZY¢dÚ³*ƒ”`Ã:_‘%È®RšŒÃ FªÒ6a²,ƒdöÀtà¥@©ÜÀ¬ÿ{Q[Z„\`Æ?œÿ><¯ù ']ç×Q›ÙóSö ÍZžl¾5¯n'o´óŒ#Àõj\ö†^)YÇ€A lhýÜÜ#¦ã,ó±Û¸2‚_À©×!JÀñdS°ÒèÚ¡E€M5g…?¶mØ'-^ë9¾ ®1ê#îÁåmØÃD€Íí;`>œ€ñ¦KZ,t:œôý¨1ê†hÖ¬½1mÉ-¶Ü €9ÿ;|þx¦‹±Ã ÔOìù)ûƒhhöð$ómܓտÖ`óø)Ð NüúgY¿5ýzý²ÜÏ] À ­¸jÐÝØ(Û[,UÕžk¥Ú`S`.ܰ`½ïï ÔÇðN€íÛî6þœ0¿8KͲ©°B#À}.úý¨|»è†M°Xÿ1ö*1½.ï†-²sþwøüYp~¸iQL$E˜¸óSö›Ï€@³€Sηö˜¬þU­Ö›X‚M°@ œÈ€þ…y Òœ3Yo}êbÞ€ÀP5ªõ ÍCb&Ø¿-àÕwíÝ´Ð_µts¥ä§À>Š¢6ìaw6µï€ù] S°Žhßlª¶$ÇE€‘pÜ]wL”§\)þë¥ 0ë?>bM·š*¯-˜óûØçó'N¶Žz÷”j§±ç[ö'@$hVð$ó­-FG˜w­vf#Àãx·¬T‚2H šM¼òGÌüûê’l>MÚ=Œ€†Ã¼jÂåCÞÑé`%Õ&X©¯+ku€=ûBôô÷>DïW{Hª3‚2B2—“Õ¸6ì13í;`®p*öÉËÆºaEœF€…Þb_vs,ÐBR ‘ÄM‹œÝÃÎoòò¾U3À¬ÿX{+#|±Cb+ŽÀòþaýŸÆ>öùãüIï‰Gw w¾Eôe;eˆA гÀ“Ì·6ÖãÅ¿´Ø‘VþWáç¸ÀØËjŒ›Âx@ ûxÒj Àè'>>HŠ/¬<±,w™‡‡/“8pÛ³–qe$ï—¿:»îV¿Xx—ð[L,¼}¾©ßSs'ƒ›`‘0`ßÅ€÷ÚÍÓ{ßkšÀ@…€—)ê„ à…Áàá¥b×›öì13í;`!Ü#w:½÷Ïb×_ðÊ—ï8MºÙÝã©ÑÀ«/ིùìá[ÿÛ™€ƒAÉÀZxþZÑó—š&ÄúÝ´0r”ƒ¶«òòòv:`ÀÑqÐʬ½ùu¢÷ÚGýb÷@wæ˜õûØçó§@Òd­D¾EX•Y@³€íÌ·8RU5.,(xÎ}wødÓkÙ¹;ÈDüÂËÙo Ÿ<Ù47{é¡wÖÆÅ®?i]*)%e®<¿-£LȉÄ_ŠÒ/3¤’.jœ¾]%`jÔ– ¿TíÙÛÛw À’ïhýxíO% €•$ÀCßļ7–þþµþD$!H¤¥‹S01‡d±U¡ªš|xë+áH-¸òír½£Ÿæ·N8a`b¾¨0ûµW»r÷Kᆮ/xÿpþOcûüqþ$5¨–õà;>ןö´YfFƒ@ g€íÌ·€±pØ €5Ý‘“CÇôwîãÇ"Lö‡&²`Éñx@ ÐL`züîMºxåo–‘ãÜ«—sÜ À­7^×iNzõzGëµCª?ÃŒ×ÔÒD[åàõŽ@ë=Gð7 \Xö L1iQö´ÞxxD²iwœÜ¾ã° T ôGZoüðeC&¹øR¥³Â+çmܺ×ÑÚòth€µˆª 4/Á×*£Ôþƨ÷xȉã”A6û·· ßô†Y¥ˆ›ýŸÆ>îùcýI>oîÜ‚[O:Ÿë„… ! Í6¶3ߦàAD¼ƒ£ízB³ÚùÑÁ²±q}ù ÀBüñ8úØèˆå¨í|<@ ÈõÌqÛ…ýû÷_Öö¿šƒ¦d||þ°õÙ.¹NIüßYg~i¦µŸìIiÛ?<<|ó´éŒàÔûÔNÓºº¸ƒÅ1‘F¿í›×ùuÞ;OÑþÉ?ŸÞ>îù3û³¤Ø(%B×›Îçíõ݉èEšA ÐÌ`OížOŠí°ýùVU}]’ ­*ª6Ž%vN Ðè,¿ª£ŒÊít¡øÕÔc¦êx<@ hæ°3‹gžTéIü±Àë5f«øJ,¼í(æþà‘ÅÜ.Òôì›Ó—['×N­æKQ9)Í`ÆKdÇeÒη–ÌjÀD~ÿÔ}çã9@À gWþ3ïS´“¼FñŸª¯D¹ûÔfÕn+ñoòþ­ºø*§gŸr'²â'‚]VÚšúEð/ôì°üXpÀ²î(€€€·ºO}zvï…%‘ä­Rš/EÈÒ7{<øWÞßÜ`˜†}‡Oïm»ñìp9ÞS â- 00@À ×ImlГü¶š‚–+›îuØ`ü?yÿu1ðMÇ>\K–“÷IÀJ~u˵SçàÁ€Ÿ:Oa<@ ôŒKj¾u¯#ÚÚòðsuÊmt~ìîkœº}J_ÄÛòÏdרX¬øá±€]À ƒ žv þ »¯pöIð|€@ÀßÇáÿìÝmLwÀñv2À°Ã´{Å’zk…øX‘p¸^/­õb£ÕkiìèÆ'R#&J¯M*w¶ (Å*­m¥€/Jµõ…Úª±JîÒË…ô.!!D„"ö‘•ÞåBÊåæawÙew-­Î2[¿Ÿ&Â2ãnëNòë×™ý € `~ùLý@ðP0 € € € ```200ÀÀÀÌ[œÀ9u_8p¶"1ywnÆ›ºz¸pªû*¦­÷÷ªÞþõöïR²¶r„l àG{ä÷Ž àFQrgwˆ¾6ãÑìšösö?9òùpnoxÂõlq(/¤ºtû‡ï1k™k•]¬Ëzß3µÝý$€¥Ï­W%€Î `Ûæ­ ”kâ5Aê­ðB/èï¯þÙÏ€S¸äƒ|×Dë1¼äÊG¯å»Ö Ûe­Ë¦,©jíé)Ëßšâþ~ݱïî3€×Ì͸x䤪º9BN `ûæ­‘¼b« W‰gª§Àkj|ŸýìçÀ™\úå{®%O‡xåb׳;¬Þ¿#´OKª}YW´3kóT÷UeᾸü©_=ÇÁpZÛ:o jŒ‹“Åó'ì àÈçÀ‘œ£ÏÚýg×¥X¸çó»Ê|×ëÁ*ó3óí àŸ¤÷Àúë]âà8-€m· Œž-ךgØÀ‘Ï€Cxï7Å9¡.Y¼ ‡ÎܾËÎnÌò%Ð$€ æf}ËÁpXÛ;oË:Œä]s¹ÐžŽ|~Àé¥F‡xå+®Ã!ír­·ÖÁ*Yúëwí `éÕ”msî±½çæˆ226Ï'€{nèÛÆÆ ãì%oSÚ|þଶyÞfwœ¯6.Tò„Ø{t¸»·¿IxÊøo@Á!k!çÉ,mîöu»YªìÕ|ݽƒmîÏ€38}Rg­Ãa}›stéžã%vpÙ¦Œñ§¥ÿ–µð³òO¬ö޶w͉³tqoIÙ6“£श{ÞÊuûTAðî+‚¼°C4\?¡×k§Øøì®T%67y­M–Ëæ@]Ô§éßûÄv+x¥FÍÜè¯Æx~’!€.vm݈Áúð¬ezÛÀü!íÏ÷ìß;+šŽÝU”çb°þ k¼Éß4úÃØÌ8ûGÿ?@Uî£ÏptœÀöÏ[“*ø‹ñv‹^ºCã±/p 8¯Al¢8»Oô ×Ö‹gÌsÀkjÄÛmµµ¥õë† cS ûZÝúÏõ>2N7jVû™·¬œ¾a™kÿ§¥õR¯\0fpéºTãvH¶dïoR^Š×ªþ»Jדæw£ŠòrT ²À[dÿ(eŸÄA¦!€1o#X‡Œ´•5ó£¾Fà²;Í3¤Ï{;Äëf ËUV)ïÖÚÍ­ä/ ™8½r™Ëôñ»æ‚ЕùKޤÛ=OÍÍúúŸ…17½órÇü¬‘uª7*€ÊØŠð²¢öŸ$»î¯¹ËŸçà8(€2o#Ø Z¡ÈºøyQ p µ²7"€ WÉÚmúÕÐÞ_Í; HòN¯ûû{K—\ù´báb}¯\ìÚ^aÿ@žu#%##æ½€{‚K\6Ç`¡G/`e`ü`üý#íÌÈH»8cà Nм à°Î5Ó¶\3–«‚aÀEÚÄg‚Íß)=$оÛm'y³IÀ¡Yü„ëõôÊTW¸Ã6 ä•7rã°¢Œ ˜ô/±Î î¦[F+cãíÀYWWplÀ š·|.øu×£2óp^Cp1¬È.×ÄÞëwæ v5Ü‚·ð àÊüÌ#“òWö äY/f}}ü¤ëÖ¼=#zìª~ýYð«±Xp{<£7G¥k^œý#Hjíé¿åÎç0À¹üU¸\ |·Û8\®¯ŽÀEZäMÍ‘ê­ÖD±™ ¡ÉÀ¥ëR÷¼ž`\’¥±i¬-)/Å»-¯õ™^Ù\cCb°1‚O»5¢t͈½”EŸ¤ld,€s8!ó6fK¡åŸóÄë';­5ž£¸ t›¤H%}ZpÑ,’8€W¾âZU1qs†éº ’±ªócÑQ¼uò~žÂ[ŠòLìý£p`€³8!ó6f¯9$^³’WnÔÚûC 6–¹²®6…VžÌhþRì\²:uýñôéàà}}íœÃº IDATÛs0:€Ý£Öeÿ-«|cìOàØ\Ò!†®y^Ð ŠâõÂà.Æ=æ@5~)Ò|PVëôÎþ2ÃÙa¿§°qÁU©À+®êw˜øÃ¥™Û5Ë6elôÄÛ¨‡­20ÞÔTýÃ÷Ê_&Øï·>áë¿«ŒW7ùK ïxbïEÚ’²m&Gà¡àÖŠÚÒ–±½-ø3¹JÃNúJ}¢ïZqmIËm£³õG—÷զ׭ë5й¬ãÌà¾bµ¶®O žAÀùœÓ¶ìÆ*ãqæÞ|ôÚÓ®Ìí‰ÈÙ¯Þ«G¢µt­°ùpŽÀ¡ÍOÆÙ?JÞ¦´7<€‡9€÷4:Ó6‘¯¿m›ÃÖtÎëìb°´¨/p'$͸zQ`›O/7ñ~’7€­Ç{¿©HÜ@nÌÿrü­îcç±ç …èü£ÿû÷ˆqï£ññöRðbÖ·€‡>€Û{û×pövDžÍõ¶ w·÷î \ú¼a¸Û×}»ßzèÝ08Ü­éÛTÞn@Òpt×>pàÀÙŠ© êó¯Y´3æ=€$I2×söOþqà‹ªO^·$y~dÿÈ×»ÄÁ°9€Óþ¸ÿ½ÇZÛ;o'“Ýþˆ[&Ì®93é–Fª$¸ýUdYµ꿪‚žÂ²Ä» H➎\´3ks"ÿXÊŸºWpð@X—’áäžÄÛÉÇy°Ý9»þFÊò·ùDzfnÆÅ#…»8#‰XªÒÎWóÖ`òî\ó"±÷š£ÙŸ›¯šµ•#@ëJjõœ}­¼sØæN{óêö‰ýsñ~øß·S`l’;Í[¹@Û:%U¦i;}¯ €ÀRŸæë<'° €žöE9 €íæWÉ_Lð00˜   ÿgïÜ›8òîÅX®íúœ à<À_Q8JàÈHÁ ¤wJƒØv„¾ýyGømEŠ pa=Ñ}ñ.îøn«?§&)<ŠòQïl»»¹4üòp—¯°¿œWŽç,ÒW½A¿1ÄAÀZšïÉW~95ÞáI«ˆþ¾íÈÛªñÊx ¯Œù¨0Yƒcù²Ohý'çrÕ[â»?+ú×Å™HÚ†I€ã¼Y§}¬2|«=qUü ïçŸ7°)~²GRB€K>­ñ 0’á©wzšGk–)lº`Í"¹ß$^‚ëÃÐÒïÒóS‚ë˜SyÛ†Q€ã|¼Íi“•»µ_}L€Uiùº(â@ò 0¾â¼íÊâQ¢ããïRòׂњíôïàpªÞìvE0÷Ù'Àâ|Öð'7¬´vÜ ³<œå+¬²nY8¶·s凨ïôÊÐ(H…×é"+OìëÃt¿H]=&ü>’Øúæ…³=`8ÎÇÛ¼.ì»3ë *ÀÑÅ€Tà÷¿ÏÝ+À%ïhÞ¢_L!£Â#@€ —„ªñ‘Æw[Õ‚ñƒØá vÚΖ‡³|f·ËxØÎ³}2 pæ Þû}QxRóƒp èúæ7`žö€,ÀegðÝºŽ¦¯í±`E<H~N›Žº^žõ®fŸxgð&Í’#)"ÀxÞ¶Áèù¸xm^iÍžKå‚°6âEpÜÖâgBöd6t~×¾³íÕA¤q†zbsÉÔá©¶H¬r6dÝ ¯<Š÷¾øÔ«-†Îw/»„åñy«õkeÊ(Û>œi©·è‚ ˜<~H¿Q”_&$aä7¤›êºVx~· K?›)\ê#£6ü‹Qåg«T@ûï‹Rß÷¨±ñ=ÒsѦ“Vµô·ß(U¢×7ùÛÔñgÛñ²lß ÐžŠþeèœx¹ÈØv÷Å>ñŒ¶äúå¢wçRìJ–§gòçÝŸ™þ&Î6»†ñA ôѶ'Œ`6ùjž¸üÜH€m]ZDù1ik:t åÉ£oPÑW²-{ù¨üÑ/WƒÅ€à4F€_“ø þ3¸`€,#|£Ô_Øtâ ¾9=½ J:"2žÔã1bŸ‘¸°ßEÎe:nYTæK ;v õaN»Å7|I Ù‡,¢|þñEá0Ýo Ëjaá0w»²~ô+ ³}hcâ‡+À´ü¨4>VŒ‰^€ÍÝVõm?1²…`¦üñ©»ÈÞa”ùan KEÿ&ú^M £\zwu+~ÅÎÙ~ˆÙOé*ÛzÜ’ŠþÈö/ý[/ˆr Ÿzôj\žåÔꬳé™ü9÷g¶¿™½×K¨Á³ûÔí #Z€Í{¶¢ÿT™[óÉÞ|Fëãk žÐÌ pþ·èƒç…äïÑ…Oêp í‰ã:e<HI.˜¢YG?7Mƒo&«RN}ÿ^_~Ò ðöZátoÏSÜæÇŽp•ÕzÏŸeâÅ!À«è ¥(À¦ VãíNvø_· i‚ ÉÉÚ±ÈyQI€ˆ5‡,¢|òøT8î»:æõ}Þ@„£ð¨à?g˜ÝùXzÞê!Œ®› pÈüB°*¯VPß(õ÷IY<üÓ2C0£a˧úÈXMu3Ñæ‡øÖ€PÜÛ×_¤¯¶ÓïÕ7ö}Ѻ¿_ ÜÜðâ©Ý\ôꡯ“ÍÙ~*Õ¬ùBÇà‘“ç¯ÿga`ÿþµh‚þ4Ê>ÿ|óïɰ¶ÓƒßW\{&tü¨?²̦gòçÜŸýÍ‘+ÕmF-¾êÄîÿѶ' ³'æxK/·*˜üÿêòàÅ'~y©=ÔM^Ñdz¢-žßÚùR{ñª2¤¤O[CÁ*Ù„Äoù=–aÉÇÉ)ÀÆvõí±x&¬Pü¡r„+ŒNº[$v6Ð;N3jtFíð 7¶ÍoóïRê‘N/ü<×HÇ5C•GQ>y|"m §ßÄ¿”GÎ2ÚLÀèÉþÆÆW€Åò›ÉS}ÞK÷QÏà`QjÉ6ºqÏ}–wþj x¢ÒG ±åS}.a­Lm~H€Û¬xlS£@žål Ýîh?l9—»üòû¹\|†³ýTeG…â?‰¿)=𰬹ÅÅÛ|Ì«ÈÊ«é$b6=#ÀŠôLþ¼û3Ûß2ë…ì_‹‰ógÓGÛž0ìœÀã-Ú¿Î5•ŸõÿnÈðàŽéM»£×CÐþUW~ _èËè¢Â08mÙ4Ͷ¾Šé×GݹNÖÃêܽ{wOótHîÍOJÖÓ)´H°fºç¶1ø=ÀÿׯüYP€Md¥b*À™3¨§àøÈGf×tlDçÜ·k ¡¤çKë‡QÙ{&>Š}CŽ™.vI ÅïJÀñÃà ÷G À’0J3bK\è'n·!À†î"õб˯úPÆ FTùÙ*õâ/s“÷eÒͪ’ë³'ã:˦ӡ¹ÛOå,’&а¬¹­²ånïsq1›ž`Ez&ÞýYÑßœÏT/Ðayú´' ›ÃñV±–L€µÈzsö’W,À™g´? ûþ F†§-˜F¯@÷î÷.–VQrmšæµuÉ)ÀtÄÉìðà3qÅW /½³ÃNØ7ƒw&*˨5®1¯4>hªí¶ÊµoxXß1p8”3ñ‰pP¥˜=í7¥ä¼ž®U¡€)â‡+Àº¸ °J·à™ WûžÔª`§GleEùãVŽ\õq`6?$À“JECÃC”]sÜ+À8”­rçÔ ®ÈÛ~~™ ÜžLÿÂí“5øƒwóz<›€JZmQ¦— °"=›?ïþ¬èoØpéšt¤lú´' Ÿ'þxË °|ÿiÛ‹_‰#¿s×Éç@@* pÚž~ò»©wú* ¦ø˜ o^Ÿ”S ×H§öØ8G€ñÓg} ØtAX¾‘ °³ÁwO":/7Õ«·dÎ(ÞåveÏ=—[m§@WœÿÎEöxG€™øD8¤©œfY\‹ .SÄW€c7¬œŠ®3ý9WÐW•àq5Ò QŠòÇ­>ɧVÇJ€ÙüÛŠigˆk™Läõ 0þu¶J,ùD€yÛõGYáû÷/•ùSÔÆoÖÑ9ée¾ÍËjÉŸlz¹+Ò³ùóîÏÊþælÀ—PñÉH9›>í Ã,À =Þ=Œ—x¶í½¸A`gïžág¡€#À³&âE°|KZÏÚûmÑAÒIq¤/³8„³Z€çôyfÜotpqnø»‡úøÄ€±àøÕ·¡[€‰ú pnE)Ú}L`.Z“$ÎígOb 0/®*¿-‹…`}c€9nIYòài °¢!)·æ¹óÂ~çÏO+ɘCù…_~Ôc€• UjáˆrÒ'MúáÞŽ´ù7F€­›<þd•é&€fæß¨ò0h,õùdæý,MÝ´ú5K€#Ÿ9Åšx2˜ã\®Â>iºeŽ!À¬1Àê("zž÷[ÚzÓ÷^¨4ÑE£4ÇÇ ž$€ï+Ù, &ª—¼n^¼CÑKæç÷%°¯ÄÊ%¯ÖËm¾bŠ¥;×yìþYfÅYze¹yõ¡8yÑBú¯,ÀQtäG= ´"}pdjºrF: ±2}BÕÆw­#úª&ÿK^Sµ¥ÅD€¹\S€ùMþ  Ùù7¢<8Õ²9!Ê'Úó©[€ÏHË׿¬718ÒøqžäW²BÄ“)À‚“e™¾Ãž:„kW?\~ÕÏ3ã~sv,³7Ì‘S¯+ž$ºÇ¯¾ÍÜ^zHù÷U 0ñErÞü+¦fÒ¢©àHãGºâgüEüÄKOÕý•~Jº‡Ø›µp(f­|þpùU?ϬûM8G²?èšãuÄ€„àøÕ·dE_ú4Jµ_È`Òúžøz[aÂÆ­O(",üK×!¤SOîŸ/®Â_÷ÙQtn¹|wB.ƒd¿°áÈŠkýÂk6©—Ó+M×OÔõ'¿r3†“`Ñf'Q€ð؇ºëëa„— pú†Mx–×»sÿSû*}ùQn«ÒׇÅB­lÛëõz­Á&l{™é Üyêv»Gè§ÊÊÿýÒÚ#;¯ý÷ ç#Âó¹ÛýçYlÎYPÝE³õ‹ãrKapz%ßµµ¿= 1‘ʃP,¶_†-Ÿhϧj&ý{íƒïï7;ï!‹Ok8Âø‘)´IŠ'Z^ì_ň§êþZ´¾ýñІ#;û|b lîqÛ±]çJ‘1ø’žµVÆñªó‡Ë¯úyfÝoÎu›ßº5Çëˆ'‰*ÀcPßò÷-¥÷ò »?Ûè7âÒéÏ•¦˜sG_¬oLi]s÷ìFÀ8à)ÝIf™Åd;uËuKͩմtþ\³yË›KÍæò¡”Ä\˜`2µ¿M_Ë­Ùsè (—¦¯‹©S3¡íx}ËÄ—ºr­¸¸»x;y`[Æ—¾ü¨¶•ék»¨æü˜ÎÆRÀè×åžÁ™4 þɈTé >A…äKöõ3òÏ¥]1‰K¿¡ç|R?ówØ,¼Ú¯Î{si¿b¤@z¹¾À²6â`Ruþc^R´åž´!Ë'Úó©[€¥ò¶ûznMûŸDæƒ8ÂøqœkæS`áeMž³*Î.¿êç™u¿‘›Fz*LJ' +À%cPߦõŠË–˜nöp¬`¾à¾´RúB˜@,no^[J·S?HI\n¾úm¿=YK.·5îp9c,ÀdL£Ø‘•ÿÍå6OóÕ†ÝYm»^fŠ#ENn¾úx·Ug~4ÛÁé3–©Ù´Ì¾7kô¦J_ êOG(mþ…<]»ÕÖÜôØŸ@8®zævÿu:[€ úŽ‹v“qé(§K€Õù}yÐfÄŒ@ƒaÈò‰ò|ê`Ž[BÊ»zšxCi[€#ŸÁô÷o‘/<ÿÍ¥*žêû+ýdçÚ<ö&’‘üóý¾æ«Ë¥ð0Ø,Àêã5ç_Íó̸߄<øÇ“É›HâALJ'‰*ÀcRߦw?¹}øî£z+[€-ÀÂóõò“Û¥·?®ÇªbÆ­k¸õdKKË€þ«))E­§ZZNä±Në´Z9gÜNæ´Žiú.º,+†é;¹­ÿtG´¸ç¤ ¬U_üoÄñ—V¾µåÆC]£Íì˃sÜôÉ‹®|b{ÿ8c¿°ð>Oáó«yž•÷[ölyfiq °âø°ñ žœüjCçlÝc€Ç¤¾õòÂ_é*Õ¾Àå¿UÂÃætz«^G€#E<ä?0e\ŸËËoze`béÀ:À‘Ä€ø 0é¢o‹x$Ô·XòÀd;öÁZW¬Ò«zæþ· åAá[ëúMÉJ_Jôòoñ‹.¿üMßÂpz˜Oâ+À60Q±¹ÏG‡–Å&µ;Ÿ†èNöòÈ)3ÙlªöäD/Ÿñ¿(ò»³«±µÏgÿµU¯³â €£BgÖÝj‹;«¾p5åAáÓÊš?8:žÊg¼Å/šü’ÅÆl¶à9ÏÂ0#ž@€0*äIÍÖ](ƒ`ir޳òoñ}~ù3>{Ó¿>rqz˜O ÀòäÅéEŒçòoñ‹"¿Xx@€ À€`  À2 À¨0 À` @€Qß`Œúˆ§Oi=ÕÒ2°"hOÙsb§ò&­¹ipGb` ðs³f”E"ÀÖ·×a±üÝêèµ”Òû´'§E~žâŠÓC¹ýðïu¦åØóävéá»wÑ-¾µ{øTÞè¯XäåÍËódý=ŸdhØ' ñ¹N3å-cXÀ¾×…`˜Ülh}KÄÔrã?±þ0‚o|šsv|"ˆ+냜áaÕ7?±PÎÒý3Ù­°X.níõ€ ߟj° Ãó>>P7Õ\¾[ú9zÿ|sù:çWP!ó^oãɦ…ï X&µ[ßr\v­¥‡s®³„iŸ ¢d[é=kÌ8·ö,ûóÕµ¥Ê–aÇ}Ëáá¼#­Ã»Hþ·[î>zÔk±|ºk”×,Ô·ç:Íó–Ê\2×¼|ƒèÁ èïÑÝóS«é‡…õFIÊ­±ÿÁ0™Øðú6³–tî°œíÒý•”¼Èý7œ/ê-íáô °°£GÈ€“nôZHOhÇý ©Ïó(®xJw’¹a`M’$ÀÂæ/×Òÿ­œ*vÁš¹ µz…Á“räÖd¬B°Lf6¼¾ÍÙFü²¸âwÓŒ½ôÐìì¨Zpà 𦊠¹Í¬Gçl³Ü‹ëõ˜`¼e(oŠ,À…ß7/?ÈŸK[…‹„6=+e‡] Lj6¾¾]ÔKFËf×^ÌK.Ù6â XjæïAή=ý¡x–ž¸^€ %À)EÄ‚e.yݼCüssù>ºã-£—eàfú?{÷óÛDzÇqÜ13™È&6bDZ¢’n˶Õå§jY41  ÜHR Û.Õâi“®Šj ÉJ•šôÔ$„_¢ °hãâeE,llšË®zéÁ—ˆ4ŠÄ ù¿è<ÏüðŒ3 õ «øý:ÇãÈ‘¾|üÌó}>ø  †pðõ¶± æÞî~¶ËÌ“Vó¨ÄiUŒ¡îÉÌGûž‹2¾îݧ¼w+7‹žÌÅÒÆ¨.wS«¹|i½õ\],—;`U\S>äzÀžó«æ?¹¸¢ÞüÐï÷àupú¸b6ÁJ‹*ÊayäÊ­.¹,á…90à0ê­Ûæ`µh¶Y^qfÞîq`#‘>”gœÕºŒ£f3«#ÖÆþayº3ø`Îlá¼gº¼ì¯«VåõÀ}o8ó©nø^t`ëM1*ªÿcÕ#@õ°6ЭŒ-dÓSKÑå%€•c#ѱ…+©G”±SÁäæ_Ô½G G@Màê­ovF€UëÞâYõæUŸÜ“³vÌU‰fsv3«ó91u·Ñš5psÁ Èâõ­×3²Óë¥s€u9x—¹)5žÎ‰›²ëùëT/k}ÝòëgåΕfV¢æ‚À-Ý>í9ªó6ïýtç—ÿ}‹ PÃ8„zë€Ë#À7?¶¬5M×€4zÓµà®Ø5cmÂ8óI}dߌ=Pkàòþùœ}´ÓËçú‘ÍM°v6µ¯äòë5󌛞U ÀÚä××»:—²mVî¼æ,ÐÐPAnyZ×ÐÀZÀ€ZÀ!Ô[ŸìšyA>Tp·d–»»Ü›=Έ°€æÊ·0ÛGöÛ°"[î]ÀÍ+j~>rqEUY÷PÍì,Èp@4ÁºU~i­Kx#záT@¹÷én0 †p8õÖ'»º@¿0O{†c÷”wÛE46b¬}–€{rþ§oi IDATêªãs+)»î_~ÕàÄl./ÞÌøŠšyÂ]Ѐêྦø5ãß.åmëP_ôGä–ßîürî_:õ P£8œzë€×¶€˜k÷Æ2ìwØxû¬óÖ°7Íz:`ù\?ò’`‘¸åõ/Ô‡ôÁT=§ûåÐ-ÝŠu(y#j7]í&X¨{ïû|X€ÀaÔ[·{ÃÖÉûf¶€4ºèÊÎà˜œœX³·MË­}Þ5„#²Öü7_?ò’àýÃå÷W­øö¸÷Œr8«i©ÖºHb…¤·³,ƒ@8Œzë¶ÏJ›b¹¡­`qO³ûÖãÊ.г9óüöUõtv"óšçêÊëË(œ™wŸá>˜³–£0U À©ãÑ“s椤øeë»ikƒ @•põÖS{eïæH[!³ºµl$Õü¼™€c×:ÀmæÆþaùã⊺ê¬lf}òªÌ­v3hßëËËYM¢c>Øx}s9áØi5ÿ9`€× ÀIƒl8iüûSò¶«Ô­®ø 9Ü¡œm){—”Íó„«S½ßðî.>,@ à0ê­›hª¼>Ú?£>{q,]·Wj™Q3ïŽ>ÚM­zrjit\ë›VÅPnsAUK÷û§ÕÇwÍܸf<ÝxÂdÿªx½CÏò¦ëGälàÌ“ÖñÔÝÒ‡›°q~^´ÐŠÝ®Zà°h;é8,öã—þs{䨴î¿èVâË·Gš”±SZ0¹ñOu0PÓ8„zë10#V(Ê<Ñ_€å*FÖ(p¢×Ø•‹ÉX½gØ\ähѼúˆ|ræñU³ t$Ö¾f­„$z_%fs7¯¾èúòzë}pL<¿´±±jfPÅlî_úÊž”œ:#Š/iAäÙÝ?û ¦põÖ£÷y±Xú´>±Õ‰4ß}^ÌW7æÍAáÔÆj._ZÿØ:šZ3^o¾ÞZIDäñôÒúh}e,Ÿë;ȯnŒÖoÀF–ñ8§–È¿€×À›ëïäg²ž’<1±0äûìê¼Íƒd `À¶ À;~3výÇ[ÀbRÀõv³Øž£{öêÏ:stc±H¬|°^ÄÖ„÷ÔD$‘ÐÏ-ëŸìÚÊõõ˜q³¾o£>1ùh}ý~+‹&ª€¿1'ƒ À;χØfØP×ð*8èzû‰´\‰Š8@@X ì鯩§u?ÿ+`ûà†WÀš¶-påØ05€Ïï–7‰ýã->,xû`À2ïøË¿¿Çg €ØÖ8¦ët³€ Àlÿ ˜z 0õ0`@€ ˜ 00` 2`À€ 0õ€ï^NNÞŸ˜x¥ ð­ð~¸÷W`¾cxà€r¬Õ‰¿KQÅ06'wS'”² CdÀÔ[ À©6)ål„áÎåÛ#MÊÉkdÀlŸœ~t]é<êàÞ娙ƒÇÄÏôg¶‘¨“’)ÈT1'©·„€“w£Ê؃~»Ö»NÉ­¾&å#ùˆë»é˜“@¸\n©·€/}Õšt°Qu›Ú:ÏÐÉ]dž(È€©·„€µ´(¶Nî=£\¶¾€>§œœs7Êê6'S.So0k8~Ù¹ËÞ”–âƒ,Ë@°˜z @x¸­C±ênK·âšƒ”:½ÓJA ÐL½ Äœ>®˜M°R碊=XÌî²zcQ*So3kÝÊØB6=µ]^*àîÎ/4 2`ê-¡`­¯[‘î\qB‹Å³d ÀÔ[BÀÚä××»:—²mvNߊú¬È@A š˜z @èØùú€Ý«¯©óšFA ÐL½àྦø5{A¤;Y 2`ê-o,§û£V#ʦø€@0õ€7€{Ï(‡³ÖAÿ%(ÈT-Soÿgïüb£ªò´¡Lbš4Á4Ä'ñÁ×=÷Ü;Ó™;w:3èÂ÷=LçÌÜó;÷Ü3é™o~÷ž ×M€=>þnäÖÀ‰çG3!äT€™oò/À.W`ñW+wËõ'=‡ëK[ ~‘  ßÌ| wv-T¢Ü§•K_ùö½¶û•ÒÈ=MÊJ&d€< 0ó-Àµ`½üÊ7LÈ0À#À‰FÜõɾ}ûN7¦uÇB&d€d\´}ÏÛ+2¸0ó-Àµ`&d€œ°  @€n.A€`˜ù@€™o``F€`€›H€çûp#€ À0 € À0 € € À0 €#À0ÀM,ÀŽÆÓÇŽm[óBß±c§ß/¾!xíŠ[_M½•÷è…ýåÞûã»sjÃ?=<`uªïÚ °çWå²7Û?ŸS»ƒê¥Fý«  €§;?vëóí×Ûæ§7Õ‹6Ljš\TÅ—–ÏkÂáÖy ÀÎ!N9‰dê_ŽâÏkBüöiù-B=Ój]¶l?ÛxI‰Ïp†ñRþÒàÊw+3,d¸®e_Ûbåö;ô6­V^~cŸ˜”WÞr}ø'Ÿ/wþ˜Ž{w•/øáX_×'mÛæÔÆ=©Èù^Á– €§bÙjå•oßóíæçç¥W‡Ô[Y³:œÔZü=‹1*¶58>xm(=¿K©9Š?#¬æøÎ u0\ûagW¸ß²lÝ~¶ñ’7ž9à ã¥þü¤'ÀÎOÞVêî pûåÈë¶â…ƒ7Ká­|X3ßbçÙúÒß_ö^kvU¯*z­1›Fº:âã!Àp*{b±.¼5;ê‘ÿ`›”¿_v >~M3À½Üóy.{€ À)ñï(•“§I¹o^ pMæ+ ÁCsœë%Àe½ÁKýyü¦•}üa5±;/{æ²uûÙÅ›¿œñç`kvÜóÖrGT€×7)¯êš»qƒžÞt×ã÷ÊLð‹‘wnø ð©‚¥ÛrØ2ÀpêËîª{ËÈÏOÞ8¤)juèÜòÿ'ö÷äh¬¼ÅO*¬Ž‰øKxÍå$ígoþ pÆŸ?@€“œÝ)¬vF€툜è,„÷vÍ|mPÕÄwÝj=œk^wÙ7iw5\óùÆ:tãÝ}U<ßÕa™Ž\W}?×&Ö{zÇb$ °÷¥ /ìýa[œ»šË×|§?ÛUðÛçÓÝý­vïÑéÑÑIÙžÿ€\Nb€ 0œYxƒÒ"Exuéçyட>°`ïþr!ÀU«Ö<Ýþ¯ý_Þk[/ïb±âÖߨœg/ìßûß×­k;‡´kM«BS £ñ&ǃڤ§ ×’¹èãÀ¬ìܢ͗­qÂ[Ö¬j9=Y®<8=:NšPÕÞŒ^™ìpË¢G4?x%,“˜U¡Cýí£WZmúct§GÔÈþ:ºÅöÑñÉŒßóOhá& ï®ÒÖXêž]ŠdŠþ™âÇooÚ?ëñ;4š,¾cD“=sÙ²ý9Ƴ:~ŽîéQÙŸCýÖÂ;–ã?žYųúüÌM€å¿¤¨×ì(54w}“"]X¼÷ø#ŶÊÃ…++ò!À~!°a¼¾ˆûõ‚oì]og˜n´Û1 p|}× !ÀË.Ç„³àeÏhûúñ»±ì5Øåòjì¤+À~¹ˆbàŒÖ^•.ÀÉ À °ëhaÝ7b:ómm^Øqþ…’¢"y“]€wŠÙðÉNíñ© )Àëþ#çÇ/ﵬ_Ö¥‰IeGmĽzƒúÂR¸jâ…Kèä çêB#äšMQvÌð:½Ò¥$Êè7bdMwCÈhý¸.pµ#¢0µ^>FOY›Y!Êaìn ’ö\?”ÅA]ˆ5v6Çì¬ýKŒoÚÞ´V?(Ì¿ÌíÖÕ-°,§h?Ãxǯr"OkÂxšÇÃj|ãÇ3»x‰Ÿ?€Üp$ß«ú¬(jOÚ›”º7;×ï¹Ó–¯ ðUߨ©ƒWucÕdöŸž†Ë²'À;“d€cê‹÷‹ªçEÑ7i-ÀGž-øøë¶ï ŠžªM̯{6Ú—¢¯Òàð:>+þ­Oéþì]ÖCÎth˜o[ú׿œŸÛ 9Îß]òqËGö@à¶~ø¾`iÛÝ?^(_z›&À¯ŠùñÈ{b~|r¶«,#ú¥ å•;½Íò”[áSîšžYx`H=îÐæËbË ðÉ!õJø¨¨hãó÷ˆé¶¶ÓÞýظV³A4ßÑißÒ# SÜcƒ“Óê¡^ùX=m6ºG[Cbw;;½ÝMIvN¨©ÚÎîiuø3c§DW½ú)ij÷/1¾i{ÓþYŒÇìñ7ÆÀ‹åTíg/ñø9'‚ò€y&’küxXŒoüxf/áó#vV”§>­¸P1V½jÿ¢P©/ÜluàÜd€Ç|?Ku•ü‹Ï¶»ìöe—¥Àz½ò`—·Ñ+f¶ÊÇÔ×2Àc¾}¢âeýý^°¿è«çE½g ´Ûüš3À1¼ =VGÕsZ{#ê!£=¼“@€Óš›´ùvå2Ù%8±ªèò§ly pÕª¿ïÿÇÂ+¶úÚò+Ö<-X›o±Ùjž)¸çoiÄ«©ç䩬3ל.Š.!`'BãîHÆq‰œ/ûåI»Ú)°‰àÀx`Êm{®¦Çú¶´ÂØÎÈϹËÜ2é/þ´I>© ŽW‡†{.ŠGãÛ¸¢„×êÕU×õ%õ Ï!uÀÆ ÉVàØú?§JÛíW“pIÑWµzÆwÁ¿g¿8[! VÏÉ ›Õ3ÖLN§Žë 6ß¶4æE€; ÖüÕ#À%Kï´Uý®déCòth!Àb~¬RU¾àiÄ^¢{VRA4]¬Wœê7²IÌ«ª.H½A˵‘„@éÁË Ÿ,þ´[Û¾*¤iRÕùàM1+Dí6*”ESÔº;B&s’‡tóÕú“Fÿââ›·7í_æÇÏ-¯Ñ]MzšË)ÚÏ0^ÂñÛh>>ækvMã‘8¾ñã™m<€¼ °£û~E£ô¾Nã¾G•ïÔ×½ÑVXÚR‘· ðI©¶#»ú¤À†å·€ÿ±wö1mœw·±ÏFlÀJ¶ASP«u ,/uœ®]GXÚh©ØR´Î Ñ¡$ jŒ4Ñ RÔ“7–*iÃU’5 æ¥›JÛh«ÖMÊþ@ ʤYj ‘?6)©Viíyîýž{ñÙç[òý¨R}ç»ßÝ=Oäç>üî~Oü+ñ%^mhà °²?Íß9*n9uÔP€ßþ¶^ûŽïuƒw€É§ìŠ`qW„ÃIò/# ·G O“ñvKÿÍUnpå6ß˵û^ x–=ë{=@¾ø9>A®yÇ÷’x))i[€Ož·¿Òn”–¥µFë[;yF»(l&‘g•üNô¹Y"Àš Qä„GæÚ οCH l²1>cëú4ñ™íÙó£§ Ûl¿°$¨&ËVÇÏ6ž®ýj;¥*ÌÆÂÊô‡AÿjûÓi<pM€=¡xï‰5«?:UºA˜©dOÁóï*Nø7ºR«îæúyáS<.®¯º™«@«÷—ZÊë¸ø ˜—­ÖpÎU %Ù%h72ÀràøÖ‚ÕÄ‚ ØñAúå?÷¨ø±_Ëx–Έ$ °”÷½PMÝ8c<9ÃiW€² iXyø¼¼›oÕ”0¦‹¥ª•|1¨e©±v•×tªÔ)<˜â¸ÄÂð[b+$•G€ù#Ów€…ˆÑh›­ëÓÄg¶gÏϱ*5 lÅ1ÂÊ.[?Ûxlû‘^‘jO +ÓFý«îOÇñÀ=–YùˆŸVnYZ´ƒŒƒÔ€÷•º“–ŠUEÈD€§dlf€UŮⴠ´ðÉL€¥y€k«}ä#œÈ$ÀÈ8ã‘æ¥E|¸À¿±)ïh-—fÿ˜H/àï|_àå?µªÚ÷JÆxŠÐØàaeXš¸¦ÓhFÙ ý{[¢,ÖSuâ¥7´,EÝJ`Z!J1ù°gIz’Ú®0/QC’›–3À3Ù]Ÿ:>»={~j¾rÌ^üL`«ãgŸÖ¶MÈ~Ã*cËô‡yÿ ýé8ü¸jéêo“¤-~á«úÝþu'¬®ÖüµÝ.é–ÀÆ<ÀAõ÷g­3À’w¬+Þ§Î{sž`8¶Åÿ Ÿù‘ñöTÞ84î¥)_JÇSÖܰNúdoV®‡<ËpCRú¤†häg–`jUVWˆOº¢y>)¾é[˾™«`×§‰Ïn¯Ï«þ°×~2À–ÇÏ>¬m?EXC³†ÂÊô‡…óýé8¸/ÀÑ=O?Äφ´Câ¢îf€Ecž Sg€ã²“Ž2Àñ]ÞLjðÖ<\,,×l+DÀ×%ÀUký§æ¥Ò§< °g¼üU!¼ò§^KíòÒ¯2e€gÅÙr=uý\.|AzD–^R pȸê/Y=¦ò ¥6pH|X—~²Ä “£Óê”J/½j {&«ëÓÄg·1ç—KûeÈ[?`QSSfïìªûÃâ|$ÇñÀ}^ù3ÿÁRµö6®uE€™ n£~ö"Í#ÐÒÂæ›ëÍ2Àö2À-Û|?n¢ÞKkA“ãþÖ[hž¾|`n p‹¬½Š çS€;Ê‹¯óž·Ý[h)À›·ù^.µ/)Jý5ÎL¸*Sªg™Y¡©í‡NÇ£àÍF¾Èï¦Y¯«Íf€Kf™Ä«bZôxrhã pæëcâ³Ûgªm£ý¬3ÀŽï4<Ë ý±r”“„UÓŸl˜ °ÐŸŽã€ë\qºàÁÇ=|x#ÿën^C‰v;LŸ—ヂ ×-ø·¡âB†7-¬›r”®z‘Ÿ8ظÉ÷! Þø§âC^³ pû—eeÿiB€«à7ù¡&2¸¦èxþøBuásßÜ^¾ßòè•/ÊÏJ["VùíºÆM›=rKgØåo!BB#æEëFÓŽª¦®J§åÏÄ”G†C¢ñäyvëÄy€Ù pMç˜úIê’«ÇäÜ1ÿ¬mm2! W´ï˜^€3^ŸÝž9¿\ÚÏ:œáø3ÀÔGiçÕr IX5ýÉö‡™Kýé4äO€ùªüT€ÉÿèïÎQ¾6Dýé5E?â'AÚí_=°‚N´ÖÿÌ7ÝÏc·×¯ß~µ¯¯vü¦8Qœ¬y·/ÖÒ*Î<õ×A²&ë;ÀÅŸ^:Ú÷ƒ÷¼ËùÌoì ïòO{·¼ç{aÜ´ ô[eeeïg%À3ñxD“Ž«W€3Äv SGšÉx»3ÿ\ñ„×÷‡Ã¿ü‡÷{LŠ`°ó­¦?“ññzÀN¼QŽ[¸¸µŸ›Ò¹›ï0f¹Ä̪žØÐB»^h*®q#sÝ[SÜçr¬³M=ñ¡~Ny°—H¤êÅЪ—˜¸ØÝ}5Í­"FµÐÝlîçÆÎë3˜ôÍ[M"yÃèXº{U´§oVÌ4–³› ú¶Nó‚Åp¦ëcãë¶×ž_Níg•ÎxüìâéÚØibâj:ÅlMŠóðjú“íÖô§Óx7ï)ðË å¢÷¾ñ=Ñ>aÈi|Äïß{øþçõ `2ÀñªÛÒ,Hâ³Ð‘š›Â2Zú0%Ý”kèB¯—žér±ÆfóÃ…dÙ÷áNÓ*Ðq^€_ÉJ€)3J˜_þ¬ 7„¶Hûõ~¼Õ'€ °çÉMüð÷£JèF€ùóôz_=Xj/?Ø%&Ž)‚²Dÿä¬ã’Q¡ìñ˜{ZRüþ3Qy`qãaÙë6“uWäÉaÃtxå'/âs‹ÑqÞ/Ù føHRû&q½x. Ž›à¿ÕÏŠ3! µ¤Îp}ºøºíµçgÙ~cÆí²ÈØZ?‡xú :íÒ@ íµrQ2u²ý¡`¦?kœÅ÷xPXÞ{\úM¬û½¸æo7˜Íƒ±ªÀwÞý²f|Šèï.~E¤ööú©;Ws¯MOóÀ'r…ÍHËøøp“Õ<À_Ür"ÀA0@€3óš4Þž º!Àž®ï’ñn`…é4H¾ý‡Ê|òôãvãÅf''ˆÝ4H={*†æ'G¦ÓÝ#¡iœ'ûŸ„Õ<2=×®ÎÚrÒܼr¸ÄätzXHjÆÒÓÉ‘aV#6ƒ©¯€UÑ’žŸL&È)K)Ñh ·0×ð°õõTØÒm¯>?Ëö³)¬êeËãçÏ Š6ß?¤±*•i©TýÉö‡^€Ó“Iu:‹y`½7]:wîÜNÕ/dHXcø@”sŽD"¬Òg…{TO Gâ]]=ÊB0Øeµ$¢þŸÙAµ‡‹ˆG5Ù:þ›–]ÇÝ€ìØ÷“½'ªí‘¾‹½½ç.Hy¸'…ôc¾òQx8P¯³†ÎæC¶·²U›£êÏ!O ­Í⤴çhÓ¿bh8ª;l›´Sˆ\Q(j-꩚;Ë$²ÛèjrÊá¦Âáh[×§¯ß^~FÛë‰Úh|óãçOÛ~!Ó3úþTúCÿ0ÛŸâ€{L~<Ã⯨ê÷*0œ ð½@䯭²ã¸›e¸°Ð›íøhòçX×ï”y€³¤äšqµå¼ÐÎU†B¡·þ=uÍæ w§gÃý!ÀÁ/Ëþç—d/Àùï6I{¥ùwî6ÂÎöÎx}᯹=Âw÷(¾‡¹ñ¯²¿ïÄͰ¬_­ÜÂÜÑžž×f“bQ©ÅE¶×·ØÛ €ßGÿ¢ì¿ð_`…hG’Tê/¨l¯o±·¾8\Œã^XE|hžVù•Kø.6²½¾ÅÞ`ø¾``Ñ pÖ„Û<ž€u‰ç{šl¯o±·@€!ÀÀ}+ÀÀ= ÀùàÑÄ€û F‹` 0 À` @€1 `Œ€`@€€{H€#}{{/5™.käŽòÂû?X¶þÖË6Ù`ËñÖ9G8îó@É(—6ÛbÉü˜éwËRæûQj:G.»Ô–•©‘óvoH޵[]_¦ïíŸÍýmÇÏS<;„[9Jâ|~Û¿dp~212=qÌÆõdþ÷ þÇÞùüÄyœq|¡û‚µ6käW¸5Õ"K¨•R±ìXEˆ.kç ꪎ£ÆU²­¥ØE‰¼•bcrªè%”¤¢uS#X²ve5–Äâ’ª—ö²bYÉZ‰â¿èÌûsæygw^vßšTú~„áÝwÞç™w•É'Ïû΢àëoÄßö¦ßqÆýêvP€§þÒ‹ÁZ`Í|Û>™œ±KìE•}bï¼ßªÕf¿ܳÃÄ(&ù…<>žpç‡ï_ÓŸtÚ¥±·1þw¬^­Ùù迟•ýõlÜ`&Ã_~õéÙøµ/”m2!'Lsþ¯:~ú 6кkæÛöÌë¼Ò·ÙК& Ù]Au®æ:>Nç·Úò<_pI~!‡'Üùáû×ô'ÝŸvaÿ=gª;l}ü{ªF±6üh~¡¶"ý÷€ju IDAT¢àñç_Æ/¾å ðä…øÛ·íyøþmE[9!§wê7l e5ß¶E*ÏvÙØzØð#ÝÃ]±ïšO”²ëmuà .É/äñ#Äæü£ôß¼¿H˜‘L©:lcüY€ë,d¸ñ ñý€(øôZgüþ?g:fÍß¿ký6}6þY°ÝH€øs 6Ъ‡›oÛb¨Àõ&“[ý~x9~N.çöV¢à–ŽGOdýG-À1•·“ïÜQdöÈßOhU€ï};|Úà±_Æ/ÛF.ðª0m«'äå3xh]€ÃÍ·m1QâŠ:˜ß>ÿÿ$À“…b›–­·Odý¿n#ßDõH¯Dùû ­ p÷8·`O€'?ŒîLşį=´•râãŽ~„ÁZàPóm{ô”ø»œ©ü~¯û—…z%Ç×(âx®`-‚´ÞT€{¦Êåú¬$¼É¯ÙYíþ?”+µ•FðÃÙòa}δšcìòÅÃÚCÛ½VWîVˇ³1û§ôŽaÇ›ÊL‘žðF]osܶ…rx‡5öG­ŸÞ«¢Þ L¢ïçb¶ê\†À n´ÊóÉÅ.}~!Ž÷WÝã‚»ñâUžœ/Òž¾ðÉùòR°0þûÈŸ\Þ?U~ WÀjvÿ‚ý'M“ °ÉPåCÇ?øý€×#À#â·ì¿ \ŠÇ? ´•ò¹_|ïk e5ßF‚éü3Áüãpcj~ü†õ0ós¨ÐT€×KÆVmŽi÷SEøiÉ8¬­±÷{•þ[06kÃóÝ‹3~f†]~n¾{º`Ê™býÀX]¶~º¯ú+0ñø8wK¶á æÝ#}«ÜS5²ûÃó‹Ææ3}~úã=U~|~~¬*°O ÞÀù4_6¢ûìRµ¹eû‘k9e¾bdüƒLó'×£÷O•_P€Å°šÞ¿@ÿB€»1ýø¾Ÿðšxü¸½ÇØ'ñøå@ D/À¡æÛHÌÛ–øøïÀö ‚„å ó!Ó­à[2ÊÖ ¼öº¢ªg+Ù}3vs¨`(·ÍaF´eqÓLšVEÐ^\éŠõK*_,¯w æ7 »ì§kdÁ˜¸æY[éôï¸Þ–¶ãOçì%‡™[‚§ÉO{<“ã騂ïÆàÇ£ŒW:ŸäË…´’Û›åv*Îbþª|}’ûãÏ߬¥÷'?¹=_•_@€Åxšß¿@ÿw^Wä£8î¾~)~ÿë©ñÅ/_𠘶UrÿÏ:ÞÇ’}@Ëj¾î±³±&xØpÞè´7ª V€ êåœrm&&\vçö®8Ë9wq¥;üó©<×°Ô’õÓà+t&^6tÞ+M;ý9o©2ß³…Ì:]~ºã¤?2^*Ðb¾VÍvÕ~xœ_ä¯Ì—°7þÎå¤ûCó§×£ç«ò °OóûŒ/ÙÅßîå1cáÆŽE€»§/Å-þþ'kAÊÓ¤­œŸüøÔ7ÿ9áZàî0óm„0w[M€—n3¹­YUØ-d¦óªcþK»nÓþx’õ¼Û•²NâÏÑÆ|¡”V`rúöÊ¥£ŽÁ¥–,óó¹“ãÏëòÓOçÝU¯}AâQÆ+žOòµâµ•q²^È_•/­KãOïÍŸ °p½Àùªü¨‹ñhîŸ*>O€Uù¨ÆŽG€»þõå›_~=5rÁž€i[5!¼ê8q{­ p¨ù6:2^/¬g=a‘Øø±wšB€'J†¸¿ oö ¿¦¬Å–Î-mÎ B9˜'SˆWgr\áØå-NçüGn‹õùi޳n+ R!e¼¤‚,ïçÃßɵ36Í›ü•ùö‘w€cM˜æO®GÏWæGXŒGsÿTñQÖŽ?“{ R¾!/ÂAÛâ„<ùê hC€ÃÌ·‘á PxÞP °° ´«Mªƒ' ’ õùÍQ®V–D&Î-qs…’¯ÀÔ%ö1DŒâêëÆœÉgÚütÇy…Óy»ËD1U¼²ˆý–¬Å ä¯Ê—T€åñ§÷‡äïlƒktÿTùQ–âÑÜ?U|Í*ÀÊñ€càé³'¿hÖ&ä_úæÁ#³ ´)ÀMæÛèHT=¹Ó¦W‰grÅgÁ ò'–Ï‹rE+ÀÜÂ$¡ ¬€5ºcEµ¾ÃKÀ®n¥å7uùi{‚˜pWI–âQÄ+É— ©¢\ñë(œ¦o^‡àD£U åx4÷/ŒkÇŽW€Çg:íõ(´ÅE°~Ûñþ0Ø@ûÜd¾dÕÙ}56R0Zà'î#Ï|!(Q€ý·CeãÞ1DÏéñ>•pÞTT¯$Ýåûödw»$Ÿ2öí8›§ä¯uùéŽûñ]]r~“âÑV€I¾´LóWä{´ pŠ>x>ª`’`9Íý;rX5þp¼<ùaüòT“6¶A¢à&óm”XåÓ˜UVm$À©%áYf*8®,ñín$¾ê­é$“ÉI¬M+ª=U¢OË9{™i_rY5×ýUCæ·Üüx¢jØù ñüVb4m˜æK+²U i¾1mXº?4]8`OóûwÔ °rüàXxìÎkš´!À@ôÜl¾gÕæ»;F¥Ñ#Ð|GYK` sê–#¥lEà±’°NÕ@½îýÎL¹¸aïÏÛGvÄÙ˜VTó›Ò“ÔÂÐ.¬Ã{07íՇͅ}~ºãÌ÷xò#%#k ¢¶Ló¥BJò櫯K÷‡æ¯à`~T€i<ÍïßQ+ÀÊñ€×#À§ã\€Ù?y{ñ¶5ÿþíÍ“·ºUmÅ„<ñÁ‰÷z1Ø@ëb¾¾MìáÓ™‚±½&  izUÖDÕÈîϭΧÇ(Öæf–Œ}o¬õ©ùñµ‚ðž.TÿÅÑ%#»ýtnîyÝZ¤‰ØáÜ|÷´½°U ¢:Q’ ¨“ìssNˆÉ9Ã+‚ö°h·Y‡ 3+>M~ºãÌ.³ÛÏëKÆêß÷˜ÄÓ°ìÉ—)É?/íO%˜âý¡ùë˜æç °é\0OÓûºÜlüàµðéµÎ¸ß÷wíä½õé[ñ“·¦ìãr[5!÷|ÜñÞZà0óm¤\áåS¦4+ž°p)âxUº¾’½­Î¦B€c×—¬ówMo`çÞ7]eÛò6M2‡5¬Íz¬Z±™qΰü‰VT“Ë9ùMâ ?3g㕘YÞæ´‰Ñª³½v“ߦ*?ÝñÁ%+ÚÃÙ4_Ô‹ÆÓ ,ŽÉ— °œ ߘU1õûS¦tùk˜äç$eÏÿŸ…"ž¦÷/dX=þ[`Àñ °Ý¾÷í”tÜm+'äå3?ù5hC€CÌ·‘2V-—™­f¼ àXÿÚA¹X©Ïu©gò€ÿ¸+) p±Rdf‚ Ú¾ @¼»l¹Rß°‹€cõJ®xX{è ¥PQ ¬•ö¹õ*†ýR™Ò¼Î»?¬Íu‘ü”‚«=nåÇBMñmh< *ÀòøIùR–óÿ/{ç÷Åqð³¹5hÁgÄ RÜE"²-(D±,˾„4 ¥¨HÔÈU¹Ôª VS.\©R¡}‰M ¢ù2~H iÝHT‰ªV¥T}õ â°TYò“ÅÑý½³s·{¾=ãŸÒáñÜÌ~¿³+>žÝÙH¾r*žŸHþqÎO`eÕÆ•Öœ4ùõOµë†ÁìÐ\œÉôßXž/ú[7z¹X˜_¼›Ñ¹Ò𕦾þà©`hBÎd2mÕ·x^ÛŒèoÓô× ÀÐ< €3! À02 € € ÀÌ·0Ì| € ÀÌ·0 µpÇů.\øóÿ}¢Ü[¹Ì„ @€ŸÝ¹ýG5ð*η¹É-"¬M¿\y“š¶ÔÖ>£nVúÆÖåÙŠuÛ/Un'è*MßmйÉ_š¾UGóÁâìhµüâê“Ç“°}âþSê/Ñõ5¬ ·*ÄS­~Å×@2¾øŸƒ­Y“ÖóŸÚ¿èÿä (¿õá!uHE€Oìɾá ïªÎ·zýÙ–õx•ç[Ý0Œ#/Ô#À]%mJ¬ôÍV´¦¡‰ÂÀÚ)|çÉ pOé^]žç ®”_Âúäñ$kŸ¼ÿ˜þBç'•ëKÙ¡Oåú•_oÉø“O‹ÿú} ûŠøÅámÙ/ÌɸïÍÖߪÊ0@ýÜÿÍ•ìþƒ¾?ù6_—çKBa'µ{×+~e}o[f­ ðÀLaª®|Á•òKX_Camr4UU€Û/ÏÏ/ކ„77¬‰5>«ÜyuyþÁÂåJ9‰êÂüãÅs†Uì3?ýxáºíV×.Ÿ-Ï?ÍØŸ^Ðsšo¾¤y˜Ju[<`êz™ãæú Ñý¢ïá"¿Âü|¥üâêõñåyk|®]ŽÄ‰WÕ(ßα'ÔxÙrG¸ƒùGò•û“Ç_!Àáü¥ã)ÚGòS®\/ŸÿhÑë  .îÿ¬õ¹ãÖ:ð§­;±6~w4»û\F€Òàõ!nø|ë n[Œ{õ_¿¶a¼Z€s…ˆužëuÝf²è¥¤î°p™úÎͶ@]_)X{4y¤û¼×nô¨ÂCŸCNŸ«¥1è(íì-[({çÌÂÒ>ëÓ{ôÕÛ*(Àv 1»æF Œk_YäSЦo¶Åç— ¾³ìÖØ'¯B€Ãù !möþà åÉ·[!ÀñœŸHþÒñäó§ÊO!À¡¿”¬»,÷'_oõ pÇÕÅ­W{`ͺfñ‹CofxZ.#Àé pÃçÛšW€Ûÿ²eÝ?>º>öñ×-jv0œÿuÓÿß<4Ö?lÝœ3 £{¢ªOÍh÷Ιš#üT±ü×íñ ³áÒf¥ÿNh³ ½cëÇ=-Íß[xÂ2@S(M/.k×&­O÷±Q&ŸàìŒmx]%·f넵Ü^Ö K½cãËÚìÝøüâëÛË¢~l¬¯`/žH¼‘ör¾æˆ.™‡Z87ißrÎ_™o°?iü£,ç/O>ªü¢Þñ«ê °r¼×@}Üqx›ýÖ…¡“Ö^Ð;ö¼Üœ•ß?.—`€ô¸áómÍ+À=ï®ûç÷„Ln©*À¾Áh÷-QñŸÝ.SÀn›¾cI§-`Ú¼Õ@¬½^V­–ŒÌH÷„¦|MЀ©_V‹#gX+œöæJ¯Z?äKÓóSm]¥Ù‰‡æ§kPÑ¡„æY¯êœs=«ÇŽ¿§X˜2+r¦[‚“_lý`Q¤c žƒ2ÞP{)_!¤ŠFÅç`þª|õ­!öÇ_¼X>?‘ü¥ãÉíUùEXÿª+ÀªñHM€;tÞ:hOÀ}onüÈzé¸\F€%À œok]øyËOvf’ °ðØÑLŒ<l={›q_l]Ö4[€&‹Ê­’LA²;ÏYŸ“Ews¥3âûù’Цü%ëÓàWå¡Ä²­³©RÓŸó”ªé{¶«9—_\ý€ÔŸ2^Y ƒùZk¶×ì›ÇÅñ¤ü•ùJì¿s¸Ðù‘ó—'·Wå`)žj+ÀÊñHM€O¼äø¯3_=°»WÌÊ®ûe QÜÀù¶Öà®/7ý>Sƒ›î6•©M€‡n‹÷FU+ÀîBfOIõ¢\Ýh×-Ú_Ï™=?lË[Ä}º_(C;09}{Ë¥ûãÊ_²$ÍÏçLQÜ—_\}OÉÝõÚº@<Êxƒí¥|­xm›Z\¼É_•¯¼ùüÈù /Ò^•Ÿ,ÀòøW[VõšûþkOÀC'ßúTÌÊYçè@h7r¾­qØü|ùµð ·™T€ ž0†Øø–×L!À3Zð}8¢¸9ðcÞÚliû¥ÙÑ€Pv•¤›©wo¯, å2oypOÑ&vúV|~1õf·Î‘+šx”ñJ+Èá÷ÿˆgríŒ c$’¿2ß­Ò3À™*,ç/On¯ÌO`9ž*+ÀÊþÒà€ÿŠM8^éÿ¬U¼¡ÿ={¬PH_€>ßÖ(Àú¯Ü­¯’ °/,Éø¦R€»@»j¤zcðÀ„g|ö¡¼â>¡Š–DêÛ/ wr…RìÀÔì£[Ú0J¨¯ó`Q{àq76¿¸z±BëìÄå ]0U¼açk¥ù°rþª|¥àðøËçGÊßy R¦ÒùSå' pdü«¬+ûHI€wœôý×z Ã7ÛΟv7¤”Ë0@úÜðùÖ\ýo-UØ®×ÑòìN·œ@€õ²'€gêà²$ÀƒÅé»ÑŠ;–wåJ^ÖÊÈXûæ´é ZŸKÀ®ö„Ÿ<ŽË/¶Þ:ÝÝÕ8"ÞðøIùÊBªXŽîøU‹÷ÈO^'`½Ò.ÐÑxÔ\ °^F€ eî;šý¢×ŸŠo´î?¸ÿ[{a8{*RF€Òà†Ï·G^ØôŽmooP °To ð‹?³+ÞÞd¸¬9Ú·wB[‰ßvoyAغ5lÜsÞaíÞ·tçàÿ³w†?Q¤w֙вnD¥µxÍ™"QÀvK »JõˆéÝah¯$ç¦\‚%9‹©‚\z—Bs—"œr£¢ð.`/Òœwži¨GjÚ^_î"òf_þ‹>ÏÌìì<ÏÌì30³²è÷c¢>ûì<ûû=ÏÀ³Ÿ}fŸ±­¨ft—Þg'ñ4Ìø¡òìî‚qÓà*öÂkQ~¢úl|§FŒÿ1ñW€¹|ù`>‡|×¶\Å_x~H(À\~¼Ûâaê¹ñwlà²kìVí²|û¤1f/C€€À8ïómÕ;ºì^|Rä(À\½ú÷¢¿þƒ–kß-ò"Àúò©¤-«º pÕˆåZf^À22t‘n6làSæžN,ÍIæqÛ.ÐüŠjé{ 1Ýú9sSÙic9ãaæ.Èó»’»^]Rô|ji~£p˜Ï—_‘µíÍç+ W€™ñáó­ÛòãØ!k=7þŽí@ {S>z’-ゥmÇQ/ÓI™/C€€à8ßóí®7¶ü‰øGí“mŸ8^Í×7ÿlËo‰‡|Rôaf-8'Ʈ͔E·K ée5RÌX·<8›Xd86kÙ§ª:6ÿOLizJ7BÚžy܃Æ}€ùÕšž9æJjËÐHŠy¡ñs}8:8*ÎOTOü•&pVIèBÇÆ#\æóå…”Ëßž¯x˜>ÛóãØSÏ¿S{ˆÇÏÈ]}¨ ·Vh—DÇn…J´+±ø2ð/Àe„&*Àäß0ßVþ®è‡ÿ¹ðÕ–_ÿÙ+JpªßþnѶï†}UôÅ£üüÏÚŸU”ÕûmÃÊü#€FóšW-)‰§uý±‰Õn»@U.(ÓË}m#Êss¬É“ýMÖïéRAÍ~¶zDIÌßïë{˜Ö6i"Æ´Ú×_ܪole[Q=2Ë. ÆÉó¦2ïŒ#IÅ\-%ÑΓÛµøù‰ê‰]&æ¦G”ëIzßc.×àlÿqùrBÊåoË—oÏA€™ñáó 0Ÿ_Fp3ç—S<Öz~üÚ€ Ø„Þ|¡˜LÆrïøø˜,ë[cñe0à[€Ë&BÙ øhþçÛpÍOhÛþ¹Óº ´Û¯^s¨7Ê[¿xýÀïõ‹¡£Ë§DZFM¡¢C1W·Ïê·Õ™s`©}D;þiÔ¼°ñä)Ó›N‘Dz2!«h7ëÑÖŠ£ÍÆšÿñ+ª‘+Iv±™™Ô1—˜IæÍvÕCKÆ€ô½›,ùÍ9å'ª¯Ñ¢]í>@7õâãqY¶ö—//Àlþ¶|%m8Ûžƒ3ãcË_ À\~FRÚñô3 §x¬õ¶ñwjò#ÀÅM7Z´Â1ÿòe0¸ç{¾ Çÿõɇß}Zq`IâëÑrשê-ñò±¥Tj•Øj³¹bÇ °T9±’š^L÷…,¾BŽ¿ŽXxzqÙ²óÓ"hÏË%¦¹Dj1=¥/jÆÒ‹ÉéÕå;¦PZVTm;05[îskî.UÉ,SFÛió«Ë}a.?GÁÖkù‘P«èmøx\V€Ùþcòå˜Íß¾ãמ“[ÇÇ–¿H€ÙüxÁuŒ‡`nüÚ€@؉ؗ3uîe0 à-¿¹4öã\ßÌ¿›k¾ SOŠÐ;ârk}Ö¦¢ªîìtoDeJ‘p'iÑj¼SQÛËvfRUUR£N­E¥êåÉrq 5=ìNË4H´“ÉÏNÔ[½¢ñçxTÇ^ˆºäk;Ú’®|£9z€kþ^P]BóØÿ|æîí@°¼ÐÅ€‹ж®A€_Šù¶tÁ¶ÛoptFÖkDª—ª\pÞp:Dòìvj¹£ —@€€—^€·¾"™ÈìPœ¹_PÁE(v´ŽìÅÀ…Oa·¿Ùã@€!Àx½zÓ¡¬._í”TæG7ßxÅúû—’Ì]›@€!ÀØNôI%¡û o¾áŠ,h¡O†qæ @€4M¬¤’Ù-„7êR2‘J-á{ª†`‘NI çÞâ¹°éŒB  À2 À @€0æ[ @€1ß` 0 À` ¼ê\6øåÀÀ̃ì1Z®[ó„\[ßðz®rQ/_h 5ôv}ìRÎ/¥Wgffœ-÷úüC·z¿ ãätäØa/'ÍÆŽ·ßñ rü·×—¼—ïx7º¿ØÔü£Ý»Þ(¾¢(ÏÃ¥³JbÊõwÊÊœkÝ®÷ã(5=Ó_ç©/«F¦ïù8¼99×+?Q½÷x<ï¹ý€ÚóB¤C¡$îßÿÁŸŒþ§%$B—nê4Ýh¡åÓC'Íç´ï—׉&dõ\èèžeöÆÓ†àÔž)yKœAå LIïã¡Ïs<é––‚|þ§Îå\Ôž‘3œß½.ý}¨õ—\r|§ñ~þþLn«®3ÏÝßÅWðìg¼_@ÿ‰Æ×çø3¯„çù|,ôŸ6V€ùùÕÓ|»~TžJê‚â.ªäÏ,3wíòrwpé£@˜ËÆ„3É IDATÏc½÷x¼ï½}A{ÌøøÅ]€ýöpç'"ÀemÄ.¿“彚7µ5Êä1¹¤Ë0àØ ÙÄ?Ìú_ΰ¼oÇšX3rW1"ªÝÐuönÿÕ™Žå¼ pé¹FùôÐÀø÷-¿|Mäà~Abµõ%”oÜI!Œ¯ÐØ×x¿€þ¯Ïñg^?ÎóùXè?l¤óó«Çùv½Ôô(“t¥oÎÕšâɧÕ9Õcñ¡à=ßøò¼¬àrùy¬÷·ã½·/h¿¨ÑhÔ¹A¿ýÜù Áð¡³ôŸ&âqGé­òm2ùÆN„J¾Õ„øá˜ÜÐ"ž½_ò¶õ·4_Î pÃ[kà};£w붸¯‘wØÌKñe‘5XOÇIí”ÈûwµnÇ7üáÊ;yÅç¦`_ãýúO4¾>Ç?pÎóùXè?lœóó«×ùvÝTõP…½¢|sÇõ)Åua©ÐøÈlbÒWYÁåòóX¿†x¼¿–ös·¨"UN úîÿÏOB€‹ËÈísç7µI—üs‰qqµ~VÙDH¾ô -$œ[÷1‚Ê—³,ëÞ˜®GZC®KÀíìZ3_ °éJ=â_¬ óe`_ã½ùû/p~•Ï76R€ùùÕó|»nj‡©Þ4'¯ïðx@ApäJòÙhP¼®ú ã ¬ý Xrà|çëãü€u °yáÕûò>2é¶WÈŸjD“‰¸á3:!÷þ»®LÎOð)Àq"‚ÚÐúWÛ7TÈ]Ô„µ/ ‹&do;`i¼÷QèøÇVVÇ[{»è&Wj›f£qÝ‚â‡? ›\]¡=–¤Öñ¥ÛȹÐ>ë§…|ÙÒ¾n¬…#±ñ±Fyï/˜¯—¤‹c ‡´|j÷Ÿß]y£åöçùû1iR½eûê0û†ŸkïH½öuã·Q/´˜JRyAº«“ñúvé¾|$ôxèæÇxÙ|Ih•£¿x!ážOŸ^QÒûÇ¡›å.ʵ'±|ØòÉ9¾ŽLìÚ!åc¼EýÉŽ·S>|ÿ1ý!߯ß.À®ý팵}.žöŠìçVäô=[{NñÚOæüÉûÏ›U€mó«·ùÖ¥³ô»œU=ÏÍ_ïƒéÅ$Ýúˆ à®am¤Éœ\Úº’J¥»át(tÍN+W^[I-.ºE@«©ÕtŸþ£yùéÕå;º{]½¸”Zí–ô¿Í =ުń(ÒßèF3Þf¸¹ÚN›Og=œæ—H¥ÜòÕ«—WRZÿ\µÅc‹×©}&ßÊYºÇÓå%Òå†p[ó·åûöÎæ5Šl àESÝݤlhÒŽDE v$1ð‰äK$J3Ib6³HÀ@DˆFÆhâBa&Ñy1ˆæe.t‚nÇÅãáÆ·w#F7BVâñî¹÷Vս瞮ª|t†÷,B*Õuê|T¥î¯OÝs±>€uÿÑùˆã ÿìóp½ÿü(“Ì?œm۴Ǽ>­X±b¥¦||)µÿ,¯÷ç/DçÞö»Ïø²âÈÉ:`q¾¼ÚÁ§lúÜ=? ÉÕ_(æ1nö*)>".àìbªï; ˆV™ÄÙ%uvó# i_<@yä ÛXoã?ƒÿ`A&€?î0»'OÁµ­?Ýé h‘þ%Øß°æïWطǰ—`Ý_ĺƒ/ÿ†¿%€•øù1üGçÃù£ü#8쀕•áê:SGûgäCß6íÁ×§+V¬Ô€w-–sðêsëQN½lsùÌi÷Ôù„ä† WkC„·5~²”:µ7຋©Üø“¯Wøßa˜9\·äõz‹ì>w5çÆ2µM„lY¼ô‹ø«òЭ³«Åª¬îo:éN?x<3ûš·¡füsqüJêÔ*ÿ ÄÓïºËO¢XÕW(e¨þÛ§S—ßžg˜q`ˆé…ß 3¯Šô€¿tÔº=¾{ˆÐoø{±ìö=x\8s?E0þ|k3ø[˜ùõù-rŽ®`ÝŸ˜ü¼ÐïN¿]}âöm{¾ãâ©çûCÅOG\~·– €ƒã{ò„ÿÆøé×íaÔ»_r-»°áFú {±è×ÏÜV¬XÞ°øh¾>:3süGþ °ÇîÇÒ\$?|šþóÓ5†1À§DøùÓô×O¿³×ó$ÿÎ¥_|:2óÍìà{8²“þÚÌ7•9N€ (W>Iß»ÃúO °“'ûUN=u`ÒßS?Ç‹Áukéîõ#3³_Ò/^Æû¿¿n öÏÌ[S8°Ç°×8ûË"ºÎNõéÚñʵî?鯪Åß`ì?:ÎåŸ ÀJ¬ï'ùÇÏ®ïKâ¶möàëÓŠ+Vj À»*E±êQ×ïÝÔ|ù,{ _>›ð\)ê³0ñ¶À{»:€U$7sð»×žº:.ïeƒà«P@β/ïí5¬vä®ïs¢8‡€ˆo#ý|~µØ÷4¬6FûÙàœW"3S¯¡ u©yèäõ|kÇþ»×ó½üåçÖ×®Û~ÛT{ž¯|zAEŸO¢E8àw¯–—¿å/ó˜õ6ËÒk=àgaç /CèÇþ610ÚÆË°~¸<Ĺ¤Ú¼h¤Ï`äOL~MÎý”ßÍâÝïŠm{¾#â™Íù6ü!âgÄ#2¿[Ì?>¿záØz¸€ýÁx(x>î™O¿ã@íõŸT¸û}÷zÁ9WšK“Ëæœ`¸Ã8Wð ¼Â)š+õò_'WÞ=̘|1÷ýô‰ÌìÀÅ—jxãs[‹°¿e´û!Ûá1æ@ã_ìþÎQpG¾oChi¯v<òñýèÇ pbYqVý§üÍÖkÆJ°8?†ÿè|øxÊ?€U{× w/‰†=hÛ°ÇŠ+Vv€wUNÊU;»Í§'र$× BçdÀl<,ÆÑ^êÂõ#l”ÛUïÏ9 lDï¯Ü>–w(vøPYŸªn#ý¢&5}ØQØUÞ€Åû‡Ë¾+ÃEfS©ø¨~^w-ˆÙ¿Sÿ-³Cò!C 9ÚùÌ¿(ˆ Ì’õ»JW𠊵ªûÛ0á¿ÊÄK³ÏˆOè0)„> Àš?qù5Ø?¾R3·=ß1ñDù6üÁñ£â•ß-çߘ¬˜ð ¥_µ§nIL5€*°XåºÁñõSÛûÁŠ À›àØ Ns€ùÜ[Ç_¨Æ¬§Ó¨îŒ’½™p åžä)¿¹Ò%ø|ã$`Xã<ÿp/îÀe[Ù$©EꓳT V“@ç_ÜþH²‡´´ê/¯ÙÞ/Ãùÿ¤¿€ƒøËÓiùÁþãóáã)ÿ Ví¹$ ö’ù‡íÁÛ„?V¬X±²ƒ<Ü!ùWðbùàx 'àİüamk³{=/8|™—ŽÚús?À«±S7òõG×øìY7 DH?€‹úÔ¿nýB°²?;ÌteCóÀl¬Îx °“½ù:åºË¿Tðkç3üÓBKS*ž¡½ô€–]Ò¸éÇþvuø]‚i6âÃþÐÑ@‰Ð‡¸Š?t~ –…Å®w¬ùŽŽ'ηᎨün5ÿGÅÛJ¿j|!0&ã¯î1Í2ü x/Ö RéÀ$¥%8‹Ó&‰ªqžƒYèÏ%^ªŒó/nˤßõ:DÅÒ^õxä/·Wd×çÏ¿þSþâ °œì?§r>ãxÊ? Àš=ì+Ÿ.8 ý‹È‡Ø&ü±bÅŠ•àw =€§°›ðè.T[ëê¨>Tą̊cÿ?7Ã9‚l› êNï?<\îû®µ£'/æfn^)‹ÂÐFéçð Íçs€•ýPà“ºÚà×R3ŒÊy3`vÐj³lÚD øµó™þßRP-›]Wð+‘ú±¿•`N' ÀF|¼YæJî? U¾%ôaFþDç×`߸Vþ]öç;:ž8߆?8~T<¢ò»ÕüoC(ý ·ƒ b}”?š˜×OMï+V,o^:ƒ dRî€Qàpð³à0€OuöH.»Wòå,is*ƒ¥‘öCME¦F6ÁÊxQ™Ú0éúå2,ʧÉeBgR6óëGàÔ ;ÎÔDÊÿ$±ì ô£e_”Tô€ß˜Ú‰ô#ý™¡ÕÇÇÉL=¿ õðqj†'¥°îO\~MöóÛËk«Ûžïèxâ|þ ø‘ñˆÊïVóïT]˜ŒwÄUØ©”y·7¹ÖGù£‹qýÔô~°bÅð¦% äüˆ`¥ ´MÔŠÁ'æâ§ 6Û¥8Df÷Ì‹ù@ ˜´ÿ%Ô0 Ð×·¹s4ý>—±þÅ퇧|¶€¨ÚCÙ«°î/wóCuÿ)QX?Îò_.KäTËå`ÝÏ©ÿüèU¬ÛTíŸaÞ&ü±bÅŠ•঑ù2H¯ŠÓçÆÐñäábŸFBx›àìbjhAV€õ:U%Õ3[¼ËÿTRcNÐÚ¯Í@ä-&¬¢:ØÆØ¬W`@'ªB¸Á¿Ò…w¸\­ümëþ†¯ô†ñB`³N˜­»y¥(gjâ]„¾hŽÉouµ¿mÏwt<‰ p4SñØÇæ?€‹¹¨)ܤ~€áÕï¼'W3ôŰqýÔô~°bÅð¦%»à¥-ðàÎÑ•—ÄŽOµ^GfXL U€Òè€Õö&½¢¢õ%(ûøÔ¢Ï<Žó/vˆY¿K²fa¯?ä/R¢lvüÚ·à™×I8[­ ´iO¶¡òeTÎôñϰo[¶bÅÊßÀÇúÝåða»ë÷TûÉö¿DaØOò@®?Ú>¦‘ÛÇœ†Qör³œ¬-ÛTtA¦çëFú‘¿`¿ßºÉ­2Ø\Œ×Ég¦`Y}$c}‘—ߪ\«|GÇ“˜ ÀF<¶À‘ù`:Ÿúu†YчåH¦¾$ìd2yåú©éý`ÅŠàM‹·&WkuZçÒ›à?üWž¡” ÀáìVýÿí›à4ü¿A𩬜lTT{ç4Ü…u{º?d4>L|üF.¢Ó¨¿xç_Üþоïçåoš=±`ä/®bÿ 7VnÄ/ž·Å0ò°a—c°lQ>Ö?ümØŠ+ïZ Z]‰÷¡‹®»|F¢ðB‚2t¼B8Ò³;€½J9Wþ{çÅuÅñe™]¬Y¼8Lm“%I©›vlÚÅB¶ÁQ‰qIÒ:X‰@b[§5%r!?¶4Uì&PƒÃÃMecãb“ÖF¨%P"!êª-±ú@uŠ,,7•STµÔ}|L¿Tª:w^ž{çîÌ®wÇìÆÿ߇„»;sæœsgöÎßwæ\ª ´.` Vw’²¯å_î$[Îà3‚ª:ջ颯PUàÙ `kè˜ؘ+ËÝxq¶7üDF+íЯ£j1½þ*cŸ‰WªÌ$Ëiù¢ü³äG×0¦‡{=ööl°SÿÆÀ…r¿ä¸Ðßù´V¶>sþ¸ùHæhÇþgúÏ)ßÖëÏjŸÀ¤Ù—jugY{q `úüq÷zxÖ(Ó§eZ5–^Ñaz–™,ºXj$ÅÍx‡QÓ‰¦,B}n©ÍΨfOÐÏØ’Ðw©Ebƒ²I]‡U†ãŒï„ý÷â„Oç3$¾SÖÇ`6^v†ÔRš×ã8Lõ¿Ó °%>Vsü1þÀ‘ïëÛ†Ü7~VØRE·Ww+å°žŒAØn@N¤ÖŒ&:‚¾°ºÂ¯G<™¯Ü +r†üŸÜy¸|£¾)ÑE ƒq=ËÚOToÖÖ…Uˆ]f#€EãaMã=RÑŸø ¿¬>È#¹òý~ÿ‘ÏPƒPüSÕ`gŸ‰w¥:רà-Ñç*iÿ˜í³›µÔ‰5Üu^9öl°SÿÆÀ ‚²üMÊûÛ!ŸLó•?^>’ÀŽýÏß)ßÖüZí3XÎXË5aK7ŸN˜sþ¸{=Ÿñ î:c~Xj;åŸÓ÷eêDgá¯Bˆ´?Ž3Àl¼¬@dâ·Æë<Lõ¿ƒ¶ÆÇ `ÆŸì«ÚFúº½ñYüaÚÀ€û&€Ë÷õÍ:D Wç)D‡ÏxÊ“ÐKdJÉ€,ÿŸ3 Ëõ›æ?²íXØS]¢Uéý†7лó|ôäEef,{D©¬j”Ûf"€—IRÕp LµeŸŠßØ{±@Ør5>AÄØOT{VV ÛºÏGÛ®)Ç·àÍ=j½[ñØFý‘Ïà÷¼ú³²Ë£›bßðK’äçÝðg?å¶ ^ìŽQô§pèíÞ»÷rO'¯È¯|¬@ïåÖ¡¥µD[P•ñÉÃsõÝgå„wåq;’cÏ^;ô¯U Þ8+E‡;…âýnô·S>éþæ >*¼|ØõoòýOß)ßʱoöGû#‡ ¿‰ÍÚsÀœóÇåë€ Àìøê0Þ¦²lëôÅšã¾ë}””¯Gã÷uÂWqg}4Ü7½Ï*XB#¾Éæšß]£Ö¹ªhißqÓ{ºD Î¼(º²ÃWqýbsóÕ)¥H“¬À¦›£‹ªÕÂV–ÕÍCôc¹¼]¿~¿¢¹Üñ“ Ù²·×eƒm5ãWö9Ççô½¬.+®_êð}W„¬{Ìøsx&L¼¬@¤ã·ÄËÚãFªØø0Ÿ.€%퀬?›‡.M5¯—¢mú̯C|¬?Lp?°Yüh‘<ø M==‚P¯= =³Áë€\›·Z]•mÇÀEÏjË´„ºJTë^²§¬fÔkK¡d¬¬ÏÓm-PVd©Ï¯*0k?aL”­š/ú98÷ !p£½µ§Ók,ƒ¤<®KXû†Ÿ ¼di×”/{_Ye7|ÍkZ¸ØbŸ‰·\É—Ðòxyž¾.,å³½œo½Ãå>ͱg+€ú×*€õ“Q›–Mu;å“îo®à£òÇɇmÿ&ÝÿôñòÍ"rì›ýÑÛ3¥í9 `Îùãîõ@æ `v|uoSÎV2}*k’S3$WùÈgÌ:æ©ËÖ\â –Úeÿ;’±°¶q¿q•ï?»b,”5¬OY G™+–Ê´=ýÇΨODè7‰ËÈžC0É1‹ÑŠEÚJ;jí&S|—xñ9}¿¦Cñvzß:RÔ‹õ'Æ °9L¼¬@¤ã·ÄëQf€gìñ£¹,ñ;`&>-(eò7 ‹?EÚ±*|¾ë§â‰õ‡iCÒG/*íªTíU‹œpãµUñŠmÇÀäKõmK±­§Ò[|£}giU{Õ‰+mM7µ¿¥Y߬,¾Ñã‰W1öÀrL­yò°àš-zÙ ìáC•²Çʽá÷4jñ­äÎ°êæ½ÅÛ»ùøÒñzJ‰½ÓùÆÂ6Œ–ü´µŽV–šnœ^Å?:Çž­¶ï_¾6uwªûÛ)Ÿtó•?k>’Àqô¿ùøŽù¶`µÏ à`µ×Ü7”=Çw€yçË×À³%<166-«Õ2cÀžPß½±ñ©f?O°”ß“÷¿àšðÀø¤IÌl–EÓ]Ó1W16>Õ¯Nj†§Æ#Óêª:쌪¥S™iY£úRˆš¦”j‰ùéÉf?Wà:~¯Ä'»º‚,ëÄúc˜Î/+éø¹§œ°¹,ñ; `:>V[ý ÕNÝ‹T(»ÄÓtpß0ðpkëàúx¶\¤t’È´Sˆñ„¦ßŸ^9O^ÜIÿÝ– ÷IúÉ_gWË’‘`\v¸ù²ñÏ/‰‰Ûs‘¹8^"ùdóç–výïöù•T.yçOû €»xáó-ؽ?ný¾ÉЏÌÜ£¹Ò”|MûëêlAªô×yÌ?¦¡¾~ÉrØ:}'Q=¢Ä³&yVNžËqaͺ1 '(ÕQñqî(âû^uQûß‘›)F¼–½MñÛÅ+ÙÝÑýcŽ?®{˜XC¾ÕŸ:∜² è‰3>Ž?‰ús$€ (‰ÔØÁ¶ç¢L½Ê>Ã}GÌÜîÿL;¿p=€ À2 ²ÒVë×׿ÚoJ¨ г[÷ ð N»AP]µ/ºl?Óý€tÀHqŠÇ×c§Õ» º @ÿÏçó ×ø8à¬4ÀÁ>½‚¯¾^PÚý8k´]sùðl0Ãígº?üñ@ÕÞ–_í==y3_„  ÿçÑù…ë@»(€wù¦'OF£Ç&"zQ£Œ"%õˆ©U›àŒ£6O¯€Ò‹û}ôÿ¼?¿p=`ׯ[i„ôUë g^zƒ#Šëçü8Ó@g4ÑáÑÊ’â¦ößaPGÿãüÂõ €]oKûîEfJgâD¤blêÞSœéÿô?Î/\Ø­ñ6XGê³Û–xNoê$È_À0  @À`2 @€ €!€`ã- @c¼R+€—´ ·¶^žù LÚëcÏ?ñÁÖ®ýùû¯¥i²¯Þ:²ô•Ãÿ|m<4ºÉvuŸÍz汄ŽQôã¯+÷YñÙgHtû„ìÍBýßìûåö‡þýy÷pJó‘àù¹©y¾hño>^îvùd[þÞ2ÛÞü˯ÎÕõÃC|;å·ád¬®-¶­5§T‹©Àeß8âx‡´ÒWgÈBrÎýI^Óù"¼¤F4öôt ÂjeÄ-­)ä:…@}ï{Þ€ü¯µkß-Õë/íNÚcY|mY¢Xáù˜3yÙo/]þ^÷ùhsÏÃܶ«X>XÖwÿz°ò¿ÆíŽO.þ²í.[Ÿ^ø­U‰£ðO ²~Ø»3'Nû ‰nŸ½Yà7½á÷öüqÃßóÝÀ)ÍG‚çgÒØ#¶úÉ‚…ïÆœ›=úçO¼Ûsû£ÇæâúáŸ!Yïž>/I~ó]‡»òCÇ5Þ&£€%I’àR(€×ð#3—öö¤£^wàʾ¹÷'Ù|°ù*ÜÕ¾÷ÿìLWÀg\vجì²ËQtu+Êz ¬œ j(r–óÇq±½3J ŠÈ¦V”´)gQ›”@Ez¢‰UkýA©ñûãÎZ9¯iDïZИS´JÁ´¨e[ÿ2ÑXsïÇÌìÌ›7°, ÒÞû6]™}3ß÷}ogæû>ó}ï;ðŸÙšöøEÖˆ°=ÀÏ\0løßi凼µÕ}›Íkëÿˆ¾Ï‹ IDATÀè—úÀÏ:X¶ù•z9ÂJov84ëm÷À†±5`O,4äT lØî °¬e«m}äßEÌïÀŽ­¶P;èù ¥ôC(ç¢"N¡?ö5æ*mÌ4é°µÓn¿_w«y\ç]û}a®𤧠…yçL˜e à~vÌ ¡‹÷õüäÒ3E ‚l¦å\Š!['F~é»ýÚ]û5»½ù'Û \?ô‡B£?e7g& €Ã#÷ {ãÃÅÃü¾µw;´8¡â]zþβ 9¶Öä_­}Böô€µýË„ &LBÀòD¬WÂ&‡»tDØ6ô`8æiokËi¹Ûí^*‹‹£ |Ä_‚à¸z=l1çUÁ-r{@8öÍzÞ§µ83b—«ú~B4üüTp°')ëLŸ¶ ÷þÉ5(×ÎüÇ„ àÈ}þ<)R À½ûÛ¡Ài puj\Ég®¡ Àsª|ð¤ìékû— &L˜„€ç¬[Hã¥GKgLö²¦\€åñÖ‹n‘^êÜîrŽó^w· \Åõ‹ÊÑ0gtÓÅëç'Ò8õ?fŠ€ÍUÿÜòæ†ïßj.@4W¨%®>Û& २Ò h¬¹Qcp¦$óQ~•2)fÛ¯k¶Í\µâD&ÿÂZ “å7ó'RÞü×üCxl1yYiã–“³¸dð9  HO.V¡/” ¯ J€„Iw7|+g)Ú w†«6Qý ËM«&öpÊöYŽG0-ÇÃ6õø0"{¾¨ðëÇöLž§À„ý$ð>ln÷øÚ¬Œ¡°÷ÏmاÝãñœç×5”V©ÀöuÎ{ïZ»ïÁ&Yáãæv´×ù Ú£´_1;žtÚ¯8t¸ç§€ƒ­?:OR·vÞü°"XûúvýÐ$:¯_•˜0ù¥pøl´ðW À=øÛP0ízWÝÏ{½ž- pm­³¤Ã¦|檮–|˜ jg-w.h•vÙÒ¼´«%£åæG~à´duµ´ÜÔ]ó»pçæ:ö¿7/ç¸Ó¶W½³¶ôJË5þ”lÂB²œâ¡ÛÝ4N€¢`à­€¥$Ñ"€¯DùŠÀ“ß©€ü'prc&;Tž²qÖã|Ž újÃ.îûš?‚uœGþ[vè‚èЭG°;€`ÇCl«ô‹ßr®Ð$& €•åæõ&ƒnýQÀ\Ùeð3'¾wÂp:Fy´_rb´úh\z¥FJýö—`gƒI®ßZ“9úËôíK~—G»›ña”ý{Æ©gQZ듘hc~l0iôií'Ä{êev¸ëßH€½d ø€·âƒ|¿' ÀŠöö[Šäçx„¨m?qþèpÀç§€ƒ­_(N¡YÍu¡<<Œ}}½~¨FÈÏ„Éÿ'‡ÓXßßK×»ú~ÀõlÝ A4v]GàØ+ˆî0àÝ)®e5çbâKFåÆï "p–vÁ/2ôrVÍiÀê2J:ÒKðæ±0'ÉèSvÜŠ X–ɘêã NÅ\ÝKµGm/VK®¨`³Àªþ¡èÓö/&L˜0 Gî˜>N}žúkD½`sÏÂa¿]M–k²ü$ M6zìòUùwM[ËGÆLù®•ÀËpÐT`ËѨˆÓÿ>Xu–‡k‹3ÁpÝà  ÍÇÁÒ>.Q³æ‰vZžÌ3dÉmB?vøç2+ç¿¿»P€•å‰õ¦ÃÛö.üä_ù%à× ¿ýšózÊ÷ÿ‰‚yŸòxÃÉY=°Bà GÂrŸ:˧îy¿1Å”íBü›b:üò¡ƒÛÏe¢úÑ*æXkõ“ís.2ÁÈoÜx”i:^ŸÇÞóÎ×<^f ôNnÛ[¶½‘×`µý¤Ô5{|++jk»ÿ8ŽàÛ?ÄÛ ­×fЫŠãñÝï~Ü.¦†üë»?¥¶öQ ¬lÆ~ÐOâoŸºÐÚ¯ê_ôü$8èú£—ÓNo§Ý~­ûVs÷vû6nà¯ê˜YŽ61aÂX ÀºþvÀXº&Õ÷óÀ®g(:ðqÀwwÞ++›y^\‰”‹*ºƒ-WŒIeU]ÆcaàÜß`ü¸m8ŒþÖ¢9ÕÆcmIeáU‹/ÃÒúueáYÕˆ`/>p³Ë¸³}Jw@E,s ´gaÙìÜ|˜êã! þ­Áx§m€àÅÂ^¬@UÛºšü "ÀDÿèês°‹‰ &L€#³Fà·ÍYrOŽýÕ«K€W~u Y8û#À€|aK\) @ þ·Ñ úwÙ$N,Ä+\£óx0¢«l<êwêS7qæà‘ÑÞ‘¼{|޳’O´{À«õ#‡¿¡ðð$ˆ2;°œ¶µéG›0Ô L¤>•ýèñ^BœêåÌ8G˜ p 4œO`C§`_»o-¿>/C¯À^ð7 ß§À¹Ôéñ-g—Ú`u{Hûc ø1O‰ û›Ò~uÿÒ¸ç' ÀÁÖo>ÊÓ3UÕݺ請eŸçí¼»,ûú|ýÐÄœ5™0À:¬ïo €¥0q?èzîø`ft8Dà€{s¨^b~Æ~p±†€9ê-c‹ñ³Z4iYÜQ-iGBzVLeÄÉ­æ¢?œ%Zö q%Ǫÿ >%Ê Xq%H=4 ÖOý24Ø `ÈWca/ÖËùW×À#ƒŠýˆ>&L˜0a*ŽÌzVô·€g.¾ -^B–k² Oäbµ˜©`wÓ&L˜0a*^:Cò·€wLŸ½²ÀþršCö"–€DvãìWâË’ºåµÀº SÿltaöÏ@N‡ïi‰Î‹xÉšq¡ˆÏvZ´j¢<€7U~A`õ6€'ô#‡‘vgÑXQn.à¥X@½l›3âʨE0*ë|Q$!ëo2ÈofÕ°ª>-Ož% H¿½€Á¸…—¨ôkÚ‡ð4æ‚,㈷5LD†sv÷À~ûË) ×zLz`´Y÷ðA9€}åIÃ5ÂÍ0gÖÿØ;ûØ(Ž+€ïq·Ëikæ.æË\[˜(ñ ªc±ãR™`ˆJóQŒkKƒŠQ 5ˆ¸E$á£ç(”†›@B ˆJ@`L‰(R[ìÊÂ%Ó …„¨‘ø£ ¡"ÔùÜÛ™½Ý=sôÌûîcfvæÝÎÎüüÞ¼ç €-ãü>4&ú™Øòý ØÃýi…×d¯Ÿ—k~ûß ]ž|ÿ¼Í^Ò7œ ‹ÏƒK‘"Øi½M “ùÎ=ÏçsBà‹®¤Q”é‘_B|Ù­ˆ<«¾Kúà$‡„KëD‡€õø!búSnÔ¼¢e#kè·¬ÄØ+~=Àl}ÀÄX%MYûÃö+Fè²þ~TP'þb‘PB&`N?\{R¤H‘"%elZo—-þÉ›pUhûõ˜FîLºG30ô€ëÀé‡|ó–cŽ6ÆÏd*H¯÷¿4jÚ3ë›*GÏ8˜[“C\8«>8W‰ ^-XLûhÁ§Ö©u‡o«ÉzUòN¶UR ^fçCJ9B©ÀŠ–¾"ל3Å€-×㘾.-‚YZ”E*cÖp®®–ö¹ñÁ¥uvМ&Ö#ÓÍÓAx:h™`­-[û/ 1@ÀnÜkÀ_ 7(B&¯1ð‚Ie×.Ðæñôm„[B0PdaË‹ô˰×û“±Þ&yýj«k¼EîÛ–|ÿ¼ÍV`?Œ.EŠ`;­·)`<ßùç¹Ó|N À¡…*ÁXjá„&Ü6ôf”F€Òþ>eW{.éPÍù€àÛ ÓËì•Øoùð2çÅ#`V©Å0[*ù¾ÚÄÒñþ°ýEgvq ‘H¼jŽie ÀØÌë‡mOŠ)R¤¤ €Íëmá¤Àô©»ÁüGSA‚`%X°) 4ÀãœRg àÒJÿºßP9 6Ö@Ëoöü¬YÑ"°Ã'A|týbúÓµ× <Ó>Iû`^ÍEiŒw™µÆöôô ¹=œ ÷qRØå£Ð)HƒdÕÀ¯Pà[“Á×sãC¨î .‘,Ó¼¹ÈÄtI°×€ÍýçEËØôð/(°ó[fôܾfÞ;Fè+·l@%ï@§ÀÌZü›°åEúåØÛýÉp’×OÀzF†–|ÿ¼Í§™"ŸÍR$ Øq½M!óÏs§ùœ€¡…•¬€±Óof ƒeiÚkÈ1sÞ]ŽÄŠ–ÊøÛ‰ôê#[á¥(ÃXä€Ùúq@…§Ûøþ°ýÅi‹,ƒ§üqBÆ`^?l{R¤H‘"%UÐáîh#Ö;[^ _{¹?Ùó»É]?‘ ôÀúçmþpðYûAWø)i–"XÀÎëmJÏwþyþ¨Xï£&Ñ&h¦x­³ä v`èAcâaÎŒ›Ø ö‚¶Údg>F¯ß.r¶¿ €UÓpŸ€õ> ÀR¤H‘òX¸øùÀÛñ¿>Ù;hò³“?Áˆ,å¾wànÀäð/kvuXQ*fúÏä“3ÀCV´qô ðyèHxI=”ƒÔÅênº>Õ`)R¤Hy< †yzÁ|çžçI0m?3¦–Ÿ:Þߪþ~aÍëZX§R¬„ÚòSÍko˜Û‹8ó 9~ðwL+¨ðasóñ~„ ämPý¹˜zø}…·—tX Æ(ÍîíçÆÔS{3õ!¿[µvêÞ˜Š§¹þ0ýu À†¾ÏªíW›ç¶ª_à4Hœ~$K‘"EÊc`C`ò£Á`1üê­·~ PÜ÷ÜùHÏXqhXâÚx" ­ÄèïÔ?ªÄ›”Iì¾ñÇ¥•L<¦Á¬Oá:­å壌,§G¸‹b˶ôpõy?Öë&;Ÿ´ó“ùìÑx$%³Ë‡S¯Ú0êòlæ,¨3QåOG‹æ!à)X\˜€Íí3ãËË%; ßͳD啯{vÀˆŠú|›zõÜÿd´‘æ¡5·ç`Ö«2–o©½|Ó]ò‰=CùZ°²“|ù3# ´§ñôÍ$AjÌçË3÷˜^ïOþü®÷ëÃsÃc]pjçH2k©»¹)ßi²wP|în½8£¾ Ïv¾kìó<)FQ1³æµªj€ÎeÑ:^J©ˆÅ“ùêûHf!«JÀÕ ½œ¸¡²jQÅÎÑRvñ+km­3²×R~jißZZˆÉ[lfæúÃô×›ôñB+ºþ•`N?€¥H‘"åÿÀƒ§þáYôfKÕà$ É­žÎžK9ñ<À ƒÏž¸Ö3¾³§ûÒ¸ ÏÔbG-ý·ç6†[ίÙ˜¨p=ÓWŒ ¼¿åü—Ûñe´²s[μžr»·¶ïÙ¬(…'޵œÿÑ{xoÁX€'~tÓTÖé÷âm\øëÆ–u_¢ º`ºz_ $¬ˆPSeÚ®Kæö­ã+Xd€Ñ˜üàè)¢òJÃÍo£lí‡F"› ¨ï¥Ãé´çdÖî<ü†€¾/þ›4<ݸ2'!w XÙôÔýyŽ) tâñ@]›ÇÃëüF°ñãgî!`zº?yö|ýôCá,WàÔÏáŽp¾;ó´)€S ÀŠÂÎwæy>PVʾº|ùv[ÚAÛèóÌb–¼ðÕåòË·¯6kŠ€K:TšWß +ôö·!›ªRÜß[×~ûêEá-À–XXŠû`4ØþÿØ;à(ª;Žßæ.ËÍæ²9r†„?ÊßÁ#ä´UHå¿h)C5Í H›‘I”óL‚$J«ü‘!H@0§€%èhA;@±i‰Ä™ J˜V(”¦´0 30Ý?÷o÷vïv/»w—äûÑ™ðîöíÛ÷{{÷Þg÷í»í!ùÙ?úö\Áß^ð–-q<‚ãU-À|<~CÒ^Ç ±`)rö­^ýá(E›z-&¨w"­ÙVÒ@¬Vš¢Ù4EùÞ¢}ûï¤âJФ¾AÒ~ÿt°áQå«OŸ>}r»` [ôezãéÿÝ]rL!Áß½“Ù¿LýhMKm¨ü[÷ÅrÂÈ>ƒJ’‚:†¢¸~$Åœ/ì)á"…MÂüï “$ù)e.ï_+å;&Š9»\­ö–7"×Ç·;Q}„Ç?p€ÿ§¦$ê¯÷ù©¾üÔ3cì–YV_ÿ‘EY‡ñå ºˆç¯Ü4 Ü3ÀÊé aŒ¼–ùÛeâ“¶ÉÝgîØe ùÊv(ßÎ)%xßWšÍÐ÷ÂNkèw=×ùåû×ÎÏ=L3;§Ãwðt¸ãU°ñÖ¶C&É.ÞV’Öa¯©…į㌾LdÒô™Êóÿè¾(œk£²Ü ¢õYâºjo¹>JÈ,ô=¾­Cýu(¿´.Ï,5;aðÿä2_€ÙGÌ]Z€EßgG…Ïå*ø2§£5DJÎ-S V‡6 0pWè;ôŽ×x"‹‹,þë™x™0艹cÕLÿÛýßÖ °Æ´Þõªbk³ý¹>JÆPgãŸcýÕ•O•—$Œ í¿†™ƒÍ‡$'ŒÐ)Ø |CåKÿÀ‘N=¦¨ÿô­ íû=$0@€!À‰/Àùé{ª·Ö¸÷=â^úª´ÎÁ=j¦M!çÿÕý¢Ü å„`{ËÝdlXö ™û9¤ˆõ‰Àúíîò:‡e §ú«.»FšÆó4'u:·òÎb| ¸ õ·9nwySÁ;ã×&ß¼°Þí^×TüÅ0@€!Àkq‘oRÝBÁM¾œ’ú m˜vµv¿'+P .À®ÖfߢÒ7ù_ SŸð°?¶ÅˆZÐc±­¿êò©ÓÊ-¼3nOEÙŠ ’ŸHö®m€Ü1 K¿¬¯È+ó\û̪[•äßKô;À†Êûì¢ÒÍm3²Õ'‚€pX<·‚Ccަ|Šîg2e³‘ø<p×éo©¦‚'Î]ùÄÇ5Ÿrwü]åùÊ«Ò_>`€C€Ò€u/¶u†(¹´¨ÙéŽ.[\—<¦]ì×*éráä0€`tÈ€#Ä€`0 Àèo0F @€0 À€Ë pZù¾Õ«?ü8ðB›åKå–ľ=²<©ŸÖW¤—yn —IG&§¤¾¢w¿èJïqÜóKk‡‹ÙHÇü 1‰O0½¦yŽTïV—§òNó%Uñu-»ÿàúýᤂúlÂñgµõÐ+ÑÄGUyO×èneVÕWä–Åú—Tœn.óy;[éödÍÐ4ž:·Ð@€{÷ë5M±‡ïoÑÞ€\þå¤$CÒÊ­Þ¸j›þé[\œ¶ƒK1é“Sã$À}òó·k8`õ @û,P2@ó>3l1–yN¼@·”K€zÄ'b<ÂůÇ4ÂlÎ:•¡fç›í-O…ñãwílmýÊÎÑà7`róWöV‰údG'ÀúÅ#šø¨)Oµï`\¡¶Dj?÷ù“;©é¿Nþ¢WŒ‚óó%mQº; VÛ~th/kž;Ô4®} IDATÙ{Á9R;í ´_€Óf›R^9½mÛ&“©?gÀ¹³Ç™˜6™R^`{àÜ)lj[IOSÊÛqàïÎO4`ó’ µÌ1_öÎMêþô¬S[kܯnë'™ŽÈèË„yOõ™AôÌÁ–Ÿ‡Í>ñiãëÙqŠ/Àœüþ!½XŸˆñ?ª¼ä a<4\Å6_´ßS7FnƒýÕõÀnoi»wQ^¿WÞ± pP}¬ • *XÏxD5åÅD€g6ÚXc³Iß‚/m*Hn òS6›{ßeBñ¥. VÛ~"×¼½@l8§ª§É/Àû[´7 W½µ”ý“û‹q¦'Ù¦÷4U3qΔ¤”ÏØ7öqs£ÓÖ 5½¼´spÖbuácÚ¥´.Ϭfi«\.¾"þ«ÝÞ–Áˆ­¡Ò_Ïʼ$À¢újXçx¨ŽO ðòóŒ3wü*ùƒsÑ °Tþ‘EŠ[@sÖ¾½@,8÷ÓM¦±“w€#÷·ho ½Ü-ù»ý × 3VroßÀ´,~jVÒØC€½ó…• 0»9•Ÿþæa¹}æ o‰Ó‘Š($²>·*]QV€IVög6/Tu X±‹ãÓ^á3RÏ8ŒóT,i# 0“jËmq¾ÙÞàöV)ÀúÇCm|M€GeÉ}V©¦ää›ËŽF-À’ù™ò”>Ø«ƒkÝ^ †Ìô«¦•ÏN îk#ö·ho 쟈õ’éa¦žÛÓÄM½Êe:fA<}\Jç`#aY…¬•¦RÁÍaq:tqžeK¶*aÑU€ÕÅÇ+ÀÌ ìqßÜi8$>í>n’ú×Z…L(ÀWCŸÞ|ÑÞvÇ/À¡í­N€cMã{î3Xv6BjÓÍ]6*z–ÌÿNzü¦@kß^ ¦üÊÉQi¡¾¿E{Úðž7½Æ]xæžûèØž¦W¤ûÿQ~ì;çF/o7:Ëxy›ù÷òQ’ìOзÿÉÍ¿×éÜeÈ,nt6îß.-xãÿBô,xÔº?T”ynmdodr:7°–¥¬gõ °ï®Ò^ß–ÎOïÍ›µŸ¨_H:°†ÌÇÍó¬Ôºç漎ø™yÉ ÁæC:,ž×|«J È¢ü#¸‘•q,ì"Ôžkþ¸åìÆìSÌ/Jî¿]ññ 0{\ÙõåÒ|ùÞ ÅS‘î`•ñ ”?õ@º‘·ÃÌBbØ*YÁèñœÂ‹•…ëY1éKWëÅæ–¶URÌ¼ß º]ìºj¿Ñ/ À!õ àµ×¿r¬á,·×¥!ÌþÖ^úæXÃ2ùõˆ‡âøpBÇo§ÖÊ´w¨‹ÎO•œó»ƒŽ²“Ká¦VÕW°ËÔ|ÈôÞ“R7{G/ÀRù©åÄ¥‹ÐIÄ+8>Þ§'¼×–—ޝà󥪽@b p·\n!©;Àáú[´7 …ç¾—ÔwxòRnBtÊÉgL¢ì;ÔôäT½x c¼NŸ÷àÎÆHîÝW¬ê{g£×†ƒ8Ÿf¸×wA» ¼aÛj-¬/úoL]76yós«>@,ÌfÝÖ¸…d·]¸|€à|×/À¤W€i›ÿfØx1¥û÷ ^ê™"³OHéwò²þ¬/ü{f‚+—Ù:7ÅX”_J€KsKÓŽÖ¿C£Ù_žpÿíŽ_€¹áºD} ™Lš/Ÿ"öàFÿñ¨‹OhÄUB¨Òªê¼îËÌØ·{gŸL5ÿ/Ü®wævŸgß>3ÏsçaÙèð¡Ç˜X!Ìîê( ÞG¤kà>¯8llø— éKÕ ›;.!àÕÇÐ “^æYŸ§ÿz÷¡A®ñmªX˜Sàt^õ8€p°Q!ƒ_*D‚ì6Ó?¼áªöïž:ÞˆЉD׺{Þ:Ù¼ôÌžïäŒÀ†ö€·ýÅ &þàRzâT_GdÕሻgû»ÝÃUèûÌý§l À%1c¯l;//ìèS³çcÏ>¼=ØöùëÝ0Ò,@™±Ç>GvƒÅ%Ëq¯×Õ…|/<öè³ÿÞ…©¡Mü)0èçá±zÇç_ß ß}D"4W÷\:³þæø³¢¢‘–§[àÚH0 ?¶<(x:}ö°jh?*='~õ±‚—%šý-`óýi€C½ðþ]sá¶ÒŽßT®UÚ‡Žu¯9sñ_€õÙi`;Óº{qö~"¿åì(|Ë$²¯É¿vïg©éÀ–ž·ÒßRRRRRR)ð¬ê9¸êQåV” zþ7woOåÝ›à®oÊO –}yÒáÿðã²²àpî}°ªß™×ïÇ!UaØÐF€GËÎvƒâ}üwàAæQ/¼P#^Q™UÀˆ"Ø ØoîÚý½¥¯;Ô 0Àþ’ã¤ÊNÀæþ‚ìoìY ‡ºðò Q4Õp‚x`KöÀ…S$ýZD™mC&Þï«kuÀXª{ºÐ¹ e %kn™þSµàÊAßÐc¯7Ôè쇤u؇˜=›öáìÁ¶wBÚ¶¨8Jxœ;ž2ÌYë¥k Ÿù>…2;ÁX Öø½áòzñÞŠÇÐÒöe €Y³Ü9R4®#xP4ƒ"À€|ë1×§ÏVí,ð¼\Ü ”¶ðþf¿Ït®¶ÀÅ î èöy¦O-ïRJHÎÙ¯ð’i Àf{±öÉ)óž"Ž„÷¿À¾fÿ&q?KMg¶ö¼•þ–’’’’’J€gU¿€ù—ðòg¾…V!é žÈK§ €!¿ÂØ.`°ùåÛè ÿ|H¼ØØþ4Œ#ð}LÛs€ÆÞ`ð€/w%æD4h®w¬ªmßƘýQÏ5À²`­LóîŠÖïdÖü·™þq ò¼Š*óŠÌ&;C–[ljϰÛY—C¯Ô£µdé§Àlÿ)Ù‡ÖvÒ °Ìõ–ÓÅjˆØó±mÆ\{´ìõ@ŸRºCl?*¾_+Œ¦Dоðf8ŒWåšÖß }ûAëÛÿ¹"׫°à{ §;£ËpàmAà¢tŸuâ9Ð鲇Eû ÜNôjøÞ/¬¿Ü`ýþ´4‚g¸I›N&†"úͯýŸÒ¥L›d6·cíÅù#Ô‹¯üPpDØ|<ï_û÷³Ôôà„Ï[éo)))))©xós„ Yö¥ð©Œ.>xfÏ2ᜬIàÑ÷àÈÿ‹?î<‰÷#<È|LñXÖÛÃ0ÂaÔþ¤ð`ª™ xÚVG fG=?ÊÚâ¹¶S© Ì]¿m‘Àîö!a83ý#ÀÃCøUÏ-\ƱædÈ€(ó†®OÀÆö^²‚Œ `èßO˜ï?%ûP¦ƒqözƒ½8§4"ö|lÛ‡±×áÛwÍ51ð ,‡íÃÜ ø/"ãÈ0Ü Zݼ‹þØFXp=&n»U4‚ÙªÍÛE„³ §Íí Gd³‚½TY X¿?[l°ShlôTã…?6–£3^ñ×»¨’àÄíOzú¯¬°É^‚ß7ÍA‡~ìñÿÚ¾Ÿ¥¦3[|ÞJKIIIII¥À:ÿb®Üúýc𩜱{“þL>2G”•cR¯Õu©ªÍ€Öõ>Àâ5À†ö( 4ÒœyVyy¼P£¾ŒC3cÎWsW–¾ÞT5oõ邚™½æÌ•*¸²fúG€GÃEY”\Ë<€Ï:R ¸=—··ŽÀÆö<ÓÏ‘<Ò˜0ßJör? 2D× ¬D0‡{>¶íÃØƒkT¹Þm,“)¾uüTd‹L>ké®Lü `¼¿[+ AÃh`Áõ˜x¤H× q8mö°hŸ`-–IÕÅù›`óýi€Ë»´b[åQø±¤‹©¾ ༴XÛîüÛlªúdØRûù0—¥ZÀŒ½þ5ÂWÀ(’Î/ò¯ÝûYjš°•ç­ô·”””””TJlà_˜ëÛÏŸë=¿‹$Á"Oä3nšª2HºjâXœÚŸ–b[ ¼Š*çþŸSý.­ª‘ÍüÚ¼ï…"`„A’`©êp…¶ì0Ó?)óc8˜𬽻ÎÃáôлã0›r–à_PÀ€aÒº»\ÿ)ÙG¤ŠhJöø4b‡ˆ;ûö1ÛƒkÐHq×åL ÇQ¤ñØû Ã|Xá–›a“n$`€¹#T8üW;±þžlE€ÍIµUó™AßþÞVÑ Ûl¥ýüZOÿ±n¿Ë¾½Dþ@‹›CøwÂ/ð¯íûYê àDÏ[éo)))))©xùÆŒ† ¿žñì Ï~€ÃÛMäe3?˜rŽÀý%’;V­u^.$k\M/ÒCó.‚ýYç|Ûb0¨© °U\¡S­æ×º-®6¿¨gV˜ÌÄë]Þ¡¡­äXÅ`@²˜—ŠœLý§dÀ%+\—’9^Ѻ¦ëja]Xî|’°»æ• „„z=CQZ$Ç1ùI°&àxç] ÀqTÉë â\ðzý “`Ï#Æëa#Ài³‡å$Xô…ú}°þ€Õ¤X´˜{¡KEÕ¤3 VL©Ë±Ø”±—ÈÙQe☂‹D±Ç ükû~–z"xâç­ô·”””””Tò<ëÈ ÓL«Ís22N¬!(l| ¶áÊ੎kY  C`i1÷¾‡†¿÷ËRˆÃ@š‡fUݰÀð÷ü—oÃØK°·ý«p&z“â@޽ƒŠÛbhSÿàå‹§²yõ21«jïúíE€Áõb0-‰)n#)¸Æ)Cc×>4)O°À=o½ê927º8ª bÏ' û˜ìÁµìî®ËøÕ³Bt¼vbÆ2"ñ·º’à¶«t—e»"I²â÷`ý#dk‡õ2HZhºÍp:ìaÃ> ­7‚—÷7û}ÂðDöO”º"âäê Û­œÀÿ‰Úse¬ÛKä¬ÃUž× Éaìñ¼Åþ“zÂ8ÁóVú[JJJJJ*^¾Ñœkl/þs>ªþ˰Õ0¬'ê&uniþ&u_+ؿ։¦:¨D#M €áÁˆéܵhZ<èyÃÒh¶ðJºãÎÜß’¦™ÚdRm™£êrØ~pÃËØóíGSŽý;ÔÎ{_¯HÒ>€U˜ËËøžü3ƒÊÏP‹=»öáìÁ¶d½d±#«©ÑI£ræã5›éð¶ΞýÈk €Ek€at7‡’.Ì‚u þ Ë›¸˜0=Â:Àð»ZW "Ài°‡ûP@À‹䬿ÙïE€'´¿…:Ày×pcízlp"ÿÛ`;öù\£“:™;žõï8þ“zÂ8ÁóVú[JJJJJ*®Üš±}$áê9hJôòã3Ð ¬Ê?ÿññÁæ€ð”pîò²‡Öì ž»O6ìÙµ´¹r ©<úR5 ä;©¬Fa x™g}žËžlÞ·ç6àED(0 /ðû;Ž*íp$šSò†Ní9זּ”‹íŸZY0jG@ËŸU<—ß¼x^鹈꾲çc×>œ=˜öê0>î~õìÝlçÇqÛ¹],'þ‘D Œ, cð#¦mA›Ø hZ¢’D-‹øÙ(šB¥@ U’ò£H¤R‰¬­jGY+64"mÍ„4‰©êÚ±µ¨v÷œœÏgûÛ!ïW+;ç;ß÷rzüñóÜ=fõ xBë?Ô¢ì§yyyÏÆÀ¥>Ÿø·1«™÷«Ç^~åë›WµæÜS}åæœÏÃ]uáàèýاÐ}6cÆõ«Lxáo«7ªxê‘L}¦–å¾Ór²îÊ9»6Ñ’ñx·gÖ·þJ¾x^Ó þëÎSݯí¹ð—à î’ êÏŸîœy.x*Wcä©§œ(n%ÀžTÿaíø'zý¢M‘²ÉÔËìx(ùÝLýQËÏ—Çã${~5+?“ho9Þ¤€CÄ+¥1–vö÷÷H’¸5VÉLiíýýÛ ¥ÊîìÑÀ®Ùwƒ³ ÆB«]À‚˜ø_Ú¿·ÜM©X|Rƒ™ç]ª}8Ézk–vÚÓO,Õ.n Îì,~Gý+O.f ¹8ÑÚ] ë°JrÜîÒ›§NÚ*–Öoõ7Úsc`ñ126ª‡mÉJñâ³Ê«Ö0_¿˜éeïÈê Àr[•v«áÈåõržú^y««?Ï&_Ÿ¨z^?µ,ÐA¦¼ÿƒ«Ì–î]h$©G–{q°ê9F~ñ?{\] ô厑ûÏß û“µãŸàõ6wä ŸT½L‡—‚ójG/o8_ÌÆIöžp„àÅ–Û[Ž7i ÀÙþÞZñàPv[èâw9¿>Ÿ=*Xù .Õ< õH¦>JÀnW·¶,4ññxGnϬ8nýÏ”…æ½ Œùœû«sU——‡fñ’‹z¯©oaÊ¡àY7yCÌî1—I€Mtü½Þv8tÒX¨—º'úz™¢ÇC>º¾ÆóËìøa¼`kí-Ç€”°™êÁÎÎÓúG§˜/š†÷èòž(h²Én·þ—ò©2ø@ù­ÛåŸ|£^ïQ—ô„>ˆZ{ž O§˜`ý¾yv­w9¢žˆ‡#Ù[Âó²F­_nºóÍ„ôÕ'ÁòáÙdR¨¾1^ï±y<1êçþ°*Kw›`:Ùë3qß„,ËÚ€×&98ðÕæ ×Py ÊÿÚß›ìóÝùï½o“-ïOS“ìkòÉnW𡺢àh9\/mG3_dê£]£*Ë6OÜúÅýûµPÿä”·¿óÏ/Åí»Ì··*©õEÕ+²>SËB÷«3©oôñ5?Œ©œµ~wOY¼k€uyØR{Ëñ ý8 cn=ãð(Ͷÿvb†7ân´o‰õ™)êŠúì8»Ô©>jWm>¾õË.·ƒSÝŸPΑG»ÉÔ'^KXÂî´€-µ·oÀãß’a»óÔ@ƒ/ßœx^û(-·µæî§>6›kßösö¬ÈÏM_äýÓ7Žö'“õH²>i Àé®ÿ§;ßÒ ÎðöÝ/ ¦¤Im}®«ý±åúš/ŒµìLS6® @¯vœ­—Š¥??•j ïäžÁùUÆ['=œõ™­ÞƒËÐúÑ?B—@“ýÉ\=’­O:pÚëï~#_Ü©î™Ìo¿-_»þ¾4=ë;òÚž}g«r÷ËVëkv¼@€Lóª·_ëÊ@öµµámœE}l®o¯l¿4ðˈïšîäÝŸ8Þö'CõHº>©àLÔ¿èø—]v‹8µí+8«Cú”Ö§N.¦w]œNP_“ã…ÿãl›Äñ€ŒøäW®u-íh¿=ä£Ð`¼NüÅ—©ÇH듎àÌÔßU`õÎq©lßl+#_ŸëͪÜö¿ëOU õuy8§š¬~ÃÂñ€Œ¸ ˜$à) ²>ºþéÞ~ ëãd%ÓÞ@€LE @`À€ À€ Ó @€Lƒ 0 @€L{ Àƒ ÀÞ}ƒ§Ï‡Ÿ¨VWXkÛòí—ºK©5†üïNZI` à}Wj’±»O{Âß[«>^{¨N·TÉBiq¬¬È}ÕG±H.¯›)-üÂ9f{ Ò€½k¤œô÷÷HÒ‘€ýkHÊ=RNs8W¯–b4È®‚‚=ƒÃöG÷Rl’ ÀÕ½…’!Çno@:pï¡õ‡ÿç ´&·¾PPãꎜ¡àBþޏ rykîÏ(6Ö°ÿBTY€µ· µœíUþ |é¬6ÂÊÝ-b–nXV}aNaü\¼Šb`9{•¬»ûüGDNÔÞ€phÔÕVišÒ¯+”ºƒ_BWÕ~U3?§yk¼ùp>C H*ï|¿Â€¶· M¸f³ô¼øBZ»xÝÂÊB©Y‹Æ+ÓŽÄk]ÏÙ·Ï/R¯òp n…´¬EÌÈ ü&nƒ<éGYû©5©àÄí-HKöÖj³Õl oÉÌm J«¼­AÜk Ž @F°…ö¤#{ëk³þj¸zEN·¸¸!Û¿Æ¡Þ:nƒ\ô¸}㊠Àˆ°•ö¤#¯[È¿|lÁ´ µUVp}¡¸tüùÌôÜ‹¿/¥ÜŒ0[jo@ê8œµ\³ymŸÚ*KÛjæKâW ä’a»ÓÉ\ÀŒ,[lo@ªX—Õ›`-öw¨óù·JËZê’^wŒ¹f8Ÿ ÀH°Åö¤€K6‡ó¯˜éB¡z’vChCƒš­ëf$2€-µ· Å\½ZZ\ùxJ_àvºF™ €ñ€k6KÍ»‚êÄ< bHtõqGÎÅyÑ&ç“>Š €õ¬xö«8bÄ3€ àuò£l¥1–vö÷÷HRsÅÙýœ} ×`={Oèn{µ˜ Àƒ ÀÙþÞZñàPå!Y‡ó¿ÿ4Å€ ÀXÀfª;;OWXZTÛLy+sð?öîî§­óà¸í<²‘ØVË€–,˜ æFeˆ×ÕóÅ5 ¡\4/Š´T¨õT¨ª&BË(‹4) PD¤¾(½Ø*.¢¨U$rQ©“/’F²Ô"ûÚ¹öÄÎóœãˆmÌðrüýL9Æ 8‡IŒŸ IDATúÇ—ó¶'€O]ž]~£Ô9Àåc`Vx ÿþãÓ°²ØÀ{  €¥øÌíçö·o²²ØÀ50 àk¯¨ƒ¼îXÙÀX<€Oýë¿“õ¬k`,ÀîW_u²ž €°|˜€€fÞ@@3o € €  L@@3 € €ÈÀ¼üì›07·ù(÷@H.·38TŸmzíÝ—,€C×ùül`Õžqcöžþ@x5"—G—†TßWïUZ†`*ÀãçÅ ñgóç­7šŽßÚç9?|¬¾l6 À¢ìž™gëëËB4«ôíeá™"€0+€C«uâض˜n—~FÇs{Íwc~¶À²¼º4%ß„¯öˆ~ùÀpØÐ†qè¢ÃóXÈÓ›u8€ÊpxkYtGòØäyë]Ù/€µþ=ýs`ávù´ÿ©¿C_RCX{3+‹ØuN?,Kȃíœ @EXîñ}4âÈ `³çí~{€;?´7þègÛ,ÀÙ±>-Úä¯_¨?Lkƒ¹ûsxæI»ïHxŸ=ÀÞk§ïØt€êྠqCÍ_ýTàñÞî:1I`F»ÂêB àÚT2K¦â­j)šNÄ‚ÉÔ}!L8m ©d,‘¹ÒÕ×édL{z"^¯/ﳸíýšZÙr€êàðš£yLíœRD{ž\’Wá €0!€]àÅTÐ ;Ö¿’Ì,ùõw&¢iý¸úv2ï^±̉ê\ï—¿²áÕÀ¾;=yèsG—ºö¤¶¸1tQüyJ¿*e÷̳"÷fP™ÞgÞÊþMÜj¨+¬õo,Þ¨Mé=,÷k‘»}+ Æä.ßÅ„zCm:Õ´'€ƒ…¸ó[û{ìTGû†ëô»õM¨kAŸ;?=¦Måé±ÜmŒûÀ˜À¥æ­LX¹k7ªý߯‚7(uŽÊ.¾¢òX+_y8ôŽZ¶­žÝn§|uÊC þ¨ßï.ôÿöw§î:Ùp€j`ßpDï_#€C=_¨ÓÇ\®Ûsssë×#ÚHÞh'€0%€÷·+1y’o–¶¸ýWBâØ›^¾q#€õç{)}ðŸNÀvTE÷ýkðž–v9•e+C¡­^á™$€0'€÷›·;™s{•À޾ئïû d÷« ÖžèÔ˜ÎKæÒ÷öþõ•ËŸ°ÝÕÀ¹þÕ¸obôžœÊbz,ÿIbzŠÀ¼.>oåÐM¹Ï¯-Æšrÿl•œtæ°Í¹ /‚ÛÎ}PÉ=Àîïíoßd»ª €óúW^«?¼æ{*/‚•»LôˆCÞ˜ÀÄ.2oõÌÍpæ-Ê4¾`Ü)/€mÑÅOÔu WŒ!€°Ëun"׿ê6H[u³S¹ Bg ;< `L à"óVÏܬB{€÷°öžèÂv,{[¤Ò{€9Pº”µ ß}Gw¤û±q Ö®“îÀ˜ÀEæíþç¿ÀZGåm‘ä‚“‹``ßÜ¥®TöÖ ±1d¤pþ!Xá‹¢ù €©\lÞ®÷÷5¸ ô‹l“—€Î¦òbj×u¤÷à6H€jàÐ%Ñ?´{YŸ»}]b×Pï-í0¦p±y+NôÏîT5«n÷kËÝxWGk3GH÷¶9ic_°¼ð :¿µ¿×ʆX<€û&Ääg²„‡ëÔ!Ñ¡5ý¬ŽëKò„àðV¯ý†Û P™öiÂ2€µ·eÍÛÅD0˜Œß¬½•NÈ}¿+É`,Þ¨ÕúW.îݬõr"^[h‡@²)œ¼RÿõN*^à+ö~9Ðø+`ýÎ’7?’WŸ3ëëËB¨Kcut 1ó÷åˆöÞ'.€Š°ï¾#7€ûË™·Q¹¯W'‹7°’Ì,ùmö§3OÆŒË@ç+Àζ÷k>b0 ÚØ^¨…%udtè©ZžŸ¹`Ì àræm´6• Æ’‰¸êTÿb: &SzÞ¾xðB:¡%r,¹«ÚèŽü‰x Ð—ì½6pún€M°tz07·iœäs…çæ `Ê àS—g—ß(up~—3o£6uþ¯Á­-{ý~ã§ÛMYùPÔ¯??ŸÛë/~+ç‡öÆýl;@µð°Š(À{M™üÿÎ[¯×küËyèk8w<·7þÜÀÆÀ0೸¢Þyn¯ùncÌÏöÀ0–`Û?~øƒ:u™  € `,À6[èú/ŸÀ˜Àò Ì@€€000  ̼€€fÞ@@˜€€f @`éöÍ?˜›Û|”{ $—Û󞞨=òÕ>¹­«ûÍRË&rß¾qtÏL.YFÆ;½ål”J¯ÏãÝk3ǾæÏÕ5ÿÑüïç7]ž¿Yiý™ñýGÀg›^{÷ \Þ¼=¬²çõëŸmnŽÕ¿l¯'‡}½-þñ'cžðz|?_áñü…—6À <ÿ4¢þ›vÌÞ3¦ïjD.. eÆñÖ²Pn”Èþ@‰eÝxϨ1eÛ&Êyyý¢zÁ™ùié?%ž´¦¾1ýVáå#~ý}¸yrû¬®ôú<Þí¡ý*#,À{¾Ÿ]?ofü‚rÄëÏôï8Q<~^ æþàì+oÞVyóÚf;³¥ÿ>ð8`Òë‰IóÒ¼>æyböï%?ÿËðzlæÏ X(€}#Z]>[_×fn³*àðHÐXžI½€Ãk=bT>£g²ä@îëÝÝ7{—3,ZêÀj¿Yb”wONýûŸ_m6\>bçOðëc9\éõyÌÛÃÖÖå¹á·Pïù~vý¼™ñ ʯ?Ó¿àphµNäp¹óö°Ê›×¶3W{ÄìÒÿØ»ž—8–-<4Ífp;ÁÅÁ@$ÔéŸ#AÃlÌhfëF0õBw¡òÔEb¼ÙÜÀ[„»yàÍ*»üc¯ªúÇtsºª+ã¤ÕÔ¹`nkuuÓÕßW_uÕi>¸4 Pá×uÀ9óI¿ÇÊú¯÷³U†††®ôÏš5køÃá þÏã¹yþ‹–çž32ž]rÊÿˆŸýò†`çÙ«yz³ÜN®;Ç]\f&€Çï ýõðb!}Ö•’t)xl°™¾ìxæ|? Å‘?¯ÀеËÀÀŸ¾ Æ_?+€­ý>˜¯¯ª/tpV¾íÕ2òu¡ã¹ó·ÙŸ—œú³þàɵÀ9ó‰À9÷¯I+€­Y»øÖ ûOÐí² aöÏWÄ·jᲬZ#z¬NÊÑòÇ% »Ø þ]ó7Æ•–“ú ¸ãËs×ðØ `3|ÙñÌù~\»<|ãÀÖ~<øÙq÷þ·âÄ8+ßöjùzz9œxÞù-ݺ&|Ù?|•ðÑ à_/+€­Y»)8^ˆµéŽ3îxî;11͈¹~ÌWD;‹/2d¥ž‘'ˆáqB;„š àB³‘V¼rêH/‡á±Àfø²ã™÷ý°Ø `kÖ®¨Þýñp°+€³òm¯–•¯k^ôüµü>å´´Ø `+€­Y³–£n®ñ¤ƒŸ`+p§Q÷Üè×ZBΚQƒ à±oÎâI\zûiÁßÝàI®J+î~‘‹]ÁµÍÆA1À5Oü®+àZΓ{ÀzéHsÓð8Q?³%÷ X™ýtâ»i7p´ÍNø~øñ.Y^®]Oü‘Yظ ð‡À&×þ=2ÄS/õxñ)â{ù|â~èÆÒýÐúƒéFŽoÎý‹à7Ì—jl:Þ³fÍZÞxðÔ/ó¥ÏS3\õòÃó§K§ÎÖ‹Á£í…ú«Ã‡é„ÌxRÊ %üåÌy2 à—NyãËÐûm±Ç·Ãw" œ¹œv+§¬@$€›åõ"8Ó›]€ã/Ëà1¨?þêáó¯)Kœ&gÜÕCž³øÍÉ}¢<ªï¥ï.~ükèé‡À°üÔ„»ÇŠ¿~ÿ÷!¹¥J®" wKÎÖ fªúø€ãewïÇ×oŽh_¿ã‰Ïåk <¯¾‰4ߌ°ßxÛΓ¯âç=ãø0µè¹{ǽ¾êb¬Öî*ʱp¤Ç¸š÷QàŠ/%€³÷ܳøáû)ûC ƸýóÕ•‹ìºçGë5k7GgäÛ^-3_3==uìÑd‚€àùy–ñó¿>jð á Ä/½VŸý‘Ûo|}àŸ)žâx©ÇˆO‘`“ÏÏ"€e<–ï‡Öd ¾9÷/ªýˆ/•Øt¼gÍšµ¼ð`Ë Ro4×D.èÚÄÖsÆÊâÇâû3?øŠëÇTBnyò.Ox, àÑfƒk¡P×¼r»O07[£ dwù„ti…1ˆÈ]ùÚ(ïß-¨p6q ê¸ë-ŠÅ@$A± ²ß‹Ñ@¥H”‡õÕ‚,™Q{*• _rS‰ßxÂòU芴<’ >L@î®~G,Z1ÖÄʯœÛ…"c õýŽ':”gÍ3»Åo||59±º°_jŒìWs_LãSx<Nµv÷p=J X‚…|¢'zb øƒâK`“þ€Úc?ò~&ýý-Ù~2>9Çö?Ýó£õÇšµ$€³ñm¯–™¯‡×‚iËߎ(Èò1ÀóˆïJÅß©ð á£¿Þø¥Àêó‘? ý¦×‡þ™â)Š—z<ø 6pPýŠñ‡8Ü?Ð`|óî_Dû_*°éxÏš5k9 àÁÖB˜z2À³Kåwb;0Àîâ¶³÷ß÷³îÞóBΚQ#À+|cQ €ƒye1sÊß ¯1ÖhzËåõÂÈ&C”è;Àõõ* 8Šå=ªÉcP0'¸÷ *€9€eÁ“,ëãkÄîÈí‘öœ ëw|åç$ˆú …€Ì#©Dç·|Þ̾ÇÖÊwÃÑáéV&'8¿±akËä!€uñ)­D›Öh7p,¥ç‹ÏØC`|)lÒ`{ ãGÞϤ?´g6Ñþ…+?ØÿtÏÎkÖn”η½Zv¾žì `¾x”àùà9Éw*üBø¨Á/ˆ7~i°ò|äÀFׇþýžÊ{ZÕã ħ„†çköËx ï‡Î<”ã›wÿ‚í§øR%€MÇ{Ö¬YË[wâO/øÔÈYY`× ¿‹Ô ÒsD '[¬Ƨ&Üýj €» +¦Ê¦—ËÏøRÏ—ÎAux†é¦H»õw·FƒúBˆ´ó)Σ Ÿ,ÛAyX_³gÉ$ðèúìuE>¢>H@{Aûj>ŸÕÅ áDv³á®÷?ž”N”/­Ä;k˜gEFØmñÞ¡]¤°.>ÝöÑ.NkÚlˆ%JÐ_jcÒ`{ ãGÞOV¶?ïøÁþ§{~´÷Úµ%€õ|Û«ðuB—" øC:†xNò ¿>jð+3 `ÕùØ,€®ü3ÇSY ªÇˆOßãóuXjÂo?h¾Ä7ïþÛOñ¥J›Ž÷¬Y³–³îêß@7×x"ÆÅ[Bó¯!…hxHr¼»j6Ò? 0ãÒ±¸æu÷h°c&ÚKc:þ⽩Æ|5Ø<ôúí¶Lš 6P¿qšƒ =Ã|ždyX_+Þ3BàÑõ+Gìÿ¾ÿ‡ŽQ$ vT3/©‹D›ÜØïxR8Q>™d…ÿïäwJ¼÷¤°.>a²ðt7\1jôÆ—À&ý¶Ç0~äýÔ`eûóŽìºçG{?¬Y»YXË·½š_KK Ý` 4àéâ9Éw*üBø¨Á/̇¿4Xu>ö `£ë#ÿÌñT¨êñâSœô¯ÀR{~küIn'æÝ¿`û)¾T `Óñž5kÖòÀ ýË“`ÍÏ9œ€7y¬ÏûüíÔÙzNrö X‘æÓbó¡öÝÝW‘Ýçë¬ø›®ÉµúýšÇª “`+­`fÎX°Éõ‡ŸIÚʃú;S0¼~¡¸ó÷ £½q‡‹¨>@@ÑŒdH¸šø¥7Êëý'%€åá 0ïÃkÁd*ÀÚøt +EÀZ¾È¶~ãúãKIR“þÛc?ò~ª°²ý¹Çô?íó£½Ö¬Ý œo{5¾¦’`¥ð‡8†xNòR  ¾TãÄ ¿ÔXy>áÀf×Çþã)¨ÊñâSÌ÷èüŒßí!ð[íOúpk$À¹ö/Ø~’/•Øl¼gÍšµ|pm­«Åg.<±+HÝòÝñpº%>”„ ¹ã-J#ixLàÒ©³z¾–ѶåÌyûüó¿í–³^ˆ³@GxNå4ãK€æÁÖÝó‘"xäúºKrºí3Ž˜MJo·½pç'üQŸZkâ—>æªûOÆo€5XŸDÇŽO 8¾tªZ ¿ª…ü1Àêþ€Úc?ê~ö"€óŽèÚçÇ `k¿‘η½š _“ŸA"ù#8&ߘB¾S¿¡+«¶L"¼ø@â‰?ÙÎÏðØìúØ?cQj 7e0þo¡ZÜ៸K<¬O)€uñKü¢xj0Þ¬ÀªøðHpûxÖHRÀñ½lÂo`L°¦? ö˜ÆºŸ= à\ãúŸöù±ØÚï$€õ|Û«ñ5Ï|ë"þÈCþ žg´gòff[#€%¼ (¯u±ï4çgØlv}ìŸ1ž5u<ø”à{x¾©ø­ö'uB#Þœkÿ‚í'ù2)€a< Ç{Ö¬YËS3𕿙;žëž? ¥ð±ÐÇáB¬¹%ñ‰`HÈ<ƒK󷵸Òò˾”:F챓-‘\aë„—ì à³`À™Þt\£¬ÅY[ |¿”õ1Âû?{çóG“ÆñÙÞbò2ÍÌCƬ,¾ºdá•HˆÎFâ;,š‹&fØ›—€^Bt¢<Œ²šƒ¿ò^²àAr OÞ¼ì?µ]ýc¦ëGWu;3vk¾Ÿ^ÓÚUõÔÓÕÏSßþQíÈú¹מû æëT`û.iùg]dõ)°ÎäÉÙ칪°¸ ´ZkýS+;þé;2]WãEÍ›Mðý‰*€uã·'ªÿdÇ“ë3Þ4öÇî?nüiÏ`ð3 `m¾m—ˆùº¿¹öqµÌÜ‘só¿-[5™Ïwªø”/ƒâdñ‹ l¾Ó•ׯ­}Iÿ¢ÆSÆ_šù„O%ùž//­?Xð ñ[Ù1ßð«@Ç:¾xû¥ùÒ/€yFœïâÀVÂzÎnÚßœµ/E[:Ø|ï^›vÿÁ&ä(+`µ0½@J¼ï;_øMe>ôÚÁË–Kô'$M<9æ}ÆÁµeóm¨Gvùúµ‚­o™”¾9;xßföçêëw.ì­-eïZaó=•LZÜ?û®×»ö)ýNª¤>¥Öù/H€¬-ûÒ~×ý©ÀÏÜïúÙø{ ÀZÿXÙ‹>ÂnÍ?êðR Ö/ÈT´?Q°n<öDôßšäxrýaÆ›Îþ¸ýÇ?Ýù ~&¬Í·í1_?›u'ôkÌ+HÞùËosñ\šïTñKˆšøÅÇYübó'›ïtåùþè°®}Iÿ¢ÆSÆ_šù„OùþKʳÇC3ÿÄoedãËï߸Ço¿,_ú°0Š8ßÄ(€'Èâ;ª„«Eû‘èñ#Ãüæ áyº,å䥼Gêf_?rÛA8U-»«à®æÉ«Ï¾Øwºèg躓–j²#À …çgCľ—="¥÷K_†ÈÔy8ÁÆÕ¯lOˆyr¸´ôõx_¶HWŸlÍ“¯[Cd}ËûNiî£a.~²L¾z*éßòüâá'«CE©£$õ©°Æ¢1ß*lœí“ÒëôøS-€Sý2}øycûÂ>¾Z¬óOvÆ Ó§_öÉÃ3f§B¡õ)zºR£÷fߟÈX3{"úOv<¹þ0ãMgÜþãÇŸîüwZç-쟭Ÿ!òm»DÍשZÑþüÂÈŒaßzãÏ_~›‹çÒ|§Š_B|ÔÄ/ñ‰(1~1ñËwÚò\xû£¶/ë_ÄxÊøK3Ÿò)ßIyöxhæ²|¢êxA€õoÜã‹·_Ö?*€­ú ²ñu¾ˆW7¡?¢__ õãã}BÜ¥±jcļ<^-’õWbú¦+hì°ùrz'F̺ËÐ÷”æ ZÒšè;¿®•í‰ó;ÀÞ}Ù߇ìæ{íZÌׯléñ ÃmQºJ/WߤmY4Yô¾+G‡¡8 Ýßê[;·Ø–׺¤>¥ÖøO ÞÁvoswÝŸœÙu-šŸK‡À:ÿdÖ.쿟ì´“•Ä(Í¥NévË"¶?‘°n<øíyݲãÉ÷Ç?ÞtöÇí?aüiÎ`p—0]ö¹É”>ß¶KÔ|M'ôäMÚ˜öü?…ó™çÒ|§Š_B|ÔÄ/!>ñ–@l¾Ó–çúÃÛ¯,/Wbÿ¢ÆS¿¿4ó 1Ÿrý—•g‡fþ!‰ßªþˆ ‡õoÜã‹·_–/‡‡|í ó§hó=@’ð½‰ƒŠ½ÑpŸŒÎï.ÐSؼ\’<¼µvÁ¾/Âo `ú‡ó Ifû¸b”.¯ì dUwÕ wzW—ê ïcâã?*¥ËÞTXÁÆÕ¯l©ìÙªUàmãPþˆ*[_j‚Ú³×Û\øß­À²ØÝk{ëªR6ë—{òÖ%õ)°Úrâsg÷ý©ÀÖ˜ÙÚ/ZÕíÈvDÿXÕ¹ýéo^±åb®jø‹2ý‰.€uã¡i7!‹æ?ÉñäûãozÁ¯ÿ¬ñW¯”ýãO}þ@ƒŸK+óm»öDÎ×ÖÉxîÌÞÈÎ_ñ|fâ¹4ß©â—OÕñKŒB¼å`ó]ˆòltX?ù|È÷/r<õûK=ŸäS.ßËʳÇC3ÿã·ª?²1é÷oüã‹·_ì#€%ó§hó=@lXÆøÙÖÖ©ïñ«ü®µ½$}yiü”9¯3Üvi>Ñ’Nwßov…\¸}eöôx•Hö/d¢××;¦oטko5¦E'bñ§b¼%Ë­ÏZ\÷üàv à?ÿk}ÿoªw€yóm»8s­|Ý÷îôôð?òóW<Ÿ£æ»nů¸ãsWóÏ_¡ü«è¿´ü u~¸ùñµÚ¿G<>€X°|¡Ž¼ì·¹B†‘‰ü6ñ=Âgè?ý„€»%€-þôKœoÛµçzù:kC  ~‚n `è¶¾×+Òt”Üî^óö+ !þÄü„ø—È8¡ùùã   6©ëß—>o|øQÄ¢Iô&4ñ`| €èµ¢·¢Ì æ ô&4ñ`| €ègWöª‘ÿÃJIô&4ñ`| €è¹æÿü0@ü``€FBckæÝ IDAT €`$d€0 @#ßÀ0ò- @€@hœß>ÛÚ:ýÚúÅ8Ý~9!–~Sm'‚û£æëxZî/>uþ•ýpzzúu©çº5Õ¿¥c´¿óön¼³ò‰îS5ˆ…9´çïcêA%+Ÿ$wzüéüÑixÿꎗnü„³?³»Z1JõÅDFÙxÎGpkð_ýË?!€€ àí{k¬:¿˜8¨ÐíùÆs[ Ï’o– 9³bL (¶]je¯¶0³æŽÌO¿œîD Ìþ<à ¶í¥úÕaDAå €ìyÅéþôƒpí öôIPÙÀ}3­á!;Ü{…þ¬ý(Úå§wº!€“åoàkØßwd8ñçQ"ôn2ÎGpgpmˆL»œÃç[\[ç_³~u|¼OÈ ­€'^–‰õ‹}b.>”'ÇØù)¿›~2äk)„aöÀ–õææÀudv¥Læ[ÇW•ü=\û‚=ãæfÏ¥ë `Î^¾?“CļlX¡õç …‚êè“P>aþ¾í˜÷¯îxuBgVŒÒâÒ秉™ 9ÁÀãE ܨ>hÐ,›Ÿ°tÂýEµHN¬d<>c˜ß¨>ÛòX5¦'ä‘eó…ÿ9@~»%€Ks‡zl°Óx³PØxüÅRmÑ”Œ+&-ÿ>HYóåÌãk ²tß§ž¸ xšÈZÙ´i@IÎ^®?“cdpþ=ûν±6܆Ê'Ìß·]ËŽÏp—°u@^$èㄜàNà‰ó}Rª4pè| €ë à{yë?÷Ò3Í·Öuûºs¿ûXV¾y¡z–l*ÞIª–2÷gømŸ¾á{Ç0íæž ÞñT €ÌŠ¡{S+ÈâAñp9Š…lF–ÉüojÕŽNš¿!€£Û_+'ãÙçdà.àüYÿú²¥uÃæ[´!€›ùv™<´’p­HÞÛW¢­Ä\Úógêåé¥à„|´4ÇNôKs©;,€SÙò°7º€¤ÅÜ1œiG×Ê®C»#€“æoàÈöç>‰zÅtP׿?οoöjò-:!€'èçü†ó*pm¬T$‹þ…:Ææ÷‚W¥ ¹–(€mAÙ^­ÔÿëÎwÇ÷‹fýmÃ^eª5A®öKœ–¢ùwšîS&î„:³}\)7‹‡ÀL{)§2 ÷%ÑÐxªGÚ>__jb‹v¨bØw€È›_9ýÈ•W ²g£öÛa/ý±Û£«9þaý)~{ƒêóì—k›–æËóöòýé›!ƒÔkÍj¾tÙØi ¦ì®U£7ÈßÌà„ù[3þjÅÖu£áG++Ç·Äüþ̶Ì~Z]¹~Ù8ÐûW²-Ø«?!ìÏ­Ì¥&f<\#°ýÓ—WƇèã@û¶â°:ß xâÈ|eß¶¯;ÏšßgÉÃç-}|a.*>Ër,¹qyuJdªEw ûÎTgÏí}œ eßS`^ö)’¬o&û‘e¡½TöÀkЪ_Ø?P{òDhŸ©vèÜÛ¶í­–¹z™ò|û‚=² 7Û®=Ο1öjë“á°¿°¸¥ €5ùÀÿgïl^£XÖ0Þ·o39Ìq`p"YäèEÁ‹˜Ì Ì BI˜MÔd¸»l„d“ A'N\\Dœ$ óáÝ(dÜš•;ÅÍù§nUWwO×[Õ]Õ™Èôy뤫ꭷ_»ê—úºrP+ð¥Ïw'|êeÉ“…yïh VcÞ=¹“Ü!¯{Ò154 À¯æÝ/kl˜ù¬äðù¯sø¶¼µûÞŸÒðÇÚÒÎòYxª²[X}WÞ}ì.ݶਾé’#N žc.¼v³ðð‘+‡Ö/—Çì ˆ:{oÊ[…½ q¼“Øì”œßdüЩö¢4à–ýGë#þT=$Ûk,O'€åü²½J{F*Òì° T#³Üþ­—çb«0‹‡½E¯óåìÜþ þ¦ùûÌ߆øcÔNˆ3Ãù¿¡ôøÖùƒÆ£”VìW#|Â[Úág.oïß¶ð/MÓú ñc²|½û>üx$2~4í3ä7}²Æ6°¡¿… ‚ èøJ³"n=šZñÏ‚ÝXf½òÆr´S©ý]×!7+ò.=š&;úê„·Y;¹æ/šöó´jK|¥p. ެ̽ã?ñ”#•Â}>Ð_Ôk±XäK‹á R¼>¿ °€Mý-AA½ð•æ¬à߀ó…WþvàåhCRõÓ@r‡l}–¿ø¾X’éÌVÍ߬ɯI’È*{1'°²¤ÇÙÏÕÖHöÇêó窃¥ªÑßîà`V‘ÖOËË?è’r0ne.èì•´ù‹C™È€[òŸRñ§ÂÄ^cyZˆ–X~ŸÄ^Úž¦¼ßQĪk~«ÂלÏÔÃò›~¥š÷§ì!î'›âoðÈ»€ŸA4Å7õ}ž¦uï‡üBDºsÈ¿ôÐ1©>Sü˜ìw|”ìî¦ñù{@ÚgÊoó}ÈØÀ†þ‚ ‚ KàV=à߀j7ïð^9à© ou!¹C¶?K À_Šòg€aVcØèX ÛÇüœhOn8õf`©¾©zx*o6áÖOËëþ¼;Î??wA¿Ðå¿IíQê#þ¤¢öËÓˆÌËïÓ€‹nwd ¨ò¢§¬äg9LÁÄåTÝ{¨}  õ“¿ñ7"¸ŽýÀ_‚kŠoêú< ýÑØŸȤö(õRQ{åé$°ü> ,N`>Àϸÿ×™zø3¾XXûþ4×òô¿ñ'šQŸ)¾©?èó4­{?qÅ®«õ§ÇÉ~ÀJdœÀ¦þ‚ ‚ ž˜w·wbÇOºÕYqG«î‰›[•§äùêDõ¡<Ä–ÓÙØqJ¹6¿&æzl´ÉHIÀìßï€Ã£¼ <<ïŠrHý´<>޾Z$÷€¶|jÔØß+iêëúSÀRûíÊ#…ôÀÃóÑýÏ®Ýàj4/È,×½?=÷‡¿-âïR î@2Ç7ñ‡òS~«ïCöø€À‰lèo!‚ ꀯtÏz½¯'~ÿÌQx/èõW2ˆ™Ÿx5$0§‡z`ÇÉ‹ÿ½"F›ã뮀£S[“uu¥ðÐI Šë>ùu+ÁWz>€ùá=¼PëWÊcØå6|ä’°˜kÒØOëWìI[r™T_.¶˜ÓI±×¶§Ö7"&êÚën-œë‘žOà|x©Ÿ–Çh†/¹dãßMy d>X©ÚOëWìIpÓú¨?5< Ùk*O§Œ3Àr{ƃ™1ý 0Ïë^å_{­ LíuocÌѾ?=÷‰¿-âExçÜ›.YÅ7õ‡òd‰œÀ†þ‚ ‚ ÞxjÅ[}jÁ?Ã_Ý8rƒ…X|[pr‡<<ž‡Œ/IZÀ…OkBo4Æáõ¥ÕÃ7åòÂ늘:òª¯ÖÞzÓõ<ø_·p²üvk÷ýþƘ¶Æâ[X}S^8ûö›Z¼N>lzíZ_z> €ö¹7R?-opÞõæNßï{7ÏüCp~?çç_ÖÅ0ZµŸÖ¯ØÃÜår9§ý©ú“ŠÚk*OKf _]ÌþSLàÐ^µ=Suoã¯fÏ—E1³ÞÜáÛ­ççž?7S/¼zSÞ:Û÷ªsŽöýIùûÍßñçŸDý–ÈßÔÊó$m`>[89\[ûp¼Ûì_%Mê3ÅÑ~À4²äö™òÛ|²Ä–á—i’0û¯E AAÐåp$~ùÑ댽Íãã}/¼Š°±èÝLî[1!ñ-IkØ‹_¬ð¼ç?‡ÕÌŒú7’¬éOf9^%ºI5óåÓ\74ìLùå{±©JxohüùDæç`ùk½Iý´<Ê\'/Ä)°W'¼Âçíã}7˜ÉÒØOë§i6àŽÝ£LÚ¯OçO¢±7µ„ü«¦Iý†ø1ÛO˜ÄCöïiŸ)¿Å÷!K|@`‰ÿçÆ> æþ‚ ‚ ïÀ“¯gýÄ΀€Ûçò~8šÎ ÀÎàóío³µÂæç½ëâÿ7¾ÎV?–œ$vòÏgÝêçåRRƒgg«›þ*Lòò÷†¢‹gä瓘¡ŽÈ@ê§åµû ïÆ¯ÉQí§õ“tꀻ[Ÿ˜±RüI%Û›RÞ¥0mÏäWqùê1-`µ·÷+Ì=/bÀÄ2¿ÓÛOó÷›¿mâ¯ØtãÿŠRã[õ‡ò¼”6°h¾[}´s8dö¯&MêOû%&ñp‘ïÔ>c~ó÷!S|@`0Aý½¬Sãl{ûôŽÍ“W§Ò8?OÒQ®œ—Ó¹Kpª&”£-?åy£ý†|ùݧ§§Ëf²÷ö„÷–Rfµ÷»HjO)¿õ„»äúOáï¾ð¿É&þ‡¿¤½?í»Ìö]èýôÐÏÀÿüOgÿ_i{€íBAÐ÷à *–óÒ0’¦!’å‹ß*´×ðô+‘áoèGâã§`¦ü† ‚ €áâþRñå^Iü%¸%‚¿!Äô·ð/`‚ CßiÀÝt;_ÖÞní~­èa‚àoñ€!‚ Œù‡P«ž¨r‚ñ6ü !> 0A€À?°¶Î¾ÍÖª›;åà øB|@`‚ €h£? øB|@`‚ €!‚  AA`tÈA† ÿ³w>¯m#}7bpÁ"N Ték·JcË×LJœ×7I}õ%à\­³izH t›R·»—-ôPz)´=õÖ—÷ïzç‡dkF²Fªä4»û|zHÇ}5VÄ<óhf¾`2 À€`€¡· 0 ½`€`À0Àˆh€'Ÿxöìý§áK¬|Ç[á£ôû‚¼P*ß +_÷+QNš;~²b”÷:/F”€ ð/×ÿõŸ8¢Þ&åRè5øù,ö÷¾dÿÂñàÇ ðóÿ®„bì¿TÏWXyóhÍ©qü•Wøö(\s;Æòò%2À…>ÿFd÷vp¸Üš'«ÃÎõ6)‘ôº%„ÑÁ|Éï||ïyܲã­‰W¨›“ÒðBnï%ô§ãn_Ñ"«×ÆØÞ”ãÿÝþ¾€Ÿe€'7ˆ¹÷¿7oN ™å¸ºaúÁ)1;ÂçY™Šòêv¨ ×*²TË—ÇS©/w¶ÿ|úòýµÀ2pxéÜ"Uo“I¯Äß÷ÖKn€¥xc0Àr{/coßBÉ<˜c{SŽÿwûû~š>?b:;YݱÉ2û a‘·TŒ—ê†ù…Ës—+qõÛ< äÅ®¹î]碖/‘¦=¢Ô4µ ŒÝW?Ÿ’òÊÐGÕÛ¤DÓë§ÛŒÏ´-ü?¿ýˆ.?œü ÆÊñX –mò˜ÿ ƒ4ööe ¿gÇÙÞ”ãÃÒ1ÀW&é?.¼M.ÂôÇþ¶ó š‹r­íá¦0È£¹aÏIó§jùà–-?ëVËÀ¸ ðäÙÿ´a pT½MJD½Î³E;Ž…ðà„;‹ý&^{`€ÿÙí…X“z©K樷,Â/ñWŠóâÉt° ÇÉ€•_zsÊ7=¸$ÌæV&÷üÉÊ^çëù›[sä ˶+qQ­U³xâ˜4#â†áœ/¿cÌÍxÛ£”=ç£LÔÉaV4yö߸£¤c€¯Ty"Ï p$½MJ¼Œ•²áôêcîÌvöwNô gU˜nYCŸ½Ð¦R¯êm€þ‡Îûë3­¶Ì½ÇG¯§¢éy¸Aò×—â©ã ]}]ûôßßw|èø* žÄ½ßN½žÓõTãSzÏN­ò·££¾¯ï^õœ/û,épߘ}4Øte©i~o’¹5n‰ËßùïçîŒä°&XÎf€ERf'BÁ©¿ù%Ë&k©NçïQ[öz&È÷žðãW_à|>Ç ož"úw¥,Ïéà'>ó`€¤f€¯(8šÞ&%VÆJyÆUÖÇBÝà–$ßàÖd“£J$©’ p¯9H]å.¼’ã)úï§´Ç7^È5Üá…³¤;TÏãû °¤ÿr‡zvN%ž¢ÿÁF6Àòxáî<٧˧/?Š)Ùp=f€½ú¯ÄSǺúºöi¿¿z¼f|å»>*ÓÓÓ½¦d€Ó½žJüLq…Å{zü•}ß ïã=_:÷Ø£À K¼õ¨Öæ;Šó»¨* ®5 bûAzì rÃ’wѪe¯˜ZdyfhHý˜ìÙo¯ñEYÏ–œæ+ª˜ö$¦~ʱÚ-‹Où)ñTý÷Å˨3ÀÊx¡eoR™Îe³#Ú«èyP|ÕKú¯ÄSǺúºöi¿¿8>32¥¶2¾ò]ŸîI8ýëéO/Ÿ)Ïö¾ò—kÛ§œ/ûìõ¿+Î[…^ª›'|;0áê™Eoä5 ]w)ÍHìtà-›z]Ö¿Š~1OëSïÛ¦½lÍê4Í-* ÀýŠ{|ƒ«dÀàœºç×[VÎ'žiïßÎÀ³žÔêmRâf¬ôNŸ>²mÀä`ÇØˆã¨÷sã2Ñ7V¹ ê|ÆO§êF»X©Ï^»$ûWžk÷{ë«ñÔñ†®¾®}Úﯯ_ÄÓàÔ¯§7þ0\Ëb[xuíSÏ—Êý€Ъ¸z+ ð™=w‡©27ÀK}»|Ô4øÛƒ9NFZEd.1ÀûוcOTÚbe²ó(r±i>dKŸwŒÃ©«¥¹™ ì BoŒ4Àòk»,Ç@tÕxªþgô3Àrýüñ<ôíÕo‘õ\k€½õÕxêxCW_×>í÷WŽ×¯âé pê×Ó¿ þúÃA×>ßùÒ¸0À~ÿË’`-Wû{CµË“`5,ž‹)òòZ  ÇɨAû-×öŽ2ÀîLÇÛdï±Ë-öÊ¢C6ó»Ð.ß*Z§ÞûüYhl,ŸÏIó; À˜ °^o“3–<ãêÓGáIœe§ p¦a³©;÷6j^7¾ ˆ§1Àé_OOüÅaç‚c€ÃÛç¿~Éï °C±íÙoÄ^ƒôÙÚß$„^j¡Íô7â Á>AnY«’“UËR=X“?‹f€-¹÷jËÇÖA¶P'ë c+b€‹VÙ+PÃóif€•ÞÀàz›”8zíºÏ °ÏM°MÀDd"Šb€ÙÒ×)ö››Añ"˜PL4ñü‰åìL çñ °OoèêëÚé€çxÝø*¹N~=Ãg€5ØwýR¸0À®âzÖZ±·®”¿ˆ‰aÒ¡ö¸BNÜGÓîÿdA¾Z*oÉ]Py+f€ÝÔ$Š^hK/Q§Ÿ>8§ýíçú›·B 0{zÝÓûÑ@÷¯Ã¸h¬×Û¤ÄÒk!òàuÕ£TÌN— ÅXc€©ÜîÞvÞaã—|˜1•í[|®1‚žÇ2Àjú[Û²Û€ûÍñ=ÕaYXŸÜÐOšwìß^¦Ûlà$ôáGô1 $¶´4Kˆ~k¬ê&Bb[K³‰ÎËЈXžŽË—yä¶:ÖÖØ‰¶@´Å…{ªæ' J42M´,÷…€ã81˜ûú§¯²ö¼ýîîÍ·°\v[ÚNÀçœóm¦ì6_³i`.?¶5Ö°}0½ÜˆrT`b}0"²q­ñDBdŽGO®®°uÄ ­­t™Ï-ýu`.žm¾áPß©.ÆÏ-Ÿz~åR€“ÿ={±>Íñ=Ê”±Æ¢=²æÛËpû@€wàâÖù0+Ä3£§6ô¯±ÁÉ[£Öë+ø²€Ö/ÂÁÍ™ŠäìØ£L.…¥àf¼—%Ú.Iÿ!P¼¸‘‚±xòÙíÍ´½…C·̵ No3íOùÚc=lÍ£ÝI;UG†â[ k)˜%Pû»$s«–|+"S<'öø&'¶Â!ols¦Æu>7÷×Q€­ñ´ùF,2Í7ê;õÏiü‚åSί2àl¬O‹kÛÌÄl@[üúNó=Ûï/–ö2Ü~à”4¯ML¬šî =¹®•ï— Îßj^µ|+\Y„œc”¡¯žŠxslö¥T×sIuç|›©+iäë´ ª!?x²ªä°¿ÛAr=ɰNËg{¾“Ûõ¹Gì·þö« ³²øm¿ªøÍ òeà™`¢÷œ*ßfÚäë,³{W\¼7 (d.Ù­#ßB€@€0€€`0€0@€!À€#!`Œ„ @€0†`Œ| @€0ò- À€`  À˜R6¹61±zwûfZ>iú|}bân§cB®o OUÒ% oO®ÖÈáFï»Ø.ò ej$,cý× rt ‹±ûržôû+»àç_|î;îØm¾@Ú<ùE˜Íi¥±ýÖù0-GãF:Þ`Ÿ'>Þ1!+CÒ¹šeß" F‚±­™šM¨ÖW¯çó„ÚÒÿ}PO©ê I’›OÕ"ÛJÈð‰‚u€D*3X^m«#µ¹Yû+Yà¾:9™Ô_—ù6-®”›G—þËÍ2£#[-¢¥?I¯–x Ÿlwç­Š¬¬skÓ@éúÝÁ¿ÂÆ -Àe‰7¶µ´4KÈQ–r[/†ˆöÆ,ñöwÉ9¸¹4 Ñ™Ô ¹­Éê'|ÙH.‹I¿©¥Ó\¿ªª§êötBm Ÿ‡êÝ®ž½®ŸsV†¤`ÿÀÊøÍÕÊ‚}£÷jó­ªùÉD€wµ<öW²*ÀÍtÿK °ë|›3~íåÒeS€-ñö@€­ýMC Ÿüð  ^€çãô¥u(DÎÑ7ºä––Œ›;$ï}­ØÖH"z^H•½Ìçqòeß"‰Tªãk#RrÒ] 58&Xj_ÈÛC_·;xA.àñËUËéŸí[›%ÁpúœÆòØ_È’·Þcû_B€]çÛ4åî.åqyéöÇr:|äË4¿´¬ñT-ЕöRSÍÎ:ÏL€«nÿöàþ €Bàâ2íûº›%aíEO¼Õì´¬²ÛÒpo±!ÆWS%ä®P­åø_6PÓ=}CR°j°€ê¥G}!wç>ÌøwN"‘;CRºœÎòØ_ÈŽk –ŒÝ½(ì>ßfÂ·Û Et¥°6þn¶5ÙŸ§/ÀÊ“ƒ¿þéß!ÀPðœ<kÔjI¸/@¦ÙÓZbÎP>§~ªqû4-AB>Ü´LŠùr_B€µy.¹*cB ¶OB¬¬9Ú®.‘}¦X›©QÒàt–Çþ @¶8öèdYR€]çÛìpBYàì{òõïU ÏŽ·]¢¿8—Ý–ôKûš‚ÒOßN rtaÇ„ìîXÓ`ÏÙîÄEžÜ„Úß¼4¢×€ž?f$¥©‘p(¶_Ы+“KZ±ÿŽ©zÀ{?¾pÈí„Z™ oàâ ’¢©ýW›·¶î’Xÿ|äW²Þå£-ÂþŒNÌ‚›qãÆ>¶ú6øñ;š­=¾¾5ž½}[ü×'À©õ,¿Ç¶‘]î|!ÅxR3.³½-íS –gã§+$¯ØA€÷Ýþ @¾pq+»GB€ÝæÛl °2õyí3ô×hß§å>f»mÕ‹¾ù£_i?’üì…ïë×›ãyž{ýÀ¯=¾{ÿùðÚW-nØ^_™ªûütéµ~5]cï¯ÖÏo•¼qH™ºôy{Ñ›?Ë\€õïC0<3ܺ(íei—]‚ÔÜí}ÔMj;Û.y ¹›$þ$dwwÀò˜S>$˜Pûè=AˆiBÝ<¢ß˜è*Re|Õ£t%ª‹N¹ö™î©Ä|›N¨ô› =äâÙ±´/"ß=‚ ßÿT“^ŒöÈA}{—Íã·õ߆liOPŸ[ŸÖöEñs<^Á$föû™žù5„•ó|ü6–SnÏ;¬° Øay:þQ}…D® xßí¯äsì.ßfQ€>kg]»ñ€fã†OŠŽ|IwÓÚ髦—ÜMª¬\ÿvÉFV’Pþü‹¶xThG²géŰ©¾Ö‘Ç—Y墒ïô— °O¯£ °8þ®¿!Àð¬pÙ\ˆ¥ÛSšõ²â­Îr~@+÷ë5ªµyýÕrÕ ±Ü¦ˆ/›r‹ùè ‚S }C!YXQ;çuáðÔ7’hœÞxbö8û\òößQoŽHÑãF˜1­úøÍõx…» õt‡4üh@›F3ÿæãÙ°¶/¢{¡h¼w-À‡ïOu˜–ǧ6ˆŸ¯oë±eüÎlmÏ^Ÿ_ŸÖöñs<^&nÜîßU¹Ç¯ªêh·I€SoÏOC€gºÉØ£µ )¹ýíïý€¼`—ù6‹ìûsyéßþ½2õ°èÆ_hù…×Kè‘ßo¼tà5ά|Ztæ7úŸ‡ß>ð±l‹§ 탇Egn­~všª²6×§ÇsKþ8½<~rmä|¥¨¿T€·ßˆ¬.^†Ø¥—uô§µ]b× U× ÷jYy¸·µƒè7åh”Hâò${Bî X¯Òä˦nB€•9)Ú"˜PWkÝ “pTuÐ#gL}ü2ûÜ{&§ã ê¾ £îp8Èï÷ÓS*ý‰#ˆ‡I,t«’MúY|>©}E Q,¹C?a‚£÷G‘þhrÃŽœÉ£úÀùú6ù³ŽŸï¿ ®=[}~}ríÛêçz¼¢ù‡X€½B.€ñŸ5 °Ãöœ{ö¾/õWhãé&GOäÁþ @þ °Ë|›E~år);çùð;ELåWþTòÞ±úwŠÞc?gùU•žR¬&oʯ °^Ò÷à×^fÚK?8}æ{lzÖ·Ùú»­æëO¥çâñùÓñK\_!ô`g½«€ú3œö½ÃTQØh/Ýæÿ”%Ý^(_öÖßP€S;4Ï”GêÖ½­¶Ø»u¡³÷¯¼o¤¶9Xßø»—^S¿©Ü"3¶l¼öEB‡µjñÝÖ3éɱKÖþ‘-/™ó%þ« °ä¼ø·ÿù®•·!À°¬¸§]÷_]€'Û¾¿‰ôÊŠ×tëKg®¼n×!{ÞK2Ͼò$)^S˜m7v}ÕÔJ¬Öqî†^ãIX}*IùEÚyCv@=Ò¬[™Ñââñn@å/"mD?8­î{D—'ú–¹5’ó¹0Ÿž­¿«óõ§Òsñøü©ô¥®¯püáG€+ þ”»ÞÏ ƒç`¯WX˜#Û.[úí€rà*ým!xå¡ÐY­=íÔ§Z¥í7‘È‹{`2#«n}õ½Ï/üHOÚuÛôLÕbw¦Ó¯<yñé?̤\yÖ Ùü‚ À›çýWàl/Ù²æ-íi¬ñ'mé…Ù®Í[ì:ä,3·•u˜ë‹^7h1uÀ: îZjj2Ãd›7%ókÕW%.­U~Z¸úÏê7H$'.›¿Hˆ ÛW‚.åå­Úlz¶þ®ÌןJÏÅãóçfLKY_!~¸êO °Ûý¬ N^4ý°Ï×w¶oY³¿ôÛ+e-ÀúÛB ðÆãù5³Æ/³û"¡ƒùFì| Òö£÷Õ'–É?\¼ö…NêºU_-ì¶ 4>1ùr Rý¨ï×6åUØXë›\X’¢Q0,c¶ø/Ù„cWÇõ Ùˆ£c@~µßzNÒZ›M9¼ï€%©3ÀÊÈ5½pñ@>‰e@m¬ô3ÔìR¿¦6y蔪&áÁ;dËÙ¾FojcÆJPsñhØüÅÇâP=¬µ<–—§L!:g¿¾“«¿«óõ·¦çãñùSñK\_ñ›àG€+ þ”»ÝÏ%`£þæ\ïRn¯”·»ö·à»Cg~aðGÓi#‡= pâ“Ýd&Ö8‰§k¤©«WfÒ'~O¦¤Ÿ~&,¯z mqÇ A€`¹pSoÞÕc$GúóB›t'cW…rOrÏjk¦ì5Ý·˜»@KB6!MLš3JÖôMIÞ£ññÓI}¥¥ïuÒy‰Íß½|"Á±”G8#è$Àlýݘ«?%€\<,q}Åøàò¯?-À®÷³ðk“bƒd´ã§¥Ü^¨ ¶ío *ÀWÿœùkün]$Rý»Zo,uî lI©Ó–³ñ/ÀäCùÁ—[õ•¾\y} ðϬÔC€`ù pæuy&ßùÖ|LçÒõí8ú¬“M¡ErÖô1kžì5Ó»º p³> –õ5…ÔóÔziYШ ’cRZü¨Åñ(7 ò7ƒ)/´"Ky„kB]˜ª¿–ÂáZKýY¤ã¹`‰ë+~| p¹×Ÿ`—ûùÛ`2×Û¼ôÛ+!À¶ýmaxå!cg“ŸW?=¸ð•GŽ~xå—úH|8j`©¶6so«ú¨3W^Œ5À6&[]Yž‡NÊòL—®ÂÖo Éêà.A‡Lv¼ZA¦w9 Æ]f€“úñžäø}WYùœ¥32weÈò0&CCoì˜í€Ú.ž “ÿ†^­¬­A!Ê—G´+°ƒñõgÊoë€ùú[Óóñøüéø¥­¯Í{îS€Ë¼þ¼;ÞÏîßt£à¼¹Wþ¨¶ Ú+• Àvým8µ#ðz3õÎF7þøPä¶ñ=Vç!cRV(ÀäÈà“¶ÊÆÌèÒñìØ:L>/ȱH¯ ÊË 0 `Á0ÕÏ*׫¦Ôx‹lí”3{ƒû§ª²Ÿ°$×`õXÑI¶isK©9ýP3ã\ÑZ´nê yÂtX¹G•A„xdl.K$纲j6“ÃÕb§„IJåÙ®Ÿ «Ûè.D\ý™òsï'_*=ÏŸŽ_Šúf¦/:íìg¸,ëï ÀîgWUdݨBÁxp@>±¾Ú+ À¶ýmXÚxuG/9o©YP^^€ùøv{Ø –¯g{å¾aƒ.ué‘úHtæz0¦> }IÝ+s½-Ö'躥Ô^sbHë ™k®o±`ãàzEb3÷ÇÖÊ#cmÚˆ{s¯ò›©þþûÓd(ÿ ›9pkôʉê¢Ëý}S7êë»®%í2NLc}7ê»æžm ¨™x.£8ÒrÈ;dDÐvJ^åu±àõ´Ç.ߨ›ÓÇÂeÑ^(#®Qè ¬üë¡¿-¸Ç¿¨«~ôøÆèð鯉pFÿ¶[=Uˆüú¤Ö>£wëªÿ|àÖ•'ÿ{_àê?Ý×0¾Äܹ51­˜‰'˜Ñ¥ã‘¥<_é(lúíG/|ó¸_iî÷¶†ÎÖòñLÇ÷ )G\à[Æ'€J`õ+g¥3–‡¦§'d¹O{:6ôlútN¶ì”eí{’{¨ÓMÙkñ °š½¶yNV»YŸMêç|fæƒZù´¹¨Ôµ6í2HrR„[ÿ+½ùŽòø*a•h@ÍÄã Óùwªå‹õ­ï Ì•'zI?ØqÿaBæëO•Ÿ@Aý©ôlòsÊK»½P>\ó©¥ýírïo .ÀRë½ÝúÁ¾X¯>ϬM°6 \Ð¥¶á/5ÁM€#ôAÀÊß߉DÞ[-Ž'ZÓk×zÓ<Õ(DæmÙô­7ú_Õp\|ÓåõIüßßÉó/ÜÀ°|¸ªãZN½¸Øeí ‡‹úãªÁyz¤Í^sDÝXêx’K/\]AV_ê¡âs§sÁô©‹SšEǧ•Ë…‹Ô~/>>ö,×Z¸Úbß«)ÒCê ø5Ïæåùü3¤|SµvÇâðå›H*áõѺ«ñõ·–Ÿ/œ þTz&ž(&~±ë›Ú´Ýàɯ—cýØÓýì"°ñ¹B ðP®Mys>+Ÿö @ù °c[–¢—¾<_÷ñ_GHƒÜð޹Ķé‘—ôo\SOþyþã3ߨ-V À‰#uÕ¿dzÙÕ9Ï"ÀJ€ô©¹‰ÿž¯«>ó¨o…(¾H€©òú$ €å!À"2scc³Æš¤šqåjì~—xñRf–êe¢Ìõóm1Dþc<Ëþ­>ê´Öòœe²äv‰ã©<>ëïT~a~–ôa/õfâ¹¾©á©–‚ÝãeXÿbÇK4ôê° ü1HåÔ^X:úéÈÄËNk€©.Õ©¿­*F↖ù\^t<Šz¿;š(nü|F¸i`Ù °õQj˜Ë^ ’ Ü%E%›|µ¹T p`ý9ÞÈbû[¼£À`¼Å,5R{cohþ À¢8 À€"1>ïx70F‡ @e0¹ÿrÁNÈ… ÀèX²Œ¶.0F‡ @€0†`Œþ€`ô·€ @€0€`0 Àè0PQ\3>766{ß¾×Í¿orí7lI¯qºŽ4%WmûöóëÊ ±7 ™Sëõ¡‡áEƼó,·gµ$u¶ê¦*õû ìžý?{WóDzҦ˜À ŽÂ`›7<ü”àÇ  ˆJPŸcÌlÝtA¢>ã"À[\ua4¹›+ÜEÈæ‚×Uv¹äïzUÕÝ3]§ªûTÙš¨9¿€qìS]]u~ç×õ1þõ)ê#þéY—Ù²ó|ëë·OÔb„$€ÿÝó¯ÿ$ `-ù6+ˆ¯)Þ¸þ¿ ~'„/€ßþ3-}ž·ý¡ù·F•Í4 xühZ\_ÚK'äš7Ù›òùÚ`øËŸÿ»†å% 2×úf*ï°V~·ÏfîfjÂÊ‘Ïk%2!ü“1Ug‹ñ'3ËšýQ[ ŸÏà²ìEZt9±SmþãKƒÙmÚÎów¯©¼Í~mt¯‹áV`mù6+¬øºá±ìhAõÿãß%¿Áe™×èÖ÷¿Hº¢xåÂüü~£â9p[pûSVÜú~rrÀX_ÈÀcBm4ðøÓ㬸2—JÈõõ\Êçkƒ¡êåNp^Ry‰‚̵¾™Ê+•ËåŒ ¤%)îdŠV6<¶ýMÎ’¾î˜õw¹ à‰*+~Ý=ù>-ŸGÛZmï ôP^®0÷…ûª~ y·AkükÍ·YaÅ×ÀªÿÏ.€•üBÌs+îôþ}èŠâ• óÿåóûÍŠç­ÀG»«â¿qwNJ>;`£Ó-<ï³ü÷±Y¯øw!¿(.Æ×ÁÀÏ$€o„–„vÉ8_ù”©'l.p5Ôé/À×IçxÀTnÔŠOÄÿA¼;úDÀ£òG>!g}ûâRÛ…ªmøl’?ëáY/È–—+†|Ö—á`È¿¶|›v|ýjUà¬VÜ“¿üvŒŒg¼S.¿zð¥ÊŠÏI_ ÿ : à¬üN˜@ ü|§ÿ“ó¾ Rô¶ÿî±í¿žz‘æÞ }§;¾,Ú@Èó55&…ŸIÿ²8#*ÇÞèó|ŽðµÀ²)kÍ'.&|‚ßÀ÷Óq¶3^—ÓmžSɦò g>»žÛ+' ùךo³Â’¯Kâ_l|_DgtØš\Pªþ*.àÚ à_,ž#·F7OÞxÁú¥Þúö ½%€>Û“Ã\î'rçȨâ…àgÀ$€/ˆ†_\ìÈ‘¾¶¸  `/˜š±À¿0\ís¥wÛ÷óÉXî;÷äiVÉ8ž_e–õŶ–Ö¼h'âP•‰5™¦òx·Zø©ç®—,€þµåÛ¬p;±RÀqÿU8¬…û?ÛŽ£‘›&€Qhð·‰x²C«Ï`u½§r4ýñ4Ç~=Õü•?VƒÍ?*ö!ö?a÷oHÅ;xòj<’ß•ü3÷@pÀãÇ^ß³ÖÉ‘{ÁfVå­â7.Dæ’Ù嬱ðd ÁŒÆ€¿íL +taÞ½dPé]=ø¸ô$"BÅ^g°£(ž[ìÌž„%Tнt¸ÃDz w¤ÚƒûÑ˃õ—ë9õ¯„ù-‰¯0ÔW¹ÛÓ–‡à¬¯úü°öÕ䇷¯ØD–SðfPàÐ`ÐþZq½×úåayJ}¸P‹zYéГš-õù]ýx(¸ŽÑ±` ^ÿ\—» “p=1<Í´xà €Óã‘ìü®äÿ(kÿ WÜ~X+îÝÑðЈda~ùãÜ,{¼š@È¿zwn„ö¬ÕØ Ï`îȳÀª½p¸{³Þú·Uî†_wàö¨†õç‘ÛÞÿT~uæ‡búÜu IDAT§àzÅ•Óòû O\×Ó«×a{âö°Þ¾û lûÛçs/º?¥ýµþâzÿ®õÓˋׇ³x4Áɹ]Œ‰ôçwõãÁÕ>©l½'Y«3Àë§ÇÞãž4ϯÛW²ãñT8¯#*|ï•QÇ"%ᦠàˆ-ù6+\øZßšÿâîK(‘©ªÜÉ€ `Ô›(€¹À  šž à7þʆ÷ø³üyú; lÀqÿìu>J·Çø »-=hH7tþÇ⑬ü®æŸ¹‚£nŸ÷ãߺÐÀËòlÊîêú3þÇõg „<ï« ágUÐpǼ Í›þ-æT\‘ºQ[z(LóÍWÈòMk~ó<FÐ^#ïàTÙ(ÿR©$–Ì”Ìd¯Úwް­ÚÇ»r‘˜ñž€=¼XžV9LîÉéw¼†`Z}Áõx{–òö°ì/®÷ï\?½<¥>áB^a诤?¿1œÇ¨×Z­µ Ÿ‹GÀàØx~ OY¿Ö¹Ü|Ú…§á€2 àØZiᆠà&ÿZòmV8ð5ßšÿÊs‡×ßÕܧ¢ù0þ1ý-Ì/ÀcÑðWÓV—¦w:†ê};SõõÍß¡þØ €ÿì5>Bì1~Âî?LŸK4òÿ˜?4ø[ó÷<5Õg°*ôWç²Xþ;¸Ì3€þõÇ÷Ðòfñvÿ0½E¼£ºr<ÞPø‹G²ò;Ì?kÿ 7ܨ+úWÀ‡µþâ „ìr¢F!kSþÀ…nžìgé°ÑÖù …§Í-ܾÎëöõ橲VÚóR¶{Â( o·G°VÿVÄRësøª7éèU2hOÌ–‡`­¾°<›ö¤–Ö¾<[¥š<à_$OÔÙsCùjq½÷úò´úDÇOÔå.ìù]ñxp?,f€Åküެ<Þ$\HÀSòñ7_·ø×Šo³Âí,u|ø©2ë1;”=UcþÐào8rš =À‹rÉb^ `Ýß!å›ZÜ?B{ÈG˜=ÆOØýÃôñ¤+,ÞP0dåw-ÿŒýƒ@ œ0Ô¿PO,/}d K²&ÀÜÑDò\Rü”›Ä€¿y ‚XÔRzWe¬øuÿ7˜|8øÚëúiÀEC{îpCçÎ c·G°Vÿn?²©Ûoíi “ ©+’Ôë°=1{X"€µúÂòlÚ7FZ~Xû–Õ¥®Sõ(ó!ëhå«ýÅõþëËÓêvSdÊŒ±çwÅãÁyüØ`8,n¶ï¡Ý× ¥-f)K ckå„-€cükÅ·YáÂ×p|øIŠÒ×½‰Xÿˆ?4ø[í…n¹|èEßÒVE¢Îå@Û­÷èþ)ß$€ãþÚC>Âì1~ÂˆwÔG‰ÇŠÆâ‘¬ü®åŸ±‚‹Öô¯zÖäø±'¾aüE¡N'jÀ­6æ¯}‰§Èo~9Gä®ÜU“Wšüë|ÚË°f/ÝOvàš="€µú·+$¤Ûzá¾AЂ놭K©ö°Ýaû°ë31j,ZŒ9“§5ÆmpC°@ŠD[H홈†ó $UìÆXn‹ªm*Õ´–ê ¥–ÀQ[WQ›„ÒŠ¶$_*5•R)Š’Fê)¨ûr/;/·³ã½3¶óÿåYßì¼íìó<ÿÝ>ã¼ àº2¶9?“.º¨ÅbWíÕ¤-_àK·ÆŽÐ&*æ™ZoGЬé‘L ÑãÃQ3~Ã(ÀÉ¥ˆGL¥÷ €©ô\{Ü¿6’݉‡ÚÆi¹9öw¶?%é¹ò$Xô °ó4OýëþD`r‹`%óYw…°|çxQm¿zýLt=âŸL}ÌoY7%öt_¿y¸TÒ{Àü °™ùX•l.‚íèVÇâΉ)^,‚–²¦ý¯ë5ÍÞßÿ´v[¸­ƒ¤7’`w{èQ—ïÖìtÌù¬æí¤|™fÓ3þHš^âŸ< ¼ôù‛ÿÕùø1¬ì?ùüýð,€‹^,µ‘Àù­QBÆš®ùœÀ!›+h”Ñö«¾Ì¥Jkéýà/Jj:4—€ßЉ—{D«Øºð†Á·=³ùšVÂ4— ñœ^bÀ¹ô\{˜òØú·ÖÚ?–_е*£Ãæ;Ïç~_Ëí¯çšž-O"€E«@;ËóÔ¿î«DJ¦cY$*àØrÈü LT>5^TÛ¯\?º[´ö}{8±ÏœµáÜ*y¿Ö~PïÐj“.:õJH—§—¿ÂægÚÔÇÖß°öæ+°†?ê¬MîËwÒ~²:[&¨/û;ÓŸ²ô\yÌõ7Sž—þu:H6?©À,ßM½#œ 8âäø&Aÿ³ãEµýªõcËô‡1B»gH}$¥ðÜ®_®ïÕôu£ƒ—\°`ØÌždÀÎüŒÑòøFº~ÖåŽÏØ/ÓeÀgض€Å$€Yÿ+õ·~Q^‹ß˜¶_4ó]ÜÖhê3`Úþó÷¿«=Ø[*¿¤%×Á¢Ïç0gïdöX"€yBû#Yz™’µŸ;_ï°êRopû»Æ#~ý;Ÿ¿¯ñžðÎC¤­+‰õäÙ`‡)€ÍÍQë­º Zø*ÿ—©Oœ8Ü1Ï–C$<6ÒÞ>=:´ÑÜ÷Äδ_®"õW„yÇãm#ã%%MÃÑ„Ãk #=}3‰¸Yð‡Ç¦{«HwombʨðE-Ü6^Ò4um»<½Ì€³é¹ö°å1õ/Ø­‘ÆÉËCäÁ){Q¦‚cZxlÿDÏÙËCÂúr¿Óý)KÏ•—A—ØÍfú›)ÏKÿšÒÈNå'Ÿa¥7>ܵ-|f¼¤gjˆÄŽè‚þçÆ‹jûëÇ–'èk%ËT(¹~¹¾”ÓÛ}œ~ oDP'Ûm¬Í|CÆ•m­µL¡Cšk“8|5™^”Ÿ¹}ÈñsÖ•êê¤"éšÝš}ÙÙòÎù·æü¯ÄßúEÝ_èÏ ûj¶ÍsÈøsb)-Úþ î7{(°·T~©‚â3Dà/9Ìû/™=–`&=ëdéeþIÖ~î|y¼Ã4GoÐþ_øõï‚òýŒPÀ)¬Í.jé?Ô›‹QîÓHçèè!mM‡Üm¤veyôº™Dö+ŽUÖ ÷meâUo ¬=úñ¶Dm¿©{àõVþ¤{ÓÎhrŸ;óõR‘bÓË 8—?Û¶<¦þ!Ñ›Œõ'W%.N율%{’®/÷;ÝŸ²ô\y"ìÒßlyú×<©} ™üä8ÞâœÞµ-9XÓ¦LùÜxQm¿bý¸òýa¶?½×‘äúåø~PN°>'#©`*uˆõÜݨuœÀ5-„Ù8µÖ,•Ÿq9Îö^kHdäø aoÂv|Ç”ç˜hXû–€¦ü¯ÌßúEÝ_33ÀŒý2n^û>­ILÙÁýïfEöÖ™Ÿc_ØÄœ3u>/€ 9ÿ%³Çî˜IÏù#Iz™’µŸ?_ïP×ÒC¼Aùi<â׿óùû=œ¿c¸ÁúqPàóã3ôD {,¤`êDƒ{zpÄ2ru¯7ÄfG"™¶})è3BãÚpçì¹døïŠÆfû38(–fþçÊR ë'*ëÜ‘§—p6¦=|ytýñDú” õÝ3ë¨}>÷;ÝŸ²ô\y/[ž¼)ÉäçáÛæ¨c‰Q;à02¿”¡ÿùñ¢Ú~µúqåñýQج9ï ÉõËõý œÞ\q&->½ `sŽ6ƒ¦ò³zÌÞì±ÛªRÁÛÞœYÈ(€CÇ´&€ÁÀîþÖo}æä¯™çœöËñtrKI*§ýÜÿnöPhoù¥°ayì¤Îóy,ð_2{ì.€éô†yêl¨uø#Iz™’µ_p¾<Þ¡‡€4Þ`ü¿,ñëß¹üýŒð,€½P7ÕÛ;¹YôKQÝ$e‡CÌq&,Si½2i.¡+I[òÕÂü#ÉJxL¯¿jyžœïìϬ”ç÷úe³üò Zâõ2oýïs¼(÷Sž®ç ?ïaûÌ+Ð5².—ùEjº&'§So8—G#/¸=A»ÅÀ`±à¼ÝCë3ï¬àoý àÐýu¶ýÕ=Ï/k¤·Aš«¿Pm¿ì|}>úi¡];>‹\»PX*tÈà›x Ÿ,C?Ü;ô,ßÕ\~z¡ÑGîúy8*~ÿ€(€ –° ~ë}Ï0€¥ €ÑÅ`ðŒFº_Ç#^5]"äÁ~ôX<8¸@0€``°80çü–=ö÷f±3x@`À`É¢Ç/_kh܀޸¬Sºµsöµqô€À €Á’&„.@`À0  @ÀÀ0 ‡ @ÀpÈ0 @CÀ0ü- @ÃßÀ0ü ࢾ©ÞÞÉi_ùso¿YYùêÍçh?\¹qºøÙSnÊp,§îÄÓ÷WxK[úÇS?Œä¼M_zèÀÑÜäì·þ·ßy[éüÃßÿôî{ŸnÒça$Ü÷hÞ²§r{g>¿~õמýð1þöœúÃØ%I¢·>XyÔWýüÖ·|øÆéG–­xã/+øþŠûödÀ*þ= dE÷½Þ ­{$õ·Ö*Ò¸Ù‘†=fòá÷*mþâ»ÆO'Þ5½`5?7мgOýéøv—Dß)¶Â/?'>–—òò÷¬8Æ«4 îÝà1ç5ƒv><³n¡`•ú ã÷wª?úš‹^¼{‡ê÷Èÿ®W[ÜL)`ýüõê÷³¥)ã'®m÷#€Ùúª¶7«õÏAúìòëõy?È­ÎjûíÇSÅÎù¼U.¯tϲ`põ«\wåsójßB/YçCσöâ³'€ç2~éû-Ã\‡•ßÜýßüjþéòßE0˜`I à¢}$Üymttˆ¸n8Jœ˜=æò++o>_¶®ÿèYÀÁï®RÀ2μT¼ú‘‰ž®Ñ á±”-ÿ^üåØ~¯>p×£yÏxõæv`Å¿/[ X¥þÂøý_Õï»´Å·w¾[]ýÑÇŸ|bHÞ”¸]=ü/¬ø¶ÌÔW¹½Y­Ò/6œÕö)Úß8ê;ñ›ey¯dœ›øÏFS?xëö†ù²oü ¾rn¢¤D€ `þ÷^ `ú~ó/€©üæîÿæø?¿µ–œl7ÿÙq¬–Ô›ØqeˆÄÒ˜=8䛕o‚)r8â?b2üëê'ÕðÞK=}¿ î­Èèqó~fø¯P¦cúw…dΆ¢°§Ý³»\s0‰ž³FT¬NçN«Ô_DÉ@Ä» ¼U]ýñª@$HÍ DŒ¿-",i/ðÂÀ^í‡ O›ü¹xÅo­ÿŸK‘¡øË3)àÂ[+WÞ9ÿîõŠ[¬¼£Ï}ãøÊC á½óφ–ùßì ์_V¯þÛ„ž{6wÿ7O”_üÉò_ü–šÎ/2þ³ž;·XN·è¢Fº§÷iIÌ‹òùWíwŸõ,̘˜í÷o½ `3yèÿì}lÇÀw{Éöt¹3w縀?ê‹]ljì\,5çRÙ Ñ+ PµRëöEøk"K*Õ þ„ ‹–$²*à"’AU@¨5$B¶I@à"¢C "B|‰ÿÕˆ ÎÇîÝÎÇÞÜn8 ¬yÈ{·;ófçݼ÷Û73»!8pÚªÌ(9>UѦ–œÉ—ÿƒ€ƒÕ5Uîõ¶ç€°hYsG$P‚£™uÆD2œ|ŠXÐ^ ÀO8Û?”eQ]‡Ý-~ìß“w“ÀØ÷þYß8CK{Éié}qž€ÉcžCžª®ny\w]ªw—®LX…Åža•HžÐÇ)èŒz„òÕCz‚â&cî÷ÓÀv€ò»~vp24;ãoPªz2³qs€þ7¿ì`<É;ð³#¾/¾þg¡G°)R¤Ì]^þÆ3o£)XhaRÆÓÇ|N\ýW«uZ¬®îQ”øµê+šÒ{íªy‹h¸gôÈÕkã‹xÜð¥ZºÄ ÀžÝçúÞéúæoðAqr—• ä„+Í~#@4²G€¹`C°“•ç¸J¸Væ8S>â&w³ß³û“Qfm«{“IQæ{RjQ¤ãÚjz¶þËOFÞùä•ÃÙ–â胎Ae Ôß•{»ú‚zýýEâÙýó“o×'·Ñ.$´þ™5Znã6ÐúÒ?Iîgޝ)ñéÉdj¦›”àû+TAñá;å¹0$¸ém×…^‹ûÅ0:ÿ¶Õ®BƒÆ’áTrfã|Cíüàœ$håxNíU%ÑYãöûƒ|dûØþfÑ÷÷Ïûà6JŸÎçü>˜ë™úIûÙ ÀŒý›õqпæö™f'Ã㢅=XÛ«ƒñà Në/ŠYCjÿÍ»€ô:ÕÏæøÆ‘¢˜>(I™5¶ò¿ù`³}ø†ƒ.ü´·¸M­épg´d£b¶ÚÞ8ã-€ùþ¯¬ª¦eû‰¾SK•zðÿbf<Öÿƒe ;$K‘"EÊœà_üÑ ÈìÌA:à¬YÓ¦ªGÊ5(faîll­Çÿà#].ó¸æý„ò—Àõ'¢(v8ãW †Õõ!û¹hðÜ­™ ɰŠâÁt€¨ébAaáÁ#uL”¯;bßh;Úvˆ{£%—€ÍßS²`Ïþ„Ûå‚gÿ^ËÀ†û¦õQŠÁ± }‚VŽ Ôëè/ä-|®[Å÷Q À´~\ž1aÿ ôYj5ÂÇŒ¤ ÙÎƧÃáÓq;üÒyˆƒîSKÙûîFFà;m?6riø¯ÀøtÒPo%G_Àñ‡i ´—(0'&ûƒÑŸ±²¿9ç++®«øþ2˜ßm/”=0ö+²/€Yû'ô±Ù¿tû|[Ô}ö &BÖ²Û«íñƒ§õk~’Õ3ˆðʃÃNô³;¾q•hSŸÄlÜ\à¬þ7¯LÚGýŠÜ»=và A€æ'be¢f&CÒKû[äiécª| ŽF^ùè`; AD@¼ˆþžÖ¶š¸.á>²çÃUÿþR¸”€ëẢª¡õÇ®S{>ÜñÞ g4â>²ùð¡÷F£¨~‘þ"YSõÛñâ±m¿YÀÑCÙÞ¤zQDA×ǤßoÎêB ¼NÝŸz”„[%@yT8Nµ(Ó’áä}=#68¾¦Ùà·cê‘Þ¿®âe•äýâð™ójȤC'B@õ©½ûöM=ú®\aõEüïÔCŒîÙÛ ðoêþ’}ûæÀd°(mdsxù«êÀ…Zuìãÿ­¶È›í…²Æ~EöE0cÿ¤>6û—i_e…a«E1øTŒgÙìÕîøA„Óú‹ZùKã7É©[cSßßù•üo<Éd—¥Ìg÷¿ù`Ú>ÊÖºaæØ5|€€=ÃjCaÑè©4U5ÞZ°…ÿ¼­ýöuµt[ä›Ïà’㉰~ ÀR¤H‘"8 Ï{í'Ïm^õX8“ä “$úJaxðÏÏ`à|ø ®kÇ+p‹b*p˜• ÀÆ _íJ4t+ž6Á¡±°þ`…þ:C" Éò‘Ëïj?²†(@,«B~Õ ÀÄ÷)2dm«û·hÃ×—Z¹“õ`ùù` NHÒúÔµ»Î"2ÝDÀs´Êµ ¨¯é/’N}s¯&LÒ_D×ÇÆÁ߀ŸG;;§`ÿkð¿—á|¿Z®C&ΘößC œ;{ûÐ ªmÅ¡u¿ÀÃ)w…FF d]Áõ½(wÇ òãˆSãŠo馑ú"N%SèUÅã9´5²{6×KÐú3ö@õ7s~ãÚð'=Ž+äg€ {¡êgìWd_3×SúØí_º}Åmjéóúúpì!«½Ú?h€pZ¿ç¸Êß©jðÖýÐà­ÀÊøÍ»-ô³=¾qþ Á À³Àÿ›O¦íC„¹iQmLçQf<ŒðÆkÒî±3‚ š*oËÙòþ¯¬j ï€ÿhÅë'w†ŽVßO'¢ú%K‘"EŠ`kž÷Ú¯Íþ×Öh?ž H¡Àçáf€«GVêÇGª¯hÙâÿšà+/Ã\Ü„ü&ÊJÿ·bÝ@ðqgcÞ‹ ÖïÉ4öiæ­‘ÛB­‰3SåãgÞ0>4DzÃú{w¦'Pó'=SŒ]Æ^JŸFc± <¾ôÒ, ÀBýÅÀUr)‹þú-Ûq­_À½_ÙM¾ƒ.d‰ŸÕkjNÞC)ׇ¡½ní³ÀnBp ½Ð÷KaÖ»õ–t¹Ô¤&&0k€Ã©üñ¸¸½—q7ä Àtú3ícû›\³W!:“—&®§êgìWd_3×SúØí_¶} \øaàŒ0y¾È^Œ@8¬ßr#" Bp  ‚Cýìo˜é··ÌhHŽÌö¡?Ó>¶¿‰ó=[ÈL#/L\OÖÏگȾHf®§õ±Û¿L@#^¼gR‹>_d¯Æ^bæáo IDATÖ_Ya½ùÄÝ@‡sýloñ½{.È_/%?,ò¿y`Ž}6©nwÉE-'†׋x`XÍ)o»­ØÂÿ•UAW´p-¬¬l]M ; êwÀš!€¥H‘"eŽ0ím°ÂàLøªf`8º\À¾ãêë€ëÚ3k†€ßôµ¹¶75twFKW­héSW;ÅšífH¨òQ€hd? ¼È¨›`ó÷nJ¿Ü¡1Æ{ÏtØ…è¡{ˆ§h…Ži:ð,‹Û^bé/”‚ýªÛûŸÍ½Yø§ëÒ;F1õ‰Xÿ; €PÞ W˜+-‡o@‚7ÂÎè73ä¥1÷‹`£mË"\V&gV$óøŽÞñÚ«}îÌö‡Y¶}lí­"­Ž—&®'ëgíWd_$3×ÓúØì_6 ‡ð.Ô”§ÏÙ«ƒñƒÊÞ:¬ µ´Â,ñéís®Ÿ­ñxKßoWʬ°Ðÿæ€yö¹|­Ûüšêì¯AjŒ!kóéFG—Ço™] ³ø¿²*è}®ÅÏzkZØñHP¿5Þñx”lˆÜ"XŠ)Ræ43þ÷±°ih €G‰ºÅf ÀË¢®®¿r.k†™ß²u%«ë" ‚Ô7‰ñxF#(5f7@¤Ê×_b:™ÀÍghÈ¢X:Ü„¡ÿ".kpÁ þ¸šnïã‰7SB°Hÿˆkû['á#ÿ ‡­¸6–ÙÀ‹©/;ÇÑk¬ØÓHÃý°Â=aBÄïßͼ'¥ÔèûÅà]Æýã°æï4†6v^j Àÿgïlc£8Î8¾›£›Óê|]û‚°p [ XÆýp*¹©‚ I«"^BˆêSCR-U °( Ä6•$A´$ˆ‰ÔP‘R^„,^"ŽPeó¡•x‘Ñ’úµÔÙ—Û™}½;¿ñÿ+’±³7óÌγóÌïfg-|{죯B0ßNûùöñýíj¯Ã=ØýyWý¼ÿù—€¹Ï³öDì_?÷)y)|üJÃgÙëƒü5ÆøÁpÌúýXÕ4%¾}‘Æ7!§ºç vÇß2°È?u¦L.¯ ÀéíÍô´*óg¶<Áx+HƒäÿèkÏz!ÆËOÓWðãQ@ý‘Õ† zLxÒlü-Í ð¿y€]<õÅ@VVu®2W€­CÛ«–´ú÷JÓó‰Ý¯‘gçÉÔç¡$ÚD+oHà ‰»|v‚(z:‡ZVÈ×ãæÿdìQ[Ì-M¤=ú,ÀÁã­ÍÆ °¿ýa¤´}u*gî pS‹\s\ñº_þ,0Ä;æ×y¾ææô±÷+:SŒ%ÇR7Þ9€¹ö^/pÈ<À\¸˜k_ÛÏ ÀÖó!ðGýÂà,Z~eJ,¦ý+`c3`Ãjã¹`¯ò×ã»7^ý~¯@g_¤ñ‡ïLÛ§«¦c x¨8Dü-ë 0矫’É”Þ:€¥ù/'–dí¯cØò°gücXOýëç†v§|áS ëÃ`‚ 1À³_·‡ ¶Åp¯ Àææ_v8Ô`=ª-Ht×›{€] % «Ÿ>¢ÿ=}°êÍòͯ=ATŒœvt5Μ ²åsDÁ!X8Ä`:hz^6¾ÁfìQ[¬<£‹–‘¼¯z»; Ÿùºlîö·?”4mö¡œýݺ€ @ ïWqœßÕopžfDÒ´l6ŸÍ’=ÀYM >&Ø£ÿÙûå Àª+ZvIcT]4çí`r:VO¬þ`˜i_ë·Åõ÷|ýÅ®_¸8‹ö‡:›Í£E<~¥üÊ”ÙHjÅ^ä¯1ÆvLˆW¿ç!XEÛm|W*/Á!XCÀaâoy÷³þÙ°?uÎñÎOÓóÌÍD|y‚ñVÀ^ñ`A<õ¯ŸÁ‚ [ Ÿxfñ“%à^Ê $=’`˜ü89!€Ó¯U¥¬ST]Ùƒ~T¿ô*Yk©Ûÿ,ýiO+ŒÐh&O’Ö–“!OIug'b'ˆ‚4H8Ä)ÐÆ¡uµÉ§çðö¨ÍwÃf®”)ð´V¥4µÈIóhûig¼ý^´jŽ´@.V[­ Å÷+:w|ãXÙÕI×<4Š¥á »ØÇ~8é7Rãïù2e™c­-Ô 0­óºõn¶ËÞ¨+ÀÍelšP¸'V8íçÛÇ÷·«½ÒÜ\™ï˜{><üÙª_t tæ?ÏØ±ùöÑ— SêÍËØëƒü5ÆøÁÂk¬ú=Ó o_´ñM$ä2Ë{ 4ãŸó$—W/Z–ìš#O8¦©°[­Á”-O0ÞºÊ ˆ,‹â©oý`‚ °€g¿:î…—JÀi’÷7Kù·O¼Lȸל+žLòý%Í<ÀÖú£ºþ=ýï ôU@Òh¤³'ˆz¥yÐyçÌÓ©öP¯²åsĦOe×;›X”XÝuíþf ’s@4ÞH³f–7Ñ ¿Ô&I1ëZª66›y€ýí'Pv·²rÐÃæ‰5oE…ýr­Ë~¥Á:ÖÖã~ù°h0YÝ­¶ûÿºNˆä'É«ëââfúÙo‡„(Øû%9ö¡ªJˆà–+_³ØeoÄ=À$ ð‹ôSý6Gì—ý\ûøþv]O^­ùÖ¸€¶Ÿ}>˜Ï³õ‹òG`Q`§=Qû—kŸQGÂzH¹ëü5ÆøÁ­ÞÆ©üëáöB—}|+‡Š¿åÍìö¦yú4)ݺÚþÚÓý¼ñ¬3g×UÙúV‹)O0ÞºÊ ˆ â©oý¾\+: Aôxð¼7Æ­Zo‰Dâêú) ÀúÏ'¿¬K„o·®ézR¼˜®OíëÙüÔÖ›½÷àôöf€+T¥º¿ÞÛ¶~íU@õ !˜ú,†Q2AœœÉìø¸^¦i&¶È5ç>_{8±ä|¨CbØò¹ ¢nˆ+1j8ÞÉdÌlEû“]ïïmûêjᥲŽï*+¿™ì`Ù)Ð2öŒ_)§º·9,w¡ykõhŸ8ºmíUùÍßæD׋ì»x»²²Òã½ÓçVvÞøú­}m;å¬6—ýó^Nv¾ó¥© ‚ú<8kžã#`¼÷æìÜõàRqAã É}z©ñNÁ‹\+À~ö×Õ¦Ž¿µï¥³‡e#q{¿Œ¹UêÄâ};ÎþoMð °^ñ½…3væé+ÐY½ìÕ^š6øæ#ƒØíØ.û¹öñýíºžáM>ñåçøñá…‚çƒù‰,‹ÚyDùëýý5ÆøÁïß^?Ù7<9Ì^þñM4€­´¿ ƒÊÀ¾ñ·ìÌøG]­¹€ª{hçBÁófçNÚ[ƒH¼(„Hwy¢ñÖY^@ü£¬:Xåã©_ýŪâŸ?(èph‚ °× °Ôq³ïd_O¶˜`ýoO]î›z²¯·gŠ“=>ÆyŽêOµWm:³á˜I"ÔÍ&9n±'ˆ‰Mgn|`ίçjßÔý¾–;At—/H ÓÚœÚ À’4ëÈáܦ3?·³ Iù»••—ª&ç€Ô|ËÛ#Í'íY5Áj°´î'¤}YÉà ûÉvÖÛž€!MüâÃïÛ«RI¡˜µÏ€{½XÊ?¸Ôߨï˜QÀE7;Mv®ûÙ¯OØ6k~f'naïiãÙ í›6Þ ­+ùG—ÈÐ÷ >â´×€=ÚÛñHÿ쯳ŽS £ö‡Ó~®}"t]/)ÿtÜ¢g¶Ñ1Ïûy¾~·ÿ†à¤€yÿgì ê_R’³¹ö›l`ãýÁß_cŒ¢ƒñ"Ö_q ª&ÔðŒoY9e Ç€]þ1³°QgR½±+—yÞLìØâáoÂñÖQ^@üãW€%•‹§~õ+ A46¸H™SZÇŒJѲš")’¦¥Õ4ù½°Ñ&m}e›—„û=”VÊ{“Ê×h ­„êõpBl{¸K÷'M’$/¢}UºþPÅxa,¯Ø/Ži…:ô"ôÿò¦ÃhÎQbÙoì¹Tôò|íÉ„õ!EÕý—ØWÜM¶íÑ^U÷vrÈõÖØý‘‰ø dŠ}f"øCñ`àýàú×ݾºZûdi?”{üˆ^Åù\bèŽYŽÞþ†Õ5Ç$¨TœXºáÃZï<ÀÑãíøGZJ§c'aüͯ<þóé2û»ï@'† Ç ÈŠ2Úïâ¬+r͹Rî‰S†z7ÑÅÛa¼)j…ë;”(öò®–ÊÅpØR{mþšðx¤÷ÇЫ¸û1±¥p°tÉý¡ õ¯;Ôœ,Åë™e“r*“Wâ“#€!‚ Œ€,Ðü+r²kÏbm´ÚŸ¿[ùmßû‡x¢h`ÐD£~ã´ë±Ð#Ë?Õó¹g1Œþ­~õݵ‡åĈæ_iQ}òhI^ 3B¼… ‚ ðhѺC9º•ktZñ;{Ëñ˜³ÄpãÁiÕ;ß~ÔOÓ!‰þAþ¹coÛ»‡r©-Ê0ùCäúg’3ìJû>IéUq€nôLý¾ † ‚ ðcg¯½Ð>:8¨¼?ŠyËßþÀù~ëPé[+ì¿êþIþI’¡é æ8£nhý!rýêø»÷|6ÒûdâÇß·Ë`0A€G§:vŽ]ûGú °Ôñ*ÝoavÌôÇÈñOõ`.µñ_Ó†ËbÕ?”ç‹Ó¶LFo€!‚ Œ€<ú”ÎÀþá–óé±Ðžҿʰw+€!‚  AA`0A€!‚ Œx AA`‚ #ÞBA‚ ‚ÀA€!‚  AA`0A€!‚ Œ€ AA`‚ ÿ³wîOQ\Yïžé»æÑŒ3Å€ €ø(°DK¡D"*!ø$«‰Zš¬È®H¡ÀòPv%‹+V©QR>`×ðQµÄT±«)“*Ñlm²ÿ?m*?å‡Ý?aï½ý˜îÛ=ÓÝvóÐ9_žûès=œùÌ}@ÀA @ è]àŒ¡{gÎÜý*iÒMUîºÅK sßw³¿x?›ýßChê§³‘Ó¿“«Ìçƒa±@¸ÁŸ‹‚¿-­Æ»ªë§³ óÛ³`ÛÀ·ã·à Ò€æ/Ø–€éü:Sù¶dMùŠT×ï„=R`<ŠO¬ÕÐ÷›Èß4Oïuåµ–"®aUŠòYàÐaü9‹`²5+I•î®WÕs €ËÌå×þ‰\–VòÍËÄ¿ lÛ_ÿCÖ{—M¶‘ÏqÎíÉÜÆò|îËlxo‚@ ´`:¿ÎX¾õ÷l,HqMÔBl‘e{ÊÜVõ·×Ú¤¿’ƒ¤¯òžW×Ãi lÚøÏj<@ Ð[ À»¸@Ï«±±+·XʸU×bœÀås€‘Xþqµq•¦åÁCs €C÷#¹/¯OôýaL$Ⱥ¼§äþh4Š vÀ¶ý]“çdÙàÕ¯Yþöøž°öø‡º±ÞÇÅðæ@iÀt~¹|[[ÑYœêúxu‘ºžsÖô'0ê-Ð_`¡±€ò«Ö ·^³êÎŒç;öë@3À×FŽâÿÖsñ 릮på›L—Ï>/,žè»ôýë¿/ûíà¦åÞ«ýJé;ªaÉE3 À_*ƒÑ–ñoÐÆ˜­™=þîÉz¥=SùuÆòmY{`§/ŵ¨¾£XSñÀòÃçoÀå;¢¢|îp4Ú·êAøÔb%À®ª½ º½€}ýœ];~w²Räeôà­Õ]@1‡ÌØÆ»(–ìOÀÈŸàÓ'Î?gÏ=a âáØßÐa¶9É©Ô,ÞLÙM¶y™€]±ßÃ*`¬Ë¯Ó—oEèhç4;^Ñ×”Ô:î ´ÞŠ^êòì&|S²†H]‡G‚ÍQÍb‰´ëà{Rý!À¹°ÅÓùâ(žÁprιáj€íòv®÷Žx Ò[èxœk¸>ÝzÍ#r`÷Èщ¾Kg®¬0ðϧâ»GöÜ‹`4»¿I}fu׋Ìé»ô@bµ]{½´¿ýq=žšrÇÏÙàŒÆX ukr¦Ê]LÈBi›÷)ÎdÂňÀÁ³ä…’ýìÚ?£×;"ŸŒoûŠT{œ*t(*¸"ˆì&›f-ÜìNT?ùÏüùÿµøÇ–`þRpi›¸â6ó‹ QÇþ¢§Â™x±Ô,ÞÈ8ò=C€Ý±ÇŸM½3¥Óùuúò­¨ÆXCvªk­4#Ày±ÀNDºL™4VçË‹qK³º·K‚ à)©©Xµ 4â5 µ[bdЙê/s ×Ï&“²±MtWuÉ®©öu“žÖ,Ƈ,’QJlÈÜ„E`ËÙ‚G>‰I‚ÏÀ?`ì‰5ÜÂw"Àhv“ú(>»ÑË~ŸÏ8¾fñÚ3I·Ø¦ýuêÛñ¤Ê> d€37ió/Àt¹‹ y½¼T`Þû4K¼&XØÑlö,°0z‡Œ@ÒíÝTÞ+—Ôq¸¾ø”oÈ`pB†ÃÂþcª5Àfœ³](úóQ/Ó¥ãáÜßšÊÜC˜?s‰@›:ÞLM½ªwí¡ú@ ´`]þ¾|+& ;`HI0â%‘•<â7Ñ£q®ÿ¸§SÙâ!Ù9ÀlB7< „Ã( †õý!À‘€ª%Þ™¯ïO9xü–¡=urûFÅh5°å´ËS…%`ÀåÓð 培^Lf"0šÞߤ>9&ŠI~³xÐíiéüuêËñ¤Ë> d€[*´ù–`ºÜ½„ì_rG:'ÀÍä‹FaÉï L‡{ùÜ—?jxbë½g•|3N¹t{[Y-±tC‚/ÌL/Ú+סX:ŽýEÖàv¥mÞSaÆ<ÞˆÃó{-»cÏ’ÂÙ?Ÿ f€éü:}ùVL¶vÀÒŽ+kpå¡G² ˜ãʇò¦` H¤jm™ÒJ÷‡§7_¢îÅÅÉX‚]{lÒ`vm÷©Øj+äãƒE`C¾wª¹ÌÀ?±‰ÄÙ=62láþ&õñ åª ¢ìƃnO‹ö×±?.ÇSWîðù@ [¬Ë·'ÏÇŽ2â+ ‹S %ü²`¢0ZÈòÁo[‡÷h î+6j¯06k*]`µ|*ùýޏ´-±†»AÅù¿%âÞa%ÛÄ‘t³xûj§*»fO“vj5¥#[ç_w¸¶bquªkTœK¬¹TF”$`í1Heíäø"Jä#º?8;å;%àþhtÔÉ{OëÚ×UÈ•ñdZ=°5*kLE`Ëiמ¦dä ŒÊ6M‚…û›Ôg„óEè§o.n|³xÐíiÑþ:öÇåxêÊ> d€õùV À)ò±ó`qZàšzïÀe=ÑÅù¿¥mdûeÔ‘¼ÉVÊxëØ%{€A ° þu€m΋s='e­P˜Vš–j€™Æ8Ú“7q¦û#Çܘ°o&-1;ÝžÛCT§ŒMª€ q•Œ"°ÑKSü£qЗ¼¾îþ&õÆ×ýà Þ2¹5ûMâA·§u´¿Žýq9žúrgÏÙ༃º|«`ƒrø°´ä“–€k*埘œ©g•<{£ÞÚ¸ýLð'jE0âSõ™Àt<ûK€oIRSIÔ,Þú)Ð.ÙS A PÚ0_§5ß$5,KumD)ª`màEÀœ¸S‘Î\à †ñ7ËŒú³ÀÈfi ‘nŸ¶¼˜ü“Øvɇõ äKur6ð/50šÝߤ>1*4Ô“VâÚÝžîšö×±?.ÇS_îìù@ ë\µ_5/9•» À+Å…³M{y ã±EeIm8\5YIÎÍѰ¶}RóÿŸ½³mâ¼ãø}6–Û±­$Ô)%À@ Ð*Y„¨%„¤…@iYyë )iIV”Z 4R #PÂDRÚ‘"º¥ŒÀa˜oZªIhíα M¢R×?PUuš´{îÎgßÝ“œí;›à|?ù#¾—ç¹çyt¹Ÿ?yîyž¤p2Æ+:FUía¸¾Y‘Y©k&ê··v,“ʃI°#]€Õñ5¹ñVPˆ¨ñº”mJSŽ~Qí0Ó\µõ\d‘&£D§HkÜhó‹Q€ƒó,âyêô²°‘¾É±Ta OÄIcVïSê7¤0ê^_ç|)ÞÚCÙáežâjuzŠ+êk¸>&·§ö¸±ûb`ï˸¥£`êqø„ø&.3u%«à…+ÄYš$ìÒ2:jV§'ÏìQ}‹ÔÈš×·›ôöm2fŽ®Ÿº=«¯"¿ˆ“®]½öÖ.ƒdNy° `¤ °:¾&9ÞŠ3^å ±Mƒ6 ´Lè‡\yNÁ*Nžã7k•ëÕ!˜Ì«ôâ²°½¨ó£Ž"¿ð¤H|&Ïl§¤—…/‘4L8ZØ<¤åhÉkÛÒ¬ÅÂlÃÌ õZu¯¯s¾o¥—‰ãmuzÚú­ÉíI9nèþ€˜¸dW^5„S›gM·’ŽÆ‚¶™—ý‹*A‚ǥǟ[|ÙV%ÀšôŒÐÉ)ô]2N;½rÇ}ŸïÛLß!~ùïi³†8M˜K˜ž9OL·i»¶=©oTy‘7š÷V ³8ë´7Sø.ûÂD­)ØÒI0BX_“oãŸK»ð)>í#ðà;òîí²ly°< ”<ÿ)Ì;Mc?WžIÍ"8ŠüÂì σ¥J lq IDAT¶P=·!üJpô¤M‰¥¡zK±¨ìÁz®èŒÃëÖ*ê§#Œº××9ß½Iºˆs±°®m¼í¡I¯þß…º¾Fëcv{jº? f.[ÅÕn C"¯—§”0ÿ›vÜ䀜µ’͸¸³ÿ${´_X'vÂøŒsu=UWO²¹ŸçÙS+Ûî^©ëÙ¼¯oºÐC©`uzò<áÏ8¿´gßÕÿ®¥÷@Þ¼çóùÖ&^æ_û|»/Sø` Yºž0–+>þ?ôg\¼Ò½ySÃßIyÕí‘H}£ÊËël¸,cV8øzíÍxöVF/ lFyÄ\sqÀˆ`u|Mv¼ Γ;ò¨ÛT¢Øý†ÅÕµ”ÇÛ‰9ˆëÐ:ùÝÒTZžWmw ª÷úLA€]gêDº#ÒÄÉV¬Ê"8ŠüäeqBýâÔ65€E 0ìVöµ”eÓ$ï*Œ .¬¿CŒ˜S.,HSÔZ9Êü(‚£È/j]X©ÏY™~δp㑵nj¾°Gœœ©LÜhœR–-­K[Ò/}å¥K™Ÿ®0ê]_çüà<.ü…Kš<*¾öЦWb×Ö×X}ÌnOÊq#÷<4Ì?b/µ6_¬Í!Ó?m Vóåg³`oûw­þŒ&r E€ÕéÅ4Wo´67ÝÝŸGï¬ùç½ÁØP@/qÍ}Ÿïo£“%ÀŒs×¥VóåFR|2YrÙ’Û#‘úÊåõìõG,t]eÆ6ÝöæÓðçÌ‹°ñòÝܹè@€S(À¡~åxIõ6…3ΖC–¢ ;—òâZ${WA>6woCEÑFáš{X¢¯Up¢ó‹0¯~⩊ô¼°m¬(æO~?r…°1¥W+Š.ìϑڳ·ý|gg޶<ú¨s}ówËÖëÅ®öç%Ò”ô*´õ5T³Û“rÜÈý1 °A’Tn»ñ¨ž’ž¸2 5ÄÃìø—ï5ê!ÉE%&ÿ”^ºšoþ—Äñ«í,ÐÚöˆ§¾ú媽3 W³¹ç2M,ãþxºu9FÒ_€­?nl?ø:À)Œ·Î’c ORo› ö‘_dÙž!bvŸ³<&Tÿúškœ†ÚC/½ÝžÜú$·=Ðý€?(N67ïÑ'lŽM€ù˜HUI#ëîù‚±òÜfs¯6¯<¡¾JÇÙ)øë¤¿“!#Ža!ÀŒ' üO²zû¡'~M¯ë£>œšû¾ÿd>E5E€ GÁÛ¬ãh—ð†‘áò8[N²Vø/`¤°c˜pÚF}<7¿Žg/˜ôÙN†²/ÏÔù¬Ã!÷' F{8‰xj¾ñ}ÿÐØð`†)i¸Ñj‚;³æ7]ìz™0ŒöpJØñöÃSÖá"À&–'ÍFÂððÅÀ @€0F@ À` @€o0F¼ À- @€0 À€+ð¶ônÝzìÔ`1·´å89\…€ Ä%ÀŽ}dþଊ¿ˆ·CàÙë'͘ñZ*/:ýÅ›zp3@z pËÕ Çciì”÷-Ëçæ>)EçÜÀ’+UÈ€I¬Š¿IŽ·ëüÑýÑŸÄä ×gÒrHÔBùYA²²67}µ'/†´ÎÔ °û¥õ¶êjÛoß³ãv€4`ïbεñú¡Cí7N2à’ŽlNàÒy9Ü͹ö@€sX“oà…“2^1S€ù‰,dw>'|©àà-›í/_~¹Û6û¯0`H'îØYG~•¾QÌ• Æ{º+ªˆô÷ ïfywåsê À€9¬Š¿IŽ·¡S„ýç„݉pîg=" ¡J€­oöôlÞ×p’MÇIšT ðºêÙw|ÃýÛvä׸Ÿ }x”—ÿú} Òë=láO-¶„X>í°¥h?0E€Õñ7%ñvV¥¤ 1)¬F€Ÿ3vuó¥pò{?ɉ-ƒT pÖnÛço“¿Yoû(74¤‡)©ç~ ðÆ+OzµíXž§)3a<9!ýµíƒ0þÉJ–oÜÉÏŠ;Ü7ø .o¸’£Í/Nœ´ýþuòá‰õ®¶½‡ÒN€Kß±Œ[™™C#ÀåsåU`ÀTVÄßdÇ[…öU Ek;—I¶Þes?#æ··’üæµ4‚ðвR€§¾ÖVÆþ’ÿѱšüˆ‡„‰³füˆ’Ÿ,Àa}V¥'\0@ôÖqv&U€ƒüùV!…$Àsn³bþbA•ùÅIá¶ÏIýB9¾ÛöQ&îhH3ö(ŽšuR)À^oiKÇ4nnfLàèø›üx-Àîýç?íÙ5À¶ýA°Ëç¤çwÂxë›yúì<ÁÎø…ø1ëeëA»&?^€Ï °3ºŽõM'ª<¨®f×L¤”‡à-+Ù£]‡n³Öå9æÏ·žÝÓ½y_+ pÙ|¶íZgOUoÿwÏQêSwÛî!Ê·ªï¸%Fì]íª­¢ ðÿÙ»Óà(Ë€ãï›=òÎf³ ›á H„Ȇ@! B´–»£È02(`šB89 ËZaä°TD å¨ Pø‚uD¿0e¦£ú½_ú>ï±y¯…³Ønþ?gÌžOvwvæÉŸç=ʇh§%ÜàuZB€Ç`ëüûæ[kT‡µmž;VÉZà •}V=ÑÎ:ôr– =^ `ýZ–¶p;±¯–½âŽâá«Üã©\¹N ÑŲX vŽgpù¥hÿ_x½ž¼Üp½ï³.b­9–ÚÖŽTkwK‘-Q-€G‡ÿÒ¨ó,÷×:=6îŠ ßüÞ«¡ ÷Þå IÀãÇZû×+€Õy @°mþ}ó­%€»ÒºT ÈÊhÿYâ‚Ø ø×'åá‹ÌGÇ9°¾éóäîÚÂká(ŸØÚ9^×IŠofý‰úøÞçö8;ŸŸ—«ø´«kf¯5€GVÉ“õÇ\Pì[jÙÛ×ýþlvÞï`åz@×ÄŽ¿#ÿ8úRè+’-€_fë_×>À¥kŽ-+òÜ&‹€Ç `çü›èùÖÀ±}p¥²¨±ðȲ¢d_¶(€Å «¶ïn^cÃñÔî?Âø¥Ú qœ6ãÔù|5€'Ð6¯Ñ·ÔÀyá·%K‡ËƯ‰ûþZÀ‘-s?í%± IÀÎù×ë X¥;:y•ƒ€Ç `×ü›èùÖÀÕÍûäš7–ORbûÛJ: ÒÈ*Yœ¾(}±öÃ5^×Iæ‚lY±± ³ë(ÐYÚ¢s/Ïד—kÆî¹æH–ŽTFQ.<`?›’×û³ Z„B®›@÷ØüáG IÀîù×ë<À¥Ïûm‡©$€ø1ìÕ¿‰o-\Vá«ý­é“XÓ*3»´0€#[*ÄʪygçxÚiôÀA±ƒ¯±<ë|¾v$M^®9’%€C‹C_™ܱJ±íêëõþZaà¦ÀÝnF¿l> 4 I8gŽkþõ àÔñ)iÛ`Ú&€=æßDÏ·¶`Û9u…ôQE ïÊlYKc&ù¦õŠTFõ]ãµ,€¥²bcáÖùüæ.+6/Yxž±‹¯8µ±<¹åùïÏf¾U–ënµz?­™ûwÅ;ÙÌi ™¸dŠŸ3v½¸(í/0mÀ^óo¢ç[û>À»‚ö{ ÃWªä†›- àÐqyø*ãHîñbzhŽ’õdçóc,Özgy°yh­бðôE–ç{¼?«Gí¹8ø÷ƒÒ>–¹âxX€$ àŒ)î-­¼8cÊ‹{`Ú"€=çßDÏ·ö£@ëGQŽ3N™ÙEÍÉ##Ìf˜‹¸ž,¶M^ZcÖ­s<`ÛxæAªòr•î#<ž à‰ê3Ý|ÂØvz`•¬°TV¬ZŠûþZÀRÙÜ@à®x¡¯?â IÀ%S<޵áÀåCüîUa€Ç `Ïù7Ñó­ý<Àæñ§BËשÿ/œ'÷ZŠÔTûÌÝ€c»Õ†‚ž¬6æ‘oe³:ãy¬ÛÆ38$Žƒ•é~¾ÀjàÆŽîl= ´Ú»b°Á—ä:}-xä9ûº^ÊÚëu¾¿‡¹‚%uÜøó«âÂàMì ÉÀåsü —›ÄLœ¡*¬þ÷_=­ÍÏk¦¤ ÝÆih“vοOd¾µpúñhøü¿_¹|Ù·"PC×*²o7/5:òD4üÙÔC[/ÿg‘Àás§u‡cª(±*vŒç±l/vš¢³mÛeÇóórÃç^9ôó˧äæ3‰ÎRé5-‡Ïoøø”|äã¨^È93Ä-§®îwj‚{¼V«™;ú®ú›Þ¸з„$MLjM®2ö§4ßðLjjN?ÿ‹W÷î]ÖÉ?ôT€¶ `ÛüûDæ[kK…'+Œûž mϬ/˜ªeÙ`DmÇK²ö€=€û‰€Õûg+Ê‚>Þãy¬ÛÆ‹p°¦X?ô´óõh—e¹á7™R,€µÛ´ƒ]eæéWŽ<]P­o ̹§oD¹}¼VK¿üë»ï6Fß ò}€öÀ%KŠ´‹i=J˜~"ó­-€¥ÐÆ‹õѺÏWlë%Öac»ÌæôÕ÷ÊUu»|£¾®öŸâ^©Œ†ßöÏkØ6^,€Åq°²¯»ž¯y­¸öìˆæ_` `Is±¾îüÂÎb$ý7»í¾!žÒ{C÷ëyŒ®|- úð}ú’)€!C’­^½úèVïûùˆˆÀ¾é+¶çÆ?ðO=ßF¼Ë."E"±+YÁ=žÍÃÆ‹¸ J‘¶~-6?õÌ×_/?Ä—ÚS? 1qXl«´,€™ošÏ  ÀÿC+0 € €™o ` Ló5ÀÀ0000  Ì„  Ì„   ```˜ù˜ù:ýÌúh]í÷â\¯ë¸ÚóûóÍ€vÀÝ{v?€[3ÿò‰Ð&¼æòØ¿*eÅžØm/õóÿlíQ9ÃüÏ$qž¬ÖþNQ/P/øêj?}ÄC>/ªý93|•÷õ‡è8NV”ì+]øn@;`¯ù7ó-°øççüio^Ý»w»ßßÛ˜Kvwò;¸dŠ?™xð=Y9²oj¦d°fzÜו~<š}eÏ¡•Ë÷öô¼þP¡5ËNɾ³ør@»`ù7¡ó-°˜€woxEü(ýU‘>å–žÙî:ÖÀ¥ûS’9€Õþ ›k²jO>|håš%Êäx9;±¯o—Ë¡xוÀoœ¬P(`hçìœ<ß@k3°úŸñÎ"z3Ô¹wÅéRl<¾SZ§ä àÂyrö¹L©9€ûˆJ­Œ6|ç 5öm×)ýZ±oZg¾žÐŽØ9ÿ&z¾€¶må¼Äÿ”Ào~1(ÃÀåCÒ.IÚŽÔT„wõ’œœ×~Ùû ¡²mqØy½%|<š}¯'´çvÌ¿‰žo €­ÊçøßÒ6¿ÒvL²pÉó)OmMh‹ƒ(×^Y÷Aÿ¾ÿ· Á–7ÿ›üÛAiÝ7wšn¯5o[÷àN~Óí/Å?ä7eJÒú;ù·$ñC\8[YÐGr°TP-V€?0=Ríþœ¼ÇåÖƒX¹®o¼X_Wûý6ýw¥LË mœsªBž¾(ö˜ŽU­Žf@R°9ÿ&x¾€¶îæû»”ÞS›Ìa àŒE¯ï)Id¾$‹?ÎÆ;îòúû:tx®eã­Wxþƒ|Í—zÿФ_½ÝK àÎRæÎüü;jžîÿl©È¾)¹8tBÖz7ÀA#€#YY‹ÕàÍRéaì¸.ž¬ÐþÖiÐ7«œ~­Z;¬VskŠÃ,l™;ß@[öDÚQ”öNªgç SïId¿U%Ù·÷žw·Ø"€gµl<±¬öï­µšDëJ¢yóï¬í¼NܨÕ”¯V¬z¹©§¸ç–(^yrwÿ—½{mâ>8?±ǘD !@ O—6T…„4 Ê£I¡!c}°B_¦ÂÖnj) ¥e V¥XšÆºvÕ6©LÕªmì¯I“v¿;?îÎwö¹øŒ?HIξøŸõó—{Xï-J^×oò´Øº9pú·Ç{Þu(û‹¾Ð´gމëU\T¾Ä÷{@Á°jüµw¼€NŒ¿-Å+› ¸á÷Ñf;8Ðí:])¶DvÜÖeµ2äŸÕÖno÷Ça©|QÂW|ë„#Ri¶V_ ÷UŠŸ»D$GÄêá/Ä—‘\Ïxu\6ùð˜Ài¹Oõk€Óð¤ÕÊÅåKráJܹú¥Å3U°ÿUG†GÎ ¼V¿6·À‰ñ·QݿꞾйqÕ ;Øç’S3¸¯4ð¨Ù\½k¢*¯ NH^-,Åm¸OÞ\ºWÞZl-Ïå•‚¸KôñE©‚#W×ÅURqÏlÒì*vàØq¡öþ¶nŸ_õtÕ펣¢óßôˆÀ>Ñ¿ºÖß/ X5þÚ=Þ@Ç,šªé_u·TÔîdoß-Ÿ78öÇ®õ&3½¡"‹,nXY‘ÜÛ'XšŽ(¿Ü+¶–¢·_ú©_ì ,µò\Ñ©š.°oÏyÃ5ÀéxäƒÊŠ`©p•ó(I¬ìc|ÇÔÑÓ4Oܵ“ ;€Uã¯Ýã-°IÿªxÖ·|•›@G×û¾<ƵÞ¡ž½*~ÒÕbóf¯:€#á„~±ûoDŠà‹Ò•]»/÷ »ÒlЬlÝüÊÙ&×C•E™¯ž´:¾I´O^Å+plgß ú.Ðnz (¼V¿¶·À&ý« à§[í)ÏœU¢»åÓ %XúÚ‰é—-ÖüJ³õ÷öI©lÀRÔú/Ôv~‰žÙäêünLt ðâÁ%€ ÐX=þÚ>Þ@+G\¦ï_ó~ÓÆžYû)•Vµ2ƒëõ¬œòWB÷íŠô…Z¯†#½áËEF›@+…žñ#‡8=p<€cçEJ»X·'³Y³ 4xkÆ_ÛÇ[àØQ'odÀƒ£Ä&YÒ·Aö°”‘7¥?Õ‘•}€5¼ûrl“èè DÂb7`±&Xþnp,%€£gÁ„èÕ#ôYÜX»b×,€9vkÇ_ÛÇ[`ù„ÎÑ÷2 àø0mãy€•^ð kKèÚX¿8~èX __Žî,7< ’ø¡d…㦹"h•5ºíï:|}÷( Ìi °Øpüe`ì à†{Üsšó €k–š¡¿÷Ïÿ™ft¹ÁA°ôk€cçm¼k®r”hqðgùû#rñ:”âÕðØ1òÁ«†Í—»¼æÝ@·¥M ‹&­vm©V.ß°Ë<€Ë—Ä(À6 `ì àYËÜ+7Ä4G7š.X³–G~kÕñæ÷O:†_2;&Ôî ò›QÖnO¿XlìŽ\?t×Õck„ûBÊÅ}"[ƒûš”Ó%xTYÙÓ‡'8öˆ2¯Zá~þDÛI×â –‚UTòjiàÌ{Ç6mhûÓm]æ<³>p‰å 7€“Æ_€œpÜ×Iýû¬ê0srÀò‡c϶Ù<òvÏß³v{Ik€C­_ôEÏ‚Ô×¥„oôj9„‹j–ø¾9^ÀQÃßW{ÇNÏhtºÒÚQ ¥[x½I¹×/o6 àò¥º-¥Àšñ— `xë¹;§™ÏÓúï!CþXiíö’×{C»ú#ápäã®jùâ°rq¼”ƒO4ž©Ö°kë¹Ïö+7ãu¶{ë™§BA«\äï9Û]ºõÜÆýòpÉ«¥ÃY 0 @Nøeéqz½âE¦×¶þë¿–÷—õ&v * ÛÚÚ*} …ä •¾úƒÊ!eÆÐäemo–ÓžÞ·äB½k1{À@`׌1?ðuo €ó@ö–•eÓ»4vÁ­Ÿ8†Ÿ¯ÌÝ«Òþz“OÞ<0 Xìâã#€ €óÊŸ8|/½?”‹ûòïh;épÑ¿Pì#€ €óLûëõò®ZößSÍ|‡Ï—Óõ͘Vihû ;ì/Ÿßyæè‹,™@ÀÀŸ?Èß`Æ[``Æ[``@@@ÀÀÀ ÈÀÀ ÈÀÀ ÈÀÀÀ000ã-¹àÁ;^Ù¾ýÄ)d²À#F ›oÀ™Œ¿9|è“êøVú¹†}ÕµóZî%Íï÷•Š?[àÑ/ûø¬hã£6·>m¢fJí©¦Sð÷´5:k;Vî*ø7L‹Ó-)¾×®Û/ŸRü\?§É‡;Þôš7TŒžöÿ¼¤X{üwLµü&¼†åÃúû÷z,pªÞñ~£ütn<¿lÑD÷¼[¢£ó³òµ²qÍ0Y `Ýø›?ã­a`>Qª^Ÿ¸dwûí`Ë÷=o‡bS%¯õ,_îùés^kÓ¦·ú¸sNuŠiEÕ]ñ—׿ºê°ò¢¯»Ù°Ÿ^;q]Ã8§÷oCkÿõ*Üó*3`õü €mZ~²À×¾|dðþ%€ó,€/twüúÈ‘n÷èh7¬pÀØÀúñ—ÖeeYYÙ‚ Y àö+Ë=‰®ºâñüîÓOŸôÌþ½×Ê´©YSµŸõÓæ,¥ríÊUÇ7=}Â0{nhß Q+rzÿAéõÎòjnîzHÍ”âÍ!“çgô|Õó€¶iùÉZ_óò‘Éû—η>¸w•ø6ýñ:÷qÁô7¸kÕ¼îÄkŠSl @vX7þæÏxk˜í§„ ¥·äŽÙÀÂÈlpÕ³Oz^ø0ÀO,Ÿý—2é‰ýÍóÂO¬L›™üXñ}ÞÓ1Rð”-ª+¾W|O|B¾Ï›'š÷_3ÀØ[uÌ›êùé§õóÀùÀ™¼ à< àAƒ¥òzß{äèÿ½ñÔB§*€c?²0Y `ƒñ7OÆÛ9³)ðõ 6ŸØÅãù|ͯâ\þ¤ç??¼¼ÖóvuúiS-uã*SMk>»×i’`Qñ¶“ðÀàtϯ溼Àp¶–LÞ¿p¾pLÃcîqòÜñÞ-ƒ `l à¤ñ—¶3€K®|þ|™?À3—Ï~^¹Üãyágé§Í”O©½7Õ´&µü¡3å.Ÿ0Lçogôþ%€ó5€g-so–7–wL"€ÈEGÇ_»ÇÛ—Ç ÿŠò±íáÒs£ZòÆÝŸÅ?NîXv²)ÐÙ] ̆_œ¬ßznÞ‹æ¬þýªÛ}‹Cþé&Ñß÷÷œíÞÚù÷ýÑ­ý=OÖ:Ï}öTu‘áý'ÝŸ>€u/3›¤‡‘`é§Ÿ¯‘szí‡Ë=Ï¥6mZKGÀŠv×ðãÎqC­}€ö/toöŠÝ‹åOõ³¦nÓöí*jßÙkz !ÿŽ#u+å¿ç¢ŠD—×,S>‹«¯W> ûw´5Æ.H ˜`ÑÅßÙ{(dÒ ubç;Ç‹ÿ9¸Ë½Í«\ ÍýYDÝüúûOûx’Dûü4×àzÝt¤¼¾fâºQU¾X$}}GšcÆywIvo IDATïû¬pòüIÏ/éïWÒÓ&]ðÎÞCʧYŒïôíâÊë‘Ùë)¥¸Ã޽C-¾Þp"X[œf¯‡öñ§^þ ¯~þtˇžþ÷3xÿÞ¾úõLZ~£ž~Ø9úþÄ‘9`rÀ±ñ7gü?öÎ÷)ªëŒã»ËeÝYØu Ã’.ňdu@wÑ8Db2 ’µ:Qëˆd ”Ê" cc§vµFmbŒN·ÆÆLJl“6™:Žu¦™Lß™¼ñE¦Óÿ£çœ{ïÞ{žóì={a—ñÅù¾îž_Ϲçìœóá9?ü§°£­6èÓ´àãÁ@Qý€fðÂMýñgÖ>7À\z À!’…™ÞÓt¯ƒU}ú‹ˆ™=•7°½K”Ç0°o>²¸évñ÷Ò·¯Þ=E>”=gË1·°Ìâíé:L„D ÙÎÌÒÚ–‡/P®wû!¥ägx6©‡ö½†ïCŒÑ3Mi8½Z§¥'sô–é¸âÂÙ½I?Ô–Ö”Og´án¯ÐE3BˆBsì#Xøòä âÃòíìõìÃEv§CCÛØÁÀ¤À°ÖOxÇŒsó:‚þ Úœ33díá²=)P¦õ;OÊÛ[ì?ó`Gû%ý_°—ŸCÿ€_^Pž«ï/–?מBÿQZ^z!Qrf Àä›5þ¯[k+)))))å€3ão¡Ç[ÄüÅï†Ë·î5v2Àyܸ1pýÚÙÇ 0×Ü Ü8s¥kî©wú[€ùô€wLwÞº4ÈÒ‡>.+ýû7×fx§ÿF¼ºŠæ7¹öÎØÖç°ôHyCûÀñSÅ?P—ðwû~QÖ•=gÉ06¤qÇàÀg 7 Yä)¿t¢;‹C—­T‚¥¹ÔlÑ&Þ»69{_ëC×z††}%×ËÏŽùh8¡ÞZc^OX˜ÚÈ‡Ó ú™m¾Ñ‡‡È´üx˜ÆzZ^ùäÙ»3•xy ­“DèºèËÑ\¢oæõ;ú’UPž€a|X¾³=€dê×íõÇØ)œÌ‰èÀ˜oëö³Žz–îÉ€…ø°~Âû‹¯ÓúfèÄ'ÎÓ@ì à8w¥|rNo—íI€ò\6ñðÎ}ŸÞœÛ;ìl¿¤ÿ öòñåýCøîòå¹üþbýÏÞžbÿQZ ^Ú-èÊ Àì3] €•”””””ò ÀÖø[èññ-Û}’LÄ~áýÉ2aUÑA†HúÛøžÀvöظǻ} ÀVúWt>:xƒÌåž_¡ô`é»tâY±×»›Î°GÊtöãé±ò8ö-€«O?!¿ž?ýΛäÃwÞ–=gɰ;Êï„Ï x€K ´'Ó%”aÃÃÔš]F&ÑãÔÁÜA€ÀólùÓ÷ñËck¢%½´®Mºï—ðŽæ©(sAðŠuÚxâòsl7Í”OÝÎ}”;ʳñ} ™ØWZC`,_bG؃i«_ƒh/RÀNáñzÊGýt9p¼??ÌÕOx üØëÐû´7¸Ãg,½Í°«ölOšùu³N,koÏ‚÷;Û/ëÿÐ^$¾cÿ€BÒÝíæóí‰ö¥Bp*Éñ/ÀL]ç’ZÉ€`%%%%%¥ü0 8ÞŠàÀê ª¥Z½«è˜ßÌ áÍW2¨º3‚°•þ·:ë«O€­ü6ë®ßê]ªGߨØž-ÏÀÀ¾¼pø÷û¾\îÑ=¾’g<;W'` §@»™@7õ”¼F—>ûŽG*Ö­¬ îÐL?™Z]Pñ~se¦áê«1æí­I¶„†“\&–”n,–æ†$Xïp€UkÒÄ ˆtdH¿OÏ ì‘°–/±®~Ð^¤þ€Â ÀôÒSP7{~Ô¾Òyì˜$ôh¯•Þ`—íI€Òp´¶&µòöÎ;Ù/íÿÀ^,¾cÿ€_]$½[ÎRÖžhÿQ*0 ã¯À,’6zH°’’’’’R¾X 8Þ"{€ej3ØÍÍUÛ2Àlù pÐXXز7ó'¿šKOx·1¤kþÖèG^1±Dá +¼Ò¯N¢éÑòì ìå·)”0]â\}úÏŸy<Ö’g‡ç,À_ÈŸÍ€ ^ô†¶Õ6¤uɶuÀi›¬?íEE­=ˆ,#šY( 'ô^3% ÀáÙzóçðWA°ÅÄ ˆ2Çn…{$,ćåKìA„«´©?`§ðx=ýùéóÀ ~ð}ÄøVú´·&j¦À.Û³=iÚÚÈXMÖÞy`'û¥ýØ‹Åwì@Xz· êõ'Ú” Àâø‹ð¦¾õç+)))))å €Qþ-Ôx‹^ƒd%Pò©‰• 0+öfp¶‰°iÀöôÆ5HVy›;ŠŽþÚÛüN}ê ª]GÒ£åÙÚ7?q‡`=‰}ýò‡~ã@hÙ3–›Ë°äûŽSÏo¼ý 5Ñ^¿m'm à„6~ØC‡î;mǸ †[÷”f`?}÷<=rxÛqlÛ9i‘Ý1'Ú#`!>,ßÑ@¸ú ö"õìNOñ¥C³ÊƒúÁ÷¶R ýÚk«y®»ö´µú~¥ííÉÇ5HÙí—ö`/ß©@a郮¯A²0ßžhÿQ*(×ô ã/ÀKº}%Ÿ+VRRRRRÊ#ãoÇÛ ?ñ"L>e;y=t7nŽ`G^3ÈßáË49÷Ïfc§0H/óCûýÜ®r)ªýrdß÷oSKNë×9>c¹¥¢uNÏ„Jç ÀÚf£SþØ6­·ÛwÀ“ƒÒ]º¡w Õaár&‡~35vzÂ7›Y"JJ@8*§!Þ,Ƈå;Ø#`hï³À|ýàû°öàB lÂØv x*a®SpÓžP2_¬´½ç Àx{@ûsðsöæàvlß‹l¯|¤5íëí‘=À@êÑé©È/ºoÏ PRßï2y{»àLäx¿–€íöç°X°W²ر}ó°˜Ï´§àÅ।G½¾$Þ´M«}O°’’’’’R> 8ÞVïÒa2ýÀ@<Àž‘2ýìå¦ýÞ@n§@;{€c/Y·'qSzãÚ#¡|É)Ðо°gó¾ââ'tü®øêgòg1¯a_[¥Ã3&w\Ño;Þ6^_{~”Þ4zžÎs>ÚÎZoÊœÝÃp¸òMùñkb è×±Òëa0 BìqàlñaùYì슷÷Ù`«~Âû¨áï#OæíM%ôçØ%Ÿf'ç\Û3”ýÚTDÞÞhÿ ­½’µíûõwÑ4äCÛÚ/?š³‹ïÔ?ÍãhÇüA{*^lÞØ£µuåÀ©¤¶r­`%%%%%¥|0:þp¼ýñO‹Ž‘y`üAé(Øó§ ¬éýeG;r¼ØÑìY3Xtl¹ãÈI|טî…ö³û‘`zÙ=ÀÐ>'å‡`y*NÿåMVÞ)¶ÅWö,Èõ X®=À™}‡ôžWG,6ýMgÎ-ƽ¤ì‚Ò,÷Oïÿl¥É”÷µ¶ŽW~èˆajpzOnîHLùºo‘h#Ãø°|™=Ð~q *oï³ÀBýàû‹ ië?×_pØ/öho{’-™&ü8Ζ@»mO(ÓCÚhC.í Þ¿·¦ÉÈûeœš*9Œ.I‡öËú?´‰ïØ? ô®¾¿Bþ|{*^lní׎˜¢#ñR¢M€ÉoòØ86CÏ¢Ü4—ÔúΩk””””””òÀpü-ôxÛï­ztkìÓ¢±C°¨Ç¶è¯3cO½‡õC¦ÖÜ Ü8serî©w:s¯ °'ôqYéW¯L{JÃ[öNÿïá¡k“gï53Ò#åQ.'böCûÜŠfôöÎÿ'Š3ã;»ã2·Ëî’Ý "ˆI •¥¥êY[ ÊYÅ;¯ÈÙrž€ r9¸“€$B¢ê%$"=0!xÚ*&=ûk/Mló‡‹ÿ@“ûåžyf¿Í<3;»ËîíÖ¼_&ÂÃÌ<óyžgvžyí3óŒð„'Ç–ß¼óùÙöõéNg½´²>ß§ìšiÖ~Én&?ì¡ °}Ähm¼áÚ;³²‹æOß›B6’.«7¸ùšÑ‰ÎÞE¾VuN)ÛFëx©ðÙá3¾éƒxÞûd¤r¹ŠÈ÷ÿymãè —kïµ4Õ‚A°ŽßëÉç;z¤÷¨*…H%5ö¶·r}åþõâQƯ,Ÿ2ÞX 0)ŽYµ|*éÀõ™ò1õWt‚”`´©éÞØðöx`G|Íôì0¿y†N‚n{Ví°ÞpuÎ ó%ŸšCioEý{¿mo»Î— 6Íæó{TX¿Þñ¯ŒWeý Çû³}XŸ_&y{B€ã À>jG‰ÿÞ4úÿ°‡tÈoñ|ûÙa7Yú$  DK€eýo¬û[ó¦<úF¢k³@{Gp«öqâ G·yfY¶LI¡×û§6gØPîë~4˜¢þ$ñ ó-qyŽÿ5CE‹óeÝË5·ýy„3,^2>îsv/w\¡¾—13üSŸ3¹ëQcºêö*û“ 0_XX”lÈøäâï_þÝs=«—–Ѷ(¿’W¦£"ÀÛL«»¤} N¬×ýFià¯À÷da[ÏpZÉÃMï¶ô޹d…:o³Ø÷£”-W€ÀýÛz{VÜ¥Öö‡Rs²T¦þÄâKÎŒ¦³Ço›XÞÑïkÂlO"”íîRR™·Cnoùñ#&ÜÚl(÷ħõZ*Eü:Ç¿$Àñª¬ôø`?óŠíÃúüªäØžàÿ·ëáHªèíé™Þ®¾U h°©¾c8Wû=À Ößj=81v5s´Øã»õï’¾ÿþÜDÈéÀÌʧeÞ LG QÌq<ŽöovosŒãTî_/½ú3›ûJùh\ö˜ä/¯ÿk…ª?yýÛSOhO —öˆõç+ÞŸ_p¤¬ªÐ`‚ç¾_ýí›…Ý%7ye€7 V€#¡2í] n0ðF °@€ âsÖC`Œþð¦ pï¢þ«²€`ô·€Ÿ½Ô€£¿¼ùÜ™ƒz`Œþ€`ô·€ @€0€`tÈ€£C À` @€Ñß "ÀŽÞ™žžé{AºÝŠÞY²ÆP,:äM¹™¿Ò['cflee .'Ò}¤.uý)%¡Ûɶð¢ÏÙÝõz[Œâ•çûe§x–üYðÕÚfÅ1Ǩ6¡½Ë[_ô­Ï6Öíëz4~g@„¼>{Ý>mfûß ý-ÎG@4¸÷©ÛÈŒ£¾¿Îçk¶û;è…ažr>.œñþG/fkØXëÊ®`iCa™pð—‰ÜLÅ'©v ;ÿv¼ë>7ì&WECÎ?fê³èq]irWLô7Ú»x®™^·™ÞG‚É|¶ç@Ô˜í+‚õ·8«`ÇǼµ}elŒô¹==pùµ4>@€+®—òµâ¥ñ`Û]§Ðÿê¬û¿t@NyÉ¿ –6T}`º“À­DŠ˜ùlt¢óÜXvØñJ,7ù‹PójÀ.—‹TàgÚõiߟ˙–ÛϾ˜ªÿ}l*#îí]ô’&ÇëRh…ô¶Îs¦ûÛp2DY€ÙþW§¿Åùˆ‚_hT|QÊïñ~ÿ\âö °ãf©µ‘&ÊÏÅC€ ›MGéà¦m('B!²w6¥$r+È3]%Z"‰—ð‘ â¶‹SÂä–ó×#+¨oÊê‘ìÌÅ=±¸ K€ö&þ›0Æbi›«pÅ ˆº+û_ýþç#`µœä ÿhwû!•^ÇM#ßqïc£O€7ì°6îݤzl9ÍyoÜ5›#¢D§¥ZÿÞä`LêÅb)œ2ɉNþA8µë÷¶˜=úu‘í]|’ËüJfжçe¦#é8¢*ÀÊþ7¤þç#`•ì¥üs~3àö'Û~® ¿6%ÅO€3vë>Ïùs`Ë?¸ƒÙ‘nì`ñÖaNCsÃÎ?¨·T›.¤Ä®2âßÞö–ê䫊¯ěȿÁé]Vô¿¡õ·8ÑàÊÒ¤ôÁ$Ÿ{ÿS')îz¦:‹“í$·õ˜Bè.=îëîz}ÅŠÐ+ÓÍ>a4ýEÚß+ßÌI½'æ«Åy—¤gZ-—òçË’»–_ æDX&Ûµ$Àå3O¤/éËç˺—knkíßr—;µV+^6> 6lšJþFµ~dùKË¥ü¶¾g0Üñ~aÿĹþ=}.ÞÍíü«<„Àòeåm=Ö6×w—¡˜ü¿…IëÖGüÛ»à¸pŠQðÔ†U|I€`OGb‹ó ®¸nÜX矙Ã'À‡ÓjGc-ÀEKtÚßûj“ [.;Mdw{ÏUÓk‰~ñ6ÕŒÝ/Y<šÎ¤U…¨m‰Nu¼ó#iÏ›]Ÿ ‘˜¤³JE<“pÕKicª¥edJ0‰ù×2«íßîr&‚ê"¨ °">M.8. ÍÊê‡ÉŸTY.å'`³ª3õ™õkú# då…÷$)þ‘Nñÿ£éÊ´n}ØãÝÞöËÕ™ß2Õln)KÆ &ìíCìoq>¢ ÀŽ‘Rë`+ÀŽã™&Ç¥VwÉÙí1àó ÜäøØKNý±¦‚Ψƶ»Îäÿš¸´Äõÿ3!"þç"j(D_-q;ǧçÊú̬åy™0Ùx{bèy5¢yÂäàÎí3­ïFö®‰Ê}\ÿ³Ñ‰½3‹?‰jY8%æ·wá®ÿ[•ý¿Ýà ×tÁÌÆËħ)ÀÅ·håõÃä/.7Ý'šãBfê³°Y>:­(ÞÖæW/¹õ­e¯_8×g+Óºõ÷ö.¾Å©}ó‘z\!þöö¿!÷·8«`Çþ´À©7˜ü6t½”¾–ðÌhL8¹Ïô`­8€ÉÜ[K1oø2ý÷G6KOh¦6páouyG8•iébA&D]NqšaÛi޾gçNžéQ³°Œ Q‹“Š£ÁaÞ¾ÅíüÔã®.zCíAš}ÑqzÓšrÿŒ *âeâÓ`ÛI:†©¨&b°bu‹C­!Œ3õÙâ”Ý­,_V^ßÕ”;¹õórîän=¦LëÖGÜÛ;+ÏtU¥í-šXÀjØ×ÿ†Üßâ|¬V€ûݲ©'˜¯i5vL•/äóu±`Aºå•™\­|”/U ÂäùšÈØ-yŒ8béyXTwR$¹ ¦£kÿÇÞÙÆ6qÞÜ[ædÇqDUBÓ@Q;"к€ H× ­Ú¦KX-ÑJ2V¢Ž„—†t ¬T¢¨ñÒ!A* £­Z$^ÃÔe_ö±iZÅ—NÚú¡“¦v“vÏÝÙ¾7Ûg;¶ü~•Šû^žû_tÿü¼i*'öcNµ/ !rè›à£o*¼nߢ>fj"íJt¨Õ:­YÏïQ'>6Ñ5Õ×V¿”hS¾h9ÅÇtüEñÁcVv7XÙÊ@>œÌ¿îó-Ï#€<ø5ËÒ &ö•mëÐÖCr˜žc<Xk MöþÆyÿÊ;’ìÕV>¬i7”6êMwY ÑOèß ÄOèÉãéB¤ÈZõÍ?å,À†e|4+U;ÇU5l;&¶Õ/¥—«ìÓñ§ wyœØŸ“[¯¯f†¨úäÕ¢µ¦U°¹ì&%½ßÊ:…Yü¡zwñ@€ñàdþuŸoyä'ÀVÿµð¼ý‰‘f¢ ´.[ŸÔYF— ¸|S$¿(D¦¾39æS÷ž,…(þº1&º\7ƪõu! TN¼¼á½öl7|,mvQ²¸hxi=&¶Õ/¥k 9ÄÇx|Åïô³æÖlím½¾šÂ2'¯UÕØ\v’ÞïÀ¹] W9wÈG€ ù×}¾åy—Ûü×(À'Ê|Ïèë,{«¹€ë§ÿI{ÎUm’¬Æ&oïoãäÔ"?K½"Cƒ_\0C=oŽH²\}ód.×3iirCQ¨ñcÖóg`‡ú¥àEê©âc<¾òZoÍQ€-“`Y¯Oíæ¬TJZ`sÙMé›iX(©Ü3.µ™¥:IV}§m¤p>Bdð®ä,ËÑ‹Wb²<ô¸C5ÚTÙ?W´Î8‰°S‹g6ì\?GV޼Ãï“·éCjÅ‘M¬”ݰe${ pzv’Þoº@@ñØœ]ç[žGyðü—|Ǭ=­ <õ)_rE¤øoÓ…`Ñ6ùzš ý]á95­¶¾s¢€Ö"x.²[óYk¥¤ù„ÃóÏǜ֙p3Ø(Pc^MçÏ$Àçú9 °¦Šñ±p|*©VuàD°´‰ª2 pÃbÓdÝö1ÀéØMWœ(›¸WÿmZQV„,‘Ðýõ‡Ö ËõΫõÞš`¶j%Æ•üŽåt-‚žOêd!X=m‘^µKlô¬îŠå‰ÎÂ) 8L‚%Ö®þJ3Dq~‡uo³j¶ÖÏŸ¸—ߊiâféøŠŸ‹à̹*õ©mÁ“W¨>;ëjp Uhs<'­“Z>K~h[8ƒ»ˆGiïwÃÇ’±{òž8uÈ]€­ù×m¾åy‡/YïÛ°5ŽÈÄ ê”Ê¿ês}¯Ši)—\òÙ'¥—Y ?ï|þƈ¢qiùý?*+ÿ¨Ë笧6WýdÓ°Ö²Z~&¼|ýøö­Ýwây.ü¢ypß7:–…ªªªò›„HoŒ.–¼Ÿîé¾#½±IiѺÝw¯w nßw>–¡E:S[¥àå=Nõ?1"Ô¾~XÚ{|ûÅ;Òî?{\·'êk­Ÿ5>Н¹páÔѱˆ¬µ”:ÄÇx|Å_•Ú]‘†.E„`FۤꛧºG¼?»ešK9|„³%žÓêä§_‘‰ži»¾Œ»S#T IDATœ)%¿ß¡šœ‚nŒi-Çã%À¶üë2ßò<ÈO€¼zD›†2ÁRm’JßÄ/v?äÛÖ<¡ ë $i÷; ÝTû¿« Þ 9xmÞæå#ú²8OÃù&íË„¾R¬"–ã/»¢OÙºF:»D”÷†C©ØÏ9bÎd¥‚C l×—¹ØHÒßïPWSðP­ù––Ÿ‰TÓà…`7ù–ç@^ìŠ÷ûûOu8~2Nõôû=!C©ý»ÿ&tÎØÙ?::zýxâãÃEUþôå4èyõuqï†î•{èP?c|ô˜ª*ÀòæxzÎŽŽîiNyžP†rÚ?…RßoC›TýyØä¿·bê¢ÄY °·eÛºÔëgŸoyA€Õ¦+ (ÀV ª2®°öCFËÛ¤7îåïÆú™ãS zGJ~¿çÜ–ªoÚÌ{Î7É9ö‡€\€Å 9ÎoyK€'L(žЉ·k5¥ëê î¢~÷;îâ¹ì¶$k‹×Ý#’—ËY pª|ËóÎWˆ~:vdpûé¹1‡©¨ß}'ÀîâÙs>¦Ýóxf‰9³LíÁ¥`žGp¾„»:ãÔÖ̤~÷=®ã9¿{l@ðä½—$pPzæy€ç¿çÆØ@S_ïÝ?„©ß@ñ …ÜÌó#¢~–ø¿`@€`@€`@€`2 €“``&ß À0ù  \±ótÿ© ¥LÈíßýëÛÊÊo¿ž™ý®‘§ßåF[(¿86éëý»ÏIW{ß gµÏÙÑÑ=Í~'ôAD|o þ2Õ–Óêª_Hs Çý£§ŠÃ׿zuÙ_O&¢‡Çš¤ÔW £OydòŠÔœMþ%¢ã"À;o,/ó)”m;’xïµ'|ÏÎÖ^ÎÉ—ä­ŽÂ$äöï+5²WÙl§¡MÕNYL}L~ñ±,vŸs%¦ì,‡ä-ÀûþÑç†%µv/>’¾»G¤+g}=™ÿˆÎd¸J€°%ÿ%ß<è\ñŠoâ–Ñ£Gø|ê<ÿðC¾¢ pûß*+XðᇿúÏ{ÙïŒÛ(?©¾ydpûÖ£šb.[íÝQëzïÐÊ:É{mËæ±á–ŠVUU­š‘³Û÷W*'ï¾»yùSR°²ù/Ò•³¼¬š!º°ªÊÏßO€­ù(†Þ#²lÅÂMOú–Š7^<à›·»âûÏÿÇÞ¹ÆFq]x†µÖ£awÙ‡Ìî ñ”y›°6¬ q  ¤4`°Qì 1X¡PäTšŽ%‚‘-’‡VÆŽbÙ."P„¨0a%åþE„£(,ªD+‚íÚ´©z_3;;ذëJ=ß0ãyܹäÃ7çÞsŸX¶)9ù›ÀÐC÷{-d€Í¯¤O\yßïÙ3I[ ìàÌâ{ÎßM½£üþÞj6ÄßTÄ[V(Ý@?8/&“̼fá‹Ó“&À35»íÿ¹~3ðåwlümíßÿô í_^á\¬°|)ÊÆÖÚë]–*SÙ•VÚsûúÐsNGcÅcW9<6‹ o¡š‡wã3¡'ûÙ0îí`WøzØñÄùh»~eÞ÷þôöž¦ó¯^˜Av OD÷œ_v”ìÌZázƒ}nº¡TŠ’{ÅêûÌ%ÿòrm×vçõ e¸ÕZÎûŒ‹¦ ÖµO˜´QyùrË9zÿùKÍ×{kÄùë ÂÞruï/ÝNØØNÿ ý“[ˆzšÎߨ?ÇêgT»vÃü_&K€•ø›‚x ÀŒÅLyxu¢2‡I€KON­Kβ n7`7†ì^¹ÉJB¿ìV¸öú3ް)`gþ+äVĨÜë‚e˜ö]Gm-€GÆ4B[Dw¨û°ÏŠk}7rW9NÁÎþÄÂÁ–\£U“%’k•Ûº%— ëÝ*7Àƒ¤ˆqÁO‰^‡BõH€C¾Ë—6K.r?žgWJ/Ͱ`CûX€óÉž¢šÙ_ÆîÏ`ß»A×]t>¦ù´Ÿ$ˆ 1îsX×cÿð.F´É<Ë5šO©`]üMj¼`Í€«©ûÓ­¸ð™)‡$# «+ !¾ÅVƒüwèûÖÖÛ·+Œ«Dÿõß7m2Àý.x“nfT¹ñ•³ ðzçüÕXløRË]*´™ÈgÇ56–Ž)à÷â±áŸ-G?þ 7'ãã'Ê#ùcô|,Ï[DÂè¤ãÜJŸ›/¾ßY~ìä?°çuK]û;ÊOŒˆÍ—©ž Ô%j_T­ú"Éj"åVi½)©«îhçKe<Î۬ϛØÐ>àתŮÿ¹&º*°Øz{ƒ®Sû;ô‹<r«E×)ͲFè|Ï™/:[Åæ?8`cŒý7õïùyøyÛñ´¥ãúÖ´~[0)¬¿IŒ·œˆ¿Ë§O­+·ài>ñêêô$d÷>ƒï»ƒŸåö[tf0à¡›C>¤¥–`¯Cÿ¥’©<5D­&ãe™¾ã\€‡cãBh”­ï.]œ{õ)àáXo'½xlßs4«iÅ2aFç_%©Ü8dÓýˆ?g} ‘öJ28<¿ŠÌôEØÄ]÷Ö‹8¡m`¦ú ©í™çÚHnå pCÐ<ßW+°ÆöÃ9ž·]gfâôÓ2h¼‹S½\vÏ¥,u¼4:ßs¿—Œj‘ .òR2ØÆ}cŒý7õ¯!ØL \Ù q–×©Ï Z6ÄßäÅ[ÖÄß§ôñ×(Àk>þizR²;äWæûѦp; ²ä»r3p‡ pù¯ \¹n™&þël «·F¤É¾H±«ÂRrÛ·0_"Éà빌ý›-ÚŒ8ó[ŸšŽõÏ¡Â;ŽdÆéÙŠ£ËÇÉùòÛ0Õ¥dʲ.³­(žÂ‰`;&s€{Ë KëØ±d…«bŽãº¿µZB÷`™•º¢szÍ`9‘!Vø¸]ûH3µË÷ð2À`\{/Ýl(³]‰/Àœ °"À%Q´%×°)½¸%;ÆE¯ðóæm6û!Ìï_æ‰sQIêâ¦yåPã±Áà|Hz6ÅߤÇ[ÆáÖ¸à‚^€×LŸúizŠ2À‰9ÀBbð½2À{#5AÏî9›“{‘#Y¯¤ÇÑà„ûd¥¦žÜËÉËj¸'®Ìþ­íÓÖ‹ZOåÌf(;`¡/ØLo—[%ò8RÌ Ræ 0g0`œû]O޳RV•’­»‚Øk³+Mÿ#îO€iÿ}üþùý…ýQɲÐUäˆXE°Hµ›ão²ã-€Ok›ò°iÁ£þ’ ÉÈ»Õ*ÐB¢ ô=3ÀÂÎAѳ=qVí–·lì6œãÚÞ Øâƒà„àfÇc¼ 0^%éc"q踮 ´eÿ¢ºjÕæ*ÐÊã9¾dèw¤F”xŒpÂo’ŸæTfü|¥k·g`i)«ÜjÑ^€Ñób¯Í,fU£,©TºÄß·Ë[öÏ—I²ÊùÃ:ÀL‚›ãoòã-üß pá iO–Û ðâgÒ–-HUX]˜l<$8Ë Bþ51ësEŠðÚÂw¬¯AÎÕ5"Z¯„ NÇ›*[ÁÒ 0^ØOý›­)Ì–ÎÀ«ëÖïž A=£‘ÝÜu€'”îÉ‘ðe;k‚Mêa]3ªÅµXaù`Î:ÀT€‘ð’Ì1òuœhÍ÷(¹`¾{Ù`å¼Í.–¼—w½Åž€åje7wß.lê_æ'ìUxÕÁÙ ÀüO°9þ&=Þp醴º] 8OC,ÆŒþ¤!zk²²V€qâwèûÖÖÛ·èêGÎ2À‚PºBT—5B·p× V.‰JRÖsÖÇ‘{Sùv‚^€…YÈ|ëÛÕŽÓÙ¾Æ*ÐxÙàš¶¾xìÏlÙ£Ì1tAKùÎp_œÍ60»Rôœ}ç÷ýúÑüÌyÝR×þŽÆ#bóeÁqøP(r3ûwzgLj¸q›ZKßßpŽT°ÊoÌ£ëé hCûáÏéMåŸ °ÈŸÑÓž»N•Ù¸ÚësÖ‘^z·uÓ̶·7è9{¡£q׎åùû‚ž3«;|ö¯W¸ûºþûoì_Quó ›:ôGq†Úâ‹GÃ’àN€Mñ7ñ@€7¤©¼ø>òß§$~ð$ûFýãÔe€CµD_1/»0Ë þð<©€ ’ÜáŽõ5U.`l ÷¼÷¾XÒÆ·Á5f€¹'NŽ×·Ò}AÎSVAâ…öϾ&Ò=i÷¶uÓ½µ«Ü‚Ó 0>ŸÍµ]ò,¹ÛKåE×¾Éë¯Ü–#¹Îÿò×þËÞùÅFqÜqüV[ÝœÜ󭹓»”B•­Â¾‹Ä¨=P Ù[áÁVÀVù!P›C‘\c‰?v+pTE•ݨl#Åu‘‹vÂSx‹â—¶¨Hm‘еêÌîÞÝîÌìŸ[ßmúý¼X{¾ùóûÍÞÙÙY%Ÿë ›qqíÓt™¡(ÃçôQbãÀ˜øQmù^_[yz%ÍìüàÍó5H¡Ðöéf£BóÍÀ´¿÷ ƒ‡îpl±G°Ÿ³oûuÓyj®zÉ qÜ99€Ò%À6ý-ƒÞH€WAl¿Jüú¿{²î‹oÌtÅçàPlÏdvŸß®¿>qM€cñèGnù×ëÖ}á÷Ž w˜f¸Ïv?zþi‚moõ‰x8Tñ}úÿξpö˜¦”µ4~ô|ªÏá¹åðúk‡âéÌ/}zí3õéÌO·úø»lI€C§w ¥ï\ÜÚÓœ½CËÛûÛ39¢f'ì 0×¾‘§3û~’/Më?ù*ÛÞê#±üöéI##­žÏ¾–¨bä.3ïÌèÆlë<J<Î}ÀKàœýœ}ëoŒ½ŠGX—œ(Ú;± 0°ªàeRœnÚž­Åbáp(fɈ~êçÓÇÛAúÝàÝ w}õÿ›WTÙû—HÄ*r‰ÅBySºÌÚC•• ó=Áú·]¡pee¹Î ÓÙ–÷ô†{OÿaqñÂøÿ³ ˜ûW+Ï/..ÞÏ/÷ŽIÿDØý¸0ûاný«í©þ‚  °Úvfl“ó{€Ë¯·à—Q?"Û°Ù>ç/çvÄO2¸ýïúnY+Fe§râU7{‰ŠÒ´\Ž•Ù>/ôW@ñ`öˆH 0€¸¤t}½î_U«²gáß0îe²í¢?)û±ßöo4:ÒÛ㺠|̾·¶Fæò ° ˜ p 0€¸¤|þOÿ𖙊g»Ÿüðôæg»wÿãÊ $ˆñ‰ßŒÿîÃ;ê]÷[³ p û*oÆÙÕiô]D ` ðšäX×Wë¾Y­/µa7~MÞ[ü7TÕÛ“]”×þã—ð„hßú_ )H€H€$ÀkOyeõŽHÅìµGnö…W¤ýð釚Óg«^Ê3>¸}‰D€@¼¶9–XÍCR‘¨êêêZ¹TëeOòÄH€ÿ¿v^íI²4@ ½JG€—$ÀH€$À` 0PžøPwòuïrѧ÷/kƒ×Ž9—ž3çû6Ë›S3ßý`׋fKo3;ÇvÍÄ}ÕÛ0:øéŽ/Õ´4í/È?EƳ}wÚNNÇËØž—? €#êYýu°¥j@¦þâI{ÝkÇÆŸÂÕá;o޽â'¢8øËwùȶϴ÷”åŽG;·¿DžðèŸ×x•ü|*\ߣTÞÇv½¨÷Wôzôú[¼x¸Ÿh¬Þ¦wäÇ%gxKm.+Ñ;-¤vÒü—2qŸuEkýÒô‹j~p`É1œ[Ê7ŒÒï&ÿ2éîu±û£ícKE¾ªYž€µ§Èæ­¥kO´×õüð€3ÊU¢Ý4£$à5þÈôÁ_<É pÁñ§@&N2uдÖýÞöË’+ïž`y$˜+ÛìmX“ °³¾Gêô‘‘éfè9ôè/ô7 þK€£·Iã‘¥útæ•­Òã’31Kðí™f‹Zæà¹’¼¶x?Eš®+Ù,þžÇ\Ô6W>š9ÓB£·ë\¯Ç *çš–b_?,swb\ë¨/]{‚½îç‡çøÜ®Ï²'¿Òé4÷,jü‘郿x’à‚ãOA¨4 h#§ÏgÛs·_ðW¾|Óq¹„W‚)ŽG©`[s˼Qýô¿Œú=§<8Åô=édôzôú륿Áàšmª9U‡ãRÓ0KssºÕÇIòrNð¶3±SêEc™žhœ®^H5J=ŕ׋ìM¹Goáüqhµ fdx¦¹„í öºž^ãðEÛÍ… ø‡J-ÀþâI^€ Ž?1×Mšî±ú«Ÿ.ù²Ÿó—^>®—÷qïã«RæØfï2ïûëõ]}ºDÇÆÐ÷ƒè9ôè/ô7þK€¦ŒáVíÇŠZžó­ºŸ$ofGP½JHë—·³‚G7è±]™OËjZ’¦ªvH•så ¢ )­·ÇeÚÁ]@8ÿÿúaÛrŸá‰¨%lO°×õüð€ûo™-ó±^m–{Ú_<±p¡ñ§ÚfIòuÊOûm_È—÷5¡ëçëZ¾\ ¬ï¹Q¥Ÿ'¯G çÐs ¿Ðß@ú(V®Ú—óÇ¥>ßhj;•ŸÁ¸=2Ý£æ¯mV3ÃnÃ(©Ýdœ1ºP_Ô¤Ù^Þl‚-òéT\<ê& ¼?VߌqiÛãíu??¼Æà‘0Œt“Þz§€¨ \PBUR¨:t4»Æ#w˻Ұúàbß.sìªïyQ9Jä'"ôzôú8f›ü þl“ÍáêYò–±æˆÉË&«¼ðÇw.Üj¼fnBU}˜\Š«™“·RÄi&þLÿI1ÿOë’#ï;mÝÈ2[KüM7=˜ä&†õÑO¦â¦dž²—·ÌCl>P@xþWçoÜ‹µß½}~¼t‡DïÐñüxÉô{À|Êt›7®6ªÏ‘ ï,¿=‰½¼?„)×ñ¸Çwmê°¹ðEöôÌ_¸ø#Ä'á÷nÑ.žñ&[ã`Ÿ^¿ßïçû£Î-²â#îúyn‰Ê ¿5Ý~‰Y¿ )ïêIÿíúÇÕÏûO’[ËMå¯wj>3"¤­~Iûâ`®™ †eúÀ—äZI}·ŠŠ|ËMè9ôè/ô×[å pÃE}ë¬Öƒ¶3 ªJ”@…‘Gª÷êÞË.cb§­å™Ûב=ÏwëZ²Sj³:ŸJò‘5/xy[©äéËèÿXMTœ£¶(˜J»Û#,nKˆìþ Ö&2öôd ÚïÑ>?^l†¤­?_=ÿ>LtwÊÜ =Ñ^áü}ï9>š$]¿j½Ãe øÒøãùø$þÞ­úÀÇ>ÞXë— °Û÷õÔyóPó³ÌH¥}·š)Ú/Ñ#«@rå=ý!öŸÓ?‰[ý'&À¶òÔ]Ù[ ÊY#‡³×ϵ/Ø+éß–”ù™>ðã%¹‚YI}Ï1×¢]ª‡žCÏ€þBƒé¯4¾;KFvì%úc3üŒàðŬ9D_â›[¦3Ígt¨Á½ ©äûßî“ß‚§‘šl¸;“XHéÿo¯#­w‡žŽç–’ S ÂHä¯aÔ˜ÔŸL7†¹a–$§ö:χJ–æÏ{zÌØrþ`'á5-t´ö´¿ðã›ý¤éío·Ôé—RªšN3'媞×=C/(œw†óßž`¯p~´yÀè9Ot“KÍL\˜?||ï6}àã oøú ý>ë ‡éÌ™S~.¨OÔYb›Ì~‰Y’+ïé¡ÿ¼þ‰lóŸÛË«Ws—Em³º´qõsí öJú—Ò˜C3{¥ú ?, ðÊ껑’¦3ûºµ_m…žCÏ€þBê¯,nìÓŽLêy#»ÍÏ@¶q?¦ßXƒCã`¯ið`]«^“T µ˜ï(0Ö¨7Œ’VýpbT¾h©¦E ¼yÁc ö›3¡ÄÜ…ab–h—I«Ç"'¿K¬<„÷‡ª(l ¼b1Uo§§êÚïWÀò3ƃúµ=1²õ5ÌZO2ªÐµ›èhÕ:_PÐoo›§`ú@ÄQ:âô÷›Ÿ#µ|Yüq‹¿FŽc‰OÂïÝ®|<â¤þB¾¯Ï¯Ó?ñxÜÏ‚Jå(÷Î?Á~‰Yü%”âµ8mï?¯‚‹þ³%À\y¶¾N›J»±õ÷¾}Þ^Yÿz']ôA2^¶xeõݼ@Hrºz=ú ý ª¿²˜h—&™vWßá`Ë|¬ý¸ºßŒËôûz*ÊæôÉ@¹@Fsª?šÊ®%hOI"a»Þ\7i½WŸ¾s_;0J.é:º"Äу‚)m'wλ-™RùÚ$Ï ÌăÚïѾ8cLþÇÞÙµV‘¤q|›èhÈÅÜ$ Œ;؃,è9g3GÁ #Ñè`ö"“…‘…YYƒ1È…1Ä@ÖYÙ¹Jr1‚“…‘(ÄÄ— ýã¥W~ao¶ª_ëå©êêœhŽáÿCÐcwuwUu?ÿ~ž®z*<…nÎfQY0ù´¡gÇÛ¢[ýÌòÉÖ•nÂþˆ xø™ÁàXç ©Œ½ f ÚIDATöGµOúó.ëƒjOT{C¿Ôþg-C9 ë{5h~¦½î+sT=vÈÊûÒ‹¹=¤ë¿@èŸ&Àzû‰°Zž·Ç©øº£1¿êv¾+s€åëkÏ&X ú@õ—4Gkõ=u€ƒé‹ËÐsè9Ð_èïõ—t€ãˆeetŒ¯#¤ÍÖåEüíGñäÆˆ¾A÷&“R*KOŸ0ÄOòÏô>ªÚ =˜w•˜j$\ŸN¹ùÏOë±Ü>Þj|µDn Á‹—Q*A%ŽFdAów\ÿòãô>H¾ h‚éGË­‹ö•8Q_¥=â[;¿¿ú`PÐû‘Å­ådìY(åçO±?š}"XÒ=¢,Ûêø¥ö_z4~~é*Á!Àƒª«z$F ¯Æ/2Þ¢4§ÕÜ–ëo¥c°ÖÚOp€uý­Å¦y46´êv¾+Y åí£c©¥§õê/ñe¯õ=ú99q`Û¶´/ôzôúk×_rtâð3ŸëðXù=ZËÇ|GMÁ*œŒ}÷}:~’4XÔàÌx§Çj¯SF>)ê‚U¢x³éµGõù¨)z§xR†öT.”H‚%Œ=ëX0­ ²õw°|ÎÐ]Ï*˜Ñ´¡ð†eDÙ.d\C6éûè˜.ý0(@œ&‰ý•M´F •çO±?…¨ú G”e{C¿ÔþþÃ!¦$kß9b•VõHÜ!)ï/“:ižtýšþi¬·ŸøX+ßž¬g5I½«n'컚ZÜάtòiРTÉs´öZßãSñïœÆ,XÐsè9Ð_è¯]më³~(ý˜]F8}9á×$B|ò\&Èqƒ ¹*XA"`“@òÆeŠwÇ‹¾tßáɺ˜Eþv·³¿ÓˆñÎë_t~*kdvƒŒÐ‚ÉçõXS6öï^ÄØ_J @Ó©4ÉBæ ‘IÔçQyþ|Åþ8°¬zDY²7äñKíïûÃ_òA=Ÿ]Öš÷ˆ$ƒú2 F…ÎË“Ÿ"©´l_5ý«Ë0(í':ÀZùêFÉî{ÓS·öݰpܾ÷S+MëÙ_âõw‰¾GcÝŒ¢=‡žý…þÚõ×æÇ±€<"¸èøXQ»@ ßó-§±Ã©ôxüÊy6ˆƒ‰*§Å¼Ý!S¶ˆqéú»Gpóuí‚Y}%Fè0b¼è1V>8õÀl@&Ìò§/øÖ´oµ?%8+eIP©ã—Üß«T^onieûôeúJp^Þ¿ê–쫦FÎÛOþ¬–ï¿Þà3šNQÛ û®¯,´ïTš:‰Ö²¿ä/ÀÝ¢ïg…YwÐsè9Ð_èo)ýµ8À|lû‰È}/=wr€y ÕsHo1­f}>pš3S˜$#•xl~®{ì5Í‹)›4c÷³|ý‹Lé/‡ˆñùZóô¬e‘†Rç+Lã{‰¥$ì…“½í†ÑZ{éWŸI8Tûã.À‰>¨ö¤® ª~ü²ûW<¯:q»fYÇF’õ b)ÎÊï0­éŸI€…ö`½|”¿¸¾ž¼^©Ûë°ñ ðàù˜jé¥[ôÝÐsè9Ð_èo9ýµ8ÀìHÜ^§…ù°8ËÂå&PíOfÞk}VH†žCÏ€þBKê¯Ù®ÏÆž8O%5À6/;9À|¦dîGuë A —ž>~™ÄØ tòoïðrë qݼºaÝEh$~{ˆse¤ùÅbãÞ¸3`//LÞé4bœ­Hå÷ìBý ίöWaĘ5ÔG*þF-<¶\éü|D}‹"ÆZÿœðò¤FL9’§Z`ÝþåUû£Ø'£§úPQ®ˆÇwˆ@WÔëéý 1Õlð®n¿Ã}ø¯b¬‘³½?çåÅ´¥=4ûªêŸA€ÅöS×VÊs gZ!¶ö]ª/1G*Z>x6hFß&]úK]¸ô½Ò+ûâ=‡žý…þ–Ô_2 ôo«“¯n¢ë ÿ7>þý‰›\½„ /®Ml¯D=DT¸¾d"ÇìuxòÈø­àä«ZRàÌæµ‰×ó†A<ìF“¦òù|ž"“ýŪߊ‚íã­f4 ¦ý ë,Ö Õ×cÙ9Ï·‚|0|ôe‹*Oõ—Ô>{¬ï}ÿ~½Þ,­çå¡çÐs ¿Ðß’úK®¥( ¿ÅÕ½7e”>½ì–šÕðx‹€ý9sÊTá _,ÍGcèÎOn€1þ›]À_É‘U~}^Lqèý„IVµŸÈ¿ßœyüôúXÐ|ö·ôúCö?+A.@£¬Ži³©åó8„1^[vȔLJq¾Ù…ú_é/:bÕ7ipo, ˜ [¦ •8Q_«`Rýp"Nu{FW‚lœÈ¤¤š¡Ù Íþ(öI`E{¢Ùáø‡GÊí ð7é³0[÷U´ßDPþ<3 3—˜¤I<¤úô(o¯¤üÍmaH›¹=tûªèŸrütÈœØ~’L”çóÌrÉ“·ö]ª¯¶=¶×Á™ßGk_ÜúKnŸ½Õwvìé]zº]^¡çÐs ¿Ðß’úkr€›3³µ—¾ŸãËêú®pÅx}.lüzéEÔCD…ÛWa|Îðí±ÆÚ££ùºvþ[kÌ\\5,5È:ßÿ1ƒ9À‹ñý1³™îro;®ñ™GizŸÔ²TËgavÛJòå"Æì„¯VæšÓ_ ìFý‹Î/÷W¿]0Ù?O&ÏéàPÞ1œ¨¯]0‰þ¸Àla® gÓ¬3}±ó§Cû#£ÙÅ>Q,êƒ,¨º½ÉŽO °eÿøzz>X™k…Ók›ÙÖª`¿)^ú>’ÀðÌ ¢þÚ+)ŸG¹míA}•ôO9þàX8=×’ÛOv€õòÌ´Šj$m§ì»X_};³×µï–ù»ÛâÒ_Jû쩾×g£¾ › ¿{Ôý=‡žý…þ:è¯îõñ kÜÛéñÌö¯}`S¨Orüt¡Ÿÿð£ÿ¦oºÞ+Âtõ,^ÏĹyä°¿uà7¼š-N^eõI©-­…•{Ûá1Ó ú<;pãÙrw×öýqº›ý†¼î¯rú=@¡¿ï›\Ù¨¥IÆʸ³þÄøÊÜ`o±ñ•QëóÓk^õº½þ°ïìÃõXí7à}q•Ñwè9ú ý}ÿàÊðÇ×/·š3†if…ìà”“GßÚ¡ßYý`ßÙ‡ë)°ßp€÷ÁýUF„¡çè/ô÷ýs€+žçW|Ï{‡ãß»+?û¯?t§ý)¾ä×Áý=À>B; `àÝ;Àö!p€Ààp€8À`0€ 0`p€ü¿ý:¦@Ô¿µ|ƒ À À À À À À À° À À À À À À À À° À À À À À À ÀÐ ÿ€- 0 { fmt.Println("The following options are unused:") sort.Strings(unusedOptions) for _, s := range unusedOptions { fmt.Printf("%s (value: %v)\n", s, config.GlobalSettings[s]) } fmt.Printf("These options will be removed from %s\n", filepath.Join(config.ConfigDir, "settings.json")) if shouldContinue() { for _, s := range unusedOptions { delete(config.GlobalSettings, s) } err := config.OverwriteSettings(filepath.Join(config.ConfigDir, "settings.json")) if err != nil { fmt.Println("Error writing settings.json file: " + err.Error()) } fmt.Println("Removed unused options") fmt.Print("\n\n") } } // detect incorrectly formatted buffer/ files files, err := ioutil.ReadDir(filepath.Join(config.ConfigDir, "buffers")) if err == nil { var badFiles []string var buffer buffer.SerializedBuffer for _, f := range files { fname := filepath.Join(config.ConfigDir, "buffers", f.Name()) file, e := os.Open(fname) if e == nil { decoder := gob.NewDecoder(file) err = decoder.Decode(&buffer) if err != nil && f.Name() != "history" { badFiles = append(badFiles, fname) } file.Close() } } if len(badFiles) > 0 { fmt.Printf("Detected %d files with an invalid format in %s\n", len(badFiles), filepath.Join(config.ConfigDir, "buffers")) fmt.Println("These files store cursor and undo history.") fmt.Printf("Removing badly formatted files in %s\n", filepath.Join(config.ConfigDir, "buffers")) if shouldContinue() { removed := 0 for _, f := range badFiles { err := os.Remove(f) if err != nil { fmt.Println(err) continue } removed++ } if removed == 0 { fmt.Println("Failed to remove files") } else { fmt.Printf("Removed %d badly formatted files\n", removed) } fmt.Print("\n\n") } } } // detect plugins/ directory plugins := filepath.Join(config.ConfigDir, "plugins") if stat, err := os.Stat(plugins); err == nil && stat.IsDir() { fmt.Printf("Found directory %s\n", plugins) fmt.Printf("Plugins should now be stored in %s\n", filepath.Join(config.ConfigDir, "plug")) fmt.Printf("Removing %s\n", plugins) if shouldContinue() { os.RemoveAll(plugins) } fmt.Print("\n\n") } fmt.Println("Done cleaning") } micro-2.0.9/cmd/micro/debug.go000066400000000000000000000011711405030104300161120ustar00rootroot00000000000000package main import ( "log" "os" "github.com/zyedidia/micro/v2/internal/util" ) // NullWriter simply sends writes into the void type NullWriter struct{} // Write is empty func (NullWriter) Write(data []byte) (n int, err error) { return 0, nil } // InitLog sets up the debug log system for micro if it has been enabled by compile-time variables func InitLog() { if util.Debug == "ON" { f, err := os.OpenFile("log.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) if err != nil { log.Fatalf("error opening file: %v", err) } log.SetOutput(f) log.Println("Micro started") } else { log.SetOutput(NullWriter{}) } } micro-2.0.9/cmd/micro/initlua.go000066400000000000000000000157121405030104300164770ustar00rootroot00000000000000package main import ( "log" lua "github.com/yuin/gopher-lua" luar "layeh.com/gopher-luar" "github.com/zyedidia/micro/v2/internal/action" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/display" ulua "github.com/zyedidia/micro/v2/internal/lua" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/shell" "github.com/zyedidia/micro/v2/internal/util" ) func init() { ulua.L = lua.NewState() ulua.L.SetGlobal("import", luar.New(ulua.L, LuaImport)) } // LuaImport is meant to be called from lua by a plugin and will import the given micro package func LuaImport(pkg string) *lua.LTable { switch pkg { case "micro": return luaImportMicro() case "micro/shell": return luaImportMicroShell() case "micro/buffer": return luaImportMicroBuffer() case "micro/config": return luaImportMicroConfig() case "micro/util": return luaImportMicroUtil() default: return ulua.Import(pkg) } } func luaImportMicro() *lua.LTable { pkg := ulua.L.NewTable() ulua.L.SetField(pkg, "TermMessage", luar.New(ulua.L, screen.TermMessage)) ulua.L.SetField(pkg, "TermError", luar.New(ulua.L, screen.TermError)) ulua.L.SetField(pkg, "InfoBar", luar.New(ulua.L, action.GetInfoBar)) ulua.L.SetField(pkg, "Log", luar.New(ulua.L, log.Println)) ulua.L.SetField(pkg, "SetStatusInfoFn", luar.New(ulua.L, display.SetStatusInfoFnLua)) ulua.L.SetField(pkg, "CurPane", luar.New(ulua.L, func() action.Pane { return action.MainTab().CurPane() })) ulua.L.SetField(pkg, "CurTab", luar.New(ulua.L, action.MainTab)) ulua.L.SetField(pkg, "Tabs", luar.New(ulua.L, func() *action.TabList { return action.Tabs })) ulua.L.SetField(pkg, "Lock", luar.New(ulua.L, ulua.Lock)) return pkg } func luaImportMicroConfig() *lua.LTable { pkg := ulua.L.NewTable() ulua.L.SetField(pkg, "MakeCommand", luar.New(ulua.L, action.MakeCommand)) ulua.L.SetField(pkg, "FileComplete", luar.New(ulua.L, buffer.FileComplete)) ulua.L.SetField(pkg, "HelpComplete", luar.New(ulua.L, action.HelpComplete)) ulua.L.SetField(pkg, "OptionComplete", luar.New(ulua.L, action.OptionComplete)) ulua.L.SetField(pkg, "OptionValueComplete", luar.New(ulua.L, action.OptionValueComplete)) ulua.L.SetField(pkg, "NoComplete", luar.New(ulua.L, nil)) ulua.L.SetField(pkg, "TryBindKey", luar.New(ulua.L, action.TryBindKey)) ulua.L.SetField(pkg, "Reload", luar.New(ulua.L, action.ReloadConfig)) ulua.L.SetField(pkg, "AddRuntimeFileFromMemory", luar.New(ulua.L, config.PluginAddRuntimeFileFromMemory)) ulua.L.SetField(pkg, "AddRuntimeFilesFromDirectory", luar.New(ulua.L, config.PluginAddRuntimeFilesFromDirectory)) ulua.L.SetField(pkg, "AddRuntimeFile", luar.New(ulua.L, config.PluginAddRuntimeFile)) ulua.L.SetField(pkg, "ListRuntimeFiles", luar.New(ulua.L, config.PluginListRuntimeFiles)) ulua.L.SetField(pkg, "ReadRuntimeFile", luar.New(ulua.L, config.PluginReadRuntimeFile)) ulua.L.SetField(pkg, "NewRTFiletype", luar.New(ulua.L, config.NewRTFiletype)) ulua.L.SetField(pkg, "RTColorscheme", luar.New(ulua.L, config.RTColorscheme)) ulua.L.SetField(pkg, "RTSyntax", luar.New(ulua.L, config.RTSyntax)) ulua.L.SetField(pkg, "RTHelp", luar.New(ulua.L, config.RTHelp)) ulua.L.SetField(pkg, "RTPlugin", luar.New(ulua.L, config.RTPlugin)) ulua.L.SetField(pkg, "RegisterCommonOption", luar.New(ulua.L, config.RegisterCommonOptionPlug)) ulua.L.SetField(pkg, "RegisterGlobalOption", luar.New(ulua.L, config.RegisterGlobalOptionPlug)) ulua.L.SetField(pkg, "GetGlobalOption", luar.New(ulua.L, config.GetGlobalOption)) ulua.L.SetField(pkg, "SetGlobalOption", luar.New(ulua.L, action.SetGlobalOption)) ulua.L.SetField(pkg, "SetGlobalOptionNative", luar.New(ulua.L, action.SetGlobalOptionNative)) ulua.L.SetField(pkg, "ConfigDir", luar.New(ulua.L, config.ConfigDir)) return pkg } func luaImportMicroShell() *lua.LTable { pkg := ulua.L.NewTable() ulua.L.SetField(pkg, "ExecCommand", luar.New(ulua.L, shell.ExecCommand)) ulua.L.SetField(pkg, "RunCommand", luar.New(ulua.L, shell.RunCommand)) ulua.L.SetField(pkg, "RunBackgroundShell", luar.New(ulua.L, shell.RunBackgroundShell)) ulua.L.SetField(pkg, "RunInteractiveShell", luar.New(ulua.L, shell.RunInteractiveShell)) ulua.L.SetField(pkg, "JobStart", luar.New(ulua.L, shell.JobStart)) ulua.L.SetField(pkg, "JobSpawn", luar.New(ulua.L, shell.JobSpawn)) ulua.L.SetField(pkg, "JobStop", luar.New(ulua.L, shell.JobStop)) ulua.L.SetField(pkg, "JobSend", luar.New(ulua.L, shell.JobSend)) ulua.L.SetField(pkg, "RunTermEmulator", luar.New(ulua.L, action.RunTermEmulator)) ulua.L.SetField(pkg, "TermEmuSupported", luar.New(ulua.L, action.TermEmuSupported)) return pkg } func luaImportMicroBuffer() *lua.LTable { pkg := ulua.L.NewTable() ulua.L.SetField(pkg, "NewMessage", luar.New(ulua.L, buffer.NewMessage)) ulua.L.SetField(pkg, "NewMessageAtLine", luar.New(ulua.L, buffer.NewMessageAtLine)) ulua.L.SetField(pkg, "MTInfo", luar.New(ulua.L, buffer.MTInfo)) ulua.L.SetField(pkg, "MTWarning", luar.New(ulua.L, buffer.MTWarning)) ulua.L.SetField(pkg, "MTError", luar.New(ulua.L, buffer.MTError)) ulua.L.SetField(pkg, "Loc", luar.New(ulua.L, func(x, y int) buffer.Loc { return buffer.Loc{x, y} })) ulua.L.SetField(pkg, "SLoc", luar.New(ulua.L, func(line, row int) display.SLoc { return display.SLoc{line, row} })) ulua.L.SetField(pkg, "BTDefault", luar.New(ulua.L, buffer.BTDefault.Kind)) ulua.L.SetField(pkg, "BTHelp", luar.New(ulua.L, buffer.BTHelp.Kind)) ulua.L.SetField(pkg, "BTLog", luar.New(ulua.L, buffer.BTLog.Kind)) ulua.L.SetField(pkg, "BTScratch", luar.New(ulua.L, buffer.BTScratch.Kind)) ulua.L.SetField(pkg, "BTRaw", luar.New(ulua.L, buffer.BTRaw.Kind)) ulua.L.SetField(pkg, "BTInfo", luar.New(ulua.L, buffer.BTInfo.Kind)) ulua.L.SetField(pkg, "NewBuffer", luar.New(ulua.L, func(text, path string) *buffer.Buffer { return buffer.NewBufferFromString(text, path, buffer.BTDefault) })) ulua.L.SetField(pkg, "NewBufferFromFile", luar.New(ulua.L, func(path string) (*buffer.Buffer, error) { return buffer.NewBufferFromFile(path, buffer.BTDefault) })) ulua.L.SetField(pkg, "ByteOffset", luar.New(ulua.L, buffer.ByteOffset)) ulua.L.SetField(pkg, "Log", luar.New(ulua.L, buffer.WriteLog)) ulua.L.SetField(pkg, "LogBuf", luar.New(ulua.L, buffer.GetLogBuf)) return pkg } func luaImportMicroUtil() *lua.LTable { pkg := ulua.L.NewTable() ulua.L.SetField(pkg, "RuneAt", luar.New(ulua.L, util.LuaRuneAt)) ulua.L.SetField(pkg, "GetLeadingWhitespace", luar.New(ulua.L, util.LuaGetLeadingWhitespace)) ulua.L.SetField(pkg, "IsWordChar", luar.New(ulua.L, util.LuaIsWordChar)) ulua.L.SetField(pkg, "String", luar.New(ulua.L, util.String)) ulua.L.SetField(pkg, "Unzip", luar.New(ulua.L, util.Unzip)) ulua.L.SetField(pkg, "Version", luar.New(ulua.L, util.Version)) ulua.L.SetField(pkg, "SemVersion", luar.New(ulua.L, util.SemVersion)) ulua.L.SetField(pkg, "CharacterCountInString", luar.New(ulua.L, util.CharacterCountInString)) ulua.L.SetField(pkg, "RuneStr", luar.New(ulua.L, func(r rune) string { return string(r) })) return pkg } micro-2.0.9/cmd/micro/micro.go000066400000000000000000000260251405030104300161420ustar00rootroot00000000000000package main import ( "flag" "fmt" "io/ioutil" "log" "os" "os/signal" "regexp" "runtime" "sort" "strconv" "syscall" "time" "github.com/go-errors/errors" isatty "github.com/mattn/go-isatty" lua "github.com/yuin/gopher-lua" "github.com/zyedidia/micro/v2/internal/action" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/clipboard" "github.com/zyedidia/micro/v2/internal/config" ulua "github.com/zyedidia/micro/v2/internal/lua" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/shell" "github.com/zyedidia/micro/v2/internal/util" "github.com/zyedidia/tcell/v2" ) var ( // Event channel autosave chan bool // Command line flags flagVersion = flag.Bool("version", false, "Show the version number and information") flagConfigDir = flag.String("config-dir", "", "Specify a custom location for the configuration directory") flagOptions = flag.Bool("options", false, "Show all option help") flagDebug = flag.Bool("debug", false, "Enable debug mode (prints debug info to ./log.txt)") flagPlugin = flag.String("plugin", "", "Plugin command") flagClean = flag.Bool("clean", false, "Clean configuration directory") optionFlags map[string]*string sigterm chan os.Signal sighup chan os.Signal ) func InitFlags() { flag.Usage = func() { fmt.Println("Usage: micro [OPTIONS] [FILE]...") fmt.Println("-clean") fmt.Println(" \tCleans the configuration directory") fmt.Println("-config-dir dir") fmt.Println(" \tSpecify a custom location for the configuration directory") fmt.Println("[FILE]:LINE:COL (if the `parsecursor` option is enabled)") fmt.Println("+LINE:COL") fmt.Println(" \tSpecify a line and column to start the cursor at when opening a buffer") fmt.Println("-options") fmt.Println(" \tShow all option help") fmt.Println("-debug") fmt.Println(" \tEnable debug mode (enables logging to ./log.txt)") fmt.Println("-version") fmt.Println(" \tShow the version number and information") fmt.Print("\nMicro's plugin's can be managed at the command line with the following commands.\n") fmt.Println("-plugin install [PLUGIN]...") fmt.Println(" \tInstall plugin(s)") fmt.Println("-plugin remove [PLUGIN]...") fmt.Println(" \tRemove plugin(s)") fmt.Println("-plugin update [PLUGIN]...") fmt.Println(" \tUpdate plugin(s) (if no argument is given, updates all plugins)") fmt.Println("-plugin search [PLUGIN]...") fmt.Println(" \tSearch for a plugin") fmt.Println("-plugin list") fmt.Println(" \tList installed plugins") fmt.Println("-plugin available") fmt.Println(" \tList available plugins") fmt.Print("\nMicro's options can also be set via command line arguments for quick\nadjustments. For real configuration, please use the settings.json\nfile (see 'help options').\n\n") fmt.Println("-option value") fmt.Println(" \tSet `option` to `value` for this session") fmt.Println(" \tFor example: `micro -syntax off file.c`") fmt.Println("\nUse `micro -options` to see the full list of configuration options") } optionFlags = make(map[string]*string) for k, v := range config.DefaultAllSettings() { optionFlags[k] = flag.String(k, "", fmt.Sprintf("The %s option. Default value: '%v'.", k, v)) } flag.Parse() if *flagVersion { // If -version was passed fmt.Println("Version:", util.Version) fmt.Println("Commit hash:", util.CommitHash) fmt.Println("Compiled on", util.CompileDate) os.Exit(0) } if *flagOptions { // If -options was passed var keys []string m := config.DefaultAllSettings() for k := range m { keys = append(keys, k) } sort.Strings(keys) for _, k := range keys { v := m[k] fmt.Printf("-%s value\n", k) fmt.Printf(" \tDefault value: '%v'\n", v) } os.Exit(0) } if util.Debug == "OFF" && *flagDebug { util.Debug = "ON" } } // DoPluginFlags parses and executes any flags that require LoadAllPlugins (-plugin and -clean) func DoPluginFlags() { if *flagClean || *flagPlugin != "" { config.LoadAllPlugins() if *flagPlugin != "" { args := flag.Args() config.PluginCommand(os.Stdout, *flagPlugin, args) } else if *flagClean { CleanConfig() } os.Exit(0) } } // LoadInput determines which files should be loaded into buffers // based on the input stored in flag.Args() func LoadInput(args []string) []*buffer.Buffer { // There are a number of ways micro should start given its input // 1. If it is given a files in flag.Args(), it should open those // 2. If there is no input file and the input is not a terminal, that means // something is being piped in and the stdin should be opened in an // empty buffer // 3. If there is no input file and the input is a terminal, an empty buffer // should be opened var filename string var input []byte var err error buffers := make([]*buffer.Buffer, 0, len(args)) btype := buffer.BTDefault if !isatty.IsTerminal(os.Stdout.Fd()) { btype = buffer.BTStdout } files := make([]string, 0, len(args)) flagStartPos := buffer.Loc{-1, -1} flagr := regexp.MustCompile(`^\+(\d+)(?::(\d+))?$`) for _, a := range args { match := flagr.FindStringSubmatch(a) if len(match) == 3 && match[2] != "" { line, err := strconv.Atoi(match[1]) if err != nil { screen.TermMessage(err) continue } col, err := strconv.Atoi(match[2]) if err != nil { screen.TermMessage(err) continue } flagStartPos = buffer.Loc{col - 1, line - 1} } else if len(match) == 3 && match[2] == "" { line, err := strconv.Atoi(match[1]) if err != nil { screen.TermMessage(err) continue } flagStartPos = buffer.Loc{0, line - 1} } else { files = append(files, a) } } if len(files) > 0 { // Option 1 // We go through each file and load it for i := 0; i < len(files); i++ { buf, err := buffer.NewBufferFromFileAtLoc(files[i], btype, flagStartPos) if err != nil { screen.TermMessage(err) continue } // If the file didn't exist, input will be empty, and we'll open an empty buffer buffers = append(buffers, buf) } } else if !isatty.IsTerminal(os.Stdin.Fd()) { // Option 2 // The input is not a terminal, so something is being piped in // and we should read from stdin input, err = ioutil.ReadAll(os.Stdin) if err != nil { screen.TermMessage("Error reading from stdin: ", err) input = []byte{} } buffers = append(buffers, buffer.NewBufferFromStringAtLoc(string(input), filename, btype, flagStartPos)) } else { // Option 3, just open an empty buffer buffers = append(buffers, buffer.NewBufferFromStringAtLoc(string(input), filename, btype, flagStartPos)) } return buffers } func main() { defer func() { if util.Stdout.Len() > 0 { fmt.Fprint(os.Stdout, util.Stdout.String()) } os.Exit(0) }() // runtime.SetCPUProfileRate(400) // f, _ := os.Create("micro.prof") // pprof.StartCPUProfile(f) // defer pprof.StopCPUProfile() var err error InitFlags() InitLog() err = config.InitConfigDir(*flagConfigDir) if err != nil { screen.TermMessage(err) } config.InitRuntimeFiles() err = config.ReadSettings() if err != nil { screen.TermMessage(err) } err = config.InitGlobalSettings() if err != nil { screen.TermMessage(err) } // flag options for k, v := range optionFlags { if *v != "" { nativeValue, err := config.GetNativeValue(k, config.DefaultAllSettings()[k], *v) if err != nil { screen.TermMessage(err) continue } config.GlobalSettings[k] = nativeValue } } DoPluginFlags() err = screen.Init() if err != nil { fmt.Println(err) fmt.Println("Fatal: Micro could not initialize a Screen.") os.Exit(1) } sigterm = make(chan os.Signal, 1) sighup = make(chan os.Signal, 1) signal.Notify(sigterm, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT) signal.Notify(sighup, syscall.SIGHUP) m := clipboard.SetMethod(config.GetGlobalOption("clipboard").(string)) clipErr := clipboard.Initialize(m) defer func() { if err := recover(); err != nil { if screen.Screen != nil { screen.Screen.Fini() } if e, ok := err.(*lua.ApiError); ok { fmt.Println("Lua API error:", e) } else { fmt.Println("Micro encountered an error:", errors.Wrap(err, 2).ErrorStack(), "\nIf you can reproduce this error, please report it at https://github.com/zyedidia/micro/issues") } // backup all open buffers for _, b := range buffer.OpenBuffers { b.Backup() } os.Exit(1) } }() err = config.LoadAllPlugins() if err != nil { screen.TermMessage(err) } action.InitBindings() action.InitCommands() err = config.InitColorscheme() if err != nil { screen.TermMessage(err) } err = config.RunPluginFn("preinit") if err != nil { screen.TermMessage(err) } args := flag.Args() b := LoadInput(args) if len(b) == 0 { // No buffers to open screen.Screen.Fini() runtime.Goexit() } action.InitTabs(b) action.InitGlobals() err = config.RunPluginFn("init") if err != nil { screen.TermMessage(err) } err = config.RunPluginFn("postinit") if err != nil { screen.TermMessage(err) } if clipErr != nil { log.Println(clipErr, " or change 'clipboard' option") } if a := config.GetGlobalOption("autosave").(float64); a > 0 { config.SetAutoTime(int(a)) config.StartAutoSave() } screen.Events = make(chan tcell.Event) // Here is the event loop which runs in a separate thread go func() { for { screen.Lock() e := screen.Screen.PollEvent() screen.Unlock() if e != nil { screen.Events <- e } } }() // clear the drawchan so we don't redraw excessively // if someone requested a redraw before we started displaying for len(screen.DrawChan()) > 0 { <-screen.DrawChan() } // wait for initial resize event select { case event := <-screen.Events: action.Tabs.HandleEvent(event) case <-time.After(10 * time.Millisecond): // time out after 10ms } for { DoEvent() } } // DoEvent runs the main action loop of the editor func DoEvent() { var event tcell.Event // Display everything screen.Screen.Fill(' ', config.DefStyle) screen.Screen.HideCursor() action.Tabs.Display() for _, ep := range action.MainTab().Panes { ep.Display() } action.MainTab().Display() action.InfoBar.Display() screen.Screen.Show() // Check for new events select { case f := <-shell.Jobs: // If a new job has finished while running in the background we should execute the callback ulua.Lock.Lock() f.Function(f.Output, f.Args) ulua.Lock.Unlock() case <-config.Autosave: ulua.Lock.Lock() for _, b := range buffer.OpenBuffers { b.Save() } ulua.Lock.Unlock() case <-shell.CloseTerms: case event = <-screen.Events: case <-screen.DrawChan(): for len(screen.DrawChan()) > 0 { <-screen.DrawChan() } case <-sighup: for _, b := range buffer.OpenBuffers { if !b.Modified() { b.Fini() } } os.Exit(0) case <-sigterm: for _, b := range buffer.OpenBuffers { if !b.Modified() { b.Fini() } } if screen.Screen != nil { screen.Screen.Fini() } os.Exit(0) } ulua.Lock.Lock() // if event != nil { if action.InfoBar.HasPrompt { action.InfoBar.HandleEvent(event) } else { action.Tabs.HandleEvent(event) } // } ulua.Lock.Unlock() } micro-2.0.9/cmd/micro/micro_test.go000066400000000000000000000155411405030104300172020ustar00rootroot00000000000000package main import ( "fmt" "io/ioutil" "log" "os" "testing" "github.com/go-errors/errors" "github.com/stretchr/testify/assert" "github.com/zyedidia/micro/v2/internal/action" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/tcell/v2" ) var tempDir string var sim tcell.SimulationScreen func init() { screen.Events = make(chan tcell.Event, 8) } func startup(args []string) (tcell.SimulationScreen, error) { var err error tempDir, err = ioutil.TempDir("", "micro_test") if err != nil { return nil, err } err = config.InitConfigDir(tempDir) if err != nil { return nil, err } config.InitRuntimeFiles() err = config.ReadSettings() if err != nil { return nil, err } err = config.InitGlobalSettings() if err != nil { return nil, err } s, err := screen.InitSimScreen() if err != nil { return nil, err } defer func() { if err := recover(); err != nil { screen.Screen.Fini() fmt.Println("Micro encountered an error:", err) // backup all open buffers for _, b := range buffer.OpenBuffers { b.Backup() } // Print the stack trace too log.Fatalf(errors.Wrap(err, 2).ErrorStack()) os.Exit(1) } }() err = config.LoadAllPlugins() if err != nil { screen.TermMessage(err) } action.InitBindings() action.InitCommands() err = config.InitColorscheme() if err != nil { return nil, err } b := LoadInput(args) if len(b) == 0 { return nil, errors.New("No buffers opened") } action.InitTabs(b) action.InitGlobals() err = config.RunPluginFn("init") if err != nil { return nil, err } s.InjectResize() handleEvent() return s, nil } func cleanup() { os.RemoveAll(tempDir) } func handleEvent() { screen.Lock() e := screen.Screen.PollEvent() screen.Unlock() if e != nil { screen.Events <- e } DoEvent() } func injectKey(key tcell.Key, r rune, mod tcell.ModMask) { sim.InjectKey(key, r, mod) handleEvent() } func injectMouse(x, y int, buttons tcell.ButtonMask, mod tcell.ModMask) { sim.InjectMouse(x, y, buttons, mod) handleEvent() } func injectString(str string) { // the tcell simulation screen event channel can only handle // 10 events at once, so we need to divide up the key events // into chunks of 10 and handle the 10 events before sending // another chunk of events iters := len(str) / 10 extra := len(str) % 10 for i := 0; i < iters; i++ { s := i * 10 e := i*10 + 10 sim.InjectKeyBytes([]byte(str[s:e])) for i := 0; i < 10; i++ { handleEvent() } } sim.InjectKeyBytes([]byte(str[len(str)-extra:])) for i := 0; i < extra; i++ { handleEvent() } } func openFile(file string) { injectKey(tcell.KeyCtrlE, rune(tcell.KeyCtrlE), tcell.ModCtrl) injectString(fmt.Sprintf("open %s", file)) injectKey(tcell.KeyEnter, rune(tcell.KeyEnter), tcell.ModNone) } func createTestFile(name string, content string) (string, error) { testf, err := ioutil.TempFile("", name) if err != nil { return "", err } if _, err := testf.Write([]byte(content)); err != nil { return "", err } if err := testf.Close(); err != nil { return "", err } return testf.Name(), nil } func TestMain(m *testing.M) { var err error sim, err = startup([]string{}) if err != nil { log.Fatalln(err) os.Exit(1) } retval := m.Run() cleanup() os.Exit(retval) } func TestSimpleEdit(t *testing.T) { file, err := createTestFile("micro_simple_edit_test", "base content") if err != nil { t.Error(err) return } defer os.Remove(file) openFile(file) var buf *buffer.Buffer for _, b := range buffer.OpenBuffers { if b.Path == file { buf = b } } if buf == nil { t.Errorf("Could not find buffer %s", file) return } injectKey(tcell.KeyEnter, rune(tcell.KeyEnter), tcell.ModNone) injectKey(tcell.KeyUp, 0, tcell.ModNone) injectString("first line") // test both kinds of backspace for i := 0; i < len("ne"); i++ { injectKey(tcell.KeyBackspace, rune(tcell.KeyBackspace), tcell.ModNone) } for i := 0; i < len(" li"); i++ { injectKey(tcell.KeyBackspace2, rune(tcell.KeyBackspace2), tcell.ModNone) } injectString("foobar") injectKey(tcell.KeyCtrlS, rune(tcell.KeyCtrlS), tcell.ModCtrl) data, err := ioutil.ReadFile(file) if err != nil { t.Error(err) return } assert.Equal(t, "firstfoobar\nbase content\n", string(data)) } func TestMouse(t *testing.T) { file, err := createTestFile("micro_mouse_test", "base content") if err != nil { t.Error(err) return } defer os.Remove(file) openFile(file) // buffer: // base content // the selections need to happen at different locations to avoid a double click injectMouse(3, 0, tcell.Button1, tcell.ModNone) injectKey(tcell.KeyLeft, 0, tcell.ModNone) injectMouse(0, 0, tcell.ButtonNone, tcell.ModNone) injectString("secondline") // buffer: // secondlinebase content injectKey(tcell.KeyEnter, rune(tcell.KeyEnter), tcell.ModNone) // buffer: // secondline // base content injectMouse(2, 0, tcell.Button1, tcell.ModNone) injectMouse(0, 0, tcell.ButtonNone, tcell.ModNone) injectKey(tcell.KeyEnter, rune(tcell.KeyEnter), tcell.ModNone) // buffer: // // secondline // base content injectKey(tcell.KeyUp, 0, tcell.ModNone) injectString("firstline") // buffer: // firstline // secondline // base content injectKey(tcell.KeyCtrlS, rune(tcell.KeyCtrlS), tcell.ModCtrl) data, err := ioutil.ReadFile(file) if err != nil { t.Error(err) return } assert.Equal(t, "firstline\nsecondline\nbase content\n", string(data)) } var srTestStart = `foo foo foofoofoo ErnleÈe foo æðelen ` var srTest2 = `test_string test_string test_stringtest_stringtest_string ErnleÈe test_string æðelen ` var srTest3 = `test_foo test_string test_footest_stringtest_foo ErnleÈe test_string æðelen ` func TestSearchAndReplace(t *testing.T) { file, err := createTestFile("micro_search_replace_test", srTestStart) if err != nil { t.Error(err) return } defer os.Remove(file) openFile(file) injectKey(tcell.KeyCtrlE, rune(tcell.KeyCtrlE), tcell.ModCtrl) injectString(fmt.Sprintf("replaceall %s %s", "foo", "test_string")) injectKey(tcell.KeyEnter, rune(tcell.KeyEnter), tcell.ModNone) injectKey(tcell.KeyCtrlS, rune(tcell.KeyCtrlS), tcell.ModCtrl) data, err := ioutil.ReadFile(file) if err != nil { t.Error(err) return } assert.Equal(t, srTest2, string(data)) injectKey(tcell.KeyCtrlE, rune(tcell.KeyCtrlE), tcell.ModCtrl) injectString(fmt.Sprintf("replace %s %s", "string", "foo")) injectKey(tcell.KeyEnter, rune(tcell.KeyEnter), tcell.ModNone) injectString("ynyny") injectKey(tcell.KeyEscape, 0, tcell.ModNone) injectKey(tcell.KeyCtrlS, rune(tcell.KeyCtrlS), tcell.ModCtrl) data, err = ioutil.ReadFile(file) if err != nil { t.Error(err) return } assert.Equal(t, srTest3, string(data)) } func TestMultiCursor(t *testing.T) { // TODO } func TestSettingsPersistence(t *testing.T) { // TODO } // more tests (rendering, tabs, plugins)? micro-2.0.9/data/000077500000000000000000000000001405030104300135325ustar00rootroot00000000000000micro-2.0.9/data/com.github.zyedidia.micro.metainfo.xml000066400000000000000000000015301405030104300230240ustar00rootroot00000000000000 com.github.zyedidia.micro Micro Text Editor A modern and intuitive terminal-based text editor MIT Development TextEditor ​ micro ​ ​Zachary Yedidia ​ ​ Micro Text Editor editing its source code. ​ https://raw.githubusercontent.com/zyedidia/micro/master/assets/micro-solarized.png ​ ​ https://micro-editor.github.io https://github.com/zyedidia/micro/issues ​ micro-2.0.9/go.mod000066400000000000000000000023611405030104300137310ustar00rootroot00000000000000module github.com/zyedidia/micro/v2 require ( github.com/blang/semver v3.5.1+incompatible github.com/dustin/go-humanize v1.0.0 github.com/go-errors/errors v1.0.1 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 github.com/mattn/go-isatty v0.0.11 github.com/mattn/go-runewidth v0.0.7 github.com/mitchellh/go-homedir v1.1.0 github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff github.com/sergi/go-diff v1.1.0 github.com/stretchr/testify v1.4.0 github.com/yuin/gopher-lua v0.0.0-20191220021717-ab39c6098bdb github.com/zyedidia/clipboard v1.0.3 github.com/zyedidia/glob v0.0.0-20170209203856-dd4023a66dc3 github.com/zyedidia/highlight v0.0.0-20170330143449-201131ce5cf5 github.com/zyedidia/json5 v0.0.0-20200102012142-2da050b1a98d github.com/zyedidia/pty v2.0.0+incompatible // indirect github.com/zyedidia/tcell/v2 v2.0.7 github.com/zyedidia/terminal v0.0.0-20180726154117-533c623e2415 golang.org/x/text v0.3.2 gopkg.in/sourcemap.v1 v1.0.5 // indirect gopkg.in/yaml.v2 v2.2.7 layeh.com/gopher-luar v1.0.7 ) replace github.com/kballard/go-shellquote => github.com/zyedidia/go-shellquote v0.0.0-20200613203517-eccd813c0655 replace github.com/mattn/go-runewidth => github.com/zyedidia/go-runewidth v0.0.12 go 1.11 micro-2.0.9/go.sum000066400000000000000000000175541405030104300137700ustar00rootroot00000000000000github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mattn/go-isatty v0.0.11 h1:FxPOTFNqGkuDUGi3H/qkUbQO4ZiBa2brKq5r0l8TGeM= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/p-e-w/go-runewidth v0.0.10-0.20200613030200-3e1705c5c059 h1:/+h2b6i15wh4EWsFkfdNdBE1jjGA872tpXEyhPM5aYg= github.com/p-e-w/go-runewidth v0.0.10-0.20200613030200-3e1705c5c059/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff h1:+6NUiITWwE5q1KO6SAfUX918c+Tab0+tGAM/mtdlUyA= github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/xo/terminfo v0.0.0-20200218205459-454e5b68f9e8 h1:woqigIZtZUZxws1zZA99nAvuz2mQrxtWsuZSR9c8I/A= github.com/xo/terminfo v0.0.0-20200218205459-454e5b68f9e8/go.mod h1:6Yhx5ZJl5942QrNRWLwITArVT9okUXc5c3brgWJMoDc= github.com/yuin/gopher-lua v0.0.0-20190206043414-8bfc7677f583/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ= github.com/yuin/gopher-lua v0.0.0-20191220021717-ab39c6098bdb h1:ZkM6LRnq40pR1Ox0hTHlnpkcOTuFIDQpZ1IN8rKKhX0= github.com/yuin/gopher-lua v0.0.0-20191220021717-ab39c6098bdb/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ= github.com/zyedidia/clipboard v1.0.3 h1:F/nCDVYMdbDWTmY8s8cJl0tnwX32q96IF09JHM14bUI= github.com/zyedidia/clipboard v1.0.3/go.mod h1:zykFnZUXX0ErxqvYLUFEq7QDJKId8rmh2FgD0/Y8cjA= github.com/zyedidia/glob v0.0.0-20170209203856-dd4023a66dc3 h1:oMHjjTLfGXVuyOQBYj5/td9WC0mw4g1xDBPovIqmHew= github.com/zyedidia/glob v0.0.0-20170209203856-dd4023a66dc3/go.mod h1:YKbIYP//Eln8eDgAJGI3IDvR3s4Tv9Z9TGIOumiyQ5c= github.com/zyedidia/go-runewidth v0.0.12 h1:aHWj8qL3aH7caRzoPBJXe1pEaZBXHpKtfTuiBo5p74Q= github.com/zyedidia/go-runewidth v0.0.12/go.mod h1:vF8djYdLmG8BJaUZ4CznFYCJ3pFR8m4B4VinTvTTarU= github.com/zyedidia/go-shellquote v0.0.0-20200613203517-eccd813c0655 h1:Z3RhH6hvcSx7eX6Q/pP6YVsgea/1eMDG99vtWwi3nK4= github.com/zyedidia/go-shellquote v0.0.0-20200613203517-eccd813c0655/go.mod h1:1sTqqO+kcYzZp43M5VsJe1tns9IzlSeC9jB6c2+o/5Y= github.com/zyedidia/highlight v0.0.0-20170330143449-201131ce5cf5 h1:Zs6mpwXvlqpF9zHl5XaN0p5V4J9XvP+WBuiuXyIgqvc= github.com/zyedidia/highlight v0.0.0-20170330143449-201131ce5cf5/go.mod h1:c1r+Ob9tUTPB0FKWO1+x+Hsc/zNa45WdGq7Y38Ybip0= github.com/zyedidia/json5 v0.0.0-20200102012142-2da050b1a98d h1:zmDMkh22zXOB7gz8jFaI4GpI7llsPgzm38/jG0UgxjE= github.com/zyedidia/json5 v0.0.0-20200102012142-2da050b1a98d/go.mod h1:NDJSTTYWivnza6zkRapeX2/LwhKPEMQ7bJxqgDVT78I= github.com/zyedidia/poller v1.0.1 h1:Tt9S3AxAjXwWGNiC2TUdRJkQDZSzCBNVQ4xXiQ7440s= github.com/zyedidia/poller v1.0.1/go.mod h1:vZXJOHGDcuK08GXhF6IAY0ZFd2WcgOR5DOTp84Uk5eE= github.com/zyedidia/pty v2.0.0+incompatible h1:Ou5vXL6tvjst+RV8sUFISbuKDnUJPhnpygApMFGweqw= github.com/zyedidia/pty v2.0.0+incompatible/go.mod h1:4y9l9yJZNxRa7GB/fB+mmDmGkG3CqmzLf4vUxGGotEA= github.com/zyedidia/tcell/v2 v2.0.6 h1:v0GoNpPYJ+Wbd1RiSL09SUFzoq4eVKTuT5awbW6aqGs= github.com/zyedidia/tcell/v2 v2.0.6/go.mod h1:i4NNlquIQXFeNecrOgxDQQJdu+7LmTi3g62asvmwUws= github.com/zyedidia/tcell/v2 v2.0.7 h1:kFzCRq9jgx5lOXBT8fVZidbTgVuX0ws++aMCj/MTCYY= github.com/zyedidia/tcell/v2 v2.0.7/go.mod h1:i4NNlquIQXFeNecrOgxDQQJdu+7LmTi3g62asvmwUws= github.com/zyedidia/terminal v0.0.0-20180726154117-533c623e2415 h1:752dTQ5OatJ9M5ULK2+9lor+nzyZz+LYDo3WGngg3Rc= github.com/zyedidia/terminal v0.0.0-20180726154117-533c623e2415/go.mod h1:8leT8G0Cm8NoJHdrrKHyR9MirWoF4YW7pZh06B6H+1E= golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI= gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= layeh.com/gopher-luar v1.0.7 h1:53iv6CCkRs5wyofZ+qVXcyAYQOIG52s6pt4xkqZdq7k= layeh.com/gopher-luar v1.0.7/go.mod h1:TPnIVCZ2RJBndm7ohXyaqfhzjlZ+OA2SZR/YwL8tECk= micro-2.0.9/internal/000077500000000000000000000000001405030104300144355ustar00rootroot00000000000000micro-2.0.9/internal/action/000077500000000000000000000000001405030104300157125ustar00rootroot00000000000000micro-2.0.9/internal/action/actions.go000066400000000000000000001301241405030104300177020ustar00rootroot00000000000000package action import ( "regexp" "runtime" "strings" "time" shellquote "github.com/kballard/go-shellquote" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/clipboard" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/display" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/shell" "github.com/zyedidia/micro/v2/internal/util" "github.com/zyedidia/tcell/v2" ) // ScrollUp is not an action func (h *BufPane) ScrollUp(n int) { v := h.GetView() v.StartLine = h.Scroll(v.StartLine, -n) h.SetView(v) } // ScrollDown is not an action func (h *BufPane) ScrollDown(n int) { v := h.GetView() v.StartLine = h.Scroll(v.StartLine, n) h.SetView(v) } // If the user has scrolled past the last line, ScrollAdjust can be used // to shift the view so that the last line is at the bottom func (h *BufPane) ScrollAdjust() { v := h.GetView() end := h.SLocFromLoc(h.Buf.End()) if h.Diff(v.StartLine, end) < h.BufView().Height-1 { v.StartLine = h.Scroll(end, -h.BufView().Height+1) } h.SetView(v) } // MousePress is the event that should happen when a normal click happens // This is almost always bound to left click func (h *BufPane) MousePress(e *tcell.EventMouse) bool { b := h.Buf mx, my := e.Position() mouseLoc := h.LocFromVisual(buffer.Loc{mx, my}) h.Cursor.Loc = mouseLoc if h.mouseReleased { if b.NumCursors() > 1 { b.ClearCursors() h.Relocate() h.Cursor = h.Buf.GetActiveCursor() h.Cursor.Loc = mouseLoc } if time.Since(h.lastClickTime)/time.Millisecond < config.DoubleClickThreshold && (mouseLoc.X == h.lastLoc.X && mouseLoc.Y == h.lastLoc.Y) { if h.doubleClick { // Triple click h.lastClickTime = time.Now() h.tripleClick = true h.doubleClick = false h.Cursor.SelectLine() h.Cursor.CopySelection(clipboard.PrimaryReg) } else { // Double click h.lastClickTime = time.Now() h.doubleClick = true h.tripleClick = false h.Cursor.SelectWord() h.Cursor.CopySelection(clipboard.PrimaryReg) } } else { h.doubleClick = false h.tripleClick = false h.lastClickTime = time.Now() h.Cursor.OrigSelection[0] = h.Cursor.Loc h.Cursor.CurSelection[0] = h.Cursor.Loc h.Cursor.CurSelection[1] = h.Cursor.Loc } h.mouseReleased = false } else if !h.mouseReleased { if h.tripleClick { h.Cursor.AddLineToSelection() } else if h.doubleClick { h.Cursor.AddWordToSelection() } else { h.Cursor.SetSelectionEnd(h.Cursor.Loc) } } h.Cursor.StoreVisualX() h.lastLoc = mouseLoc h.Relocate() return true } // ScrollUpAction scrolls the view up func (h *BufPane) ScrollUpAction() bool { h.ScrollUp(util.IntOpt(h.Buf.Settings["scrollspeed"])) return true } // ScrollDownAction scrolls the view up func (h *BufPane) ScrollDownAction() bool { h.ScrollDown(util.IntOpt(h.Buf.Settings["scrollspeed"])) return true } // Center centers the view on the cursor func (h *BufPane) Center() bool { v := h.GetView() v.StartLine = h.Scroll(h.SLocFromLoc(h.Cursor.Loc), -h.BufView().Height/2) h.SetView(v) h.ScrollAdjust() return true } // MoveCursorUp is not an action func (h *BufPane) MoveCursorUp(n int) { if !h.Buf.Settings["softwrap"].(bool) { h.Cursor.UpN(n) } else { vloc := h.VLocFromLoc(h.Cursor.Loc) sloc := h.Scroll(vloc.SLoc, -n) if sloc == vloc.SLoc { // we are at the beginning of buffer h.Cursor.Loc = h.Buf.Start() h.Cursor.LastVisualX = 0 } else { vloc.SLoc = sloc vloc.VisualX = h.Cursor.LastVisualX h.Cursor.Loc = h.LocFromVLoc(vloc) } } } // MoveCursorDown is not an action func (h *BufPane) MoveCursorDown(n int) { if !h.Buf.Settings["softwrap"].(bool) { h.Cursor.DownN(n) } else { vloc := h.VLocFromLoc(h.Cursor.Loc) sloc := h.Scroll(vloc.SLoc, n) if sloc == vloc.SLoc { // we are at the end of buffer h.Cursor.Loc = h.Buf.End() vloc = h.VLocFromLoc(h.Cursor.Loc) h.Cursor.LastVisualX = vloc.VisualX } else { vloc.SLoc = sloc vloc.VisualX = h.Cursor.LastVisualX h.Cursor.Loc = h.LocFromVLoc(vloc) } } } // CursorUp moves the cursor up func (h *BufPane) CursorUp() bool { h.Cursor.Deselect(true) h.MoveCursorUp(1) h.Relocate() return true } // CursorDown moves the cursor down func (h *BufPane) CursorDown() bool { h.Cursor.Deselect(true) h.MoveCursorDown(1) h.Relocate() return true } // CursorLeft moves the cursor left func (h *BufPane) CursorLeft() bool { if h.Cursor.HasSelection() { h.Cursor.Deselect(true) } else { tabstospaces := h.Buf.Settings["tabstospaces"].(bool) tabmovement := h.Buf.Settings["tabmovement"].(bool) if tabstospaces && tabmovement { tabsize := int(h.Buf.Settings["tabsize"].(float64)) line := h.Buf.LineBytes(h.Cursor.Y) if h.Cursor.X-tabsize >= 0 && util.IsSpaces(line[h.Cursor.X-tabsize:h.Cursor.X]) && util.IsBytesWhitespace(line[0:h.Cursor.X-tabsize]) { for i := 0; i < tabsize; i++ { h.Cursor.Left() } } else { h.Cursor.Left() } } else { h.Cursor.Left() } } h.Relocate() return true } // CursorRight moves the cursor right func (h *BufPane) CursorRight() bool { if h.Cursor.HasSelection() { h.Cursor.Deselect(false) h.Cursor.Loc = h.Cursor.Loc.Move(1, h.Buf) } else { tabstospaces := h.Buf.Settings["tabstospaces"].(bool) tabmovement := h.Buf.Settings["tabmovement"].(bool) if tabstospaces && tabmovement { tabsize := int(h.Buf.Settings["tabsize"].(float64)) line := h.Buf.LineBytes(h.Cursor.Y) if h.Cursor.X+tabsize < util.CharacterCount(line) && util.IsSpaces(line[h.Cursor.X:h.Cursor.X+tabsize]) && util.IsBytesWhitespace(line[0:h.Cursor.X]) { for i := 0; i < tabsize; i++ { h.Cursor.Right() } } else { h.Cursor.Right() } } else { h.Cursor.Right() } } h.Relocate() return true } // WordRight moves the cursor one word to the right func (h *BufPane) WordRight() bool { h.Cursor.Deselect(false) h.Cursor.WordRight() h.Relocate() return true } // WordLeft moves the cursor one word to the left func (h *BufPane) WordLeft() bool { h.Cursor.Deselect(true) h.Cursor.WordLeft() h.Relocate() return true } // SelectUp selects up one line func (h *BufPane) SelectUp() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } h.MoveCursorUp(1) h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // SelectDown selects down one line func (h *BufPane) SelectDown() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } h.MoveCursorDown(1) h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // SelectLeft selects the character to the left of the cursor func (h *BufPane) SelectLeft() bool { loc := h.Cursor.Loc count := h.Buf.End() if loc.GreaterThan(count) { loc = count } if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = loc } h.Cursor.Left() h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // SelectRight selects the character to the right of the cursor func (h *BufPane) SelectRight() bool { loc := h.Cursor.Loc count := h.Buf.End() if loc.GreaterThan(count) { loc = count } if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = loc } h.Cursor.Right() h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // SelectWordRight selects the word to the right of the cursor func (h *BufPane) SelectWordRight() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } h.Cursor.WordRight() h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // SelectWordLeft selects the word to the left of the cursor func (h *BufPane) SelectWordLeft() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } h.Cursor.WordLeft() h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // StartOfText moves the cursor to the start of the text of the line func (h *BufPane) StartOfText() bool { h.Cursor.Deselect(true) h.Cursor.StartOfText() h.Relocate() return true } // StartOfTextToggle toggles the cursor between the start of the text of the line // and the start of the line func (h *BufPane) StartOfTextToggle() bool { h.Cursor.Deselect(true) if h.Cursor.IsStartOfText() { h.Cursor.Start() } else { h.Cursor.StartOfText() } h.Relocate() return true } // StartOfLine moves the cursor to the start of the line func (h *BufPane) StartOfLine() bool { h.Cursor.Deselect(true) h.Cursor.Start() h.Relocate() return true } // EndOfLine moves the cursor to the end of the line func (h *BufPane) EndOfLine() bool { h.Cursor.Deselect(true) h.Cursor.End() h.Relocate() return true } // SelectLine selects the entire current line func (h *BufPane) SelectLine() bool { h.Cursor.SelectLine() h.Relocate() return true } // SelectToStartOfText selects to the start of the text on the current line func (h *BufPane) SelectToStartOfText() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } h.Cursor.StartOfText() h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // SelectToStartOfTextToggle toggles the selection between the start of the text // on the current line and the start of the line func (h *BufPane) SelectToStartOfTextToggle() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } if h.Cursor.IsStartOfText() { h.Cursor.Start() } else { h.Cursor.StartOfText() } h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // SelectToStartOfLine selects to the start of the current line func (h *BufPane) SelectToStartOfLine() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } h.Cursor.Start() h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // SelectToEndOfLine selects to the end of the current line func (h *BufPane) SelectToEndOfLine() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } h.Cursor.End() h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // ParagraphPrevious moves the cursor to the previous empty line, or beginning of the buffer if there's none func (h *BufPane) ParagraphPrevious() bool { var line int for line = h.Cursor.Y; line > 0; line-- { if len(h.Buf.LineBytes(line)) == 0 && line != h.Cursor.Y { h.Cursor.X = 0 h.Cursor.Y = line break } } // If no empty line found. move cursor to end of buffer if line == 0 { h.Cursor.Loc = h.Buf.Start() } h.Relocate() return true } // ParagraphNext moves the cursor to the next empty line, or end of the buffer if there's none func (h *BufPane) ParagraphNext() bool { var line int for line = h.Cursor.Y; line < h.Buf.LinesNum(); line++ { if len(h.Buf.LineBytes(line)) == 0 && line != h.Cursor.Y { h.Cursor.X = 0 h.Cursor.Y = line break } } // If no empty line found. move cursor to end of buffer if line == h.Buf.LinesNum() { h.Cursor.Loc = h.Buf.End() } h.Relocate() return true } // Retab changes all tabs to spaces or all spaces to tabs depending // on the user's settings func (h *BufPane) Retab() bool { h.Buf.Retab() h.Relocate() return true } // CursorStart moves the cursor to the start of the buffer func (h *BufPane) CursorStart() bool { h.Cursor.Deselect(true) h.Cursor.X = 0 h.Cursor.Y = 0 h.Cursor.StoreVisualX() h.Relocate() return true } // CursorEnd moves the cursor to the end of the buffer func (h *BufPane) CursorEnd() bool { h.Cursor.Deselect(true) h.Cursor.Loc = h.Buf.End() h.Cursor.StoreVisualX() h.Relocate() return true } // SelectToStart selects the text from the cursor to the start of the buffer func (h *BufPane) SelectToStart() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } h.CursorStart() h.Cursor.SelectTo(h.Buf.Start()) h.Relocate() return true } // SelectToEnd selects the text from the cursor to the end of the buffer func (h *BufPane) SelectToEnd() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } h.CursorEnd() h.Cursor.SelectTo(h.Buf.End()) h.Relocate() return true } // InsertNewline inserts a newline plus possible some whitespace if autoindent is on func (h *BufPane) InsertNewline() bool { // Insert a newline if h.Cursor.HasSelection() { h.Cursor.DeleteSelection() h.Cursor.ResetSelection() } ws := util.GetLeadingWhitespace(h.Buf.LineBytes(h.Cursor.Y)) cx := h.Cursor.X h.Buf.Insert(h.Cursor.Loc, "\n") // h.Cursor.Right() if h.Buf.Settings["autoindent"].(bool) { if cx < len(ws) { ws = ws[0:cx] } h.Buf.Insert(h.Cursor.Loc, string(ws)) // for i := 0; i < len(ws); i++ { // h.Cursor.Right() // } // Remove the whitespaces if keepautoindent setting is off if util.IsSpacesOrTabs(h.Buf.LineBytes(h.Cursor.Y-1)) && !h.Buf.Settings["keepautoindent"].(bool) { line := h.Buf.LineBytes(h.Cursor.Y - 1) h.Buf.Remove(buffer.Loc{X: 0, Y: h.Cursor.Y - 1}, buffer.Loc{X: util.CharacterCount(line), Y: h.Cursor.Y - 1}) } } h.Cursor.LastVisualX = h.Cursor.GetVisualX() h.Relocate() return true } // Backspace deletes the previous character func (h *BufPane) Backspace() bool { if h.Cursor.HasSelection() { h.Cursor.DeleteSelection() h.Cursor.ResetSelection() } else if h.Cursor.Loc.GreaterThan(h.Buf.Start()) { // We have to do something a bit hacky here because we want to // delete the line by first moving left and then deleting backwards // but the undo redo would place the cursor in the wrong place // So instead we move left, save the position, move back, delete // and restore the position // If the user is using spaces instead of tabs and they are deleting // whitespace at the start of the line, we should delete as if it's a // tab (tabSize number of spaces) lineStart := util.SliceStart(h.Buf.LineBytes(h.Cursor.Y), h.Cursor.X) tabSize := int(h.Buf.Settings["tabsize"].(float64)) if h.Buf.Settings["tabstospaces"].(bool) && util.IsSpaces(lineStart) && len(lineStart) != 0 && util.CharacterCount(lineStart)%tabSize == 0 { loc := h.Cursor.Loc h.Buf.Remove(loc.Move(-tabSize, h.Buf), loc) } else { loc := h.Cursor.Loc h.Buf.Remove(loc.Move(-1, h.Buf), loc) } } h.Cursor.LastVisualX = h.Cursor.GetVisualX() h.Relocate() return true } // DeleteWordRight deletes the word to the right of the cursor func (h *BufPane) DeleteWordRight() bool { h.SelectWordRight() if h.Cursor.HasSelection() { h.Cursor.DeleteSelection() h.Cursor.ResetSelection() } h.Relocate() return true } // DeleteWordLeft deletes the word to the left of the cursor func (h *BufPane) DeleteWordLeft() bool { h.SelectWordLeft() if h.Cursor.HasSelection() { h.Cursor.DeleteSelection() h.Cursor.ResetSelection() } h.Relocate() return true } // Delete deletes the next character func (h *BufPane) Delete() bool { if h.Cursor.HasSelection() { h.Cursor.DeleteSelection() h.Cursor.ResetSelection() } else { loc := h.Cursor.Loc if loc.LessThan(h.Buf.End()) { h.Buf.Remove(loc, loc.Move(1, h.Buf)) } } h.Relocate() return true } // IndentSelection indents the current selection func (h *BufPane) IndentSelection() bool { if h.Cursor.HasSelection() { start := h.Cursor.CurSelection[0] end := h.Cursor.CurSelection[1] if end.Y < start.Y { start, end = end, start h.Cursor.SetSelectionStart(start) h.Cursor.SetSelectionEnd(end) } startY := start.Y endY := end.Move(-1, h.Buf).Y endX := end.Move(-1, h.Buf).X tabsize := int(h.Buf.Settings["tabsize"].(float64)) indentsize := len(h.Buf.IndentString(tabsize)) for y := startY; y <= endY; y++ { if len(h.Buf.LineBytes(y)) > 0 { h.Buf.Insert(buffer.Loc{X: 0, Y: y}, h.Buf.IndentString(tabsize)) if y == startY && start.X > 0 { h.Cursor.SetSelectionStart(start.Move(indentsize, h.Buf)) } if y == endY { h.Cursor.SetSelectionEnd(buffer.Loc{X: endX + indentsize + 1, Y: endY}) } } } h.Buf.RelocateCursors() h.Relocate() return true } return false } // IndentLine moves the current line forward one indentation func (h *BufPane) IndentLine() bool { if h.Cursor.HasSelection() { return false } tabsize := int(h.Buf.Settings["tabsize"].(float64)) indentstr := h.Buf.IndentString(tabsize) h.Buf.Insert(buffer.Loc{X: 0, Y: h.Cursor.Y}, indentstr) h.Buf.RelocateCursors() h.Relocate() return true } // OutdentLine moves the current line back one indentation func (h *BufPane) OutdentLine() bool { if h.Cursor.HasSelection() { return false } for x := 0; x < len(h.Buf.IndentString(util.IntOpt(h.Buf.Settings["tabsize"]))); x++ { if len(util.GetLeadingWhitespace(h.Buf.LineBytes(h.Cursor.Y))) == 0 { break } h.Buf.Remove(buffer.Loc{X: 0, Y: h.Cursor.Y}, buffer.Loc{X: 1, Y: h.Cursor.Y}) } h.Buf.RelocateCursors() h.Relocate() return true } // OutdentSelection takes the current selection and moves it back one indent level func (h *BufPane) OutdentSelection() bool { if h.Cursor.HasSelection() { start := h.Cursor.CurSelection[0] end := h.Cursor.CurSelection[1] if end.Y < start.Y { start, end = end, start h.Cursor.SetSelectionStart(start) h.Cursor.SetSelectionEnd(end) } startY := start.Y endY := end.Move(-1, h.Buf).Y for y := startY; y <= endY; y++ { for x := 0; x < len(h.Buf.IndentString(util.IntOpt(h.Buf.Settings["tabsize"]))); x++ { if len(util.GetLeadingWhitespace(h.Buf.LineBytes(y))) == 0 { break } h.Buf.Remove(buffer.Loc{X: 0, Y: y}, buffer.Loc{X: 1, Y: y}) } } h.Buf.RelocateCursors() h.Relocate() return true } return false } // Autocomplete cycles the suggestions and performs autocompletion if there are suggestions func (h *BufPane) Autocomplete() bool { b := h.Buf if h.Cursor.HasSelection() { return false } if h.Cursor.X == 0 { return false } r := h.Cursor.RuneUnder(h.Cursor.X) prev := h.Cursor.RuneUnder(h.Cursor.X - 1) if !util.IsAutocomplete(prev) || !util.IsNonAlphaNumeric(r) { // don't autocomplete if cursor is on alpha numeric character (middle of a word) return false } if b.HasSuggestions { b.CycleAutocomplete(true) return true } return b.Autocomplete(buffer.BufferComplete) } // CycleAutocompleteBack cycles back in the autocomplete suggestion list func (h *BufPane) CycleAutocompleteBack() bool { if h.Cursor.HasSelection() { return false } if h.Buf.HasSuggestions { h.Buf.CycleAutocomplete(false) return true } return false } // InsertTab inserts a tab or spaces func (h *BufPane) InsertTab() bool { b := h.Buf indent := b.IndentString(util.IntOpt(b.Settings["tabsize"])) tabBytes := len(indent) bytesUntilIndent := tabBytes - (h.Cursor.GetVisualX() % tabBytes) b.Insert(h.Cursor.Loc, indent[:bytesUntilIndent]) h.Relocate() return true } // SaveAll saves all open buffers func (h *BufPane) SaveAll() bool { for _, b := range buffer.OpenBuffers { b.Save() } return true } // SaveCB performs a save and does a callback at the very end (after all prompts have been resolved) func (h *BufPane) SaveCB(action string, callback func()) bool { // If this is an empty buffer, ask for a filename if h.Buf.Path == "" { h.SaveAsCB(action, callback) } else { noPrompt := h.saveBufToFile(h.Buf.Path, action, callback) if noPrompt { return true } } return false } // Save the buffer to disk func (h *BufPane) Save() bool { return h.SaveCB("Save", nil) } // SaveAsCB performs a save as and does a callback at the very end (after all prompts have been resolved) // The callback is only called if the save was successful func (h *BufPane) SaveAsCB(action string, callback func()) bool { InfoBar.Prompt("Filename: ", "", "Save", nil, func(resp string, canceled bool) { if !canceled { // the filename might or might not be quoted, so unquote first then join the strings. args, err := shellquote.Split(resp) if err != nil { InfoBar.Error("Error parsing arguments: ", err) return } if len(args) == 0 { InfoBar.Error("No filename given") return } filename := strings.Join(args, " ") noPrompt := h.saveBufToFile(filename, action, callback) if noPrompt { h.completeAction(action) } } }) return false } // SaveAs saves the buffer to disk with the given name func (h *BufPane) SaveAs() bool { return h.SaveAsCB("SaveAs", nil) } // This function saves the buffer to `filename` and changes the buffer's path and name // to `filename` if the save is successful // The callback is only called if the save was successful func (h *BufPane) saveBufToFile(filename string, action string, callback func()) bool { err := h.Buf.SaveAs(filename) if err != nil { if strings.HasSuffix(err.Error(), "permission denied") { saveWithSudo := func() { err = h.Buf.SaveAsWithSudo(filename) if err != nil { InfoBar.Error(err) } else { h.Buf.Path = filename h.Buf.SetName(filename) InfoBar.Message("Saved " + filename) if callback != nil { callback() } } } if h.Buf.Settings["autosu"].(bool) { saveWithSudo() } else { InfoBar.YNPrompt("Permission denied. Do you want to save this file using sudo? (y,n)", func(yes, canceled bool) { if yes && !canceled { saveWithSudo() h.completeAction(action) } }) return false } } else { InfoBar.Error(err) } } else { h.Buf.Path = filename h.Buf.SetName(filename) InfoBar.Message("Saved " + filename) if callback != nil { callback() } } return true } // Find opens a prompt and searches forward for the input func (h *BufPane) Find() bool { return h.find(true) } // FindLiteral is the same as Find() but does not support regular expressions func (h *BufPane) FindLiteral() bool { return h.find(false) } // Search searches for a given string/regex in the buffer and selects the next // match if a match is found // This function affects lastSearch and lastSearchRegex (saved searches) for // use with FindNext and FindPrevious func (h *BufPane) Search(str string, useRegex bool, searchDown bool) error { match, found, err := h.Buf.FindNext(str, h.Buf.Start(), h.Buf.End(), h.Cursor.Loc, searchDown, useRegex) if err != nil { return err } if found { h.Cursor.SetSelectionStart(match[0]) h.Cursor.SetSelectionEnd(match[1]) h.Cursor.OrigSelection[0] = h.Cursor.CurSelection[0] h.Cursor.OrigSelection[1] = h.Cursor.CurSelection[1] h.Cursor.GotoLoc(h.Cursor.CurSelection[1]) h.lastSearch = str h.lastSearchRegex = useRegex h.Relocate() } else { h.Cursor.ResetSelection() } return nil } func (h *BufPane) find(useRegex bool) bool { h.searchOrig = h.Cursor.Loc prompt := "Find: " if useRegex { prompt = "Find (regex): " } var eventCallback func(resp string) if h.Buf.Settings["incsearch"].(bool) { eventCallback = func(resp string) { match, found, _ := h.Buf.FindNext(resp, h.Buf.Start(), h.Buf.End(), h.searchOrig, true, useRegex) if found { h.Cursor.SetSelectionStart(match[0]) h.Cursor.SetSelectionEnd(match[1]) h.Cursor.OrigSelection[0] = h.Cursor.CurSelection[0] h.Cursor.OrigSelection[1] = h.Cursor.CurSelection[1] h.Cursor.GotoLoc(match[1]) } else { h.Cursor.GotoLoc(h.searchOrig) h.Cursor.ResetSelection() } h.Relocate() } } InfoBar.Prompt(prompt, "", "Find", eventCallback, func(resp string, canceled bool) { // Finished callback if !canceled { match, found, err := h.Buf.FindNext(resp, h.Buf.Start(), h.Buf.End(), h.searchOrig, true, useRegex) if err != nil { InfoBar.Error(err) } if found { h.Cursor.SetSelectionStart(match[0]) h.Cursor.SetSelectionEnd(match[1]) h.Cursor.OrigSelection[0] = h.Cursor.CurSelection[0] h.Cursor.OrigSelection[1] = h.Cursor.CurSelection[1] h.Cursor.GotoLoc(h.Cursor.CurSelection[1]) h.lastSearch = resp h.lastSearchRegex = useRegex } else { h.Cursor.ResetSelection() InfoBar.Message("No matches found") } } else { h.Cursor.ResetSelection() } h.Relocate() }) return true } // FindNext searches forwards for the last used search term func (h *BufPane) FindNext() bool { // If the cursor is at the start of a selection and we search we want // to search from the end of the selection in the case that // the selection is a search result in which case we wouldn't move at // at all which would be bad searchLoc := h.Cursor.Loc if h.Cursor.HasSelection() { searchLoc = h.Cursor.CurSelection[1] } match, found, err := h.Buf.FindNext(h.lastSearch, h.Buf.Start(), h.Buf.End(), searchLoc, true, h.lastSearchRegex) if err != nil { InfoBar.Error(err) } if found { h.Cursor.SetSelectionStart(match[0]) h.Cursor.SetSelectionEnd(match[1]) h.Cursor.OrigSelection[0] = h.Cursor.CurSelection[0] h.Cursor.OrigSelection[1] = h.Cursor.CurSelection[1] h.Cursor.Loc = h.Cursor.CurSelection[1] } else { h.Cursor.ResetSelection() } h.Relocate() return true } // FindPrevious searches backwards for the last used search term func (h *BufPane) FindPrevious() bool { // If the cursor is at the end of a selection and we search we want // to search from the beginning of the selection in the case that // the selection is a search result in which case we wouldn't move at // at all which would be bad searchLoc := h.Cursor.Loc if h.Cursor.HasSelection() { searchLoc = h.Cursor.CurSelection[0] } match, found, err := h.Buf.FindNext(h.lastSearch, h.Buf.Start(), h.Buf.End(), searchLoc, false, h.lastSearchRegex) if err != nil { InfoBar.Error(err) } if found { h.Cursor.SetSelectionStart(match[0]) h.Cursor.SetSelectionEnd(match[1]) h.Cursor.OrigSelection[0] = h.Cursor.CurSelection[0] h.Cursor.OrigSelection[1] = h.Cursor.CurSelection[1] h.Cursor.Loc = h.Cursor.CurSelection[1] } else { h.Cursor.ResetSelection() } h.Relocate() return true } // Undo undoes the last action func (h *BufPane) Undo() bool { h.Buf.Undo() InfoBar.Message("Undid action") h.Relocate() return true } // Redo redoes the last action func (h *BufPane) Redo() bool { h.Buf.Redo() InfoBar.Message("Redid action") h.Relocate() return true } // Copy the selection to the system clipboard func (h *BufPane) Copy() bool { if h.Cursor.HasSelection() { h.Cursor.CopySelection(clipboard.ClipboardReg) h.freshClip = true InfoBar.Message("Copied selection") } h.Relocate() return true } // Copy the current line to the clipboard func (h *BufPane) CopyLine() bool { if h.Cursor.HasSelection() { return false } else { h.Cursor.SelectLine() h.Cursor.CopySelection(clipboard.ClipboardReg) h.freshClip = true InfoBar.Message("Copied line") } h.Cursor.Deselect(true) h.Relocate() return true } // CutLine cuts the current line to the clipboard func (h *BufPane) CutLine() bool { h.Cursor.SelectLine() if !h.Cursor.HasSelection() { return false } if h.freshClip { if h.Cursor.HasSelection() { if clip, err := clipboard.Read(clipboard.ClipboardReg); err != nil { InfoBar.Error(err) } else { clipboard.WriteMulti(clip+string(h.Cursor.GetSelection()), clipboard.ClipboardReg, h.Cursor.Num, h.Buf.NumCursors()) } } } else if time.Since(h.lastCutTime)/time.Second > 10*time.Second || !h.freshClip { h.Copy() } h.freshClip = true h.lastCutTime = time.Now() h.Cursor.DeleteSelection() h.Cursor.ResetSelection() InfoBar.Message("Cut line") h.Relocate() return true } // Cut the selection to the system clipboard func (h *BufPane) Cut() bool { if h.Cursor.HasSelection() { h.Cursor.CopySelection(clipboard.ClipboardReg) h.Cursor.DeleteSelection() h.Cursor.ResetSelection() h.freshClip = true InfoBar.Message("Cut selection") h.Relocate() return true } else { return h.CutLine() } } // DuplicateLine duplicates the current line or selection func (h *BufPane) DuplicateLine() bool { if h.Cursor.HasSelection() { h.Buf.Insert(h.Cursor.CurSelection[1], string(h.Cursor.GetSelection())) } else { h.Cursor.End() h.Buf.Insert(h.Cursor.Loc, "\n"+string(h.Buf.LineBytes(h.Cursor.Y))) // h.Cursor.Right() } InfoBar.Message("Duplicated line") h.Relocate() return true } // DeleteLine deletes the current line func (h *BufPane) DeleteLine() bool { h.Cursor.SelectLine() if !h.Cursor.HasSelection() { return false } h.Cursor.DeleteSelection() h.Cursor.ResetSelection() InfoBar.Message("Deleted line") h.Relocate() return true } // MoveLinesUp moves up the current line or selected lines if any func (h *BufPane) MoveLinesUp() bool { if h.Cursor.HasSelection() { if h.Cursor.CurSelection[0].Y == 0 { InfoBar.Message("Cannot move further up") return false } start := h.Cursor.CurSelection[0].Y end := h.Cursor.CurSelection[1].Y sel := 1 if start > end { end, start = start, end sel = 0 } compensate := false if h.Cursor.CurSelection[sel].X != 0 { end++ } else { compensate = true } h.Buf.MoveLinesUp( start, end, ) if compensate { h.Cursor.CurSelection[sel].Y -= 1 } } else { if h.Cursor.Loc.Y == 0 { InfoBar.Message("Cannot move further up") return false } h.Buf.MoveLinesUp( h.Cursor.Loc.Y, h.Cursor.Loc.Y+1, ) } h.Relocate() return true } // MoveLinesDown moves down the current line or selected lines if any func (h *BufPane) MoveLinesDown() bool { if h.Cursor.HasSelection() { if h.Cursor.CurSelection[1].Y >= h.Buf.LinesNum() { InfoBar.Message("Cannot move further down") return false } start := h.Cursor.CurSelection[0].Y end := h.Cursor.CurSelection[1].Y sel := 1 if start > end { end, start = start, end sel = 0 } if h.Cursor.CurSelection[sel].X != 0 { end++ } h.Buf.MoveLinesDown( start, end, ) } else { if h.Cursor.Loc.Y >= h.Buf.LinesNum()-1 { InfoBar.Message("Cannot move further down") return false } h.Buf.MoveLinesDown( h.Cursor.Loc.Y, h.Cursor.Loc.Y+1, ) } h.Relocate() return true } // Paste whatever is in the system clipboard into the buffer // Delete and paste if the user has a selection func (h *BufPane) Paste() bool { clip, err := clipboard.ReadMulti(clipboard.ClipboardReg, h.Cursor.Num, h.Buf.NumCursors()) if err != nil { InfoBar.Error(err) } else { h.paste(clip) } h.Relocate() return true } // PastePrimary pastes from the primary clipboard (only use on linux) func (h *BufPane) PastePrimary() bool { clip, err := clipboard.ReadMulti(clipboard.PrimaryReg, h.Cursor.Num, h.Buf.NumCursors()) if err != nil { InfoBar.Error(err) } else { h.paste(clip) } h.Relocate() return true } func (h *BufPane) paste(clip string) { if h.Buf.Settings["smartpaste"].(bool) { if h.Cursor.X > 0 && len(util.GetLeadingWhitespace([]byte(strings.TrimLeft(clip, "\r\n")))) == 0 { leadingWS := util.GetLeadingWhitespace(h.Buf.LineBytes(h.Cursor.Y)) clip = strings.ReplaceAll(clip, "\n", "\n"+string(leadingWS)) } } if h.Cursor.HasSelection() { h.Cursor.DeleteSelection() h.Cursor.ResetSelection() } h.Buf.Insert(h.Cursor.Loc, clip) // h.Cursor.Loc = h.Cursor.Loc.Move(Count(clip), h.Buf) h.freshClip = false InfoBar.Message("Pasted clipboard") } // JumpToMatchingBrace moves the cursor to the matching brace if it is // currently on a brace func (h *BufPane) JumpToMatchingBrace() bool { for _, bp := range buffer.BracePairs { r := h.Cursor.RuneUnder(h.Cursor.X) rl := h.Cursor.RuneUnder(h.Cursor.X - 1) if r == bp[0] || r == bp[1] || rl == bp[0] || rl == bp[1] { matchingBrace, left, found := h.Buf.FindMatchingBrace(bp, h.Cursor.Loc) if found { if left { h.Cursor.GotoLoc(matchingBrace) } else { h.Cursor.GotoLoc(matchingBrace.Move(1, h.Buf)) } break } else { return false } } } h.Relocate() return true } // SelectAll selects the entire buffer func (h *BufPane) SelectAll() bool { h.Cursor.SetSelectionStart(h.Buf.Start()) h.Cursor.SetSelectionEnd(h.Buf.End()) // Put the cursor at the beginning h.Cursor.X = 0 h.Cursor.Y = 0 h.Relocate() return true } // OpenFile opens a new file in the buffer func (h *BufPane) OpenFile() bool { InfoBar.Prompt("> ", "open ", "Open", nil, func(resp string, canceled bool) { if !canceled { h.HandleCommand(resp) } }) return true } // OpenFile opens a new file in the buffer func (h *BufPane) JumpLine() bool { InfoBar.Prompt("> ", "goto ", "Command", nil, func(resp string, canceled bool) { if !canceled { h.HandleCommand(resp) } }) return true } // Start moves the viewport to the start of the buffer func (h *BufPane) Start() bool { v := h.GetView() v.StartLine = display.SLoc{0, 0} h.SetView(v) return true } // End moves the viewport to the end of the buffer func (h *BufPane) End() bool { v := h.GetView() v.StartLine = h.Scroll(h.SLocFromLoc(h.Buf.End()), -h.BufView().Height+1) h.SetView(v) return true } // PageUp scrolls the view up a page func (h *BufPane) PageUp() bool { h.ScrollUp(h.BufView().Height) return true } // PageDown scrolls the view down a page func (h *BufPane) PageDown() bool { h.ScrollDown(h.BufView().Height) h.ScrollAdjust() return true } // SelectPageUp selects up one page func (h *BufPane) SelectPageUp() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } h.MoveCursorUp(h.BufView().Height) h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // SelectPageDown selects down one page func (h *BufPane) SelectPageDown() bool { if !h.Cursor.HasSelection() { h.Cursor.OrigSelection[0] = h.Cursor.Loc } h.MoveCursorDown(h.BufView().Height) h.Cursor.SelectTo(h.Cursor.Loc) h.Relocate() return true } // CursorPageUp places the cursor a page up func (h *BufPane) CursorPageUp() bool { h.Cursor.Deselect(true) if h.Cursor.HasSelection() { h.Cursor.Loc = h.Cursor.CurSelection[0] h.Cursor.ResetSelection() h.Cursor.StoreVisualX() } h.MoveCursorUp(h.BufView().Height) h.Relocate() return true } // CursorPageDown places the cursor a page up func (h *BufPane) CursorPageDown() bool { h.Cursor.Deselect(false) if h.Cursor.HasSelection() { h.Cursor.Loc = h.Cursor.CurSelection[1] h.Cursor.ResetSelection() h.Cursor.StoreVisualX() } h.MoveCursorDown(h.BufView().Height) h.Relocate() return true } // HalfPageUp scrolls the view up half a page func (h *BufPane) HalfPageUp() bool { h.ScrollUp(h.BufView().Height / 2) return true } // HalfPageDown scrolls the view down half a page func (h *BufPane) HalfPageDown() bool { h.ScrollDown(h.BufView().Height / 2) h.ScrollAdjust() return true } // ToggleDiffGutter turns the diff gutter off and on func (h *BufPane) ToggleDiffGutter() bool { if !h.Buf.Settings["diffgutter"].(bool) { h.Buf.Settings["diffgutter"] = true h.Buf.UpdateDiff(func(synchronous bool) { screen.Redraw() }) InfoBar.Message("Enabled diff gutter") } else { h.Buf.Settings["diffgutter"] = false InfoBar.Message("Disabled diff gutter") } return true } // ToggleRuler turns line numbers off and on func (h *BufPane) ToggleRuler() bool { if !h.Buf.Settings["ruler"].(bool) { h.Buf.Settings["ruler"] = true InfoBar.Message("Enabled ruler") } else { h.Buf.Settings["ruler"] = false InfoBar.Message("Disabled ruler") } return true } // ClearStatus clears the messenger bar func (h *BufPane) ClearStatus() bool { InfoBar.Message("") return true } // ToggleHelp toggles the help screen func (h *BufPane) ToggleHelp() bool { if h.Buf.Type == buffer.BTHelp { h.Quit() } else { h.openHelp("help") } return true } // ToggleKeyMenu toggles the keymenu option and resizes all tabs func (h *BufPane) ToggleKeyMenu() bool { config.GlobalSettings["keymenu"] = !config.GetGlobalOption("keymenu").(bool) Tabs.Resize() return true } // ShellMode opens a terminal to run a shell command func (h *BufPane) ShellMode() bool { InfoBar.Prompt("$ ", "", "Shell", nil, func(resp string, canceled bool) { if !canceled { // The true here is for openTerm to make the command interactive shell.RunInteractiveShell(resp, true, false) } }) return true } // CommandMode lets the user enter a command func (h *BufPane) CommandMode() bool { InfoBar.Prompt("> ", "", "Command", nil, func(resp string, canceled bool) { if !canceled { h.HandleCommand(resp) } }) return true } // ToggleOverwriteMode lets the user toggle the text overwrite mode func (h *BufPane) ToggleOverwriteMode() bool { h.isOverwriteMode = !h.isOverwriteMode return true } // Escape leaves current mode func (h *BufPane) Escape() bool { return true } // Deselect deselects on the current cursor func (h *BufPane) Deselect() bool { h.Cursor.Deselect(true) return true } // ClearInfo clears the infobar func (h *BufPane) ClearInfo() bool { InfoBar.Message("") return true } // ForceQuit closes the current tab or view even if there are unsaved changes // (no prompt) func (h *BufPane) ForceQuit() bool { h.Buf.Close() if len(MainTab().Panes) > 1 { h.Unsplit() } else if len(Tabs.List) > 1 { Tabs.RemoveTab(h.splitID) } else { screen.Screen.Fini() InfoBar.Close() runtime.Goexit() } return true } // Quit this will close the current tab or view that is open func (h *BufPane) Quit() bool { if h.Buf.Modified() { if config.GlobalSettings["autosave"].(float64) > 0 { // autosave on means we automatically save when quitting h.SaveCB("Quit", func() { h.ForceQuit() }) } else { InfoBar.YNPrompt("Save changes to "+h.Buf.GetName()+" before closing? (y,n,esc)", func(yes, canceled bool) { if !canceled && !yes { h.ForceQuit() } else if !canceled && yes { h.SaveCB("Quit", func() { h.ForceQuit() }) } }) } } else { h.ForceQuit() } return true } // QuitAll quits the whole editor; all splits and tabs func (h *BufPane) QuitAll() bool { anyModified := false for _, b := range buffer.OpenBuffers { if b.Modified() { anyModified = true break } } quit := func() { for _, b := range buffer.OpenBuffers { b.Close() } screen.Screen.Fini() InfoBar.Close() runtime.Goexit() } if anyModified { InfoBar.YNPrompt("Quit micro? (all open buffers will be closed without saving)", func(yes, canceled bool) { if !canceled && yes { quit() } }) } else { quit() } return true } // AddTab adds a new tab with an empty buffer func (h *BufPane) AddTab() bool { width, height := screen.Screen.Size() iOffset := config.GetInfoBarOffset() b := buffer.NewBufferFromString("", "", buffer.BTDefault) tp := NewTabFromBuffer(0, 0, width, height-iOffset, b) Tabs.AddTab(tp) Tabs.SetActive(len(Tabs.List) - 1) return true } // PreviousTab switches to the previous tab in the tab list func (h *BufPane) PreviousTab() bool { tabsLen := len(Tabs.List) a := Tabs.Active() + tabsLen Tabs.SetActive((a - 1) % tabsLen) return true } // NextTab switches to the next tab in the tab list func (h *BufPane) NextTab() bool { a := Tabs.Active() Tabs.SetActive((a + 1) % len(Tabs.List)) return true } // VSplitAction opens an empty vertical split func (h *BufPane) VSplitAction() bool { h.VSplitBuf(buffer.NewBufferFromString("", "", buffer.BTDefault)) return true } // HSplitAction opens an empty horizontal split func (h *BufPane) HSplitAction() bool { h.HSplitBuf(buffer.NewBufferFromString("", "", buffer.BTDefault)) return true } // Unsplit closes all splits in the current tab except the active one func (h *BufPane) Unsplit() bool { tab := h.tab n := tab.GetNode(h.splitID) ok := n.Unsplit() if ok { tab.RemovePane(tab.GetPane(h.splitID)) tab.Resize() tab.SetActive(len(tab.Panes) - 1) return true } return false } // NextSplit changes the view to the next split func (h *BufPane) NextSplit() bool { a := h.tab.active if a < len(h.tab.Panes)-1 { a++ } else { a = 0 } h.tab.SetActive(a) return true } // PreviousSplit changes the view to the previous split func (h *BufPane) PreviousSplit() bool { a := h.tab.active if a > 0 { a-- } else { a = len(h.tab.Panes) - 1 } h.tab.SetActive(a) return true } var curmacro []interface{} var recording_macro bool // ToggleMacro toggles recording of a macro func (h *BufPane) ToggleMacro() bool { recording_macro = !recording_macro if recording_macro { curmacro = []interface{}{} InfoBar.Message("Recording") } else { InfoBar.Message("Stopped recording") } h.Relocate() return true } // PlayMacro plays back the most recently recorded macro func (h *BufPane) PlayMacro() bool { if recording_macro { return false } for _, action := range curmacro { switch t := action.(type) { case rune: h.DoRuneInsert(t) case func(*BufPane) bool: t(h) } } h.Relocate() return true } // SpawnMultiCursor creates a new multiple cursor at the next occurrence of the current selection or current word func (h *BufPane) SpawnMultiCursor() bool { spawner := h.Buf.GetCursor(h.Buf.NumCursors() - 1) if !spawner.HasSelection() { spawner.SelectWord() h.multiWord = true h.Relocate() return true } sel := spawner.GetSelection() searchStart := spawner.CurSelection[1] search := string(sel) search = regexp.QuoteMeta(search) if h.multiWord { search = "\\b" + search + "\\b" } match, found, err := h.Buf.FindNext(search, h.Buf.Start(), h.Buf.End(), searchStart, true, true) if err != nil { InfoBar.Error(err) } if found { c := buffer.NewCursor(h.Buf, buffer.Loc{}) c.SetSelectionStart(match[0]) c.SetSelectionEnd(match[1]) c.OrigSelection[0] = c.CurSelection[0] c.OrigSelection[1] = c.CurSelection[1] c.Loc = c.CurSelection[1] h.Buf.AddCursor(c) h.Buf.SetCurCursor(h.Buf.NumCursors() - 1) h.Buf.MergeCursors() } else { InfoBar.Message("No matches found") } h.Relocate() return true } // SpawnMultiCursorUp creates additional cursor, at the same X (if possible), one Y less. func (h *BufPane) SpawnMultiCursorUp() bool { if h.Cursor.Y == 0 { return false } else { h.Cursor.GotoLoc(buffer.Loc{h.Cursor.X, h.Cursor.Y - 1}) h.Cursor.Relocate() } c := buffer.NewCursor(h.Buf, buffer.Loc{h.Cursor.X, h.Cursor.Y + 1}) h.Buf.AddCursor(c) h.Buf.SetCurCursor(h.Buf.NumCursors() - 1) h.Buf.MergeCursors() h.Relocate() return true } // SpawnMultiCursorDown creates additional cursor, at the same X (if possible), one Y more. func (h *BufPane) SpawnMultiCursorDown() bool { if h.Cursor.Y+1 == h.Buf.LinesNum() { return false } else { h.Cursor.GotoLoc(buffer.Loc{h.Cursor.X, h.Cursor.Y + 1}) h.Cursor.Relocate() } c := buffer.NewCursor(h.Buf, buffer.Loc{h.Cursor.X, h.Cursor.Y - 1}) h.Buf.AddCursor(c) h.Buf.SetCurCursor(h.Buf.NumCursors() - 1) h.Buf.MergeCursors() h.Relocate() return true } // SpawnMultiCursorSelect adds a cursor at the beginning of each line of a selection func (h *BufPane) SpawnMultiCursorSelect() bool { // Avoid cases where multiple cursors already exist, that would create problems if h.Buf.NumCursors() > 1 { return false } var startLine int var endLine int a, b := h.Cursor.CurSelection[0].Y, h.Cursor.CurSelection[1].Y if a > b { startLine, endLine = b, a } else { startLine, endLine = a, b } if h.Cursor.HasSelection() { h.Cursor.ResetSelection() h.Cursor.GotoLoc(buffer.Loc{0, startLine}) for i := startLine; i <= endLine; i++ { c := buffer.NewCursor(h.Buf, buffer.Loc{0, i}) c.StoreVisualX() h.Buf.AddCursor(c) } h.Buf.MergeCursors() } else { return false } InfoBar.Message("Added cursors from selection") return true } // MouseMultiCursor is a mouse action which puts a new cursor at the mouse position func (h *BufPane) MouseMultiCursor(e *tcell.EventMouse) bool { b := h.Buf mx, my := e.Position() mouseLoc := h.LocFromVisual(buffer.Loc{X: mx, Y: my}) c := buffer.NewCursor(b, mouseLoc) b.AddCursor(c) b.MergeCursors() return true } // SkipMultiCursor moves the current multiple cursor to the next available position func (h *BufPane) SkipMultiCursor() bool { lastC := h.Buf.GetCursor(h.Buf.NumCursors() - 1) sel := lastC.GetSelection() searchStart := lastC.CurSelection[1] search := string(sel) search = regexp.QuoteMeta(search) if h.multiWord { search = "\\b" + search + "\\b" } match, found, err := h.Buf.FindNext(search, h.Buf.Start(), h.Buf.End(), searchStart, true, true) if err != nil { InfoBar.Error(err) } if found { lastC.SetSelectionStart(match[0]) lastC.SetSelectionEnd(match[1]) lastC.OrigSelection[0] = lastC.CurSelection[0] lastC.OrigSelection[1] = lastC.CurSelection[1] lastC.Loc = lastC.CurSelection[1] h.Buf.MergeCursors() h.Buf.SetCurCursor(h.Buf.NumCursors() - 1) } else { InfoBar.Message("No matches found") } h.Relocate() return true } // RemoveMultiCursor removes the latest multiple cursor func (h *BufPane) RemoveMultiCursor() bool { if h.Buf.NumCursors() > 1 { h.Buf.RemoveCursor(h.Buf.NumCursors() - 1) h.Buf.SetCurCursor(h.Buf.NumCursors() - 1) h.Buf.UpdateCursors() } else { h.multiWord = false } h.Relocate() return true } // RemoveAllMultiCursors removes all cursors except the base cursor func (h *BufPane) RemoveAllMultiCursors() bool { h.Buf.ClearCursors() h.multiWord = false h.Relocate() return true } // None is an action that does nothing func (h *BufPane) None() bool { return true } micro-2.0.9/internal/action/actions_other.go000066400000000000000000000002301405030104300210750ustar00rootroot00000000000000// +build plan9 nacl windows package action func (*BufPane) Suspend() bool { InfoBar.Error("Suspend is only supported on BSD/Linux") return false } micro-2.0.9/internal/action/actions_posix.go000066400000000000000000000011501405030104300211200ustar00rootroot00000000000000// +build linux darwin dragonfly solaris openbsd netbsd freebsd package action import ( "syscall" "github.com/zyedidia/micro/v2/internal/screen" ) // Suspend sends micro to the background. This is the same as pressing CtrlZ in most unix programs. // This only works on linux and has no default binding. // This code was adapted from the suspend code in nsf/godit func (*BufPane) Suspend() bool { screenb := screen.TempFini() // suspend the process pid := syscall.Getpid() err := syscall.Kill(pid, syscall.SIGSTOP) if err != nil { screen.TermMessage(err) } screen.TempStart(screenb) return false } micro-2.0.9/internal/action/bindings.go000066400000000000000000000302201405030104300200330ustar00rootroot00000000000000package action import ( "encoding/json" "errors" "fmt" "io/ioutil" "os" "path/filepath" "regexp" "strings" "unicode" "github.com/zyedidia/json5" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/tcell/v2" ) var Binder = map[string]func(e Event, action string){ "command": InfoMapEvent, "buffer": BufMapEvent, "terminal": TermMapEvent, } func createBindingsIfNotExist(fname string) { if _, e := os.Stat(fname); os.IsNotExist(e) { ioutil.WriteFile(fname, []byte("{}"), 0644) } } // InitBindings intializes the bindings map by reading from bindings.json func InitBindings() { var parsed map[string]interface{} filename := filepath.Join(config.ConfigDir, "bindings.json") createBindingsIfNotExist(filename) if _, e := os.Stat(filename); e == nil { input, err := ioutil.ReadFile(filename) if err != nil { screen.TermMessage("Error reading bindings.json file: " + err.Error()) return } err = json5.Unmarshal(input, &parsed) if err != nil { screen.TermMessage("Error reading bindings.json:", err.Error()) } } for p, bind := range Binder { defaults := DefaultBindings(p) for k, v := range defaults { BindKey(k, v, bind) } } for k, v := range parsed { switch val := v.(type) { case string: BindKey(k, val, Binder["buffer"]) case map[string]interface{}: bind, ok := Binder[k] if !ok || bind == nil { screen.TermMessage(fmt.Sprintf("%s is not a valid pane type", k)) continue } for e, a := range val { s, ok := a.(string) if !ok { screen.TermMessage("Error reading bindings.json: non-string and non-map entry", k) } else { BindKey(e, s, bind) } } default: screen.TermMessage("Error reading bindings.json: non-string and non-map entry", k) } } } func BindKey(k, v string, bind func(e Event, a string)) { event, err := findEvent(k) if err != nil { screen.TermMessage(err) return } bind(event, v) // switch e := event.(type) { // case KeyEvent: // InfoMapKey(e, v) // case KeySequenceEvent: // InfoMapKey(e, v) // case MouseEvent: // InfoMapMouse(e, v) // case RawEvent: // InfoMapKey(e, v) // } } var r = regexp.MustCompile("<(.+?)>") func findEvents(k string) (b KeySequenceEvent, ok bool, err error) { var events []Event = nil for len(k) > 0 { groups := r.FindStringSubmatchIndex(k) if len(groups) > 3 { if events == nil { events = make([]Event, 0, 3) } e, ok := findSingleEvent(k[groups[2]:groups[3]]) if !ok { return KeySequenceEvent{}, false, errors.New("Invalid event " + k[groups[2]:groups[3]]) } events = append(events, e) k = k[groups[3]+1:] } else { return KeySequenceEvent{}, false, nil } } return KeySequenceEvent{events}, true, nil } // findSingleEvent will find binding Key 'b' using string 'k' func findSingleEvent(k string) (b Event, ok bool) { modifiers := tcell.ModNone // First, we'll strip off all the modifiers in the name and add them to the // ModMask modSearch: for { switch { case strings.HasPrefix(k, "-"): // We optionally support dashes between modifiers k = k[1:] case strings.HasPrefix(k, "Ctrl") && k != "CtrlH": // CtrlH technically does not have a 'Ctrl' modifier because it is really backspace k = k[4:] modifiers |= tcell.ModCtrl case strings.HasPrefix(k, "Alt"): k = k[3:] modifiers |= tcell.ModAlt case strings.HasPrefix(k, "Shift"): k = k[5:] modifiers |= tcell.ModShift case strings.HasPrefix(k, "\x1b"): screen.Screen.RegisterRawSeq(k) return RawEvent{ esc: k, }, true default: break modSearch } } if k == "" { return KeyEvent{}, false } // Control is handled in a special way, since the terminal sends explicitly // marked escape sequences for control keys // We should check for Control keys first if modifiers&tcell.ModCtrl != 0 { // see if the key is in bindingKeys with the Ctrl prefix. k = string(unicode.ToUpper(rune(k[0]))) + k[1:] if code, ok := keyEvents["Ctrl"+k]; ok { var r tcell.Key // Special case for escape, for some reason tcell doesn't send it with the esc character if code < 256 && code != 27 { r = code } // It is, we're done. return KeyEvent{ code: code, mod: modifiers, r: rune(r), }, true } } // See if we can find the key in bindingKeys if code, ok := keyEvents[k]; ok { var r tcell.Key // Special case for escape, for some reason tcell doesn't send it with the esc character if code < 256 && code != 27 { r = code } return KeyEvent{ code: code, mod: modifiers, r: rune(r), }, true } // See if we can find the key in bindingMouse if code, ok := mouseEvents[k]; ok { return MouseEvent{ btn: code, mod: modifiers, }, true } // If we were given one character, then we've got a rune. if len(k) == 1 { return KeyEvent{ code: tcell.KeyRune, mod: modifiers, r: rune(k[0]), }, true } // We don't know what happened. return KeyEvent{}, false } func findEvent(k string) (Event, error) { var event Event event, ok, err := findEvents(k) if err != nil { return nil, err } if !ok { event, ok = findSingleEvent(k) if !ok { return nil, errors.New(k + " is not a bindable event") } } return event, nil } // TryBindKey tries to bind a key by writing to config.ConfigDir/bindings.json // Returns true if the keybinding already existed and a possible error func TryBindKey(k, v string, overwrite bool) (bool, error) { var e error var parsed map[string]interface{} filename := filepath.Join(config.ConfigDir, "bindings.json") createBindingsIfNotExist(filename) if _, e = os.Stat(filename); e == nil { input, err := ioutil.ReadFile(filename) if err != nil { return false, errors.New("Error reading bindings.json file: " + err.Error()) } err = json5.Unmarshal(input, &parsed) if err != nil { return false, errors.New("Error reading bindings.json: " + err.Error()) } key, err := findEvent(k) if err != nil { return false, err } found := false for ev := range parsed { if e, err := findEvent(ev); err == nil { if e == key { if overwrite { parsed[ev] = v } found = true break } } } if found && !overwrite { return true, nil } else if !found { parsed[k] = v } BindKey(k, v, Binder["buffer"]) txt, _ := json.MarshalIndent(parsed, "", " ") return true, ioutil.WriteFile(filename, append(txt, '\n'), 0644) } return false, e } // UnbindKey removes the binding for a key from the bindings.json file func UnbindKey(k string) error { var e error var parsed map[string]interface{} filename := filepath.Join(config.ConfigDir, "bindings.json") createBindingsIfNotExist(filename) if _, e = os.Stat(filename); e == nil { input, err := ioutil.ReadFile(filename) if err != nil { return errors.New("Error reading bindings.json file: " + err.Error()) } err = json5.Unmarshal(input, &parsed) if err != nil { return errors.New("Error reading bindings.json: " + err.Error()) } key, err := findEvent(k) if err != nil { return err } for ev := range parsed { if e, err := findEvent(ev); err == nil { if e == key { delete(parsed, ev) break } } } defaults := DefaultBindings("buffer") if a, ok := defaults[k]; ok { BindKey(k, a, Binder["buffer"]) } else if _, ok := config.Bindings["buffer"][k]; ok { BufUnmap(key) delete(config.Bindings["buffer"], k) } txt, _ := json.MarshalIndent(parsed, "", " ") return ioutil.WriteFile(filename, append(txt, '\n'), 0644) } return e } var mouseEvents = map[string]tcell.ButtonMask{ "MouseLeft": tcell.ButtonPrimary, "MouseMiddle": tcell.ButtonMiddle, "MouseRight": tcell.ButtonSecondary, "MouseWheelUp": tcell.WheelUp, "MouseWheelDown": tcell.WheelDown, "MouseWheelLeft": tcell.WheelLeft, "MouseWheelRight": tcell.WheelRight, } var keyEvents = map[string]tcell.Key{ "Up": tcell.KeyUp, "Down": tcell.KeyDown, "Right": tcell.KeyRight, "Left": tcell.KeyLeft, "UpLeft": tcell.KeyUpLeft, "UpRight": tcell.KeyUpRight, "DownLeft": tcell.KeyDownLeft, "DownRight": tcell.KeyDownRight, "Center": tcell.KeyCenter, "PageUp": tcell.KeyPgUp, "PageDown": tcell.KeyPgDn, "Home": tcell.KeyHome, "End": tcell.KeyEnd, "Insert": tcell.KeyInsert, "Delete": tcell.KeyDelete, "Help": tcell.KeyHelp, "Exit": tcell.KeyExit, "Clear": tcell.KeyClear, "Cancel": tcell.KeyCancel, "Print": tcell.KeyPrint, "Pause": tcell.KeyPause, "Backtab": tcell.KeyBacktab, "F1": tcell.KeyF1, "F2": tcell.KeyF2, "F3": tcell.KeyF3, "F4": tcell.KeyF4, "F5": tcell.KeyF5, "F6": tcell.KeyF6, "F7": tcell.KeyF7, "F8": tcell.KeyF8, "F9": tcell.KeyF9, "F10": tcell.KeyF10, "F11": tcell.KeyF11, "F12": tcell.KeyF12, "F13": tcell.KeyF13, "F14": tcell.KeyF14, "F15": tcell.KeyF15, "F16": tcell.KeyF16, "F17": tcell.KeyF17, "F18": tcell.KeyF18, "F19": tcell.KeyF19, "F20": tcell.KeyF20, "F21": tcell.KeyF21, "F22": tcell.KeyF22, "F23": tcell.KeyF23, "F24": tcell.KeyF24, "F25": tcell.KeyF25, "F26": tcell.KeyF26, "F27": tcell.KeyF27, "F28": tcell.KeyF28, "F29": tcell.KeyF29, "F30": tcell.KeyF30, "F31": tcell.KeyF31, "F32": tcell.KeyF32, "F33": tcell.KeyF33, "F34": tcell.KeyF34, "F35": tcell.KeyF35, "F36": tcell.KeyF36, "F37": tcell.KeyF37, "F38": tcell.KeyF38, "F39": tcell.KeyF39, "F40": tcell.KeyF40, "F41": tcell.KeyF41, "F42": tcell.KeyF42, "F43": tcell.KeyF43, "F44": tcell.KeyF44, "F45": tcell.KeyF45, "F46": tcell.KeyF46, "F47": tcell.KeyF47, "F48": tcell.KeyF48, "F49": tcell.KeyF49, "F50": tcell.KeyF50, "F51": tcell.KeyF51, "F52": tcell.KeyF52, "F53": tcell.KeyF53, "F54": tcell.KeyF54, "F55": tcell.KeyF55, "F56": tcell.KeyF56, "F57": tcell.KeyF57, "F58": tcell.KeyF58, "F59": tcell.KeyF59, "F60": tcell.KeyF60, "F61": tcell.KeyF61, "F62": tcell.KeyF62, "F63": tcell.KeyF63, "F64": tcell.KeyF64, "CtrlSpace": tcell.KeyCtrlSpace, "CtrlA": tcell.KeyCtrlA, "CtrlB": tcell.KeyCtrlB, "CtrlC": tcell.KeyCtrlC, "CtrlD": tcell.KeyCtrlD, "CtrlE": tcell.KeyCtrlE, "CtrlF": tcell.KeyCtrlF, "CtrlG": tcell.KeyCtrlG, "CtrlH": tcell.KeyCtrlH, "CtrlI": tcell.KeyCtrlI, "CtrlJ": tcell.KeyCtrlJ, "CtrlK": tcell.KeyCtrlK, "CtrlL": tcell.KeyCtrlL, "CtrlM": tcell.KeyCtrlM, "CtrlN": tcell.KeyCtrlN, "CtrlO": tcell.KeyCtrlO, "CtrlP": tcell.KeyCtrlP, "CtrlQ": tcell.KeyCtrlQ, "CtrlR": tcell.KeyCtrlR, "CtrlS": tcell.KeyCtrlS, "CtrlT": tcell.KeyCtrlT, "CtrlU": tcell.KeyCtrlU, "CtrlV": tcell.KeyCtrlV, "CtrlW": tcell.KeyCtrlW, "CtrlX": tcell.KeyCtrlX, "CtrlY": tcell.KeyCtrlY, "CtrlZ": tcell.KeyCtrlZ, "CtrlLeftSq": tcell.KeyCtrlLeftSq, "CtrlBackslash": tcell.KeyCtrlBackslash, "CtrlRightSq": tcell.KeyCtrlRightSq, "CtrlCarat": tcell.KeyCtrlCarat, "CtrlUnderscore": tcell.KeyCtrlUnderscore, "Tab": tcell.KeyTab, "Esc": tcell.KeyEsc, "Escape": tcell.KeyEscape, "Enter": tcell.KeyEnter, "Backspace": tcell.KeyBackspace2, "OldBackspace": tcell.KeyBackspace, // I renamed these keys to PageUp and PageDown but I don't want to break someone's keybindings "PgUp": tcell.KeyPgUp, "PgDown": tcell.KeyPgDn, } micro-2.0.9/internal/action/bufpane.go000066400000000000000000000547301405030104300176720ustar00rootroot00000000000000package action import ( "strings" "time" luar "layeh.com/gopher-luar" lua "github.com/yuin/gopher-lua" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/clipboard" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/display" ulua "github.com/zyedidia/micro/v2/internal/lua" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/tcell/v2" ) type BufKeyAction func(*BufPane) bool type BufMouseAction func(*BufPane, *tcell.EventMouse) bool var BufBindings *KeyTree func BufKeyActionGeneral(a BufKeyAction) PaneKeyAction { return func(p Pane) bool { return a(p.(*BufPane)) } } func BufMouseActionGeneral(a BufMouseAction) PaneMouseAction { return func(p Pane, me *tcell.EventMouse) bool { return a(p.(*BufPane), me) } } func init() { BufBindings = NewKeyTree() } func LuaAction(fn string) func(*BufPane) bool { luaFn := strings.Split(fn, ".") if len(luaFn) <= 1 { return nil } plName, plFn := luaFn[0], luaFn[1] pl := config.FindPlugin(plName) if pl == nil { return nil } return func(h *BufPane) bool { val, err := pl.Call(plFn, luar.New(ulua.L, h)) if err != nil { screen.TermMessage(err) } if v, ok := val.(lua.LBool); !ok { return false } else { return bool(v) } } } // BufMapKey maps an event to an action func BufMapEvent(k Event, action string) { config.Bindings["buffer"][k.Name()] = action switch e := k.(type) { case KeyEvent, KeySequenceEvent, RawEvent: bufMapKey(e, action) case MouseEvent: bufMapMouse(e, action) } } func bufMapKey(k Event, action string) { var actionfns []func(*BufPane) bool var names []string var types []byte for i := 0; ; i++ { if action == "" { break } // TODO: fix problem when complex bindings have these // characters (escape them?) idx := strings.IndexAny(action, "&|,") a := action if idx >= 0 { a = action[:idx] types = append(types, action[idx]) action = action[idx+1:] } else { types = append(types, ' ') action = "" } var afn func(*BufPane) bool if strings.HasPrefix(a, "command:") { a = strings.SplitN(a, ":", 2)[1] afn = CommandAction(a) names = append(names, "") } else if strings.HasPrefix(a, "command-edit:") { a = strings.SplitN(a, ":", 2)[1] afn = CommandEditAction(a) names = append(names, "") } else if strings.HasPrefix(a, "lua:") { a = strings.SplitN(a, ":", 2)[1] afn = LuaAction(a) if afn == nil { screen.TermMessage("Lua Error:", a, "does not exist") continue } split := strings.SplitN(a, ".", 2) if len(split) > 1 { a = strings.Title(split[0]) + strings.Title(split[1]) } else { a = strings.Title(a) } names = append(names, a) } else if f, ok := BufKeyActions[a]; ok { afn = f names = append(names, a) } else { screen.TermMessage("Error in bindings: action", a, "does not exist") continue } actionfns = append(actionfns, afn) } bufAction := func(h *BufPane) bool { cursors := h.Buf.GetCursors() success := true for i, a := range actionfns { innerSuccess := true for j, c := range cursors { if c == nil { continue } h.Buf.SetCurCursor(c.Num) h.Cursor = c if i == 0 || (success && types[i-1] == '&') || (!success && types[i-1] == '|') || (types[i-1] == ',') { innerSuccess = innerSuccess && h.execAction(a, names[i], j) } else { break } } // if the action changed the current pane, update the reference h = MainTab().CurPane() success = innerSuccess } return true } BufBindings.RegisterKeyBinding(k, BufKeyActionGeneral(bufAction)) } // BufMapMouse maps a mouse event to an action func bufMapMouse(k MouseEvent, action string) { if f, ok := BufMouseActions[action]; ok { BufBindings.RegisterMouseBinding(k, BufMouseActionGeneral(f)) } else { // TODO // delete(BufMouseBindings, k) bufMapKey(k, action) } } // BufUnmap unmaps a key or mouse event from any action func BufUnmap(k Event) { // TODO // delete(BufKeyBindings, k) // // switch e := k.(type) { // case MouseEvent: // delete(BufMouseBindings, e) // } } // The BufPane connects the buffer and the window // It provides a cursor (or multiple) and defines a set of actions // that can be taken on the buffer // The ActionHandler can access the window for necessary info about // visual positions for mouse clicks and scrolling type BufPane struct { display.BWindow // Buf is the buffer this BufPane views Buf *buffer.Buffer // Bindings stores the association of key events and actions bindings *KeyTree // Cursor is the currently active buffer cursor Cursor *buffer.Cursor // Since tcell doesn't differentiate between a mouse release event // and a mouse move event with no keys pressed, we need to keep // track of whether or not the mouse was pressed (or not released) last event to determine // mouse release events mouseReleased bool // We need to keep track of insert key press toggle isOverwriteMode bool // This stores when the last click was // This is useful for detecting double and triple clicks lastClickTime time.Time lastLoc buffer.Loc // lastCutTime stores when the last ctrl+k was issued. // It is used for clearing the clipboard to replace it with fresh cut lines. lastCutTime time.Time // freshClip returns true if the clipboard has never been pasted. freshClip bool // Was the last mouse event actually a double click? // Useful for detecting triple clicks -- if a double click is detected // but the last mouse event was actually a double click, it's a triple click doubleClick bool // Same here, just to keep track for mouse move events tripleClick bool // Last search stores the last successful search for FindNext and FindPrev lastSearch string lastSearchRegex bool // Should the current multiple cursor selection search based on word or // based on selection (false for selection, true for word) multiWord bool splitID uint64 tab *Tab // remember original location of a search in case the search is canceled searchOrig buffer.Loc } func NewBufPane(buf *buffer.Buffer, win display.BWindow, tab *Tab) *BufPane { h := new(BufPane) h.Buf = buf h.BWindow = win h.tab = tab h.Cursor = h.Buf.GetActiveCursor() h.mouseReleased = true config.RunPluginFn("onBufPaneOpen", luar.New(ulua.L, h)) return h } func NewBufPaneFromBuf(buf *buffer.Buffer, tab *Tab) *BufPane { w := display.NewBufWindow(0, 0, 0, 0, buf) return NewBufPane(buf, w, tab) } func (h *BufPane) SetTab(t *Tab) { h.tab = t } func (h *BufPane) Tab() *Tab { return h.tab } func (h *BufPane) ResizePane(size int) { n := h.tab.GetNode(h.splitID) n.ResizeSplit(size) h.tab.Resize() } // PluginCB calls all plugin callbacks with a certain name and // displays an error if there is one and returns the aggregrate // boolean response func (h *BufPane) PluginCB(cb string) bool { b, err := config.RunPluginFnBool(cb, luar.New(ulua.L, h)) if err != nil { screen.TermMessage(err) } return b } // PluginCBRune is the same as PluginCB but also passes a rune to // the plugins func (h *BufPane) PluginCBRune(cb string, r rune) bool { b, err := config.RunPluginFnBool(cb, luar.New(ulua.L, h), luar.New(ulua.L, string(r))) if err != nil { screen.TermMessage(err) } return b } func (h *BufPane) OpenBuffer(b *buffer.Buffer) { h.Buf.Close() h.Buf = b h.BWindow.SetBuffer(b) h.Cursor = b.GetActiveCursor() h.Resize(h.GetView().Width, h.GetView().Height) h.Relocate() // Set mouseReleased to true because we assume the mouse is not being pressed when // the editor is opened h.mouseReleased = true // Set isOverwriteMode to false, because we assume we are in the default mode when editor // is opened h.isOverwriteMode = false h.lastClickTime = time.Time{} } func (h *BufPane) ID() uint64 { return h.splitID } func (h *BufPane) SetID(i uint64) { h.splitID = i } func (h *BufPane) Name() string { n := h.Buf.GetName() if h.Buf.Modified() { n += " +" } return n } // HandleEvent executes the tcell event properly func (h *BufPane) HandleEvent(event tcell.Event) { if h.Buf.ExternallyModified() && !h.Buf.ReloadDisabled { InfoBar.YNPrompt("The file on disk has changed. Reload file? (y,n,esc)", func(yes, canceled bool) { if canceled { h.Buf.DisableReload() } if !yes || canceled { h.Buf.UpdateModTime() } else { h.Buf.ReOpen() } }) } switch e := event.(type) { case *tcell.EventRaw: re := RawEvent{ esc: e.EscSeq(), } h.DoKeyEvent(re) case *tcell.EventPaste: h.paste(e.Text()) h.Relocate() case *tcell.EventKey: ke := KeyEvent{ code: e.Key(), mod: metaToAlt(e.Modifiers()), r: e.Rune(), } done := h.DoKeyEvent(ke) if !done && e.Key() == tcell.KeyRune { h.DoRuneInsert(e.Rune()) } case *tcell.EventMouse: cancel := false switch e.Buttons() { case tcell.Button1: _, my := e.Position() if h.Buf.Type.Kind != buffer.BTInfo.Kind && h.Buf.Settings["statusline"].(bool) && my >= h.GetView().Y+h.GetView().Height-1 { cancel = true } case tcell.ButtonNone: // Mouse event with no click if !h.mouseReleased { // Mouse was just released // mx, my := e.Position() // mouseLoc := h.LocFromVisual(buffer.Loc{X: mx, Y: my}) // we could finish the selection based on the release location as described // below but when the mouse click is within the scroll margin this will // cause a scroll and selection even for a simple mouse click which is // not good // for terminals that don't support mouse motion events, selection via // the mouse won't work but this is ok // Relocating here isn't really necessary because the cursor will // be in the right place from the last mouse event // However, if we are running in a terminal that doesn't support mouse motion // events, this still allows the user to make selections, except only after they // release the mouse // if !h.doubleClick && !h.tripleClick { // h.Cursor.SetSelectionEnd(h.Cursor.Loc) // } if h.Cursor.HasSelection() { h.Cursor.CopySelection(clipboard.PrimaryReg) } h.mouseReleased = true } } if !cancel { me := MouseEvent{ btn: e.Buttons(), mod: metaToAlt(e.Modifiers()), } h.DoMouseEvent(me, e) } } h.Buf.MergeCursors() if h.IsActive() { // Display any gutter messages for this line c := h.Buf.GetActiveCursor() none := true for _, m := range h.Buf.Messages { if c.Y == m.Start.Y || c.Y == m.End.Y { InfoBar.GutterMessage(m.Msg) none = false break } } if none && InfoBar.HasGutter { InfoBar.ClearGutter() } } } func (h *BufPane) Bindings() *KeyTree { if h.bindings != nil { return h.bindings } return BufBindings } // DoKeyEvent executes a key event by finding the action it is bound // to and executing it (possibly multiple times for multiple cursors) func (h *BufPane) DoKeyEvent(e Event) bool { binds := h.Bindings() action, more := binds.NextEvent(e, nil) if action != nil && !more { action(h) binds.ResetEvents() return true } else if action == nil && !more { binds.ResetEvents() } return more } func (h *BufPane) execAction(action func(*BufPane) bool, name string, cursor int) bool { if name != "Autocomplete" && name != "CycleAutocompleteBack" { h.Buf.HasSuggestions = false } _, isMulti := MultiActions[name] if (!isMulti && cursor == 0) || isMulti { if h.PluginCB("pre" + name) { success := action(h) success = success && h.PluginCB("on"+name) if isMulti { if recording_macro { if name != "ToggleMacro" && name != "PlayMacro" { curmacro = append(curmacro, action) } } } return success } } return false } func (h *BufPane) completeAction(action string) { h.PluginCB("on" + action) } func (h *BufPane) HasKeyEvent(e Event) bool { // TODO return true // _, ok := BufKeyBindings[e] // return ok } // DoMouseEvent executes a mouse event by finding the action it is bound // to and executing it func (h *BufPane) DoMouseEvent(e MouseEvent, te *tcell.EventMouse) bool { binds := h.Bindings() action, _ := binds.NextEvent(e, te) if action != nil { action(h) binds.ResetEvents() return true } // TODO return false // if action, ok := BufMouseBindings[e]; ok { // if action(h, te) { // h.Relocate() // } // return true // } else if h.HasKeyEvent(e) { // return h.DoKeyEvent(e) // } // return false } // DoRuneInsert inserts a given rune into the current buffer // (possibly multiple times for multiple cursors) func (h *BufPane) DoRuneInsert(r rune) { cursors := h.Buf.GetCursors() for _, c := range cursors { // Insert a character h.Buf.SetCurCursor(c.Num) h.Cursor = c if !h.PluginCBRune("preRune", r) { continue } if c.HasSelection() { c.DeleteSelection() c.ResetSelection() } if h.isOverwriteMode { next := c.Loc next.X++ h.Buf.Replace(c.Loc, next, string(r)) } else { h.Buf.Insert(c.Loc, string(r)) } if recording_macro { curmacro = append(curmacro, r) } h.Relocate() h.PluginCBRune("onRune", r) } } func (h *BufPane) VSplitIndex(buf *buffer.Buffer, right bool) *BufPane { e := NewBufPaneFromBuf(buf, h.tab) e.splitID = MainTab().GetNode(h.splitID).VSplit(right) MainTab().Panes = append(MainTab().Panes, e) MainTab().Resize() MainTab().SetActive(len(MainTab().Panes) - 1) return e } func (h *BufPane) HSplitIndex(buf *buffer.Buffer, bottom bool) *BufPane { e := NewBufPaneFromBuf(buf, h.tab) e.splitID = MainTab().GetNode(h.splitID).HSplit(bottom) MainTab().Panes = append(MainTab().Panes, e) MainTab().Resize() MainTab().SetActive(len(MainTab().Panes) - 1) return e } func (h *BufPane) VSplitBuf(buf *buffer.Buffer) *BufPane { return h.VSplitIndex(buf, h.Buf.Settings["splitright"].(bool)) } func (h *BufPane) HSplitBuf(buf *buffer.Buffer) *BufPane { return h.HSplitIndex(buf, h.Buf.Settings["splitbottom"].(bool)) } func (h *BufPane) Close() { h.Buf.Close() } func (h *BufPane) SetActive(b bool) { h.BWindow.SetActive(b) if b { // Display any gutter messages for this line c := h.Buf.GetActiveCursor() none := true for _, m := range h.Buf.Messages { if c.Y == m.Start.Y || c.Y == m.End.Y { InfoBar.GutterMessage(m.Msg) none = false break } } if none && InfoBar.HasGutter { InfoBar.ClearGutter() } } } // BufKeyActions contains the list of all possible key actions the bufhandler could execute var BufKeyActions = map[string]BufKeyAction{ "CursorUp": (*BufPane).CursorUp, "CursorDown": (*BufPane).CursorDown, "CursorPageUp": (*BufPane).CursorPageUp, "CursorPageDown": (*BufPane).CursorPageDown, "CursorLeft": (*BufPane).CursorLeft, "CursorRight": (*BufPane).CursorRight, "CursorStart": (*BufPane).CursorStart, "CursorEnd": (*BufPane).CursorEnd, "SelectToStart": (*BufPane).SelectToStart, "SelectToEnd": (*BufPane).SelectToEnd, "SelectUp": (*BufPane).SelectUp, "SelectDown": (*BufPane).SelectDown, "SelectLeft": (*BufPane).SelectLeft, "SelectRight": (*BufPane).SelectRight, "WordRight": (*BufPane).WordRight, "WordLeft": (*BufPane).WordLeft, "SelectWordRight": (*BufPane).SelectWordRight, "SelectWordLeft": (*BufPane).SelectWordLeft, "DeleteWordRight": (*BufPane).DeleteWordRight, "DeleteWordLeft": (*BufPane).DeleteWordLeft, "SelectLine": (*BufPane).SelectLine, "SelectToStartOfLine": (*BufPane).SelectToStartOfLine, "SelectToStartOfText": (*BufPane).SelectToStartOfText, "SelectToStartOfTextToggle": (*BufPane).SelectToStartOfTextToggle, "SelectToEndOfLine": (*BufPane).SelectToEndOfLine, "ParagraphPrevious": (*BufPane).ParagraphPrevious, "ParagraphNext": (*BufPane).ParagraphNext, "InsertNewline": (*BufPane).InsertNewline, "Backspace": (*BufPane).Backspace, "Delete": (*BufPane).Delete, "InsertTab": (*BufPane).InsertTab, "Save": (*BufPane).Save, "SaveAll": (*BufPane).SaveAll, "SaveAs": (*BufPane).SaveAs, "Find": (*BufPane).Find, "FindLiteral": (*BufPane).FindLiteral, "FindNext": (*BufPane).FindNext, "FindPrevious": (*BufPane).FindPrevious, "Center": (*BufPane).Center, "Undo": (*BufPane).Undo, "Redo": (*BufPane).Redo, "Copy": (*BufPane).Copy, "CopyLine": (*BufPane).CopyLine, "Cut": (*BufPane).Cut, "CutLine": (*BufPane).CutLine, "DuplicateLine": (*BufPane).DuplicateLine, "DeleteLine": (*BufPane).DeleteLine, "MoveLinesUp": (*BufPane).MoveLinesUp, "MoveLinesDown": (*BufPane).MoveLinesDown, "IndentSelection": (*BufPane).IndentSelection, "OutdentSelection": (*BufPane).OutdentSelection, "Autocomplete": (*BufPane).Autocomplete, "CycleAutocompleteBack": (*BufPane).CycleAutocompleteBack, "OutdentLine": (*BufPane).OutdentLine, "IndentLine": (*BufPane).IndentLine, "Paste": (*BufPane).Paste, "PastePrimary": (*BufPane).PastePrimary, "SelectAll": (*BufPane).SelectAll, "OpenFile": (*BufPane).OpenFile, "Start": (*BufPane).Start, "End": (*BufPane).End, "PageUp": (*BufPane).PageUp, "PageDown": (*BufPane).PageDown, "SelectPageUp": (*BufPane).SelectPageUp, "SelectPageDown": (*BufPane).SelectPageDown, "HalfPageUp": (*BufPane).HalfPageUp, "HalfPageDown": (*BufPane).HalfPageDown, "StartOfText": (*BufPane).StartOfText, "StartOfTextToggle": (*BufPane).StartOfTextToggle, "StartOfLine": (*BufPane).StartOfLine, "EndOfLine": (*BufPane).EndOfLine, "ToggleHelp": (*BufPane).ToggleHelp, "ToggleKeyMenu": (*BufPane).ToggleKeyMenu, "ToggleDiffGutter": (*BufPane).ToggleDiffGutter, "ToggleRuler": (*BufPane).ToggleRuler, "ClearStatus": (*BufPane).ClearStatus, "ShellMode": (*BufPane).ShellMode, "CommandMode": (*BufPane).CommandMode, "ToggleOverwriteMode": (*BufPane).ToggleOverwriteMode, "Escape": (*BufPane).Escape, "Quit": (*BufPane).Quit, "QuitAll": (*BufPane).QuitAll, "ForceQuit": (*BufPane).ForceQuit, "AddTab": (*BufPane).AddTab, "PreviousTab": (*BufPane).PreviousTab, "NextTab": (*BufPane).NextTab, "NextSplit": (*BufPane).NextSplit, "PreviousSplit": (*BufPane).PreviousSplit, "Unsplit": (*BufPane).Unsplit, "VSplit": (*BufPane).VSplitAction, "HSplit": (*BufPane).HSplitAction, "ToggleMacro": (*BufPane).ToggleMacro, "PlayMacro": (*BufPane).PlayMacro, "Suspend": (*BufPane).Suspend, "ScrollUp": (*BufPane).ScrollUpAction, "ScrollDown": (*BufPane).ScrollDownAction, "SpawnMultiCursor": (*BufPane).SpawnMultiCursor, "SpawnMultiCursorUp": (*BufPane).SpawnMultiCursorUp, "SpawnMultiCursorDown": (*BufPane).SpawnMultiCursorDown, "SpawnMultiCursorSelect": (*BufPane).SpawnMultiCursorSelect, "RemoveMultiCursor": (*BufPane).RemoveMultiCursor, "RemoveAllMultiCursors": (*BufPane).RemoveAllMultiCursors, "SkipMultiCursor": (*BufPane).SkipMultiCursor, "JumpToMatchingBrace": (*BufPane).JumpToMatchingBrace, "JumpLine": (*BufPane).JumpLine, "Deselect": (*BufPane).Deselect, "ClearInfo": (*BufPane).ClearInfo, "None": (*BufPane).None, // This was changed to InsertNewline but I don't want to break backwards compatibility "InsertEnter": (*BufPane).InsertNewline, } // BufMouseActions contains the list of all possible mouse actions the bufhandler could execute var BufMouseActions = map[string]BufMouseAction{ "MousePress": (*BufPane).MousePress, "MouseMultiCursor": (*BufPane).MouseMultiCursor, } // MultiActions is a list of actions that should be executed multiple // times if there are multiple cursors (one per cursor) // Generally actions that modify global editor state like quitting or // saving should not be included in this list var MultiActions = map[string]bool{ "CursorUp": true, "CursorDown": true, "CursorPageUp": true, "CursorPageDown": true, "CursorLeft": true, "CursorRight": true, "CursorStart": true, "CursorEnd": true, "SelectToStart": true, "SelectToEnd": true, "SelectUp": true, "SelectDown": true, "SelectLeft": true, "SelectRight": true, "WordRight": true, "WordLeft": true, "SelectWordRight": true, "SelectWordLeft": true, "DeleteWordRight": true, "DeleteWordLeft": true, "SelectLine": true, "SelectToStartOfLine": true, "SelectToStartOfText": true, "SelectToStartOfTextToggle": true, "SelectToEndOfLine": true, "ParagraphPrevious": true, "ParagraphNext": true, "InsertNewline": true, "Backspace": true, "Delete": true, "InsertTab": true, "FindNext": true, "FindPrevious": true, "CopyLine": true, "Copy": true, "Cut": true, "CutLine": true, "DuplicateLine": true, "DeleteLine": true, "MoveLinesUp": true, "MoveLinesDown": true, "IndentSelection": true, "OutdentSelection": true, "OutdentLine": true, "IndentLine": true, "Paste": true, "PastePrimary": true, "SelectPageUp": true, "SelectPageDown": true, "StartOfLine": true, "StartOfText": true, "StartOfTextToggle": true, "EndOfLine": true, "JumpToMatchingBrace": true, } micro-2.0.9/internal/action/command.go000066400000000000000000000561141405030104300176660ustar00rootroot00000000000000package action import ( "bytes" "errors" "fmt" "os" "os/exec" "path/filepath" "regexp" "strconv" "strings" shellquote "github.com/kballard/go-shellquote" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/clipboard" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/shell" "github.com/zyedidia/micro/v2/internal/util" ) // A Command contains information about how to execute a command // It has the action for that command as well as a completer function type Command struct { action func(*BufPane, []string) completer buffer.Completer } var commands map[string]Command func InitCommands() { commands = map[string]Command{ "set": {(*BufPane).SetCmd, OptionValueComplete}, "reset": {(*BufPane).ResetCmd, OptionValueComplete}, "setlocal": {(*BufPane).SetLocalCmd, OptionValueComplete}, "show": {(*BufPane).ShowCmd, OptionComplete}, "showkey": {(*BufPane).ShowKeyCmd, nil}, "run": {(*BufPane).RunCmd, nil}, "bind": {(*BufPane).BindCmd, nil}, "unbind": {(*BufPane).UnbindCmd, nil}, "quit": {(*BufPane).QuitCmd, nil}, "goto": {(*BufPane).GotoCmd, nil}, "save": {(*BufPane).SaveCmd, nil}, "replace": {(*BufPane).ReplaceCmd, nil}, "replaceall": {(*BufPane).ReplaceAllCmd, nil}, "vsplit": {(*BufPane).VSplitCmd, buffer.FileComplete}, "hsplit": {(*BufPane).HSplitCmd, buffer.FileComplete}, "tab": {(*BufPane).NewTabCmd, buffer.FileComplete}, "help": {(*BufPane).HelpCmd, HelpComplete}, "eval": {(*BufPane).EvalCmd, nil}, "log": {(*BufPane).ToggleLogCmd, nil}, "plugin": {(*BufPane).PluginCmd, PluginComplete}, "reload": {(*BufPane).ReloadCmd, nil}, "reopen": {(*BufPane).ReopenCmd, nil}, "cd": {(*BufPane).CdCmd, buffer.FileComplete}, "pwd": {(*BufPane).PwdCmd, nil}, "open": {(*BufPane).OpenCmd, buffer.FileComplete}, "tabmove": {(*BufPane).TabMoveCmd, nil}, "tabswitch": {(*BufPane).TabSwitchCmd, nil}, "term": {(*BufPane).TermCmd, nil}, "memusage": {(*BufPane).MemUsageCmd, nil}, "retab": {(*BufPane).RetabCmd, nil}, "raw": {(*BufPane).RawCmd, nil}, "textfilter": {(*BufPane).TextFilterCmd, nil}, } } // MakeCommand is a function to easily create new commands // This can be called by plugins in Lua so that plugins can define their own commands func MakeCommand(name string, action func(bp *BufPane, args []string), completer buffer.Completer) { if action != nil { commands[name] = Command{action, completer} } } // CommandEditAction returns a bindable function that opens a prompt with // the given string and executes the command when the user presses // enter func CommandEditAction(prompt string) BufKeyAction { return func(h *BufPane) bool { InfoBar.Prompt("> ", prompt, "Command", nil, func(resp string, canceled bool) { if !canceled { MainTab().CurPane().HandleCommand(resp) } }) return false } } // CommandAction returns a bindable function which executes the // given command func CommandAction(cmd string) BufKeyAction { return func(h *BufPane) bool { MainTab().CurPane().HandleCommand(cmd) return false } } var PluginCmds = []string{"install", "remove", "update", "available", "list", "search"} // PluginCmd installs, removes, updates, lists, or searches for given plugins func (h *BufPane) PluginCmd(args []string) { if len(args) < 1 { InfoBar.Error("Not enough arguments") return } if h.Buf.Type != buffer.BTLog { h.OpenLogBuf() } config.PluginCommand(buffer.LogBuf, args[0], args[1:]) } // RetabCmd changes all spaces to tabs or all tabs to spaces // depending on the user's settings func (h *BufPane) RetabCmd(args []string) { h.Buf.Retab() } // RawCmd opens a new raw view which displays the escape sequences micro // is receiving in real-time func (h *BufPane) RawCmd(args []string) { width, height := screen.Screen.Size() iOffset := config.GetInfoBarOffset() tp := NewTabFromPane(0, 0, width, height-iOffset, NewRawPane(nil)) Tabs.AddTab(tp) Tabs.SetActive(len(Tabs.List) - 1) } // TextFilterCmd filters the selection through the command. // Selection goes to the command input. // On successful run command output replaces the current selection. func (h *BufPane) TextFilterCmd(args []string) { if len(args) == 0 { InfoBar.Error("usage: textfilter arguments") return } sel := h.Cursor.GetSelection() if len(sel) == 0 { h.Cursor.SelectWord() sel = h.Cursor.GetSelection() } var bout, berr bytes.Buffer cmd := exec.Command(args[0], args[1:]...) cmd.Stdin = strings.NewReader(string(sel)) cmd.Stderr = &berr cmd.Stdout = &bout err := cmd.Run() if err != nil { InfoBar.Error(err.Error() + " " + berr.String()) return } h.Cursor.DeleteSelection() h.Buf.Insert(h.Cursor.Loc, bout.String()) } // TabMoveCmd moves the current tab to a given index (starts at 1). The // displaced tabs are moved up. func (h *BufPane) TabMoveCmd(args []string) { if len(args) <= 0 { InfoBar.Error("Not enough arguments: provide an index, starting at 1") return } if len(args[0]) <= 0 { InfoBar.Error("Invalid argument: empty string") return } num, err := strconv.Atoi(args[0]) if err != nil { InfoBar.Error("Invalid argument: ", err) return } // Preserve sign for relative move, if one exists var shiftDirection byte if strings.Contains("-+", string([]byte{args[0][0]})) { shiftDirection = args[0][0] } // Relative positions -> absolute positions idxFrom := Tabs.Active() idxTo := 0 offset := util.Abs(num) if shiftDirection == '-' { idxTo = idxFrom - offset } else if shiftDirection == '+' { idxTo = idxFrom + offset } else { idxTo = offset - 1 } // Restrain position to within the valid range idxTo = util.Clamp(idxTo, 0, len(Tabs.List)-1) activeTab := Tabs.List[idxFrom] Tabs.RemoveTab(activeTab.ID()) Tabs.List = append(Tabs.List, nil) copy(Tabs.List[idxTo+1:], Tabs.List[idxTo:]) Tabs.List[idxTo] = activeTab Tabs.UpdateNames() Tabs.SetActive(idxTo) // InfoBar.Message(fmt.Sprintf("Moved tab from slot %d to %d", idxFrom+1, idxTo+1)) } // TabSwitchCmd switches to a given tab either by name or by number func (h *BufPane) TabSwitchCmd(args []string) { if len(args) > 0 { num, err := strconv.Atoi(args[0]) if err != nil { // Check for tab with this name found := false for i, t := range Tabs.List { if t.Panes[t.active].Name() == args[0] { Tabs.SetActive(i) found = true } } if !found { InfoBar.Error("Could not find tab: ", err) } } else { num-- if num >= 0 && num < len(Tabs.List) { Tabs.SetActive(num) } else { InfoBar.Error("Invalid tab index") } } } } // CdCmd changes the current working directory func (h *BufPane) CdCmd(args []string) { if len(args) > 0 { path, err := util.ReplaceHome(args[0]) if err != nil { InfoBar.Error(err) return } err = os.Chdir(path) if err != nil { InfoBar.Error(err) return } wd, _ := os.Getwd() for _, b := range buffer.OpenBuffers { if len(b.Path) > 0 { b.Path, _ = util.MakeRelative(b.AbsPath, wd) if p, _ := filepath.Abs(b.Path); !strings.Contains(p, wd) { b.Path = b.AbsPath } } } } } // MemUsageCmd prints micro's memory usage // Alloc shows how many bytes are currently in use // Sys shows how many bytes have been requested from the operating system // NumGC shows how many times the GC has been run // Note that Go commonly reserves more memory from the OS than is currently in-use/required // Additionally, even if Go returns memory to the OS, the OS does not always claim it because // there may be plenty of memory to spare func (h *BufPane) MemUsageCmd(args []string) { InfoBar.Message(util.GetMemStats()) } // PwdCmd prints the current working directory func (h *BufPane) PwdCmd(args []string) { wd, err := os.Getwd() if err != nil { InfoBar.Message(err.Error()) } else { InfoBar.Message(wd) } } // OpenCmd opens a new buffer with a given filename func (h *BufPane) OpenCmd(args []string) { if len(args) > 0 { filename := args[0] // the filename might or might not be quoted, so unquote first then join the strings. args, err := shellquote.Split(filename) if err != nil { InfoBar.Error("Error parsing args ", err) return } if len(args) == 0 { return } filename = strings.Join(args, " ") open := func() { b, err := buffer.NewBufferFromFile(filename, buffer.BTDefault) if err != nil { InfoBar.Error(err) return } h.OpenBuffer(b) } if h.Buf.Modified() { InfoBar.YNPrompt("Save changes to "+h.Buf.GetName()+" before closing? (y,n,esc)", func(yes, canceled bool) { if !canceled && !yes { open() } else if !canceled && yes { h.Save() open() } }) } else { open() } } else { InfoBar.Error("No filename") } } // ToggleLogCmd toggles the log view func (h *BufPane) ToggleLogCmd(args []string) { if h.Buf.Type != buffer.BTLog { h.OpenLogBuf() } else { h.Quit() } } // ReloadCmd reloads all files (syntax files, colorschemes...) func (h *BufPane) ReloadCmd(args []string) { ReloadConfig() } func ReloadConfig() { config.InitRuntimeFiles() err := config.ReadSettings() if err != nil { screen.TermMessage(err) } err = config.InitGlobalSettings() if err != nil { screen.TermMessage(err) } InitBindings() InitCommands() err = config.InitColorscheme() if err != nil { screen.TermMessage(err) } for _, b := range buffer.OpenBuffers { b.UpdateRules() } } // ReopenCmd reopens the buffer (reload from disk) func (h *BufPane) ReopenCmd(args []string) { if h.Buf.Modified() { InfoBar.YNPrompt("Save file before reopen?", func(yes, canceled bool) { if !canceled && yes { h.Save() h.Buf.ReOpen() } else if !canceled { h.Buf.ReOpen() } }) } else { h.Buf.ReOpen() } } func (h *BufPane) openHelp(page string) error { if data, err := config.FindRuntimeFile(config.RTHelp, page).Data(); err != nil { return errors.New(fmt.Sprint("Unable to load help text", page, "\n", err)) } else { helpBuffer := buffer.NewBufferFromString(string(data), page+".md", buffer.BTHelp) helpBuffer.SetName("Help " + page) if h.Buf.Type == buffer.BTHelp { h.OpenBuffer(helpBuffer) } else { h.HSplitBuf(helpBuffer) } } return nil } // HelpCmd tries to open the given help page in a horizontal split func (h *BufPane) HelpCmd(args []string) { if len(args) < 1 { // Open the default help if the user just typed "> help" h.openHelp("help") } else { if config.FindRuntimeFile(config.RTHelp, args[0]) != nil { err := h.openHelp(args[0]) if err != nil { InfoBar.Error(err) } } else { InfoBar.Error("Sorry, no help for ", args[0]) } } } // VSplitCmd opens a vertical split with file given in the first argument // If no file is given, it opens an empty buffer in a new split func (h *BufPane) VSplitCmd(args []string) { if len(args) == 0 { // Open an empty vertical split h.VSplitAction() return } buf, err := buffer.NewBufferFromFile(args[0], buffer.BTDefault) if err != nil { InfoBar.Error(err) return } h.VSplitBuf(buf) } // HSplitCmd opens a horizontal split with file given in the first argument // If no file is given, it opens an empty buffer in a new split func (h *BufPane) HSplitCmd(args []string) { if len(args) == 0 { // Open an empty horizontal split h.HSplitAction() return } buf, err := buffer.NewBufferFromFile(args[0], buffer.BTDefault) if err != nil { InfoBar.Error(err) return } h.HSplitBuf(buf) } // EvalCmd evaluates a lua expression func (h *BufPane) EvalCmd(args []string) { InfoBar.Error("Eval unsupported") } // NewTabCmd opens the given file in a new tab func (h *BufPane) NewTabCmd(args []string) { width, height := screen.Screen.Size() iOffset := config.GetInfoBarOffset() if len(args) > 0 { for _, a := range args { b, err := buffer.NewBufferFromFile(a, buffer.BTDefault) if err != nil { InfoBar.Error(err) return } tp := NewTabFromBuffer(0, 0, width, height-1-iOffset, b) Tabs.AddTab(tp) Tabs.SetActive(len(Tabs.List) - 1) } } else { b := buffer.NewBufferFromString("", "", buffer.BTDefault) tp := NewTabFromBuffer(0, 0, width, height-iOffset, b) Tabs.AddTab(tp) Tabs.SetActive(len(Tabs.List) - 1) } } func SetGlobalOptionNative(option string, nativeValue interface{}) error { local := false for _, s := range config.LocalSettings { if s == option { local = true break } } if !local { config.GlobalSettings[option] = nativeValue config.ModifiedSettings[option] = true if option == "colorscheme" { // LoadSyntaxFiles() config.InitColorscheme() for _, b := range buffer.OpenBuffers { b.UpdateRules() } } else if option == "infobar" || option == "keymenu" { Tabs.Resize() } else if option == "mouse" { if !nativeValue.(bool) { screen.Screen.DisableMouse() } else { screen.Screen.EnableMouse() } } else if option == "autosave" { if nativeValue.(float64) > 0 { config.SetAutoTime(int(nativeValue.(float64))) config.StartAutoSave() } else { config.SetAutoTime(0) } } else if option == "paste" { screen.Screen.SetPaste(nativeValue.(bool)) } else if option == "clipboard" { m := clipboard.SetMethod(nativeValue.(string)) err := clipboard.Initialize(m) if err != nil { return err } } else { for _, pl := range config.Plugins { if option == pl.Name { if nativeValue.(bool) && !pl.Loaded { pl.Load() _, err := pl.Call("init") if err != nil && err != config.ErrNoSuchFunction { screen.TermMessage(err) } } else if !nativeValue.(bool) && pl.Loaded { _, err := pl.Call("deinit") if err != nil && err != config.ErrNoSuchFunction { screen.TermMessage(err) } } } } } } for _, b := range buffer.OpenBuffers { b.SetOptionNative(option, nativeValue) } return config.WriteSettings(filepath.Join(config.ConfigDir, "settings.json")) } func SetGlobalOption(option, value string) error { if _, ok := config.GlobalSettings[option]; !ok { return config.ErrInvalidOption } nativeValue, err := config.GetNativeValue(option, config.GlobalSettings[option], value) if err != nil { return err } return SetGlobalOptionNative(option, nativeValue) } // ResetCmd resets a setting to its default value func (h *BufPane) ResetCmd(args []string) { if len(args) < 1 { InfoBar.Error("Not enough arguments") return } option := args[0] defaultGlobals := config.DefaultGlobalSettings() defaultLocals := config.DefaultCommonSettings() if _, ok := defaultGlobals[option]; ok { SetGlobalOptionNative(option, defaultGlobals[option]) return } if _, ok := defaultLocals[option]; ok { h.Buf.SetOptionNative(option, defaultLocals[option]) return } InfoBar.Error(config.ErrInvalidOption) } // SetCmd sets an option func (h *BufPane) SetCmd(args []string) { if len(args) < 2 { InfoBar.Error("Not enough arguments") return } option := args[0] value := args[1] err := SetGlobalOption(option, value) if err == config.ErrInvalidOption { err := h.Buf.SetOption(option, value) if err != nil { InfoBar.Error(err) } } else if err != nil { InfoBar.Error(err) } } // SetLocalCmd sets an option local to the buffer func (h *BufPane) SetLocalCmd(args []string) { if len(args) < 2 { InfoBar.Error("Not enough arguments") return } option := args[0] value := args[1] err := h.Buf.SetOption(option, value) if err != nil { InfoBar.Error(err) } } // ShowCmd shows the value of the given option func (h *BufPane) ShowCmd(args []string) { if len(args) < 1 { InfoBar.Error("Please provide an option to show") return } var option interface{} if opt, ok := h.Buf.Settings[args[0]]; ok { option = opt } else if opt, ok := config.GlobalSettings[args[0]]; ok { option = opt } if option == nil { InfoBar.Error(args[0], " is not a valid option") return } InfoBar.Message(option) } // ShowKeyCmd displays the action that a key is bound to func (h *BufPane) ShowKeyCmd(args []string) { if len(args) < 1 { InfoBar.Error("Please provide a key to show") return } event, err := findEvent(args[0]) if err != nil { InfoBar.Error(err) return } if action, ok := config.Bindings["buffer"][event.Name()]; ok { InfoBar.Message(action) } else { InfoBar.Message(args[0], " has no binding") } } // BindCmd creates a new keybinding func (h *BufPane) BindCmd(args []string) { if len(args) < 2 { InfoBar.Error("Not enough arguments") return } _, err := TryBindKey(args[0], args[1], true) if err != nil { InfoBar.Error(err) } } // UnbindCmd binds a key to its default action func (h *BufPane) UnbindCmd(args []string) { if len(args) < 1 { InfoBar.Error("Not enough arguments") return } err := UnbindKey(args[0]) if err != nil { InfoBar.Error(err) } } // RunCmd runs a shell command in the background func (h *BufPane) RunCmd(args []string) { runf, err := shell.RunBackgroundShell(shellquote.Join(args...)) if err != nil { InfoBar.Error(err) } else { go func() { InfoBar.Message(runf()) screen.Redraw() }() } } // QuitCmd closes the main view func (h *BufPane) QuitCmd(args []string) { h.Quit() } // GotoCmd is a command that will send the cursor to a certain // position in the buffer // For example: `goto line`, or `goto line:col` func (h *BufPane) GotoCmd(args []string) { if len(args) <= 0 { InfoBar.Error("Not enough arguments") } else { h.RemoveAllMultiCursors() if strings.Contains(args[0], ":") { parts := strings.SplitN(args[0], ":", 2) line, err := strconv.Atoi(parts[0]) if err != nil { InfoBar.Error(err) return } col, err := strconv.Atoi(parts[1]) if err != nil { InfoBar.Error(err) return } if line < 0 { line = h.Buf.LinesNum() + 1 + line } line = util.Clamp(line-1, 0, h.Buf.LinesNum()-1) col = util.Clamp(col-1, 0, util.CharacterCount(h.Buf.LineBytes(line))) h.Cursor.GotoLoc(buffer.Loc{col, line}) } else { line, err := strconv.Atoi(args[0]) if err != nil { InfoBar.Error(err) return } if line < 0 { line = h.Buf.LinesNum() + 1 + line } line = util.Clamp(line-1, 0, h.Buf.LinesNum()-1) h.Cursor.GotoLoc(buffer.Loc{0, line}) } h.Relocate() } } // SaveCmd saves the buffer optionally with an argument file name func (h *BufPane) SaveCmd(args []string) { if len(args) == 0 { h.Save() } else { h.Buf.SaveAs(args[0]) } } // ReplaceCmd runs search and replace func (h *BufPane) ReplaceCmd(args []string) { if len(args) < 2 || len(args) > 4 { // We need to find both a search and replace expression InfoBar.Error("Invalid replace statement: " + strings.Join(args, " ")) return } all := false noRegex := false foundSearch := false foundReplace := false var search string var replaceStr string for _, arg := range args { switch arg { case "-a": all = true case "-l": noRegex = true default: if !foundSearch { foundSearch = true search = arg } else if !foundReplace { foundReplace = true replaceStr = arg } else { InfoBar.Error("Invalid flag: " + arg) return } } } if noRegex { search = regexp.QuoteMeta(search) } replace := []byte(replaceStr) var regex *regexp.Regexp var err error if h.Buf.Settings["ignorecase"].(bool) { regex, err = regexp.Compile("(?im)" + search) } else { regex, err = regexp.Compile("(?m)" + search) } if err != nil { // There was an error with the user's regex InfoBar.Error(err) return } nreplaced := 0 start := h.Buf.Start() end := h.Buf.End() selection := h.Cursor.HasSelection() if selection { start = h.Cursor.CurSelection[0] end = h.Cursor.CurSelection[1] } if all { nreplaced, _ = h.Buf.ReplaceRegex(start, end, regex, replace) } else { inRange := func(l buffer.Loc) bool { return l.GreaterEqual(start) && l.LessEqual(end) } searchLoc := h.Cursor.Loc var doReplacement func() doReplacement = func() { locs, found, err := h.Buf.FindNext(search, start, end, searchLoc, true, true) if err != nil { InfoBar.Error(err) return } if !found || !inRange(locs[0]) || !inRange(locs[1]) { h.Cursor.ResetSelection() h.Buf.RelocateCursors() return } h.Cursor.SetSelectionStart(locs[0]) h.Cursor.SetSelectionEnd(locs[1]) h.Cursor.GotoLoc(locs[0]) h.Relocate() InfoBar.YNPrompt("Perform replacement (y,n,esc)", func(yes, canceled bool) { if !canceled && yes { _, nrunes := h.Buf.ReplaceRegex(locs[0], locs[1], regex, replace) searchLoc = locs[0] searchLoc.X += nrunes + locs[0].Diff(locs[1], h.Buf) if end.Y == locs[1].Y { end = end.Move(nrunes, h.Buf) } h.Cursor.Loc = searchLoc nreplaced++ } else if !canceled && !yes { searchLoc = locs[0] searchLoc.X += util.CharacterCount(replace) } else if canceled { h.Cursor.ResetSelection() h.Buf.RelocateCursors() return } doReplacement() }) } doReplacement() } h.Buf.RelocateCursors() h.Relocate() var s string if nreplaced > 1 { s = fmt.Sprintf("Replaced %d occurrences of %s", nreplaced, search) } else if nreplaced == 1 { s = fmt.Sprintf("Replaced 1 occurrence of %s", search) } else { s = fmt.Sprintf("Nothing matched %s", search) } if selection { s += " in selection" } InfoBar.Message(s) } // ReplaceAllCmd replaces search term all at once func (h *BufPane) ReplaceAllCmd(args []string) { // aliased to Replace command h.ReplaceCmd(append(args, "-a")) } // TermCmd opens a terminal in the current view func (h *BufPane) TermCmd(args []string) { ps := h.tab.Panes if !TermEmuSupported { InfoBar.Error("Terminal emulator not supported on this system") return } if len(args) == 0 { sh := os.Getenv("SHELL") if sh == "" { InfoBar.Error("Shell environment not found") return } args = []string{sh} } term := func(i int, newtab bool) { t := new(shell.Terminal) err := t.Start(args, false, true, nil, nil) if err != nil { InfoBar.Error(err) return } id := h.ID() if newtab { h.AddTab() i = 0 id = MainTab().Panes[0].ID() } else { MainTab().Panes[i].Close() } v := h.GetView() tp, err := NewTermPane(v.X, v.Y, v.Width, v.Height, t, id, MainTab()) if err != nil { InfoBar.Error(err) return } MainTab().Panes[i] = tp MainTab().SetActive(i) } // If there is only one open file we make a new tab instead of overwriting it newtab := len(MainTab().Panes) == 1 && len(Tabs.List) == 1 if newtab { term(0, true) return } for i, p := range ps { if p.ID() == h.ID() { if h.Buf.Modified() { InfoBar.YNPrompt("Save changes to "+h.Buf.GetName()+" before closing? (y,n,esc)", func(yes, canceled bool) { if !canceled && !yes { term(i, false) } else if !canceled && yes { h.Save() term(i, false) } }) } else { term(i, false) } } } } // HandleCommand handles input from the user func (h *BufPane) HandleCommand(input string) { args, err := shellquote.Split(input) if err != nil { InfoBar.Error("Error parsing args ", err) return } if len(args) == 0 { return } inputCmd := args[0] if _, ok := commands[inputCmd]; !ok { InfoBar.Error("Unknown command ", inputCmd) } else { WriteLog("> " + input + "\n") commands[inputCmd].action(h, args[1:]) WriteLog("\n") } } micro-2.0.9/internal/action/defaults.go000066400000000000000000000007111405030104300200470ustar00rootroot00000000000000package action var termdefaults = map[string]string{ "": "Exit", "": "CommandMode", "": "NextSplit", } // DefaultBindings returns a map containing micro's default keybindings func DefaultBindings(pane string) map[string]string { switch pane { case "command": return infodefaults case "buffer": return bufdefaults case "terminal": return termdefaults default: return map[string]string{} } } micro-2.0.9/internal/action/defaults_darwin.go000066400000000000000000000127521405030104300214230ustar00rootroot00000000000000package action var bufdefaults = map[string]string{ "Up": "CursorUp", "Down": "CursorDown", "Right": "CursorRight", "Left": "CursorLeft", "ShiftUp": "SelectUp", "ShiftDown": "SelectDown", "ShiftLeft": "SelectLeft", "ShiftRight": "SelectRight", "AltLeft": "WordLeft", "AltRight": "WordRight", "AltUp": "MoveLinesUp", "AltDown": "MoveLinesDown", "AltShiftRight": "SelectWordRight", "AltShiftLeft": "SelectWordLeft", "CtrlLeft": "StartOfTextToggle", "CtrlRight": "EndOfLine", "CtrlShiftLeft": "SelectToStartOfTextToggle", "ShiftHome": "SelectToStartOfTextToggle", "CtrlShiftRight": "SelectToEndOfLine", "ShiftEnd": "SelectToEndOfLine", "CtrlUp": "CursorStart", "CtrlDown": "CursorEnd", "CtrlShiftUp": "SelectToStart", "CtrlShiftDown": "SelectToEnd", "Alt-{": "ParagraphPrevious", "Alt-}": "ParagraphNext", "Enter": "InsertNewline", "CtrlH": "Backspace", "Backspace": "Backspace", "OldBackspace": "Backspace", "Alt-CtrlH": "DeleteWordLeft", "Alt-Backspace": "DeleteWordLeft", "Tab": "Autocomplete|IndentSelection|InsertTab", "Backtab": "CycleAutocompleteBack|OutdentSelection|OutdentLine", "Ctrl-o": "OpenFile", "Ctrl-s": "Save", "Ctrl-f": "Find", "Ctrl-n": "FindNext", "Ctrl-p": "FindPrevious", "Ctrl-z": "Undo", "Ctrl-y": "Redo", "Ctrl-c": "CopyLine|Copy", "Ctrl-x": "Cut", "Ctrl-k": "CutLine", "Ctrl-d": "DuplicateLine", "Ctrl-v": "Paste", "Ctrl-a": "SelectAll", "Ctrl-t": "AddTab", "Alt-,": "PreviousTab", "Alt-.": "NextTab", "Home": "StartOfTextToggle", "End": "EndOfLine", "CtrlHome": "CursorStart", "CtrlEnd": "CursorEnd", "PageUp": "CursorPageUp", "PageDown": "CursorPageDown", "CtrlPageUp": "PreviousTab", "CtrlPageDown": "NextTab", "Ctrl-g": "ToggleHelp", "Alt-g": "ToggleKeyMenu", "Ctrl-r": "ToggleRuler", "Ctrl-l": "command-edit:goto ", "Delete": "Delete", "Ctrl-b": "ShellMode", "Ctrl-q": "Quit", "Ctrl-e": "CommandMode", "Ctrl-w": "NextSplit", "Ctrl-u": "ToggleMacro", "Ctrl-j": "PlayMacro", "Insert": "ToggleOverwriteMode", // Emacs-style keybindings "Alt-f": "WordRight", "Alt-b": "WordLeft", "Alt-a": "StartOfText", "Alt-e": "EndOfLine", // "Alt-p": "CursorUp", // "Alt-n": "CursorDown", // Integration with file managers "F2": "Save", "F3": "Find", "F4": "Quit", "F7": "Find", "F10": "Quit", "Esc": "Escape,Deselect,ClearInfo,RemoveAllMultiCursors", // Mouse bindings "MouseWheelUp": "ScrollUp", "MouseWheelDown": "ScrollDown", "MouseLeft": "MousePress", "MouseMiddle": "PastePrimary", "Ctrl-MouseLeft": "MouseMultiCursor", "Alt-n": "SpawnMultiCursor", "AltShiftUp": "SpawnMultiCursorUp", "AltShiftDown": "SpawnMultiCursorDown", "Alt-m": "SpawnMultiCursorSelect", "Alt-p": "RemoveMultiCursor", "Alt-c": "RemoveAllMultiCursors", "Alt-x": "SkipMultiCursor", } var infodefaults = map[string]string{ "Up": "HistoryUp", "Down": "HistoryDown", "Right": "CursorRight", "Left": "CursorLeft", "ShiftUp": "SelectUp", "ShiftDown": "SelectDown", "ShiftLeft": "SelectLeft", "ShiftRight": "SelectRight", "AltLeft": "WordLeft", "AltRight": "WordRight", "AltUp": "CursorStart", "AltDown": "CursorEnd", "AltShiftRight": "SelectWordRight", "AltShiftLeft": "SelectWordLeft", "CtrlLeft": "StartOfTextToggle", "CtrlRight": "EndOfLine", "CtrlShiftLeft": "SelectToStartOfTextToggle", "ShiftHome": "SelectToStartOfTextToggle", "CtrlShiftRight": "SelectToEndOfLine", "ShiftEnd": "SelectToEndOfLine", "CtrlUp": "CursorStart", "CtrlDown": "CursorEnd", "CtrlShiftUp": "SelectToStart", "CtrlShiftDown": "SelectToEnd", "Enter": "ExecuteCommand", "CtrlH": "Backspace", "Backspace": "Backspace", "OldBackspace": "Backspace", "Alt-CtrlH": "DeleteWordLeft", "Alt-Backspace": "DeleteWordLeft", "Tab": "CommandComplete", "Backtab": "CycleAutocompleteBack", "Ctrl-z": "Undo", "Ctrl-y": "Redo", "Ctrl-c": "CopyLine|Copy", "Ctrl-x": "Cut", "Ctrl-k": "CutLine", "Ctrl-v": "Paste", "Home": "StartOfTextToggle", "End": "EndOfLine", "CtrlHome": "CursorStart", "CtrlEnd": "CursorEnd", "Delete": "Delete", "Ctrl-q": "AbortCommand", "Ctrl-e": "EndOfLine", "Ctrl-a": "StartOfLine", "Ctrl-w": "DeleteWordLeft", "Insert": "ToggleOverwriteMode", "Ctrl-b": "WordLeft", "Ctrl-f": "WordRight", "Ctrl-d": "DeleteWordLeft", "Ctrl-m": "ExecuteCommand", "Ctrl-n": "HistoryDown", "Ctrl-p": "HistoryUp", "Ctrl-u": "SelectToStart", // Emacs-style keybindings "Alt-f": "WordRight", "Alt-b": "WordLeft", "Alt-a": "StartOfText", "Alt-e": "EndOfLine", // Integration with file managers "F10": "AbortCommand", "Esc": "AbortCommand", // Mouse bindings "MouseWheelUp": "HistoryUp", "MouseWheelDown": "HistoryDown", "MouseLeft": "MousePress", "MouseMiddle": "PastePrimary", } micro-2.0.9/internal/action/defaults_other.go000066400000000000000000000127751405030104300212650ustar00rootroot00000000000000// +build !darwin package action var bufdefaults = map[string]string{ "Up": "CursorUp", "Down": "CursorDown", "Right": "CursorRight", "Left": "CursorLeft", "ShiftUp": "SelectUp", "ShiftDown": "SelectDown", "ShiftLeft": "SelectLeft", "ShiftRight": "SelectRight", "CtrlLeft": "WordLeft", "CtrlRight": "WordRight", "AltUp": "MoveLinesUp", "AltDown": "MoveLinesDown", "CtrlShiftRight": "SelectWordRight", "CtrlShiftLeft": "SelectWordLeft", "AltLeft": "StartOfTextToggle", "AltRight": "EndOfLine", "AltShiftLeft": "SelectToStartOfTextToggle", "ShiftHome": "SelectToStartOfTextToggle", "AltShiftRight": "SelectToEndOfLine", "ShiftEnd": "SelectToEndOfLine", "CtrlUp": "CursorStart", "CtrlDown": "CursorEnd", "CtrlShiftUp": "SelectToStart", "CtrlShiftDown": "SelectToEnd", "Alt-{": "ParagraphPrevious", "Alt-}": "ParagraphNext", "Enter": "InsertNewline", "CtrlH": "Backspace", "Backspace": "Backspace", "OldBackspace": "Backspace", "Alt-CtrlH": "DeleteWordLeft", "Alt-Backspace": "DeleteWordLeft", "Tab": "Autocomplete|IndentSelection|InsertTab", "Backtab": "CycleAutocompleteBack|OutdentSelection|OutdentLine", "Ctrl-o": "OpenFile", "Ctrl-s": "Save", "Ctrl-f": "Find", "Ctrl-n": "FindNext", "Ctrl-p": "FindPrevious", "Ctrl-z": "Undo", "Ctrl-y": "Redo", "Ctrl-c": "CopyLine|Copy", "Ctrl-x": "Cut", "Ctrl-k": "CutLine", "Ctrl-d": "DuplicateLine", "Ctrl-v": "Paste", "Ctrl-a": "SelectAll", "Ctrl-t": "AddTab", "Alt-,": "PreviousTab", "Alt-.": "NextTab", "Home": "StartOfTextToggle", "End": "EndOfLine", "CtrlHome": "CursorStart", "CtrlEnd": "CursorEnd", "PageUp": "CursorPageUp", "PageDown": "CursorPageDown", "CtrlPageUp": "PreviousTab", "CtrlPageDown": "NextTab", "Ctrl-g": "ToggleHelp", "Alt-g": "ToggleKeyMenu", "Ctrl-r": "ToggleRuler", "Ctrl-l": "command-edit:goto ", "Delete": "Delete", "Ctrl-b": "ShellMode", "Ctrl-q": "Quit", "Ctrl-e": "CommandMode", "Ctrl-w": "NextSplit", "Ctrl-u": "ToggleMacro", "Ctrl-j": "PlayMacro", "Insert": "ToggleOverwriteMode", // Emacs-style keybindings "Alt-f": "WordRight", "Alt-b": "WordLeft", "Alt-a": "StartOfText", "Alt-e": "EndOfLine", // "Alt-p": "CursorUp", // "Alt-n": "CursorDown", // Integration with file managers "F2": "Save", "F3": "Find", "F4": "Quit", "F7": "Find", "F10": "Quit", "Esc": "Escape,Deselect,ClearInfo,RemoveAllMultiCursors", // Mouse bindings "MouseWheelUp": "ScrollUp", "MouseWheelDown": "ScrollDown", "MouseLeft": "MousePress", "MouseMiddle": "PastePrimary", "Ctrl-MouseLeft": "MouseMultiCursor", "Alt-n": "SpawnMultiCursor", "Alt-m": "SpawnMultiCursorSelect", "AltShiftUp": "SpawnMultiCursorUp", "AltShiftDown": "SpawnMultiCursorDown", "Alt-p": "RemoveMultiCursor", "Alt-c": "RemoveAllMultiCursors", "Alt-x": "SkipMultiCursor", } var infodefaults = map[string]string{ "Up": "HistoryUp", "Down": "HistoryDown", "Right": "CursorRight", "Left": "CursorLeft", "ShiftUp": "SelectUp", "ShiftDown": "SelectDown", "ShiftLeft": "SelectLeft", "ShiftRight": "SelectRight", "AltLeft": "StartOfTextToggle", "AltRight": "EndOfLine", "AltUp": "CursorStart", "AltDown": "CursorEnd", "AltShiftRight": "SelectWordRight", "AltShiftLeft": "SelectWordLeft", "CtrlLeft": "WordLeft", "CtrlRight": "WordRight", "CtrlShiftLeft": "SelectToStartOfTextToggle", "ShiftHome": "SelectToStartOfTextToggle", "CtrlShiftRight": "SelectToEndOfLine", "ShiftEnd": "SelectToEndOfLine", "CtrlUp": "CursorStart", "CtrlDown": "CursorEnd", "CtrlShiftUp": "SelectToStart", "CtrlShiftDown": "SelectToEnd", "Enter": "ExecuteCommand", "CtrlH": "Backspace", "Backspace": "Backspace", "OldBackspace": "Backspace", "Alt-CtrlH": "DeleteWordLeft", "Alt-Backspace": "DeleteWordLeft", "Tab": "CommandComplete", "Backtab": "CycleAutocompleteBack", "Ctrl-z": "Undo", "Ctrl-y": "Redo", "Ctrl-c": "CopyLine|Copy", "Ctrl-x": "Cut", "Ctrl-k": "CutLine", "Ctrl-v": "Paste", "Home": "StartOfTextToggle", "End": "EndOfLine", "CtrlHome": "CursorStart", "CtrlEnd": "CursorEnd", "Delete": "Delete", "Ctrl-q": "AbortCommand", "Ctrl-e": "EndOfLine", "Ctrl-a": "StartOfLine", "Ctrl-w": "DeleteWordLeft", "Insert": "ToggleOverwriteMode", "Ctrl-b": "WordLeft", "Ctrl-f": "WordRight", "Ctrl-d": "DeleteWordLeft", "Ctrl-m": "ExecuteCommand", "Ctrl-n": "HistoryDown", "Ctrl-p": "HistoryUp", "Ctrl-u": "SelectToStart", // Emacs-style keybindings "Alt-f": "WordRight", "Alt-b": "WordLeft", "Alt-a": "StartOfText", "Alt-e": "EndOfLine", // Integration with file managers "F10": "AbortCommand", "Esc": "AbortCommand", // Mouse bindings "MouseWheelUp": "HistoryUp", "MouseWheelDown": "HistoryDown", "MouseLeft": "MousePress", "MouseMiddle": "PastePrimary", } micro-2.0.9/internal/action/events.go000066400000000000000000000063101405030104300175450ustar00rootroot00000000000000package action import ( "bytes" "errors" "fmt" "strings" "github.com/zyedidia/tcell/v2" ) type Event interface { Name() string } // RawEvent is simply an escape code // We allow users to directly bind escape codes // to get around some of a limitations of terminals type RawEvent struct { esc string } func (r RawEvent) Name() string { return r.esc } // KeyEvent is a key event containing a key code, // some possible modifiers (alt, ctrl, etc...) and // a rune if it was simply a character press // Note: to be compatible with tcell events, // for ctrl keys r=code type KeyEvent struct { code tcell.Key mod tcell.ModMask r rune any bool } func metaToAlt(mod tcell.ModMask) tcell.ModMask { if mod&tcell.ModMeta != 0 { mod &= ^tcell.ModMeta mod |= tcell.ModAlt } return mod } func (k KeyEvent) Name() string { if k.any { return "" } s := "" m := []string{} if k.mod&tcell.ModShift != 0 { m = append(m, "Shift") } if k.mod&tcell.ModAlt != 0 { m = append(m, "Alt") } if k.mod&tcell.ModMeta != 0 { m = append(m, "Meta") } if k.mod&tcell.ModCtrl != 0 { m = append(m, "Ctrl") } ok := false if s, ok = tcell.KeyNames[k.code]; !ok { if k.code == tcell.KeyRune { s = string(k.r) } else { s = fmt.Sprintf("Key[%d,%d]", k.code, int(k.r)) } } if len(m) != 0 { if k.mod&tcell.ModCtrl != 0 && strings.HasPrefix(s, "Ctrl-") { s = s[5:] if len(s) == 1 { s = strings.ToLower(s) } } return fmt.Sprintf("%s-%s", strings.Join(m, "-"), s) } return s } // A KeySequence defines a list of consecutive // events. All events in the sequence must be KeyEvents // or MouseEvents. type KeySequenceEvent struct { keys []Event } func (k KeySequenceEvent) Name() string { buf := bytes.Buffer{} for _, e := range k.keys { buf.WriteByte('<') buf.WriteString(e.Name()) buf.WriteByte('>') } return buf.String() } // MouseEvent is a mouse event with a mouse button and // any possible key modifiers type MouseEvent struct { btn tcell.ButtonMask mod tcell.ModMask } func (m MouseEvent) Name() string { mod := "" if m.mod&tcell.ModShift != 0 { mod = "Shift-" } if m.mod&tcell.ModAlt != 0 { mod = "Alt-" } if m.mod&tcell.ModMeta != 0 { mod = "Meta-" } if m.mod&tcell.ModCtrl != 0 { mod = "Ctrl-" } for k, v := range mouseEvents { if v == m.btn { return fmt.Sprintf("%s%s", mod, k) } } return "" } // ConstructEvent takes a tcell event and returns a micro // event. Note that tcell events can't express certain // micro events such as key sequences. This function is // mostly used for debugging/raw panes or constructing // intermediate micro events while parsing a sequence. func ConstructEvent(event tcell.Event) (Event, error) { switch e := event.(type) { case *tcell.EventKey: return KeyEvent{ code: e.Key(), mod: metaToAlt(e.Modifiers()), r: e.Rune(), }, nil case *tcell.EventRaw: return RawEvent{ esc: e.EscSeq(), }, nil case *tcell.EventMouse: return MouseEvent{ btn: e.Buttons(), mod: metaToAlt(e.Modifiers()), }, nil } return nil, errors.New("No micro event equivalent") } // A Handler will take a tcell event and execute it // appropriately type Handler interface { HandleEvent(tcell.Event) HandleCommand(string) } micro-2.0.9/internal/action/globals.go000066400000000000000000000014501405030104300176640ustar00rootroot00000000000000package action import "github.com/zyedidia/micro/v2/internal/buffer" var InfoBar *InfoPane var LogBufPane *BufPane // InitGlobals initializes the log buffer and the info bar func InitGlobals() { InfoBar = NewInfoBar() buffer.LogBuf = buffer.NewBufferFromString("", "Log", buffer.BTLog) } // GetInfoBar returns the infobar pane func GetInfoBar() *InfoPane { return InfoBar } // WriteLog writes a string to the log buffer func WriteLog(s string) { buffer.WriteLog(s) if LogBufPane != nil { LogBufPane.CursorEnd() } } // OpenLogBuf opens the log buffer from the current bufpane // If the current bufpane is a log buffer nothing happens, // otherwise the log buffer is opened in a horizontal split func (h *BufPane) OpenLogBuf() { LogBufPane = h.HSplitBuf(buffer.LogBuf) LogBufPane.CursorEnd() } micro-2.0.9/internal/action/infocomplete.go000066400000000000000000000167521405030104300207400ustar00rootroot00000000000000package action import ( "bytes" "sort" "strings" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/util" ) // This file is meant (for now) for autocompletion in command mode, not // while coding. This helps micro autocomplete commands and then filenames // for example with `vsplit filename`. // CommandComplete autocompletes commands func CommandComplete(b *buffer.Buffer) ([]string, []string) { c := b.GetActiveCursor() input, argstart := buffer.GetArg(b) var suggestions []string for cmd := range commands { if strings.HasPrefix(cmd, input) { suggestions = append(suggestions, cmd) } } sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { completions[i] = util.SliceEndStr(suggestions[i], c.X-argstart) } return completions, suggestions } // HelpComplete autocompletes help topics func HelpComplete(b *buffer.Buffer) ([]string, []string) { c := b.GetActiveCursor() input, argstart := buffer.GetArg(b) var suggestions []string for _, file := range config.ListRuntimeFiles(config.RTHelp) { topic := file.Name() if strings.HasPrefix(topic, input) { suggestions = append(suggestions, topic) } } sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { completions[i] = util.SliceEndStr(suggestions[i], c.X-argstart) } return completions, suggestions } // colorschemeComplete tab-completes names of colorschemes. // This is just a heper value for OptionValueComplete func colorschemeComplete(input string) (string, []string) { var suggestions []string files := config.ListRuntimeFiles(config.RTColorscheme) for _, f := range files { if strings.HasPrefix(f.Name(), input) { suggestions = append(suggestions, f.Name()) } } var chosen string if len(suggestions) == 1 { chosen = suggestions[0] } return chosen, suggestions } func contains(s []string, e string) bool { for _, a := range s { if a == e { return true } } return false } // OptionComplete autocompletes options func OptionComplete(b *buffer.Buffer) ([]string, []string) { c := b.GetActiveCursor() input, argstart := buffer.GetArg(b) var suggestions []string for option := range config.GlobalSettings { if strings.HasPrefix(option, input) { suggestions = append(suggestions, option) } } // for option := range localSettings { // if strings.HasPrefix(option, input) && !contains(suggestions, option) { // suggestions = append(suggestions, option) // } // } sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { completions[i] = util.SliceEndStr(suggestions[i], c.X-argstart) } return completions, suggestions } // OptionValueComplete completes values for various options func OptionValueComplete(b *buffer.Buffer) ([]string, []string) { c := b.GetActiveCursor() l := b.LineBytes(c.Y) l = util.SliceStart(l, c.X) input, argstart := buffer.GetArg(b) completeValue := false args := bytes.Split(l, []byte{' '}) if len(args) >= 2 { // localSettings := config.DefaultLocalSettings() for option := range config.GlobalSettings { if option == string(args[len(args)-2]) { completeValue = true break } } // for option := range localSettings { // if option == string(args[len(args)-2]) { // completeValue = true // break // } // } } if !completeValue { return OptionComplete(b) } inputOpt := string(args[len(args)-2]) inputOpt = strings.TrimSpace(inputOpt) var suggestions []string // localSettings := config.DefaultLocalSettings() var optionVal interface{} for k, option := range config.GlobalSettings { if k == inputOpt { optionVal = option } } // for k, option := range localSettings { // if k == inputOpt { // optionVal = option // } // } switch optionVal.(type) { case bool: if strings.HasPrefix("on", input) { suggestions = append(suggestions, "on") } else if strings.HasPrefix("true", input) { suggestions = append(suggestions, "true") } if strings.HasPrefix("off", input) { suggestions = append(suggestions, "off") } else if strings.HasPrefix("false", input) { suggestions = append(suggestions, "false") } case string: switch inputOpt { case "colorscheme": _, suggestions = colorschemeComplete(input) case "fileformat": if strings.HasPrefix("unix", input) { suggestions = append(suggestions, "unix") } if strings.HasPrefix("dos", input) { suggestions = append(suggestions, "dos") } case "sucmd": if strings.HasPrefix("sudo", input) { suggestions = append(suggestions, "sudo") } if strings.HasPrefix("doas", input) { suggestions = append(suggestions, "doas") } case "clipboard": if strings.HasPrefix("external", input) { suggestions = append(suggestions, "external") } if strings.HasPrefix("internal", input) { suggestions = append(suggestions, "internal") } if strings.HasPrefix("terminal", input) { suggestions = append(suggestions, "terminal") } } } sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { completions[i] = util.SliceEndStr(suggestions[i], c.X-argstart) } return completions, suggestions } // PluginCmdComplete autocompletes the plugin command func PluginCmdComplete(b *buffer.Buffer) ([]string, []string) { c := b.GetActiveCursor() input, argstart := buffer.GetArg(b) var suggestions []string for _, cmd := range PluginCmds { if strings.HasPrefix(cmd, input) { suggestions = append(suggestions, cmd) } } sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { completions[i] = util.SliceEndStr(suggestions[i], c.X-argstart) } return completions, suggestions } // PluginComplete completes values for the plugin command func PluginComplete(b *buffer.Buffer) ([]string, []string) { c := b.GetActiveCursor() l := b.LineBytes(c.Y) l = util.SliceStart(l, c.X) input, argstart := buffer.GetArg(b) completeValue := false args := bytes.Split(l, []byte{' '}) if len(args) >= 2 { for _, cmd := range PluginCmds { if cmd == string(args[len(args)-2]) { completeValue = true break } } } if !completeValue { return PluginCmdComplete(b) } var suggestions []string for _, pl := range config.Plugins { if strings.HasPrefix(pl.Name, input) { suggestions = append(suggestions, pl.Name) } } sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { completions[i] = util.SliceEndStr(suggestions[i], c.X-argstart) } return completions, suggestions } // PluginNameComplete completes with the names of loaded plugins // func PluginNameComplete(b *buffer.Buffer) ([]string, []string) { // c := b.GetActiveCursor() // input, argstart := buffer.GetArg(b) // // var suggestions []string // for _, pp := range config.GetAllPluginPackages(nil) { // if strings.HasPrefix(pp.Name, input) { // suggestions = append(suggestions, pp.Name) // } // } // // sort.Strings(suggestions) // completions := make([]string, len(suggestions)) // for i := range suggestions { // completions[i] = util.SliceEndStr(suggestions[i], c.X-argstart) // } // return completions, suggestions // } // // MakeCompletion registers a function from a plugin for autocomplete commands // func MakeCompletion(function string) Completion { // pluginCompletions = append(pluginCompletions, LuaFunctionComplete(function)) // return Completion(-len(pluginCompletions)) // } micro-2.0.9/internal/action/infopane.go000066400000000000000000000110021405030104300200320ustar00rootroot00000000000000package action import ( "bytes" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/display" "github.com/zyedidia/micro/v2/internal/info" "github.com/zyedidia/micro/v2/internal/util" "github.com/zyedidia/tcell/v2" ) type InfoKeyAction func(*InfoPane) var InfoBindings *KeyTree var InfoBufBindings *KeyTree func init() { InfoBindings = NewKeyTree() InfoBufBindings = NewKeyTree() } func InfoMapEvent(k Event, action string) { config.Bindings["command"][k.Name()] = action switch e := k.(type) { case KeyEvent, KeySequenceEvent, RawEvent: infoMapKey(e, action) case MouseEvent: infoMapMouse(e, action) } } func infoMapKey(k Event, action string) { if f, ok := InfoKeyActions[action]; ok { InfoBindings.RegisterKeyBinding(k, InfoKeyActionGeneral(f)) } else if f, ok := BufKeyActions[action]; ok { InfoBufBindings.RegisterKeyBinding(k, BufKeyActionGeneral(f)) } } func infoMapMouse(k MouseEvent, action string) { // TODO: map mouse if f, ok := BufMouseActions[action]; ok { InfoBufBindings.RegisterMouseBinding(k, BufMouseActionGeneral(f)) } else { infoMapKey(k, action) } } func InfoKeyActionGeneral(a InfoKeyAction) PaneKeyAction { return func(p Pane) bool { a(p.(*InfoPane)) return true } } type InfoPane struct { *BufPane *info.InfoBuf } func NewInfoPane(ib *info.InfoBuf, w display.BWindow, tab *Tab) *InfoPane { ip := new(InfoPane) ip.InfoBuf = ib ip.BufPane = NewBufPane(ib.Buffer, w, tab) ip.BufPane.bindings = InfoBufBindings return ip } func NewInfoBar() *InfoPane { ib := info.NewBuffer() w := display.NewInfoWindow(ib) return NewInfoPane(ib, w, nil) } func (h *InfoPane) Close() { h.InfoBuf.Close() h.BufPane.Close() } func (h *InfoPane) HandleEvent(event tcell.Event) { switch e := event.(type) { case *tcell.EventKey: ke := KeyEvent{ code: e.Key(), mod: metaToAlt(e.Modifiers()), r: e.Rune(), } done := h.DoKeyEvent(ke) hasYN := h.HasYN if e.Key() == tcell.KeyRune && hasYN { if e.Rune() == 'y' && hasYN { h.YNResp = true h.DonePrompt(false) } else if e.Rune() == 'n' && hasYN { h.YNResp = false h.DonePrompt(false) } } if e.Key() == tcell.KeyRune && !done && !hasYN { h.DoRuneInsert(e.Rune()) done = true } if done && h.HasPrompt && !hasYN { resp := string(h.LineBytes(0)) hist := h.History[h.PromptType] hist[h.HistoryNum] = resp if h.EventCallback != nil { h.EventCallback(resp) } } default: h.BufPane.HandleEvent(event) } } // DoKeyEvent executes a key event for the command bar, doing any overridden actions func (h *InfoPane) DoKeyEvent(e KeyEvent) bool { action, more := InfoBindings.NextEvent(e, nil) if action != nil && !more { action(h) InfoBindings.ResetEvents() return true } else if action == nil && !more { InfoBindings.ResetEvents() // return false //TODO:? } if !more { action, more = InfoBufBindings.NextEvent(e, nil) if action != nil && !more { done := action(h.BufPane) InfoBufBindings.ResetEvents() return done } else if action == nil && !more { InfoBufBindings.ResetEvents() } } return more } // HistoryUp cycles history up func (h *InfoPane) HistoryUp() { h.UpHistory(h.History[h.PromptType]) } // HistoryDown cycles history down func (h *InfoPane) HistoryDown() { h.DownHistory(h.History[h.PromptType]) } // Autocomplete begins autocompletion func (h *InfoPane) CommandComplete() { b := h.Buf if b.HasSuggestions { b.CycleAutocomplete(true) return } c := b.GetActiveCursor() l := b.LineBytes(0) l = util.SliceStart(l, c.X) args := bytes.Split(l, []byte{' '}) cmd := string(args[0]) if h.PromptType == "Command" { if len(args) == 1 { b.Autocomplete(CommandComplete) } else if action, ok := commands[cmd]; ok { if action.completer != nil { b.Autocomplete(action.completer) } } } else { // by default use filename autocompletion b.Autocomplete(buffer.FileComplete) } } // ExecuteCommand completes the prompt func (h *InfoPane) ExecuteCommand() { if !h.HasYN { h.DonePrompt(false) } } // AbortCommand cancels the prompt func (h *InfoPane) AbortCommand() { h.DonePrompt(true) } // InfoKeyActions contains the list of all possible key actions the infopane could execute var InfoKeyActions = map[string]InfoKeyAction{ "HistoryUp": (*InfoPane).HistoryUp, "HistoryDown": (*InfoPane).HistoryDown, "CommandComplete": (*InfoPane).CommandComplete, "ExecuteCommand": (*InfoPane).ExecuteCommand, "AbortCommand": (*InfoPane).AbortCommand, } micro-2.0.9/internal/action/keytree.go000066400000000000000000000152041405030104300177130ustar00rootroot00000000000000package action import ( "bytes" "github.com/zyedidia/tcell/v2" ) type PaneKeyAction func(Pane) bool type PaneMouseAction func(Pane, *tcell.EventMouse) bool type PaneKeyAnyAction func(Pane, []KeyEvent) bool // A KeyTreeNode stores a single node in the KeyTree (trie). The // children are stored as a map, and any node may store a list of // actions (the list will be nil if no actions correspond to a certain // node) type KeyTreeNode struct { children map[Event]*KeyTreeNode // Only one of these actions may be active in the current // mode, and only one will be returned. If multiple actions // are active, it is undefined which one will be the one // returned. actions []TreeAction } func NewKeyTreeNode() *KeyTreeNode { n := new(KeyTreeNode) n.children = make(map[Event]*KeyTreeNode) n.actions = []TreeAction{} return n } // A TreeAction stores an action, and a set of mode constraints for // the action to be active. type TreeAction struct { // only one of these can be non-nil action PaneKeyAction any PaneKeyAnyAction mouse PaneMouseAction modes []ModeConstraint } // A KeyTree is a data structure for storing keybindings. It maps // key events to actions, and maintains a set of currently enabled // modes, which affects the action that is returned for a key event. // The tree acts like a Trie for Events to handle sequence events. type KeyTree struct { root *KeyTreeNode modes map[string]bool cursor KeyTreeCursor } // A KeyTreeCursor keeps track of the current location within the // tree, and stores any information from previous events that may // be needed to execute the action (values of wildcard events or // mouse events) type KeyTreeCursor struct { node *KeyTreeNode recordedEvents []Event wildcards []KeyEvent mouseInfo *tcell.EventMouse } // MakeClosure uses the information stored in a key tree cursor to construct // a PaneKeyAction from a TreeAction (which may have a PaneKeyAction, PaneMouseAction, // or AnyAction) func (k *KeyTreeCursor) MakeClosure(a TreeAction) PaneKeyAction { if a.action != nil { return a.action } else if a.any != nil { return func(p Pane) bool { return a.any(p, k.wildcards) } } else if a.mouse != nil { return func(p Pane) bool { return a.mouse(p, k.mouseInfo) } } return nil } // NewKeyTree allocates and returns an empty key tree func NewKeyTree() *KeyTree { root := NewKeyTreeNode() tree := new(KeyTree) tree.root = root tree.modes = make(map[string]bool) tree.cursor = KeyTreeCursor{ node: root, wildcards: []KeyEvent{}, mouseInfo: nil, } return tree } // A ModeConstraint specifies that an action can only be executed // while a certain mode is enabled or disabled. type ModeConstraint struct { mode string disabled bool } // RegisterKeyBinding registers a PaneKeyAction with an Event. func (k *KeyTree) RegisterKeyBinding(e Event, a PaneKeyAction) { k.registerBinding(e, TreeAction{ action: a, any: nil, mouse: nil, modes: nil, }) } // RegisterKeyAnyBinding registers a PaneKeyAnyAction with an Event. // The event should contain an "any" event. func (k *KeyTree) RegisterKeyAnyBinding(e Event, a PaneKeyAnyAction) { k.registerBinding(e, TreeAction{ action: nil, any: a, mouse: nil, modes: nil, }) } // RegisterMouseBinding registers a PaneMouseAction with an Event. // The event should contain a mouse event. func (k *KeyTree) RegisterMouseBinding(e Event, a PaneMouseAction) { k.registerBinding(e, TreeAction{ action: nil, any: nil, mouse: a, modes: nil, }) } func (k *KeyTree) registerBinding(e Event, a TreeAction) { switch ev := e.(type) { case KeyEvent, MouseEvent, RawEvent: newNode, ok := k.root.children[e] if !ok { newNode = NewKeyTreeNode() k.root.children[e] = newNode } // newNode.actions = append(newNode.actions, a) newNode.actions = []TreeAction{a} case KeySequenceEvent: n := k.root for _, key := range ev.keys { newNode, ok := n.children[key] if !ok { newNode = NewKeyTreeNode() n.children[key] = newNode } n = newNode } // n.actions = append(n.actions, a) n.actions = []TreeAction{a} } } // NextEvent returns the action for the current sequence where e is the next // event. Even if the action was registered as a PaneKeyAnyAction or PaneMouseAction, // it will be returned as a PaneKeyAction closure where the appropriate arguments // have been provided. // If no action is associated with the given Event, or mode constraints are not // met for that action, nil is returned. // A boolean is returned to indicate if there is a conflict with this action. A // conflict occurs when there is an active action for this event but there are // bindings associated with further sequences starting with this event. The // calling function can decide what to do about the conflict (e.g. use a // timeout). func (k *KeyTree) NextEvent(e Event, mouse *tcell.EventMouse) (PaneKeyAction, bool) { n := k.cursor.node c, ok := n.children[e] if !ok { return nil, false } more := len(c.children) > 0 k.cursor.node = c k.cursor.recordedEvents = append(k.cursor.recordedEvents, e) switch ev := e.(type) { case KeyEvent: if ev.any { k.cursor.wildcards = append(k.cursor.wildcards, ev) } case MouseEvent: k.cursor.mouseInfo = mouse } if len(c.actions) > 0 { // check if actions are active for _, a := range c.actions { active := true for _, mc := range a.modes { // if any mode constraint is not met, the action is not active hasMode := k.modes[mc.mode] if hasMode != mc.disabled { active = false } } if active { // the first active action to be found is returned return k.cursor.MakeClosure(a), more } } } return nil, more } // ResetEvents sets the current sequence back to the initial value. func (k *KeyTree) ResetEvents() { k.cursor.node = k.root k.cursor.wildcards = []KeyEvent{} k.cursor.recordedEvents = []Event{} k.cursor.mouseInfo = nil } // CurrentEventsStr returns the list of recorded events as a string func (k *KeyTree) RecordedEventsStr() string { buf := &bytes.Buffer{} for _, e := range k.cursor.recordedEvents { buf.WriteString(e.Name()) } return buf.String() } // DeleteBinding removes any currently active actions associated with the // given event. func (k *KeyTree) DeleteBinding(e Event) { } // DeleteAllBindings removes all actions associated with the given event, // regardless of whether they are active or not. func (k *KeyTree) DeleteAllBindings(e Event) { } // SetMode enables or disabled a given mode func (k *KeyTree) SetMode(mode string, en bool) { k.modes[mode] = en } // HasMode returns if the given mode is currently active func (k *KeyTree) HasMode(mode string) bool { return k.modes[mode] } micro-2.0.9/internal/action/pane.go000066400000000000000000000003201405030104300171570ustar00rootroot00000000000000package action import ( "github.com/zyedidia/micro/v2/internal/display" ) type Pane interface { Handler display.Window ID() uint64 SetID(i uint64) Name() string Close() SetTab(t *Tab) Tab() *Tab } micro-2.0.9/internal/action/rawpane.go000066400000000000000000000016771405030104300177110ustar00rootroot00000000000000package action import ( "fmt" "reflect" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/display" "github.com/zyedidia/tcell/v2" ) type RawPane struct { *BufPane } func NewRawPaneFromWin(b *buffer.Buffer, win display.BWindow, tab *Tab) *RawPane { rh := new(RawPane) rh.BufPane = NewBufPane(b, win, tab) return rh } func NewRawPane(tab *Tab) *RawPane { b := buffer.NewBufferFromString("", "", buffer.BTRaw) w := display.NewBufWindow(0, 0, 0, 0, b) return NewRawPaneFromWin(b, w, tab) } func (h *RawPane) HandleEvent(event tcell.Event) { switch e := event.(type) { case *tcell.EventKey: if e.Key() == tcell.KeyCtrlQ { h.Quit() } } h.Buf.Insert(h.Cursor.Loc, reflect.TypeOf(event).String()[7:]) e, err := ConstructEvent(event) if err == nil { h.Buf.Insert(h.Cursor.Loc, fmt.Sprintf(": %s", e.Name())) } h.Buf.Insert(h.Cursor.Loc, fmt.Sprintf(": %q\n", event.EscSeq())) h.Relocate() } micro-2.0.9/internal/action/tab.go000066400000000000000000000156021405030104300170130ustar00rootroot00000000000000package action import ( "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/display" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/views" "github.com/zyedidia/tcell/v2" ) // The TabList is a list of tabs and a window to display the tab bar // at the top of the screen type TabList struct { *display.TabWindow List []*Tab } // NewTabList creates a TabList from a list of buffers by creating a Tab // for each buffer func NewTabList(bufs []*buffer.Buffer) *TabList { w, h := screen.Screen.Size() iOffset := config.GetInfoBarOffset() tl := new(TabList) tl.List = make([]*Tab, len(bufs)) if len(bufs) > 1 { for i, b := range bufs { tl.List[i] = NewTabFromBuffer(0, 1, w, h-1-iOffset, b) } } else { tl.List[0] = NewTabFromBuffer(0, 0, w, h-iOffset, bufs[0]) } tl.TabWindow = display.NewTabWindow(w, 0) tl.Names = make([]string, len(bufs)) return tl } // UpdateNames makes sure that the list of names the tab window has access to is // correct func (t *TabList) UpdateNames() { t.Names = t.Names[:0] for _, p := range t.List { t.Names = append(t.Names, p.Panes[p.active].Name()) } } // AddTab adds a new tab to this TabList func (t *TabList) AddTab(p *Tab) { t.List = append(t.List, p) t.Resize() t.UpdateNames() } // RemoveTab removes a tab with the given id from the TabList func (t *TabList) RemoveTab(id uint64) { for i, p := range t.List { if len(p.Panes) == 0 { continue } if p.Panes[0].ID() == id { copy(t.List[i:], t.List[i+1:]) t.List[len(t.List)-1] = nil t.List = t.List[:len(t.List)-1] if t.Active() >= len(t.List) { t.SetActive(len(t.List) - 1) } t.Resize() t.UpdateNames() return } } } // Resize resizes all elements within the tab list // One thing to note is that when there is only 1 tab // the tab bar should not be drawn so resizing must take // that into account func (t *TabList) Resize() { w, h := screen.Screen.Size() iOffset := config.GetInfoBarOffset() InfoBar.Resize(w, h-1) if len(t.List) > 1 { for _, p := range t.List { p.Y = 1 p.Node.Resize(w, h-1-iOffset) p.Resize() } } else if len(t.List) == 1 { t.List[0].Y = 0 t.List[0].Node.Resize(w, h-iOffset) t.List[0].Resize() } t.TabWindow.Resize(w, h) } // HandleEvent checks for a resize event or a mouse event on the tab bar // otherwise it will forward the event to the currently active tab func (t *TabList) HandleEvent(event tcell.Event) { switch e := event.(type) { case *tcell.EventResize: t.Resize() case *tcell.EventMouse: mx, my := e.Position() switch e.Buttons() { case tcell.Button1: if my == t.Y && mx == 0 { t.Scroll(-4) return } else if my == t.Y && mx == t.Width-1 { t.Scroll(4) return } if len(t.List) > 1 { ind := t.LocFromVisual(buffer.Loc{mx, my}) if ind != -1 { t.SetActive(ind) return } if my == 0 { return } } case tcell.WheelUp: if my == t.Y { t.Scroll(4) return } case tcell.WheelDown: if my == t.Y { t.Scroll(-4) return } } } t.List[t.Active()].HandleEvent(event) } // Display updates the names and then displays the tab bar func (t *TabList) Display() { t.UpdateNames() if len(t.List) > 1 { t.TabWindow.Display() } } // Tabs is the global tab list var Tabs *TabList func InitTabs(bufs []*buffer.Buffer) { Tabs = NewTabList(bufs) } func MainTab() *Tab { return Tabs.List[Tabs.Active()] } // A Tab represents a single tab // It consists of a list of edit panes (the open buffers), // a split tree (stored as just the root node), and a uiwindow // to display the UI elements like the borders between splits type Tab struct { *views.Node *display.UIWindow Panes []Pane active int resizing *views.Node // node currently being resized // captures whether the mouse is released release bool } // NewTabFromBuffer creates a new tab from the given buffer func NewTabFromBuffer(x, y, width, height int, b *buffer.Buffer) *Tab { t := new(Tab) t.Node = views.NewRoot(x, y, width, height) t.UIWindow = display.NewUIWindow(t.Node) t.release = true e := NewBufPaneFromBuf(b, t) e.SetID(t.ID()) t.Panes = append(t.Panes, e) return t } func NewTabFromPane(x, y, width, height int, pane Pane) *Tab { t := new(Tab) t.Node = views.NewRoot(x, y, width, height) t.UIWindow = display.NewUIWindow(t.Node) t.release = true pane.SetTab(t) pane.SetID(t.ID()) t.Panes = append(t.Panes, pane) return t } // HandleEvent takes a tcell event and usually dispatches it to the current // active pane. However if the event is a resize or a mouse event where the user // is interacting with the UI (resizing splits) then the event is consumed here // If the event is a mouse event in a pane, that pane will become active and get // the event func (t *Tab) HandleEvent(event tcell.Event) { switch e := event.(type) { case *tcell.EventMouse: mx, my := e.Position() switch e.Buttons() { case tcell.Button1: wasReleased := t.release t.release = false if t.resizing != nil { var size int if t.resizing.Kind == views.STVert { size = mx - t.resizing.X } else { size = my - t.resizing.Y + 1 } t.resizing.ResizeSplit(size) t.Resize() return } if wasReleased { t.resizing = t.GetMouseSplitNode(buffer.Loc{mx, my}) if t.resizing != nil { return } for i, p := range t.Panes { v := p.GetView() inpane := mx >= v.X && mx < v.X+v.Width && my >= v.Y && my < v.Y+v.Height if inpane { t.SetActive(i) break } } } case tcell.ButtonNone: t.resizing = nil t.release = true default: for _, p := range t.Panes { v := p.GetView() inpane := mx >= v.X && mx < v.X+v.Width && my >= v.Y && my < v.Y+v.Height if inpane { p.HandleEvent(event) return } } } } t.Panes[t.active].HandleEvent(event) } // SetActive changes the currently active pane to the specified index func (t *Tab) SetActive(i int) { t.active = i for j, p := range t.Panes { if j == i { p.SetActive(true) } else { p.SetActive(false) } } } // GetPane returns the pane with the given split index func (t *Tab) GetPane(splitid uint64) int { for i, p := range t.Panes { if p.ID() == splitid { return i } } return 0 } // Remove pane removes the pane with the given index func (t *Tab) RemovePane(i int) { copy(t.Panes[i:], t.Panes[i+1:]) t.Panes[len(t.Panes)-1] = nil t.Panes = t.Panes[:len(t.Panes)-1] } // Resize resizes all panes according to their corresponding split nodes func (t *Tab) Resize() { for _, p := range t.Panes { n := t.GetNode(p.ID()) pv := p.GetView() offset := 0 if n.X != 0 { offset = 1 } pv.X, pv.Y = n.X+offset, n.Y p.SetView(pv) p.Resize(n.W-offset, n.H) } } // CurPane returns the currently active pane func (t *Tab) CurPane() *BufPane { p, ok := t.Panes[t.active].(*BufPane) if !ok { return nil } return p } micro-2.0.9/internal/action/terminal_supported.go000066400000000000000000000024251405030104300221640ustar00rootroot00000000000000// +build linux darwin dragonfly openbsd_amd64 freebsd package action import ( shellquote "github.com/kballard/go-shellquote" "github.com/zyedidia/micro/v2/internal/shell" ) // TermEmuSupported is a constant that marks if the terminal emulator is supported const TermEmuSupported = true // RunTermEmulator starts a terminal emulator from a bufpane with the given input (command) // if wait is true it will wait for the user to exit by pressing enter once the executable has terminated // if getOutput is true it will redirect the stdout of the process to a pipe which will be passed to the // callback which is a function that takes a string and a list of optional user arguments func RunTermEmulator(h *BufPane, input string, wait bool, getOutput bool, callback func(out string, userargs []interface{}), userargs []interface{}) error { args, err := shellquote.Split(input) if err != nil { return err } if len(args) == 0 { return nil } t := new(shell.Terminal) err = t.Start(args, getOutput, wait, callback, userargs) if err != nil { return err } h.AddTab() id := MainTab().Panes[0].ID() v := h.GetView() tp, err := NewTermPane(v.X, v.Y, v.Width, v.Height, t, id, MainTab()) if err != nil { return err } MainTab().Panes[0] = tp MainTab().SetActive(0) return nil } micro-2.0.9/internal/action/terminal_unsupported.go000066400000000000000000000007451405030104300225320ustar00rootroot00000000000000// +build !linux,!darwin,!freebsd,!dragonfly,!openbsd_amd64 package action import "errors" // TermEmuSupported is a constant that marks if the terminal emulator is supported const TermEmuSupported = false // RunTermEmulator returns an error for unsupported systems (non-unix systems func RunTermEmulator(input string, wait bool, getOutput bool, callback func(out string, userargs []interface{}), userargs []interface{}) error { return errors.New("Unsupported operating system") } micro-2.0.9/internal/action/termpane.go000066400000000000000000000116471405030104300200650ustar00rootroot00000000000000package action import ( "errors" "runtime" "github.com/zyedidia/micro/v2/internal/clipboard" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/display" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/shell" "github.com/zyedidia/tcell/v2" "github.com/zyedidia/terminal" ) type TermKeyAction func(*TermPane) var TermBindings *KeyTree func init() { TermBindings = NewKeyTree() } func TermKeyActionGeneral(a TermKeyAction) PaneKeyAction { return func(p Pane) bool { a(p.(*TermPane)) return true } } func TermMapEvent(k Event, action string) { config.Bindings["terminal"][k.Name()] = action switch e := k.(type) { case KeyEvent, KeySequenceEvent, RawEvent: termMapKey(e, action) case MouseEvent: termMapMouse(e, action) } } func termMapKey(k Event, action string) { if f, ok := TermKeyActions[action]; ok { TermBindings.RegisterKeyBinding(k, TermKeyActionGeneral(f)) } } func termMapMouse(k MouseEvent, action string) { // TODO: map mouse termMapKey(k, action) } type TermPane struct { *shell.Terminal display.Window mouseReleased bool id uint64 tab *Tab } func NewTermPane(x, y, w, h int, t *shell.Terminal, id uint64, tab *Tab) (*TermPane, error) { if !TermEmuSupported { return nil, errors.New("Terminal emulator is not supported on this system") } th := new(TermPane) th.Terminal = t th.id = id th.mouseReleased = true th.Window = display.NewTermWindow(x, y, w, h, t) th.tab = tab return th, nil } func (t *TermPane) ID() uint64 { return t.id } func (t *TermPane) SetID(i uint64) { t.id = i } func (t *TermPane) SetTab(tab *Tab) { t.tab = tab } func (t *TermPane) Tab() *Tab { return t.tab } func (t *TermPane) Close() {} // Quit closes this termpane func (t *TermPane) Quit() { t.Close() if len(MainTab().Panes) > 1 { t.Unsplit() } else if len(Tabs.List) > 1 { Tabs.RemoveTab(t.id) } else { screen.Screen.Fini() InfoBar.Close() runtime.Goexit() } } // Unsplit removes this split func (t *TermPane) Unsplit() { n := MainTab().GetNode(t.id) n.Unsplit() MainTab().RemovePane(MainTab().GetPane(t.id)) MainTab().Resize() MainTab().SetActive(len(MainTab().Panes) - 1) } // HandleEvent handles a tcell event by forwarding it to the terminal emulator // If the event is a mouse event and the program running in the emulator // does not have mouse support, the emulator will support selections and // copy-paste func (t *TermPane) HandleEvent(event tcell.Event) { if e, ok := event.(*tcell.EventKey); ok { ke := KeyEvent{ code: e.Key(), mod: metaToAlt(e.Modifiers()), r: e.Rune(), } action, more := TermBindings.NextEvent(ke, nil) if !more { if action != nil { action(t) TermBindings.ResetEvents() return } TermBindings.ResetEvents() } if more { return } if t.Status == shell.TTDone { switch e.Key() { case tcell.KeyEscape, tcell.KeyCtrlQ, tcell.KeyEnter: t.Close() t.Quit() default: } } if e.Key() == tcell.KeyCtrlC && t.HasSelection() { clipboard.Write(t.GetSelection(t.GetView().Width), clipboard.ClipboardReg) InfoBar.Message("Copied selection to clipboard") } else if t.Status != shell.TTDone { t.WriteString(event.EscSeq()) } } else if _, ok := event.(*tcell.EventPaste); ok { if t.Status != shell.TTDone { t.WriteString(event.EscSeq()) } } else if e, ok := event.(*tcell.EventMouse); e != nil && (!ok || t.State.Mode(terminal.ModeMouseMask)) { // t.WriteString(event.EscSeq()) } else if e != nil { x, y := e.Position() v := t.GetView() x -= v.X y -= v.Y if e.Buttons() == tcell.Button1 { if !t.mouseReleased { // drag t.Selection[1].X = x t.Selection[1].Y = y } else { t.Selection[0].X = x t.Selection[0].Y = y t.Selection[1].X = x t.Selection[1].Y = y } t.mouseReleased = false } else if e.Buttons() == tcell.ButtonNone { if !t.mouseReleased { t.Selection[1].X = x t.Selection[1].Y = y } t.mouseReleased = true } } if t.Status == shell.TTClose { t.Quit() } } // Exit closes the termpane func (t *TermPane) Exit() { t.Terminal.Close() t.Quit() } // CommandMode opens the termpane's command mode func (t *TermPane) CommandMode() { InfoBar.Prompt("> ", "", "TerminalCommand", nil, func(resp string, canceled bool) { if !canceled { t.HandleCommand(resp) } }) } // NextSplit moves to the next split func (t *TermPane) NextSplit() { a := t.tab.active if a < len(t.tab.Panes)-1 { a++ } else { a = 0 } t.tab.SetActive(a) } // HandleCommand handles a command for the term pane func (t *TermPane) HandleCommand(input string) { InfoBar.Error("Commands are unsupported in term for now") } // TermKeyActions contains the list of all possible key actions the termpane could execute var TermKeyActions = map[string]TermKeyAction{ "Exit": (*TermPane).Exit, "CommandMode": (*TermPane).CommandMode, "NextSplit": (*TermPane).NextSplit, } micro-2.0.9/internal/buffer/000077500000000000000000000000001405030104300157065ustar00rootroot00000000000000micro-2.0.9/internal/buffer/autocomplete.go000066400000000000000000000115671405030104300207500ustar00rootroot00000000000000package buffer import ( "bytes" "io/ioutil" "os" "sort" "strings" "github.com/zyedidia/micro/v2/internal/util" ) // A Completer is a function that takes a buffer and returns info // describing what autocompletions should be inserted at the current // cursor location // It returns a list of string suggestions which will be inserted at // the current cursor location if selected as well as a list of // suggestion names which can be displayed in an autocomplete box or // other UI element type Completer func(*Buffer) ([]string, []string) func (b *Buffer) GetSuggestions() { } // Autocomplete starts the autocomplete process func (b *Buffer) Autocomplete(c Completer) bool { b.Completions, b.Suggestions = c(b) if len(b.Completions) != len(b.Suggestions) || len(b.Completions) == 0 { return false } b.CurSuggestion = -1 b.CycleAutocomplete(true) return true } // CycleAutocomplete moves to the next suggestion func (b *Buffer) CycleAutocomplete(forward bool) { prevSuggestion := b.CurSuggestion if forward { b.CurSuggestion++ } else { b.CurSuggestion-- } if b.CurSuggestion >= len(b.Suggestions) { b.CurSuggestion = 0 } else if b.CurSuggestion < 0 { b.CurSuggestion = len(b.Suggestions) - 1 } c := b.GetActiveCursor() start := c.Loc end := c.Loc if prevSuggestion < len(b.Suggestions) && prevSuggestion >= 0 { start = end.Move(-util.CharacterCountInString(b.Completions[prevSuggestion]), b) } b.Replace(start, end, b.Completions[b.CurSuggestion]) if len(b.Suggestions) > 1 { b.HasSuggestions = true } } // GetWord gets the most recent word separated by any separator // (whitespace, punctuation, any non alphanumeric character) func GetWord(b *Buffer) ([]byte, int) { c := b.GetActiveCursor() l := b.LineBytes(c.Y) l = util.SliceStart(l, c.X) if c.X == 0 || util.IsWhitespace(b.RuneAt(c.Loc.Move(-1, b))) { return []byte{}, -1 } if util.IsNonAlphaNumeric(b.RuneAt(c.Loc.Move(-1, b))) { return []byte{}, c.X } args := bytes.FieldsFunc(l, util.IsNonAlphaNumeric) input := args[len(args)-1] return input, c.X - util.CharacterCount(input) } // GetArg gets the most recent word (separated by ' ' only) func GetArg(b *Buffer) (string, int) { c := b.GetActiveCursor() l := b.LineBytes(c.Y) l = util.SliceStart(l, c.X) args := bytes.Split(l, []byte{' '}) input := string(args[len(args)-1]) argstart := 0 for i, a := range args { if i == len(args)-1 { break } argstart += util.CharacterCount(a) + 1 } return input, argstart } // FileComplete autocompletes filenames func FileComplete(b *Buffer) ([]string, []string) { c := b.GetActiveCursor() input, argstart := GetArg(b) sep := string(os.PathSeparator) dirs := strings.Split(input, sep) var files []os.FileInfo var err error if len(dirs) > 1 { directories := strings.Join(dirs[:len(dirs)-1], sep) + sep directories, _ = util.ReplaceHome(directories) files, err = ioutil.ReadDir(directories) } else { files, err = ioutil.ReadDir(".") } if err != nil { return nil, nil } var suggestions []string for _, f := range files { name := f.Name() if f.IsDir() { name += sep } if strings.HasPrefix(name, dirs[len(dirs)-1]) { suggestions = append(suggestions, name) } } sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { var complete string if len(dirs) > 1 { complete = strings.Join(dirs[:len(dirs)-1], sep) + sep + suggestions[i] } else { complete = suggestions[i] } completions[i] = util.SliceEndStr(complete, c.X-argstart) } return completions, suggestions } // BufferComplete autocompletes based on previous words in the buffer func BufferComplete(b *Buffer) ([]string, []string) { c := b.GetActiveCursor() input, argstart := GetWord(b) if argstart == -1 { return []string{}, []string{} } inputLen := util.CharacterCount(input) suggestionsSet := make(map[string]struct{}) var suggestions []string for i := c.Y; i >= 0; i-- { l := b.LineBytes(i) words := bytes.FieldsFunc(l, util.IsNonAlphaNumeric) for _, w := range words { if bytes.HasPrefix(w, input) && util.CharacterCount(w) > inputLen { strw := string(w) if _, ok := suggestionsSet[strw]; !ok { suggestionsSet[strw] = struct{}{} suggestions = append(suggestions, strw) } } } } for i := c.Y + 1; i < b.LinesNum(); i++ { l := b.LineBytes(i) words := bytes.FieldsFunc(l, util.IsNonAlphaNumeric) for _, w := range words { if bytes.HasPrefix(w, input) && util.CharacterCount(w) > inputLen { strw := string(w) if _, ok := suggestionsSet[strw]; !ok { suggestionsSet[strw] = struct{}{} suggestions = append(suggestions, strw) } } } } if len(suggestions) > 1 { suggestions = append(suggestions, string(input)) } completions := make([]string, len(suggestions)) for i := range suggestions { completions[i] = util.SliceEndStr(suggestions[i], c.X-argstart) } return completions, suggestions } micro-2.0.9/internal/buffer/backup.go000066400000000000000000000066531405030104300175140ustar00rootroot00000000000000package buffer import ( "fmt" "io" "os" "path/filepath" "sync/atomic" "time" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/util" "golang.org/x/text/encoding" ) const backupMsg = `A backup was detected for this file. This likely means that micro crashed while editing this file, or another instance of micro is currently editing this file. The backup was created on %s, and the file is %s * 'recover' will apply the backup as unsaved changes to the current buffer. When the buffer is closed, the backup will be removed. * 'ignore' will ignore the backup, discarding its changes. The backup file will be removed. Options: [r]ecover, [i]gnore: ` var backupRequestChan chan *Buffer func backupThread() { for { time.Sleep(time.Second * 8) for len(backupRequestChan) > 0 { b := <-backupRequestChan bfini := atomic.LoadInt32(&(b.fini)) != 0 if !bfini { b.Backup() } } } } func init() { backupRequestChan = make(chan *Buffer, 10) go backupThread() } func (b *Buffer) RequestBackup() { if !b.requestedBackup { select { case backupRequestChan <- b: default: // channel is full } b.requestedBackup = true } } // Backup saves the current buffer to ConfigDir/backups func (b *Buffer) Backup() error { if !b.Settings["backup"].(bool) || b.Path == "" || b.Type != BTDefault { return nil } backupdir, err := util.ReplaceHome(b.Settings["backupdir"].(string)) if backupdir == "" || err != nil { backupdir = filepath.Join(config.ConfigDir, "backups") } if _, err := os.Stat(backupdir); os.IsNotExist(err) { os.Mkdir(backupdir, os.ModePerm) } name := filepath.Join(backupdir, util.EscapePath(b.AbsPath)) err = overwriteFile(name, encoding.Nop, func(file io.Writer) (e error) { if len(b.lines) == 0 { return } // end of line eol := []byte{'\n'} // write lines if _, e = file.Write(b.lines[0].data); e != nil { return } for _, l := range b.lines[1:] { if _, e = file.Write(eol); e != nil { return } if _, e = file.Write(l.data); e != nil { return } } return }, false) b.requestedBackup = false return err } // RemoveBackup removes any backup file associated with this buffer func (b *Buffer) RemoveBackup() { if !b.Settings["backup"].(bool) || b.Settings["permbackup"].(bool) || b.Path == "" || b.Type != BTDefault { return } f := filepath.Join(config.ConfigDir, "backups", util.EscapePath(b.AbsPath)) os.Remove(f) } // ApplyBackup applies the corresponding backup file to this buffer (if one exists) // Returns true if a backup was applied func (b *Buffer) ApplyBackup(fsize int64) bool { if b.Settings["backup"].(bool) && !b.Settings["permbackup"].(bool) && len(b.Path) > 0 && b.Type == BTDefault { backupfile := filepath.Join(config.ConfigDir, "backups", util.EscapePath(b.AbsPath)) if info, err := os.Stat(backupfile); err == nil { backup, err := os.Open(backupfile) if err == nil { defer backup.Close() t := info.ModTime() msg := fmt.Sprintf(backupMsg, t.Format("Mon Jan _2 at 15:04, 2006"), util.EscapePath(b.AbsPath)) choice := screen.TermPrompt(msg, []string{"r", "i", "recover", "ignore"}, true) if choice%2 == 0 { // recover b.LineArray = NewLineArray(uint64(fsize), FFAuto, backup) b.isModified = true return true } else if choice%2 == 1 { // delete os.Remove(backupfile) } } } } return false } micro-2.0.9/internal/buffer/buffer.go000066400000000000000000000732611405030104300175170ustar00rootroot00000000000000package buffer import ( "bufio" "bytes" "crypto/md5" "errors" "fmt" "io" "io/ioutil" "os" "path" "path/filepath" "strconv" "strings" "sync" "sync/atomic" "time" luar "layeh.com/gopher-luar" dmp "github.com/sergi/go-diff/diffmatchpatch" "github.com/zyedidia/micro/v2/internal/config" ulua "github.com/zyedidia/micro/v2/internal/lua" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/util" "github.com/zyedidia/micro/v2/pkg/highlight" "golang.org/x/text/encoding/htmlindex" "golang.org/x/text/encoding/unicode" "golang.org/x/text/transform" ) const backupTime = 8000 var ( // OpenBuffers is a list of the currently open buffers OpenBuffers []*Buffer // LogBuf is a reference to the log buffer which can be opened with the // `> log` command LogBuf *Buffer ) // The BufType defines what kind of buffer this is type BufType struct { Kind int Readonly bool // The buffer cannot be edited Scratch bool // The buffer cannot be saved Syntax bool // Syntax highlighting is enabled } var ( // BTDefault is a default buffer BTDefault = BufType{0, false, false, true} // BTHelp is a help buffer BTHelp = BufType{1, true, true, true} // BTLog is a log buffer BTLog = BufType{2, true, true, false} // BTScratch is a buffer that cannot be saved (for scratch work) BTScratch = BufType{3, false, true, false} // BTRaw is is a buffer that shows raw terminal events BTRaw = BufType{4, false, true, false} // BTInfo is a buffer for inputting information BTInfo = BufType{5, false, true, false} // BTStdout is a buffer that only writes to stdout // when closed BTStdout = BufType{6, false, true, true} // ErrFileTooLarge is returned when the file is too large to hash // (fastdirty is automatically enabled) ErrFileTooLarge = errors.New("File is too large to hash") ) // SharedBuffer is a struct containing info that is shared among buffers // that have the same file open type SharedBuffer struct { *LineArray // Stores the last modification time of the file the buffer is pointing to ModTime time.Time // Type of the buffer (e.g. help, raw, scratch etc..) Type BufType // Path to the file on disk Path string // Absolute path to the file on disk AbsPath string // Name of the buffer on the status line name string toStdout bool // Settings customized by the user Settings map[string]interface{} Suggestions []string Completions []string CurSuggestion int Messages []*Message updateDiffTimer *time.Timer diffBase []byte diffBaseLineCount int diffLock sync.RWMutex diff map[int]DiffStatus requestedBackup bool // ReloadDisabled allows the user to disable reloads if they // are viewing a file that is constantly changing ReloadDisabled bool isModified bool // Whether or not suggestions can be autocompleted must be shared because // it changes based on how the buffer has changed HasSuggestions bool // The Highlighter struct actually performs the highlighting Highlighter *highlight.Highlighter // SyntaxDef represents the syntax highlighting definition being used // This stores the highlighting rules and filetype detection info SyntaxDef *highlight.Def ModifiedThisFrame bool // Hash of the original buffer -- empty if fastdirty is on origHash [md5.Size]byte } func (b *SharedBuffer) insert(pos Loc, value []byte) { b.isModified = true b.HasSuggestions = false b.LineArray.insert(pos, value) inslines := bytes.Count(value, []byte{'\n'}) b.MarkModified(pos.Y, pos.Y+inslines) } func (b *SharedBuffer) remove(start, end Loc) []byte { b.isModified = true b.HasSuggestions = false defer b.MarkModified(start.Y, end.Y) return b.LineArray.remove(start, end) } // MarkModified marks the buffer as modified for this frame // and performs rehighlighting if syntax highlighting is enabled func (b *SharedBuffer) MarkModified(start, end int) { b.ModifiedThisFrame = true if !b.Settings["syntax"].(bool) || b.SyntaxDef == nil { return } start = util.Clamp(start, 0, len(b.lines)-1) end = util.Clamp(end, 0, len(b.lines)-1) l := -1 for i := start; i <= end; i++ { l = util.Max(b.Highlighter.ReHighlightStates(b, i), l) } b.Highlighter.HighlightMatches(b, start, l) } // DisableReload disables future reloads of this sharedbuffer func (b *SharedBuffer) DisableReload() { b.ReloadDisabled = true } const ( DSUnchanged = 0 DSAdded = 1 DSModified = 2 DSDeletedAbove = 3 ) type DiffStatus byte // Buffer stores the main information about a currently open file including // the actual text (in a LineArray), the undo/redo stack (in an EventHandler) // all the cursors, the syntax highlighting info, the settings for the buffer // and some misc info about modification time and path location. // The syntax highlighting info must be stored with the buffer because the syntax // highlighter attaches information to each line of the buffer for optimization // purposes so it doesn't have to rehighlight everything on every update. type Buffer struct { *EventHandler *SharedBuffer fini int32 cursors []*Cursor curCursor int StartCursor Loc // OptionCallback is called after a buffer option value is changed. // The display module registers its OptionCallback to ensure the buffer window // is properly updated when needed. This is a workaround for the fact that // the buffer module cannot directly call the display's API (it would mean // a circular dependency between packages). OptionCallback func(option string, nativeValue interface{}) // The display module registers its own GetVisualX function for getting // the correct visual x location of a cursor when softwrap is used. // This is hacky. Maybe it would be better to move all the visual x logic // from buffer to display, but it would require rewriting a lot of code. GetVisualX func(loc Loc) int } // NewBufferFromFileAtLoc opens a new buffer with a given cursor location // If cursorLoc is {-1, -1} the location does not overwrite what the cursor location // would otherwise be (start of file, or saved cursor position if `savecursor` is // enabled) func NewBufferFromFileAtLoc(path string, btype BufType, cursorLoc Loc) (*Buffer, error) { var err error filename := path if config.GetGlobalOption("parsecursor").(bool) && cursorLoc.X == -1 && cursorLoc.Y == -1 { var cursorPos []string filename, cursorPos = util.GetPathAndCursorPosition(filename) cursorLoc, err = ParseCursorLocation(cursorPos) if err != nil { cursorLoc = Loc{-1, -1} } } filename, err = util.ReplaceHome(filename) if err != nil { return nil, err } f, err := os.OpenFile(filename, os.O_WRONLY, 0) readonly := os.IsPermission(err) f.Close() fileInfo, serr := os.Stat(filename) if serr != nil && !os.IsNotExist(serr) { return nil, serr } if serr == nil && fileInfo.IsDir() { return nil, errors.New("Error: " + filename + " is a directory and cannot be opened") } file, err := os.Open(filename) if err == nil { defer file.Close() } var buf *Buffer if os.IsNotExist(err) { // File does not exist -- create an empty buffer with that name buf = NewBufferFromString("", filename, btype) } else if err != nil { return nil, err } else { buf = NewBuffer(file, util.FSize(file), filename, cursorLoc, btype) } if readonly { buf.SetOptionNative("readonly", true) } return buf, nil } // NewBufferFromFile opens a new buffer using the given path // It will also automatically handle `~`, and line/column with filename:l:c // It will return an empty buffer if the path does not exist // and an error if the file is a directory func NewBufferFromFile(path string, btype BufType) (*Buffer, error) { return NewBufferFromFileAtLoc(path, btype, Loc{-1, -1}) } // NewBufferFromStringAtLoc creates a new buffer containing the given string with a cursor loc func NewBufferFromStringAtLoc(text, path string, btype BufType, cursorLoc Loc) *Buffer { return NewBuffer(strings.NewReader(text), int64(len(text)), path, cursorLoc, btype) } // NewBufferFromString creates a new buffer containing the given string func NewBufferFromString(text, path string, btype BufType) *Buffer { return NewBuffer(strings.NewReader(text), int64(len(text)), path, Loc{-1, -1}, btype) } // NewBuffer creates a new buffer from a given reader with a given path // Ensure that ReadSettings and InitGlobalSettings have been called before creating // a new buffer // Places the cursor at startcursor. If startcursor is -1, -1 places the // cursor at an autodetected location (based on savecursor or :LINE:COL) func NewBuffer(r io.Reader, size int64, path string, startcursor Loc, btype BufType) *Buffer { absPath, _ := filepath.Abs(path) b := new(Buffer) found := false if len(path) > 0 { for _, buf := range OpenBuffers { if buf.AbsPath == absPath && buf.Type != BTInfo { found = true b.SharedBuffer = buf.SharedBuffer b.EventHandler = buf.EventHandler } } } hasBackup := false if !found { b.SharedBuffer = new(SharedBuffer) b.Type = btype b.AbsPath = absPath b.Path = path // this is a little messy since we need to know some settings to read // the file properly, but some settings depend on the filetype, which // we don't know until reading the file. We first read the settings // into a local variable and then use that to determine the encoding, // readonly, and fileformat necessary for reading the file and // assigning the filetype. settings := config.DefaultCommonSettings() b.Settings = config.DefaultCommonSettings() for k, v := range config.GlobalSettings { if _, ok := config.DefaultGlobalOnlySettings[k]; !ok { // make sure setting is not global-only settings[k] = v b.Settings[k] = v } } config.InitLocalSettings(settings, path) b.Settings["readonly"] = settings["readonly"] b.Settings["filetype"] = settings["filetype"] b.Settings["syntax"] = settings["syntax"] enc, err := htmlindex.Get(settings["encoding"].(string)) if err != nil { enc = unicode.UTF8 b.Settings["encoding"] = "utf-8" } hasBackup = b.ApplyBackup(size) if !hasBackup { reader := bufio.NewReader(transform.NewReader(r, enc.NewDecoder())) var ff FileFormat = FFAuto if size == 0 { // for empty files, use the fileformat setting instead of // autodetection switch settings["fileformat"] { case "unix": ff = FFUnix case "dos": ff = FFDos } } b.LineArray = NewLineArray(uint64(size), ff, reader) } b.EventHandler = NewEventHandler(b.SharedBuffer, b.cursors) // The last time this file was modified b.UpdateModTime() } if b.Settings["readonly"].(bool) && b.Type == BTDefault { b.Type.Readonly = true } switch b.Endings { case FFUnix: b.Settings["fileformat"] = "unix" case FFDos: b.Settings["fileformat"] = "dos" } b.UpdateRules() // init local settings again now that we know the filetype config.InitLocalSettings(b.Settings, b.Path) if _, err := os.Stat(filepath.Join(config.ConfigDir, "buffers")); os.IsNotExist(err) { os.Mkdir(filepath.Join(config.ConfigDir, "buffers"), os.ModePerm) } if startcursor.X != -1 && startcursor.Y != -1 { b.StartCursor = startcursor } else if b.Settings["savecursor"].(bool) || b.Settings["saveundo"].(bool) { err := b.Unserialize() if err != nil { screen.TermMessage(err) } } b.AddCursor(NewCursor(b, b.StartCursor)) b.GetActiveCursor().Relocate() if !b.Settings["fastdirty"].(bool) && !found { if size > LargeFileThreshold { // If the file is larger than LargeFileThreshold fastdirty needs to be on b.Settings["fastdirty"] = true } else if !hasBackup { // since applying a backup does not save the applied backup to disk, we should // not calculate the original hash based on the backup data calcHash(b, &b.origHash) } } err := config.RunPluginFn("onBufferOpen", luar.New(ulua.L, b)) if err != nil { screen.TermMessage(err) } OpenBuffers = append(OpenBuffers, b) return b } // Close removes this buffer from the list of open buffers func (b *Buffer) Close() { for i, buf := range OpenBuffers { if b == buf { b.Fini() copy(OpenBuffers[i:], OpenBuffers[i+1:]) OpenBuffers[len(OpenBuffers)-1] = nil OpenBuffers = OpenBuffers[:len(OpenBuffers)-1] return } } } // Fini should be called when a buffer is closed and performs // some cleanup func (b *Buffer) Fini() { if !b.Modified() { b.Serialize() } b.RemoveBackup() if b.Type == BTStdout { fmt.Fprint(util.Stdout, string(b.Bytes())) } atomic.StoreInt32(&(b.fini), int32(1)) } // GetName returns the name that should be displayed in the statusline // for this buffer func (b *Buffer) GetName() string { name := b.name if name == "" { if b.Path == "" { return "No name" } name = b.Path } if b.Settings["basename"].(bool) { return path.Base(name) } return name } //SetName changes the name for this buffer func (b *Buffer) SetName(s string) { b.name = s } // Insert inserts the given string of text at the start location func (b *Buffer) Insert(start Loc, text string) { if !b.Type.Readonly { b.EventHandler.cursors = b.cursors b.EventHandler.active = b.curCursor b.EventHandler.Insert(start, text) b.RequestBackup() } } // Remove removes the characters between the start and end locations func (b *Buffer) Remove(start, end Loc) { if !b.Type.Readonly { b.EventHandler.cursors = b.cursors b.EventHandler.active = b.curCursor b.EventHandler.Remove(start, end) b.RequestBackup() } } // FileType returns the buffer's filetype func (b *Buffer) FileType() string { return b.Settings["filetype"].(string) } // ExternallyModified returns whether the file being edited has // been modified by some external process func (b *Buffer) ExternallyModified() bool { modTime, err := util.GetModTime(b.Path) if err == nil { return modTime != b.ModTime } return false } // UpdateModTime updates the modtime of this file func (b *Buffer) UpdateModTime() (err error) { b.ModTime, err = util.GetModTime(b.Path) return } // ReOpen reloads the current buffer from disk func (b *Buffer) ReOpen() error { file, err := os.Open(b.Path) if err != nil { return err } enc, err := htmlindex.Get(b.Settings["encoding"].(string)) if err != nil { return err } reader := bufio.NewReader(transform.NewReader(file, enc.NewDecoder())) data, err := ioutil.ReadAll(reader) txt := string(data) if err != nil { return err } b.EventHandler.ApplyDiff(txt) err = b.UpdateModTime() if !b.Settings["fastdirty"].(bool) { calcHash(b, &b.origHash) } b.isModified = false b.RelocateCursors() return err } // RelocateCursors relocates all cursors (makes sure they are in the buffer) func (b *Buffer) RelocateCursors() { for _, c := range b.cursors { c.Relocate() } } // RuneAt returns the rune at a given location in the buffer func (b *Buffer) RuneAt(loc Loc) rune { line := b.LineBytes(loc.Y) if len(line) > 0 { i := 0 for len(line) > 0 { r, _, size := util.DecodeCharacter(line) line = line[size:] if i == loc.X { return r } i++ } } return '\n' } // WordAt returns the word around a given location in the buffer func (b *Buffer) WordAt(loc Loc) []byte { if len(b.LineBytes(loc.Y)) == 0 || !util.IsWordChar(b.RuneAt(loc)) { return []byte{} } start := loc end := loc.Move(1, b) for start.X > 0 && util.IsWordChar(b.RuneAt(start.Move(-1, b))) { start.X-- } lineLen := util.CharacterCount(b.LineBytes(loc.Y)) for end.X < lineLen && util.IsWordChar(b.RuneAt(end)) { end.X++ } return b.Substr(start, end) } // Modified returns if this buffer has been modified since // being opened func (b *Buffer) Modified() bool { if b.Type.Scratch { return false } if b.Settings["fastdirty"].(bool) { return b.isModified } var buff [md5.Size]byte calcHash(b, &buff) return buff != b.origHash } // Size returns the number of bytes in the current buffer func (b *Buffer) Size() int { nb := 0 for i := 0; i < b.LinesNum(); i++ { nb += len(b.LineBytes(i)) if i != b.LinesNum()-1 { if b.Endings == FFDos { nb++ // carriage return } nb++ // newline } } return nb } // calcHash calculates md5 hash of all lines in the buffer func calcHash(b *Buffer, out *[md5.Size]byte) error { h := md5.New() size := 0 if len(b.lines) > 0 { n, e := h.Write(b.lines[0].data) if e != nil { return e } size += n for _, l := range b.lines[1:] { n, e = h.Write([]byte{'\n'}) if e != nil { return e } size += n n, e = h.Write(l.data) if e != nil { return e } size += n } } if size > LargeFileThreshold { return ErrFileTooLarge } h.Sum((*out)[:0]) return nil } // UpdateRules updates the syntax rules and filetype for this buffer // This is called when the colorscheme changes func (b *Buffer) UpdateRules() { if !b.Type.Syntax { return } ft := b.Settings["filetype"].(string) if ft == "off" { return } syntaxFile := "" foundDef := false var header *highlight.Header // search for the syntax file in the user's custom syntax files for _, f := range config.ListRealRuntimeFiles(config.RTSyntax) { data, err := f.Data() if err != nil { screen.TermMessage("Error loading syntax file " + f.Name() + ": " + err.Error()) continue } header, err = highlight.MakeHeaderYaml(data) if err != nil { screen.TermMessage("Error parsing header for syntax file " + f.Name() + ": " + err.Error()) } file, err := highlight.ParseFile(data) if err != nil { screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error()) continue } if ((ft == "unknown" || ft == "") && highlight.MatchFiletype(header.FtDetect, b.Path, b.lines[0].data)) || header.FileType == ft { syndef, err := highlight.ParseDef(file, header) if err != nil { screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error()) continue } b.SyntaxDef = syndef syntaxFile = f.Name() foundDef = true break } } // search in the default syntax files for _, f := range config.ListRuntimeFiles(config.RTSyntaxHeader) { data, err := f.Data() if err != nil { screen.TermMessage("Error loading syntax header file " + f.Name() + ": " + err.Error()) continue } header, err = highlight.MakeHeader(data) if err != nil { screen.TermMessage("Error reading syntax header file", f.Name(), err) continue } if ft == "unknown" || ft == "" { if highlight.MatchFiletype(header.FtDetect, b.Path, b.lines[0].data) { syntaxFile = f.Name() break } } else if header.FileType == ft { syntaxFile = f.Name() break } } if syntaxFile != "" && !foundDef { // we found a syntax file using a syntax header file for _, f := range config.ListRuntimeFiles(config.RTSyntax) { if f.Name() == syntaxFile { data, err := f.Data() if err != nil { screen.TermMessage("Error loading syntax file " + f.Name() + ": " + err.Error()) continue } file, err := highlight.ParseFile(data) if err != nil { screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error()) continue } syndef, err := highlight.ParseDef(file, header) if err != nil { screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error()) continue } b.SyntaxDef = syndef break } } } if b.SyntaxDef != nil && highlight.HasIncludes(b.SyntaxDef) { includes := highlight.GetIncludes(b.SyntaxDef) var files []*highlight.File for _, f := range config.ListRuntimeFiles(config.RTSyntax) { data, err := f.Data() if err != nil { screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error()) continue } header, err := highlight.MakeHeaderYaml(data) if err != nil { screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error()) continue } for _, i := range includes { if header.FileType == i { file, err := highlight.ParseFile(data) if err != nil { screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error()) continue } files = append(files, file) break } } if len(files) >= len(includes) { break } } highlight.ResolveIncludes(b.SyntaxDef, files) } if b.Highlighter == nil || syntaxFile != "" { if b.SyntaxDef != nil { b.Settings["filetype"] = b.SyntaxDef.FileType } } else { b.SyntaxDef = &highlight.EmptyDef } if b.SyntaxDef != nil { b.Highlighter = highlight.NewHighlighter(b.SyntaxDef) if b.Settings["syntax"].(bool) { go func() { b.Highlighter.HighlightStates(b) b.Highlighter.HighlightMatches(b, 0, b.End().Y) screen.Redraw() }() } } } // ClearMatches clears all of the syntax highlighting for the buffer func (b *Buffer) ClearMatches() { for i := range b.lines { b.SetMatch(i, nil) b.SetState(i, nil) } } // IndentString returns this buffer's indent method (a tabstop or n spaces // depending on the settings) func (b *Buffer) IndentString(tabsize int) string { if b.Settings["tabstospaces"].(bool) { return util.Spaces(tabsize) } return "\t" } // SetCursors resets this buffer's cursors to a new list func (b *Buffer) SetCursors(c []*Cursor) { b.cursors = c b.EventHandler.cursors = b.cursors b.EventHandler.active = b.curCursor } // AddCursor adds a new cursor to the list func (b *Buffer) AddCursor(c *Cursor) { b.cursors = append(b.cursors, c) b.EventHandler.cursors = b.cursors b.EventHandler.active = b.curCursor b.UpdateCursors() } // SetCurCursor sets the current cursor func (b *Buffer) SetCurCursor(n int) { b.curCursor = n } // GetActiveCursor returns the main cursor in this buffer func (b *Buffer) GetActiveCursor() *Cursor { return b.cursors[b.curCursor] } // GetCursor returns the nth cursor func (b *Buffer) GetCursor(n int) *Cursor { return b.cursors[n] } // GetCursors returns the list of cursors in this buffer func (b *Buffer) GetCursors() []*Cursor { return b.cursors } // NumCursors returns the number of cursors func (b *Buffer) NumCursors() int { return len(b.cursors) } // MergeCursors merges any cursors that are at the same position // into one cursor func (b *Buffer) MergeCursors() { var cursors []*Cursor for i := 0; i < len(b.cursors); i++ { c1 := b.cursors[i] if c1 != nil { for j := 0; j < len(b.cursors); j++ { c2 := b.cursors[j] if c2 != nil && i != j && c1.Loc == c2.Loc { b.cursors[j] = nil } } cursors = append(cursors, c1) } } b.cursors = cursors for i := range b.cursors { b.cursors[i].Num = i } if b.curCursor >= len(b.cursors) { b.curCursor = len(b.cursors) - 1 } b.EventHandler.cursors = b.cursors b.EventHandler.active = b.curCursor } // UpdateCursors updates all the cursors indicies func (b *Buffer) UpdateCursors() { b.EventHandler.cursors = b.cursors b.EventHandler.active = b.curCursor for i, c := range b.cursors { c.Num = i } } func (b *Buffer) RemoveCursor(i int) { copy(b.cursors[i:], b.cursors[i+1:]) b.cursors[len(b.cursors)-1] = nil b.cursors = b.cursors[:len(b.cursors)-1] b.curCursor = util.Clamp(b.curCursor, 0, len(b.cursors)-1) b.UpdateCursors() } // ClearCursors removes all extra cursors func (b *Buffer) ClearCursors() { for i := 1; i < len(b.cursors); i++ { b.cursors[i] = nil } b.cursors = b.cursors[:1] b.UpdateCursors() b.curCursor = 0 b.GetActiveCursor().ResetSelection() } // MoveLinesUp moves the range of lines up one row func (b *Buffer) MoveLinesUp(start int, end int) { if start < 1 || start >= end || end > len(b.lines) { return } l := string(b.LineBytes(start - 1)) if end == len(b.lines) { b.insert( Loc{ util.CharacterCount(b.lines[end-1].data), end - 1, }, []byte{'\n'}, ) } b.Insert( Loc{0, end}, l+"\n", ) b.Remove( Loc{0, start - 1}, Loc{0, start}, ) } // MoveLinesDown moves the range of lines down one row func (b *Buffer) MoveLinesDown(start int, end int) { if start < 0 || start >= end || end >= len(b.lines) { return } l := string(b.LineBytes(end)) b.Insert( Loc{0, start}, l+"\n", ) end++ b.Remove( Loc{0, end}, Loc{0, end + 1}, ) } var BracePairs = [][2]rune{ {'(', ')'}, {'{', '}'}, {'[', ']'}, } // FindMatchingBrace returns the location in the buffer of the matching bracket // It is given a brace type containing the open and closing character, (for example // '{' and '}') as well as the location to match from // TODO: maybe can be more efficient with utf8 package // returns the location of the matching brace // if the boolean returned is true then the original matching brace is one character left // of the starting location func (b *Buffer) FindMatchingBrace(braceType [2]rune, start Loc) (Loc, bool, bool) { curLine := []rune(string(b.LineBytes(start.Y))) startChar := ' ' if start.X >= 0 && start.X < len(curLine) { startChar = curLine[start.X] } leftChar := ' ' if start.X-1 >= 0 && start.X-1 < len(curLine) { leftChar = curLine[start.X-1] } var i int if startChar == braceType[0] || leftChar == braceType[0] { for y := start.Y; y < b.LinesNum(); y++ { l := []rune(string(b.LineBytes(y))) xInit := 0 if y == start.Y { if startChar == braceType[0] { xInit = start.X } else { xInit = start.X - 1 } } for x := xInit; x < len(l); x++ { r := l[x] if r == braceType[0] { i++ } else if r == braceType[1] { i-- if i == 0 { if startChar == braceType[0] { return Loc{x, y}, false, true } return Loc{x, y}, true, true } } } } } else if startChar == braceType[1] || leftChar == braceType[1] { for y := start.Y; y >= 0; y-- { l := []rune(string(b.lines[y].data)) xInit := len(l) - 1 if y == start.Y { if leftChar == braceType[1] { xInit = start.X - 1 } else { xInit = start.X } } for x := xInit; x >= 0; x-- { r := l[x] if r == braceType[0] { i-- if i == 0 { if leftChar == braceType[1] { return Loc{x, y}, true, true } return Loc{x, y}, false, true } } else if r == braceType[1] { i++ } } } } return start, true, false } // Retab changes all tabs to spaces or vice versa func (b *Buffer) Retab() { toSpaces := b.Settings["tabstospaces"].(bool) tabsize := util.IntOpt(b.Settings["tabsize"]) dirty := false for i := 0; i < b.LinesNum(); i++ { l := b.LineBytes(i) ws := util.GetLeadingWhitespace(l) if len(ws) != 0 { if toSpaces { ws = bytes.ReplaceAll(ws, []byte{'\t'}, bytes.Repeat([]byte{' '}, tabsize)) } else { ws = bytes.ReplaceAll(ws, bytes.Repeat([]byte{' '}, tabsize), []byte{'\t'}) } } l = bytes.TrimLeft(l, " \t") b.lines[i].data = append(ws, l...) b.MarkModified(i, i) dirty = true } b.isModified = dirty } // ParseCursorLocation turns a cursor location like 10:5 (LINE:COL) // into a loc func ParseCursorLocation(cursorPositions []string) (Loc, error) { startpos := Loc{0, 0} var err error // if no positions are available exit early if cursorPositions == nil { return startpos, errors.New("No cursor positions were provided.") } startpos.Y, err = strconv.Atoi(cursorPositions[0]) startpos.Y-- if err == nil { if len(cursorPositions) > 1 { startpos.X, err = strconv.Atoi(cursorPositions[1]) if startpos.X > 0 { startpos.X-- } } } return startpos, err } // Line returns the string representation of the given line number func (b *Buffer) Line(i int) string { return string(b.LineBytes(i)) } func (b *Buffer) Write(bytes []byte) (n int, err error) { b.EventHandler.InsertBytes(b.End(), bytes) return len(bytes), nil } func (b *Buffer) updateDiffSync() { b.diffLock.Lock() defer b.diffLock.Unlock() b.diff = make(map[int]DiffStatus) if b.diffBase == nil { return } differ := dmp.New() baseRunes, bufferRunes, _ := differ.DiffLinesToRunes(string(b.diffBase), string(b.Bytes())) diffs := differ.DiffMainRunes(baseRunes, bufferRunes, false) lineN := 0 for _, diff := range diffs { lineCount := len([]rune(diff.Text)) switch diff.Type { case dmp.DiffEqual: lineN += lineCount case dmp.DiffInsert: var status DiffStatus if b.diff[lineN] == DSDeletedAbove { status = DSModified } else { status = DSAdded } for i := 0; i < lineCount; i++ { b.diff[lineN] = status lineN++ } case dmp.DiffDelete: b.diff[lineN] = DSDeletedAbove } } } // UpdateDiff computes the diff between the diff base and the buffer content. // The update may be performed synchronously or asynchronously. // UpdateDiff calls the supplied callback when the update is complete. // The argument passed to the callback is set to true if and only if // the update was performed synchronously. // If an asynchronous update is already pending when UpdateDiff is called, // UpdateDiff does not schedule another update, in which case the callback // is not called. func (b *Buffer) UpdateDiff(callback func(bool)) { if b.updateDiffTimer != nil { return } lineCount := b.LinesNum() if b.diffBaseLineCount > lineCount { lineCount = b.diffBaseLineCount } if lineCount < 1000 { b.updateDiffSync() callback(true) } else if lineCount < 30000 { b.updateDiffTimer = time.AfterFunc(500*time.Millisecond, func() { b.updateDiffTimer = nil b.updateDiffSync() callback(false) }) } else { // Don't compute diffs for very large files b.diffLock.Lock() b.diff = make(map[int]DiffStatus) b.diffLock.Unlock() callback(true) } } // SetDiffBase sets the text that is used as the base for diffing the buffer content func (b *Buffer) SetDiffBase(diffBase []byte) { b.diffBase = diffBase if diffBase == nil { b.diffBaseLineCount = 0 } else { b.diffBaseLineCount = strings.Count(string(diffBase), "\n") } b.UpdateDiff(func(synchronous bool) { screen.Redraw() }) } // DiffStatus returns the diff status for a line in the buffer func (b *Buffer) DiffStatus(lineN int) DiffStatus { b.diffLock.RLock() defer b.diffLock.RUnlock() // Note that the zero value for DiffStatus is equal to DSUnchanged return b.diff[lineN] } // WriteLog writes a string to the log buffer func WriteLog(s string) { LogBuf.EventHandler.Insert(LogBuf.End(), s) } // GetLogBuf returns the log buffer func GetLogBuf() *Buffer { return LogBuf } micro-2.0.9/internal/buffer/buffer_generated_test.go000066400000000000000000000543771405030104300226030ustar00rootroot00000000000000// This file is generated from VSCode model tests by the testgen tool. // DO NOT EDIT THIS FILE BY HAND; your changes will be overwritten! package buffer import "testing" func TestAuto1(t *testing.T) { check( t, []string{ "ioe", "", "yjct", "", "", }, []operation{ { start: Loc{1, 0}, end: Loc{1, 0}, text: []string{ "b", "r", "fq", }, }, { start: Loc{3, 0}, end: Loc{0, 1}, text: []string{ "", "", }, }, }, []string{ "ib", "r", "fqoe", "", "yjct", "", "", }, ) } func TestAuto2(t *testing.T) { check( t, []string{ "f", "littnhskrq", "utxvsizqnk", "lslqz", "jxn", "gmm", }, []operation{ { start: Loc{1, 0}, end: Loc{1, 0}, text: []string{ "", "o", }, }, { start: Loc{3, 1}, end: Loc{3, 1}, text: []string{ "zaq", "avb", }, }, { start: Loc{4, 1}, end: Loc{1, 5}, text: []string{ "jlr", "zl", "j", }, }, }, []string{ "f", "o", "litzaq", "avbtjlr", "zl", "jmm", }, ) } func TestAuto3(t *testing.T) { check( t, []string{ "ofw", "qsxmziuvzw", "rp", "qsnymek", "elth", "wmgzbwudxz", "iwsdkndh", "bujlbwb", "asuouxfv", "xuccnb", }, []operation{ { start: Loc{2, 3}, end: Loc{2, 3}, text: []string{ "", }, }, }, []string{ "ofw", "qsxmziuvzw", "rp", "qsnymek", "elth", "wmgzbwudxz", "iwsdkndh", "bujlbwb", "asuouxfv", "xuccnb", }, ) } func TestAuto4(t *testing.T) { check( t, []string{ "fefymj", "qum", "vmiwxxaiqq", "dz", "lnqdgorosf", }, []operation{ { start: Loc{2, 0}, end: Loc{4, 0}, text: []string{ "hp", }, }, { start: Loc{6, 0}, end: Loc{0, 1}, text: []string{ "kcg", "", "mpx", }, }, { start: Loc{1, 1}, end: Loc{1, 1}, text: []string{ "", "aw", "", }, }, { start: Loc{1, 1}, end: Loc{1, 1}, text: []string{ "vqr", "mo", }, }, { start: Loc{1, 3}, end: Loc{2, 4}, text: []string{ "xyc", }, }, }, []string{ "fehpmjkcg", "", "mpxq", "aw", "vqr", "moum", "vmiwxxaiqq", "dxycqdgorosf", }, ) } func TestBug19872UndoIsFunky(t *testing.T) { check( t, []string{ "something", " A", "", " B", "something else", }, []operation{ { start: Loc{0, 1}, end: Loc{1, 1}, text: []string{ "", }, }, { start: Loc{0, 2}, end: Loc{1, 3}, text: []string{ "", }, }, }, []string{ "something", "A", "B", "something else", }, ) } func TestBug19872UndoIsFunky_2(t *testing.T) { check( t, []string{ "something", "A", "B", "something else", }, []operation{ { start: Loc{0, 1}, end: Loc{0, 1}, text: []string{ " ", }, }, { start: Loc{0, 2}, end: Loc{0, 2}, text: []string{ "", " ", }, }, }, []string{ "something", " A", "", " B", "something else", }, ) } func TestInsertEmptyText(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{0, 0}, end: Loc{0, 0}, text: []string{ "", }, }, }, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestLastOpIsNoOp(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{0, 0}, end: Loc{1, 0}, text: []string{ "", }, }, { start: Loc{0, 3}, end: Loc{0, 3}, text: []string{ "", }, }, }, []string{ "y First Line", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestInsertTextWithoutNewline1(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{0, 0}, end: Loc{0, 0}, text: []string{ "foo ", }, }, }, []string{ "foo My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestInsertTextWithoutNewline2(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{2, 0}, end: Loc{2, 0}, text: []string{ " foo", }, }, }, []string{ "My foo First Line", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestInsertOneNewline(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{3, 0}, end: Loc{3, 0}, text: []string{ "", "", }, }, }, []string{ "My ", "First Line", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestInsertTextWithOneNewline(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{2, 0}, end: Loc{2, 0}, text: []string{ " new line", "No longer", }, }, }, []string{ "My new line", "No longer First Line", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestInsertTextWithTwoNewlines(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{2, 0}, end: Loc{2, 0}, text: []string{ " new line", "One more line in the middle", "No longer", }, }, }, []string{ "My new line", "One more line in the middle", "No longer First Line", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestInsertTextWithManyNewlines(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{2, 0}, end: Loc{2, 0}, text: []string{ "", "", "", "", "", }, }, }, []string{ "My", "", "", "", " First Line", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestInsertMultipleNewlines(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{2, 0}, end: Loc{2, 0}, text: []string{ "", "", "", "", "", }, }, { start: Loc{14, 2}, end: Loc{14, 2}, text: []string{ "a", "b", }, }, }, []string{ "My", "", "", "", " First Line", "\t\tMy Second Line", " Third Linea", "b", "", "1", }, ) } func TestDeleteEmptyText(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{0, 0}, end: Loc{0, 0}, text: []string{ "", }, }, }, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestDeleteTextFromOneLine(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{0, 0}, end: Loc{1, 0}, text: []string{ "", }, }, }, []string{ "y First Line", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestDeleteTextFromOneLine2(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{0, 0}, end: Loc{2, 0}, text: []string{ "a", }, }, }, []string{ "a First Line", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestDeleteAllTextFromALine(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{0, 0}, end: Loc{13, 0}, text: []string{ "", }, }, }, []string{ "", "\t\tMy Second Line", " Third Line", "", "1", }, ) } func TestDeleteTextFromTwoLines(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{3, 0}, end: Loc{5, 1}, text: []string{ "", }, }, }, []string{ "My Second Line", " Third Line", "", "1", }, ) } func TestDeleteTextFromManyLines(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{3, 0}, end: Loc{4, 2}, text: []string{ "", }, }, }, []string{ "My Third Line", "", "1", }, ) } func TestDeleteEverything(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "1", }, []operation{ { start: Loc{0, 0}, end: Loc{1, 4}, text: []string{ "", }, }, }, []string{ "", }, ) } func TestTwoUnrelatedEdits(t *testing.T) { check( t, []string{ "My First Line", "\t\tMy Second Line", " Third Line", "", "123", }, []operation{ { start: Loc{0, 1}, end: Loc{2, 1}, text: []string{ "\t", }, }, { start: Loc{0, 2}, end: Loc{4, 2}, text: []string{ "", }, }, }, []string{ "My First Line", "\tMy Second Line", "Third Line", "", "123", }, ) } func TestTwoEditsOnOneLine(t *testing.T) { check( t, []string{ "\t\tfirst\t ", "\t\tsecond line", "\tthird line", "fourth line", "\t\t\t\t", }, []operation{ { start: Loc{2, 4}, end: Loc{6, 4}, text: []string{ "", }, }, { start: Loc{11, 4}, end: Loc{15, 4}, text: []string{ "", }, }, }, []string{ "\t\tfirst\t ", "\t\tsecond line", "\tthird line", "fourth line", "\t\tfifth\t\t", }, ) } func TestManyEdits(t *testing.T) { check( t, []string{ "{\"x\" : 1}", }, []operation{ { start: Loc{1, 0}, end: Loc{1, 0}, text: []string{ "\n ", }, }, { start: Loc{4, 0}, end: Loc{5, 0}, text: []string{ "", }, }, { start: Loc{8, 0}, end: Loc{8, 0}, text: []string{ "\n", }, }, }, []string{ "{", " \"x\": 1", "}", }, ) } func TestManyEditsReversed(t *testing.T) { check( t, []string{ "{", " \"x\": 1", "}", }, []operation{ { start: Loc{1, 0}, end: Loc{2, 1}, text: []string{ "", }, }, { start: Loc{5, 1}, end: Loc{5, 1}, text: []string{ " ", }, }, { start: Loc{8, 1}, end: Loc{0, 2}, text: []string{ "", }, }, }, []string{ "{\"x\" : 1}", }, ) } func TestReplacingNewlines1(t *testing.T) { check( t, []string{ "{", "\"a\": true,", "", "\"b\": true", "}", }, []operation{ { start: Loc{1, 0}, end: Loc{0, 1}, text: []string{ "", "\t", }, }, { start: Loc{10, 1}, end: Loc{0, 3}, text: []string{ "", "\t", }, }, }, []string{ "{", "\t\"a\": true,", "\t\"b\": true", "}", }, ) } func TestReplacingNewlines2(t *testing.T) { check( t, []string{ "some text", "some more text", "now comes an empty line", "", "after empty line", "and the last line", }, []operation{ { start: Loc{4, 0}, end: Loc{0, 2}, text: []string{ " text", "some more text", "some more text", }, }, { start: Loc{1, 2}, end: Loc{0, 3}, text: []string{ "o more lines", "asd", "asd", "asd", }, }, { start: Loc{0, 4}, end: Loc{5, 4}, text: []string{ "zzzzzzzz", }, }, { start: Loc{10, 4}, end: Loc{15, 5}, text: []string{ "1", "2", "3", "4", }, }, }, []string{ "some text", "some more text", "some more textno more lines", "asd", "asd", "asd", "zzzzzzzz empt1", "2", "3", "4ne", }, ) } func TestAdvanced1(t *testing.T) { check( t, []string{ " { \"d\": [", " null", " ] /*comment*/", " ,\"e\": /*comment*/ [null] }", }, []operation{ { start: Loc{0, 0}, end: Loc{1, 0}, text: []string{ "", }, }, { start: Loc{2, 0}, end: Loc{9, 0}, text: []string{ "", " ", }, }, { start: Loc{15, 0}, end: Loc{13, 1}, text: []string{ "", " ", }, }, { start: Loc{17, 1}, end: Loc{8, 2}, text: []string{ "", " ", }, }, { start: Loc{21, 2}, end: Loc{8, 3}, text: []string{ "", }, }, { start: Loc{9, 3}, end: Loc{9, 3}, text: []string{ "", " ", }, }, { start: Loc{27, 3}, end: Loc{27, 3}, text: []string{ "", " ", }, }, { start: Loc{31, 3}, end: Loc{31, 3}, text: []string{ "", " ", }, }, { start: Loc{32, 3}, end: Loc{33, 3}, text: []string{ "", "", }, }, }, []string{ "{", " \"d\": [", " null", " ] /*comment*/,", " \"e\": /*comment*/ [", " null", " ]", "}", }, ) } func TestAdvancedSimplified(t *testing.T) { check( t, []string{ " abc", " ,def", }, []operation{ { start: Loc{0, 0}, end: Loc{3, 0}, text: []string{ "", }, }, { start: Loc{6, 0}, end: Loc{1, 1}, text: []string{ "", }, }, { start: Loc{2, 1}, end: Loc{2, 1}, text: []string{ "", "", }, }, }, []string{ "abc,", "def", }, ) } func TestIssue144(t *testing.T) { check( t, []string{ "package caddy", "", "func main() {", "\tfmt.Println(\"Hello World! :)\")", "}", "", }, []operation{ { start: Loc{0, 0}, end: Loc{0, 5}, text: []string{ "package caddy", "", "import \"fmt\"", "", "func main() {", "\tfmt.Println(\"Hello World! :)\")", "}", "", }, }, }, []string{ "package caddy", "", "import \"fmt\"", "", "func main() {", "\tfmt.Println(\"Hello World! :)\")", "}", "", }, ) } func TestIssue2586ReplacingSelectedEndOfLineWithNewlineLocksUpTheDocument(t *testing.T) { check( t, []string{ "something", "interesting", }, []operation{ { start: Loc{9, 0}, end: Loc{0, 1}, text: []string{ "", "", }, }, }, []string{ "something", "interesting", }, ) } func TestIssue3980(t *testing.T) { check( t, []string{ "class A {", " someProperty = false;", " someMethod() {", " this.someMethod();", " }", "}", }, []operation{ { start: Loc{7, 0}, end: Loc{8, 0}, text: []string{ "", "", }, }, { start: Loc{16, 2}, end: Loc{17, 2}, text: []string{ "", "", }, }, { start: Loc{17, 2}, end: Loc{17, 2}, text: []string{ " ", }, }, { start: Loc{4, 3}, end: Loc{4, 3}, text: []string{ " ", }, }, }, []string{ "class A", "{", " someProperty = false;", " someMethod()", " {", " this.someMethod();", " }", "}", }, ) } func TestTouchingEditsTwoInsertsAtTheSamePosition(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{0, 0}, text: []string{ "a", }, }, { start: Loc{0, 0}, end: Loc{0, 0}, text: []string{ "b", }, }, }, []string{ "abhello world", }, ) } func TestTouchingEditsInsertAndReplaceTouching(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{0, 0}, text: []string{ "b", }, }, { start: Loc{0, 0}, end: Loc{2, 0}, text: []string{ "ab", }, }, }, []string{ "babllo world", }, ) } func TestTouchingEditsTwoTouchingReplaces(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{1, 0}, text: []string{ "H", }, }, { start: Loc{1, 0}, end: Loc{2, 0}, text: []string{ "E", }, }, }, []string{ "HEllo world", }, ) } func TestTouchingEditsTwoTouchingDeletes(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{1, 0}, text: []string{ "", }, }, { start: Loc{1, 0}, end: Loc{2, 0}, text: []string{ "", }, }, }, []string{ "llo world", }, ) } func TestTouchingEditsInsertAndReplace(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{0, 0}, text: []string{ "H", }, }, { start: Loc{0, 0}, end: Loc{2, 0}, text: []string{ "e", }, }, }, []string{ "Hello world", }, ) } func TestTouchingEditsReplaceAndInsert(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{2, 0}, text: []string{ "H", }, }, { start: Loc{2, 0}, end: Loc{2, 0}, text: []string{ "e", }, }, }, []string{ "Hello world", }, ) } func TestSingleDelete1(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{1, 0}, text: []string{ "", }, }, }, []string{ "ello world", }, ) } func TestSingleDelete2(t *testing.T) { check( t, []string{ "helloworld", }, []operation{ { start: Loc{2, 0}, end: Loc{7, 0}, text: []string{ "", }, }, }, []string{ "herld", }, ) } func TestSingleDelete3(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{5, 0}, text: []string{ "", }, }, }, []string{ " world", }, ) } func TestSingleDelete4(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{1, 0}, end: Loc{6, 0}, text: []string{ "", }, }, }, []string{ "hworld", }, ) } func TestSingleDelete5(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{11, 0}, text: []string{ "", }, }, }, []string{ "", }, ) } func TestMultiDelete6(t *testing.T) { check( t, []string{ "hello world", "hello world", "hello world", }, []operation{ { start: Loc{5, 0}, end: Loc{5, 2}, text: []string{ "", }, }, }, []string{ "hello world", }, ) } func TestMultiDelete7(t *testing.T) { check( t, []string{ "hello world", "hello world", "hello world", }, []operation{ { start: Loc{11, 0}, end: Loc{11, 2}, text: []string{ "", }, }, }, []string{ "hello world", }, ) } func TestMultiDelete8(t *testing.T) { check( t, []string{ "hello world", "hello world", "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{0, 2}, text: []string{ "", }, }, }, []string{ "hello world", }, ) } func TestMultiDelete9(t *testing.T) { check( t, []string{ "hello world", "hello world", "hello world", }, []operation{ { start: Loc{11, 0}, end: Loc{0, 2}, text: []string{ "", }, }, }, []string{ "hello worldhello world", }, ) } func TestSingleInsert1(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{0, 0}, text: []string{ "xx", }, }, }, []string{ "xxhello world", }, ) } func TestSingleInsert2(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{1, 0}, end: Loc{1, 0}, text: []string{ "xx", }, }, }, []string{ "hxxello world", }, ) } func TestSingleInsert3(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{5, 0}, end: Loc{5, 0}, text: []string{ "xx", }, }, }, []string{ "helloxx world", }, ) } func TestSingleInsert4(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{6, 0}, end: Loc{6, 0}, text: []string{ "xx", }, }, }, []string{ "hello xxworld", }, ) } func TestSingleInsert5(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{11, 0}, end: Loc{11, 0}, text: []string{ "xx", }, }, }, []string{ "hello worldxx", }, ) } func TestMultiInsert6(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{0, 0}, end: Loc{0, 0}, text: []string{ "\n", }, }, }, []string{ "", "hello world", }, ) } func TestMultiInsert7(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{11, 0}, end: Loc{11, 0}, text: []string{ "\n", }, }, }, []string{ "hello world", "", }, ) } func TestMultiInsert8(t *testing.T) { check( t, []string{ "hello world", }, []operation{ { start: Loc{6, 0}, end: Loc{6, 0}, text: []string{ "\n", }, }, }, []string{ "hello ", "world", }, ) } func TestMultiInsert9(t *testing.T) { check( t, []string{ "hello world", "hello world", }, []operation{ { start: Loc{6, 0}, end: Loc{6, 0}, text: []string{ "xx\nyy", }, }, }, []string{ "hello xx", "yyworld", "hello world", }, ) } micro-2.0.9/internal/buffer/buffer_test.go000066400000000000000000000150721405030104300205520ustar00rootroot00000000000000package buffer import ( "math/rand" "strings" "testing" "github.com/stretchr/testify/assert" lua "github.com/yuin/gopher-lua" "github.com/zyedidia/micro/v2/internal/config" ulua "github.com/zyedidia/micro/v2/internal/lua" "github.com/zyedidia/micro/v2/internal/util" ) type operation struct { start Loc end Loc text []string } func init() { ulua.L = lua.NewState() config.InitGlobalSettings() config.GlobalSettings["backup"] = false config.GlobalSettings["fastdirty"] = true } func check(t *testing.T, before []string, operations []operation, after []string) { assert := assert.New(t) b := NewBufferFromString(strings.Join(before, "\n"), "", BTDefault) assert.NotEqual("", b.GetName()) assert.Equal(false, b.ExternallyModified()) assert.Equal(false, b.Modified()) assert.Equal(1, b.NumCursors()) checkText := func(lines []string) { assert.Equal([]byte(strings.Join(lines, "\n")), b.Bytes()) assert.Equal(len(lines), b.LinesNum()) for i, s := range lines { assert.Equal(s, b.Line(i)) assert.Equal([]byte(s), b.LineBytes(i)) } } checkText(before) var cursors []*Cursor for _, op := range operations { cursor := NewCursor(b, op.start) cursor.SetSelectionStart(op.start) cursor.SetSelectionEnd(op.end) b.AddCursor(cursor) cursors = append(cursors, cursor) } assert.Equal(1+len(operations), b.NumCursors()) for i, op := range operations { cursor := cursors[i] b.SetCurCursor(cursor.Num) cursor.DeleteSelection() b.Insert(cursor.Loc, strings.Join(op.text, "\n")) } checkText(after) // must have exactly two events per operation (delete and insert) for range operations { b.UndoOneEvent() b.UndoOneEvent() } checkText(before) for i, op := range operations { cursor := cursors[i] if op.start == op.end { assert.Equal(op.start, cursor.Loc) } else { assert.Equal(op.start, cursor.CurSelection[0]) assert.Equal(op.end, cursor.CurSelection[1]) } } for range operations { b.RedoOneEvent() b.RedoOneEvent() } checkText(after) b.Close() } const maxLineLength = 200 var alphabet = []rune(" abcdeäم📚") func randomString(length int) string { runes := make([]rune, length) for i := range runes { runes[i] = alphabet[rand.Intn(len(alphabet))] } return string(runes) } func randomText(nLines int) string { lines := make([]string, nLines) for i := range lines { lines[i] = randomString(rand.Intn(maxLineLength + 1)) } return strings.Join(lines, "\n") } func benchCreateAndClose(testingB *testing.B, nLines int) { rand.Seed(int64(nLines)) text := randomText(nLines) testingB.ResetTimer() for i := 0; i < testingB.N; i++ { b := NewBufferFromString(text, "", BTDefault) b.Close() } } func benchRead(testingB *testing.B, nLines int) { rand.Seed(int64(nLines)) b := NewBufferFromString(randomText(nLines), "", BTDefault) testingB.ResetTimer() for i := 0; i < testingB.N; i++ { b.Bytes() for j := 0; j < b.LinesNum(); j++ { b.Line(j) b.LineBytes(j) } } testingB.StopTimer() b.Close() } func benchEdit(testingB *testing.B, nLines, nCursors int) { rand.Seed(int64(nLines + nCursors)) b := NewBufferFromString(randomText(nLines), "", BTDefault) regionSize := nLines / nCursors operations := make([]operation, nCursors) for i := range operations { startLine := (i * regionSize) + rand.Intn(regionSize-5) startColumn := rand.Intn(util.CharacterCountInString(b.Line(startLine)) + 1) endLine := startLine + 1 + rand.Intn(5) endColumn := rand.Intn(util.CharacterCountInString(b.Line(endLine)) + 1) operations[i] = operation{ start: Loc{startColumn, startLine}, end: Loc{endColumn, endLine}, text: []string{randomText(2 + rand.Intn(4))}, } } testingB.ResetTimer() for i := 0; i < testingB.N; i++ { b.SetCursors([]*Cursor{}) var cursors []*Cursor for _, op := range operations { cursor := NewCursor(b, op.start) cursor.SetSelectionStart(op.start) cursor.SetSelectionEnd(op.end) b.AddCursor(cursor) cursors = append(cursors, cursor) } for j, op := range operations { cursor := cursors[j] b.SetCurCursor(cursor.Num) cursor.DeleteSelection() b.Insert(cursor.Loc, op.text[0]) } for b.UndoStack.Peek() != nil { b.UndoOneEvent() } } testingB.StopTimer() b.Close() } func BenchmarkCreateAndClose10Lines(b *testing.B) { benchCreateAndClose(b, 10) } func BenchmarkCreateAndClose100Lines(b *testing.B) { benchCreateAndClose(b, 100) } func BenchmarkCreateAndClose1000Lines(b *testing.B) { benchCreateAndClose(b, 1000) } func BenchmarkCreateAndClose10000Lines(b *testing.B) { benchCreateAndClose(b, 10000) } func BenchmarkCreateAndClose100000Lines(b *testing.B) { benchCreateAndClose(b, 100000) } func BenchmarkCreateAndClose1000000Lines(b *testing.B) { benchCreateAndClose(b, 1000000) } func BenchmarkRead10Lines(b *testing.B) { benchRead(b, 10) } func BenchmarkRead100Lines(b *testing.B) { benchRead(b, 100) } func BenchmarkRead1000Lines(b *testing.B) { benchRead(b, 1000) } func BenchmarkRead10000Lines(b *testing.B) { benchRead(b, 10000) } func BenchmarkRead100000Lines(b *testing.B) { benchRead(b, 100000) } func BenchmarkRead1000000Lines(b *testing.B) { benchRead(b, 1000000) } func BenchmarkEdit10Lines1Cursor(b *testing.B) { benchEdit(b, 10, 1) } func BenchmarkEdit100Lines1Cursor(b *testing.B) { benchEdit(b, 100, 1) } func BenchmarkEdit100Lines10Cursors(b *testing.B) { benchEdit(b, 100, 10) } func BenchmarkEdit1000Lines1Cursor(b *testing.B) { benchEdit(b, 1000, 1) } func BenchmarkEdit1000Lines10Cursors(b *testing.B) { benchEdit(b, 1000, 10) } func BenchmarkEdit1000Lines100Cursors(b *testing.B) { benchEdit(b, 1000, 100) } func BenchmarkEdit10000Lines1Cursor(b *testing.B) { benchEdit(b, 10000, 1) } func BenchmarkEdit10000Lines10Cursors(b *testing.B) { benchEdit(b, 10000, 10) } func BenchmarkEdit10000Lines100Cursors(b *testing.B) { benchEdit(b, 10000, 100) } func BenchmarkEdit10000Lines1000Cursors(b *testing.B) { benchEdit(b, 10000, 1000) } func BenchmarkEdit100000Lines1Cursor(b *testing.B) { benchEdit(b, 100000, 1) } func BenchmarkEdit100000Lines10Cursors(b *testing.B) { benchEdit(b, 100000, 10) } func BenchmarkEdit100000Lines100Cursors(b *testing.B) { benchEdit(b, 100000, 100) } func BenchmarkEdit100000Lines1000Cursors(b *testing.B) { benchEdit(b, 100000, 1000) } func BenchmarkEdit1000000Lines1Cursor(b *testing.B) { benchEdit(b, 1000000, 1) } func BenchmarkEdit1000000Lines10Cursors(b *testing.B) { benchEdit(b, 1000000, 10) } func BenchmarkEdit1000000Lines100Cursors(b *testing.B) { benchEdit(b, 1000000, 100) } func BenchmarkEdit1000000Lines1000Cursors(b *testing.B) { benchEdit(b, 1000000, 1000) } micro-2.0.9/internal/buffer/cursor.go000066400000000000000000000245631405030104300175640ustar00rootroot00000000000000package buffer import ( "github.com/zyedidia/micro/v2/internal/clipboard" "github.com/zyedidia/micro/v2/internal/util" ) // InBounds returns whether the given location is a valid character position in the given buffer func InBounds(pos Loc, buf *Buffer) bool { if pos.Y < 0 || pos.Y >= len(buf.lines) || pos.X < 0 || pos.X > util.CharacterCount(buf.LineBytes(pos.Y)) { return false } return true } // The Cursor struct stores the location of the cursor in the buffer // as well as the selection type Cursor struct { buf *Buffer Loc // Last cursor x position LastVisualX int // The current selection as a range of character numbers (inclusive) CurSelection [2]Loc // The original selection as a range of character numbers // This is used for line and word selection where it is necessary // to know what the original selection was OrigSelection [2]Loc // Which cursor index is this (for multiple cursors) Num int } func NewCursor(b *Buffer, l Loc) *Cursor { c := &Cursor{ buf: b, Loc: l, } c.StoreVisualX() return c } func (c *Cursor) SetBuf(b *Buffer) { c.buf = b } func (c *Cursor) Buf() *Buffer { return c.buf } // Goto puts the cursor at the given cursor's location and gives // the current cursor its selection too func (c *Cursor) Goto(b Cursor) { c.X, c.Y, c.LastVisualX = b.X, b.Y, b.LastVisualX c.OrigSelection, c.CurSelection = b.OrigSelection, b.CurSelection } // GotoLoc puts the cursor at the given cursor's location and gives // the current cursor its selection too func (c *Cursor) GotoLoc(l Loc) { c.X, c.Y = l.X, l.Y c.StoreVisualX() } // GetVisualX returns the x value of the cursor in visual spaces func (c *Cursor) GetVisualX() int { if c.buf.GetVisualX != nil { return c.buf.GetVisualX(c.Loc) } if c.X <= 0 { c.X = 0 return 0 } bytes := c.buf.LineBytes(c.Y) tabsize := int(c.buf.Settings["tabsize"].(float64)) return util.StringWidth(bytes, c.X, tabsize) } // GetCharPosInLine gets the char position of a visual x y // coordinate (this is necessary because tabs are 1 char but // 4 visual spaces) func (c *Cursor) GetCharPosInLine(b []byte, visualPos int) int { tabsize := int(c.buf.Settings["tabsize"].(float64)) return util.GetCharPosInLine(b, visualPos, tabsize) } // Start moves the cursor to the start of the line it is on func (c *Cursor) Start() { c.X = 0 c.LastVisualX = c.GetVisualX() } // StartOfText moves the cursor to the first non-whitespace rune of // the line it is on func (c *Cursor) StartOfText() { c.Start() for util.IsWhitespace(c.RuneUnder(c.X)) { if c.X == util.CharacterCount(c.buf.LineBytes(c.Y)) { break } c.Right() } } // IsStartOfText returns whether the cursor is at the first // non-whitespace rune of the line it is on func (c *Cursor) IsStartOfText() bool { x := 0 for util.IsWhitespace(c.RuneUnder(x)) { if x == util.CharacterCount(c.buf.LineBytes(c.Y)) { break } x++ } return c.X == x } // End moves the cursor to the end of the line it is on func (c *Cursor) End() { c.X = util.CharacterCount(c.buf.LineBytes(c.Y)) c.LastVisualX = c.GetVisualX() } // CopySelection copies the user's selection to either "primary" // or "clipboard" func (c *Cursor) CopySelection(target clipboard.Register) { if c.HasSelection() { if target != clipboard.PrimaryReg || c.buf.Settings["useprimary"].(bool) { clipboard.WriteMulti(string(c.GetSelection()), target, c.Num, c.buf.NumCursors()) } } } // ResetSelection resets the user's selection func (c *Cursor) ResetSelection() { c.CurSelection[0] = c.buf.Start() c.CurSelection[1] = c.buf.Start() } // SetSelectionStart sets the start of the selection func (c *Cursor) SetSelectionStart(pos Loc) { c.CurSelection[0] = pos } // SetSelectionEnd sets the end of the selection func (c *Cursor) SetSelectionEnd(pos Loc) { c.CurSelection[1] = pos } // HasSelection returns whether or not the user has selected anything func (c *Cursor) HasSelection() bool { return c.CurSelection[0] != c.CurSelection[1] } // DeleteSelection deletes the currently selected text func (c *Cursor) DeleteSelection() { if c.CurSelection[0].GreaterThan(c.CurSelection[1]) { c.buf.Remove(c.CurSelection[1], c.CurSelection[0]) c.Loc = c.CurSelection[1] } else if !c.HasSelection() { return } else { c.buf.Remove(c.CurSelection[0], c.CurSelection[1]) c.Loc = c.CurSelection[0] } } // Deselect closes the cursor's current selection // Start indicates whether the cursor should be placed // at the start or end of the selection func (c *Cursor) Deselect(start bool) { if c.HasSelection() { if start { c.Loc = c.CurSelection[0] } else { c.Loc = c.CurSelection[1].Move(-1, c.buf) } c.ResetSelection() c.StoreVisualX() } } // GetSelection returns the cursor's selection func (c *Cursor) GetSelection() []byte { if InBounds(c.CurSelection[0], c.buf) && InBounds(c.CurSelection[1], c.buf) { if c.CurSelection[0].GreaterThan(c.CurSelection[1]) { return c.buf.Substr(c.CurSelection[1], c.CurSelection[0]) } return c.buf.Substr(c.CurSelection[0], c.CurSelection[1]) } return []byte{} } // SelectLine selects the current line func (c *Cursor) SelectLine() { c.Start() c.SetSelectionStart(c.Loc) c.End() if len(c.buf.lines)-1 > c.Y { c.SetSelectionEnd(c.Loc.Move(1, c.buf)) } else { c.SetSelectionEnd(c.Loc) } c.OrigSelection = c.CurSelection } // AddLineToSelection adds the current line to the selection func (c *Cursor) AddLineToSelection() { if c.Loc.LessThan(c.OrigSelection[0]) { c.Start() c.SetSelectionStart(c.Loc) c.SetSelectionEnd(c.OrigSelection[1]) } if c.Loc.GreaterThan(c.OrigSelection[1]) { c.End() c.SetSelectionEnd(c.Loc.Move(1, c.buf)) c.SetSelectionStart(c.OrigSelection[0]) } if c.Loc.LessThan(c.OrigSelection[1]) && c.Loc.GreaterThan(c.OrigSelection[0]) { c.CurSelection = c.OrigSelection } } // UpN moves the cursor up N lines (if possible) func (c *Cursor) UpN(amount int) { proposedY := c.Y - amount if proposedY < 0 { proposedY = 0 } else if proposedY >= len(c.buf.lines) { proposedY = len(c.buf.lines) - 1 } bytes := c.buf.LineBytes(proposedY) c.X = c.GetCharPosInLine(bytes, c.LastVisualX) if c.X > util.CharacterCount(bytes) || (amount < 0 && proposedY == c.Y) { c.X = util.CharacterCount(bytes) c.StoreVisualX() } if c.X < 0 || (amount > 0 && proposedY == c.Y) { c.X = 0 c.StoreVisualX() } c.Y = proposedY } // DownN moves the cursor down N lines (if possible) func (c *Cursor) DownN(amount int) { c.UpN(-amount) } // Up moves the cursor up one line (if possible) func (c *Cursor) Up() { c.UpN(1) } // Down moves the cursor down one line (if possible) func (c *Cursor) Down() { c.DownN(1) } // Left moves the cursor left one cell (if possible) or to // the previous line if it is at the beginning func (c *Cursor) Left() { if c.Loc == c.buf.Start() { return } if c.X > 0 { c.X-- } else { c.Up() c.End() } c.StoreVisualX() } // Right moves the cursor right one cell (if possible) or // to the next line if it is at the end func (c *Cursor) Right() { if c.Loc == c.buf.End() { return } if c.X < util.CharacterCount(c.buf.LineBytes(c.Y)) { c.X++ } else { c.Down() c.Start() } c.StoreVisualX() } // Relocate makes sure that the cursor is inside the bounds // of the buffer If it isn't, it moves it to be within the // buffer's lines func (c *Cursor) Relocate() { if c.Y < 0 { c.Y = 0 } else if c.Y >= len(c.buf.lines) { c.Y = len(c.buf.lines) - 1 } if c.X < 0 { c.X = 0 } else if c.X > util.CharacterCount(c.buf.LineBytes(c.Y)) { c.X = util.CharacterCount(c.buf.LineBytes(c.Y)) } } // SelectWord selects the word the cursor is currently on func (c *Cursor) SelectWord() { if len(c.buf.LineBytes(c.Y)) == 0 { return } if !util.IsWordChar(c.RuneUnder(c.X)) { c.SetSelectionStart(c.Loc) c.SetSelectionEnd(c.Loc.Move(1, c.buf)) c.OrigSelection = c.CurSelection return } forward, backward := c.X, c.X for backward > 0 && util.IsWordChar(c.RuneUnder(backward-1)) { backward-- } c.SetSelectionStart(Loc{backward, c.Y}) c.OrigSelection[0] = c.CurSelection[0] lineLen := util.CharacterCount(c.buf.LineBytes(c.Y)) - 1 for forward < lineLen && util.IsWordChar(c.RuneUnder(forward+1)) { forward++ } c.SetSelectionEnd(Loc{forward, c.Y}.Move(1, c.buf)) c.OrigSelection[1] = c.CurSelection[1] c.Loc = c.CurSelection[1] } // AddWordToSelection adds the word the cursor is currently on // to the selection func (c *Cursor) AddWordToSelection() { if c.Loc.GreaterThan(c.OrigSelection[0]) && c.Loc.LessThan(c.OrigSelection[1]) { c.CurSelection = c.OrigSelection return } if c.Loc.LessThan(c.OrigSelection[0]) { backward := c.X for backward > 0 && util.IsWordChar(c.RuneUnder(backward-1)) { backward-- } c.SetSelectionStart(Loc{backward, c.Y}) c.SetSelectionEnd(c.OrigSelection[1]) } if c.Loc.GreaterThan(c.OrigSelection[1]) { forward := c.X lineLen := util.CharacterCount(c.buf.LineBytes(c.Y)) - 1 for forward < lineLen && util.IsWordChar(c.RuneUnder(forward+1)) { forward++ } c.SetSelectionEnd(Loc{forward, c.Y}.Move(1, c.buf)) c.SetSelectionStart(c.OrigSelection[0]) } c.Loc = c.CurSelection[1] } // SelectTo selects from the current cursor location to the given // location func (c *Cursor) SelectTo(loc Loc) { if loc.GreaterThan(c.OrigSelection[0]) { c.SetSelectionStart(c.OrigSelection[0]) c.SetSelectionEnd(loc) } else { c.SetSelectionStart(loc) c.SetSelectionEnd(c.OrigSelection[0]) } } // WordRight moves the cursor one word to the right func (c *Cursor) WordRight() { for util.IsWhitespace(c.RuneUnder(c.X)) { if c.X == util.CharacterCount(c.buf.LineBytes(c.Y)) { c.Right() return } c.Right() } c.Right() for util.IsWordChar(c.RuneUnder(c.X)) { if c.X == util.CharacterCount(c.buf.LineBytes(c.Y)) { return } c.Right() } } // WordLeft moves the cursor one word to the left func (c *Cursor) WordLeft() { c.Left() for util.IsWhitespace(c.RuneUnder(c.X)) { if c.X == 0 { return } c.Left() } c.Left() for util.IsWordChar(c.RuneUnder(c.X)) { if c.X == 0 { return } c.Left() } c.Right() } // RuneUnder returns the rune under the given x position func (c *Cursor) RuneUnder(x int) rune { line := c.buf.LineBytes(c.Y) if len(line) == 0 || x >= util.CharacterCount(line) { return '\n' } else if x < 0 { x = 0 } i := 0 for len(line) > 0 { r, _, size := util.DecodeCharacter(line) line = line[size:] if i == x { return r } i++ } return '\n' } func (c *Cursor) StoreVisualX() { c.LastVisualX = c.GetVisualX() } micro-2.0.9/internal/buffer/eventhandler.go000066400000000000000000000200011405030104300207050ustar00rootroot00000000000000package buffer import ( "bytes" "time" dmp "github.com/sergi/go-diff/diffmatchpatch" "github.com/zyedidia/micro/v2/internal/config" ulua "github.com/zyedidia/micro/v2/internal/lua" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/util" luar "layeh.com/gopher-luar" ) const ( // Opposite and undoing events must have opposite values // TextEventInsert represents an insertion event TextEventInsert = 1 // TextEventRemove represents a deletion event TextEventRemove = -1 // TextEventReplace represents a replace event TextEventReplace = 0 undoThreshold = 1000 // If two events are less than n milliseconds apart, undo both of them ) // TextEvent holds data for a manipulation on some text that can be undone type TextEvent struct { C Cursor EventType int Deltas []Delta Time time.Time } // A Delta is a change to the buffer type Delta struct { Text []byte Start Loc End Loc } // DoTextEvent runs a text event func (eh *EventHandler) DoTextEvent(t *TextEvent, useUndo bool) { oldl := eh.buf.LinesNum() if useUndo { eh.Execute(t) } else { ExecuteTextEvent(t, eh.buf) } if len(t.Deltas) != 1 { return } text := t.Deltas[0].Text start := t.Deltas[0].Start lastnl := -1 var endX int var textX int if t.EventType == TextEventInsert { linecount := eh.buf.LinesNum() - oldl textcount := util.CharacterCount(text) lastnl = bytes.LastIndex(text, []byte{'\n'}) if lastnl >= 0 { endX = util.CharacterCount(text[lastnl+1:]) textX = endX } else { endX = start.X + textcount textX = textcount } t.Deltas[0].End = clamp(Loc{endX, start.Y + linecount}, eh.buf.LineArray) } end := t.Deltas[0].End for _, c := range eh.cursors { move := func(loc Loc) Loc { if t.EventType == TextEventInsert { if start.Y != loc.Y && loc.GreaterThan(start) { loc.Y += end.Y - start.Y } else if loc.Y == start.Y && loc.GreaterEqual(start) { loc.Y += end.Y - start.Y if lastnl >= 0 { loc.X += textX - start.X } else { loc.X += textX } } return loc } else { if loc.Y != end.Y && loc.GreaterThan(end) { loc.Y -= end.Y - start.Y } else if loc.Y == end.Y && loc.GreaterEqual(end) { loc = loc.MoveLA(-DiffLA(start, end, eh.buf.LineArray), eh.buf.LineArray) } return loc } } c.Loc = move(c.Loc) c.CurSelection[0] = move(c.CurSelection[0]) c.CurSelection[1] = move(c.CurSelection[1]) c.OrigSelection[0] = move(c.OrigSelection[0]) c.OrigSelection[1] = move(c.OrigSelection[1]) c.Relocate() c.LastVisualX = c.GetVisualX() } } // ExecuteTextEvent runs a text event func ExecuteTextEvent(t *TextEvent, buf *SharedBuffer) { if t.EventType == TextEventInsert { for _, d := range t.Deltas { buf.insert(d.Start, d.Text) } } else if t.EventType == TextEventRemove { for i, d := range t.Deltas { t.Deltas[i].Text = buf.remove(d.Start, d.End) } } else if t.EventType == TextEventReplace { for i, d := range t.Deltas { t.Deltas[i].Text = buf.remove(d.Start, d.End) buf.insert(d.Start, d.Text) t.Deltas[i].Start = d.Start t.Deltas[i].End = Loc{d.Start.X + util.CharacterCount(d.Text), d.Start.Y} } for i, j := 0, len(t.Deltas)-1; i < j; i, j = i+1, j-1 { t.Deltas[i], t.Deltas[j] = t.Deltas[j], t.Deltas[i] } } } // UndoTextEvent undoes a text event func (eh *EventHandler) UndoTextEvent(t *TextEvent) { t.EventType = -t.EventType eh.DoTextEvent(t, false) } // EventHandler executes text manipulations and allows undoing and redoing type EventHandler struct { buf *SharedBuffer cursors []*Cursor active int UndoStack *TEStack RedoStack *TEStack } // NewEventHandler returns a new EventHandler func NewEventHandler(buf *SharedBuffer, cursors []*Cursor) *EventHandler { eh := new(EventHandler) eh.UndoStack = new(TEStack) eh.RedoStack = new(TEStack) eh.buf = buf eh.cursors = cursors return eh } // ApplyDiff takes a string and runs the necessary insertion and deletion events to make // the buffer equal to that string // This means that we can transform the buffer into any string and still preserve undo/redo // through insert and delete events func (eh *EventHandler) ApplyDiff(new string) { differ := dmp.New() diff := differ.DiffMain(string(eh.buf.Bytes()), new, false) loc := eh.buf.Start() for _, d := range diff { if d.Type == dmp.DiffDelete { eh.Remove(loc, loc.MoveLA(util.CharacterCountInString(d.Text), eh.buf.LineArray)) } else { if d.Type == dmp.DiffInsert { eh.Insert(loc, d.Text) } loc = loc.MoveLA(util.CharacterCountInString(d.Text), eh.buf.LineArray) } } } // Insert creates an insert text event and executes it func (eh *EventHandler) Insert(start Loc, textStr string) { text := []byte(textStr) eh.InsertBytes(start, text) } // InsertBytes creates an insert text event and executes it func (eh *EventHandler) InsertBytes(start Loc, text []byte) { if len(text) == 0 { return } start = clamp(start, eh.buf.LineArray) e := &TextEvent{ C: *eh.cursors[eh.active], EventType: TextEventInsert, Deltas: []Delta{{text, start, Loc{0, 0}}}, Time: time.Now(), } eh.DoTextEvent(e, true) } // Remove creates a remove text event and executes it func (eh *EventHandler) Remove(start, end Loc) { if start == end { return } start = clamp(start, eh.buf.LineArray) end = clamp(end, eh.buf.LineArray) e := &TextEvent{ C: *eh.cursors[eh.active], EventType: TextEventRemove, Deltas: []Delta{{[]byte{}, start, end}}, Time: time.Now(), } eh.DoTextEvent(e, true) } // MultipleReplace creates an multiple insertions executes them func (eh *EventHandler) MultipleReplace(deltas []Delta) { e := &TextEvent{ C: *eh.cursors[eh.active], EventType: TextEventReplace, Deltas: deltas, Time: time.Now(), } eh.Execute(e) } // Replace deletes from start to end and replaces it with the given string func (eh *EventHandler) Replace(start, end Loc, replace string) { eh.Remove(start, end) eh.Insert(start, replace) } // Execute a textevent and add it to the undo stack func (eh *EventHandler) Execute(t *TextEvent) { if eh.RedoStack.Len() > 0 { eh.RedoStack = new(TEStack) } eh.UndoStack.Push(t) b, err := config.RunPluginFnBool("onBeforeTextEvent", luar.New(ulua.L, eh.buf), luar.New(ulua.L, t)) if err != nil { screen.TermMessage(err) } if !b { return } ExecuteTextEvent(t, eh.buf) } // Undo the first event in the undo stack func (eh *EventHandler) Undo() { t := eh.UndoStack.Peek() if t == nil { return } startTime := t.Time.UnixNano() / int64(time.Millisecond) endTime := startTime - (startTime % undoThreshold) for { t = eh.UndoStack.Peek() if t == nil { return } if t.Time.UnixNano()/int64(time.Millisecond) < endTime { return } eh.UndoOneEvent() } } // UndoOneEvent undoes one event func (eh *EventHandler) UndoOneEvent() { // This event should be undone // Pop it off the stack t := eh.UndoStack.Pop() if t == nil { return } // Undo it // Modifies the text event eh.UndoTextEvent(t) // Set the cursor in the right place teCursor := t.C if teCursor.Num >= 0 && teCursor.Num < len(eh.cursors) { t.C = *eh.cursors[teCursor.Num] eh.cursors[teCursor.Num].Goto(teCursor) } else { teCursor.Num = -1 } // Push it to the redo stack eh.RedoStack.Push(t) } // Redo the first event in the redo stack func (eh *EventHandler) Redo() { t := eh.RedoStack.Peek() if t == nil { return } startTime := t.Time.UnixNano() / int64(time.Millisecond) endTime := startTime - (startTime % undoThreshold) + undoThreshold for { t = eh.RedoStack.Peek() if t == nil { return } if t.Time.UnixNano()/int64(time.Millisecond) > endTime { return } eh.RedoOneEvent() } } // RedoOneEvent redoes one event func (eh *EventHandler) RedoOneEvent() { t := eh.RedoStack.Pop() if t == nil { return } teCursor := t.C if teCursor.Num >= 0 && teCursor.Num < len(eh.cursors) { t.C = *eh.cursors[teCursor.Num] eh.cursors[teCursor.Num].Goto(teCursor) } else { teCursor.Num = -1 } // Modifies the text event eh.UndoTextEvent(t) eh.UndoStack.Push(t) } micro-2.0.9/internal/buffer/line_array.go000066400000000000000000000220311405030104300203600ustar00rootroot00000000000000package buffer import ( "bufio" "bytes" "io" "sync" "github.com/zyedidia/micro/v2/internal/util" "github.com/zyedidia/micro/v2/pkg/highlight" ) // Finds the byte index of the nth rune in a byte slice func runeToByteIndex(n int, txt []byte) int { if n == 0 { return 0 } count := 0 i := 0 for len(txt) > 0 { _, _, size := util.DecodeCharacter(txt) txt = txt[size:] count += size i++ if i == n { break } } return count } // A Line contains the data in bytes as well as a highlight state, match // and a flag for whether the highlighting needs to be updated type Line struct { data []byte state highlight.State match highlight.LineMatch rehighlight bool lock sync.Mutex } const ( // Line ending file formats FFAuto = 0 // Autodetect format FFUnix = 1 // LF line endings (unix style '\n') FFDos = 2 // CRLF line endings (dos style '\r\n') ) type FileFormat byte // A LineArray simply stores and array of lines and makes it easy to insert // and delete in it type LineArray struct { lines []Line Endings FileFormat initsize uint64 } // Append efficiently appends lines together // It allocates an additional 10000 lines if the original estimate // is incorrect func Append(slice []Line, data ...Line) []Line { l := len(slice) if l+len(data) > cap(slice) { // reallocate newSlice := make([]Line, (l+len(data))+10000) copy(newSlice, slice) slice = newSlice } slice = slice[0 : l+len(data)] for i, c := range data { slice[l+i] = c } return slice } // NewLineArray returns a new line array from an array of bytes func NewLineArray(size uint64, endings FileFormat, reader io.Reader) *LineArray { la := new(LineArray) la.lines = make([]Line, 0, 1000) la.initsize = size br := bufio.NewReader(reader) var loaded int la.Endings = endings n := 0 for { data, err := br.ReadBytes('\n') // Detect the line ending by checking to see if there is a '\r' char // before the '\n' // Even if the file format is set to DOS, the '\r' is removed so // that all lines end with '\n' dlen := len(data) if dlen > 1 && data[dlen-2] == '\r' { data = append(data[:dlen-2], '\n') if endings == FFAuto { la.Endings = FFDos } dlen = len(data) } else if dlen > 0 { if endings == FFAuto { la.Endings = FFUnix } } // If we are loading a large file (greater than 1000) we use the file // size and the length of the first 1000 lines to try to estimate // how many lines will need to be allocated for the rest of the file // We add an extra 10000 to the original estimate to be safe and give // plenty of room for expansion if n >= 1000 && loaded >= 0 { totalLinesNum := int(float64(size) * (float64(n) / float64(loaded))) newSlice := make([]Line, len(la.lines), totalLinesNum+10000) copy(newSlice, la.lines) la.lines = newSlice loaded = -1 } // Counter for the number of bytes in the first 1000 lines if loaded >= 0 { loaded += dlen } if err != nil { if err == io.EOF { la.lines = Append(la.lines, Line{ data: data, state: nil, match: nil, rehighlight: false, }) } // Last line was read break } else { la.lines = Append(la.lines, Line{ data: data[:dlen-1], state: nil, match: nil, rehighlight: false, }) } n++ } return la } // Bytes returns the string that should be written to disk when // the line array is saved func (la *LineArray) Bytes() []byte { b := new(bytes.Buffer) // initsize should provide a good estimate b.Grow(int(la.initsize + 4096)) for i, l := range la.lines { b.Write(l.data) if i != len(la.lines)-1 { if la.Endings == FFDos { b.WriteByte('\r') } b.WriteByte('\n') } } return b.Bytes() } // newlineBelow adds a newline below the given line number func (la *LineArray) newlineBelow(y int) { la.lines = append(la.lines, Line{ data: []byte{' '}, state: nil, match: nil, rehighlight: false, }) copy(la.lines[y+2:], la.lines[y+1:]) la.lines[y+1] = Line{ data: []byte{}, state: la.lines[y].state, match: nil, rehighlight: false, } } // Inserts a byte array at a given location func (la *LineArray) insert(pos Loc, value []byte) { x, y := runeToByteIndex(pos.X, la.lines[pos.Y].data), pos.Y for i := 0; i < len(value); i++ { if value[i] == '\n' || (value[i] == '\r' && i < len(value)-1 && value[i+1] == '\n') { la.split(Loc{x, y}) x = 0 y++ if value[i] == '\r' { i++ } continue } la.insertByte(Loc{x, y}, value[i]) x++ } } // InsertByte inserts a byte at a given location func (la *LineArray) insertByte(pos Loc, value byte) { la.lines[pos.Y].data = append(la.lines[pos.Y].data, 0) copy(la.lines[pos.Y].data[pos.X+1:], la.lines[pos.Y].data[pos.X:]) la.lines[pos.Y].data[pos.X] = value } // joinLines joins the two lines a and b func (la *LineArray) joinLines(a, b int) { la.insert(Loc{len(la.lines[a].data), a}, la.lines[b].data) la.deleteLine(b) } // split splits a line at a given position func (la *LineArray) split(pos Loc) { la.newlineBelow(pos.Y) la.insert(Loc{0, pos.Y + 1}, la.lines[pos.Y].data[pos.X:]) la.lines[pos.Y+1].state = la.lines[pos.Y].state la.lines[pos.Y].state = nil la.lines[pos.Y].match = nil la.lines[pos.Y+1].match = nil la.lines[pos.Y].rehighlight = true la.deleteToEnd(Loc{pos.X, pos.Y}) } // removes from start to end func (la *LineArray) remove(start, end Loc) []byte { sub := la.Substr(start, end) startX := runeToByteIndex(start.X, la.lines[start.Y].data) endX := runeToByteIndex(end.X, la.lines[end.Y].data) if start.Y == end.Y { la.lines[start.Y].data = append(la.lines[start.Y].data[:startX], la.lines[start.Y].data[endX:]...) } else { la.deleteLines(start.Y+1, end.Y-1) la.deleteToEnd(Loc{startX, start.Y}) la.deleteFromStart(Loc{endX - 1, start.Y + 1}) la.joinLines(start.Y, start.Y+1) } return sub } // deleteToEnd deletes from the end of a line to the position func (la *LineArray) deleteToEnd(pos Loc) { la.lines[pos.Y].data = la.lines[pos.Y].data[:pos.X] } // deleteFromStart deletes from the start of a line to the position func (la *LineArray) deleteFromStart(pos Loc) { la.lines[pos.Y].data = la.lines[pos.Y].data[pos.X+1:] } // deleteLine deletes the line number func (la *LineArray) deleteLine(y int) { la.lines = la.lines[:y+copy(la.lines[y:], la.lines[y+1:])] } func (la *LineArray) deleteLines(y1, y2 int) { la.lines = la.lines[:y1+copy(la.lines[y1:], la.lines[y2+1:])] } // DeleteByte deletes the byte at a position func (la *LineArray) deleteByte(pos Loc) { la.lines[pos.Y].data = la.lines[pos.Y].data[:pos.X+copy(la.lines[pos.Y].data[pos.X:], la.lines[pos.Y].data[pos.X+1:])] } // Substr returns the string representation between two locations func (la *LineArray) Substr(start, end Loc) []byte { startX := runeToByteIndex(start.X, la.lines[start.Y].data) endX := runeToByteIndex(end.X, la.lines[end.Y].data) if start.Y == end.Y { src := la.lines[start.Y].data[startX:endX] dest := make([]byte, len(src)) copy(dest, src) return dest } str := make([]byte, 0, len(la.lines[start.Y+1].data)*(end.Y-start.Y)) str = append(str, la.lines[start.Y].data[startX:]...) str = append(str, '\n') for i := start.Y + 1; i <= end.Y-1; i++ { str = append(str, la.lines[i].data...) str = append(str, '\n') } str = append(str, la.lines[end.Y].data[:endX]...) return str } // LinesNum returns the number of lines in the buffer func (la *LineArray) LinesNum() int { return len(la.lines) } // Start returns the start of the buffer func (la *LineArray) Start() Loc { return Loc{0, 0} } // End returns the location of the last character in the buffer func (la *LineArray) End() Loc { numlines := len(la.lines) return Loc{util.CharacterCount(la.lines[numlines-1].data), numlines - 1} } // LineBytes returns line n as an array of bytes func (la *LineArray) LineBytes(n int) []byte { if n >= len(la.lines) || n < 0 { return []byte{} } return la.lines[n].data } // State gets the highlight state for the given line number func (la *LineArray) State(lineN int) highlight.State { la.lines[lineN].lock.Lock() defer la.lines[lineN].lock.Unlock() return la.lines[lineN].state } // SetState sets the highlight state at the given line number func (la *LineArray) SetState(lineN int, s highlight.State) { la.lines[lineN].lock.Lock() defer la.lines[lineN].lock.Unlock() la.lines[lineN].state = s } // SetMatch sets the match at the given line number func (la *LineArray) SetMatch(lineN int, m highlight.LineMatch) { la.lines[lineN].lock.Lock() defer la.lines[lineN].lock.Unlock() la.lines[lineN].match = m } // Match retrieves the match for the given line number func (la *LineArray) Match(lineN int) highlight.LineMatch { la.lines[lineN].lock.Lock() defer la.lines[lineN].lock.Unlock() return la.lines[lineN].match } func (la *LineArray) Rehighlight(lineN int) bool { la.lines[lineN].lock.Lock() defer la.lines[lineN].lock.Unlock() return la.lines[lineN].rehighlight } func (la *LineArray) SetRehighlight(lineN int, on bool) { la.lines[lineN].lock.Lock() defer la.lines[lineN].lock.Unlock() la.lines[lineN].rehighlight = on } micro-2.0.9/internal/buffer/line_array_test.go000066400000000000000000000035231405030104300214240ustar00rootroot00000000000000package buffer import ( "strings" "testing" "github.com/stretchr/testify/assert" ) var unicode_txt = `An preost wes on leoden, LaÈamon was ihoten He wes Leovenaðes sone -- liðe him be Drihten. He wonede at ErnleÈe at æðelen are chirechen, Uppen Sevarne staþe, sel þar him þuhte, Onfest Radestone, þer he bock radde.` var la *LineArray func init() { reader := strings.NewReader(unicode_txt) la = NewLineArray(uint64(len(unicode_txt)), FFAuto, reader) } func TestSplit(t *testing.T) { la.insert(Loc{17, 1}, []byte{'\n'}) assert.Equal(t, len(la.lines), 6) sub1 := la.Substr(Loc{0, 1}, Loc{17, 1}) sub2 := la.Substr(Loc{0, 2}, Loc{30, 2}) assert.Equal(t, []byte("He wes Leovenaðes"), sub1) assert.Equal(t, []byte(" sone -- liðe him be Drihten."), sub2) } func TestJoin(t *testing.T) { la.remove(Loc{47, 1}, Loc{0, 2}) assert.Equal(t, len(la.lines), 5) sub := la.Substr(Loc{0, 1}, Loc{47, 1}) bytes := la.Bytes() assert.Equal(t, []byte("He wes Leovenaðes sone -- liðe him be Drihten."), sub) assert.Equal(t, unicode_txt, string(bytes)) } func TestInsert(t *testing.T) { la.insert(Loc{20, 3}, []byte(" foobar")) sub1 := la.Substr(Loc{0, 3}, Loc{50, 3}) assert.Equal(t, []byte("Uppen Sevarne staþe, foobar sel þar him þuhte,"), sub1) la.insert(Loc{25, 2}, []byte("H̼̥̯͇͙̕͘͞e̸̦̞̠̣̰͙̼̥̦̼̖̬͕͕̰̯̫͇̕ĺ̜̠̩̯̯͙̼̭̠͕̮̞͜l̶͓̫̞̮͈͞ͅo̸͔͙̳̠͈̮̼̳͙̥̲͜͠")) sub2 := la.Substr(Loc{0, 2}, Loc{60, 2}) assert.Equal(t, []byte("He wonede at ErnleÈe at æH̼̥̯͇͙̕͘͞e̸̦̞̠̣̰͙̼̥̦̼̖̬͕͕̰̯̫͇̕ĺ̜̠̩̯̯͙̼̭̠͕̮̞͜l̶͓̫̞̮͈͞ͅo̸͔͙̳̠͈̮̼̳͙̥̲͜͠ðelen are chirechen,"), sub2) } func TestRemove(t *testing.T) { la.remove(Loc{20, 3}, Loc{27, 3}) la.remove(Loc{25, 2}, Loc{30, 2}) bytes := la.Bytes() assert.Equal(t, unicode_txt, string(bytes)) } micro-2.0.9/internal/buffer/loc.go000066400000000000000000000056341405030104300170220ustar00rootroot00000000000000package buffer import ( "github.com/zyedidia/micro/v2/internal/util" ) // Loc stores a location type Loc struct { X, Y int } // LessThan returns true if b is smaller func (l Loc) LessThan(b Loc) bool { if l.Y < b.Y { return true } return l.Y == b.Y && l.X < b.X } // GreaterThan returns true if b is bigger func (l Loc) GreaterThan(b Loc) bool { if l.Y > b.Y { return true } return l.Y == b.Y && l.X > b.X } // GreaterEqual returns true if b is greater than or equal to b func (l Loc) GreaterEqual(b Loc) bool { if l.Y > b.Y { return true } if l.Y == b.Y && l.X > b.X { return true } return l == b } // LessEqual returns true if b is less than or equal to b func (l Loc) LessEqual(b Loc) bool { if l.Y < b.Y { return true } if l.Y == b.Y && l.X < b.X { return true } return l == b } // The following functions require a buffer to know where newlines are // Diff returns the distance between two locations func DiffLA(a, b Loc, buf *LineArray) int { if a.Y == b.Y { if a.X > b.X { return a.X - b.X } return b.X - a.X } // Make sure a is guaranteed to be less than b if b.LessThan(a) { a, b = b, a } loc := 0 for i := a.Y + 1; i < b.Y; i++ { // + 1 for the newline loc += util.CharacterCount(buf.LineBytes(i)) + 1 } loc += util.CharacterCount(buf.LineBytes(a.Y)) - a.X + b.X + 1 return loc } // This moves the location one character to the right func (l Loc) right(buf *LineArray) Loc { if l == buf.End() { return Loc{l.X + 1, l.Y} } var res Loc if l.X < util.CharacterCount(buf.LineBytes(l.Y)) { res = Loc{l.X + 1, l.Y} } else { res = Loc{0, l.Y + 1} } return res } // This moves the given location one character to the left func (l Loc) left(buf *LineArray) Loc { if l == buf.Start() { return Loc{l.X - 1, l.Y} } var res Loc if l.X > 0 { res = Loc{l.X - 1, l.Y} } else { res = Loc{util.CharacterCount(buf.LineBytes(l.Y - 1)), l.Y - 1} } return res } // MoveLA moves the cursor n characters to the left or right // It moves the cursor left if n is negative func (l Loc) MoveLA(n int, buf *LineArray) Loc { if n > 0 { for i := 0; i < n; i++ { l = l.right(buf) } return l } for i := 0; i < util.Abs(n); i++ { l = l.left(buf) } return l } // Diff returns the difference between two locs func (l Loc) Diff(b Loc, buf *Buffer) int { return DiffLA(l, b, buf.LineArray) } // Move moves a loc n characters func (l Loc) Move(n int, buf *Buffer) Loc { return l.MoveLA(n, buf.LineArray) } // ByteOffset is just like ToCharPos except it counts bytes instead of runes func ByteOffset(pos Loc, buf *Buffer) int { x, y := pos.X, pos.Y loc := 0 for i := 0; i < y; i++ { // + 1 for the newline loc += len(buf.Line(i)) + 1 } loc += len(buf.Line(y)[:x]) return loc } // clamps a loc within a buffer func clamp(pos Loc, la *LineArray) Loc { if pos.GreaterEqual(la.End()) { return la.End() } else if pos.LessThan(la.Start()) { return la.Start() } return pos } micro-2.0.9/internal/buffer/message.go000066400000000000000000000033271405030104300176660ustar00rootroot00000000000000package buffer import ( "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/tcell/v2" ) type MsgType int const ( MTInfo = iota MTWarning MTError ) // Message represents the information for a gutter message type Message struct { // The Msg iteslf Msg string // Start and End locations for the message Start, End Loc // The Kind stores the message type Kind MsgType // The Owner of the message Owner string } // NewMessage creates a new gutter message func NewMessage(owner string, msg string, start, end Loc, kind MsgType) *Message { return &Message{ Msg: msg, Start: start, End: end, Kind: kind, Owner: owner, } } // NewMessageAtLine creates a new gutter message at a given line func NewMessageAtLine(owner string, msg string, line int, kind MsgType) *Message { start := Loc{-1, line - 1} end := start return NewMessage(owner, msg, start, end, kind) } func (m *Message) Style() tcell.Style { switch m.Kind { case MTInfo: if style, ok := config.Colorscheme["gutter-info"]; ok { return style } case MTWarning: if style, ok := config.Colorscheme["gutter-warning"]; ok { return style } case MTError: if style, ok := config.Colorscheme["gutter-error"]; ok { return style } } return config.DefStyle } func (b *Buffer) AddMessage(m *Message) { b.Messages = append(b.Messages, m) } func (b *Buffer) removeMsg(i int) { copy(b.Messages[i:], b.Messages[i+1:]) b.Messages[len(b.Messages)-1] = nil b.Messages = b.Messages[:len(b.Messages)-1] } func (b *Buffer) ClearMessages(owner string) { for i := len(b.Messages) - 1; i >= 0; i-- { if b.Messages[i].Owner == owner { b.removeMsg(i) } } } func (b *Buffer) ClearAllMessages() { b.Messages = make([]*Message, 0) } micro-2.0.9/internal/buffer/save.go000066400000000000000000000113121405030104300171710ustar00rootroot00000000000000package buffer import ( "bufio" "bytes" "errors" "io" "os" "os/exec" "os/signal" "path/filepath" "runtime" "unicode" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/util" "golang.org/x/text/encoding" "golang.org/x/text/encoding/htmlindex" "golang.org/x/text/transform" ) // LargeFileThreshold is the number of bytes when fastdirty is forced // because hashing is too slow const LargeFileThreshold = 50000 // overwriteFile opens the given file for writing, truncating if one exists, and then calls // the supplied function with the file as io.Writer object, also making sure the file is // closed afterwards. func overwriteFile(name string, enc encoding.Encoding, fn func(io.Writer) error, withSudo bool) (err error) { var writeCloser io.WriteCloser if withSudo { cmd := exec.Command(config.GlobalSettings["sucmd"].(string), "dd", "bs=4k", "of="+name) if writeCloser, err = cmd.StdinPipe(); err != nil { return } c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) go func() { <-c cmd.Process.Kill() }() defer func() { screenb := screen.TempFini() if e := cmd.Run(); e != nil && err == nil { err = e } screen.TempStart(screenb) }() } else if writeCloser, err = os.OpenFile(name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644); err != nil { return } w := bufio.NewWriter(transform.NewWriter(writeCloser, enc.NewEncoder())) err = fn(w) w.Flush() if e := writeCloser.Close(); e != nil && err == nil { err = e } return } // Save saves the buffer to its default path func (b *Buffer) Save() error { return b.SaveAs(b.Path) } // SaveAs saves the buffer to a specified path (filename), creating the file if it does not exist func (b *Buffer) SaveAs(filename string) error { return b.saveToFile(filename, false) } func (b *Buffer) SaveWithSudo() error { return b.SaveAsWithSudo(b.Path) } func (b *Buffer) SaveAsWithSudo(filename string) error { return b.saveToFile(filename, true) } func (b *Buffer) saveToFile(filename string, withSudo bool) error { var err error if b.Type.Readonly { return errors.New("Cannot save readonly buffer") } if b.Type.Scratch { return errors.New("Cannot save scratch buffer") } if withSudo && runtime.GOOS == "windows" { return errors.New("Save with sudo not supported on Windows") } if b.Settings["rmtrailingws"].(bool) { for i, l := range b.lines { leftover := util.CharacterCount(bytes.TrimRightFunc(l.data, unicode.IsSpace)) linelen := util.CharacterCount(l.data) b.Remove(Loc{leftover, i}, Loc{linelen, i}) } b.RelocateCursors() } if b.Settings["eofnewline"].(bool) { end := b.End() if b.RuneAt(Loc{end.X - 1, end.Y}) != '\n' { b.insert(end, []byte{'\n'}) } } // Update the last time this file was updated after saving defer func() { b.ModTime, _ = util.GetModTime(filename) err = b.Serialize() }() // Removes any tilde and replaces with the absolute path to home absFilename, _ := util.ReplaceHome(filename) // Get the leading path to the file | "." is returned if there's no leading path provided if dirname := filepath.Dir(absFilename); dirname != "." { // Check if the parent dirs don't exist if _, statErr := os.Stat(dirname); os.IsNotExist(statErr) { // Prompt to make sure they want to create the dirs that are missing if b.Settings["mkparents"].(bool) { // Create all leading dir(s) since they don't exist if mkdirallErr := os.MkdirAll(dirname, os.ModePerm); mkdirallErr != nil { // If there was an error creating the dirs return mkdirallErr } } else { return errors.New("Parent dirs don't exist, enable 'mkparents' for auto creation") } } } var fileSize int enc, err := htmlindex.Get(b.Settings["encoding"].(string)) if err != nil { return err } fwriter := func(file io.Writer) (e error) { if len(b.lines) == 0 { return } // end of line var eol []byte if b.Endings == FFDos { eol = []byte{'\r', '\n'} } else { eol = []byte{'\n'} } // write lines if fileSize, e = file.Write(b.lines[0].data); e != nil { return } for _, l := range b.lines[1:] { if _, e = file.Write(eol); e != nil { return } if _, e = file.Write(l.data); e != nil { return } fileSize += len(eol) + len(l.data) } return } if err = overwriteFile(absFilename, enc, fwriter, withSudo); err != nil { return err } if !b.Settings["fastdirty"].(bool) { if fileSize > LargeFileThreshold { // For large files 'fastdirty' needs to be on b.Settings["fastdirty"] = true } else { calcHash(b, &b.origHash) } } b.Path = filename absPath, _ := filepath.Abs(filename) b.AbsPath = absPath b.isModified = false b.UpdateRules() return err } micro-2.0.9/internal/buffer/search.go000066400000000000000000000112631405030104300175050ustar00rootroot00000000000000package buffer import ( "regexp" "github.com/zyedidia/micro/v2/internal/util" ) func (b *Buffer) findDown(r *regexp.Regexp, start, end Loc) ([2]Loc, bool) { lastcn := util.CharacterCount(b.LineBytes(b.LinesNum() - 1)) if start.Y > b.LinesNum()-1 { start.X = lastcn - 1 } if end.Y > b.LinesNum()-1 { end.X = lastcn } start.Y = util.Clamp(start.Y, 0, b.LinesNum()-1) end.Y = util.Clamp(end.Y, 0, b.LinesNum()-1) if start.GreaterThan(end) { start, end = end, start } for i := start.Y; i <= end.Y; i++ { l := b.LineBytes(i) charpos := 0 if i == start.Y && start.Y == end.Y { nchars := util.CharacterCount(l) start.X = util.Clamp(start.X, 0, nchars) end.X = util.Clamp(end.X, 0, nchars) l = util.SliceStart(l, end.X) l = util.SliceEnd(l, start.X) charpos = start.X } else if i == start.Y { nchars := util.CharacterCount(l) start.X = util.Clamp(start.X, 0, nchars) l = util.SliceEnd(l, start.X) charpos = start.X } else if i == end.Y { nchars := util.CharacterCount(l) end.X = util.Clamp(end.X, 0, nchars) l = util.SliceStart(l, end.X) } match := r.FindIndex(l) if match != nil { start := Loc{charpos + util.RunePos(l, match[0]), i} end := Loc{charpos + util.RunePos(l, match[1]), i} return [2]Loc{start, end}, true } } return [2]Loc{}, false } func (b *Buffer) findUp(r *regexp.Regexp, start, end Loc) ([2]Loc, bool) { lastcn := util.CharacterCount(b.LineBytes(b.LinesNum() - 1)) if start.Y > b.LinesNum()-1 { start.X = lastcn - 1 } if end.Y > b.LinesNum()-1 { end.X = lastcn } start.Y = util.Clamp(start.Y, 0, b.LinesNum()-1) end.Y = util.Clamp(end.Y, 0, b.LinesNum()-1) if start.GreaterThan(end) { start, end = end, start } for i := end.Y; i >= start.Y; i-- { l := b.LineBytes(i) charpos := 0 if i == start.Y && start.Y == end.Y { nchars := util.CharacterCount(l) start.X = util.Clamp(start.X, 0, nchars) end.X = util.Clamp(end.X, 0, nchars) l = util.SliceStart(l, end.X) l = util.SliceEnd(l, start.X) charpos = start.X } else if i == start.Y { nchars := util.CharacterCount(l) start.X = util.Clamp(start.X, 0, nchars) l = util.SliceEnd(l, start.X) charpos = start.X } else if i == end.Y { nchars := util.CharacterCount(l) end.X = util.Clamp(end.X, 0, nchars) l = util.SliceStart(l, end.X) } match := r.FindIndex(l) if match != nil { start := Loc{charpos + util.RunePos(l, match[0]), i} end := Loc{charpos + util.RunePos(l, match[1]), i} return [2]Loc{start, end}, true } } return [2]Loc{}, false } // FindNext finds the next occurrence of a given string in the buffer // It returns the start and end location of the match (if found) and // a boolean indicating if it was found // May also return an error if the search regex is invalid func (b *Buffer) FindNext(s string, start, end, from Loc, down bool, useRegex bool) ([2]Loc, bool, error) { if s == "" { return [2]Loc{}, false, nil } var r *regexp.Regexp var err error if !useRegex { s = regexp.QuoteMeta(s) } if b.Settings["ignorecase"].(bool) { r, err = regexp.Compile("(?i)" + s) } else { r, err = regexp.Compile(s) } if err != nil { return [2]Loc{}, false, err } var found bool var l [2]Loc if down { l, found = b.findDown(r, from, end) if !found { l, found = b.findDown(r, start, end) } } else { l, found = b.findUp(r, from, start) if !found { l, found = b.findUp(r, end, start) } } return l, found, nil } // ReplaceRegex replaces all occurrences of 'search' with 'replace' in the given area // and returns the number of replacements made and the number of runes // added or removed on the last line of the range func (b *Buffer) ReplaceRegex(start, end Loc, search *regexp.Regexp, replace []byte) (int, int) { if start.GreaterThan(end) { start, end = end, start } netrunes := 0 found := 0 var deltas []Delta for i := start.Y; i <= end.Y; i++ { l := b.lines[i].data charpos := 0 if start.Y == end.Y && i == start.Y { l = util.SliceStart(l, end.X) l = util.SliceEnd(l, start.X) charpos = start.X } else if i == start.Y { l = util.SliceEnd(l, start.X) charpos = start.X } else if i == end.Y { l = util.SliceStart(l, end.X) } newText := search.ReplaceAllFunc(l, func(in []byte) []byte { result := []byte{} for _, submatches := range search.FindAllSubmatchIndex(in, -1) { result = search.Expand(result, replace, in, submatches) } found++ if i == end.Y { netrunes += util.CharacterCount(result) - util.CharacterCount(in) } return result }) from := Loc{charpos, i} to := Loc{charpos + util.CharacterCount(l), i} deltas = append(deltas, Delta{newText, from, to}) } b.MultipleReplace(deltas) return found, netrunes } micro-2.0.9/internal/buffer/serialize.go000066400000000000000000000043341405030104300202300ustar00rootroot00000000000000package buffer import ( "encoding/gob" "errors" "io" "os" "path/filepath" "time" "golang.org/x/text/encoding" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/util" ) // The SerializedBuffer holds the types that get serialized when a buffer is saved // These are used for the savecursor and saveundo options type SerializedBuffer struct { EventHandler *EventHandler Cursor Loc ModTime time.Time } // Serialize serializes the buffer to config.ConfigDir/buffers func (b *Buffer) Serialize() error { if !b.Settings["savecursor"].(bool) && !b.Settings["saveundo"].(bool) { return nil } if b.Path == "" { return nil } name := filepath.Join(config.ConfigDir, "buffers", util.EscapePath(b.AbsPath)) return overwriteFile(name, encoding.Nop, func(file io.Writer) error { err := gob.NewEncoder(file).Encode(SerializedBuffer{ b.EventHandler, b.GetActiveCursor().Loc, b.ModTime, }) return err }, false) } // Unserialize loads the buffer info from config.ConfigDir/buffers func (b *Buffer) Unserialize() error { // If either savecursor or saveundo is turned on, we need to load the serialized information // from ~/.config/micro/buffers if b.Path == "" { return nil } file, err := os.Open(filepath.Join(config.ConfigDir, "buffers", util.EscapePath(b.AbsPath))) if err == nil { defer file.Close() var buffer SerializedBuffer decoder := gob.NewDecoder(file) err = decoder.Decode(&buffer) if err != nil { return errors.New(err.Error() + "\nYou may want to remove the files in ~/.config/micro/buffers (these files\nstore the information for the 'saveundo' and 'savecursor' options) if\nthis problem persists.\nThis may be caused by upgrading to version 2.0, and removing the 'buffers'\ndirectory will reset the cursor and undo history and solve the problem.") } if b.Settings["savecursor"].(bool) { b.StartCursor = buffer.Cursor } if b.Settings["saveundo"].(bool) { // We should only use last time's eventhandler if the file wasn't modified by someone else in the meantime if b.ModTime == buffer.ModTime { b.EventHandler = buffer.EventHandler b.EventHandler.cursors = b.cursors b.EventHandler.buf = b.SharedBuffer } } } return nil } micro-2.0.9/internal/buffer/settings.go000066400000000000000000000026451405030104300201040ustar00rootroot00000000000000package buffer import ( "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/screen" ) func (b *Buffer) SetOptionNative(option string, nativeValue interface{}) error { b.Settings[option] = nativeValue if option == "fastdirty" { if !nativeValue.(bool) { if !b.Modified() { e := calcHash(b, &b.origHash) if e == ErrFileTooLarge { b.Settings["fastdirty"] = false } } } } else if option == "statusline" { screen.Redraw() } else if option == "filetype" { b.UpdateRules() } else if option == "fileformat" { switch b.Settings["fileformat"].(string) { case "unix": b.Endings = FFUnix case "dos": b.Endings = FFDos } b.isModified = true } else if option == "syntax" { if !nativeValue.(bool) { b.ClearMatches() } else { b.UpdateRules() } } else if option == "encoding" { b.isModified = true } else if option == "readonly" && b.Type.Kind == BTDefault.Kind { b.Type.Readonly = nativeValue.(bool) } if b.OptionCallback != nil { b.OptionCallback(option, nativeValue) } return nil } // SetOption sets a given option to a value just for this buffer func (b *Buffer) SetOption(option, value string) error { if _, ok := b.Settings[option]; !ok { return config.ErrInvalidOption } nativeValue, err := config.GetNativeValue(option, b.Settings[option], value) if err != nil { return err } return b.SetOptionNative(option, nativeValue) } micro-2.0.9/internal/buffer/stack.go000066400000000000000000000015211405030104300173410ustar00rootroot00000000000000package buffer // TEStack is a simple implementation of a LIFO stack for text events type TEStack struct { Top *Element Size int } // An Element which is stored in the Stack type Element struct { Value *TextEvent Next *Element } // Len returns the stack's length func (s *TEStack) Len() int { return s.Size } // Push a new element onto the stack func (s *TEStack) Push(value *TextEvent) { s.Top = &Element{value, s.Top} s.Size++ } // Pop removes the top element from the stack and returns its value // If the stack is empty, return nil func (s *TEStack) Pop() (value *TextEvent) { if s.Size > 0 { value, s.Top = s.Top.Value, s.Top.Next s.Size-- return } return nil } // Peek returns the top element of the stack without removing it func (s *TEStack) Peek() *TextEvent { if s.Size > 0 { return s.Top.Value } return nil } micro-2.0.9/internal/buffer/stack_test.go000066400000000000000000000011621405030104300204010ustar00rootroot00000000000000package buffer import ( "testing" "time" "github.com/stretchr/testify/assert" ) func TestStack(t *testing.T) { s := new(TEStack) e1 := &TextEvent{ EventType: TextEventReplace, Time: time.Now(), } e2 := &TextEvent{ EventType: TextEventInsert, Time: time.Now(), } s.Push(e1) s.Push(e2) p := s.Peek() assert.Equal(t, p.EventType, TextEventInsert) p = s.Pop() assert.Equal(t, p.EventType, TextEventInsert) p = s.Peek() assert.Equal(t, p.EventType, TextEventReplace) p = s.Pop() assert.Equal(t, p.EventType, TextEventReplace) p = s.Pop() assert.Nil(t, p) p = s.Peek() assert.Nil(t, p) } micro-2.0.9/internal/clipboard/000077500000000000000000000000001405030104300163745ustar00rootroot00000000000000micro-2.0.9/internal/clipboard/clipboard.go000066400000000000000000000074201405030104300206650ustar00rootroot00000000000000package clipboard import ( "errors" "github.com/zyedidia/clipboard" ) type Method int const ( // External relies on external tools for accessing the clipboard // These include xclip, xsel, wl-clipboard for linux, pbcopy/pbpaste on Mac, // and Syscalls on Windows. External Method = iota // Terminal uses the terminal to manage the clipboard via OSC 52. Many // terminals do not support OSC 52, in which case this method won't work. Terminal // Internal just manages the clipboard with an internal buffer and doesn't // attempt to interface with the system clipboard Internal ) // CurrentMethod is the method used to store clipboard information var CurrentMethod Method = Internal // A Register is a buffer used to store text. The system clipboard has the 'clipboard' // and 'primary' (linux-only) registers, but other registers may be used internal to micro. type Register int const ( // ClipboardReg is the main system clipboard ClipboardReg Register = -1 // PrimaryReg is the system primary clipboard (linux only) PrimaryReg = -2 ) // Initialize attempts to initialize the clipboard using the given method func Initialize(m Method) error { var err error switch m { case External: err = clipboard.Initialize() } if err != nil { CurrentMethod = Internal } return err } // SetMethod changes the clipboard access method func SetMethod(m string) Method { switch m { case "internal": CurrentMethod = Internal case "external": CurrentMethod = External case "terminal": CurrentMethod = Terminal } return CurrentMethod } // Read reads from a clipboard register func Read(r Register) (string, error) { return read(r, CurrentMethod) } // Write writes text to a clipboard register func Write(text string, r Register) error { return write(text, r, CurrentMethod) } // ReadMulti reads text from a clipboard register for a certain multi-cursor func ReadMulti(r Register, num, ncursors int) (string, error) { clip, err := Read(r) if err != nil { return "", err } if ValidMulti(r, clip, ncursors) { return multi.getText(r, num), nil } return clip, nil } // WriteMulti writes text to a clipboard register for a certain multi-cursor func WriteMulti(text string, r Register, num int, ncursors int) error { return writeMulti(text, r, num, ncursors, CurrentMethod) } // ValidMulti checks if the internal multi-clipboard is valid and up-to-date // with the system clipboard func ValidMulti(r Register, clip string, ncursors int) bool { return multi.isValid(r, clip, ncursors) } func writeMulti(text string, r Register, num int, ncursors int, m Method) error { multi.writeText(text, r, num, ncursors) return write(multi.getAllText(r), r, m) } func read(r Register, m Method) (string, error) { switch m { case External: switch r { case ClipboardReg: return clipboard.ReadAll("clipboard") case PrimaryReg: return clipboard.ReadAll("primary") default: return internal.read(r), nil } case Internal: return internal.read(r), nil case Terminal: switch r { case ClipboardReg: // terminal paste works by sending an esc sequence to the // terminal to trigger a paste event return terminal.read("clipboard") case PrimaryReg: return terminal.read("primary") default: return internal.read(r), nil } } return "", errors.New("Invalid clipboard method") } func write(text string, r Register, m Method) error { switch m { case External: switch r { case ClipboardReg: return clipboard.WriteAll(text, "clipboard") case PrimaryReg: return clipboard.WriteAll(text, "primary") default: internal.write(text, r) } case Internal: internal.write(text, r) case Terminal: switch r { case ClipboardReg: return terminal.write(text, "c") case PrimaryReg: return terminal.write(text, "p") default: internal.write(text, r) } } return nil } micro-2.0.9/internal/clipboard/internal.go000066400000000000000000000004441405030104300205410ustar00rootroot00000000000000package clipboard type internalClipboard map[Register]string var internal internalClipboard func init() { internal = make(internalClipboard) } func (c internalClipboard) read(r Register) string { return c[r] } func (c internalClipboard) write(text string, r Register) { c[r] = text } micro-2.0.9/internal/clipboard/multi.go000066400000000000000000000024411405030104300200560ustar00rootroot00000000000000package clipboard import ( "bytes" ) // For storing multi cursor clipboard contents type multiClipboard map[Register][]string var multi multiClipboard func (c multiClipboard) getAllText(r Register) string { content := c[r] if content == nil { return "" } buf := &bytes.Buffer{} for _, s := range content { buf.WriteString(s) } return buf.String() } func (c multiClipboard) getText(r Register, num int) string { content := c[r] if content == nil || len(content) <= num { return "" } return content[num] } // isValid checks if the text stored in this multi-clipboard is the same as the // text stored in the system clipboard (provided as an argument), and therefore // if it is safe to use the multi-clipboard for pasting instead of the system // clipboard. func (c multiClipboard) isValid(r Register, clipboard string, ncursors int) bool { content := c[r] if content == nil || len(content) != ncursors { return false } return clipboard == c.getAllText(r) } func (c multiClipboard) writeText(text string, r Register, num int, ncursors int) { content := c[r] if content == nil || len(content) != ncursors { content = make([]string, ncursors, ncursors) c[r] = content } if num >= ncursors { return } content[num] = text } func init() { multi = make(multiClipboard) } micro-2.0.9/internal/clipboard/terminal.go000066400000000000000000000012521405030104300205360ustar00rootroot00000000000000package clipboard import ( "errors" "time" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/tcell/v2" ) type terminalClipboard struct{} var terminal terminalClipboard func (t terminalClipboard) read(reg string) (string, error) { screen.Screen.GetClipboard(reg) // wait at most 200ms for response for { select { case event := <-screen.Events: e, ok := event.(*tcell.EventPaste) if ok { return e.Text(), nil } case <-time.After(200 * time.Millisecond): return "", errors.New("No clipboard received from terminal") } } } func (t terminalClipboard) write(text, reg string) error { return screen.Screen.SetClipboard(text, reg) } micro-2.0.9/internal/config/000077500000000000000000000000001405030104300157025ustar00rootroot00000000000000micro-2.0.9/internal/config/autosave.go000066400000000000000000000010471405030104300200620ustar00rootroot00000000000000package config import ( "sync" "time" ) var Autosave chan bool var autotime int // lock for autosave var autolock sync.Mutex func init() { Autosave = make(chan bool) } func SetAutoTime(a int) { autolock.Lock() autotime = a autolock.Unlock() } func GetAutoTime() int { autolock.Lock() a := autotime autolock.Unlock() return a } func StartAutoSave() { go func() { for { autolock.Lock() a := autotime autolock.Unlock() if a < 1 { break } time.Sleep(time.Duration(a) * time.Second) Autosave <- true } }() } micro-2.0.9/internal/config/colorscheme.go000066400000000000000000000124311405030104300205350ustar00rootroot00000000000000package config import ( "errors" "regexp" "strconv" "strings" "github.com/zyedidia/tcell/v2" ) // Micro's default style var DefStyle tcell.Style = tcell.StyleDefault // The current colorscheme var Colorscheme map[string]tcell.Style // GetColor takes in a syntax group and returns the colorscheme's style for that group func GetColor(color string) tcell.Style { st := DefStyle if color == "" { return st } groups := strings.Split(color, ".") if len(groups) > 1 { curGroup := "" for i, g := range groups { if i != 0 { curGroup += "." } curGroup += g if style, ok := Colorscheme[curGroup]; ok { st = style } } } else if style, ok := Colorscheme[color]; ok { st = style } else { st = StringToStyle(color) } return st } // ColorschemeExists checks if a given colorscheme exists func ColorschemeExists(colorschemeName string) bool { return FindRuntimeFile(RTColorscheme, colorschemeName) != nil } // InitColorscheme picks and initializes the colorscheme when micro starts func InitColorscheme() error { Colorscheme = make(map[string]tcell.Style) DefStyle = tcell.StyleDefault return LoadDefaultColorscheme() } // LoadDefaultColorscheme loads the default colorscheme from $(ConfigDir)/colorschemes func LoadDefaultColorscheme() error { return LoadColorscheme(GlobalSettings["colorscheme"].(string)) } // LoadColorscheme loads the given colorscheme from a directory func LoadColorscheme(colorschemeName string) error { file := FindRuntimeFile(RTColorscheme, colorschemeName) if file == nil { return errors.New(colorschemeName + " is not a valid colorscheme") } if data, err := file.Data(); err != nil { return errors.New("Error loading colorscheme: " + err.Error()) } else { Colorscheme, err = ParseColorscheme(string(data)) if err != nil { return err } } return nil } // ParseColorscheme parses the text definition for a colorscheme and returns the corresponding object // Colorschemes are made up of color-link statements linking a color group to a list of colors // For example, color-link keyword (blue,red) makes all keywords have a blue foreground and // red background func ParseColorscheme(text string) (map[string]tcell.Style, error) { var err error parser := regexp.MustCompile(`color-link\s+(\S*)\s+"(.*)"`) lines := strings.Split(text, "\n") c := make(map[string]tcell.Style) for _, line := range lines { if strings.TrimSpace(line) == "" || strings.TrimSpace(line)[0] == '#' { // Ignore this line continue } matches := parser.FindSubmatch([]byte(line)) if len(matches) == 3 { link := string(matches[1]) colors := string(matches[2]) style := StringToStyle(colors) c[link] = style if link == "default" { DefStyle = style } } else { err = errors.New("Color-link statement is not valid: " + line) } } return c, err } // StringToStyle returns a style from a string // The strings must be in the format "extra foregroundcolor,backgroundcolor" // The 'extra' can be bold, reverse, italic or underline func StringToStyle(str string) tcell.Style { var fg, bg string spaceSplit := strings.Split(str, " ") split := strings.Split(spaceSplit[len(spaceSplit)-1], ",") if len(split) > 1 { fg, bg = split[0], split[1] } else { fg = split[0] } fg = strings.TrimSpace(fg) bg = strings.TrimSpace(bg) var fgColor, bgColor tcell.Color if fg == "" { fgColor, _, _ = DefStyle.Decompose() } else { fgColor = StringToColor(fg) } if bg == "" { _, bgColor, _ = DefStyle.Decompose() } else { bgColor = StringToColor(bg) } style := DefStyle.Foreground(fgColor).Background(bgColor) if strings.Contains(str, "bold") { style = style.Bold(true) } if strings.Contains(str, "italic") { style = style.Italic(true) } if strings.Contains(str, "reverse") { style = style.Reverse(true) } if strings.Contains(str, "underline") { style = style.Underline(true) } return style } // StringToColor returns a tcell color from a string representation of a color // We accept either bright... or light... to mean the brighter version of a color func StringToColor(str string) tcell.Color { switch str { case "black": return tcell.ColorBlack case "red": return tcell.ColorMaroon case "green": return tcell.ColorGreen case "yellow": return tcell.ColorOlive case "blue": return tcell.ColorNavy case "magenta": return tcell.ColorPurple case "cyan": return tcell.ColorTeal case "white": return tcell.ColorSilver case "brightblack", "lightblack": return tcell.ColorGray case "brightred", "lightred": return tcell.ColorRed case "brightgreen", "lightgreen": return tcell.ColorLime case "brightyellow", "lightyellow": return tcell.ColorYellow case "brightblue", "lightblue": return tcell.ColorBlue case "brightmagenta", "lightmagenta": return tcell.ColorFuchsia case "brightcyan", "lightcyan": return tcell.ColorAqua case "brightwhite", "lightwhite": return tcell.ColorWhite case "default": return tcell.ColorDefault default: // Check if this is a 256 color if num, err := strconv.Atoi(str); err == nil { return GetColor256(num) } // Probably a truecolor hex value return tcell.GetColor(str) } } // GetColor256 returns the tcell color for a number between 0 and 255 func GetColor256(color int) tcell.Color { if color == 0 { return tcell.ColorDefault } return tcell.PaletteColor(color) } micro-2.0.9/internal/config/colorscheme_test.go000066400000000000000000000035241405030104300215770ustar00rootroot00000000000000package config import ( "testing" "github.com/stretchr/testify/assert" "github.com/zyedidia/tcell/v2" ) func TestSimpleStringToStyle(t *testing.T) { s := StringToStyle("lightblue,magenta") fg, bg, _ := s.Decompose() assert.Equal(t, tcell.ColorBlue, fg) assert.Equal(t, tcell.ColorPurple, bg) } func TestAttributeStringToStyle(t *testing.T) { s := StringToStyle("bold cyan,brightcyan") fg, bg, attr := s.Decompose() assert.Equal(t, tcell.ColorTeal, fg) assert.Equal(t, tcell.ColorAqua, bg) assert.NotEqual(t, 0, attr&tcell.AttrBold) } func TestMultiAttributesStringToStyle(t *testing.T) { s := StringToStyle("bold italic underline cyan,brightcyan") fg, bg, attr := s.Decompose() assert.Equal(t, tcell.ColorTeal, fg) assert.Equal(t, tcell.ColorAqua, bg) assert.NotEqual(t, 0, attr&tcell.AttrBold) assert.NotEqual(t, 0, attr&tcell.AttrItalic) assert.NotEqual(t, 0, attr&tcell.AttrUnderline) } func TestColor256StringToStyle(t *testing.T) { s := StringToStyle("128,60") fg, bg, _ := s.Decompose() assert.Equal(t, tcell.Color128, fg) assert.Equal(t, tcell.Color60, bg) } func TestColorHexStringToStyle(t *testing.T) { s := StringToStyle("#deadbe,#ef1234") fg, bg, _ := s.Decompose() assert.Equal(t, tcell.NewRGBColor(222, 173, 190), fg) assert.Equal(t, tcell.NewRGBColor(239, 18, 52), bg) } func TestColorschemeParser(t *testing.T) { testColorscheme := `color-link default "#F8F8F2,#282828" color-link comment "#75715E,#282828" # comment color-link identifier "#66D9EF,#282828" #comment color-link constant "#AE81FF,#282828" color-link constant.string "#E6DB74,#282828" color-link constant.string.char "#BDE6AD,#282828"` c, err := ParseColorscheme(testColorscheme) assert.Nil(t, err) fg, bg, _ := c["comment"].Decompose() assert.Equal(t, tcell.NewRGBColor(117, 113, 94), fg) assert.Equal(t, tcell.NewRGBColor(40, 40, 40), bg) } micro-2.0.9/internal/config/config.go000066400000000000000000000026311405030104300175000ustar00rootroot00000000000000package config import ( "errors" "os" "path/filepath" homedir "github.com/mitchellh/go-homedir" ) var ConfigDir string // InitConfigDir finds the configuration directory for micro according to the XDG spec. // If no directory is found, it creates one. func InitConfigDir(flagConfigDir string) error { var e error microHome := os.Getenv("MICRO_CONFIG_HOME") if microHome == "" { // The user has not set $MICRO_CONFIG_HOME so we'll try $XDG_CONFIG_HOME xdgHome := os.Getenv("XDG_CONFIG_HOME") if xdgHome == "" { // The user has not set $XDG_CONFIG_HOME so we should act like it was set to ~/.config home, err := homedir.Dir() if err != nil { return errors.New("Error finding your home directory\nCan't load config files: " + err.Error()) } xdgHome = filepath.Join(home, ".config") } microHome = filepath.Join(xdgHome, "micro") } ConfigDir = microHome if len(flagConfigDir) > 0 { if _, err := os.Stat(flagConfigDir); os.IsNotExist(err) { e = errors.New("Error: " + flagConfigDir + " does not exist. Defaulting to " + ConfigDir + ".") } else { ConfigDir = flagConfigDir return nil } } // Create micro config home directory if it does not exist // This creates parent directories and does nothing if it already exists err := os.MkdirAll(ConfigDir, os.ModePerm) if err != nil { return errors.New("Error creating configuration directory: " + err.Error()) } return e } micro-2.0.9/internal/config/globals.go000066400000000000000000000005411405030104300176540ustar00rootroot00000000000000package config const ( DoubleClickThreshold = 400 // How many milliseconds to wait before a second click is not a double click ) var Bindings map[string]map[string]string func init() { Bindings = map[string]map[string]string{ "command": make(map[string]string), "buffer": make(map[string]string), "terminal": make(map[string]string), } } micro-2.0.9/internal/config/plugin.go000066400000000000000000000067401405030104300175360ustar00rootroot00000000000000package config import ( "errors" "log" lua "github.com/yuin/gopher-lua" ulua "github.com/zyedidia/micro/v2/internal/lua" ) // ErrNoSuchFunction is returned when Call is executed on a function that does not exist var ErrNoSuchFunction = errors.New("No such function exists") // LoadAllPlugins loads all detected plugins (in runtime/plugins and ConfigDir/plugins) func LoadAllPlugins() error { var reterr error for _, p := range Plugins { err := p.Load() if err != nil { reterr = err } } return reterr } // RunPluginFn runs a given function in all plugins // returns an error if any of the plugins had an error func RunPluginFn(fn string, args ...lua.LValue) error { var reterr error for _, p := range Plugins { if !p.IsEnabled() { continue } _, err := p.Call(fn, args...) if err != nil && err != ErrNoSuchFunction { reterr = errors.New("Plugin " + p.Name + ": " + err.Error()) } } return reterr } // RunPluginFnBool runs a function in all plugins and returns // false if any one of them returned false // also returns an error if any of the plugins had an error func RunPluginFnBool(fn string, args ...lua.LValue) (bool, error) { var reterr error retbool := true for _, p := range Plugins { if !p.IsEnabled() { continue } val, err := p.Call(fn, args...) if err == ErrNoSuchFunction { continue } if err != nil { reterr = errors.New("Plugin " + p.Name + ": " + err.Error()) continue } if v, ok := val.(lua.LBool); ok { retbool = retbool && bool(v) } } return retbool, reterr } // Plugin stores information about the source files/info for a plugin type Plugin struct { DirName string // name of plugin folder Name string // name of plugin Info *PluginInfo // json file containing info Srcs []RuntimeFile // lua files Loaded bool Default bool // pre-installed plugin } // IsEnabled returns if a plugin is enabled func (p *Plugin) IsEnabled() bool { if v, ok := GlobalSettings[p.Name]; ok { return v.(bool) && p.Loaded } return true } // Plugins is a list of all detected plugins (enabled or disabled) var Plugins []*Plugin // Load creates an option for the plugin and runs all source files func (p *Plugin) Load() error { if v, ok := GlobalSettings[p.Name]; ok && !v.(bool) { return nil } for _, f := range p.Srcs { dat, err := f.Data() if err != nil { return err } err = ulua.LoadFile(p.Name, f.Name(), dat) if err != nil { return err } } p.Loaded = true RegisterGlobalOption(p.Name, true) return nil } // Call calls a given function in this plugin func (p *Plugin) Call(fn string, args ...lua.LValue) (lua.LValue, error) { plug := ulua.L.GetGlobal(p.Name) if plug == lua.LNil { log.Println("Plugin does not exist:", p.Name, "at", p.DirName, ":", p) return nil, nil } luafn := ulua.L.GetField(plug, fn) if luafn == lua.LNil { return nil, ErrNoSuchFunction } err := ulua.L.CallByParam(lua.P{ Fn: luafn, NRet: 1, Protect: true, }, args...) if err != nil { return nil, err } ret := ulua.L.Get(-1) ulua.L.Pop(1) return ret, nil } // FindPlugin returns the plugin with the given name func FindPlugin(name string) *Plugin { var pl *Plugin for _, p := range Plugins { if !p.IsEnabled() { continue } if p.Name == name { pl = p break } } return pl } // FindAnyPlugin does not require the plugin to be enabled func FindAnyPlugin(name string) *Plugin { var pl *Plugin for _, p := range Plugins { if p.Name == name { pl = p break } } return pl } micro-2.0.9/internal/config/plugin_installer.go000066400000000000000000000431061405030104300216100ustar00rootroot00000000000000package config import ( "archive/zip" "bytes" "fmt" "io" "io/ioutil" "net/http" "os" "path/filepath" "sort" "strings" "sync" "github.com/blang/semver" lua "github.com/yuin/gopher-lua" "github.com/zyedidia/json5" ulua "github.com/zyedidia/micro/v2/internal/lua" "github.com/zyedidia/micro/v2/internal/util" ) var ( allPluginPackages PluginPackages ) // CorePluginName is a plugin dependency name for the micro core. const CorePluginName = "micro" // PluginChannel contains an url to a json list of PluginRepository type PluginChannel string // PluginChannels is a slice of PluginChannel type PluginChannels []PluginChannel // PluginRepository contains an url to json file containing PluginPackages type PluginRepository string // PluginPackage contains the meta-data of a plugin and all available versions type PluginPackage struct { Name string Description string Author string Tags []string Versions PluginVersions } // PluginPackages is a list of PluginPackage instances. type PluginPackages []*PluginPackage // PluginVersion descripes a version of a PluginPackage. Containing a version, download url and also dependencies. type PluginVersion struct { pack *PluginPackage Version semver.Version Url string Require PluginDependencies } func (pv *PluginVersion) Pack() *PluginPackage { return pv.pack } // PluginVersions is a slice of PluginVersion type PluginVersions []*PluginVersion // PluginDependency descripes a dependency to another plugin or micro itself. type PluginDependency struct { Name string Range semver.Range } // PluginDependencies is a slice of PluginDependency type PluginDependencies []*PluginDependency func (pp *PluginPackage) String() string { buf := new(bytes.Buffer) buf.WriteString("Plugin: ") buf.WriteString(pp.Name) buf.WriteRune('\n') if pp.Author != "" { buf.WriteString("Author: ") buf.WriteString(pp.Author) buf.WriteRune('\n') } if pp.Description != "" { buf.WriteRune('\n') buf.WriteString(pp.Description) } return buf.String() } func fetchAllSources(count int, fetcher func(i int) PluginPackages) PluginPackages { wgQuery := new(sync.WaitGroup) wgQuery.Add(count) results := make(chan PluginPackages) wgDone := new(sync.WaitGroup) wgDone.Add(1) var packages PluginPackages for i := 0; i < count; i++ { go func(i int) { results <- fetcher(i) wgQuery.Done() }(i) } go func() { packages = make(PluginPackages, 0) for res := range results { packages = append(packages, res...) } wgDone.Done() }() wgQuery.Wait() close(results) wgDone.Wait() return packages } // Fetch retrieves all available PluginPackages from the given channels func (pc PluginChannels) Fetch(out io.Writer) PluginPackages { return fetchAllSources(len(pc), func(i int) PluginPackages { return pc[i].Fetch(out) }) } // Fetch retrieves all available PluginPackages from the given channel func (pc PluginChannel) Fetch(out io.Writer) PluginPackages { resp, err := http.Get(string(pc)) if err != nil { fmt.Fprintln(out, "Failed to query plugin channel:\n", err) return PluginPackages{} } defer resp.Body.Close() decoder := json5.NewDecoder(resp.Body) var repositories []PluginRepository if err := decoder.Decode(&repositories); err != nil { fmt.Fprintln(out, "Failed to decode channel data:\n", err) return PluginPackages{} } return fetchAllSources(len(repositories), func(i int) PluginPackages { return repositories[i].Fetch(out) }) } // Fetch retrieves all available PluginPackages from the given repository func (pr PluginRepository) Fetch(out io.Writer) PluginPackages { resp, err := http.Get(string(pr)) if err != nil { fmt.Fprintln(out, "Failed to query plugin repository:\n", err) return PluginPackages{} } defer resp.Body.Close() decoder := json5.NewDecoder(resp.Body) var plugins PluginPackages if err := decoder.Decode(&plugins); err != nil { fmt.Fprintln(out, "Failed to decode repository data:\n", err) return PluginPackages{} } if len(plugins) > 0 { return PluginPackages{plugins[0]} } return nil // return plugins } // UnmarshalJSON unmarshals raw json to a PluginVersion func (pv *PluginVersion) UnmarshalJSON(data []byte) error { var values struct { Version semver.Version Url string Require map[string]string } if err := json5.Unmarshal(data, &values); err != nil { return err } pv.Version = values.Version pv.Url = values.Url pv.Require = make(PluginDependencies, 0) for k, v := range values.Require { // don't add the dependency if it's the core and // we have a unknown version number. // in that case just accept that dependency (which equals to not adding it.) if k != CorePluginName || !isUnknownCoreVersion() { if vRange, err := semver.ParseRange(v); err == nil { pv.Require = append(pv.Require, &PluginDependency{k, vRange}) } } } return nil } // UnmarshalJSON unmarshals raw json to a PluginPackage func (pp *PluginPackage) UnmarshalJSON(data []byte) error { var values struct { Name string Description string Author string Tags []string Versions PluginVersions } if err := json5.Unmarshal(data, &values); err != nil { return err } pp.Name = values.Name pp.Description = values.Description pp.Author = values.Author pp.Tags = values.Tags pp.Versions = values.Versions for _, v := range pp.Versions { v.pack = pp } return nil } // GetAllPluginPackages gets all PluginPackages which may be available. func GetAllPluginPackages(out io.Writer) PluginPackages { if allPluginPackages == nil { getOption := func(name string) []string { data := GetGlobalOption(name) if strs, ok := data.([]string); ok { return strs } if ifs, ok := data.([]interface{}); ok { result := make([]string, len(ifs)) for i, urlIf := range ifs { if url, ok := urlIf.(string); ok { result[i] = url } else { return nil } } return result } return nil } channels := PluginChannels{} for _, url := range getOption("pluginchannels") { channels = append(channels, PluginChannel(url)) } repos := []PluginRepository{} for _, url := range getOption("pluginrepos") { repos = append(repos, PluginRepository(url)) } allPluginPackages = fetchAllSources(len(repos)+1, func(i int) PluginPackages { if i == 0 { return channels.Fetch(out) } return repos[i-1].Fetch(out) }) } return allPluginPackages } func (pv PluginVersions) find(ppName string) *PluginVersion { for _, v := range pv { if v.pack.Name == ppName { return v } } return nil } // Len returns the number of pluginversions in this slice func (pv PluginVersions) Len() int { return len(pv) } // Swap two entries of the slice func (pv PluginVersions) Swap(i, j int) { pv[i], pv[j] = pv[j], pv[i] } // Less returns true if the version at position i is greater then the version at position j (used for sorting) func (pv PluginVersions) Less(i, j int) bool { return pv[i].Version.GT(pv[j].Version) } // Match returns true if the package matches a given search text func (pp PluginPackage) Match(text string) bool { text = strings.ToLower(text) for _, t := range pp.Tags { if strings.ToLower(t) == text { return true } } if strings.Contains(strings.ToLower(pp.Name), text) { return true } if strings.Contains(strings.ToLower(pp.Description), text) { return true } return false } // IsInstallable returns true if the package can be installed. func (pp PluginPackage) IsInstallable(out io.Writer) error { _, err := GetAllPluginPackages(out).Resolve(GetInstalledVersions(true), PluginDependencies{ &PluginDependency{ Name: pp.Name, Range: semver.Range(func(v semver.Version) bool { return true }), }}) return err } // SearchPlugin retrieves a list of all PluginPackages which match the given search text and // could be or are already installed func SearchPlugin(out io.Writer, texts []string) (plugins PluginPackages) { plugins = make(PluginPackages, 0) pluginLoop: for _, pp := range GetAllPluginPackages(out) { for _, text := range texts { if !pp.Match(text) { continue pluginLoop } } if err := pp.IsInstallable(out); err == nil { plugins = append(plugins, pp) } } return } func isUnknownCoreVersion() bool { _, err := semver.ParseTolerant(util.Version) return err != nil } func newStaticPluginVersion(name, version string) *PluginVersion { vers, err := semver.ParseTolerant(version) if err != nil { if vers, err = semver.ParseTolerant("0.0.0-" + version); err != nil { vers = semver.MustParse("0.0.0-unknown") } } pl := &PluginPackage{ Name: name, } pv := &PluginVersion{ pack: pl, Version: vers, } pl.Versions = PluginVersions{pv} return pv } // GetInstalledVersions returns a list of all currently installed plugins including an entry for // micro itself. This can be used to resolve dependencies. func GetInstalledVersions(withCore bool) PluginVersions { result := PluginVersions{} if withCore { result = append(result, newStaticPluginVersion(CorePluginName, util.Version)) } for _, p := range Plugins { if !p.IsEnabled() { continue } version := GetInstalledPluginVersion(p.Name) if pv := newStaticPluginVersion(p.Name, version); pv != nil { result = append(result, pv) } } return result } // GetInstalledPluginVersion returns the string of the exported VERSION variable of a loaded plugin func GetInstalledPluginVersion(name string) string { plugin := ulua.L.GetGlobal(name) if plugin != lua.LNil { version := ulua.L.GetField(plugin, "VERSION") if str, ok := version.(lua.LString); ok { return string(str) } } return "" } // DownloadAndInstall downloads and installs the given plugin and version func (pv *PluginVersion) DownloadAndInstall(out io.Writer) error { fmt.Fprintf(out, "Downloading %q (%s) from %q\n", pv.pack.Name, pv.Version, pv.Url) resp, err := http.Get(pv.Url) if err != nil { return err } defer resp.Body.Close() data, err := ioutil.ReadAll(resp.Body) if err != nil { return err } zipbuf := bytes.NewReader(data) z, err := zip.NewReader(zipbuf, zipbuf.Size()) if err != nil { return err } targetDir := filepath.Join(ConfigDir, "plug", pv.pack.Name) dirPerm := os.FileMode(0755) if err = os.MkdirAll(targetDir, dirPerm); err != nil { return err } // Check if all files in zip are in the same directory. // this might be the case if the plugin zip contains the whole plugin dir // instead of its content. var prefix string allPrefixed := false for i, f := range z.File { parts := strings.Split(f.Name, "/") if i == 0 { prefix = parts[0] } else if parts[0] != prefix { allPrefixed = false break } else { // switch to true since we have at least a second file allPrefixed = true } } // Install files and directory's for _, f := range z.File { parts := strings.Split(f.Name, "/") if allPrefixed { parts = parts[1:] } targetName := filepath.Join(targetDir, filepath.Join(parts...)) if f.FileInfo().IsDir() { if err := os.MkdirAll(targetName, dirPerm); err != nil { return err } } else { basepath := filepath.Dir(targetName) if err := os.MkdirAll(basepath, dirPerm); err != nil { return err } content, err := f.Open() if err != nil { return err } defer content.Close() target, err := os.Create(targetName) if err != nil { return err } defer target.Close() if _, err = io.Copy(target, content); err != nil { return err } } } return nil } func (pl PluginPackages) Get(name string) *PluginPackage { for _, p := range pl { if p.Name == name { return p } } return nil } func (pl PluginPackages) GetAllVersions(name string) PluginVersions { result := make(PluginVersions, 0) p := pl.Get(name) if p != nil { result = append(result, p.Versions...) } return result } func (req PluginDependencies) Join(other PluginDependencies) PluginDependencies { m := make(map[string]*PluginDependency) for _, r := range req { m[r.Name] = r } for _, o := range other { cur, ok := m[o.Name] if ok { m[o.Name] = &PluginDependency{ o.Name, o.Range.AND(cur.Range), } } else { m[o.Name] = o } } result := make(PluginDependencies, 0, len(m)) for _, v := range m { result = append(result, v) } return result } // Resolve resolves dependencies between different plugins func (all PluginPackages) Resolve(selectedVersions PluginVersions, open PluginDependencies) (PluginVersions, error) { if len(open) == 0 { return selectedVersions, nil } currentRequirement, stillOpen := open[0], open[1:] if currentRequirement != nil { if selVersion := selectedVersions.find(currentRequirement.Name); selVersion != nil { if currentRequirement.Range(selVersion.Version) { return all.Resolve(selectedVersions, stillOpen) } return nil, fmt.Errorf("unable to find a matching version for \"%s\"", currentRequirement.Name) } availableVersions := all.GetAllVersions(currentRequirement.Name) sort.Sort(availableVersions) for _, version := range availableVersions { if currentRequirement.Range(version.Version) { resolved, err := all.Resolve(append(selectedVersions, version), stillOpen.Join(version.Require)) if err == nil { return resolved, nil } } } return nil, fmt.Errorf("unable to find a matching version for \"%s\"", currentRequirement.Name) } return selectedVersions, nil } func (pv PluginVersions) install(out io.Writer) { anyInstalled := false currentlyInstalled := GetInstalledVersions(true) for _, sel := range pv { if sel.pack.Name != CorePluginName { shouldInstall := true if pv := currentlyInstalled.find(sel.pack.Name); pv != nil { if pv.Version.NE(sel.Version) { fmt.Fprintln(out, "Uninstalling", sel.pack.Name) UninstallPlugin(out, sel.pack.Name) } else { shouldInstall = false } } if shouldInstall { if err := sel.DownloadAndInstall(out); err != nil { fmt.Fprintln(out, err) return } anyInstalled = true } } } if anyInstalled { fmt.Fprintln(out, "One or more plugins installed.") } else { fmt.Fprintln(out, "Nothing to install / update") } } // UninstallPlugin deletes the plugin folder of the given plugin func UninstallPlugin(out io.Writer, name string) { for _, p := range Plugins { if !p.IsEnabled() { continue } if p.Name == name { p.Loaded = false if err := os.RemoveAll(filepath.Join(ConfigDir, "plug", p.DirName)); err != nil { fmt.Fprintln(out, err) return } break } } } // Install installs the plugin func (pl PluginPackage) Install(out io.Writer) { selected, err := GetAllPluginPackages(out).Resolve(GetInstalledVersions(true), PluginDependencies{ &PluginDependency{ Name: pl.Name, Range: semver.Range(func(v semver.Version) bool { return true }), }}) if err != nil { fmt.Fprintln(out, err) return } selected.install(out) } // UpdatePlugins updates the given plugins func UpdatePlugins(out io.Writer, plugins []string) { // if no plugins are specified, update all installed plugins. if len(plugins) == 0 { for _, p := range Plugins { if !p.IsEnabled() || p.Default { continue } plugins = append(plugins, p.Name) } } fmt.Fprintln(out, "Checking for plugin updates") microVersion := PluginVersions{ newStaticPluginVersion(CorePluginName, util.Version), } var updates = make(PluginDependencies, 0) for _, name := range plugins { pv := GetInstalledPluginVersion(name) r, err := semver.ParseRange(">=" + pv) // Try to get newer versions. if err == nil { updates = append(updates, &PluginDependency{ Name: name, Range: r, }) } } selected, err := GetAllPluginPackages(out).Resolve(microVersion, updates) if err != nil { fmt.Fprintln(out, err) return } selected.install(out) } func PluginCommand(out io.Writer, cmd string, args []string) { switch cmd { case "install": installedVersions := GetInstalledVersions(false) for _, plugin := range args { pp := GetAllPluginPackages(out).Get(plugin) if pp == nil { fmt.Fprintln(out, "Unknown plugin \""+plugin+"\"") } else if err := pp.IsInstallable(out); err != nil { fmt.Fprintln(out, "Error installing ", plugin, ": ", err) } else { for _, installed := range installedVersions { if pp.Name == installed.Pack().Name { if pp.Versions[0].Version.Compare(installed.Version) == 1 { fmt.Fprintln(out, pp.Name, " is already installed but out-of-date: use 'plugin update ", pp.Name, "' to update") } else { fmt.Fprintln(out, pp.Name, " is already installed") } } } pp.Install(out) } } case "remove": removed := "" for _, plugin := range args { // check if the plugin exists. for _, p := range Plugins { if p.Name == plugin && p.Default { fmt.Fprintln(out, "Default plugins cannot be removed, but can be disabled via settings.") continue } if p.Name == plugin { UninstallPlugin(out, plugin) removed += plugin + " " continue } } } if removed != "" { fmt.Fprintln(out, "Removed ", removed) } else { fmt.Fprintln(out, "No plugins removed") } case "update": UpdatePlugins(out, args) case "list": plugins := GetInstalledVersions(false) fmt.Fprintln(out, "The following plugins are currently installed:") for _, p := range plugins { fmt.Fprintf(out, "%s (%s)\n", p.Pack().Name, p.Version) } case "search": plugins := SearchPlugin(out, args) fmt.Fprintln(out, len(plugins), " plugins found") for _, p := range plugins { fmt.Fprintln(out, "----------------") fmt.Fprintln(out, p.String()) } fmt.Fprintln(out, "----------------") case "available": packages := GetAllPluginPackages(out) fmt.Fprintln(out, "Available Plugins:") for _, pkg := range packages { fmt.Fprintln(out, pkg.Name) } default: fmt.Fprintln(out, "Invalid plugin command") } } micro-2.0.9/internal/config/plugin_installer_test.go000066400000000000000000000024131405030104300226430ustar00rootroot00000000000000package config import ( "testing" "github.com/blang/semver" "github.com/zyedidia/json5" ) func TestDependencyResolving(t *testing.T) { js := ` [{ "Name": "Foo", "Versions": [{ "Version": "1.0.0" }, { "Version": "1.5.0" },{ "Version": "2.0.0" }] }, { "Name": "Bar", "Versions": [{ "Version": "1.0.0", "Require": {"Foo": ">1.0.0 <2.0.0"} }] }, { "Name": "Unresolvable", "Versions": [{ "Version": "1.0.0", "Require": {"Foo": "<=1.0.0", "Bar": ">0.0.0"} }] }] ` var all PluginPackages err := json5.Unmarshal([]byte(js), &all) if err != nil { t.Error(err) } selected, err := all.Resolve(PluginVersions{}, PluginDependencies{ &PluginDependency{"Bar", semver.MustParseRange(">=1.0.0")}, }) check := func(name, version string) { v := selected.find(name) expected := semver.MustParse(version) if v == nil { t.Errorf("Failed to resolve %s", name) } else if expected.NE(v.Version) { t.Errorf("%s resolved in wrong version %v", name, v) } } if err != nil { t.Error(err) } else { check("Foo", "1.5.0") check("Bar", "1.0.0") } selected, err = all.Resolve(PluginVersions{}, PluginDependencies{ &PluginDependency{"Unresolvable", semver.MustParseRange(">0.0.0")}, }) if err == nil { t.Error("Unresolvable package resolved:", selected) } } micro-2.0.9/internal/config/plugin_manager.go000066400000000000000000000025571405030104300212320ustar00rootroot00000000000000package config import ( "bytes" "encoding/json" "errors" ) var ( ErrMissingName = errors.New("Missing or empty name field") ErrMissingDesc = errors.New("Missing or empty description field") ErrMissingSite = errors.New("Missing or empty website field") ) // PluginInfo contains all the needed info about a plugin // The info is just strings and are not used beyond that (except // the Site and Install fields should be valid URLs). This means // that the requirements for example can be formatted however the // plugin maker decides, the fields will only be parsed by humans // Name: name of plugin // Desc: description of plugin // Site: home website of plugin // Install: install link for plugin (can be link to repo or zip file) // Vstr: version // Require: list of dependencies and requirements type PluginInfo struct { Name string `json:"Name"` Desc string `json:"Description"` Site string `json:"Website"` } // NewPluginInfo parses a JSON input into a valid PluginInfo struct // Returns an error if there are any missing fields or any invalid fields // There are no optional fields in a plugin info json file func NewPluginInfo(data []byte) (*PluginInfo, error) { var info []PluginInfo dec := json.NewDecoder(bytes.NewReader(data)) // dec.DisallowUnknownFields() // Force errors if err := dec.Decode(&info); err != nil { return nil, err } return &info[0], nil } micro-2.0.9/internal/config/rtfiles.go000066400000000000000000000203511405030104300177020ustar00rootroot00000000000000package config import ( "errors" "io/ioutil" "log" "os" "path" "path/filepath" "regexp" "strings" ) const ( RTColorscheme = 0 RTSyntax = 1 RTHelp = 2 RTPlugin = 3 RTSyntaxHeader = 4 ) var ( NumTypes = 5 // How many filetypes are there ) type RTFiletype int // RuntimeFile allows the program to read runtime data like colorschemes or syntax files type RuntimeFile interface { // Name returns a name of the file without paths or extensions Name() string // Data returns the content of the file. Data() ([]byte, error) } // allFiles contains all available files, mapped by filetype var allFiles [][]RuntimeFile var realFiles [][]RuntimeFile func init() { allFiles = make([][]RuntimeFile, NumTypes) realFiles = make([][]RuntimeFile, NumTypes) } // NewRTFiletype creates a new RTFiletype func NewRTFiletype() int { NumTypes++ allFiles = append(allFiles, []RuntimeFile{}) realFiles = append(realFiles, []RuntimeFile{}) return NumTypes - 1 } // some file on filesystem type realFile string // some asset file type assetFile string // some file on filesystem but with a different name type namedFile struct { realFile name string } // a file with the data stored in memory type memoryFile struct { name string data []byte } func (mf memoryFile) Name() string { return mf.name } func (mf memoryFile) Data() ([]byte, error) { return mf.data, nil } func (rf realFile) Name() string { fn := filepath.Base(string(rf)) return fn[:len(fn)-len(filepath.Ext(fn))] } func (rf realFile) Data() ([]byte, error) { return ioutil.ReadFile(string(rf)) } func (af assetFile) Name() string { fn := path.Base(string(af)) return fn[:len(fn)-len(path.Ext(fn))] } func (af assetFile) Data() ([]byte, error) { return Asset(string(af)) } func (nf namedFile) Name() string { return nf.name } // AddRuntimeFile registers a file for the given filetype func AddRuntimeFile(fileType RTFiletype, file RuntimeFile) { allFiles[fileType] = append(allFiles[fileType], file) } // AddRealRuntimeFile registers a file for the given filetype func AddRealRuntimeFile(fileType RTFiletype, file RuntimeFile) { allFiles[fileType] = append(allFiles[fileType], file) realFiles[fileType] = append(realFiles[fileType], file) } // AddRuntimeFilesFromDirectory registers each file from the given directory for // the filetype which matches the file-pattern func AddRuntimeFilesFromDirectory(fileType RTFiletype, directory, pattern string) { files, _ := ioutil.ReadDir(directory) for _, f := range files { if ok, _ := filepath.Match(pattern, f.Name()); !f.IsDir() && ok { fullPath := filepath.Join(directory, f.Name()) AddRealRuntimeFile(fileType, realFile(fullPath)) } } } // AddRuntimeFilesFromAssets registers each file from the given asset-directory for // the filetype which matches the file-pattern func AddRuntimeFilesFromAssets(fileType RTFiletype, directory, pattern string) { files, err := AssetDir(directory) if err != nil { return } for _, f := range files { if ok, _ := path.Match(pattern, f); ok { AddRuntimeFile(fileType, assetFile(path.Join(directory, f))) } } } // FindRuntimeFile finds a runtime file of the given filetype and name // will return nil if no file was found func FindRuntimeFile(fileType RTFiletype, name string) RuntimeFile { for _, f := range ListRuntimeFiles(fileType) { if f.Name() == name { return f } } return nil } // ListRuntimeFiles lists all known runtime files for the given filetype func ListRuntimeFiles(fileType RTFiletype) []RuntimeFile { return allFiles[fileType] } // ListRealRuntimeFiles lists all real runtime files (on disk) for a filetype // these runtime files will be ones defined by the user and loaded from the config directory func ListRealRuntimeFiles(fileType RTFiletype) []RuntimeFile { return realFiles[fileType] } // InitRuntimeFiles initializes all assets file and the config directory func InitRuntimeFiles() { add := func(fileType RTFiletype, dir, pattern string) { AddRuntimeFilesFromDirectory(fileType, filepath.Join(ConfigDir, dir), pattern) AddRuntimeFilesFromAssets(fileType, path.Join("runtime", dir), pattern) } add(RTColorscheme, "colorschemes", "*.micro") add(RTSyntax, "syntax", "*.yaml") add(RTSyntaxHeader, "syntax", "*.hdr") add(RTHelp, "help", "*.md") initlua := filepath.Join(ConfigDir, "init.lua") if _, err := os.Stat(initlua); !os.IsNotExist(err) { p := new(Plugin) p.Name = "initlua" p.DirName = "initlua" p.Srcs = append(p.Srcs, realFile(initlua)) Plugins = append(Plugins, p) } // Search ConfigDir for plugin-scripts plugdir := filepath.Join(ConfigDir, "plug") files, _ := ioutil.ReadDir(plugdir) isID := regexp.MustCompile(`^[_A-Za-z0-9]+$`).MatchString for _, d := range files { if d.IsDir() { srcs, _ := ioutil.ReadDir(filepath.Join(plugdir, d.Name())) p := new(Plugin) p.Name = d.Name() p.DirName = d.Name() for _, f := range srcs { if strings.HasSuffix(f.Name(), ".lua") { p.Srcs = append(p.Srcs, realFile(filepath.Join(plugdir, d.Name(), f.Name()))) } else if strings.HasSuffix(f.Name(), ".json") { data, err := ioutil.ReadFile(filepath.Join(plugdir, d.Name(), f.Name())) if err != nil { continue } p.Info, err = NewPluginInfo(data) if err != nil { continue } p.Name = p.Info.Name } } if !isID(p.Name) || len(p.Srcs) <= 0 { log.Println(p.Name, "is not a plugin") continue } Plugins = append(Plugins, p) } } plugdir = filepath.Join("runtime", "plugins") if files, err := AssetDir(plugdir); err == nil { for _, d := range files { if srcs, err := AssetDir(filepath.Join(plugdir, d)); err == nil { p := new(Plugin) p.Name = d p.DirName = d p.Default = true for _, f := range srcs { if strings.HasSuffix(f, ".lua") { p.Srcs = append(p.Srcs, assetFile(filepath.Join(plugdir, d, f))) } else if strings.HasSuffix(f, ".json") { data, err := Asset(filepath.Join(plugdir, d, f)) if err != nil { continue } p.Info, err = NewPluginInfo(data) if err != nil { continue } p.Name = p.Info.Name } } if !isID(p.Name) || len(p.Srcs) <= 0 { log.Println(p.Name, "is not a plugin") continue } Plugins = append(Plugins, p) } } } } // PluginReadRuntimeFile allows plugin scripts to read the content of a runtime file func PluginReadRuntimeFile(fileType RTFiletype, name string) string { if file := FindRuntimeFile(fileType, name); file != nil { if data, err := file.Data(); err == nil { return string(data) } } return "" } // PluginListRuntimeFiles allows plugins to lists all runtime files of the given type func PluginListRuntimeFiles(fileType RTFiletype) []string { files := ListRuntimeFiles(fileType) result := make([]string, len(files)) for i, f := range files { result[i] = f.Name() } return result } // PluginAddRuntimeFile adds a file to the runtime files for a plugin func PluginAddRuntimeFile(plugin string, filetype RTFiletype, filePath string) error { pl := FindPlugin(plugin) if pl == nil { return errors.New("Plugin " + plugin + " does not exist") } pldir := pl.DirName fullpath := filepath.Join(ConfigDir, "plug", pldir, filePath) if _, err := os.Stat(fullpath); err == nil { AddRealRuntimeFile(filetype, realFile(fullpath)) } else { fullpath = path.Join("runtime", "plugins", pldir, filePath) AddRuntimeFile(filetype, assetFile(fullpath)) } return nil } // PluginAddRuntimeFilesFromDirectory adds files from a directory to the runtime files for a plugin func PluginAddRuntimeFilesFromDirectory(plugin string, filetype RTFiletype, directory, pattern string) error { pl := FindPlugin(plugin) if pl == nil { return errors.New("Plugin " + plugin + " does not exist") } pldir := pl.DirName fullpath := filepath.Join(ConfigDir, "plug", pldir, directory) if _, err := os.Stat(fullpath); err == nil { AddRuntimeFilesFromDirectory(filetype, fullpath, pattern) } else { fullpath = path.Join("runtime", "plugins", pldir, directory) AddRuntimeFilesFromAssets(filetype, fullpath, pattern) } return nil } // PluginAddRuntimeFileFromMemory adds a file to the runtime files for a plugin from a given string func PluginAddRuntimeFileFromMemory(filetype RTFiletype, filename, data string) { AddRealRuntimeFile(filetype, memoryFile{filename, []byte(data)}) } micro-2.0.9/internal/config/rtfiles_test.go000066400000000000000000000017201405030104300207400ustar00rootroot00000000000000package config import ( "testing" "github.com/stretchr/testify/assert" ) func init() { InitRuntimeFiles() } func TestAddFile(t *testing.T) { AddRuntimeFile(RTPlugin, memoryFile{"foo.lua", []byte("hello world\n")}) AddRuntimeFile(RTSyntax, memoryFile{"bar", []byte("some syntax file\n")}) f1 := FindRuntimeFile(RTPlugin, "foo.lua") assert.NotNil(t, f1) assert.Equal(t, "foo.lua", f1.Name()) data, err := f1.Data() assert.Nil(t, err) assert.Equal(t, []byte("hello world\n"), data) f2 := FindRuntimeFile(RTSyntax, "bar") assert.NotNil(t, f2) assert.Equal(t, "bar", f2.Name()) data, err = f2.Data() assert.Nil(t, err) assert.Equal(t, []byte("some syntax file\n"), data) } func TestFindFile(t *testing.T) { f := FindRuntimeFile(RTSyntax, "go") assert.NotNil(t, f) assert.Equal(t, "go", f.Name()) data, err := f.Data() assert.Nil(t, err) assert.Equal(t, []byte("filetype: go"), data[:12]) e := FindRuntimeFile(RTSyntax, "foobar") assert.Nil(t, e) } micro-2.0.9/internal/config/runtime.go000066400000000000000000033733741405030104300177400ustar00rootroot00000000000000// Code generated by go-bindata. // sources: // runtime/README.md // runtime/colorschemes/atom-dark.micro // runtime/colorschemes/bubblegum.micro // runtime/colorschemes/cmc-16.micro // runtime/colorschemes/cmc-tc.micro // runtime/colorschemes/darcula.micro // runtime/colorschemes/default.micro // runtime/colorschemes/dracula-tc.micro // runtime/colorschemes/dukedark-tc.micro // runtime/colorschemes/dukelight-tc.micro // runtime/colorschemes/dukeubuntu-tc.micro // runtime/colorschemes/geany.micro // runtime/colorschemes/gotham.micro // runtime/colorschemes/gruvbox-tc.micro // runtime/colorschemes/gruvbox.micro // runtime/colorschemes/material-tc.micro // runtime/colorschemes/monokai-dark.micro // runtime/colorschemes/monokai.micro // runtime/colorschemes/one-dark.micro // runtime/colorschemes/railscast.micro // runtime/colorschemes/simple.micro // runtime/colorschemes/solarized-tc.micro // runtime/colorschemes/solarized.micro // runtime/colorschemes/sunny-day.micro // runtime/colorschemes/twilight.micro // runtime/colorschemes/zenburn.micro // runtime/help/colors.md // runtime/help/commands.md // runtime/help/copypaste.md // runtime/help/defaultkeys.md // runtime/help/help.md // runtime/help/keybindings.md // runtime/help/options.md // runtime/help/plugins.md // runtime/help/tutorial.md // runtime/plugins/autoclose/autoclose.lua // runtime/plugins/comment/comment.lua // runtime/plugins/comment/help/comment.md // runtime/plugins/diff/diff.lua // runtime/plugins/ftoptions/ftoptions.lua // runtime/plugins/linter/help/linter.md // runtime/plugins/linter/linter.lua // runtime/plugins/literate/README.md // runtime/plugins/literate/literate.lua // runtime/plugins/status/help/status.md // runtime/plugins/status/status.lua // runtime/syntax/LICENSE // runtime/syntax/PowerShell.hdr // runtime/syntax/PowerShell.yaml // runtime/syntax/README.md // runtime/syntax/ada.hdr // runtime/syntax/ada.yaml // runtime/syntax/apacheconf.hdr // runtime/syntax/apacheconf.yaml // runtime/syntax/arduino.hdr // runtime/syntax/arduino.yaml // runtime/syntax/asciidoc.hdr // runtime/syntax/asciidoc.yaml // runtime/syntax/asm.hdr // runtime/syntax/asm.yaml // runtime/syntax/ats.hdr // runtime/syntax/ats.yaml // runtime/syntax/awk.hdr // runtime/syntax/awk.yaml // runtime/syntax/bat.hdr // runtime/syntax/bat.yaml // runtime/syntax/c.hdr // runtime/syntax/c.yaml // runtime/syntax/caddyfile.hdr // runtime/syntax/caddyfile.yaml // runtime/syntax/clojure.hdr // runtime/syntax/clojure.yaml // runtime/syntax/cmake.hdr // runtime/syntax/cmake.yaml // runtime/syntax/coffeescript.hdr // runtime/syntax/coffeescript.yaml // runtime/syntax/colortest.hdr // runtime/syntax/colortest.yaml // runtime/syntax/conky.hdr // runtime/syntax/conky.yaml // runtime/syntax/cpp.hdr // runtime/syntax/cpp.yaml // runtime/syntax/crontab.hdr // runtime/syntax/crontab.yaml // runtime/syntax/crystal.hdr // runtime/syntax/crystal.yaml // runtime/syntax/csharp.hdr // runtime/syntax/csharp.yaml // runtime/syntax/css.hdr // runtime/syntax/css.yaml // runtime/syntax/csx.hdr // runtime/syntax/csx.yaml // runtime/syntax/cython.hdr // runtime/syntax/cython.yaml // runtime/syntax/d.hdr // runtime/syntax/d.yaml // runtime/syntax/dart.hdr // runtime/syntax/dart.yaml // runtime/syntax/dockerfile.hdr // runtime/syntax/dockerfile.yaml // runtime/syntax/dot.hdr // runtime/syntax/dot.yaml // runtime/syntax/elixir.hdr // runtime/syntax/elixir.yaml // runtime/syntax/elm.hdr // runtime/syntax/elm.yaml // runtime/syntax/erb.hdr // runtime/syntax/erb.yaml // runtime/syntax/erlang.hdr // runtime/syntax/erlang.yaml // runtime/syntax/fish.hdr // runtime/syntax/fish.yaml // runtime/syntax/forth.hdr // runtime/syntax/forth.yaml // runtime/syntax/fortran.hdr // runtime/syntax/fortran.yaml // runtime/syntax/fsharp.hdr // runtime/syntax/fsharp.yaml // runtime/syntax/gdscript.hdr // runtime/syntax/gdscript.yaml // runtime/syntax/gemini.hdr // runtime/syntax/gemini.yaml // runtime/syntax/gentoo-ebuild.hdr // runtime/syntax/gentoo-ebuild.yaml // runtime/syntax/gentoo-etc-portage.hdr // runtime/syntax/gentoo-etc-portage.yaml // runtime/syntax/git-commit.hdr // runtime/syntax/git-commit.yaml // runtime/syntax/git-config.hdr // runtime/syntax/git-config.yaml // runtime/syntax/git-rebase-todo.hdr // runtime/syntax/git-rebase-todo.yaml // runtime/syntax/glsl.hdr // runtime/syntax/glsl.yaml // runtime/syntax/go.hdr // runtime/syntax/go.yaml // runtime/syntax/godoc.hdr // runtime/syntax/godoc.yaml // runtime/syntax/golo.hdr // runtime/syntax/golo.yaml // runtime/syntax/graphql.hdr // runtime/syntax/graphql.yaml // runtime/syntax/groff.hdr // runtime/syntax/groff.yaml // runtime/syntax/groovy.hdr // runtime/syntax/groovy.yaml // runtime/syntax/haml.hdr // runtime/syntax/haml.yaml // runtime/syntax/haskell.hdr // runtime/syntax/haskell.yaml // runtime/syntax/html.hdr // runtime/syntax/html.yaml // runtime/syntax/html4.hdr // runtime/syntax/html4.yaml // runtime/syntax/html5.hdr // runtime/syntax/html5.yaml // runtime/syntax/ini.hdr // runtime/syntax/ini.yaml // runtime/syntax/inputrc.hdr // runtime/syntax/inputrc.yaml // runtime/syntax/java.hdr // runtime/syntax/java.yaml // runtime/syntax/javascript.hdr // runtime/syntax/javascript.yaml // runtime/syntax/jinja2.hdr // runtime/syntax/jinja2.yaml // runtime/syntax/json.hdr // runtime/syntax/json.yaml // runtime/syntax/jsonnet.hdr // runtime/syntax/jsonnet.yaml // runtime/syntax/julia.hdr // runtime/syntax/julia.yaml // runtime/syntax/keymap.hdr // runtime/syntax/keymap.yaml // runtime/syntax/kickstart.hdr // runtime/syntax/kickstart.yaml // runtime/syntax/kotlin.hdr // runtime/syntax/kotlin.yaml // runtime/syntax/ledger.hdr // runtime/syntax/ledger.yaml // runtime/syntax/lfe.hdr // runtime/syntax/lfe.yaml // runtime/syntax/lilypond.hdr // runtime/syntax/lilypond.yaml // runtime/syntax/lisp.hdr // runtime/syntax/lisp.yaml // runtime/syntax/lua.hdr // runtime/syntax/lua.yaml // runtime/syntax/mail.hdr // runtime/syntax/mail.yaml // runtime/syntax/make_headers.go // runtime/syntax/makefile.hdr // runtime/syntax/makefile.yaml // runtime/syntax/man.hdr // runtime/syntax/man.yaml // runtime/syntax/markdown.hdr // runtime/syntax/markdown.yaml // runtime/syntax/mc.hdr // runtime/syntax/mc.yaml // runtime/syntax/micro.hdr // runtime/syntax/micro.yaml // runtime/syntax/mpdconf.hdr // runtime/syntax/mpdconf.yaml // runtime/syntax/nanorc.hdr // runtime/syntax/nanorc.yaml // runtime/syntax/nginx.hdr // runtime/syntax/nginx.yaml // runtime/syntax/nim.hdr // runtime/syntax/nim.yaml // runtime/syntax/objc.hdr // runtime/syntax/objc.yaml // runtime/syntax/ocaml.hdr // runtime/syntax/ocaml.yaml // runtime/syntax/octave.hdr // runtime/syntax/octave.yaml // runtime/syntax/pascal.hdr // runtime/syntax/pascal.yaml // runtime/syntax/patch.hdr // runtime/syntax/patch.yaml // runtime/syntax/peg.hdr // runtime/syntax/peg.yaml // runtime/syntax/perl.hdr // runtime/syntax/perl.yaml // runtime/syntax/perl6.hdr // runtime/syntax/perl6.yaml // runtime/syntax/php.hdr // runtime/syntax/php.yaml // runtime/syntax/pkg-config.hdr // runtime/syntax/pkg-config.yaml // runtime/syntax/po.hdr // runtime/syntax/po.yaml // runtime/syntax/pony.hdr // runtime/syntax/pony.yaml // runtime/syntax/pov.hdr // runtime/syntax/pov.yaml // runtime/syntax/privoxy-action.hdr // runtime/syntax/privoxy-action.yaml // runtime/syntax/privoxy-config.hdr // runtime/syntax/privoxy-config.yaml // runtime/syntax/privoxy-filter.hdr // runtime/syntax/privoxy-filter.yaml // runtime/syntax/proto.hdr // runtime/syntax/proto.yaml // runtime/syntax/puppet.hdr // runtime/syntax/puppet.yaml // runtime/syntax/python2.hdr // runtime/syntax/python2.yaml // runtime/syntax/python3.hdr // runtime/syntax/python3.yaml // runtime/syntax/r.hdr // runtime/syntax/r.yaml // runtime/syntax/reST.hdr // runtime/syntax/reST.yaml // runtime/syntax/renpy.hdr // runtime/syntax/renpy.yaml // runtime/syntax/rpmspec.hdr // runtime/syntax/rpmspec.yaml // runtime/syntax/ruby.hdr // runtime/syntax/ruby.yaml // runtime/syntax/rust.hdr // runtime/syntax/rust.yaml // runtime/syntax/sage.hdr // runtime/syntax/sage.yaml // runtime/syntax/scala.hdr // runtime/syntax/scala.yaml // runtime/syntax/sed.hdr // runtime/syntax/sed.yaml // runtime/syntax/sh.hdr // runtime/syntax/sh.yaml // runtime/syntax/sls.hdr // runtime/syntax/sls.yaml // runtime/syntax/solidity.hdr // runtime/syntax/solidity.yaml // runtime/syntax/sql.hdr // runtime/syntax/sql.yaml // runtime/syntax/stata.hdr // runtime/syntax/stata.yaml // runtime/syntax/svelte.hdr // runtime/syntax/svelte.yaml // runtime/syntax/swift.hdr // runtime/syntax/swift.yaml // runtime/syntax/syntax_checker.go // runtime/syntax/syntax_converter.go // runtime/syntax/systemd.hdr // runtime/syntax/systemd.yaml // runtime/syntax/tcl.hdr // runtime/syntax/tcl.yaml // runtime/syntax/tex.hdr // runtime/syntax/tex.yaml // runtime/syntax/toml.hdr // runtime/syntax/toml.yaml // runtime/syntax/twig.hdr // runtime/syntax/twig.yaml // runtime/syntax/typescript.hdr // runtime/syntax/typescript.yaml // runtime/syntax/v.hdr // runtime/syntax/v.yaml // runtime/syntax/vala.hdr // runtime/syntax/vala.yaml // runtime/syntax/verilog.hdr // runtime/syntax/verilog.yaml // runtime/syntax/vhdl.hdr // runtime/syntax/vhdl.yaml // runtime/syntax/vi.hdr // runtime/syntax/vi.yaml // runtime/syntax/vue.hdr // runtime/syntax/vue.yaml // runtime/syntax/xml.hdr // runtime/syntax/xml.yaml // runtime/syntax/xresources.hdr // runtime/syntax/xresources.yaml // runtime/syntax/yaml.hdr // runtime/syntax/yaml.yaml // runtime/syntax/yum.hdr // runtime/syntax/yum.yaml // runtime/syntax/zig.hdr // runtime/syntax/zig.yaml // runtime/syntax/zscript.hdr // runtime/syntax/zscript.yaml // runtime/syntax/zsh.hdr // runtime/syntax/zsh.yaml // DO NOT EDIT! package config import ( "bytes" "compress/gzip" "fmt" "io" "io/ioutil" "os" "path/filepath" "strings" "time" ) func bindataRead(data, name string) ([]byte, error) { gz, err := gzip.NewReader(strings.NewReader(data)) if err != nil { return nil, fmt.Errorf("Read %q: %v", name, err) } var buf bytes.Buffer _, err = io.Copy(&buf, gz) clErr := gz.Close() if err != nil { return nil, fmt.Errorf("Read %q: %v", name, err) } if clErr != nil { return nil, err } return buf.Bytes(), nil } type asset struct { bytes []byte info os.FileInfo } type bindataFileInfo struct { name string size int64 mode os.FileMode modTime time.Time } func (fi bindataFileInfo) Name() string { return fi.name } func (fi bindataFileInfo) Size() int64 { return fi.size } func (fi bindataFileInfo) Mode() os.FileMode { return fi.mode } func (fi bindataFileInfo) ModTime() time.Time { return fi.modTime } func (fi bindataFileInfo) IsDir() bool { return false } func (fi bindataFileInfo) Sys() interface{} { return nil } var _runtimeReadmeMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\xbd\x4e\xc5\x30\x0c\x46\xf7\x3e\xc5\x27\xb1\x5e\xb5\x8f\x81\x18\x58\x10\x0f\xd0\xfc\xb8\xd4\xdc\x24\xae\x1c\x87\x92\x85\x67\x47\x6d\x17\x24\xee\x6a\xfb\x9c\x23\x3f\xe1\xad\x15\xe3\x4c\x58\x38\x51\xc5\x22\x8a\x57\x0e\x2a\xc3\xf0\xbe\x72\x45\x64\xa5\x60\xa2\x1d\x3b\xa7\x04\x4f\xa0\xec\x29\x46\x8a\xe0\x02\x5b\x09\xcf\x02\xcf\xc5\x69\x3f\xd9\x4d\xd4\x9c\xe7\xc4\xd6\x6f\xf0\xcd\xc0\x86\xec\x3a\x3e\x5b\x35\xb8\x8a\x9d\x2e\xcb\x76\xac\x0a\xe6\x9f\x69\x0c\x52\x16\xfe\x98\xf2\x51\x9d\x47\xbc\x2c\xe8\xd2\xb0\x4b\x4b\x11\x89\xef\x04\x13\x64\x77\xa7\x63\xac\x90\xbd\x20\x48\x12\xad\x61\xa5\x4c\x75\x70\x25\xa2\xf6\x62\xee\xfb\x7a\xe1\x76\xe2\xc1\x95\xb3\x61\x2b\xe5\x47\xa1\xe9\xaf\x63\xc6\x21\xf9\x77\x72\x59\x67\x28\xd5\x8d\x82\xf1\x17\xa5\x3e\x0e\xc3\x6f\x00\x00\x00\xff\xff\x99\x17\xe0\x13\x33\x01\x00\x00" func runtimeReadmeMdBytes() ([]byte, error) { return bindataRead( _runtimeReadmeMd, "runtime/README.md", ) } func runtimeReadmeMd() (*asset, error) { bytes, err := runtimeReadmeMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/README.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesAtomDarkMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x94\xc1\x8e\xdb\x20\x18\x84\xef\x79\x0a\x04\x97\x56\x8a\x23\x07\xc7\xd8\x39\x66\x1d\x73\xac\xfa\x0a\x18\xfe\x6c\xd1\x62\x88\x30\xa8\xdd\xb7\xaf\x70\xdc\xee\x66\x43\x2c\x2e\x48\x7c\xcc\xa0\x7f\xc6\x96\xce\x38\x5f\x18\x6d\xdf\x90\x82\x8b\x88\x26\x20\x4c\xba\xba\x6b\x3b\xb6\x25\xfb\xf3\x9e\xd3\x3d\xde\x7c\x82\xa4\x1b\x47\xb0\x09\x6a\xba\xb4\xb2\x90\x56\x60\x83\xbe\x68\xf0\x08\x13\x7e\xec\xfb\x63\xfb\x44\xcc\x4e\x41\xcc\x6a\x9c\x37\x15\x3f\xaf\x52\xbb\x29\x78\x6d\x5f\x11\x26\xa7\x96\x73\x56\x66\xe1\x29\x88\x00\xcb\x0b\x8f\xac\x7b\xe1\x7d\x1e\x7b\x1f\x07\x67\xd6\x99\xab\x87\xab\x77\x12\x61\xc2\xe8\xcb\xfe\x09\x14\xde\xaf\x90\x26\xc6\xba\xfa\x99\xd5\x15\xa4\x16\xc9\xeb\xc4\x7a\x4a\xf3\x50\xb4\x0a\xbc\xd1\x16\x14\xc2\xe4\x5c\x55\xac\xa5\x59\x0e\xbc\x77\x1e\xe1\xc1\x19\x85\x08\xe7\x87\xc3\xe1\x90\x7f\x96\x53\xee\x03\x6b\xdb\x27\x58\x9a\x56\x9c\x92\x2f\xc2\xcb\xf9\x76\x49\xff\x5e\x4e\x0c\x83\xf0\xeb\x8c\xb6\x29\xf5\x42\xfe\x9a\xc1\xba\x4c\x2b\x6b\x9a\xec\x0a\x1b\xc7\x61\xae\x07\xab\x59\xcb\xd8\x96\xd0\x8a\xd6\xf4\x5e\x51\x46\xef\x93\x64\xfe\x42\x46\x59\xe9\xcb\xa5\x10\x4a\xcd\x53\x2c\xcb\x13\x2f\xcb\xc7\xf3\xd1\xa9\x54\x4d\x35\x97\x2e\x8f\x28\x30\x10\x6e\x51\x34\x65\xf9\x85\x78\x8d\x21\x80\x2f\x96\x24\xd6\x42\x58\xc8\xdf\xc2\xdb\x5b\x6f\xfb\xbe\xef\x9b\x26\x5f\xf2\xe8\xa7\xdb\x3e\x45\x41\xcf\x94\x57\x5f\xbf\x82\xb4\x95\xce\xc4\xd1\x7e\x22\xc8\x43\xa9\x77\x83\x17\xf2\x0d\xc2\x94\x69\x37\xf9\xe1\x10\xfc\x09\x60\xd3\x88\x52\x75\x27\xf4\x6d\x70\xce\x20\x6d\x51\xb7\x45\x10\xe4\xee\xfb\x9d\x64\x62\x76\xff\x6f\xe0\xe5\x17\x81\x37\xe4\xa7\x11\xda\xa2\x7f\x56\x9b\xbf\x01\x00\x00\xff\xff\x59\x38\xd4\xa1\x47\x04\x00\x00" func runtimeColorschemesAtomDarkMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesAtomDarkMicro, "runtime/colorschemes/atom-dark.micro", ) } func runtimeColorschemesAtomDarkMicro() (*asset, error) { bytes, err := runtimeColorschemesAtomDarkMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/atom-dark.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesBubblegumMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x93\xc1\x6e\xc3\x20\x0c\x86\xef\x7b\x0a\x8b\x49\xd3\x26\x35\x51\x49\xba\x6c\x3b\xef\xbe\x77\x20\xe0\x54\xa8\x04\x22\x03\xda\xfa\xf6\x13\x49\x5a\xb5\x81\xde\x2c\x7d\xbf\x89\x7f\xfb\x8f\x74\xc6\x51\x65\xb4\x3d\x81\xc2\x41\x44\x13\x80\x35\x07\xbe\x6b\x5a\xce\x9e\x6e\xa0\x74\xe3\x88\x76\x86\x5d\x01\x5a\x1f\x44\xa2\xbc\xdd\x3f\xa4\xb5\x0f\xa4\xed\x31\x89\x1e\x3f\x51\xdb\x38\xf6\x48\x49\x94\x0f\xa1\x15\xda\xa0\x07\xbd\xf0\x36\xe3\x3e\x88\x80\xcb\x98\x6d\x93\xd3\xf3\xd8\x3b\x53\x44\x13\xe1\x44\x4e\x02\x6b\x3e\x33\x16\xce\x13\x02\xeb\xf2\x69\xfc\x84\x52\x0b\x03\x8c\x77\x1f\x19\x44\x22\x47\xc0\x9a\x96\xef\x80\x77\xfb\x3b\x16\xad\x42\x32\xda\xa2\x02\x76\xad\xa1\xb4\xf5\xe0\x94\x2b\xaf\x3c\x59\x8d\x7e\x6e\x5c\xee\xf5\x7e\xb8\xef\x14\x7d\x2f\xa8\xcc\x94\x1e\x86\x4a\x28\x95\xbe\xdf\x16\xd0\xe8\x54\x5a\xb2\x02\xd6\xf0\x02\x56\x68\x30\x24\xba\xf5\x75\x8c\x21\x20\x55\xab\x75\xfe\x95\x6f\x65\x55\xfc\x0a\xb2\x6b\x12\x0e\x99\x26\x79\xaa\x2e\x29\x98\xad\x6f\xc6\x97\x91\xfc\x52\x27\xef\x5b\x38\x97\xd2\x99\x38\xda\x95\x3e\xff\x38\xc0\xbf\x80\x36\x19\x4e\xd7\xf4\xf0\xda\x3b\x67\x40\x5b\xf8\xde\xc1\x8b\xac\xdf\x40\x58\x05\x93\x11\xda\x42\x4f\x42\x9e\x30\xf8\x6d\x04\xea\xeb\x13\xc5\xff\x63\x09\x57\x7d\xe9\xbe\x11\xfd\x07\x00\x00\xff\xff\x4b\x76\x35\x97\x62\x03\x00\x00" func runtimeColorschemesBubblegumMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesBubblegumMicro, "runtime/colorschemes/bubblegum.micro", ) } func runtimeColorschemesBubblegumMicro() (*asset, error) { bytes, err := runtimeColorschemesBubblegumMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/bubblegum.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesCmc16Micro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x94\x41\xb2\xda\x30\x0c\x86\xf7\x9c\xc2\x63\x16\xdd\x80\x67\xba\xe9\x05\x58\xf7\x10\xb2\x2d\x82\x07\xc5\xce\xc8\x32\x94\xdb\x77\xec\x86\x57\x42\x1c\xde\x8e\x91\x3e\x2b\xbf\xa4\x1f\xed\x4f\x30\x09\x84\xf8\xdb\x9d\x08\x89\x20\xfe\xc8\x6a\x42\xce\x29\x02\x29\x97\x28\xb1\xca\xee\x82\x23\x9a\xdd\xfe\xe7\xaf\x16\x29\xac\x6e\xc8\x39\xa4\x68\x76\x8d\x38\x52\x88\x57\xe5\xd2\x38\x62\x14\xa5\x6d\x22\xaf\x2c\x81\xbb\xea\x65\x3e\x66\x81\x0a\xb8\x07\xc4\x6e\xca\xd8\x94\x68\x2e\xf0\x19\x32\xc2\x05\x67\x72\x60\xc4\x4f\xe8\x19\x28\x3f\x59\x46\xdf\x27\xb3\x70\x88\x83\xd2\x0f\x24\x4a\xf7\x4f\x8c\x29\x4c\x4a\x97\xe8\x91\x29\x44\x54\x96\x0a\x1e\xd4\xfd\x12\x04\xf5\x6e\xdf\x7b\x17\xcb\x68\x91\x95\x7e\x06\x36\xaa\x4f\xe8\x02\xd0\xe9\x02\x3c\x8b\x1d\x61\xc0\x28\xb0\xc0\x83\xc7\x28\xe1\x1c\x90\x37\x3a\xfa\x0f\x98\x11\x1c\xa7\xef\xb1\xdb\xd7\x07\x6b\x2b\xcb\x1e\x5e\x30\x47\x90\xf3\xe6\xc8\x37\xc0\x79\x2c\x2f\x60\x16\x10\x7c\x31\x4a\x67\xe0\xf9\x31\xda\xea\x83\x77\xcd\xff\xe2\xc6\x32\xb8\x2b\x4a\xfd\x44\xd3\xbb\x26\x04\x86\x45\x47\x5d\xc2\xe0\x1f\xc1\xe8\xd1\x6f\xf6\x34\x31\x4e\x9c\xdc\x96\x21\xe5\x31\xa1\xd2\xeb\x67\x35\x6e\xae\xf8\xb8\x27\xde\xae\x3d\x6f\x5b\xe9\xee\x92\x87\x98\x18\x95\xf6\x78\x86\x42\x4b\xbf\x20\x73\x7a\xee\xeb\x60\x39\x0c\x17\x79\x9f\x93\x24\x9f\x96\x0e\x05\x77\x9d\xd9\xce\xb8\x43\xac\xbb\x3b\xba\x66\xbc\x19\x5b\x0b\xae\x95\x8e\x4f\x27\x7f\x4c\x9b\xec\x38\x11\x59\xe8\x82\x75\xff\x25\x37\x5d\xba\xb9\xe3\xb0\xda\x91\x80\x6d\x8f\x37\xd2\xae\x30\x57\xc1\x0b\x45\xab\x3f\xf6\x1a\x9a\x75\xf5\x68\x1f\xce\xe7\x23\xf8\x66\x86\xb5\xe4\x96\x1d\x93\xaf\xf6\xf6\xdd\x13\xd1\x08\x8f\x84\x52\x81\xf7\xea\x43\x11\x41\x3e\xce\x9b\x3b\x6c\xa4\xef\xc0\xb1\x9d\xa0\xf5\x8d\xaa\x3f\x5d\xa2\x32\xc6\xce\xf1\xfc\xda\xb3\xff\x78\x99\x16\x6a\x6f\xc1\xb7\x03\xd2\x46\xfb\x37\x00\x00\xff\xff\xde\xb1\x39\x83\x03\x06\x00\x00" func runtimeColorschemesCmc16MicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesCmc16Micro, "runtime/colorschemes/cmc-16.micro", ) } func runtimeColorschemesCmc16Micro() (*asset, error) { bytes, err := runtimeColorschemesCmc16MicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/cmc-16.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesCmcTcMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x94\xcd\xb2\xe2\x2c\x10\x86\xf7\xe7\x2a\x28\x58\x7c\x9b\x98\x8a\xf9\x31\xb8\xfc\xca\x29\x77\x73\x11\xfc\x34\x1e\x4a\x02\x29\x20\x73\xca\xbb\x9f\x22\x1a\x35\x1e\x9c\x19\x56\x9a\x7e\x68\x5e\xfa\xed\x86\x1c\xd8\x18\x99\xb6\x3f\xc5\xc1\x80\x31\xcc\xfe\x17\xd0\x08\x3e\x38\xcb\x0c\x12\xce\xb8\xc9\xa3\x20\x3e\x61\x80\xf2\x83\x1c\x27\x73\xff\x08\x52\x47\xed\x6c\xf9\x91\xfe\xfb\x8d\xd1\xf6\x8c\x24\x28\x36\x99\x88\x30\x61\xf3\x2a\xc8\x16\xea\x6d\xdd\xe2\x67\x48\xb8\x61\x00\x1b\x11\xe6\xce\x48\x44\xba\x79\xbd\x10\x36\x44\x96\x10\x52\x55\x94\x52\x8a\x3f\x48\x26\x5c\x86\xe8\xb5\x3d\x21\x4c\x12\x53\x55\xd9\x1c\x0f\x88\xd1\xae\x7f\x0b\x8d\x20\x34\x33\x87\x4f\xe6\x17\x5d\x42\x08\xa1\xd4\x0a\xd7\x12\x6c\xd4\x4a\xc3\x1d\x82\xa6\xad\x9b\xf6\x0d\x54\x0e\x4c\x78\xf7\x6f\xe8\xaf\xc7\xc1\x5d\xdf\xf5\x6f\x0f\x2e\x85\x61\x21\x2c\xa8\x9a\xd7\x0a\x0d\x91\x45\x78\xae\x6f\x22\x5e\xea\x1b\x2e\x03\x77\x06\x61\xd2\xd7\xb5\x6a\xfa\x4c\xac\xe4\x9e\x89\x33\xc4\x80\x30\x69\xb7\xbb\x3d\x6c\x73\x50\x64\xa9\xae\x19\xbd\xa3\x87\xd1\x3b\xf1\xb0\xf8\x9b\xcc\x78\x19\x01\x61\xd2\x00\x6f\xe9\xfe\x5b\xa4\x3c\xc3\xe5\xcb\x79\xb9\x24\xe0\x12\x04\xdf\xad\x25\x5c\x1d\x43\x98\xf0\xae\x07\x29\xd6\xf5\x3a\x59\xe7\x01\xe1\x5b\x3f\xae\x62\xe0\xbd\x5b\x6a\x5d\xe4\x5c\x89\x4e\x2e\xa6\x4d\x56\x82\x37\xda\x02\x9a\x5b\x8c\xd2\x82\xa8\x7a\xd7\xd5\xf5\xfa\x34\x9b\xec\xd9\x88\xb9\x79\x8a\x9c\xd8\x94\x62\x63\xa7\x81\xa7\xce\xb9\x01\x05\x69\x76\xcd\xbe\x81\x77\x60\x19\x84\x77\xc6\xf0\x94\x34\x57\xa7\x64\xf4\x14\x66\x71\x8f\x71\xa3\xac\xdd\xef\xf8\xfa\x3a\x8c\x5f\x73\xfc\x81\x11\x93\xf7\xe9\x0a\x2b\x9d\xcf\x6d\x5b\x90\xb6\x6e\xbb\x76\xff\xb7\x5d\x37\xd1\x69\xbb\x07\xb9\xa2\xa5\x56\x6a\xc3\xa4\x04\x39\x8f\xf5\xff\xc7\x97\x59\x9c\xe3\x83\x93\xa9\xcd\x13\x72\x3c\xe6\x11\x09\x06\xe2\x4c\xfc\xe8\xab\xea\x85\x38\x4d\x31\x82\xdf\xdc\x3c\xce\xda\x7b\x43\xbe\x98\xb7\xd7\x77\x21\xc3\x5c\x7f\x0a\x67\xa6\xc1\x22\x9c\xf3\xfc\xfe\x72\x70\x97\x26\xe9\x6d\x9f\xaf\xb8\x32\xfa\x09\x16\x98\x76\x4a\xd1\xfc\xbb\x77\x85\x15\x33\x01\x1e\x53\x4c\xbb\x44\xff\x0e\x00\x00\xff\xff\x08\x55\xbf\x07\xaf\x05\x00\x00" func runtimeColorschemesCmcTcMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesCmcTcMicro, "runtime/colorschemes/cmc-tc.micro", ) } func runtimeColorschemesCmcTcMicro() (*asset, error) { bytes, err := runtimeColorschemesCmcTcMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/cmc-tc.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesDarculaMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x94\xd1\x6e\xdb\x20\x14\x86\xef\xfb\x14\x08\x6e\x63\xcb\x4d\x3d\x27\xd5\xae\x12\x27\xbe\x9c\xf6\x0a\xd8\x9c\x74\xa8\x18\xac\x03\x68\xeb\xdb\x4f\x60\x77\x72\x6b\xc2\xea\x73\x83\xc4\xc7\x7f\xe0\xfc\x7f\x32\x18\x65\xb0\x50\x52\xbf\x12\x01\x37\xee\x95\x23\x94\xb5\xf1\xdb\xb1\x7d\x1d\x8a\x3e\xac\xa0\xc1\x8c\x23\xe8\x00\x1d\xaa\x50\x49\x48\x0a\xd0\x4e\xde\x24\x20\xa1\xac\xeb\xda\xa6\xb9\xdc\x11\xd3\xd6\xf1\x59\xed\xf4\x7c\x6d\xf7\x59\xaa\xb4\x0e\xa5\x7e\x21\x94\x35\xa7\xe3\xe1\xdb\xf3\x57\xe0\x72\xf8\xc5\x31\x7f\xc2\x3a\xee\x60\x79\x53\xdb\x1e\xf7\x75\xfa\x16\xf6\x6d\xec\x8d\xca\x0f\x67\x42\x98\xd0\x0c\x79\x21\xf7\x36\xc1\x7f\x5a\x4d\x30\x48\xae\xf2\x90\xd7\x02\x50\x49\x0d\x82\x50\x76\x79\x7a\x6a\x8e\x69\x0e\x10\x0d\x12\xda\x1b\x25\x08\x6b\xcf\xf5\xf9\xb1\x49\x5f\xcb\x08\xf3\x8e\x65\xe4\xc2\xb4\xbc\x0d\x7d\x09\x5d\xf6\x77\xcb\x48\x3e\xca\xf1\xbe\x8f\x93\xcf\x30\x52\x87\x9c\x14\x8b\x45\x75\x17\x2a\xd9\x34\xb4\x2b\xb4\x1f\xfb\x18\xa8\x26\x7e\x3b\xb6\x6f\x43\x7d\x74\xdf\x23\x06\xc9\x3b\x07\xb6\xca\x42\xde\x6e\x05\x17\x22\x4e\xb1\xaa\x4e\x5d\x55\x6d\xf7\x47\x23\x42\x98\x45\x0c\x73\x1a\x11\xa0\xc0\xcd\x56\x1c\xaa\xea\x13\xf1\xe2\x9d\x03\x2c\x16\x27\x72\x26\x2c\xe4\x6f\x8e\x7a\x4e\xfa\xb5\xb9\x9c\x0f\x75\x3a\xe9\x1e\xed\xbc\x8e\x56\x24\x86\x11\x97\x83\x51\x7e\xd4\x2b\x82\xfd\x30\x04\xfe\x38\xd0\xe1\xd1\x21\x8c\xf6\x3b\xf9\xa9\xb8\xd4\xa4\x47\x3e\xbc\x82\xb3\xe5\xe7\xb8\x96\xff\x78\xba\xfc\x49\xd0\x07\xb6\xf9\x6d\x94\xef\xe7\x57\xd4\x16\x72\x3c\xbc\xeb\x74\x3d\x3e\x76\x2b\xb3\xff\x06\x00\x00\xff\xff\xe8\x30\xf6\xcd\x87\x04\x00\x00" func runtimeColorschemesDarculaMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesDarculaMicro, "runtime/colorschemes/darcula.micro", ) } func runtimeColorschemesDarculaMicro() (*asset, error) { bytes, err := runtimeColorschemesDarculaMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/darcula.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesDefaultMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x94\xc1\x8e\xdb\x20\x10\x86\xef\xfb\x14\x08\xae\xb1\xe5\x38\x1b\xdb\xab\x9e\x92\xda\x1c\xab\xbe\x02\x36\x93\x14\x2d\x06\x6b\xc0\x6a\xf7\xed\xab\xf1\x3a\x55\x76\x43\xdd\x9a\x0b\x12\x1f\x03\xf3\xff\x3f\x1e\xbc\xf5\x98\x59\xe3\x5e\x99\x86\x8b\x9a\x6d\x64\x5c\xc8\x46\x36\xb2\xdc\x89\xb2\xa1\xc1\x9f\xee\xa0\xc1\x8f\x23\x38\x82\xea\x63\xbd\x3f\x76\x49\xc8\x68\x70\xd1\x5c\x0c\x20\xe3\xa2\xaa\xda\x97\x4e\xfe\xa5\x98\x0b\x51\x2d\xd5\x4e\x5d\xb3\x97\xdb\x54\x1e\x22\x1a\x77\x65\x5c\x74\x55\x7b\xae\x9f\xff\x07\xce\x87\x1f\x8a\x2e\x71\x6e\xbb\xea\xd4\x26\x77\x84\xa8\x22\xac\x3d\xc9\x97\xb2\xaa\xd3\x8d\x87\xb7\xb1\xf7\x36\xf7\x13\xa0\x8a\x1e\x6f\xf0\x3e\x09\x4f\x08\x13\xfa\x81\x71\xf1\xf5\xfc\x7c\xde\x57\x49\x28\xbe\x4d\xb0\xad\x4f\x98\x60\x30\xca\x92\x3c\x55\x57\x96\x69\xb1\x67\xa7\x01\xad\x71\xa0\x19\x17\xed\xe1\x50\x35\xe9\x06\x00\x91\xae\xdd\x7b\xab\xd9\xe6\xb5\xbc\xf6\x37\x6c\xa3\x1c\xc9\x36\x07\x3a\x97\xf1\x75\x7d\xb7\x06\xe7\x63\x39\xd5\xf7\x8b\x05\x1b\x8c\x71\x14\x98\x6c\xf5\xea\x58\xd0\x48\x1e\x4a\xc7\x65\x6e\x1e\xfb\x25\x59\xa7\xe5\xdb\x89\x43\x49\xe3\x63\x0c\x66\x44\x2a\x99\xde\x90\xa8\xac\xcd\xe5\x92\x29\xad\x17\x15\x8b\xe2\x24\x8b\xe2\x71\x7d\xf4\x9a\x52\x4d\x88\x94\x69\x44\x83\x85\xf8\x6e\x45\x5d\x14\x9f\x88\xeb\x1c\x23\x60\xb6\x3a\xb1\x65\xc2\x4a\xfe\x54\xe8\xfe\x1d\xf9\x19\xc3\xfb\x9c\xac\x48\x89\xb1\x4c\x07\x6f\xe7\xd1\xdd\x11\xe2\x9b\x67\xf0\x2b\x82\xa3\xa6\x29\x8c\xe1\x0b\xfb\x6e\x95\x71\xac\x47\x35\xbc\x42\x0c\xf9\xe7\xb8\xe6\x7f\x78\xbe\xfe\x2d\xf8\x93\x78\x7c\x24\xb7\xfd\x77\xd4\x23\x14\xd5\x35\xf1\xee\x7f\x07\x00\x00\xff\xff\x45\x24\xca\x18\x90\x04\x00\x00" func runtimeColorschemesDefaultMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesDefaultMicro, "runtime/colorschemes/default.micro", ) } func runtimeColorschemesDefaultMicro() (*asset, error) { bytes, err := runtimeColorschemesDefaultMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/default.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesDraculaTcMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x94\x51\x93\x9b\x20\x14\x85\xdf\xf3\x2b\x18\x7c\x5d\x33\x5d\x37\x46\xf3\xa8\x49\xf8\x1f\x08\xd7\x2d\x13\x04\xe7\x02\xdd\xe6\xdf\x77\x50\x9b\x6a\x43\xf6\x8d\x99\xf3\x79\xcf\x99\xcb\x41\x61\xb5\xc5\x5c\x2b\x73\x23\x12\x7a\x1e\xb4\x27\x34\x63\x35\xab\x59\xf1\x96\x15\x75\xd1\x7c\x1c\xe9\x6e\x05\x09\x3b\x0c\x60\x22\x74\x2c\xaa\xa2\x39\xd0\xdd\x5a\x55\x12\x8c\x57\xbd\x02\x24\x34\x2b\x7f\xb0\xa6\x6a\x69\x5a\xdf\x0b\xcd\x9d\x23\x34\xab\xdb\xeb\x89\x5d\x5e\x51\xbf\x38\x3e\xf2\x6c\xad\x84\x35\xce\xf3\x29\x49\x7b\x39\x7d\xb0\x13\x4d\xa9\x7b\x13\x86\x0e\xd6\x33\x52\x90\xf3\xa8\xcc\x67\x84\xde\x59\x53\x9f\xb7\x46\xee\x3e\x74\x56\x47\x91\x55\xa7\xf3\x76\x1b\xb3\xb6\xef\x90\x8b\x1b\x78\x97\xb6\x59\x20\xcf\xa3\x43\x73\xad\xdf\x19\xdb\x3a\xf8\xfb\x08\x84\x2a\xcf\xb5\x12\x24\xb5\x90\x08\xec\x6f\x70\xff\xb2\x28\x57\x41\x36\x26\x23\x08\xc5\x5f\xc5\xf4\xdc\xc3\x72\x6d\x09\x79\x44\x18\xd1\x8a\x17\x93\x83\x91\x80\x5a\x19\x90\xe9\xaf\x01\xd1\x22\xa1\x9d\xd5\x92\x64\x8c\x95\x65\x59\x6e\xc3\x5b\x69\xff\xc9\xcf\xf3\xa5\xea\xfb\x9c\x4b\x39\xcd\x4f\x74\x66\xd2\x07\x2b\x63\x21\xe6\x08\x6d\x7d\x3c\x3f\x23\x12\x34\xf8\x85\x98\x43\xac\x91\xcf\xe0\x3d\x60\xbe\x84\x4d\xe5\x5c\x88\x2f\x8e\x66\x2e\xc3\xf5\x78\x69\xab\xff\x0a\x1e\x37\x19\x5c\xdc\x06\xa1\xcb\xf3\x78\x4b\xdd\xb9\xe7\x5d\x37\x55\xf7\x1b\x46\x99\xd8\xf3\x5c\xfc\x9c\xc0\xbf\xcf\x69\x05\x44\x9b\xfc\x51\xe0\x04\x20\x02\x62\x1c\xb1\x05\x93\xaf\x25\xa0\x9b\xcf\x31\xf8\xe1\x70\xa8\xca\x26\x19\x6a\x3e\x0a\xab\xc3\x60\x1e\xe4\x73\x19\xe1\xb7\x07\x33\x5d\xd9\xf2\xd7\xa0\xbb\xdd\x9f\x00\x00\x00\xff\xff\x77\x3e\x9c\x1b\x4b\x04\x00\x00" func runtimeColorschemesDraculaTcMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesDraculaTcMicro, "runtime/colorschemes/dracula-tc.micro", ) } func runtimeColorschemesDraculaTcMicro() (*asset, error) { bytes, err := runtimeColorschemesDraculaTcMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/dracula-tc.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesDukedarkTcMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x94\xdd\x72\x9b\x30\x10\x85\xef\xfb\x14\x0c\xdc\x06\x06\xff\xd4\xc1\x8f\xb3\xd2\x2e\x2e\x63\x21\x79\x56\xab\xa6\x7e\xfb\x0e\x92\xd3\x84\x8c\x22\x53\xeb\x46\x1e\x3e\x2d\x7b\x8e\xce\xa2\x9d\x71\xdc\x9a\xc9\x5e\xab\xb4\xd5\xce\x84\xd9\x56\x75\xd3\xf7\x3b\xda\x0f\xf5\x8f\x15\x31\xcf\x64\xa5\xaa\x9b\x53\x3f\xa8\x23\xbd\xe4\x21\xeb\x05\xac\x74\xca\x39\x53\xd5\xcd\x88\xe7\xd7\xdd\x58\x44\xb7\x51\x9d\x17\x9e\xec\xa5\xaa\x1b\xe8\xc7\xbe\xef\xb7\xc0\x9d\xfe\x05\xfc\x7f\x27\x02\x9b\x27\x07\x02\x33\x59\x59\xfe\x50\x6b\xc3\xac\x88\xab\x5a\x39\x83\x55\x51\x45\x60\x9f\xf6\x94\xcc\x3d\xef\x0f\x2b\x00\x69\x84\x60\xa2\x17\xf1\x97\xad\x82\xd3\x38\xb6\x80\x48\x18\x8b\xe8\x01\xf2\x3d\x46\x6e\x76\x38\x8d\x53\x44\x0b\x8d\x45\x14\xc9\x90\x44\x52\xab\xa3\xda\x9d\xbe\x21\x7f\x4f\xb8\x88\x7d\x3c\x7c\x69\xb0\x5f\xd6\x0a\x22\x66\xc7\xe5\x3a\x97\x20\x42\xdc\x6e\x27\xdf\x80\x6d\xba\xf9\x51\xd3\xf9\x98\xd7\x31\x21\x59\x59\xf4\x72\xd9\x9a\x0f\xae\xd3\x06\xbc\x7f\x42\xdb\x05\x6f\xff\xc5\x68\x59\x59\x70\x95\x86\xcf\xe0\xd7\x7b\xbe\x31\xdd\xd8\xe9\xf7\xc8\xfc\x04\x00\xca\xab\xf7\x37\xd2\x13\xc4\x34\x9e\x68\xbf\xcf\x8f\x9b\x17\x10\x4a\x53\xf9\xbc\xa0\x80\x04\xff\x88\xe0\x47\xca\x5e\x07\xfd\x85\xbb\xcf\x2a\xce\x6e\xc1\x98\xc4\x74\x8a\x41\x5f\x49\x7c\x39\xb6\x0f\x58\xe0\xb2\xa1\x4b\x01\xa5\xe0\x73\xca\x52\xe1\x35\xe3\xd0\x95\xe3\x20\xf7\x1b\xbd\xbf\xec\xa0\xf5\x70\xd0\xdf\x62\xdd\x95\xee\x6f\x8e\x71\x4b\x6f\x0b\x4e\x7f\x84\x6c\x1a\xc1\x82\xe6\x60\x91\x78\xf1\x1a\x33\xdf\xcb\xbf\x01\x00\x00\xff\xff\x4d\x1f\x3a\xbc\x77\x05\x00\x00" func runtimeColorschemesDukedarkTcMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesDukedarkTcMicro, "runtime/colorschemes/dukedark-tc.micro", ) } func runtimeColorschemesDukedarkTcMicro() (*asset, error) { bytes, err := runtimeColorschemesDukedarkTcMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/dukedark-tc.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesDukelightTcMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x94\xdd\x6e\x83\x20\x14\xc7\xef\xf7\x14\x44\x6f\xab\x61\x99\x6d\x7d\x1d\x84\x43\x47\x8a\x60\x0e\x87\x75\x7d\xfb\x05\xb5\xcb\x4c\xfc\x60\x72\x83\xf1\x77\xbe\xff\x47\xe9\xad\xc7\xca\x1a\x77\x67\xd3\x55\x7a\x1b\x7b\xc7\x8a\x52\xf3\x74\x8a\xb7\x05\xd1\xf7\xe0\x88\x15\xe5\x87\xbe\xea\xb3\x3e\xad\x43\x2e\x90\x70\x54\x77\xde\x5b\x56\x94\x97\xe6\x1d\x38\xdf\x45\xf3\xa8\x3a\x10\x1a\x77\x63\x45\xc9\x39\xe7\xfa\x20\xfa\x04\xd7\xf2\x53\xe0\xff\x2c\x22\xda\x03\x83\x88\x08\x8e\xd2\x0b\x54\x2e\xf6\x1d\x20\x2b\x3a\x6f\x15\x2b\x39\x6f\x78\xbb\x51\x45\xc4\x30\xdd\x81\x15\x25\x5c\xd2\x59\x00\x0a\xb4\x88\x96\xe6\xd8\x1b\xbd\x50\x46\xeb\x4a\x28\x05\x6a\xe4\x5a\xde\xec\x70\xbd\x57\x46\x9b\x11\xdd\x69\xef\x88\x2a\xb0\x40\x23\x79\xde\x0b\xfe\x65\x54\x2a\x76\xfe\x78\x9a\xeb\x5d\x40\x80\xe8\x71\xdf\xcf\x2d\x12\x01\x56\xf9\xe4\x43\xa0\x9b\x26\xaf\xa4\x6c\x37\x58\xa3\xc0\x51\xaa\xf7\xcf\x34\xae\xad\x38\x82\x6b\x69\x45\x08\x39\x26\x2e\xd9\x54\xb3\xa0\x1a\xde\x6c\xf5\x7e\xa1\x8b\x5f\x70\x65\xe2\x03\xc2\x80\x5e\xbe\x62\x5f\x5b\xce\xcf\xeb\x2e\xc3\x00\xd2\x08\x9b\x91\x65\x20\x41\x30\x2d\xe9\xb1\x57\x12\x14\xc3\xac\x48\x3d\x3e\xa7\xd1\xb7\x6c\x97\xdc\xb3\xef\x7c\x56\xf0\x11\xac\x3b\x14\xf2\x0e\x14\xf6\xa5\x3c\xc3\x24\x6e\x19\xa9\x92\xe8\x3a\x71\xa0\x3c\xf2\xca\xef\x4b\x84\x9e\x03\x64\xac\x6a\xc2\xea\x3b\x3c\x1f\x1e\x55\x4e\x6e\x09\x87\x6f\x02\xf7\x5a\xcb\xcd\x9a\xa3\x53\x80\xa9\xe1\x6a\xe5\x1f\xfa\x13\x00\x00\xff\xff\x5a\x37\xb6\x9d\x8b\x05\x00\x00" func runtimeColorschemesDukelightTcMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesDukelightTcMicro, "runtime/colorschemes/dukelight-tc.micro", ) } func runtimeColorschemesDukelightTcMicro() (*asset, error) { bytes, err := runtimeColorschemesDukelightTcMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/dukelight-tc.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesDukeubuntuTcMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x94\xdd\x92\x9b\x30\x0c\x85\xef\xfb\x14\x0c\xdc\x2e\x8c\xf3\xd3\x2c\x79\x1c\xd9\x12\x29\x13\x63\x67\x84\xdc\x6d\xde\xbe\x63\x93\x74\xcb\xd4\xeb\xd0\xf8\xc6\x19\x3e\x0b\x9d\xe3\x23\x8c\xb7\x9e\x5b\x3b\xba\x6b\xb5\x6c\x8d\xb7\x61\x72\x55\xdd\xec\x51\xa9\xfd\xa1\xfe\xb6\x22\xa6\x89\x9c\x54\x75\xd3\xf7\xa7\x63\x7f\x7c\xcb\x43\x6e\x16\x70\xd2\x69\xef\x6d\x55\x37\x03\x9e\xdf\x77\x43\x11\xdd\x46\x75\xb3\xf0\xe8\x2e\x55\xdd\x80\x1a\x94\x52\x5b\xe0\xce\xfc\x00\xfe\xbf\x13\x81\xed\x8b\x03\x81\x99\x9c\xc4\x3f\xd4\xba\x30\x69\xe2\xaa\xd6\xde\x62\x55\x54\x11\x78\x5e\xf6\x14\xcd\x3d\x28\xb5\x3b\xaf\x00\xa4\x01\x82\x4d\x5e\xa4\x5f\xb6\x0a\x8e\xc3\xd0\x02\x22\x61\x55\x37\x4a\x99\x1e\xf2\x3d\x26\x6e\xf2\x38\x0e\x63\x42\x0b\x8d\x25\x14\xc9\x92\x24\xd2\xe8\xa3\xde\x9d\xbe\x20\x7f\x8e\x18\xc5\x3e\x1e\xbe\x35\xa8\xe2\x5a\x41\xc4\xec\xb9\x5c\xe7\x12\x44\x88\xdb\xed\xe4\x07\xb0\x5b\x6e\x7e\x30\x74\x3e\xe6\x75\x8c\x48\x4e\xa2\x5e\x2e\x5b\xf3\xc9\x75\xc6\xc2\x3c\xbf\xa0\x5d\xc4\xdb\x3f\x31\x8a\x2b\x0b\xae\xd2\xf0\x09\xfe\x7b\xcf\x37\xa6\x1b\x7b\xf3\x8c\xcc\x77\x00\xa0\xbc\xfa\xf9\x46\x66\x84\x94\xc6\x13\xed\xf7\x94\x87\x04\x84\x96\xa9\x7c\x5d\x50\x40\xc2\xfc\x88\xe0\x33\x65\x4a\xbd\xf7\xa6\x5f\x73\xf7\x49\xa7\xd9\x2d\x18\xb3\x30\x9d\x66\x30\x57\x92\xb9\x1c\xdb\x07\x2c\x70\xd9\xd0\xa5\x80\xd6\xf0\x77\xca\x96\xc2\x6b\xc6\xa3\x2f\xc7\x41\xee\x37\x7a\xbe\xec\x60\x4c\x7f\x30\x5f\x62\xdd\x95\xee\x1f\x9e\x71\x4b\x6f\x11\xa7\x5f\x42\x6e\x19\xc1\x82\xe6\xe0\x90\x38\x7a\x8d\x99\xef\xe5\xef\x00\x00\x00\xff\xff\x28\xb5\x47\xb8\x77\x05\x00\x00" func runtimeColorschemesDukeubuntuTcMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesDukeubuntuTcMicro, "runtime/colorschemes/dukeubuntu-tc.micro", ) } func runtimeColorschemesDukeubuntuTcMicro() (*asset, error) { bytes, err := runtimeColorschemesDukeubuntuTcMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/dukeubuntu-tc.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesGeanyMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x92\x5d\x8e\xab\x30\x0c\x85\xdf\xef\x2a\x22\xee\x6b\xe9\x36\x66\x1d\x26\x36\x34\xaa\x63\x23\xe3\xa8\xc3\xee\x47\xa1\x9d\x91\x52\xd2\x37\xc4\x77\xfc\x73\x4e\xfc\xff\x8b\x40\xf6\x7f\x51\x59\x6d\xe4\x24\xf7\x10\x35\x67\x12\x0f\x83\x11\x0e\x2d\x90\xcd\xa1\x12\xa4\x19\x0a\x7b\x97\x5e\x37\xb7\x24\x4b\x18\x26\x65\x0c\x3b\x31\xeb\xa3\x11\x26\x24\xf1\x34\x27\xb2\x7e\xa3\xd5\x68\x35\x8d\x61\x88\x3b\x48\x43\xb6\x95\x62\x02\x0e\xc3\xc4\x85\x5a\xe2\xe0\xf4\xdc\xfa\xcc\xf6\x3c\x29\xf7\x67\x3d\xd9\xd5\xe1\x77\xdf\x53\xb5\xef\x2b\x75\x9a\xd6\xdf\x57\xfa\x76\x12\x24\xec\xf7\x26\x33\xb5\x73\x8a\xae\xa8\xaf\x61\x27\x83\x49\x6a\x36\x63\xbc\x81\xfd\xed\x03\xf1\xde\x68\x38\x09\x8d\x52\xf2\x54\xf3\x6b\x5f\xa0\x98\xd5\xf2\xcf\x8a\x1a\x53\xd9\x2a\xaf\x96\x20\xde\x2f\x8f\x5b\xf2\x37\x67\x30\x4d\xc7\xf8\x0f\xfc\xf9\x19\x95\x4b\x96\xd7\x92\x0b\x19\xb5\x46\x30\xcd\xf3\x08\x78\x64\xb3\x18\xf5\x68\x56\xac\x47\x80\x61\xe8\xdc\xc8\xa1\x40\x62\xf2\x2a\x78\x8f\x70\x29\xee\x64\xe3\x2b\xe0\xcb\x07\xfc\x00\x93\xe3\x10\x0f\xfe\x13\x00\x00\xff\xff\xb9\x4e\x59\x20\xe8\x02\x00\x00" func runtimeColorschemesGeanyMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesGeanyMicro, "runtime/colorschemes/geany.micro", ) } func runtimeColorschemesGeanyMicro() (*asset, error) { bytes, err := runtimeColorschemesGeanyMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/geany.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesGothamMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x93\xcb\x8e\xa3\x30\x10\x45\xf7\xf3\x15\x96\xd9\x86\xc8\xe6\x91\xc0\x92\xf0\xf8\x0f\x82\x8b\x8c\x35\xc6\x46\x7e\x68\x94\xbf\x6f\x99\x40\x77\x27\xed\xa0\x16\x1b\x4b\x9c\xba\xae\xba\x75\x3d\x28\xa1\x74\x2c\xb8\xfc\x87\x18\x8c\xbd\x13\x16\xe1\xa8\x2c\x1b\x5a\xb7\x87\x88\xd4\x94\xd0\x0c\xff\xf9\x06\x0d\x6a\x9a\x40\x7a\x28\xc9\xf2\xf4\x44\x83\x10\x67\x20\x2d\x1f\x39\x68\x84\xa3\xbc\x2c\xeb\xea\xf2\x46\x4c\x1a\xdb\x2f\x6a\x4d\x72\x2a\xd3\xf3\x2e\x75\x34\x56\x73\x79\xf3\x57\x57\x55\x51\x94\xbf\x81\x8f\xc3\xdf\xde\x37\xd1\xa4\xed\xa5\x0d\x57\x18\xdb\x5b\x58\x67\xda\xe9\x75\xd6\x30\x6b\x35\x20\x1c\xd5\x49\x4a\x93\x70\xab\xf6\x3e\xc3\xfe\x30\x66\x86\x81\xf7\x62\x1f\x72\x92\x81\x16\x5c\x02\x43\x38\x6a\x9b\x4b\x96\xa5\x41\x0e\xb4\x56\x1a\xe1\xab\x12\x0c\xed\xb6\xa5\x98\xda\xb0\xa2\x28\xea\xea\xf4\xd6\x09\x67\xfc\xbd\x08\x47\xa4\xa4\x5d\xd2\x1e\x56\x4b\x9e\xd7\x2b\xfd\x7e\xe3\xd5\xda\x9c\xf8\x2f\x28\xe8\xa5\x62\xe9\xa6\xeb\x12\x84\x2d\x30\x94\xd2\x9c\xd6\xcf\x5b\x73\x5a\x7b\xc9\xe7\x82\x6d\x1b\x81\x02\xc6\xc7\x31\xee\x19\x5b\x1c\x22\xa4\xea\x08\xf9\xf9\x7f\x52\xcc\x87\xd0\x23\x5d\x17\x46\x18\x08\xb0\x0b\xd1\x9c\x09\x79\x21\x6e\xce\x5a\xd0\xf1\xea\xf2\xa7\xc1\x81\x76\x56\xf2\x7f\xaf\xe5\x23\xa1\xdb\xd2\xc2\xb3\x9a\xc7\xf9\xcb\xe6\x97\x08\xfb\xe3\xa0\x84\x9b\x24\xc2\x21\x09\x73\x9f\xae\x4a\x04\x1e\xea\x47\x00\x00\x00\xff\xff\x37\xe7\xc6\xb2\xce\x03\x00\x00" func runtimeColorschemesGothamMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesGothamMicro, "runtime/colorschemes/gotham.micro", ) } func runtimeColorschemesGothamMicro() (*asset, error) { bytes, err := runtimeColorschemesGothamMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/gotham.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesGruvboxTcMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x93\xcd\x6e\x83\x30\x10\x84\xef\x7d\x0a\x84\xaf\x21\x72\x31\x01\x7c\xac\x54\xe5\x3d\xfc\xb3\xa4\x56\x8d\x8d\x16\x5b\x55\xde\xbe\x32\x49\xda\x92\xb8\xb4\xe2\xb2\x12\x9f\x47\x9e\xd9\xb1\xf2\xd6\x63\x65\x8d\x7b\x2f\x34\x0c\x22\xda\x50\x94\x04\xa4\x96\xb2\xde\x91\xba\x4f\x5f\xf9\xf4\x03\x52\x7e\x1c\xc1\x25\x88\xd7\x3d\xeb\x9a\x2c\x34\x9f\x47\xe9\x6d\x51\x12\xdd\x71\x5e\x3f\xff\x22\xe4\xe6\x20\x16\x25\xcd\xfa\x96\xcb\x4d\x6a\x3f\x07\x34\xee\x54\x94\x44\xf6\x52\xd6\xed\x7f\xe0\xbd\x7a\x13\xb8\x7d\xc2\x68\x70\xc1\x0c\x06\x12\xd7\x83\xa2\x9d\xca\x1b\x0a\x22\xc0\xd5\xf7\x20\x1b\xce\xf2\xbe\x27\x84\x09\xbd\xfa\x86\x6a\x76\x58\x01\xe1\x3c\xc1\xb6\xc4\x3c\x81\x32\xe2\x8f\xec\xa2\xd3\x80\xd6\x38\xd0\x45\xf9\x35\x17\x39\x12\x10\x7d\xf2\xc6\x35\xa5\x34\x9f\x81\x36\xc3\x50\x09\xad\x93\x18\xa1\xf4\xe5\x48\xe9\xe3\xff\xd1\xeb\x14\x53\x42\x8e\xc7\x3c\xa2\xc1\x42\x58\x88\xd7\x8e\xd2\x3b\xe2\x14\x43\x00\xac\x6e\xd7\xd9\x08\xe0\x4a\x7e\x08\x74\x97\x85\x6f\xe4\x90\x6c\x57\x2e\x8e\x72\xd9\x5f\xdb\x1e\xd4\xa1\xd9\x11\xa6\x58\xcf\xda\x75\x33\x22\x22\xb8\x50\xad\x0f\x6c\xb5\x33\xe2\x7c\x99\xd3\xbe\x72\x8a\xcb\xa8\xbc\x8d\xa3\x2b\x4a\xd2\xf1\xae\xa1\xf0\xd0\x99\x38\x5f\x15\x6e\x2f\xea\x72\xc7\x75\x27\x84\x94\x4b\x4f\xef\x99\xcf\x00\x00\x00\xff\xff\x4f\x4f\xf3\x6a\x9b\x03\x00\x00" func runtimeColorschemesGruvboxTcMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesGruvboxTcMicro, "runtime/colorschemes/gruvbox-tc.micro", ) } func runtimeColorschemesGruvboxTcMicro() (*asset, error) { bytes, err := runtimeColorschemesGruvboxTcMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/gruvbox-tc.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesGruvboxMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x91\xc1\x6e\xf4\x20\x0c\x84\xef\xff\x53\x58\x9c\x37\xbf\x16\x92\x34\xea\xe3\x10\xec\x54\xa8\x80\x23\x07\x0e\xfb\xf6\x15\x9b\xaa\xda\x14\x7a\xb3\xf4\xd9\x9e\xd1\x8c\xe3\xc0\x32\x04\x9f\x3e\x01\x69\xb3\x25\x64\x50\xc6\x8c\x37\x33\xce\xea\xdf\x0b\x74\x1c\x23\xa5\x0a\xa7\x1e\x4c\x47\xb6\x95\xea\x65\xfe\x93\xfe\x3f\xb2\xf8\xf4\x01\x4a\x4f\xa6\x59\xf2\x48\x29\xfb\xcd\x93\x80\xd2\xf7\xf7\x86\x1f\xd9\x66\x3a\x1d\x68\x33\xb5\xf8\x11\x57\x0e\x7d\xb6\x0b\xed\xc2\x0e\xd4\xd2\xca\xe6\xc7\x4e\xa0\x8c\xee\x7c\xdc\xc9\x79\x5b\x5f\x76\xce\x4a\x42\x92\xe0\x13\x21\xa8\x9f\x19\x7a\xbe\x49\x84\x05\x94\x19\xe7\x9b\x36\xd3\x55\x9b\x91\x41\xad\x1c\x10\x7a\x89\xa3\xdf\xb6\xc1\x22\x56\x8d\x71\x6a\x51\x64\xac\x79\xe1\xd3\x7e\x8b\x91\x02\xe5\x4a\xf5\xdb\xfd\x42\xab\xd5\x21\x95\xb8\xd6\xa8\xcf\x36\x97\x6b\x5f\x45\x84\x52\x1e\x2e\x8b\xbd\x14\x5c\x91\xe3\x9c\x6b\x86\xbf\xbf\x3c\x47\xc7\xa1\xc4\xd4\xd2\x5a\x67\x39\xbe\x2f\x4d\xeb\x21\xdb\x75\xb5\xf2\xc2\xbe\x02\x00\x00\xff\xff\x98\xd4\x69\x4c\xa8\x02\x00\x00" func runtimeColorschemesGruvboxMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesGruvboxMicro, "runtime/colorschemes/gruvbox.micro", ) } func runtimeColorschemesGruvboxMicro() (*asset, error) { bytes, err := runtimeColorschemesGruvboxMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/gruvbox.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesMaterialTcMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\xd3\x51\x8f\xa3\x20\x10\x07\xf0\xf7\xfb\x14\xc4\xbe\xd6\x86\xd5\x16\xe9\x63\xab\xf2\x3d\x50\xa6\x7b\x66\x15\xcc\x08\x77\xd9\x6f\x7f\x01\x5d\x2f\xa6\xd4\xa6\x2f\x34\xfd\x41\x87\xff\x0c\xad\xe9\x0d\xa6\x7d\xa7\xbf\xc8\xbc\x6c\x4d\xef\x06\x4d\x92\x43\xc6\xf2\x2c\xe7\xc9\xaf\x8d\x18\x06\xd0\x96\x24\x87\xb3\x60\xbc\xb8\x1c\xe3\x48\x4f\x56\x06\x25\x68\xf1\x51\xf0\x5d\x75\xd2\x6e\x68\x00\x3d\x2e\x78\xc9\x6e\xfb\x78\x1a\xa1\xed\x64\x5f\xfe\x96\x7e\x07\xbf\x56\x95\xc8\xdf\xec\xb0\xd8\xe9\x4f\x92\x1c\xca\xbc\xe6\xbc\x8a\x63\x87\x08\xda\xfa\x2f\x90\xae\xf5\x70\x5a\xd5\xf5\x8b\x7a\x1c\x4e\xf3\x1a\x7c\x50\x3c\xbf\x9e\xb3\x0d\x50\xf0\x90\xae\xf7\x11\xd4\xb5\x10\x42\x44\x4f\x51\xdd\xe3\x91\x4a\xa5\x40\x91\xe4\x40\xe9\x4d\x50\xfa\xfc\xfb\x60\x54\xf7\xe8\x02\x11\x22\x4e\x14\xf4\x60\x83\xa8\x0a\x4a\x9f\xc4\x9f\x4e\x85\xfb\xcc\x15\x1c\x97\x7b\x6d\x10\x20\x1a\x24\x49\x63\x7a\x45\x56\x37\x37\x6f\xe3\x3e\x9d\xb5\x80\xe9\xc2\xd7\xbb\xbd\x96\x7f\x25\xea\x39\xfe\xd5\x0a\xf1\x51\xb0\x8d\xed\x14\x68\xeb\x2f\x19\x52\xcf\x6e\xb7\x17\x79\xfd\x77\xa7\x41\xb6\x68\x42\x24\xe5\x9d\xdd\xe3\x5a\x7b\x9e\xb6\xf3\xa8\x5c\xa8\xff\x44\xe1\xb6\xeb\xec\xc2\x38\x63\xc7\x58\x53\x47\x84\x11\x4d\xeb\x67\xa9\xb8\x66\x2f\x46\x63\x99\xd0\x37\xc8\x4a\x0b\xcb\x4b\x7a\xc3\xdc\xb4\x4c\xd9\xcf\x38\xe6\xcd\x59\x5d\xb6\x01\x4e\xdf\x43\x63\xfc\x5f\x5e\x59\x79\x17\x75\xfc\xac\x60\x4e\x0d\xca\xf6\x0b\xec\xb4\xff\x7a\x16\x6c\x46\x40\x69\x43\xab\x77\xaa\xb4\xb2\x69\x24\xee\x57\x68\x8d\x32\x3f\xf3\xb5\x77\xd4\xf7\x08\xfb\x5d\x75\x5a\x01\xfa\x44\x14\x49\xd6\x35\x79\x7a\x65\xff\x02\x00\x00\xff\xff\x9e\x8f\x9c\x09\xd6\x04\x00\x00" func runtimeColorschemesMaterialTcMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesMaterialTcMicro, "runtime/colorschemes/material-tc.micro", ) } func runtimeColorschemesMaterialTcMicro() (*asset, error) { bytes, err := runtimeColorschemesMaterialTcMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/material-tc.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesMonokaiDarkMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x92\xd1\xae\xa3\x20\x10\x86\xef\xf7\x29\x88\xde\xd6\x46\x6d\x45\x7b\xa9\x8b\xbc\x87\x05\xec\x92\x45\x30\x23\x64\xb3\x6f\x7f\x32\xd6\x93\x94\x1e\xce\x91\x1b\x92\xff\xfb\x67\x9c\x9f\x11\xce\x38\x28\x8c\xb6\x7f\x89\x54\xf3\x14\x8c\x27\x59\xce\x1a\xd6\x31\x7a\xca\x2b\x56\x96\x65\x99\xfd\x7a\x81\x84\x5b\x16\x65\x11\x6a\x9b\xb6\x6a\xc6\x48\xd4\x52\x59\xaf\x67\xad\x80\x64\x39\xa5\xec\x36\xf2\x37\xb3\xdd\xfc\xb4\xbb\xfb\xb1\xab\x78\x5a\x3d\x6f\x1e\xb4\x7d\x90\x2c\x1f\x29\x1b\xda\xeb\x4f\xd0\x59\xfc\x99\xb0\xd9\xc0\x46\xda\xb3\x88\xdc\xfc\xe4\xd5\xf1\xaf\xfc\x56\xd3\xb6\x8e\xe4\x15\xd4\x0a\x4e\x90\x2c\xff\x3d\x5c\x87\x8a\x46\xa2\xff\xbf\xaa\xf4\x08\xdb\xaa\x84\x9e\x0c\x4e\x40\xc7\xba\x8e\xe7\x0f\x56\x2a\x30\xda\x2a\x89\x21\x5e\x2e\xb4\x8b\x7b\x2a\x00\x07\x24\xbb\x3b\x23\x49\xb2\xad\x93\xee\x53\x4e\xd8\x71\xa2\xb0\x61\x7d\x92\xe5\x75\x87\xe7\x94\xf3\x8e\x77\x3c\xe6\xb4\xc5\x77\x28\x8e\x68\x9a\x12\xcf\xe9\x30\x44\x20\x96\x2a\x6c\x58\xee\xfb\x83\xf5\xfb\x97\x04\x45\x00\xc0\x92\x69\x43\x62\x4d\xa4\x9e\xe7\x62\x92\x72\x4f\xa2\x2c\x7b\x9e\xd2\x17\x27\x71\x59\x10\xe1\x3c\x8d\x48\x65\x94\x7f\xc6\xd9\x7e\x69\xf2\x08\xde\x2b\x28\x8e\x54\x53\x81\x1e\xc4\xbf\x09\xec\xf7\x1b\x15\x60\x7b\xde\x31\xd6\x4b\x8d\xe7\x6d\xe5\xf0\x2a\x9c\x09\x8b\x7d\x21\x3e\x02\x00\x00\xff\xff\xe5\xd4\xef\xf1\x3a\x03\x00\x00" func runtimeColorschemesMonokaiDarkMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesMonokaiDarkMicro, "runtime/colorschemes/monokai-dark.micro", ) } func runtimeColorschemesMonokaiDarkMicro() (*asset, error) { bytes, err := runtimeColorschemesMonokaiDarkMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/monokai-dark.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesMonokaiMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x94\xc1\x8e\xdb\x20\x10\x86\xef\xfb\x14\x08\xae\xb1\xe5\x38\x1b\xdb\xab\x9e\x92\xda\x1c\xab\xbe\x02\x36\x93\x14\x2d\x06\x6b\xc0\x6a\xf7\xed\xab\xf1\x7a\xab\x6c\x42\xdd\x9a\x0b\x12\x1f\xc3\xf0\xff\x3f\x1e\xbc\xf5\x98\x59\xe3\x5e\x99\x86\x8b\x9a\x6d\x64\x5c\xc8\x46\x36\xb2\xdc\x89\xb2\xa1\xc1\x9f\x6e\xa0\xc1\x8f\x23\x38\x82\xea\x63\xbd\x3f\x76\x49\xc8\x68\x70\xd1\x5c\x0c\x20\xe3\xa2\xaa\xda\x97\x4e\xfe\xa5\x98\x0b\x51\x2d\xd5\x4e\x5d\xb3\x97\xdb\x54\x1e\x22\x1a\x77\x65\x5c\x74\x55\x7b\xae\x9f\xff\x07\xce\x87\x1f\x8a\x9a\x38\xb7\x5d\x75\x6a\x93\x3b\x42\x54\x11\xd6\x3b\xc9\x97\xb2\xaa\xd3\x17\x0f\x6f\x63\xef\x6d\xee\x27\x40\x15\x3d\x6e\xc3\x13\xc2\x84\x7e\x60\x5c\x7c\x3d\x3f\x9f\xf7\x55\x12\x8a\x6f\x13\x6c\xeb\x13\x26\x18\x8c\xb2\x24\x4f\xd5\x95\x65\x5a\xec\xd9\x69\x40\x6b\x1c\x68\xc6\x45\x7b\x38\x54\x4d\xba\x27\x40\xa4\xb6\x7b\x6f\x35\xdb\x6c\xcb\x6b\xff\x81\x6d\x94\x23\xd9\xe6\x40\xe7\x32\xbe\xae\xef\xd6\xe0\x7c\x2e\xa7\xfa\x7e\xb1\x60\x83\x31\x8e\x02\x93\xad\x5e\x1d\x0b\x1a\xc9\x43\xe9\xb8\xcc\xcd\x63\xbf\x24\xeb\xb4\x7c\x3b\x71\x28\x69\x7c\x8e\xc1\x8c\x48\x25\xd3\x1b\x12\x95\xb5\xb9\x5c\x32\xa5\xf5\xa2\x62\x51\x9c\x64\x51\x3c\xae\x8f\x5e\x53\xaa\x09\x91\x32\x8d\x68\xb0\x10\xdf\xad\xa8\x8b\xe2\x8e\xb8\xce\x31\x02\x66\xab\x13\x5b\x26\xac\xe4\x4f\x85\xee\xdf\x91\x9f\x31\xbc\xcf\xc9\x8a\x94\x18\xcb\x74\xf0\x76\x1e\xdd\x0d\x21\xbe\x79\x06\xbf\x22\x38\xba\x34\x85\x31\x7c\x61\xdf\xad\x32\x8e\xf5\xa8\x86\x57\x88\x21\xbf\x8f\x6b\xfe\x87\xe7\xeb\xdf\x82\x3f\x89\xc7\x47\xf2\xb1\xff\x86\x7a\x84\xa2\xba\x26\xde\xfd\xef\x00\x00\x00\xff\xff\x73\xbe\xe8\x5f\x90\x04\x00\x00" func runtimeColorschemesMonokaiMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesMonokaiMicro, "runtime/colorschemes/monokai.micro", ) } func runtimeColorschemesMonokaiMicro() (*asset, error) { bytes, err := runtimeColorschemesMonokaiMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/monokai.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesOneDarkMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x92\xd1\x92\xa3\x2c\x10\x85\xef\xe7\x29\x2c\xbd\x8d\x16\xc1\x5f\xc4\x4b\x84\xf8\x1e\x28\x9d\xfc\x56\x14\x2c\xc4\x99\xca\xdb\x6f\x61\xdc\xdd\xd1\xc1\x2d\x6e\xb4\xce\x47\x77\xd3\xe7\x74\x66\x30\x36\x1d\x7a\xfd\x8c\x14\xdc\xe5\x32\xb8\x28\x4e\x58\x5d\xe3\xba\xb9\x24\xf8\x8a\x0b\xcc\xe3\x8f\x6f\xd0\xfb\xb3\x33\xc3\x32\xea\x28\x4e\x30\xc5\x3c\xff\xef\x40\x8c\x23\x68\x5f\xa6\xe0\x24\x2f\xd1\x41\xd4\xb3\x93\xab\xca\x49\x49\x85\x08\xaa\x99\x5e\xc6\x16\x6c\x14\x27\xb7\x82\xa3\xb2\x0e\x43\xb3\xb3\xbd\x7e\x44\x71\x52\x51\x9e\x97\xd5\xbf\xa0\xac\xfb\x5f\xfa\x72\xb5\xb8\x11\x76\xd2\x73\x9e\xa0\xeb\xe5\xc0\xdf\xa4\x10\x0d\x66\x87\x87\x2d\xd6\x82\x76\xfe\x07\xd2\x3f\x13\x72\xe2\x4f\x78\x57\x8b\x9d\xdf\xdf\x10\x5e\x95\xea\x3f\x7b\xb5\x56\x79\x6f\x7c\x27\x82\xb5\x66\x9d\x04\x33\xca\xae\x87\x7b\xf7\x7b\x2a\x95\x02\x15\xc5\x09\x42\xac\x41\xe8\xa7\x3e\x1a\xd5\xdf\xfb\x15\x69\x9a\x30\xa2\x60\x00\xb7\x12\xa2\x44\xe8\x40\x3c\x16\xe7\xc0\xa6\xbf\xc7\xa8\x6a\x5a\x54\x22\x44\x7c\x49\xab\x37\x23\x7e\x32\xbd\x02\xed\xfc\x1c\xbe\x06\xb9\xb2\xe6\xd6\x9c\xe8\x59\x37\xc8\x79\x0e\x07\xe3\x1b\xf5\x29\xed\x09\xa3\x3d\x94\x6e\x4e\x17\x57\x7f\x76\xc0\xde\x37\x92\x13\x41\xf3\x4b\xc8\x96\xc9\xc2\x64\x4d\xe7\xe3\x87\x78\x41\xf7\xc9\xda\x62\x72\x22\x3a\xe9\x60\x4b\x7f\x60\x44\x2f\x2f\xf3\xdf\x3c\x50\x4c\x2f\x21\xeb\xe7\xd7\xd8\x1a\xdf\x82\x71\x4a\x8b\x3a\xa0\x65\xad\x95\xdd\x13\xdc\x1c\xce\xce\x06\x99\x09\xac\x74\xe6\x64\x61\x1b\xe4\xe4\x23\xdc\xc9\xc9\xb6\x5d\x77\xd9\xe0\x06\xdd\xf8\x25\xc1\xc2\x9f\x3d\x63\x94\x89\xe2\x84\xd6\x15\x65\x87\xdb\xaf\xc9\xbf\x92\x10\x51\x1d\x2c\xf7\x4a\xf6\x84\xd7\x97\xb1\x2a\x3c\xd9\xa2\x15\x58\xbf\x26\xaf\xd3\xaa\x22\x8c\xc6\x1f\xbf\x02\x00\x00\xff\xff\xbd\xd3\x85\x46\xaa\x04\x00\x00" func runtimeColorschemesOneDarkMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesOneDarkMicro, "runtime/colorschemes/one-dark.micro", ) } func runtimeColorschemesOneDarkMicro() (*asset, error) { bytes, err := runtimeColorschemesOneDarkMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/one-dark.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesRailscastMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x94\xcd\x6e\xdb\x30\x10\x84\xef\x79\x8a\xad\x74\x8d\x03\xc9\x8e\xec\xf8\x58\xa4\xf0\xb9\x87\xbe\x00\x7f\xd6\x16\x11\x8a\x2b\x2c\x97\x70\xfd\xf6\x05\x55\xc1\xb0\x13\x99\x2d\xe6\x42\x40\x9f\x46\xe4\xec\x50\x86\x3c\xf1\xca\xbb\xf0\x01\x16\x8f\x2a\x79\x81\xaa\xc6\x2d\xb6\xd6\x3c\xd7\x6b\x9d\x55\x3d\xdd\x40\x86\x86\x01\x43\x86\xb4\xd9\xbf\x76\x6f\x8b\x50\x14\x25\x38\x63\xc6\xec\xde\x36\x9b\x07\x5e\x21\x8a\x9a\x28\xd5\x99\xf5\xb6\x2d\x52\x2f\x9a\xc8\x43\x55\x6f\xed\xde\x68\x2c\xa3\x71\x44\xe3\x94\x7f\xef\x15\x43\x55\xbf\x76\xfb\xf5\x66\xd9\x5c\x2e\x23\x96\x3d\x47\xc6\x91\xc9\x94\x4f\x32\x7f\xaf\x0c\xa5\x60\x91\xbd\x0b\x68\xcb\x9c\x90\x25\xa8\x34\x79\x0b\x25\x0c\x99\x89\xff\x83\x3b\x25\x11\xe4\xd5\x8c\x5f\xc9\xb6\x6d\xbb\xf6\xfd\x8e\x74\xc1\x62\x90\x95\x99\x53\x6b\xb3\x16\x2d\xf3\x21\x56\x21\x0d\x1a\x33\xa8\xda\xac\xe7\x7a\xbd\xc9\xba\x1f\x48\x62\xce\x96\xf7\x2f\x14\xea\x65\xdd\xf1\xb8\x52\xd6\x4e\x19\x35\xcd\xf7\x43\xd3\x7c\x7d\x3e\x90\x75\x47\x37\x21\x87\xc3\x32\x62\xd1\xa3\x4c\xc4\x8f\x5d\xd3\x7c\x22\xe6\x44\xce\x8a\x83\x0b\xa7\x9b\xf6\x2d\x64\x12\x2f\x83\x9e\x6a\x87\x56\xef\xba\x07\xd3\x9f\x98\x17\x1a\x91\x95\xdc\x85\xfc\x18\xd6\xac\xcc\x07\x4a\x2c\xc3\x2e\x0f\x24\x9f\x95\xff\xb1\x03\x51\x92\x62\x4e\x39\x5f\xcc\x36\x6b\x71\x1e\xa2\xb4\x56\xd7\xd2\x14\x40\x93\x38\xfe\x5d\x67\xc7\x4d\x97\xf5\xe9\xaa\xe5\xa5\x21\x9f\x86\xb0\x4c\xc4\x51\x19\x84\xea\xda\x7a\xf8\x32\xf7\xa7\x5a\x7a\x84\x9f\x17\xe9\x29\x40\xbc\x04\x51\xbf\xf3\x4f\xc8\x05\x27\x8e\x02\x28\x46\x38\x33\x85\xd3\x0b\xfc\xea\x5d\x04\x17\x21\x90\x40\x4f\x67\xb8\x50\x82\xd8\x53\xf2\x16\x2c\x81\x45\x43\x53\xf2\xf1\xdb\xed\x06\x34\xbb\x53\x2f\x27\x46\x0c\x0b\xe9\xfd\x09\x00\x00\xff\xff\xc6\x60\xf7\x7f\xf9\x04\x00\x00" func runtimeColorschemesRailscastMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesRailscastMicro, "runtime/colorschemes/railscast.micro", ) } func runtimeColorschemesRailscastMicro() (*asset, error) { bytes, err := runtimeColorschemesRailscastMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/railscast.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesSimpleMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x93\x41\xae\xdb\x30\x0c\x44\xf7\x39\x05\xa1\xbf\x69\x81\x6f\x5f\x22\x5d\xf7\x0e\xb2\x44\xcb\x44\x64\x32\xa0\x28\xa4\xbe\x7d\xa1\xc4\x4d\x2b\x7f\x77\x67\xe0\xcd\x50\xe2\x68\x1c\x24\x8b\x0e\x99\xf8\x06\x41\xd6\x15\xd9\xc0\x4d\xb9\xa2\xbb\x74\x84\x8b\xf9\x86\x14\x63\x47\x28\x22\x1b\xcd\x84\x0a\x2e\x6c\x9e\x3b\x58\xcc\x1b\xbe\x46\x6e\x98\xb3\x3c\x7a\xba\xad\x93\xe4\x53\x74\x57\xbc\xab\x04\x70\xab\x4f\xc8\xe6\x3b\x68\xdb\x1d\xc1\x25\x45\x3c\x9c\x76\xc7\x40\x3e\x9f\x9b\x28\xb1\x28\x82\x8b\x38\xfb\x9a\xad\x63\xa8\x2a\x0a\xee\x73\x52\x4a\x8b\x1d\x37\x34\x89\xf2\x86\x27\x77\x25\x6e\x11\x0c\x61\xf1\xda\x92\xf3\xe1\xd6\xe1\x4c\x8c\x03\xd7\x75\x6a\x09\x9d\xd8\x43\x55\x6d\xfe\x4e\x77\xbc\x43\xa4\x79\x1e\x7c\x8c\x18\xcf\x16\x7f\xd2\x55\x62\x7b\x86\x78\x7a\xc8\x53\x11\x31\xa3\x35\xc1\x71\x7a\xaa\x66\xa8\xc3\x9f\x18\xfe\x83\x1f\x5e\x99\x38\xed\xf6\x8f\x6b\xd5\x22\xfa\x5c\x0f\x82\xaf\x05\x0b\x28\xfa\xe8\x27\xca\x64\x1b\x50\x29\x15\xcb\x08\x3f\xa8\xf8\x29\x63\x84\x59\x14\x58\x1e\xe3\xe5\xa3\x5f\xbe\xbc\xbe\x11\xdc\x63\x21\xc3\xcf\xaf\x09\xbe\x3e\x83\xe4\xba\xf2\xae\x72\x97\x8f\x9f\x02\xf8\xcb\x90\x5b\x26\xad\x11\x65\x84\x6f\x93\x48\x06\x62\xb8\x7e\x3f\xf6\x65\x7c\x6b\xff\x36\xa0\x8d\x98\xd4\x87\x1b\x1a\x2c\x94\x96\xdc\x1e\x98\x38\x8d\x5f\x4b\x3a\xee\xba\xf2\xaf\xfd\xda\x54\x50\x16\x9c\x3c\xa7\x02\xb6\xe0\xfb\x0f\x7a\x0e\x38\x29\xf4\xb8\xab\xc1\xed\x4a\x77\xf9\x1d\x00\x00\xff\xff\x7c\x27\xfd\x5a\x80\x03\x00\x00" func runtimeColorschemesSimpleMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesSimpleMicro, "runtime/colorschemes/simple.micro", ) } func runtimeColorschemesSimpleMicro() (*asset, error) { bytes, err := runtimeColorschemesSimpleMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/simple.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesSolarizedTcMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x93\xd1\x92\x82\x20\x18\x85\xef\xf7\x29\x18\xbd\xcd\x86\x34\x0d\x2f\xb3\xd6\xf7\x40\xf8\x2d\x26\x04\x07\x61\x76\x7b\xfb\x1d\xb4\xdd\xb6\x22\xee\x9c\xf1\xe3\xfc\x3f\xe7\x1c\x98\x96\xda\x64\x52\xa8\x0b\xe2\xd0\x53\x27\x2d\x4a\x52\x52\xd4\xdb\xba\x5a\xa5\x18\xe7\xa4\x28\x92\x8f\x7f\x10\xd3\xc3\x00\xca\x43\x25\xa9\x3e\x77\x65\x10\x12\x1c\x94\x15\xbd\x00\x83\x92\x34\xaf\x48\x73\xcc\xdf\x88\xa9\xc9\xd2\x59\x2d\xdf\xef\x37\x35\x89\x52\xeb\x69\x04\x26\xa8\x3c\x9c\xa9\xd7\x3d\x1e\x8a\x3c\x6f\x83\x27\x26\x4b\x2d\xdc\xd6\x24\x65\x5d\x63\x1c\xc6\xae\x43\xa7\x65\x9c\x19\x0d\x8c\x46\x33\x94\xa4\x87\x66\xdb\x6c\xc2\xa6\xd8\xeb\x08\x28\x49\x9b\x92\xbc\x1d\xb5\xac\x1e\xb7\xc3\x29\x0e\x46\x0a\x05\xdc\x5f\xaf\x28\x2a\x12\xe6\xc0\x18\x6d\x50\xd2\x69\xc9\x51\x74\x2d\xcd\xf5\x2f\x16\x91\xf3\x6e\xb9\xc9\xcf\x45\x49\x8a\x71\x51\x6e\x37\xab\x5b\x05\x1e\xe5\x68\xd7\xcd\xce\x47\x18\xa1\x7c\xf4\x19\x3b\x3f\x80\x81\xa1\x7e\x5c\xa6\xdc\xd0\xcd\x1d\xb9\x77\xc9\x1f\x78\x4c\xdf\x19\xe3\x25\xdf\x1d\x78\x51\xe6\xa2\xef\x33\xca\xf9\xec\x22\xc6\xfb\x16\xe3\xd7\xff\x83\xe6\xbe\x9f\x1e\x69\xdb\x30\xc2\x41\x82\x5d\xa2\xd8\x61\xfc\x44\x9c\x9c\xb5\x60\xb2\x5b\x12\x7f\x17\x5d\xc2\x08\x91\x5f\xd4\x28\xa1\x4e\xf1\x1e\x31\x67\xa6\xe5\xfb\x1e\xc5\xd3\x53\xf0\x9f\x4c\x4b\x37\xa8\x30\xe1\xab\xb8\x86\x6f\x0b\x6a\x31\x20\xf2\x94\x97\xfa\xaf\x3b\x43\xd9\x05\xec\x14\x80\x7f\x02\x00\x00\xff\xff\xac\x27\xa6\x53\x1d\x04\x00\x00" func runtimeColorschemesSolarizedTcMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesSolarizedTcMicro, "runtime/colorschemes/solarized-tc.micro", ) } func runtimeColorschemesSolarizedTcMicro() (*asset, error) { bytes, err := runtimeColorschemesSolarizedTcMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/solarized-tc.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesSolarizedMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x92\x51\x8e\x23\x21\x0c\x44\xff\xf7\x14\x88\xef\x74\x2e\xb1\x27\x31\xd8\xdd\x41\x01\xd3\x32\x46\xd9\xbe\xfd\x8a\x30\x33\x0a\x69\x66\xe6\x0f\xa9\x1e\xae\xa2\x8c\xcf\x31\xcb\x12\x03\xdf\x8d\xcf\x29\x11\xab\xb1\x2e\x47\x34\x4e\xc2\x76\xd3\x4d\x88\xd8\xfe\x19\x28\x2e\x0a\x0d\xf3\x07\xcc\xa5\x6b\xd9\xc9\x07\x88\x7f\x6f\x20\xc6\x0a\xe1\x40\x05\x24\xd6\xb0\x06\x12\x63\x5d\xac\x34\x88\x45\x41\xa9\xa7\x38\x5b\x97\x23\xb9\x1c\x67\xca\x2e\xb4\x4b\xf6\xc6\xf6\xd4\xef\x96\x7a\xec\x64\xec\x41\x31\xe6\xc7\x38\xb1\x07\x9d\x04\xa9\x8c\x24\x31\x30\xa1\xb1\x09\x36\x62\x85\x41\x27\x91\x2c\x43\x55\x27\xd3\x8c\xf9\x03\x98\x0d\x68\x2f\xad\xa5\x39\x34\x77\xf0\xf7\x4b\x1f\x73\x4a\xa2\xe0\x1c\xc8\x2f\x50\xe0\xd6\xea\xe2\x6f\x5f\xe4\x20\x37\x9b\x85\x6b\x72\x24\xe7\xf5\x5e\xce\xbc\xaf\x22\x6d\xde\xcf\xf7\x90\x56\xa8\x51\x87\x9b\x18\xd6\x75\x01\xc4\xd6\xdb\x79\x4f\x4f\x35\x65\x6c\xeb\xc7\xe9\x46\x9e\x04\x52\x24\x6d\xc0\x7b\xa7\x5b\x55\x25\x59\x3e\xcb\x7f\x69\xe4\x1b\xf2\x01\xc2\x81\xb7\x97\x8f\x31\x4d\xed\xab\x94\x7e\xa6\x59\x7d\xfd\xe8\x73\xac\x89\x67\x7a\xfb\x5f\x57\xfa\xa7\xc4\xcf\x77\xcf\x1c\xfa\xdf\xbd\x3a\x01\x7f\x27\x2d\x2f\xd0\xff\x00\x00\x00\xff\xff\x3e\xc2\x1a\x0a\x82\x03\x00\x00" func runtimeColorschemesSolarizedMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesSolarizedMicro, "runtime/colorschemes/solarized.micro", ) } func runtimeColorschemesSolarizedMicro() (*asset, error) { bytes, err := runtimeColorschemesSolarizedMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/solarized.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesSunnyDayMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x92\xc1\x6e\xc3\x20\x0c\x86\xef\x7d\x0a\xe4\x5d\x9b\xa9\x21\x55\xd6\x3e\x0e\x01\xa7\x43\x23\x26\x32\x46\x53\xdf\x7e\x22\xed\x61\x81\xdc\xac\x7c\xce\x6f\xff\x3f\xb6\x31\x44\xee\x82\xa7\x1f\xe5\x70\x36\x39\x88\x82\xcb\x59\x0f\x17\x38\xfd\x43\x36\x2e\x0b\x92\x28\xd0\xd7\x6b\x05\x28\x89\x21\xf9\x4c\xc2\x9e\x1e\x0a\xfa\xaf\x43\xae\xe0\x76\xdb\x01\xef\x90\xc4\xcf\x1e\x59\x81\xd6\x3b\x94\xc4\x08\xbe\xc6\xb5\x9b\xa4\xe7\x32\xc5\xa0\xe0\x76\xdf\x7d\x5e\x19\x57\x8e\xb6\xd1\x92\xe7\x8a\xcd\xec\xb4\xa2\xf5\x26\x34\xcd\x99\x1c\x72\xf0\x84\x4e\xc1\xd8\x37\xa3\x91\x39\x72\x23\x26\xd1\x45\x05\xba\xbf\x34\x1e\x72\x2a\x5a\x0a\xf4\x30\x9c\xb5\xde\xef\x2b\x66\x9a\x0c\x1f\x33\x4f\x25\x9b\xce\x7e\x6f\x0d\x15\x2c\x92\x1d\xe5\x65\xda\x82\xab\x5e\xc3\xf9\x79\xee\x8c\x73\xc5\xc0\x70\x80\x96\xe8\x4a\xe4\xae\xec\x7b\x80\x1d\x06\x94\x42\xfb\x71\xef\xe6\x91\x45\x90\xbb\xe3\x00\xde\xf0\xd7\x30\x6d\x17\x50\x61\x9b\x39\xbd\x6a\x7c\xbb\xf9\xd8\xdd\x47\x29\x6d\x0c\x79\x21\x05\xfd\x7d\xac\xff\xe5\x12\x45\x65\x7a\x84\xd3\x5f\x00\x00\x00\xff\xff\x47\x95\x4b\x8e\xb7\x02\x00\x00" func runtimeColorschemesSunnyDayMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesSunnyDayMicro, "runtime/colorschemes/sunny-day.micro", ) } func runtimeColorschemesSunnyDayMicro() (*asset, error) { bytes, err := runtimeColorschemesSunnyDayMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/sunny-day.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesTwilightMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x93\xd1\x8e\xab\x20\x10\x86\xef\xfb\x14\x46\x6f\xdb\x06\x7b\x56\x8b\x97\x54\xe5\x09\xce\x0b\xa0\x4c\x5b\x52\x05\x83\xb8\x4d\xdf\xfe\x64\xb0\xbb\x59\x2d\x3d\xc9\xe6\xbf\xd1\xfc\x1f\xf0\x33\x33\x24\xd1\xdf\xbb\xea\xd4\xe5\xea\xa2\xd6\x74\xc6\x46\x63\x7b\x85\x1e\x36\xfe\x67\xd7\x29\x7d\x8b\x24\x9c\xc5\xd4\xb9\x28\x4e\x38\x45\x6d\x93\xf4\x03\x15\xff\x84\xe6\xcf\xd6\x74\x53\xaf\xa3\x38\x49\x4f\xa8\x15\xd1\xf7\xa0\x71\x9b\x8c\x67\x2c\x27\x2b\x53\x8f\x4e\x78\xb7\xe4\x39\xfb\x28\xe3\x4d\x12\xb0\xf7\x7a\xea\x1b\xb0\x3f\xa8\x10\x34\x0e\xd0\x2a\xd1\x95\x57\x81\x64\x55\xf1\x03\x5b\x87\xfd\x22\x9d\x55\xfa\x12\xc5\x09\xe5\x45\x95\xb3\x25\x34\x59\x0b\xda\xe1\x0f\xec\xbe\xcf\xa5\x39\x6a\x1b\xbc\xe0\x64\xc7\xf9\x1b\xc2\x15\x90\xea\x53\x49\xbf\x4b\x5a\xa3\x16\x26\x58\x6b\x7c\xdc\x03\xa3\x2c\x5d\xad\x3b\x9f\x77\x42\x4a\x90\x51\x9c\x10\xc2\x38\x21\xaf\x7e\x6f\xa4\x3a\x2b\x8f\x70\x1e\x46\x24\x74\xe0\x3c\x51\x1d\x09\x59\x11\x97\xc9\x39\xb0\xbb\xaf\x18\xc5\x89\x66\x45\x15\x22\xee\xc2\xea\xb9\x68\x01\x46\x49\xd0\x0e\x73\xcc\x7b\x1c\xc9\x1f\xfe\xc6\xdf\xb7\x9d\x18\x47\xcc\xc2\x2a\x42\xb3\x77\xd4\xa7\xef\xe1\x31\xa3\x47\x96\x2f\x19\x8d\xd0\xae\x9d\x9b\x9c\xa5\xa8\x05\xf0\x9b\xbe\xfd\xaf\xd1\xaf\xb3\x3e\x58\x18\xac\x69\xa3\x38\xa9\x49\x99\xd1\x62\x61\x3e\x87\xef\x8d\xe9\x84\x83\xe7\x2b\x28\x2b\x46\xf3\x57\x7b\x1a\x9f\x03\x34\x5f\x69\x1b\x9a\x95\xf1\xd1\x37\x06\x8f\x60\x25\xa5\xd9\x29\xe0\xed\x1b\x2b\xda\x1b\xb8\xf1\xfb\xd5\x86\x20\x33\x80\x15\xce\xf7\x3b\x94\x66\x86\x9c\xb8\x84\x4f\x72\xa2\x69\x7c\xf1\xf9\x81\x93\xba\xdc\x26\x87\x0a\xb5\x64\x8c\x34\x58\xcc\x53\x41\xd9\x6a\xf5\x63\xc0\x5b\xf2\xa2\xae\x0b\xfa\xe2\xec\x6f\xf0\xb8\x1b\x2b\xc3\xc9\x26\x2d\xc1\x62\x99\xd0\xa7\x45\x91\x33\x1a\x6f\xfe\x05\x00\x00\xff\xff\x6d\x4b\x0d\xb4\xca\x04\x00\x00" func runtimeColorschemesTwilightMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesTwilightMicro, "runtime/colorschemes/twilight.micro", ) } func runtimeColorschemesTwilightMicro() (*asset, error) { bytes, err := runtimeColorschemesTwilightMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/twilight.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeColorschemesZenburnMicro = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x92\xd1\x6e\xf3\x20\x0c\x85\xef\xff\xa7\x40\xb9\x6e\x7e\x15\x92\x26\x7d\x1d\x82\x9d\x0e\x0d\x4c\xe4\x80\xa6\xbe\xfd\xe4\x76\x9b\x96\x41\xef\x90\xbe\xc3\xe1\xf8\x18\x97\x42\xe2\x3e\x78\x7a\x57\x80\xab\x2d\x21\xab\x4e\x5f\xaf\x27\x33\xcc\xdd\xbf\x5f\xd0\xa5\x18\x91\x04\x9e\x5b\x90\xf6\x6c\x29\xff\xdf\x33\x7b\xba\xa9\x4e\xcf\xe3\x6b\x11\x95\xb8\x20\xab\x4e\xeb\xe9\xa5\x48\x42\xe8\x8a\x7a\x40\xca\x7e\xf5\x72\xdb\x98\xa1\xe2\x7b\xb6\x19\x9f\x31\x9b\xf8\x1e\x97\x14\xda\x6c\x63\xdc\x38\xb9\x36\xcc\xf7\x0d\x25\xd1\x5c\x5b\x6e\xe8\xbc\x0d\xed\xb8\x85\x00\x39\x78\x42\x68\x77\x8a\xcc\xe9\xd1\xc3\xe5\x64\x86\xe9\xf8\x62\x82\xa4\xba\x25\x05\x50\xe6\x52\x77\x29\x83\x96\x5d\xac\xc5\x79\xaa\xaf\xdb\x65\xb1\xdc\x66\x9e\xa4\xc5\xde\xbd\x89\xc0\x0c\x75\x2c\xb1\xed\xbf\x97\x64\x46\x11\x5c\x0f\x02\xf0\xeb\xda\x5b\x00\x99\x6b\x18\x6b\x14\x13\xc8\x92\x40\x75\x46\x37\x30\x60\xc0\xfc\xe8\x64\x3a\x1f\xe8\xad\xe4\x8c\xdc\x7f\xd5\x62\x86\xf9\xa4\xe7\xb1\xa5\xf8\xb0\x4c\xaf\xff\x59\xe1\xfd\x79\xc6\xc7\x7c\x7f\xfe\x97\x1c\x5d\x0a\x25\x52\x83\x16\x66\xe9\xe6\xd0\xc0\xcf\xe6\x3e\x03\x00\x00\xff\xff\x98\xa3\xbd\xf2\x2b\x03\x00\x00" func runtimeColorschemesZenburnMicroBytes() ([]byte, error) { return bindataRead( _runtimeColorschemesZenburnMicro, "runtime/colorschemes/zenburn.micro", ) } func runtimeColorschemesZenburnMicro() (*asset, error) { bytes, err := runtimeColorschemesZenburnMicroBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/colorschemes/zenburn.micro", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeHelpColorsMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x7a\x6d\x8f\xe4\xb6\x91\xff\x7b\x7d\x8a\x4a\xdb\x7f\x4c\xcf\xfe\xbb\x35\x3b\x4e\xe2\xcb\x0d\x82\x18\x9b\xf5\xd3\x02\x5e\x2f\xe0\xac\x01\x07\x3b\x8b\x13\x25\x95\xba\x99\xa1\x48\x1d\x49\x4d\x4f\xdb\xed\xfb\xec\x87\x2a\x92\x12\xd5\x33\xbb\x8e\xef\x55\xb7\x24\xaa\x58\x8f\xbf\x7a\xa0\x3e\x81\x97\x46\x19\xeb\x8a\xe2\xed\x5e\x3a\xd8\xa3\x1a\x60\x10\x3b\x04\x21\x7b\x07\xde\x40\x63\xee\xd1\x82\x3f\x18\x10\x6e\xc0\xc6\x3b\x30\x1d\xf4\xb2\xb1\xe6\xc2\x81\x3b\x6a\x2f\x1e\x60\x2f\x77\x7b\x25\x77\x7b\x2f\xf5\x0e\x50\xef\xa4\xc6\x9b\xa2\x78\x06\xdf\x9a\x03\x93\xb0\x28\x3c\x42\xc3\x1b\x35\x7b\xec\xd1\x81\xd0\x2d\x8c\x0e\xc1\xef\xb1\x2f\x1f\x2d\x8d\x74\x3b\xa9\x90\x99\x10\x6d\x4b\x3f\x7e\x8f\xa0\xa4\xf3\xc4\x82\x12\x7a\x37\x8a\x1d\xba\xc0\x0c\x34\x42\x17\x30\x73\x52\x16\xc5\x27\x49\xb6\xb0\x65\x51\xbc\x35\xd0\xec\x85\xde\x21\x1c\xcd\x68\x73\x7e\x36\x30\x58\x74\x0e\x5e\x7a\xab\xb6\x08\x52\x47\xa2\xde\x40\x6d\x49\xa8\x71\xe0\xcd\x1b\xd3\xf7\x42\xb7\xc5\x60\x4d\x3f\xf8\x0d\x4b\xe1\x8f\x03\x49\x5b\x55\x55\xe1\xd0\xe7\x54\xc1\x1f\x24\x33\xc3\x0f\x8b\xb5\xb1\x70\xd8\xcb\x66\x8f\xa4\xd1\x7c\xdd\xd1\x8c\xd0\xec\x8d\x71\x78\x59\x16\xc5\xeb\x20\x8f\x21\x35\x1d\xa4\xdf\x83\x00\x3d\xf6\x35\x5a\x12\x7b\xa1\xc4\xfa\x08\x2d\x76\x62\x54\xbe\x84\xb7\xfb\x33\x0d\xfb\xbd\xf0\x44\xb9\x68\x84\x86\x56\xba\x41\x89\x23\x1c\xa4\x52\xd0\xe2\x80\xba\x05\xa3\xe1\x40\x6b\xee\x24\x5d\x44\xd2\xe0\xc6\x61\x30\xd6\x07\x15\x79\xb4\xbd\xd4\x42\xc1\x5e\xb8\xb2\x28\xde\xf4\x32\x0a\xb8\x55\x52\xdf\xa5\xcd\x61\xf5\xae\xdb\x85\xfb\xef\x37\xef\xea\xf4\x77\x15\x76\xeb\xc5\x1d\x9b\x19\x6a\xd1\xdc\xed\xac\x19\x75\x1b\xb7\xea\x85\x6f\xf6\xfc\x28\xed\x73\xe1\xa2\x4e\xad\xd0\x6e\x10\x16\x75\x73\x04\xd9\x81\x43\x32\xe8\x6b\xd3\xa2\xd5\xd3\x62\x07\x9e\xc4\xf0\x06\xf6\xe2\x1e\x41\xc0\x20\x14\x7a\x8f\x24\xcb\xf5\xe7\xe4\x5d\x76\xdb\x18\xdd\xc9\xdd\x68\x45\xad\x92\x7a\x60\xed\xf7\xe8\xb0\x88\x57\xa4\x1d\xd3\x79\xd4\x50\xd3\x8a\xb0\x1c\x5b\xf2\x81\x9c\x33\x72\x90\x0e\x89\x21\x74\x97\x81\x49\xd1\xb6\xd2\x4b\xa3\x85\x2a\x96\xaa\x0b\xa6\x63\x02\x16\x11\x3a\x25\xee\x8d\x25\xfd\x3d\x83\xeb\xcf\xb7\xbc\xf6\x06\x5e\x2c\x3d\x85\x0c\x31\x3a\x36\x1b\x12\xf7\x49\xb5\x91\x4b\xd6\xa4\x50\x07\x71\x74\x70\x30\xf6\x0e\xea\xd1\x17\x10\x6e\x1b\xad\x8e\xa0\x8c\xb9\x83\x9d\x31\x2d\xa9\xeb\x69\x1a\xac\xa5\x1a\x51\xe7\x62\x86\xa8\x2a\x80\xd5\x75\xe1\x40\xc9\x3b\xa9\x77\x25\xfc\xe8\xc8\xed\xc5\x63\x26\x79\xb7\x9c\xd3\x48\xbd\xb3\xa6\x8f\xa4\x66\x9d\x45\x83\x44\xee\x9d\xe1\x30\x43\x7b\x8f\x67\x56\x67\x18\xc0\x40\xc3\xf8\x3d\xda\x02\x40\x0c\x83\x92\x8d\x20\x0d\x3b\x70\x52\x37\xcb\x97\xa2\xec\x6c\xb9\x00\x24\xc6\x21\x38\xd1\x4f\x76\xee\x8c\x7d\x92\x58\x09\x5f\x2e\x14\x13\xe3\xc5\x90\xde\xa4\xe3\x78\x06\xa9\x1b\x35\xb6\x08\x95\x93\xfd\xa0\xb0\x22\x83\x17\x00\x95\x33\x4a\x58\xf9\x33\xb6\x15\x9b\xf3\xb3\x3f\xcf\xf6\x54\xbd\x71\x1e\x84\x52\x99\x83\x26\x8f\x88\xe1\xc7\x2a\xd5\x99\xe3\xc0\x67\x7f\x7a\x1e\xb9\x28\x80\x02\xd2\x9b\x21\x30\x82\x1f\x77\x61\xc6\x49\x22\xf7\xd9\x9f\x27\x0b\x78\xe3\x85\xba\x2c\x0b\x58\xc0\x5e\x80\x1c\x56\xd1\xc4\x2d\x08\x8b\x40\x8c\x31\xcd\x1a\x1b\x11\xa1\x38\x02\x04\x3b\x53\xb0\x25\x2b\xd4\xe2\x4e\xd8\x56\x11\x42\x46\xe6\x32\x0f\x4a\x2e\x9d\xac\x5d\x12\x96\x13\xc4\x6d\xe2\x4a\x65\xc8\x02\x96\x81\x57\x3a\xe8\x84\xb4\xe4\xb0\xb2\x97\x1e\x5b\x68\x47\x4c\xd0\xee\x7a\xd2\xde\x39\xd6\x81\xb8\x17\x52\x11\xa7\x24\x5a\x32\xdd\x2c\xcb\xc2\x88\x93\xdd\x7a\xa3\xcd\x9d\x90\xd5\x06\xaa\x84\xc2\xf4\xff\x67\xd4\xf5\x68\x75\xb5\x21\x63\xb6\xc2\x36\xa3\x12\x6c\x5c\xe8\x8d\x45\xb6\xa9\xb7\x23\x26\xa3\xfe\xc3\xf4\xf8\x71\x73\xae\x68\x79\xe0\x61\x15\xd0\xfa\xfa\x73\xe8\xa5\x52\xd2\x50\x3e\x8a\x22\x8c\x1c\x4d\xce\x0b\xdd\x0a\xdb\xc2\x0f\xdf\xfc\x1d\xee\x85\x1a\xd1\x11\x6e\x4b\x07\xbd\x69\x63\x94\xd4\x08\x6c\x14\x6f\xd2\x6e\x05\x2c\xdd\xe7\xb8\x4c\x5c\xf5\xe8\x41\x7a\x70\x7b\x33\xaa\x96\x5e\xd7\x86\xd4\xca\xb1\x4a\x4a\x5d\xf8\x10\x92\x13\x9f\x1b\x8c\x8c\x22\x77\xda\x90\x31\x0f\x7b\x0e\x27\xda\x69\xd6\x43\x60\x6f\xcd\xd1\xd1\xa3\xd0\x2e\xfa\x46\xc2\xa6\xbd\x54\x98\x5e\xca\x23\x14\xfb\x51\x09\x4f\x59\x2f\x4a\xe6\xd8\x0e\xea\x08\xa6\xeb\x2e\x4b\xf8\xde\x70\xbc\x64\x88\x31\xab\x78\x56\x2b\x4b\xc8\xc2\x48\x07\x83\x91\xda\x03\x47\x5a\x6b\x4a\x78\x3b\xad\x22\x57\x8d\xaf\x4e\xd9\x5b\x92\xbb\x76\x59\x96\x64\x52\x04\xf8\x35\x02\x6a\xd2\x73\x4b\x4f\x1d\x7a\x1f\x99\x2f\x00\x50\xdf\x4b\x6b\x74\x8f\xda\xc3\xbd\xb0\x92\xcd\x51\xbd\x7e\xf5\xf2\x87\x37\xff\xf5\xf6\x87\x1f\xbf\x7a\xf9\xe6\xbb\x37\x3f\x54\x64\xa0\xeb\x12\xe0\xd5\x1c\xce\xcb\x94\x59\x00\xf4\xa3\xf3\x33\x57\x1e\xd6\xa3\x1b\x85\x52\x47\x90\xba\x25\x30\x5a\xee\x5e\x7d\xca\x94\xdf\x7e\xf5\xc3\x6b\xa6\x5e\x91\x0a\x58\xb6\x8a\x83\xfa\xed\x6c\x8f\x33\x97\x4f\xc5\xca\x71\x90\x0d\xd3\xa7\xb4\xc8\xbe\x58\x6d\x7d\x53\x6d\xc0\x8d\xcd\x1e\x84\x5b\x00\x58\x78\x52\x09\x6f\xfa\x6d\x2b\xec\x5d\xbc\xee\x85\x47\x2b\x85\x0a\x97\xe8\x9b\xb2\x2c\xe1\x55\x97\xdb\x43\x3a\xf2\x31\xd6\x54\x54\x21\x19\x28\x5f\x91\x27\x0d\x49\xde\x8f\xed\x26\x32\x19\x0a\x10\x03\xd2\x3b\xa8\xd1\x79\xf0\x26\xc0\xb3\x35\x0f\x92\x36\x9f\x41\xc3\x25\x5c\x98\x00\x20\x43\xbb\xb2\x28\xbe\x45\xcb\xe4\xf3\xaa\x30\xd7\xcc\x0d\x95\x80\x9f\xcc\xef\x50\x89\x8b\x94\x23\x42\xa8\x70\x1a\xa5\xc8\x67\xb4\xd3\xb2\x09\x75\x1f\xb9\xd6\xe4\x8e\x25\xbc\x02\x8b\x54\xf5\x71\xa5\xc1\x75\x83\x4f\xe5\x15\xf2\x62\xc6\x8c\x09\x6e\x60\xcd\x69\x8e\x1e\x56\xd1\xe9\xaa\x9c\xa9\x4b\x5a\x9c\x40\x88\xfe\xef\xec\x78\x5f\x9b\x07\xfe\x9f\xf0\x88\xfe\x4f\xa0\x45\x17\x56\x48\xe5\x1a\xe1\xc2\x55\x3d\xd6\xb5\xc2\xdd\xd8\x57\x41\xc0\xeb\x33\xf9\x7a\x71\x24\xc7\x25\x2c\x6f\x51\x1d\xa1\x16\x0e\xb9\xda\x5b\x26\x6c\x87\x0a\x1b\xf2\x41\xca\x93\x0b\xd7\x0d\x22\xc5\xcc\xc7\x7f\xa7\xac\x07\x6b\x76\x6a\x2e\x25\x18\xb2\xd3\x13\x38\x83\x94\xb3\x68\x20\x53\x8e\x8e\xc2\x2b\xc4\x71\xee\x21\x83\x35\x03\x5a\x75\x64\xdd\x34\x7d\xb3\xbd\xfe\xbc\x4a\x7f\x07\x31\xa0\x0d\x8a\x42\xa1\x8f\x51\xe2\x2c\xec\x8b\xf9\x3f\x58\xfc\xef\x51\x5a\x74\x8f\xb7\x9e\x83\x30\x01\x6e\x84\xb1\x00\x92\xc5\xd3\x31\x9f\xc5\x63\xf4\x99\x49\x6e\x46\xef\x3c\x44\x37\x50\x7d\xf6\xa7\x5a\xfa\x6a\x53\x18\x4b\xff\xb7\x74\x51\xe6\xf8\xb0\x21\x4e\x42\xcc\x2c\xc2\x29\xc6\x6f\x48\x97\x19\x27\xc5\x47\xd0\x87\xad\x40\x88\x8a\x3e\x22\xd1\xf7\xc6\xe3\x54\xf3\x47\x46\x53\x3f\x55\x90\x9b\xf3\x52\x92\x7d\x22\x4b\x6a\x72\xa8\xba\x68\xef\x1c\x19\x6e\xc2\xd2\x18\x5d\x67\x56\x8e\x76\x23\xbf\x99\xe5\xa0\x26\x6e\x89\x26\x37\x8f\x4d\x2d\x5d\xf2\xc6\xae\xa3\x70\x7d\xe1\x4d\x7f\xe1\x60\x45\xaf\xac\xf2\x95\x65\x72\x00\xa6\xf3\x62\xde\x67\xb4\x81\x7f\xed\xa7\x52\xa4\x6f\x42\xf9\x48\x68\xec\x67\x27\xc8\x54\xcc\x18\xc3\x61\x9e\x60\x87\x0a\x5c\x7e\x75\x7b\xfd\x39\x55\xcc\x4b\x8f\x69\x0d\x3a\x7d\xe1\x9f\x48\x46\x65\x16\xb3\x81\x37\xea\xbb\xb2\xad\xee\xd1\x3a\xca\x05\x91\xb9\xb8\x34\x17\x8d\x29\x48\xbf\x1f\xeb\x7f\x87\xc0\x37\xbc\xf2\xfc\xfd\x1c\xa5\x6f\xf2\x72\x6f\xa9\xde\x6f\x8c\xd9\x29\xbc\x70\xf0\x3a\xae\x87\x2f\xd1\xc9\x9d\x4e\x61\x1a\x7a\xe4\x54\x4a\x8a\x9c\x50\x6c\x43\x2f\xdc\x59\xdb\x6e\x31\x14\xf2\xf8\xe0\x2d\xf6\x04\x2f\x01\x27\x66\x67\x0b\xad\x68\xca\xb8\x46\x23\xf7\x58\x45\x4d\x0e\x33\xea\xb6\x78\xb7\x47\x8b\xef\xd7\x7b\xef\x07\x77\x73\x75\x15\x54\x51\x36\xa6\xbf\xfa\xf9\x88\xad\x6c\xa5\xb8\xe2\x78\xb8\xf2\x16\xf1\xaa\x17\xce\xa3\xbd\xb2\xa3\xf6\xb2\xc7\xab\x9c\x19\xea\x95\x5f\x8e\xce\x9b\x7e\xc9\xe3\x5c\x0a\x0d\x4a\x34\x73\x2b\x57\xfd\xcf\x55\x19\x0a\xa1\xb8\x41\xfe\x56\x55\xb4\xd2\x62\xe3\x8d\x3d\x96\x45\xf1\x22\xaf\x42\xc3\x16\xe1\xb1\xbc\x8f\x4a\x98\x49\x0b\xa8\x4a\xa6\x57\xf1\xbc\xa2\x5c\x56\xdf\xb4\xb6\x98\x33\x33\x77\x4f\xd7\x7f\xd9\xfe\xf1\x39\x28\xa9\x63\x97\x48\x75\x7b\x19\xc6\x13\x61\xfc\xe1\x97\xbd\x3c\x47\xb4\xc6\xd0\xad\x71\xe3\x3d\x8d\x39\x80\x1a\xea\x21\xcc\x09\x0a\xd1\xf8\x51\xa8\x94\x20\x03\xd0\x49\x07\xad\xd1\x79\x79\x56\xcd\x0d\x7c\x95\x06\x1a\x65\x51\x7c\x6d\x2c\xe0\x83\x20\x5b\x32\x50\xcd\x5b\x50\x51\x1e\x52\xa0\x67\x7e\x77\x16\x51\x6f\x98\xa9\x03\x6b\x3a\x36\x0f\x89\x58\x1c\x86\x64\x73\x82\xf8\x36\xac\xf8\xd5\x55\x18\x87\xfc\xfd\x6c\x1c\x10\x5a\x71\x76\x2e\x02\xb6\x01\x1b\xd9\x49\x6c\xd3\x08\x84\x89\xff\x16\xe9\x4d\xad\x46\x8c\xf4\x59\x7c\x2e\x37\x76\xf2\x7e\x66\x90\xa5\x10\x40\x0b\xb3\x89\x44\x59\x14\xaf\xba\x4c\x24\x25\xef\xa8\x92\x26\x8c\xc3\xc8\x24\x0f\x69\x84\x86\x7f\x11\xf4\x92\xc8\x91\xa7\xc0\xa0\x36\x7e\x4f\x1a\x96\x9a\xba\x58\xed\x3f\xc2\x69\xce\xe4\x3f\x23\xd1\xd0\x1c\x8f\x1e\x6a\xa3\xda\x0d\x48\x2f\x94\x6c\x36\x60\x2c\x8c\xba\x45\x4b\xbe\x32\x91\x9e\x7b\x30\xea\x51\x3e\xbc\x0f\x91\x02\x8b\x6d\xdc\x6a\xbb\xdd\x72\x85\x40\x11\x6c\x31\xce\x26\x5a\xd9\xf1\x54\xc3\x03\x8f\x16\x28\x55\xb2\xe2\x8f\xf3\x0e\x14\x65\x01\x45\xa7\x22\x3d\xd5\xb1\x9c\x65\xe6\x8a\x82\xb3\x0f\x07\x07\x75\xf9\x9e\x8a\xdb\xd4\x81\xe4\x69\xb7\x98\xb2\x54\x23\xb4\x36\x3e\x9b\x47\x85\x26\x3e\xf5\x7d\x61\xdc\x51\x63\xf2\x5c\xea\x45\x4b\x48\x2a\x9b\x9a\xfe\x62\x9a\x91\xf8\x30\x4d\xd2\x82\x22\xaf\xaa\x95\x68\xee\x36\xa4\x81\xcd\xe4\xb3\xa8\x94\x39\x6c\xd8\xfa\x1b\xe8\xc5\x0e\xb5\x17\x1b\x68\x8e\x42\x6f\xa8\x8f\xf1\x58\x71\xae\xe4\x71\x95\x65\xef\x8f\xd9\x86\x3b\x5f\x14\xcd\x9e\x10\x0d\xd6\xe1\x61\xdc\x21\x5c\x58\x6c\xcb\xb2\x24\x50\x7a\x4b\x4d\xd4\x71\xc1\x66\xde\x45\x66\x2d\x7b\x7d\x9c\x03\x53\xda\x08\x3a\x0e\xae\xb7\xb4\x66\x1d\x2f\x8b\x6b\x4a\x52\xec\xc9\x3c\x83\x4a\x65\x31\x89\x99\x62\xe7\x32\x38\x70\x52\xf7\x85\x9b\x93\x59\x4c\x62\x79\x42\xe4\x52\x63\x66\x91\x9d\x2f\xd9\x3d\x4e\x23\xf0\x41\x34\x5e\x2d\xd9\xdb\x23\x25\xb2\x96\xba\xd6\xb8\xd7\xb4\x49\xe8\x09\xce\xbb\xb6\xd4\x86\x15\x9e\x5c\x31\x94\x80\x1f\xe9\x14\x7c\x1c\x14\x79\x8f\xfd\xc0\x75\x4d\x2f\x86\x27\xfa\x81\xe2\x03\x0d\xc1\x37\xa8\xd1\xb2\x63\x36\x8f\x07\x20\xb1\x2e\x58\x94\x05\xf3\x20\xd1\x64\x03\x34\x61\xb1\xe8\x85\xbd\x9b\xb1\x87\xdb\x28\x70\x63\xd7\xc9\x07\x6e\x19\x9e\xa0\x4f\x6a\x56\x47\x10\xc1\x8d\xf2\x61\xe7\x53\xf4\x42\x5d\x1b\x49\x96\x31\x38\x53\x43\x23\xa6\x76\xe6\x3c\x11\x44\xb4\xcf\x03\x88\x74\xca\xc3\xf6\x94\x71\xd7\x41\xb8\xf8\x76\xce\x87\x6e\x73\x3c\xeb\x18\x5c\x26\x98\xa7\xec\x82\x0f\x9e\x8a\xf0\x88\x20\xc5\x33\x90\x2d\x6a\x4f\x30\x6c\xf9\xb6\x76\x5e\xf0\x7d\xe7\x85\xc7\xb8\xc6\x1d\xfb\xda\xa8\xe2\x19\x45\xfd\x60\x4d\x53\x3c\xe3\x11\x1a\x3d\x21\x97\x12\xf4\x68\x02\xb1\xb6\x78\x06\x68\xad\x21\x7a\xde\xb4\x86\x56\x71\x1f\x42\x25\xcf\xfa\x65\xce\x39\x71\x33\x3f\xbc\x8c\xbb\x8e\x8e\xb1\x70\xb9\x74\x7e\x40\xcb\xbc\xa8\x6b\x61\xcf\xa9\x85\x9b\xac\x39\xd2\xae\x03\x33\xa0\x0e\x27\x0c\xf4\x92\xd4\x24\xea\xb6\xd9\x3f\x7a\x93\x6e\x89\xc6\x63\x1c\xde\x4f\xcd\xbb\x23\x9a\x2e\x8d\x5b\xcd\xc0\x22\x48\x37\xf7\xc5\x44\x96\x78\xda\x86\x38\x2e\x9e\xc1\x6e\xf4\x1e\xed\x36\x29\x20\x5e\x1e\x84\xd5\x52\xef\xc8\x84\xb2\xeb\xb6\xa2\x6d\x59\x4d\x7c\xd1\x9b\x96\xb3\x60\xba\x6e\x51\xa1\xe7\xcb\x66\xb4\x2e\x40\x3e\x86\x2b\x42\xf1\xed\x72\xbf\x90\x15\x1a\xa3\xc6\x5e\x93\x8c\x3c\xe4\x21\x45\x36\xd6\x28\x55\x0b\xcb\x64\xef\x65\x8b\xe7\x42\xa7\xbb\x35\xfa\x03\xa2\xa6\xaa\xd4\x53\x09\x03\x6e\x50\xd2\xb3\xc6\x7a\x74\x4e\xec\x72\x53\xc4\x3b\x2e\x15\x5c\xb5\xf1\x54\x39\xb1\xc1\x92\xa5\x1a\x02\xe2\xcb\xe4\x05\xdb\xc7\x44\xf8\xfe\xef\x21\x55\x2c\xea\xad\xd4\x18\xfd\x9e\xd2\x0f\xa6\xd2\x8f\x3a\x85\x9a\x21\xb4\x4d\x41\x99\x0f\x78\x22\xfe\xf4\x42\xea\x27\xc2\x92\x51\x35\x66\x57\x37\xd6\x4f\xc4\x6a\x91\x40\xb6\x3e\x32\x51\xbd\x83\xaa\x4c\x4b\xab\x44\x9e\xaf\x18\x62\x8f\x66\xbc\xb0\x08\xd3\xb0\x97\xbb\x14\x73\xd0\xb1\x26\x2d\xf2\x63\xb2\xcd\x04\x08\x7c\xe0\x42\x48\x6b\xba\xf9\x8d\x89\xa1\x90\x28\xa6\x33\xb3\x0b\x9f\x1d\xc3\xa4\x45\x54\x80\x5c\xf0\x41\x51\x80\x94\xc8\x98\x35\x26\x16\x9c\x1b\x70\x06\x68\x91\x2b\x9c\xe8\x90\xa1\x65\x9a\x93\xe0\x04\xf5\xb3\x16\xd2\x3c\x20\x16\xd3\x39\xe3\xcb\xda\x93\xe2\xa9\x4a\x48\x53\x3a\x6f\xa5\xde\x55\x3c\x36\x66\xd0\x9a\xe8\xe4\x23\xd0\x6c\xb2\x34\xc6\xea\x82\xc0\x6d\x71\x2a\x19\x28\x85\xcc\x45\x7c\x73\xba\x62\x9a\x9b\x29\xf1\x8c\x5c\x7b\x84\xad\x41\x6a\xe7\x51\xb4\x65\x3c\x8e\xf3\x56\x86\xa3\xc8\x59\x5b\x4a\xd8\x1d\x3a\xcf\x8d\xb5\xe9\x12\x36\xcb\x30\x61\xec\xa4\x9e\xbc\x2f\x6f\xde\x5a\xec\xa4\x66\x6f\x72\xac\x44\xd9\x6d\x98\x59\x12\x5f\x61\x26\x7a\x6d\x8c\x2a\x29\x59\x65\xd2\x73\xd6\x9e\xa5\x2d\x42\x6d\x21\x3c\x4b\xf5\xa1\x57\x27\x41\x39\x25\x2f\x57\xcd\xb4\x8b\x85\x12\xcf\x19\xa9\x78\x07\x6d\x3c\x2b\x8b\x4f\x7f\xa6\x05\x55\x09\x21\x75\x5d\xe4\x99\x6b\x36\x3d\x05\xd3\x34\xe4\xb8\x70\x50\x8f\x52\xf9\xad\xd4\xe7\x4e\x30\xe5\x9d\x32\x56\x5e\x6b\x9e\xbe\xd3\x63\xca\x27\xf1\xfc\xaa\x95\xce\x4b\xdd\x84\x53\xa1\x84\x4e\xe1\x39\x8f\xff\x42\x81\x7f\x99\xa5\x2b\x16\xe0\xfc\x9a\xd5\xf3\xe8\x66\x27\x94\x5b\xdc\x8d\x5d\x60\x7e\x2b\x26\xb5\x97\x7b\x61\x17\xb7\xd9\xbf\x1e\xdf\x29\x47\xab\x60\x91\x49\xcb\x46\x09\xe7\x60\xfd\x82\xaa\x2e\x56\x0e\xd9\xbf\x1b\xa3\x50\x97\xcb\xc5\xbd\x68\xac\x59\xde\xba\xe7\x9d\x63\xb6\x2d\xdd\x1e\x6b\xa1\x77\xb0\xa6\xae\xfb\x93\x3f\x40\x1c\xfb\xd7\xb8\x93\x9a\xd2\x0a\xa9\x45\xb0\x16\xe3\xb8\x0b\x95\x0a\x53\x1d\xe3\xf8\xfc\xb7\x00\x82\x52\x39\x90\xcb\x7b\xb4\x83\x45\x1f\x6a\xcc\xd1\x71\x3a\x0d\xf9\xbd\xac\xad\x68\xee\xd0\x3b\x58\x57\xbf\xfc\xba\xbe\x7c\xf7\x3e\x1c\x9b\x38\xd3\x23\x75\xe6\x0e\xaa\xbf\xfe\xad\xca\xd6\x9b\x01\x2d\x0f\xff\x13\xb4\xa7\xeb\xf0\xdc\xcd\xad\x47\x98\xfc\xc5\xd7\xbc\xd8\xc1\x9a\xf0\x60\xef\x7b\x05\x5e\xec\xdc\x06\x44\x6f\x48\x0e\x42\x57\xe0\x2e\x8b\x95\x44\x46\x2f\xef\xf0\x78\x30\xb6\x85\x75\xea\xde\x28\x74\x45\xaa\x3c\xb2\x26\x96\x74\x1c\x17\xbb\xd0\xdd\x55\x83\x95\xf7\xc2\x63\x75\xc9\x20\x4f\x1a\xe9\x46\x3f\x5a\xdc\xc0\xa0\xc6\x9d\xd4\x8e\x27\xa9\xa9\x21\x4d\xa7\x32\x63\x6a\x50\x52\xc0\x13\x65\xe7\x8f\x8a\x8c\x5d\xf0\x44\xe5\x1f\x99\x63\x73\x37\xb0\xfc\x9e\x81\xf2\xc3\xc1\x4a\xef\x51\x33\x9e\x89\x5e\x6d\x3b\x63\x7b\x6a\x9e\x48\xa3\x31\x47\xec\xc3\x17\x11\x93\x08\xc5\xf4\xc5\x43\x39\x0f\x67\x38\x98\xe6\x58\x5a\x40\x5e\x80\xac\x7b\xb4\xd4\xa8\x59\x06\x65\x6a\xac\x85\xc6\x0d\x38\xd4\x4e\x92\x44\xf1\x6b\x06\xca\xf6\x10\x00\x98\x3f\xf8\xa0\x9c\x1c\xf3\x2c\xf5\x6c\x52\xef\xba\x51\x01\x2a\x0c\xfd\x33\xfb\x54\xe2\xa7\x84\x00\x91\x7b\xe1\x16\x19\x29\x30\xc7\x6d\x2b\xd9\xff\x1e\x2d\x5c\x3f\x7f\x9e\x7d\xb8\xa1\xcd\xe1\x0f\x8b\xc3\x42\x1b\x86\xd7\x35\x42\xe1\xa4\x1f\xe3\xd9\xef\x81\x1f\x90\x75\x19\x54\x93\xe8\x4b\x59\x59\x36\xa9\xb9\xa0\x6e\x24\x35\xb4\xc6\x86\x96\xc4\x14\x9c\x31\xd2\xc1\x36\x99\x83\xcb\x7c\x8d\x87\x38\xe0\xcc\x8a\xe9\x38\x80\x99\xd3\xe6\x22\xc3\xb2\xb2\xa8\xb0\xe0\x81\x23\x49\xf6\xb8\xb2\x08\x6f\x84\xe0\x78\xbd\xc4\xd4\xd0\xdd\x4e\x89\x85\x47\xd9\x5f\x47\x78\x83\x39\x31\x84\xa9\x40\x38\x3c\xf2\xc2\x86\x78\xce\x18\x09\x07\x5a\x8d\x12\x36\x35\xc6\x09\x23\xe3\x30\x60\xba\x84\x9d\x09\xbd\x3f\xed\xf4\x25\x7a\x6c\xfc\x62\x9f\xa9\x51\xe5\xcd\x92\x1b\x48\x1d\xbc\x91\x2a\x1e\x51\x9b\xd1\x27\x57\x6c\x03\x85\x27\x76\x0c\x4f\x6e\x0a\x00\xe0\x47\xd4\x9a\xde\xc0\xea\xf6\xb6\xdc\x99\x4f\xe3\xfc\x21\x53\x46\xca\xa1\xd2\x81\xc5\x1d\x3e\x80\xd8\x09\x52\x0b\x08\x9e\xd5\xe8\x89\xc6\x07\x76\x2d\x83\x86\x52\x74\x4e\xfe\xab\x63\x19\x2e\x14\x54\x7b\x14\x2d\xb5\x58\x61\x03\x36\x32\xef\xdd\xec\xb1\xb9\x8b\xd4\xac\xf3\x5c\x52\x16\xd1\xd5\xc3\xfc\x2e\xab\x46\x7e\x53\xbc\xa3\xf8\xa2\x57\x9f\xae\xf8\x49\xd8\xf1\x06\x56\xff\xef\x9f\x2f\x5e\x7f\xb7\x9a\x35\x1f\xf1\xc0\x8e\x8c\x07\xdf\x53\x5f\xf3\x48\xe9\x99\x8d\x17\x8e\xcd\x2f\xb1\xd7\xa6\xb9\xcd\xc1\x4c\xf9\xae\xe0\xa7\x37\x30\x50\xcb\x6c\xb5\x8b\x75\xd8\x2e\x7c\xe5\xf0\x22\xdd\x27\x2f\x67\x95\x87\x63\x20\x01\xd4\xd3\x2b\x0c\xd5\x74\xf8\x10\x8b\xe7\x39\xc5\xf4\x84\x31\x55\x38\x38\xa0\x52\x44\x28\xd0\x9c\x39\xcb\x52\xef\xc1\xcc\xdb\x73\x8c\xf7\xa3\xf2\x72\x50\x58\x84\x01\x27\x9f\xad\x8b\x38\x2b\x62\x7e\x09\x3d\x24\x81\xc8\x81\xf0\xcf\x25\xe9\xc3\x1e\xe9\x5c\x8f\x8b\x68\xca\xff\xa9\x2e\x9c\x36\x91\x1a\xbe\x31\xd1\x30\x41\x7e\xd6\xfe\x36\x81\x3e\x1b\xa6\x5e\xd7\x16\xc5\xdd\xa9\x11\x0e\x4f\x8d\xd1\x5e\xea\x11\x4f\xb1\x9e\x3d\xed\xcc\x69\x67\xbc\x39\xf1\x37\x09\x27\x8b\x7e\xb4\xfa\xf2\xf6\xb6\x5e\x25\x4a\xa9\xbd\x8d\xb4\x50\x39\x3c\x75\xc6\x9e\x64\x77\x72\x07\xe9\x9b\x7d\xbe\x3a\x66\xe2\xb8\x76\x10\xcd\x9d\xd8\xe1\x49\xf6\x83\xb1\xfe\xc4\xe5\xc0\xe9\x5e\xd8\x13\x19\xed\xe4\xbc\x1d\x1b\x7f\xa2\x6c\x4f\x5c\xb4\xd8\xa1\x3d\x49\xe3\x45\x20\x18\x07\x97\x08\xc6\xb6\x61\xfa\x3c\x89\xdd\x1a\x64\x2b\x52\x72\x16\x6e\xbe\xaf\xcc\x01\x6d\xaa\x34\x19\x1e\xc2\x87\x31\xf7\x68\x29\xc9\xf0\x79\x65\x98\xc2\x73\xe4\x63\x4b\x31\x7d\x9f\x3e\xbc\x2b\x5e\xe8\x16\xf6\x4f\x2a\x3c\xfa\x11\x83\xf7\xa4\xf0\xed\x79\x7d\x13\x94\xcf\x38\x45\x0a\x58\x05\xa5\xa0\x6e\xb3\xab\xcc\x4a\x41\x63\x4f\x15\x53\x14\x37\xe5\xea\xb7\x17\xdd\xde\xde\xde\xbe\x13\x75\xa7\xad\xbf\xbf\xb8\xbd\xbd\xe5\x1b\xef\xff\xcd\x17\xd7\xef\x9e\x6f\xff\xe3\xfd\x2f\x7f\xfc\xf5\xf4\xf0\xee\xc5\xf6\x6b\xb1\xed\x9e\x6f\xff\xf3\xfd\x2f\x9f\xfd\x7a\x1a\xf3\xeb\x3f\xfd\x7a\xfa\x31\xbf\xfe\xcb\xaf\x97\xab\x82\x65\xe7\xf2\x72\x29\xf3\xd5\x55\x2e\xf3\xa7\x1f\x10\xd9\x9b\xd6\xdc\xc0\x6a\xfd\xf6\xcd\x97\x6f\x4e\x3f\xfd\xf4\xd3\xe9\xeb\x57\x3f\xbd\xfe\xea\xf2\xe6\x8b\x8f\x10\xbe\xbd\x7d\xb6\x50\xe7\xed\xb3\xab\xdf\x4f\x9d\x5d\xea\x7b\xe3\x65\x83\x01\xc7\xf7\xb3\x69\x29\x2e\x29\x38\xa8\x9f\x0d\xa1\x19\xe3\x31\xe0\x61\x5f\xc2\x0b\x7d\x04\xa9\x35\xda\xf8\x9c\x70\xb4\x10\x9c\xa7\x03\x9e\x84\x51\x32\x6a\x70\x77\x72\x18\xd2\x17\x24\x0e\x85\x6d\x78\x1e\xce\x87\x84\x7c\xae\xd9\xa6\x82\x22\x06\x3a\xe1\x6c\x31\x9d\x38\xf0\x6b\x0b\xe4\xab\x56\x9d\x31\x70\xbb\x82\x5a\xd8\x55\xb5\x89\x9f\x80\x55\xb7\xab\x2a\xc7\x33\xea\xa4\x75\x60\x91\xd1\x20\x45\x42\xd8\x84\xdb\x15\xe9\x12\x73\x25\x7c\x27\xef\xf0\x20\x5d\x38\xbc\x8c\x3b\x84\x2d\xb2\x1d\x6e\x69\x87\xe2\x89\x1d\x58\x09\x67\x34\xe3\x07\x8b\xc4\x3e\x4f\x1a\x56\x59\xbf\x16\x9f\x14\x21\x54\x48\x07\x2e\xd5\xe7\x8d\xb1\x96\xd2\x1a\x97\x13\x65\xb1\x4c\x68\xf8\x30\x28\xd9\x48\xaf\x8e\xd0\x0b\x7b\xc7\x5b\x85\x44\x86\x2e\x9e\x56\x42\x6b\xa8\x77\xe7\x7a\x97\x8b\x11\xae\x80\x8a\x6c\x9c\xf7\x54\x22\xfb\x3f\x85\x2f\xed\x1e\xb2\x5d\xee\x7d\xf0\xee\xfd\x94\xe1\x3e\x81\x57\xe1\xbb\x2b\x77\x26\x48\xfa\x1c\x2b\x38\xcf\xfc\x79\xdf\x59\x41\xec\x00\xfb\x1a\xdb\x16\xdb\xb9\x3a\x3c\xf3\x0f\x46\x37\xa3\x94\x39\xf0\x29\x8b\x83\xc1\xb8\x50\xc1\x76\xb1\x59\x98\x44\x8c\x28\xbf\x14\xed\xaf\xa1\xc7\x29\x9f\x7d\xf1\xb7\x5c\xc6\xbf\x5e\x9d\xdf\x7f\x14\x5b\x51\x86\x1b\x58\xfd\x4b\xdc\x8b\xb0\x9c\x83\xf6\x03\xfb\xf8\xa3\xc2\x27\xb6\x59\xde\xfe\xc8\x2e\x8d\x73\x53\xed\x90\xb7\x12\xb1\xbe\x70\x45\xf1\xc4\xcd\x70\x30\x1b\xea\x9f\x5e\xfe\x1c\x8b\x37\xdd\x46\x5f\xa5\x86\x47\x1d\xa3\xdf\x70\x59\x1c\x8f\x13\x8b\x83\xb1\xf6\x18\xcb\xbc\x98\x12\x3e\x44\x3e\x7e\x8d\x4d\x95\x54\x02\x0d\x3e\xce\xcc\x2b\xb3\xe4\xf2\xb1\x6a\xa3\x2a\xd3\xe2\x6e\x54\x82\x3c\x91\xbf\xb1\x9e\x72\x4a\xaa\xf5\x32\x57\xe0\x3a\xe7\x98\x3e\xe7\xad\xca\x7d\x6b\x17\x63\x77\x61\xb1\xe0\x8e\x39\xfb\xa4\x8b\x59\x48\x28\x33\x58\xdc\x52\x21\x29\x94\xc2\x76\x39\x60\x80\x6f\x59\x94\xe4\x72\xe4\x49\xc5\xf4\x91\xf7\x20\xac\xc3\xf3\x3a\xdb\x41\x3f\x36\x7b\xe8\xf8\x04\x3a\x00\x14\x17\x8f\xe7\x55\x37\x77\x43\x45\x83\x96\x55\x12\xcf\x80\x1f\xcf\xb9\x38\x2a\x52\xb9\xb7\xcf\x99\x91\xba\xf8\x70\x1b\x11\x8a\xb0\xf4\x99\x5f\x9c\xe7\x68\x6c\xd0\x39\x61\x8f\xb0\x66\xf9\x5b\x13\xbf\xd7\x60\x6c\x28\x58\x81\xbd\xd0\x47\x58\x5f\x3f\x7f\xfe\xff\x2f\x9f\x1a\xbb\xb1\x42\x03\x7c\x18\x90\x3d\x31\x86\x30\xa0\xe5\xda\x5f\x37\x78\x59\x16\xff\x1b\x00\x00\xff\xff\x4b\xcf\x2c\xe0\x1c\x30\x00\x00" func runtimeHelpColorsMdBytes() ([]byte, error) { return bindataRead( _runtimeHelpColorsMd, "runtime/help/colors.md", ) } func runtimeHelpColorsMd() (*asset, error) { bytes, err := runtimeHelpColorsMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/help/colors.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeHelpCommandsMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x58\xcd\x8e\xe4\xb8\x0d\x3e\xc7\x4f\x41\x20\x07\x77\xcf\x54\x79\x81\x3d\xd6\x61\x07\xc1\x04\x01\x16\xc8\x26\x8b\xcc\x00\x39\x04\x01\xa4\xb2\xe9\xb2\xd2\xb2\xe8\x91\xe4\xaa\x76\x9e\x3e\x20\x29\xbb\x5c\xdd\x7d\xc9\x65\xa6\x6d\x53\xe4\xc7\xbf\x8f\x54\xfd\x11\xbe\xd2\x38\xda\xd0\xc1\xd9\xc6\xaa\xfa\x3e\x20\xb4\xf7\x17\xe0\x12\xd0\x84\x01\x3b\x38\x2f\x30\x45\x4c\xc9\x85\x0b\x7c\xcd\xd1\x1f\xb1\x81\x5f\x33\x0b\x58\xe0\x97\x1e\x8f\xde\x05\x84\xf3\xdc\xf7\x18\x0f\xd5\x88\x36\xb0\x6c\x1e\x6c\x06\xeb\x3d\xbc\xe0\x72\x76\xa1\x73\xe1\x92\xa0\x8f\x34\x82\x85\x40\x71\xb4\xbe\x1c\x01\x1b\x11\xd2\x3c\x4d\x14\x33\x76\xf0\x64\x13\xdc\xd0\xfb\xca\x26\x18\x69\x4e\x08\x8c\x29\xa1\xc7\x36\x3b\x0a\xcf\x4d\x55\xfd\x73\xc0\x00\x71\x0e\x62\xc7\xae\xb8\x0f\xb0\xd0\x0c\xad\x0d\xc0\x87\xf0\x35\x47\x0b\x69\x09\xd9\xbe\x2a\x96\xd1\xb5\x91\xe0\xe6\xbc\x07\x7c\x9d\xc4\x51\xec\x29\x62\xb5\x6a\xca\xf7\x18\x34\xf0\x9d\x40\x6d\x83\x8d\x97\x79\xc4\x90\xe1\xe6\xf2\xc0\x4e\x4f\xb6\x45\x70\x01\x5c\x3e\xc0\x34\x67\x70\x19\x5c\xa8\x7e\xcc\x94\x31\x35\xf0\x36\x92\x93\x8d\x09\x23\x2b\x4b\x62\x21\xd9\x11\x21\xce\x1e\x13\xf4\xa4\x9f\xc5\x8d\x62\x25\x09\xd8\xca\xfc\x74\x76\xe1\xa7\x34\x18\xb8\xd1\xec\x3b\xc1\xf2\xa4\xe1\x06\xb5\x74\x80\x8e\xe6\xf3\xee\x11\x53\x6b\x27\x17\x2e\xcf\xef\x30\x54\x1d\x61\x82\x40\x19\x3c\xd1\x0b\xcc\x13\x60\xb8\xba\x48\x41\xdc\xba\xda\xe8\xec\xd9\x63\x6a\xaa\x6a\xab\x8a\x54\x55\xbf\x49\xbc\xa6\x48\x57\xd7\x15\xec\x3d\x79\x4f\x37\x86\x5b\xb4\x2b\x5a\x09\xfa\x99\x63\x8e\xed\xcc\x39\xb4\x79\x1f\xcc\x23\x43\xd8\x97\x91\xd1\x3a\x32\x92\x59\x0c\x19\xe3\xbb\xf0\xff\x69\x0b\x07\x57\xc7\xe4\x6d\x8b\x1d\xc7\x5c\x43\x50\x82\x0d\x03\x46\x2e\x3c\xb1\xc6\xc9\x8a\x28\x5e\x06\x6c\x31\x25\x1b\x17\xb8\x71\xa5\x7c\x64\x81\x75\x49\x41\x34\x55\xf5\x09\x0c\x17\x28\xd4\x2f\xb8\xd4\x50\x5b\xa9\xb3\xda\x9c\xa0\x8d\x68\xd9\x8c\xdd\xd5\xb0\x96\xf0\x0b\x2e\x90\x09\x54\xb4\x81\x6f\x88\xac\xbc\x02\x00\xb3\x2b\x77\x03\x1d\xb5\xe2\x86\x65\x39\xc9\xf7\x48\x91\x8b\xa7\xe7\x0e\x90\x97\xf6\x4c\x73\x86\x55\xfb\x0b\x2e\xa9\x61\x3d\xdf\x07\x97\x36\xb0\x52\xb4\x23\x75\xae\x5f\x14\x2b\x6b\x6f\xfe\x93\x28\x68\x0c\xe9\x8a\xf1\x16\x5d\xe6\x7a\x5d\x60\xeb\xb6\x4c\x2b\x22\xb3\xb6\x63\x44\xdb\x2d\x80\xaf\x2e\x65\xf5\x7c\x40\x3f\x41\x9d\x69\x72\x6d\xfd\xc5\x9c\xa4\xeb\x53\x89\x54\x8c\x98\x26\x52\x60\x22\x27\x62\x0d\xfc\xda\x43\x20\x7d\x60\x1e\x28\x25\xd2\xb1\xb1\xfb\xf1\x0e\x7b\x3b\xfb\xac\x07\x53\x1b\x11\x83\x5a\x4c\xf6\x8a\x50\xf7\xce\x63\xb0\x23\x8a\x51\x7e\x55\x8c\xce\x31\x72\x51\x2a\x35\x88\x29\x29\x3c\xe7\x71\x6f\x0a\x5c\x66\x6b\x12\x97\x5a\x14\xda\x54\x6f\x92\xac\x57\x6d\xfd\x98\x5d\x36\x27\xe0\xff\xd2\x3e\xdf\x11\xa5\xa4\xa0\x4e\x68\x63\x3b\xd4\x50\x5f\xad\x9f\xb1\x86\xba\xf7\xf6\x92\x04\x94\x64\x40\x2c\xac\xd2\x46\xa5\x8d\x32\x81\x91\x23\xa6\x01\x4d\x17\x82\x91\xb3\x46\xca\x90\x26\x4e\xae\xf5\x0d\xfc\x4e\x29\x39\xee\x53\xf9\xca\x1f\x4f\x7c\xe0\x13\x98\xa3\x35\x27\xf8\x47\xd1\xcd\x4c\x49\xad\xba\xdf\x72\xcd\x65\xa0\xd0\xe2\x2a\xea\xcd\x09\xfe\x4c\x60\xc1\xbb\x8c\xd1\x7a\x50\x28\xe0\x42\xca\x68\x3b\xa0\x1e\x2c\x44\xbc\xe0\x6b\xf9\x52\xf1\xc9\xbf\x51\x46\xcd\xfc\x06\x7d\x9c\x53\xe6\x5e\xb5\x70\xb5\xde\x75\xe5\xcc\xd3\x1c\x3c\xa6\x24\x86\x24\xce\x36\x25\xec\x9e\x25\xfe\x14\x50\x5c\x24\x4d\xc5\x9d\xa8\x36\x56\x19\x24\x01\x61\x51\x6a\x4c\x2b\x37\x32\x1d\x8f\x76\x01\x1a\x9d\xf2\x41\xa1\xc8\x7d\x06\xac\x24\xf0\x31\x09\xe6\x04\xf9\x5d\xec\xdf\xc6\x87\xfa\xcd\x27\xad\x84\x7b\x46\xe4\x81\x9b\x6a\x66\xe2\x6d\x29\xf4\xae\x34\x5b\x53\x55\x7f\xe0\x5e\x5d\xad\x9b\xad\xc3\x3e\x6a\xcd\x52\xae\x98\xa1\xd6\x74\xee\x11\x26\xcc\x5a\xb1\xfa\x89\xd9\x40\xbe\x6d\x64\x00\x46\xbf\x24\x23\x2d\xc0\x20\xb5\x63\xd8\x14\xe7\x31\x65\x76\xa2\x08\x6d\xb3\x2b\x61\x6e\x76\xa5\x57\x9a\x7e\xa1\x39\x4a\x2f\x27\xcc\x79\xd7\xfc\xe2\x36\x1b\x0b\x78\x2b\xf6\x57\xd0\x9e\x5a\xeb\xff\x1f\xe4\x20\x27\xfc\x02\x4f\x14\xfc\xc2\x49\x2c\x94\xf6\xd8\x93\xcf\x7b\x78\x9f\x02\xe5\x4f\x1b\x33\x3d\x82\x2b\x48\x06\xba\x6d\x28\xd8\xfa\x40\xb7\xc7\x56\x57\xe3\xa5\xba\x2e\xee\x8a\xa1\x20\x2b\x85\x32\x07\xa8\xd3\x70\x2c\x99\x62\x1d\x71\x2e\x1c\xa3\xd2\x69\x40\xef\xf7\xc4\xce\x9f\xce\xb6\x7d\xb9\x44\x9a\x65\x96\x0f\x5a\xc1\xab\x8a\x04\x34\x67\x9e\xdc\xe2\xc3\x19\xa1\x73\x69\xf2\x76\xd1\x11\xc3\xf5\x2e\x1b\x8d\x0c\x0f\x97\xa1\x77\xc1\xa5\x01\xd3\xba\x72\x28\xae\x6b\x9a\xbc\xcb\x3b\x22\xdb\xc8\xd3\xc2\x15\x63\x76\x1c\x7e\x95\xd1\xe2\x5c\x05\xcd\x4a\xa0\xeb\x0b\x86\xb6\xe3\xb6\xc3\x7b\x05\xf7\x6d\x4c\x77\x90\x00\x38\x4e\x79\x59\x59\x52\x89\xfc\x03\x3c\xb2\x6b\xd8\xb4\x82\x35\x32\x2b\x57\x90\x03\x45\xf7\x5f\x0a\xf9\x6e\x45\xb9\xa4\xf4\xfa\x5b\x10\x6a\x25\xdb\xf3\x47\x2e\xdf\x93\xa1\x4c\x1d\x78\xc9\xc3\x1b\x64\x7b\xde\xce\x8d\xc4\xbc\xff\xaf\xe3\xe7\x7f\x7f\x91\x4a\xf8\x8d\x56\xd2\xe7\x31\x7a\x45\x16\x96\xa1\x1a\x28\x0f\x18\x21\x79\xca\x0d\x98\x20\x84\x64\x03\xb8\x90\xf1\xc2\xde\x02\x70\x00\xcb\x87\x29\x62\xef\x5e\xd7\xc8\x98\xa3\x01\x8a\x60\x3e\x9b\x03\x6b\x96\xf4\x45\xe4\xc5\x43\x77\x09\x88\xe8\xad\x18\x9b\x28\x39\x2e\x32\xd6\xf6\x84\xcd\xa5\xb9\x63\xfc\xfc\xb3\x81\x71\x03\x57\x50\xf1\x9f\xd1\x5d\x86\xcc\x0b\xb1\xf9\xd9\x28\x37\x32\x88\xc1\x32\x0b\x16\x20\x07\x49\xe6\xa3\x51\x9e\xf1\x89\xfc\x9c\xef\x56\xdf\x9a\xfc\xc8\x22\xfb\xaf\x96\xd6\x08\xa6\x9b\xcb\xed\x00\x75\xb6\xe7\x7a\x1d\x50\x0f\x2b\x42\x11\x28\x70\xd3\x84\xad\xeb\x1d\x76\x92\x06\x1d\x51\xd9\x9e\x85\x2f\x99\x6a\xd0\x49\x9c\x65\x18\xb0\xcd\x30\x8f\x67\x8c\x07\x10\x7e\xe2\xfc\x6a\x19\xdc\x73\x88\xaf\xb9\x77\x3e\x63\x7c\xdb\x90\xfa\xf6\xb1\xad\xb7\x8d\x1d\xf2\x10\x69\xbe\xc8\xea\xcc\x9d\xba\xeb\x44\xae\xcd\x94\x6d\xe8\x6c\xe4\xd6\xe3\x96\xe4\xb7\x85\x9d\xcb\xbe\xbc\xe9\xd9\xc8\x2e\xe5\x8e\xe9\x9d\x7a\x21\x55\x7e\xb1\x67\x80\x06\xe0\x2f\x14\x01\x5f\xed\x38\x79\x3c\x48\x28\x29\xe6\x1d\xe7\xaa\xa3\xe9\x00\xbd\x8b\x69\x45\x5a\x74\x8d\x07\x81\x20\xc5\x53\xf6\x59\x30\xbf\xc0\xce\x77\x51\x76\x5c\xf9\xcd\xd3\x65\xd7\xf8\x9e\x2e\x12\x34\x66\x6e\x5e\x41\x2f\x3c\xc9\x43\x07\x1d\x9e\xe7\x0b\xbb\x9a\x51\x66\xa7\x9e\x9d\xfc\x7c\x71\x41\x60\x99\x93\xfc\x97\xe4\x28\x37\xa2\xf5\x1e\x3b\x50\x89\x47\xf1\xf2\x15\xea\xc9\x73\xec\xd7\x47\x5b\x84\x1f\x64\x23\x6a\xd7\xa9\x68\x79\xfa\x50\x72\x9e\x3a\x9b\x37\xc9\xf2\xb4\x4a\xc2\x93\x13\xc6\xb2\x8f\x5b\xf9\x6e\xef\xd3\x03\x0a\xbf\x80\x7e\x7e\xd0\x5f\xf6\x95\xa2\xbf\x3c\xd9\xab\x75\x9e\xef\x1e\xeb\x99\x32\x1c\x5f\x70\xb9\x51\xec\x1e\x14\x6c\xb2\x65\x88\x7c\x70\x78\x7f\x17\xd9\x62\xb8\xae\x1b\x9e\x6c\x27\x31\xe0\x3f\x14\x68\x9c\x43\x76\xa3\xee\x8c\x25\xc6\x6d\x07\xf5\x64\xf3\xc0\x20\xbf\x0e\x36\x5c\x74\x96\xdf\x28\xbe\xf0\x16\xdc\xb9\x88\x6d\xa6\xb8\xac\x3d\xa6\xa4\x67\xf8\x48\x29\x88\xe9\xc6\x66\x7e\x8f\x2e\xe4\x87\x7e\x78\xa7\x42\xc5\xb9\x72\x1e\x19\xf5\xef\xfc\xc6\x6e\x44\xfa\xc1\x56\x5c\x3c\xda\x6f\x26\xe2\xd9\x36\xd9\xf7\x53\x94\x91\xf2\xf6\xbb\xee\xe3\x32\x6e\x8b\x06\x66\x83\x6d\x05\xd5\x98\x78\xb4\xb2\xef\x33\xdd\x68\xc7\x95\xa5\x8e\xe2\xf6\xad\xbc\xd1\x7e\xb4\xe7\xc4\x05\xd0\xe1\x84\x7a\x53\x20\xc5\xbc\x8d\x75\x61\xae\x4c\x7a\xa8\x04\x29\xda\x9b\x39\xed\x6f\xe4\xa4\x4e\x97\x99\xa1\x57\x7e\x4e\x32\x6b\x92\x8b\x2d\x13\xc1\x8f\x99\x77\x3f\xa9\x11\xbc\x62\x5c\xf8\xdf\x90\x37\xc6\x6d\xd1\x31\x85\xca\x05\x4d\x78\x14\xe3\xe8\x64\x07\x17\xa6\xd4\xcd\x83\xf7\xac\xdb\xfd\xe7\x00\xdb\xe6\x59\x96\x9e\x84\xe5\xe8\xca\x29\xeb\x69\xc1\xc2\x1b\x9c\x9e\x4d\xc8\x8b\x81\x6b\x87\xfb\x35\xcb\x46\x0c\x75\x66\x6e\xd7\x45\x5f\xe8\x78\x58\xd4\x6c\x19\xee\x23\x25\xd9\x47\xfb\xd9\x0b\x7e\x21\x84\x4b\xb9\xf1\x6d\x37\xba\x6d\x63\xe2\x2b\xdb\x09\xbe\xad\x11\xd0\x7b\xe6\x53\x7a\x86\x33\x6f\x34\x32\x25\x4b\x92\x5f\x70\x69\xf6\x7c\xc7\xf6\xd6\x1f\x34\xcc\x2f\x50\x94\xe9\x2f\x37\xad\xd1\x60\x97\x75\x07\xcc\x57\x9a\x16\xb3\x92\x7b\x1c\x85\xf0\xbe\xdc\x4b\x70\x0b\x01\x8e\xb3\xb7\x99\x22\xec\x7f\x2a\x51\xfb\xca\x91\xdc\x86\x65\xad\x61\x00\xf7\x97\xec\xbb\x08\x1e\x76\x3b\xbd\x24\x7b\x7f\x47\x54\xfe\x2e\xc5\xbe\x5a\x15\x45\xc5\x70\x53\x55\xc7\xe3\x51\x7f\xa6\xfa\xe0\x47\x88\x3d\x1b\xf1\x7c\xde\xeb\x2e\xe4\x70\x52\xb6\x76\x81\xa9\xf6\xaf\x6f\x9b\x53\x9a\x4d\xea\x2a\x46\x8a\xa9\x11\x2a\xa0\x91\xb9\xce\x9c\xc0\xce\x99\xf8\x4a\xa0\xeb\x71\x79\xcf\x0d\x31\x87\xf5\xe1\xfd\xd4\xe3\x7e\x71\x01\x9b\xea\x7f\x01\x00\x00\xff\xff\x4e\x0b\xc1\x25\x6a\x13\x00\x00" func runtimeHelpCommandsMdBytes() ([]byte, error) { return bindataRead( _runtimeHelpCommandsMd, "runtime/help/commands.md", ) } func runtimeHelpCommandsMd() (*asset, error) { bytes, err := runtimeHelpCommandsMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/help/commands.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeHelpCopypasteMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x59\x5d\x8b\x2c\xb7\x11\x7d\xd7\xaf\x28\x7c\x1f\x3c\xb3\xcc\xce\x26\x17\xf2\xb2\x01\x43\xb8\x21\xf1\x25\x36\xd7\x78\x17\xec\x10\x42\x46\xd3\x5d\x3d\x2d\x56\x2d\x75\x54\xd2\xcc\x4e\x7e\x7d\xa8\x92\xd4\x1f\xfb\x11\x9b\x80\x5f\xec\x9d\x6e\xa9\x55\xaa\x3a\xe7\xd4\x91\xee\x27\x3f\x5e\x41\xbb\x16\x46\x4d\x11\x41\x07\x04\x24\x42\x17\x8d\xb6\xd0\xa1\x8e\x29\x20\x81\x71\x30\x98\x26\x78\x38\xa6\x08\x8d\x76\x70\x44\xd5\x78\xd7\x25\x32\xee\x04\xd1\xc3\x09\x23\x04\x73\xea\x23\x20\x8d\xd8\x18\x6d\xed\x15\x2e\x3d\x3a\x08\xc9\x39\x1e\x94\xe7\xfb\x33\x06\x78\x78\xf8\x56\x1d\xb1\xd1\x89\x10\x62\x8f\x21\x2f\x3b\x24\x1b\xcd\x68\x11\x06\x8c\xbd\x6f\x69\x0f\x8f\xbd\x21\xe8\xd1\x8e\xd0\xfa\x26\x0d\xe8\x22\x5c\x8c\xb5\x80\xcf\xa3\xd5\xc6\xa9\xd8\x23\x9c\x75\x30\x3e\x51\x9d\x04\x9d\x0f\xd0\xf8\xf1\xca\x4b\xd6\x6d\x19\x77\xda\x41\xef\x2f\xbc\xd8\x15\x2e\x3e\x3c\xed\x14\xbf\xe3\xf9\x47\xa4\xb8\x9a\xdc\x7a\x9e\x4a\x73\xa8\x7b\xa5\x3e\xc0\x97\x87\x4f\xf0\x87\x8f\xb0\x89\x18\x06\xe3\xb4\x85\xc6\x9a\xf1\xe8\x75\x68\xb7\x4a\x7d\xee\x60\xf4\x44\xe6\x68\x71\x07\x84\x31\x4a\x52\x7a\x84\xc3\x34\xea\x00\x7e\x8c\xc6\x3b\xce\xd5\xa1\x7e\xe4\x90\xb7\x73\x32\x67\x54\x12\x47\x40\x4a\x36\x12\xd4\xe4\x98\xb2\x61\x0e\x79\x8a\x47\xb6\x65\x7d\xc3\x29\xde\xc3\xb7\xfe\x82\x67\x0c\xbb\x9c\x48\x65\x08\xac\x19\x4c\xc4\x16\x28\x8d\xa3\x0f\x11\xf4\xe0\x39\x9c\x1a\x38\x0e\xc9\xea\xe8\x43\xde\x2d\x47\xf9\x7a\x4f\x6a\x73\xe9\x4d\xd3\x43\x22\x24\x19\x52\xb6\x3f\x06\x1f\x7d\xe3\x2d\xef\xa2\xf1\xc3\x90\x9c\x69\x74\xc4\x79\x22\x34\xde\x45\x74\x91\xb6\x7b\xf5\x2d\x17\xd6\x10\x68\xb0\x86\x22\xf8\xee\xad\x18\x4a\x19\x4c\x00\x8a\x3a\x26\xba\x57\xea\x06\xfe\x66\x62\xbc\xde\xd7\x0d\x60\xbb\x13\xd8\x79\xc7\x90\x0a\x46\xb2\x6b\x08\xd0\xe9\xa3\xc5\x16\x8e\x57\x68\xb1\xd3\xc9\xc6\x3d\x3c\xfa\xf2\x58\x01\x04\xd4\xad\x54\x5e\xb7\x2d\x1c\xf8\xd7\xed\x18\xcc\xa0\xc3\xf5\x20\xcb\xe6\x47\x8b\x0a\x45\xcf\xa1\x28\x58\x94\xed\x5f\xbc\x9f\xe0\x6d\x2d\xdf\x9e\xc3\x33\x8f\x18\x86\x8f\xf7\x39\xa0\x8a\xb5\x4d\x8d\x8c\x53\x33\x61\x83\xe3\x9c\xb6\xb1\x87\xef\x13\x45\x38\xe2\x14\xba\x71\xbc\xda\x0f\x01\x3b\x0c\xe8\x1a\xa4\xdb\x6f\xfe\x8a\x0e\x83\xb6\xb7\xdf\xc0\x03\x5a\x6c\x78\xd1\xdb\x6f\xfe\x34\x8e\x96\x33\x6d\xbc\x13\x2e\x4e\x89\x1c\xf4\x15\x74\xd3\x20\xd1\xbc\xe8\x61\xaf\x00\xfe\xee\x93\xf0\x94\x51\xf4\xc9\x0f\x83\x76\xed\xed\x99\x63\x13\x9a\xcb\x36\x0e\x14\x0f\x8b\x24\xe7\x67\xe1\xf9\x1c\x6f\xb9\xac\xbe\xc5\xc3\x3d\x38\x1f\xc1\xe9\x68\xce\x68\xaf\x2f\xeb\x91\x99\x2b\x05\xfe\x01\x03\xb3\x32\xa2\x23\xe3\x79\x4f\xf0\x0f\x7e\xf9\xcf\x4d\x1f\xe3\x78\x7f\x77\xa7\x5d\x34\xfb\x88\x7a\x30\xad\xf1\x71\xdf\xe2\x1d\x57\xdb\x34\x77\x0e\xcd\xdd\xcd\xdd\x27\xdf\xe2\x5d\xe2\xa5\xef\xb6\x39\x8c\x67\xde\xe1\xe1\x15\x04\x5a\x43\xaf\x6b\xfe\xb9\x2a\xd2\x12\x11\x63\x12\x16\x72\x28\x8c\xdf\xce\x5b\xeb\x2f\x02\x1c\x07\x87\xfd\xcf\x01\xc9\xa7\xd0\x20\x1d\xc0\x07\x7e\x50\xbe\x46\x87\x7b\x9e\x72\xf8\x99\x4b\x7c\xc3\xcb\xf1\x3c\x6c\x7f\x32\xae\xf5\x97\x2f\x23\xdd\xc3\xc7\xdf\xed\x3e\xfe\x7e\xf7\x80\xf1\xe7\x31\xf8\xf1\x90\xe3\x3d\x39\x3f\xe0\xed\xc4\xeb\x7b\x68\x3d\x92\x64\xaf\xb2\x30\x33\x88\x47\xdf\x3c\xa4\x81\x51\x78\x7f\x73\x03\x9f\x3b\xb8\xfa\x04\x17\xed\xa2\x20\x69\xa1\xc4\xd1\xaf\x69\x2f\x0c\x77\x3c\x5c\x51\xef\x93\x6d\x59\x69\x56\x0a\xb3\x92\x96\x9d\x7c\x6a\xd0\x4f\x08\x94\x02\xf2\xbc\x30\xe1\x46\x95\xa8\x68\x0e\xeb\x03\xfc\x90\x95\x52\xa9\x0f\x1f\xe0\x47\x64\x7a\xa3\x6b\x0b\xe6\x36\x8f\xdf\xfd\xf1\xcf\x3f\x6e\x95\x7a\xec\x11\x42\x7d\x89\x6d\x51\x4e\x26\x77\x11\x5a\x06\xc4\x2a\xe3\xc2\xe8\xb2\x4f\x96\x79\x4e\x0a\x6f\x8c\xc7\xce\x7b\x2b\xad\xa0\x74\x89\x27\xbc\x1e\x8d\x6b\x85\x57\x9f\x62\xb0\xb7\x67\x05\x8b\x9a\x6f\x05\xc8\x18\x3a\x1f\x86\x9c\x2d\xda\xf3\x12\xde\xc1\x77\xc6\xa5\xe7\x1d\x18\x47\x51\x5b\x0b\x87\x67\xce\x0f\x17\x99\x89\xf6\x4c\x68\x0f\x70\xc4\xce\x07\xec\xb5\xcb\x90\x5f\x84\xf6\x7e\x58\x13\xe1\xe6\xc8\x14\x94\xd8\x1e\x7a\xd3\xc5\xdb\x33\x03\x69\x62\xda\x7b\x11\xae\xab\x00\xaf\x61\x72\x0c\xba\x79\x42\x96\x6f\x99\xb5\xcb\x3d\xb4\x7c\x49\x7a\x5a\x81\x47\x67\x02\x45\x05\x05\xf3\xb9\xdb\xc8\x9b\x2a\x55\x19\x00\x32\xbd\x33\xce\x50\x8f\x6d\xe5\x8f\x8c\x9e\x04\xed\xc3\x07\xf8\x5e\xb2\x9e\x3f\x8c\x67\xd6\x6f\xa5\xf2\x33\xa6\xb7\x03\x3d\xeb\x0f\xc4\x5e\x47\x6e\xea\x04\x17\x13\x7b\x16\xa3\x45\x7e\x4a\xcf\x1e\x50\x3b\x52\x32\x72\x95\x3d\x42\xd7\x52\xa9\x71\x5e\x67\x07\x94\x9a\x1e\x34\x71\x66\xa7\x67\x83\x4f\x84\xaa\xfe\x0a\x48\xe6\x3f\x38\xbd\x9c\x29\x92\x9f\xec\x73\xf8\x5f\x53\x85\xc7\xb2\x48\xdc\xe3\xf2\x60\x43\x90\xa1\xb4\x8c\x31\xef\x46\x92\x94\xa3\x0a\xd8\xa0\x39\x97\xae\xf7\x84\xd7\x1c\x04\x90\x16\x91\xcf\x1f\x80\x5e\x73\x8b\xe6\xba\x04\xf6\x4a\x2d\x74\xc1\x0f\xab\x9d\xee\x6a\xeb\x56\x3a\x46\x1c\xc6\xc8\x78\x28\x42\xcd\xe3\xe8\x4a\x11\x87\x45\xdf\xe4\x4d\x61\xd7\x61\x13\x6b\x85\x39\x4c\x54\xaf\x06\x8a\x1f\x38\x62\xf9\x18\x72\xf7\x0c\x3e\x9d\x7a\x38\x8c\xc7\x5a\x7f\x07\xdf\xeb\xe6\xcb\x83\xda\x14\x1a\xac\x04\x73\xbb\x5b\xb0\xa2\x72\xa2\x32\x07\x36\xb1\x47\x42\xa5\x97\x0d\x67\x28\x5d\x6b\xf5\x35\xde\x45\x22\x0c\x5b\xfe\x8a\x9e\x36\xc4\xa4\xf3\x4e\x65\xbd\xa4\x8c\xae\xc7\x5a\xfe\x35\xc0\xfe\xc2\x4e\x0d\x43\xd4\xc6\x71\xa6\x73\x2e\x69\xb7\x46\x8c\x6c\x57\x08\x82\x8e\xb3\x94\x67\x43\xf4\x2a\xd7\x4b\x30\xce\x63\x38\x38\xd4\x2d\xb4\x1e\xc8\xb3\x2a\x89\x16\x45\x42\xdb\xed\xe1\x33\xa3\xd4\xd0\x64\x23\x77\x4a\x50\x37\xaf\x3a\xa5\xb5\xc9\x1b\xfc\xea\x0d\xc2\xd3\xfe\x2b\xf8\xd2\x45\x14\xdf\xc9\x6a\x51\x2b\xf1\x96\x3a\x40\x05\x5e\xf5\xa1\xc5\x27\xec\xe1\x8b\x53\x52\x1d\x90\x4c\x8b\xee\xcc\x0d\x9a\x47\xd6\x5f\x8d\xfc\x9a\x2a\xb3\xd4\x1a\x71\xaf\x8b\x07\xcd\x1e\x7e\x62\x0c\xbf\x23\x55\xb0\x64\x81\xc2\x67\x6c\x92\xb4\xd4\x95\x1a\xe5\xfd\xfc\x0f\x8c\x66\xe6\x71\x1d\x4a\xee\xd1\x70\x22\x26\x45\xca\x95\x11\x34\x54\xc3\x37\x73\x1a\x36\xde\x09\xa1\x24\x16\xd4\x4d\xaf\x9a\x5e\x07\xdd\x44\x0c\x50\x44\x44\x3e\xb3\xdd\x41\x8b\x23\xe6\xb8\xbd\x63\x6e\xca\x2a\x3e\x08\x0c\xde\x69\x63\x54\x26\x2c\x11\x06\x9b\x52\xcc\x17\x9a\xca\x16\xe3\xa5\x14\xc3\xf4\xa5\x57\x02\x2c\x5d\xb7\x1a\xf1\x8c\xc2\xfc\xaa\x48\x83\x30\xf7\x8c\xe1\x9a\x21\x37\xfb\xf5\x0b\x5a\xbb\xf0\xe7\xe6\xa5\xfa\x67\x31\x7c\x2b\x59\xbb\x8c\x56\x76\x35\xe5\x1c\x40\x94\x70\x3e\x16\x48\xfa\x95\xac\xc4\x8b\x3e\x49\x03\x1b\xb4\x4b\x72\xea\x42\x17\x31\x60\x2b\x49\x86\x39\xc9\xd9\x0e\x5c\xc5\x0d\x37\xd6\xf3\xc1\x4d\x95\xcd\x92\x54\x2d\x45\x3f\xb0\x29\x03\xe3\x5a\x74\x51\xe7\x26\x92\x0f\x02\xb2\xd6\xc0\xc8\x48\xe3\x5c\xab\x56\x45\x7c\xce\xae\x5b\x9f\xbd\x69\x25\x6c\x81\x95\xc4\xce\xc2\xe7\x83\x0e\x46\x82\x7a\xa7\x4d\xa9\x4b\x6f\xac\xd8\x93\xa9\x5f\x4e\xdf\x2f\xa8\xce\x45\x2d\xe7\x27\x43\xc0\x61\x65\x04\x4a\x58\x4a\x9f\x4e\x01\x4f\x7c\x0e\xe1\x54\x12\xe7\x72\x3a\x4b\x2e\x10\x68\x5c\xf4\x60\x75\x38\x61\x58\xf7\x0f\xf5\x39\x66\x1b\x7b\xf2\xbe\x05\xd3\xa2\x66\xb5\x5e\xf6\xca\x75\xc8\xd0\xa6\xc0\xa5\x76\x3e\x0c\xda\xb2\x0a\x2a\x4d\xe0\x9b\x46\xb3\xfb\x95\x1a\x98\xd9\x54\xc4\xeb\xc8\x83\xff\x9d\x4c\xf3\x64\xaf\x6f\xc9\x9b\x50\xaa\xf4\x9b\x1a\xac\xa6\x79\x33\x53\x0d\x6b\xbb\x12\xdf\xed\xa0\xd3\x4d\x9c\xca\xae\x4a\xd9\xb3\xe4\x16\x2f\x37\x1f\xb7\x95\x64\xf2\xb5\xc1\x19\x6a\x97\xaf\xc7\x74\x9f\xb9\x18\x70\xf0\x11\x61\xd0\x4d\x6f\x1c\x32\x78\xd4\x9a\x30\xeb\x29\xf2\x4e\xce\xa4\x75\x8a\xb4\xaf\x20\x56\xab\x64\x43\x5d\xc4\xb5\x5a\xf3\x84\xd3\x41\x84\x1d\xd6\xa2\xb1\x6e\x86\xd2\xc9\x67\xed\xda\x4e\x2d\x40\x09\xab\x2a\x07\x16\x3d\xbb\xb4\x58\xfa\x85\x1e\xbb\x53\x95\xc5\x8b\x41\xeb\x7d\x7e\xbd\x38\x46\x41\xd0\x22\x3c\xb1\xd7\x39\x25\xb2\x3d\xf5\xc6\x48\xd6\xf4\x6c\xa9\x64\x02\x3b\xcb\xdd\xbb\xae\x71\x96\xe2\x65\x28\x8b\xfc\xad\x3d\x81\x08\x4e\xfe\xd6\x73\x94\xba\x09\x52\x1c\x46\xc9\x86\xa6\xb5\xfc\x56\xbe\x1a\x82\x0b\x43\xa5\x1e\x2e\xc4\xe0\x7f\xca\x2d\x88\xff\xfc\x3f\xfc\x7d\x3d\xe8\xfe\x26\xfe\xbe\x81\xe3\x95\xed\xf0\x1b\xfe\xbe\xf1\xa3\xf9\x15\xfe\xbe\x38\x19\x3e\x27\xfc\x26\xfe\xbe\x59\xfa\xfb\xe6\xcd\x08\xf9\xcc\x2d\x5e\x49\xbc\x79\x15\x10\x95\x4f\xa0\x07\xf1\xb4\xcb\x6b\xa0\x3a\x5d\x2f\xfd\x71\x39\xf2\xe7\x5e\x9b\x65\xfd\x0a\x17\x43\x3d\x7f\x66\x16\x25\xcb\xa4\x74\x69\x38\x62\xb9\x43\x69\x4d\xd7\xb1\x70\xb3\x69\xf3\x81\x60\x73\x08\xc9\x62\x28\x37\x1d\xfc\xf6\x94\x62\xc4\xc0\x09\xca\x21\xd0\x36\xfb\x12\xeb\xa9\x22\x97\x46\x6b\x22\x4d\xfe\x58\x2a\x2f\x28\x95\x9b\x0e\xb6\x3a\x22\x88\x5e\xb0\xa0\xe0\x95\x30\x71\x8e\x5b\x43\xa3\xd5\x57\x6c\xab\x92\x50\x13\xd8\x2a\x6f\x04\x8a\xd5\xcd\xcd\xdf\xe2\xcf\xf0\xc1\x77\x60\xa1\x10\xae\xb1\x51\x18\xf5\x89\x29\x76\xf1\x21\xf6\x6b\x09\xe4\xee\x5d\x80\x5c\x30\xc8\x14\x20\x33\x18\xab\x03\xaf\xde\x24\xa2\x92\x61\xe1\x24\xab\xd7\xd1\x9f\xe5\xbf\x29\x56\x4f\xb6\x17\xa4\x97\xfb\x20\xc9\x5e\xbe\x81\x61\x78\x67\x00\xad\x0f\x5d\x1c\x63\x26\xf5\xc2\x1a\xab\x7c\x57\xc8\x4f\xf3\x1e\x8a\x51\x8e\xde\xb6\x99\x7f\xc2\x5a\x87\xd8\x8a\x38\x1d\x31\x63\x85\x81\x99\x8f\x57\xbd\x10\xf8\x35\x1d\xb6\xaf\xee\x31\xdf\x76\x67\x6a\x56\x8b\x05\xa2\x6a\x40\xa2\xc1\x39\x06\xa9\xcf\xa2\x69\x4a\xbc\xd2\x11\x0d\xa9\xb8\x1a\xc5\xce\x23\x85\x80\x2e\xda\x6b\x41\xa4\x5c\x55\x95\xe9\x9b\x44\xd9\x67\x88\x85\x96\x69\x86\xd4\x5c\x76\x3e\x15\x82\x66\x1d\x8a\x08\x47\xdd\x3c\x9d\x82\x4f\xae\xdd\x2e\x2c\xea\x0b\x2e\xcc\x77\x79\x3b\x09\x45\xde\xd6\x3b\x9d\x24\x67\x1c\x5f\x02\x91\xf5\x76\x2c\x7b\xec\xae\xf8\xff\x19\xb9\x0b\x97\x5e\xbc\xbd\x26\x10\xe2\x7e\x87\x5d\xdc\x01\xc6\x66\xbf\xdf\x67\x79\x9b\xd8\xa6\x2d\xbd\x5b\x81\x5f\x22\xbd\xaa\x90\xd0\x4b\x7d\xce\xf9\x8b\x45\x11\xaa\x54\xca\xab\x29\x91\xe5\xec\x54\xa3\xf8\x9a\xd4\xc4\x7a\xd8\xdc\x38\x1f\x6f\xa0\x76\xc1\xe9\xc5\x56\x3c\xd6\x22\x05\x39\xcb\xcb\xef\xa8\x85\x76\xd4\xf9\x39\x91\xf5\x6a\x61\x21\x4d\x47\x5c\x5d\xa5\xc5\x14\x5c\x01\xb2\x7a\x51\x1b\xdf\x75\x15\x45\xf5\x64\x9b\x9c\xb4\x70\x59\x64\x27\xf9\x73\x1c\x9b\x63\x19\xe9\x26\x2a\x45\x75\x4c\xfc\x17\xdd\x65\x55\x29\xb7\x11\xe5\x46\x60\x1a\xb5\xd4\x90\x23\x72\x10\x33\x92\x74\xc0\xac\x45\x6a\x71\x56\x5f\xf2\x62\x72\x79\x2c\x87\x54\xac\xc4\x8b\x0b\x87\x29\x29\x8b\x8b\xb3\x95\x3e\xff\x0a\x2d\xe5\xfc\x70\x26\x32\x78\xb3\xb0\xaa\x97\xc2\x3a\xc9\xea\x2e\x63\xf2\x62\x72\x6f\xb9\xc2\x20\xff\x2e\x72\x64\x55\x0b\xe2\xf4\xa5\xdb\x4f\xa1\xa9\x72\x3c\x14\x5d\xf8\x6f\x00\x00\x00\xff\xff\x5c\x10\xcc\xef\x8f\x19\x00\x00" func runtimeHelpCopypasteMdBytes() ([]byte, error) { return bindataRead( _runtimeHelpCopypasteMd, "runtime/help/copypaste.md", ) } func runtimeHelpCopypasteMd() (*asset, error) { bytes, err := runtimeHelpCopypasteMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/help/copypaste.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeHelpDefaultkeysMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x59\x4d\x73\xdb\xbc\x11\xbe\xeb\x57\xac\xc7\x87\x4a\xa9\xed\x69\xda\xce\xf4\xd6\x19\x27\x8e\x27\x69\xe3\xc4\xb5\x9d\xe9\xd5\x10\xb4\x14\x51\x81\x00\x83\x0f\xc9\xea\xab\xf7\xbf\xbf\xb3\x20\x09\x52\x94\x48\x7d\x58\x0e\x4f\x36\xb5\xd8\x07\xbb\xd8\x5d\x3c\xbb\x3c\x87\x1b\x4c\x98\x97\x0e\xfe\x8d\x4b\x3b\x18\x7c\x40\xa9\x17\xc0\x0c\x82\x15\x59\x2e\x11\x78\xca\x8c\xb3\xa0\x13\x70\x29\xc2\xa4\x14\x4e\xb5\x9b\xe1\xd2\x02\x53\x13\x7a\x2f\x0c\x24\x5e\x71\x27\xb4\xb2\x57\x70\xab\x0d\x64\xda\xe0\x40\xa8\x44\x9b\x8c\xd1\x6b\x60\x63\xed\x1d\x8c\x85\x9a\x08\x35\x05\xee\xad\xd3\x59\x54\xa3\x0d\xe1\xa8\x29\xfd\x54\x41\x94\xa2\xf6\x02\x72\x89\xcc\xe2\xc0\x78\x05\xcf\xff\x84\x14\x65\x0e\x33\x5c\x56\xbf\x3f\x0f\x06\xf7\x41\x00\x0c\x66\x98\x8d\xd1\x80\x4b\x99\x83\x77\x4c\xca\x77\x10\xd4\xa7\x68\x30\xd8\x64\x90\x56\xb1\xb1\xc4\x33\xf8\x92\xc0\x52\x7b\x98\x68\xf5\x27\x07\x52\xcc\x10\x84\xbb\xa0\x57\x03\xce\x54\xb1\x1d\x7a\x75\x36\x18\x9c\x9f\x9f\xc3\xbd\x5e\xa0\x01\x6f\xd1\x0c\x06\x2b\xf2\x15\x14\xcf\x0a\x6e\xd0\x72\x23\xf2\x60\xa4\x4e\xa2\x1f\xe0\x74\xcf\x6a\xb0\xba\x8c\x0f\x34\xfe\x7e\xab\x87\x10\xe1\xa3\x33\xf2\x12\x0b\x1b\xbf\xe7\xa8\x80\x01\xd7\x59\x46\x27\x9e\x1b\x9d\xe5\x0e\x12\x6d\xc0\x78\xa5\xc2\x81\x16\x3f\x59\x18\x5a\xc4\x78\x4c\xd5\xdb\xe7\x20\xcb\x40\x0a\xeb\xc8\x49\x73\x26\xc5\x24\xfe\x3a\xba\x0a\x36\xc2\x13\x1b\x47\xaf\x7e\x51\x2d\xb4\x0b\x10\x0e\x16\x42\x4a\x60\xde\x69\xae\x29\x38\x1d\x82\x48\x20\xd7\xd6\x8a\xb1\xc4\xab\x83\xbd\x5a\xd8\x38\x2e\x10\x1f\x3c\x99\x68\x53\x94\x32\x42\x0f\x5d\x2a\x6c\x81\xca\xa5\xb6\x08\x99\xe0\x46\xc3\x22\x15\x12\x29\x54\x4c\x94\xc4\x17\xe4\xde\x61\xb0\xa5\x1b\x31\x84\xd2\x37\x36\x17\xd3\x90\x14\xeb\xa1\xb4\x65\xc1\x1b\x06\xd7\x5a\x50\x6d\x0b\x81\x37\x0e\xaf\x6b\x63\xf4\xc2\x76\xd9\x7d\xa7\xe7\x18\x0a\x0e\xf7\xc6\x52\xe8\x18\xed\xd5\xe4\x04\x66\x07\xec\xc7\x54\x24\xee\x92\x6d\xdd\x41\x89\x4d\x67\x6a\x51\x22\x77\xe0\xf0\xc5\x9d\x02\xb9\xc0\xbe\x96\x6e\x48\x61\x07\x5a\xc1\x1d\xe3\xa3\xcb\xaf\x98\xb8\xe0\x8c\xda\x6e\x1d\x4c\x1f\xe3\x54\x14\xc9\x55\x16\x5f\xee\x8d\x41\x45\xc5\x4a\xe1\x69\xb0\x1f\xc4\x34\x2d\xc1\xd7\xb1\x51\x4d\x4e\x82\x5a\x63\x7f\xd6\x59\xe7\xf2\x3e\xbb\xc9\xf9\x5a\x9d\xc6\xfe\x4f\x3d\x21\xf4\xd6\xf6\x93\xdf\x87\xd7\xd2\xf5\x9c\x7b\x19\xeb\x5a\x21\x2c\xb4\x99\x80\xc4\xe4\xf5\x81\xb7\x15\x7b\xf3\xdc\xdb\xd8\x86\x24\x4e\x81\x7d\x2d\xdd\xe5\x6f\x5d\xbf\xaf\x61\x3b\x0d\xb9\xc1\xb9\xd0\xde\x02\x66\xb9\x5b\x06\x97\x5f\x10\x39\x58\x0b\x89\x89\xe6\x3e\xa3\x13\xd9\x0b\xfb\xf7\x7d\xb1\x15\x45\x5a\x0b\xb7\x0c\x83\xfd\x10\xd7\xb1\xef\xd9\x14\x7f\xe4\xfb\x60\xfb\x3c\xb8\x3d\x67\xd3\x63\xe3\x6b\x1b\xf6\x8d\x5e\x6c\xbd\x26\xd6\xb1\x27\x24\x75\x32\xf4\x78\xa5\x86\x64\xd7\xa6\xf8\xe7\x47\x5e\x86\xf9\xa6\xcf\xad\x63\xc6\x1d\xe3\xe1\x1e\x6c\x4a\xf2\x0a\x9a\x9c\xb0\x35\xc7\x9c\x3e\xf6\x6c\x7b\xb1\x65\xc7\xef\xf0\x2f\x9f\xe5\x04\xca\x8a\x32\x22\x8a\x82\x96\x10\x8d\x18\x16\xfc\x86\x68\x86\x4b\xe1\x7c\x74\x2c\xf6\xa2\x0b\xfb\xe3\x92\x4b\xaa\xaa\x6e\x81\xa8\xc0\xe6\x52\x38\x5b\xed\xa0\x2a\x6e\x8e\x8d\x61\xe8\x6d\x60\x6e\xf3\x20\xf2\x4c\x4e\x24\x1e\x57\xfe\xe7\x34\x70\x83\xcc\x21\x91\x24\x7a\x35\x8a\x84\xe6\x89\x8d\x6d\x93\xca\xf4\xd1\x96\x06\xed\xe8\xa1\x18\x0d\xb3\x5c\x83\x7f\x2a\x5c\x84\x9d\xb6\xcc\xa7\x34\xbf\x08\xb8\xf7\x55\xfd\x68\x49\xd5\x72\x57\x41\xee\x1b\xe5\xfa\x86\x0c\xd4\x1c\xed\x56\xa8\x09\xa1\x9a\xc0\xd3\xec\xf1\x9c\xff\x68\xee\x5e\x7b\x20\x29\x30\xc3\x96\x86\x3a\x47\x65\x4b\x4a\xdc\x15\x2a\x71\xa5\x6a\xac\x0c\xe5\x4d\x28\xeb\x98\xe2\x48\x9b\xae\x8e\xde\x22\x33\x3c\x6d\xad\xcc\x1b\x2b\x63\x51\xee\x5b\x1d\xfd\x26\xf1\x24\x7e\xeb\x7a\x4e\xde\x0b\xd5\x36\xff\x2c\xd3\x25\x10\xfd\xca\xbe\x22\x45\x7f\x7a\xca\x99\x82\xfc\x0b\xa2\x05\xc2\x82\xb0\x21\x83\x24\xb3\xa5\x14\x1d\xcd\x68\xcd\x8b\x1a\x9a\xdd\xd3\x7a\xb6\x53\x43\x44\x6f\x14\xcb\x70\x67\xce\x47\x8d\xb6\xd0\xf8\xc8\xe6\xad\x2d\x1e\xfa\x54\xa9\x1b\xe8\x55\xc7\x79\xf5\xac\x3e\x36\x03\xfa\xce\xe1\x88\x33\x5b\x23\x35\x05\xab\x6f\x50\x9b\xe0\xa9\x82\xc3\xef\xc1\x69\x7a\x74\x36\xa8\x5a\x5b\x67\x3f\x47\xdb\x4a\xba\xfb\x74\x36\xef\xc4\x0e\xe2\xd9\xa3\x73\xbb\xed\xf5\x5d\xd7\x49\x65\xeb\xa6\xa8\x8f\xa6\x1f\xbe\xcf\x42\x67\x1f\xed\x3e\x7c\x9f\x21\x0f\x0a\xc5\x35\xb3\xd8\x67\x9f\x1d\x79\xd2\xd2\xd9\xa0\x0c\x3b\xf7\xd9\x99\x79\x51\xe7\x4b\x8f\xe1\x45\xb5\xf1\xae\xec\x33\x71\xd2\xdf\x69\x46\x9d\x7c\xa7\x4e\x9d\x2f\xf7\x53\x1a\x75\xce\x77\xe9\xbc\x67\xd6\xed\x57\x65\xa2\xce\xd9\xce\x7d\x7a\xb7\x67\x77\x15\x75\xee\x18\x01\xac\xe0\xc6\xe7\x52\x70\xa2\x29\xbb\x34\x47\x9d\xff\xdf\xa5\xf3\x87\x9a\xe8\x7e\x99\x0d\x9d\x3b\x4a\xe8\x0a\x1e\xf0\x10\x9d\xc4\x5c\x3a\x83\x3d\xea\xac\x08\x6e\x6d\xb6\x36\x75\x1c\xd0\x0b\x4b\xcd\x46\x43\x67\x67\xb0\x1f\xa4\x33\x34\x11\x51\xe7\x07\xc6\x67\x36\x67\x3c\x48\xd2\x8b\xe0\x90\xb4\xa1\xf3\x06\xc3\xe8\x6e\xcf\xfa\x19\x96\xb3\x1d\x3e\xaa\x72\x93\xc9\x0e\x0a\xde\xd4\x19\x6e\xbe\x3b\xc6\x8d\x7e\x03\x82\xb2\xc5\x84\xe3\x2e\xb9\x83\x2f\xc3\x4b\x5f\xd8\xf0\xa4\xa7\x53\x89\x90\x91\x81\x60\x90\x6b\x13\x46\xee\xc3\xdc\xa0\xb5\x95\x64\x2c\x8c\xb5\x40\x31\x6b\x25\x19\x36\x65\xd4\x1f\x90\x88\xce\x47\x8d\x63\xf8\x1f\xc4\x51\xa9\x64\x0e\x6d\xb5\x1c\x27\x25\xdc\xf1\x5e\x2a\x0e\xc5\x4b\x27\xc2\x57\x87\xd0\xa6\x75\xf0\x91\xb7\x9e\xb9\x6f\x65\x2c\x6f\x3d\x77\x8f\xf9\xa3\x5a\xb6\x7e\x2c\xba\x2e\xea\x7d\xb2\x75\xf7\x40\x62\x74\x56\x26\x23\x59\x3f\x0c\x83\xea\x72\x6a\x59\xe5\x6c\xc8\x32\x91\x80\xd2\x0d\xce\x5e\xae\x18\xd5\x59\x5b\x5d\xa8\x15\xea\x63\xce\x16\x55\xcb\x15\x67\x43\x05\xe1\xa5\x22\xc0\xc6\x8d\x01\x6d\x50\xaa\x0f\x99\x8e\xad\xa3\x56\xa3\x8a\x9d\xa8\xe3\xf0\x71\xea\xd5\xa8\x79\xcb\xc3\x0f\x98\x91\x35\x65\x44\xb7\x9d\xfc\xda\xa7\x42\xe5\xdb\x51\xa9\x62\xb5\x20\x2d\x0c\x39\xf5\x59\xf2\xd0\x59\xc0\x16\xd4\x97\x16\xea\xe3\x4c\xe4\x1b\x26\xd6\x21\xf4\xca\xa7\x42\xcd\xda\xa8\x9b\xe7\xca\xdc\xe6\xb0\x17\xe7\x68\x96\x6b\x13\x92\x8d\x90\xed\x42\x0d\xe5\xe9\x4e\x7b\x8b\x5f\xcb\x1b\x65\x05\xf7\x92\x6e\x21\xb6\x61\x2e\x73\xc0\xd4\x12\xa4\xe6\xec\x15\x46\x97\x25\xeb\xbb\x4b\x7f\xd5\x37\xc1\x5f\xf2\x1d\xb0\xf6\xe6\x14\xea\xee\x35\x7c\xcd\x3b\xaa\xd1\xec\xb6\x05\x6a\x62\xb0\x82\x9a\x35\x0c\xb5\x24\xd2\x6a\x32\xa1\x98\x24\x72\x01\x4a\x3b\xb0\x3e\xcf\xb5\x29\x63\x26\xca\xce\x70\x19\xae\x2d\x6f\x31\x68\xfb\xf3\xe7\x30\xa4\x40\x36\x19\xad\xa3\x18\x68\x5e\x8d\xb1\xa0\x28\x1f\xbe\x17\x1b\x2f\xf1\x15\x89\x5e\x46\xc2\xa7\x8c\x71\x0b\xd6\x2d\x25\x02\xe3\x07\xce\x3f\xf6\x3e\xdb\x98\x63\x49\xa9\x33\xcc\xb2\x42\x95\xdf\xe6\x63\x92\x1c\x97\x92\x71\x3a\xb6\x21\x5d\x49\xb2\x52\xb2\xfa\x14\x12\x7b\xa7\x48\xa2\x2b\x49\x6c\x49\x96\x1d\x51\x83\x6c\x57\x13\xa1\xca\xc6\x19\x2e\xed\xd5\x60\xf0\x5f\x66\x28\xdd\xcf\xe0\x29\xc5\xda\x01\xe1\x33\x7d\xc6\x96\xe1\xac\x17\xda\xcc\xa8\x00\x50\x69\x8c\x81\x70\x06\xb5\x33\xf7\x72\xe4\x4e\x27\xde\xbe\x87\x56\x80\x6f\x73\xe0\xed\x5f\xa1\x1e\xb9\x74\x1c\xff\x0a\x6e\xff\x06\xf5\xc0\xac\x5b\xea\xef\x85\xd4\x7f\xbc\xe8\x20\xbd\x41\xea\x1f\x7b\xe9\x7a\xff\x97\x9d\xba\xfe\x08\x00\x00\xff\xff\xc0\x9e\x0d\x13\xdd\x21\x00\x00" func runtimeHelpDefaultkeysMdBytes() ([]byte, error) { return bindataRead( _runtimeHelpDefaultkeysMd, "runtime/help/defaultkeys.md", ) } func runtimeHelpDefaultkeysMd() (*asset, error) { bytes, err := runtimeHelpDefaultkeysMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/help/defaultkeys.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeHelpHelpMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x56\xcd\xae\xdb\x36\x13\xdd\xf3\x29\x06\xc8\x22\xdf\x77\xe1\xab\x07\xc8\xe2\x02\x41\xd1\x34\x5d\x04\x48\x8b\x6c\xba\xf3\x48\x1a\x8b\x03\x53\x1c\x85\x1c\x59\xd7\x7d\xfa\x62\x48\xc9\x96\x6f\xd3\x76\x65\x63\xc8\xf9\x3b\x73\xce\x88\xef\xe0\x0b\x77\x49\xc0\x53\x98\x40\xe9\x55\x9d\xab\x06\xce\x80\xa0\x94\x46\x8e\x18\x9e\x5b\xcc\xd4\x97\x73\xa0\x9e\x55\x12\xa8\x47\x05\xe4\x31\x83\x0a\xb4\x04\x84\xf9\x6a\x7f\xe7\x4c\x80\xb1\x77\x1c\x75\x66\xe5\x0b\x1d\x60\xf1\x1c\x08\x30\x64\x01\xc5\x33\xc7\x01\xb0\xbf\x60\x54\x1c\x08\xe4\x04\xea\x09\x4e\x73\x08\xd0\xe1\x84\x2d\x07\x56\xa6\x6c\x07\xa3\xf4\x94\xa2\xdb\x8a\xc8\x8d\x73\xdf\x04\x64\xa2\x58\x7c\x3a\x19\x47\x8c\x3d\xb4\x98\x0e\x30\x25\xca\x19\x7e\xd2\x14\x9e\xa9\x81\x6f\x9e\x33\x50\xc4\x36\x90\xb5\x71\x7c\x39\xc2\x94\x64\x9c\x14\x4e\x56\xfa\x75\xe2\x38\xb8\xd5\x3f\x37\xf0\x29\xc9\x08\x51\x16\x90\x08\x8b\x5f\xc3\xf7\xd2\xcd\x23\x45\x45\x65\x89\x90\xf1\x5a\x3a\x4d\x73\x04\xbc\xa5\xce\x73\xe7\x01\x33\x1c\x5f\x9c\x01\x78\x3c\x80\x5a\xe6\x91\x30\xe6\x87\x92\x0c\x12\xcb\x4b\x70\x2c\x17\xe1\x7f\x66\xa8\x37\x28\x2a\x25\x8b\x4d\xaf\xd4\xcd\x4a\x96\x7d\x2b\xee\xff\x8d\x73\x9f\x24\x01\x42\xe0\xac\x1b\x5a\x3d\x9d\x70\x0e\x0a\x67\xba\xb6\x1c\x7b\x8e\x43\x2e\x85\x1d\x5f\xea\x1c\xd7\xf3\x33\x5d\xf3\xb1\x29\xfe\xa3\x24\x02\x8e\x27\x49\x63\xed\x47\xe2\x83\x77\x26\xba\x79\xef\xec\xc7\xc6\xb9\x77\xef\xe0\xb7\x99\xbb\xf3\x73\x56\x4c\xea\xdc\xd7\x7b\x5b\xdf\xad\xea\xef\x33\xeb\xa1\xf4\x57\x6c\x05\xa5\x8c\x17\x6a\xe0\xeb\x1e\x00\xb3\x5a\x80\x15\xfd\x0d\xc2\xec\xcc\xf3\x2a\x33\x74\x18\x4b\x19\x8b\xe7\xce\xdf\x8e\x01\x13\x01\x5e\x90\x83\x0d\x13\xda\x6b\x05\xcd\x22\x28\xb6\x07\x90\x64\xb6\x0b\xd3\x52\x4c\x9e\x5c\x65\xb2\x4c\xdc\xdd\x3a\xda\x82\x59\x3b\x5f\xe4\x42\x95\x3e\x73\xca\x86\x6c\x92\x39\xf6\xb0\xb0\xfa\x62\x1e\xc5\x18\x5c\x08\x4e\x80\x29\xc9\x62\x80\xe4\x06\x7e\x9f\xa3\xfb\x11\xc0\xd6\x19\x0c\xa4\x80\x06\x45\x77\x3e\x54\x29\xc8\x85\x92\x95\xf5\x76\x66\x5e\x8a\x5b\xd1\xc8\x62\x1a\x52\x4f\x57\xe8\xa5\x81\x87\x39\xd9\x80\x12\xad\x73\x28\x15\x1c\x0a\x3a\x95\x43\x3f\x9e\xd4\xaf\xa7\x55\x17\x41\x52\xee\x3c\x8d\x46\x62\xca\xf1\xbd\x42\x10\x39\xc3\x20\xd2\x1f\x6e\x58\x77\x1e\xe3\x40\xc0\x5a\x7a\xb7\xd6\x32\xe9\x83\x73\xd3\x34\xc7\x06\xfe\x58\xef\x57\xb2\x2a\xb6\x65\x94\x54\x41\xbc\x4f\x66\xe7\x98\x0f\x4e\x52\xb9\xf2\x37\xda\x61\x2b\xf3\x43\x92\x02\x04\xe4\x6b\x54\x7c\x05\xcf\x83\x0f\x3c\x78\xb5\x9e\xcb\x44\xd6\x4e\x5d\xf5\xb0\x26\x77\xa4\x5a\xac\x92\xd1\xe6\xd9\x92\x2e\x44\x11\xf2\x14\x58\xf3\x61\xa7\xb6\x17\xb8\x14\x23\x9c\x38\x50\xc4\x91\x8e\x20\xa9\xcc\xf1\xad\x59\xd7\xd5\x82\x10\x69\xa9\x91\x2a\xfb\x3f\x76\xdd\xca\xb8\xd2\x4e\xa9\x67\x5d\x92\x1e\x6d\xbd\xb4\x33\x07\x7d\xe6\x58\x87\x92\xaf\x59\x69\xdc\x68\x8c\xd1\x96\x23\x96\x10\xb4\xa3\xd9\xba\x06\x56\x66\xd6\xcd\x66\xc4\x33\x2d\x4d\x6f\x74\x53\xbd\x6f\x4b\xc7\xd6\xe2\xbd\x43\x8e\x5b\xac\x93\x84\x20\x0b\xf5\x26\x08\x74\x45\x01\x0d\x7c\xab\x6a\xfb\xc1\x95\x28\xea\x2b\xce\x21\x6c\x4b\x95\x33\x4c\x38\x50\xe3\xdc\x67\x32\xdd\xa5\x3a\xe5\x49\x72\x66\x1b\xf2\x5d\x5b\xb9\x7e\x00\x36\x32\x25\xc2\xfe\x83\x73\x4f\xa0\xb3\x4a\x62\x0c\x1f\xe0\x23\xb4\x89\xe9\x74\xb3\xac\x88\x0c\x7c\x29\x43\x7f\x10\x08\x86\x50\x12\x89\x7a\x4a\x15\x61\x58\xf3\xb8\xa7\x3d\xcd\x3f\xc0\x2f\xd5\xbf\x7e\x31\xfe\x6b\x29\x62\x86\x85\x42\xb0\x5f\x2f\x46\x17\x07\xab\xaa\xcc\x65\x74\x4f\x7b\x25\xdf\x63\x97\x39\x67\x4d\x68\x5c\x7c\x3e\x49\x5a\x30\xf5\x0f\xc9\xaa\x8a\x77\x5b\x2a\xf6\x0e\xe0\x41\xcf\xee\xe9\x76\x7c\x8f\xbc\xc5\xd8\x1a\xde\x07\x78\x70\x77\x4f\x20\x93\x49\xe6\x5f\x9c\xd7\x0b\x77\x45\xcf\x59\x65\xe4\x3f\xc9\x3d\xc1\x14\xe6\x81\xcd\xf9\xe7\xd7\x29\x20\xc7\x0a\xc0\x68\xac\x7d\x9f\xd7\xd3\x1b\x55\x25\x9d\x6b\x05\x15\x24\xe8\x12\xa1\x92\xc5\x4d\x20\x4b\x74\xb0\x85\x2b\x3d\x99\x12\x77\x71\xb7\x98\xfb\xcd\xf1\x4f\x9a\xa6\x38\x70\xa4\x2d\x55\x99\xf1\xdb\x64\x8f\xcb\xc1\x16\x74\xdf\x17\x45\x06\x8c\xc3\x8c\x03\x95\x0f\x8c\xb5\x5f\x83\xd5\xef\x23\xbd\xe2\x38\x05\x3a\xdc\x54\x5c\x86\x64\x6c\x9d\xca\x2b\x23\x6e\x1d\x14\xb0\x16\x99\x43\xff\xf0\xc5\x5c\x4f\xcb\x16\x85\x44\x36\x16\x8a\x7d\x59\x9b\xe5\xbd\xa2\x55\xb4\x1b\x97\x8f\xd5\xcb\x96\x07\xb4\xd4\x61\x55\xae\xbd\x99\xb2\x97\x54\x5f\x19\x84\x9d\x77\x99\xba\xba\xf7\x62\xbf\x32\xbf\x93\xd8\x25\x52\xda\x4a\x2e\x2f\x9d\x15\x77\x0b\x63\x79\x2e\x98\x58\xe6\x72\xf7\xc4\xc3\x9c\xca\xee\x74\xdb\xb8\x39\x56\xcc\x1b\xf8\x2c\x0b\x5d\x28\x1d\x2c\xb7\x6d\x7a\xd3\x74\x49\x53\xa2\x70\x7c\xee\x69\x52\xff\xe6\x25\xa3\x2b\xcb\x5c\x15\xdb\xaa\xe6\x29\xc9\x85\x7b\x6a\xdc\x5f\x01\x00\x00\xff\xff\x61\x4d\x8a\xe8\x11\x0a\x00\x00" func runtimeHelpHelpMdBytes() ([]byte, error) { return bindataRead( _runtimeHelpHelpMd, "runtime/help/help.md", ) } func runtimeHelpHelpMd() (*asset, error) { bytes, err := runtimeHelpHelpMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/help/help.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeHelpKeybindingsMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x7b\x6d\x73\x1c\x37\x8e\xf0\xe7\x87\xbf\x82\xcf\xb8\xea\xd6\xf2\x8e\x26\xd6\x9b\x9d\xf8\x52\xaa\x72\x1c\x75\x9c\x4b\x14\x6b\x23\xeb\xb6\xb6\x6e\x3f\x34\xa7\x9b\x33\xc3\xa8\x87\x6c\x93\x6c\x8d\x26\x9b\xbd\xdf\x7e\x05\x80\xec\x26\x7b\x46\x2f\xd1\x07\xb1\x87\x44\x83\x00\x08\x80\x00\xc8\x7e\xc1\x7f\x92\xdb\xb9\xd2\xb5\xd2\x4b\xc7\xd8\xa5\xaa\xac\xe1\x2b\xe1\xb8\xe0\x6d\x23\xfd\xca\x58\xc1\xcd\x82\xaf\x8c\xbf\x95\x5b\xc7\xfd\x4a\x78\xbe\x16\xb7\x92\x2b\xcf\xa5\x70\x5b\x2e\x74\xcd\x5b\xb3\x91\x76\xd1\x35\xdc\x1b\xde\x39\x89\x7d\xa2\x69\x58\x7c\x4b\x58\xc9\x17\x5d\xd3\x6c\x79\xd5\x39\x6f\xd6\xea\x77\x31\x6f\x24\x40\x6f\x4d\x67\x79\xa3\x6e\x95\x5e\xce\x18\xfb\x80\xa3\xfc\x76\xa0\x08\x5f\x75\xde\x58\x59\x73\xa5\xbd\xb4\x5a\x00\x1a\xa5\xf9\x1a\x29\x55\x0b\x5e\xad\x84\x5e\xca\x9a\x6f\x94\x5f\x71\xbf\x92\xbc\x3c\xe7\xf0\x7a\xc9\x2a\xb3\x5e\x03\x29\xc6\xf2\x4a\x68\x2e\x1a\x67\xf8\x5c\x72\x51\xd7\x88\x0d\x81\x17\xaa\x91\xbc\xfc\xdf\xaf\x66\x95\xd1\x0b\xb5\xfc\x0a\xd1\x7e\x15\xa7\x9f\xfd\xe6\x8c\x2e\xb9\x70\xac\x56\xae\xea\x9c\x93\x35\x9f\xcb\xc6\x6c\x66\xbc\x30\x96\x0b\xde\x28\xe7\x41\x3e\x80\xaa\x96\x0b\xd1\x35\x3e\x23\x3f\xcc\x02\x68\xf8\xc2\xd8\xb5\xf0\x20\xa0\x9a\xcd\xb7\xc4\xc0\x14\xa4\x2c\x9c\xe4\x4e\x4a\x84\x94\x40\x2f\xe0\x53\x0e\x69\x8b\x13\xad\x8d\x95\xf0\xaa\x3d\x5c\x58\x25\x75\xdd\x6c\x69\x6e\xe0\x9a\xc9\xfb\xb6\x11\x5a\x78\x65\xb4\x83\xb7\x37\xb0\x4a\x29\x49\xe9\x42\x80\x44\x22\xc0\x96\xd7\x19\x09\xac\x3c\xe7\x2b\xd9\xb4\xf1\x45\x78\xa9\xe4\x2f\x45\xca\x80\x97\x75\xcf\x76\xc2\xb2\xe3\x0a\xd8\xad\x9a\xae\x96\x35\x0b\xf3\xa7\xdc\xd4\xa6\xea\xd6\x52\xfb\x83\x19\x63\x3f\x2e\x9e\x94\x79\x6d\xa4\xe3\xda\x78\x2e\xef\x95\xf3\x53\xd0\x14\x5c\x45\xa7\xd6\x2d\x28\x92\x95\xc2\x83\x16\xce\x82\xce\x6e\x54\xd3\xf0\x5b\x6d\x36\x81\x39\xc3\x6b\x43\x3a\x01\x30\xec\x1f\xe1\x75\x50\x4f\xa0\x4c\x44\xaa\xff\xca\x85\xb5\x66\xe3\xe0\x8d\xb5\xb9\x93\x7c\x63\x6c\xcd\xe7\x5b\x6c\x67\xfc\x83\xb7\x0d\x6f\xe4\xc2\xa3\xdc\xac\x5a\xae\x3c\x43\x30\x40\x52\x75\xd6\x19\x0b\x6f\xc2\x2f\xe7\x85\x25\xb0\x9e\x6d\xc9\x1b\xa5\xe5\x14\x3b\x2b\xc0\xd4\xb5\xf8\x5c\x9b\x8d\xe6\x11\x0d\x8b\x68\x1e\xc2\x31\xef\x16\x0b\x69\x13\x26\x56\xa6\xa9\xb9\x5b\xa9\x05\xad\x3f\xd8\x5a\x80\x75\x12\xd1\x82\x9c\xb9\xa8\x48\x21\xbc\xe1\x4e\x36\xb2\xf2\x7c\xb3\x02\x6d\x5f\x9b\x3b\x32\xb7\x17\x2f\xf8\xaf\x32\x88\x1d\x85\xc1\xd8\x67\x98\x2e\x2a\xef\x5a\x6c\xc1\x5e\xac\x9c\x9b\x4e\xd7\xbc\x73\x00\x87\x16\xf6\xc4\xda\xa1\xe2\xb2\x0b\x51\xad\x00\x2d\x28\x06\x61\xf0\x86\x83\x1d\x22\x5d\x33\xc6\x40\xb3\xe5\xbd\x58\xb7\x8d\x9c\xc2\x18\x60\xe1\x25\x48\xfc\x70\x5b\xa2\x2f\xd1\xb5\x41\x61\x50\xe7\xef\xd8\x69\x25\xe8\x2c\xaa\x83\xe9\x9a\x9a\xb7\x1d\xea\x1a\x5b\x98\xa6\x31\x1b\x20\x31\x18\x5d\xb9\x97\x2a\x56\x96\x25\xfc\x66\xff\x62\xff\x6f\x42\x73\x4d\xde\xf1\xc9\x8d\xae\xcd\x64\x1a\xbb\x7e\x87\xae\x5f\x65\x6d\x26\xec\xdf\xf0\x02\x63\xaf\x5e\xfd\x62\xbc\x7c\xf7\xea\x15\x07\x11\xb9\xad\xf6\xe2\x9e\x97\xdf\x5e\x9a\x5a\x2d\x94\xb4\xe7\xdf\xde\xca\xed\x79\x09\xac\xca\x2f\x9d\xba\x13\x0d\xac\x80\x37\x29\xc8\x21\xc1\xcc\xf8\x8f\x9a\x89\xba\x56\x20\x85\x29\x2a\xd8\xe1\x35\xae\x65\xe6\xf4\x40\xf5\x5d\xd7\xb6\xc6\x82\xc1\xcd\xb7\xdc\x4b\xbb\x56\x5a\x34\x8e\xd4\x09\x60\x50\x63\xc4\x5a\x32\xe1\xa2\x5d\xa0\xbe\xf6\x8c\xf3\xcf\x60\x79\x6b\x29\x74\x70\xdd\x28\xc8\x1f\xca\x69\x90\x28\x3c\x0d\xf2\x5d\x96\xe8\xb5\x01\xbc\x47\x0d\xb6\xab\x97\x33\xfe\xd1\x6c\xe4\x9d\xb4\x53\x70\x02\xfc\x7d\xe3\xc9\xa6\x15\x99\x28\xda\x82\x70\xf2\x1d\x2f\xdf\x37\xfe\x87\x92\x70\xbe\x6f\xfc\xe1\x0f\x25\xa1\xc3\x1f\xc8\xe5\xe1\xb2\x9c\x06\x45\xc4\xce\x65\x62\xea\x16\x64\x17\xf8\x22\x91\xac\x83\xf0\xc0\x67\x68\x1e\xa5\x06\x82\x95\xf0\xa8\x97\xb4\x83\x3c\xa1\x90\x83\xf7\xb0\x9d\x66\xe5\x39\x2a\x1a\xac\x46\x65\xd6\x73\x73\xce\xbf\x25\x95\x3c\x2f\x47\x5e\x1d\xe0\x70\xa7\x0a\xa6\x34\x45\x37\x4d\x1b\xc0\x60\x8d\xb8\xaf\x54\x2b\xa1\x34\x0f\x3b\x8e\xe3\x9b\x95\xd4\x60\x38\x44\x06\x39\xf1\x5e\xd5\xd5\x02\xe9\xd9\x08\xed\x41\x94\x87\x60\xa2\xcc\x89\x3b\xf2\xcd\x5f\x3a\xe5\x7b\x7a\x91\x52\xe5\x61\x8b\x94\xdc\x99\x77\xa9\xfa\x72\xce\xf9\x04\xdf\x07\x6d\xbd\x16\x77\x72\xfa\xb7\x4e\xf9\x5e\x65\xd1\xfe\x88\x72\xf2\x8e\x56\xfa\xce\x6a\x2e\xb8\xeb\xaa\x4a\x3a\xc7\x17\x8d\x58\xce\xf8\xfb\xe0\x27\x70\x3e\x49\x9c\xc8\x1a\x80\x56\xa8\x34\x0c\x97\x17\xf9\x33\x1a\x5c\xaf\xd1\x5e\xe9\x4e\x06\x2e\xfd\x4a\xc2\xae\x02\xfb\x34\xa1\x95\x6e\x0a\x5b\xee\x42\xa8\xa6\xb3\xe1\x87\x54\x00\x36\x43\xff\x52\x4e\x4b\xee\x64\x2b\xac\xf0\xc6\x12\x65\xa2\xd9\x88\xad\x0b\x93\x04\x77\xaa\xe5\x7d\xf4\x61\x33\x34\xba\xf2\x8f\xe4\x3d\x46\xef\xcd\x8d\x0d\xea\x87\xaf\x2a\x72\x98\x81\xe9\xd6\xca\x4a\xa2\x73\x53\x9e\x88\x93\x75\xb0\x1e\xf4\x0f\xff\x51\xe2\xec\xec\x4f\x60\x01\xa6\xdc\x78\x39\x75\xba\xd7\xb2\xa8\x7a\x53\xee\xc5\x7c\xf0\x7d\xc2\xe1\xda\xb1\xc9\x67\x31\x87\xf5\x7a\xdf\x79\x53\x19\xc0\xe0\xe5\x1f\x3f\xea\x5a\x6a\x7f\x8d\x5e\x5a\x19\xfd\xc7\x8f\xda\x49\xeb\x01\x92\x96\x72\x6c\xc6\x81\xc2\x32\x45\x52\x46\x82\x95\x8b\x2b\xb1\xe8\x9a\x69\xc2\xd7\xc0\xec\x8c\x7f\x82\xf5\xd8\x28\x07\xf4\x7b\x5a\x04\x6f\xb7\xbc\x1c\x51\x12\xfc\x03\xce\x27\x02\xfb\xdc\x1b\x03\x6f\xd1\x12\xc8\x7b\x59\x75\x5e\xc2\x9b\x81\xe6\x92\xb6\x96\xef\xc2\xc6\x12\x6d\x62\x64\x30\xa8\xd9\x02\xf7\x07\xb0\xe6\x80\x45\x44\x70\x3e\x58\x13\x38\x01\xc9\x5f\x82\xe9\xb1\x12\xa3\x93\x88\xb2\x3c\x98\xf1\x6b\xf2\x7b\xad\x95\xad\x0c\x0b\x1b\xb7\x34\xdc\x1b\xcb\x00\xfc\xae\xcc\x96\x6d\xbf\x25\xb5\xb0\x32\xf1\x85\x76\x53\x8f\xdc\x3f\x3a\xbf\xb5\xa8\x3e\x5d\xbf\x7a\xf5\x8e\x7f\xb7\x8d\x6b\x3e\xa5\xce\xc1\x45\x43\xec\x01\x0e\x6d\x61\xec\x46\xd8\x1a\xa3\x0d\x79\x27\xb5\x77\x20\x4e\xa6\xb4\xf3\x52\x00\x8f\x20\x32\xde\x69\x55\x01\x8b\xd5\x4a\x58\x51\x79\x69\xc1\x71\x1b\xbe\x50\xf7\xe8\x65\xa7\x80\x0d\x63\xd5\xb8\xc3\xbd\x63\xec\x15\x57\x9f\xa5\x5d\x1f\xbf\x8b\x7b\x7b\x79\xe1\xaa\xbf\x96\x48\x61\xf9\x33\xc4\x2b\x9f\x5a\xd4\x86\x9f\xe4\xb6\x04\x61\x96\x57\x56\x2e\xa4\x95\xba\x92\xee\xf0\xfc\xca\x1a\xd8\x0e\xdd\xe1\xf9\x4f\x10\xe2\xcd\xd8\x2b\xfe\x39\x10\x3f\x13\x6d\xfb\x8e\x5f\x68\x74\x7c\xe5\x8d\x93\x11\x13\x2c\x95\x70\xfc\x52\x7a\x5c\xb6\xa7\xb0\xce\x8d\xb0\x35\xe8\xc2\x2f\x18\x93\x49\x8d\x4e\xad\xb5\xe0\x78\xd0\xf3\xb7\x25\x29\x71\xbb\xa9\xcb\x7e\xad\x51\xa7\xe6\x32\x2a\x04\x84\xaa\xaa\x5a\x51\xb7\x5b\x99\x0d\x43\x7f\xbf\x31\x16\x52\x06\x5e\x2b\x2b\x2b\x6f\xec\x36\x1a\xa1\xd2\x0b\x33\x17\x76\xec\x9d\x49\xd9\x34\x9f\xc0\xae\x01\x8c\x4d\x92\x09\x13\x25\x39\x84\x71\xd0\x94\xb1\xc1\x31\x4a\x37\x36\x46\xff\xc5\x73\xb5\x5e\xcb\x5a\x09\x2f\x9b\x6d\xaf\xb8\x68\x65\x11\x65\xce\x6c\xa2\x92\x53\x3e\xef\x7c\xbf\xfc\xbf\x75\xce\xf3\xb6\x11\x55\xd8\xc9\xbd\x4d\xa2\x97\xc0\xc9\xd8\x0e\x46\xbe\x87\x0d\x71\x10\xed\x36\xc3\x56\x0e\xc1\x07\x45\xf3\xe5\xae\xb2\x13\x50\xa2\xed\xc4\x39\x5a\x57\xaf\xf4\xfb\x16\x2e\x60\x9f\x72\xb4\xc4\x32\xb8\xef\xb6\x95\x44\x6a\x2a\x06\xa0\x1e\x5a\x58\xb1\x18\xe3\xc6\xe5\x45\xae\x6b\x2e\x16\x5e\x5a\x70\x40\x2f\xb5\x09\x42\x74\x2d\xc8\x23\xcd\x9b\x70\x01\x60\xd3\xb1\xa6\x71\x69\xc0\x8c\x48\x62\x4a\x91\x78\x1c\x2b\x36\x5c\xba\x4a\xb4\x90\xd3\x7c\xe9\x50\x39\x19\xfb\x04\x7b\x97\x05\xb9\x63\xe8\xe2\x64\xf0\x96\xb4\x19\xc3\xfe\x85\x09\xa6\x74\x9e\xb2\xc3\x34\x30\x26\x1a\x84\x95\xb0\xfc\x86\x68\x63\x31\x4a\x18\xa2\x34\x04\x05\x0b\x8c\xfb\x3e\xcc\x2a\xfb\xfc\xd0\x8a\xcd\x5c\x54\xb7\x98\xa2\x51\x30\x2d\x7a\x97\x71\x38\x17\x90\x5c\xc2\x2a\x18\x0b\x2e\xdc\xc7\x1c\x2e\x74\xad\x3b\xe7\xd9\x52\xfa\x18\xec\x2b\xef\x50\x47\x20\x25\x03\x3e\xc4\xdc\x74\x98\xd2\x44\x47\xe3\x57\xd6\x74\x4b\x4a\x89\xe3\x2c\xb4\x91\xc6\x5f\xcc\x49\x88\x55\x28\x6d\x08\x6f\xc5\xb4\xd8\xd8\x35\xcc\x32\x16\x23\x37\x0b\x2f\x35\x7f\x39\xef\x3c\x3a\x38\xda\xb8\x0f\x18\xe6\x2d\x83\xcf\x7d\x7d\x7f\x34\x2f\x67\x7c\x14\xe2\xab\x45\xc8\xda\x61\x15\x1c\x2f\xff\x79\x7f\x34\xff\x9f\xa3\xff\x3c\xfb\xbe\x9c\x82\x50\xd7\xc6\xf9\xc4\x85\xe2\x2a\xa1\xbe\xc4\x80\x94\x41\xfe\x4b\x8a\x28\x6b\x8c\x74\xc1\xd1\x85\x44\x62\x2d\xf4\x16\xd9\xaf\x56\xc6\x22\x57\xc0\xfd\x34\x63\x3f\xd8\x2f\xb0\xcd\x01\x3c\x70\x87\xce\x37\x28\x27\x0b\x83\xd9\x98\x68\x80\x62\x74\x32\x9d\xcb\x4d\x90\x1c\x2e\xd0\xf2\x1d\x2c\x2d\x28\x6f\x39\xe5\xeb\x2d\xeb\xe7\x24\x21\x97\xff\xec\x5e\xbf\x7e\xbb\x28\x7b\x4d\xc7\x8c\x58\x3a\xa4\x07\x93\xbe\x44\x72\x07\xd3\xe0\xf6\x94\x47\xff\x15\x16\x0a\xa7\x1a\xa6\x41\xb9\x80\xcc\x49\xa8\x95\x00\x5c\x83\x0f\x18\x00\x67\x8c\xf5\xe1\xbb\x33\x6b\x99\xef\x53\x02\x36\x15\xb4\x81\x98\x82\x91\xc6\x1b\x92\x93\x6b\x65\xa5\x16\xaa\x0a\x02\x61\x83\x2a\xc0\x2b\xb5\x5c\x28\x2d\x51\xad\x34\x5f\x58\xb3\x0e\xc4\xc4\xf8\x95\x1c\x74\xb3\x25\xc4\x7e\x65\x40\xd3\xc6\x88\x20\x2d\xa4\x18\x74\xe4\xdd\xb2\x9c\x30\x61\x3c\x62\x07\x47\x6a\xbb\xca\xd3\xa6\xd0\x4b\x3c\x92\x8e\x0a\x06\x69\x37\x58\x5d\x19\xe3\xbe\x21\xa8\x86\xfd\x2b\x4f\x14\x76\x1d\x25\x2c\xdb\x80\x04\x1c\xe6\xf7\x12\xa2\xad\xbf\x1b\x5b\x83\xf6\xf5\xce\xf2\x63\x1f\x05\x83\x84\x23\x65\x18\x58\xc3\xba\x01\x41\xb9\x6f\x42\x5b\xab\xd5\x02\xb7\xcf\x44\xf1\xc1\x95\xbd\x08\xbb\x3b\x66\x3d\xf4\x38\xe4\x30\x18\x0d\x60\xb1\x85\x3f\xbe\xab\x13\xb7\x55\xa3\xaa\x5b\x34\x9f\xf2\xaf\x25\x44\xab\x90\x30\xa3\xc0\x86\x42\x15\x45\x79\x8b\x50\x84\x28\x29\x23\x28\xfb\xd0\xe2\x1a\xa4\x79\x41\x06\x71\x1d\x96\xad\x9c\xa1\xd9\x61\xa0\x3c\x37\x77\xb2\x37\x88\xb0\x41\xc3\x96\xe4\xb7\xad\xe4\xe5\xb0\x02\x4a\x87\xd8\x7e\x6e\xee\xf9\x4b\x9c\xea\x9f\xa8\xef\x5c\x39\x26\x3a\x6f\xc0\x97\x55\x58\xe1\x73\x20\x93\xf9\x36\x30\x3f\x23\xa1\xfc\xac\x74\x77\x1f\x5c\x67\x63\x44\x4d\x35\x8b\x7f\xec\xca\xa5\x49\x00\xb1\x0a\x13\x80\x79\x6b\xcd\xd2\x8a\xf5\x8c\xb1\x0f\x66\x0d\xa3\xce\x18\xfd\xff\x71\xf7\xb8\xd1\x79\x29\xe4\x47\x0f\x6e\x18\xc3\x87\xd6\x38\xa7\x42\xc5\xb2\x56\x8e\x52\x42\xbd\xdd\x53\xf8\x1b\x72\xf8\xf9\x16\x6b\x4d\x01\x84\x95\xbf\x18\x9d\x84\xe8\xe4\x65\xc1\x9f\xfd\xc5\x3d\x54\xa8\x08\x3b\x5a\x9a\x80\xe2\x32\xf5\x59\xe9\x50\xb2\xd9\x53\x8f\xeb\x09\x81\x9d\x53\x28\xed\xc8\xbf\x06\x7a\x7a\x8e\x52\xc4\x88\x8f\x1c\xcf\x76\x28\x97\x61\xcc\x12\x9c\x7d\x2c\x33\xad\x67\x1c\xf5\x1d\x04\x84\x95\xdd\x21\x65\x36\x7e\x05\x1e\x39\xed\x1b\x4f\x46\x56\xc6\x3e\xe0\x2e\x7e\xd3\x86\x87\xef\xcd\x46\x87\xc7\x2b\xb1\x94\x7d\x3f\xfc\x48\xc6\xc0\xe8\xc2\xe3\xaf\x58\x8d\xa3\xe7\x6b\xf0\xa1\xe1\xf9\x42\xd7\x8c\x32\x98\xcf\x86\xfa\xe3\xaf\x61\xe4\xa6\x0d\x0f\x88\x9a\x1e\x11\x35\x3d\x12\xea\x0c\xc9\xa7\xc5\x67\x79\xbf\xb7\xef\xb3\x59\x2e\x1b\xc9\xc0\x25\xd0\x7b\xd1\x39\x04\xe0\x61\x60\xf8\x8d\xc3\x97\xe6\x4e\xfe\xac\xb4\x74\x37\xed\xf0\x8c\x04\x0d\x4e\x86\x5e\xcc\x9d\x4e\xa4\x57\x69\x39\xa6\x27\xeb\xbb\xd0\x75\xe8\xa1\xe4\xec\x17\xb9\x69\x86\x5f\xd7\xe0\x4c\x59\xef\x56\xc3\x1c\xec\x83\x84\x30\x88\xf5\xe9\x1c\xbb\x16\x77\x12\xff\xbd\x6f\x1a\x6a\x1d\x2b\x94\xae\xf1\xdf\xcf\xca\x4b\x2b\x1a\x7c\xfe\x05\xe4\x03\x0f\x57\x56\xde\x29\xd3\x39\x76\xa3\x6b\xc3\x7e\x95\xb5\x61\x1f\x4c\xbb\xc5\x7f\x48\xce\x87\x0e\xd6\x8a\x18\xf8\xbe\x6b\x1b\x55\x09\x2f\xe9\x17\x12\x11\x68\xce\x52\x51\xf6\xa9\xf3\x7b\x3b\x12\x60\x7c\xbc\x12\xce\x47\x19\x00\xc9\x9f\x5a\xa9\x0b\xd5\x48\x46\xba\x00\x3a\x10\x14\xac\x57\x2d\x02\x0e\xbd\xc3\x0f\x1c\xfb\x28\x9a\x45\x18\x89\x8f\xf4\x4e\x22\xf0\x41\xd0\x99\xaa\xec\xa8\xc8\x95\xb0\x62\x69\x45\xbb\xea\x25\xd4\xf7\xa0\xf0\x08\xec\xa3\x6c\xda\xf0\xf8\xbd\x5a\x2c\x7e\xe8\x3c\x2c\x08\x75\xfc\xda\x35\xd2\xb2\xff\xea\xd6\x2d\x09\xb2\x91\x02\x74\xdf\x77\x8e\x5d\xaf\x64\xd3\x5c\x9a\x5a\x82\x6f\x83\x08\x1c\x9f\xff\xd6\x29\x8f\xff\x40\x14\xef\xeb\x1a\x56\x34\xce\x0e\xcf\x30\x6f\x6c\xaf\xdb\x46\x79\x76\xa3\x1d\xb6\xff\x4d\x3f\x3f\x52\x13\xdf\xa1\x5f\x44\xcc\xa5\xa8\xac\x61\x57\x8d\xd8\xd2\xd3\x75\xe7\x30\x09\x7f\x79\xa3\xd5\x3d\x16\x8b\x0e\xd8\x75\x65\x4d\xd3\x80\x58\xf1\x81\x44\xd7\x8a\x8d\xbe\xec\x1a\xaf\xc8\x60\x77\x3a\x00\x7c\xd4\xb5\xf7\x45\x5a\x2a\xf6\xab\x5c\x9b\x3b\x99\x22\xa4\x9e\xf7\x4d\x93\x74\x3a\x76\x7d\xab\xda\x14\x0a\x7c\x32\xca\xf2\xb3\xb9\x14\xbe\x5a\x29\xbd\xfc\xce\x82\x29\xa4\x75\x95\x58\x81\x91\xbc\xdc\x59\xd0\x50\xe9\x7c\xd0\x27\x94\x49\x11\x1e\x7e\xf3\xb9\xf4\x1b\x29\x35\xfb\xad\x5b\xb7\xb8\x39\xa5\x47\x07\xc1\x37\x7b\x79\xef\xf9\xcb\x85\xb2\xce\x1f\x20\xfe\x6c\x14\x0c\x78\x6f\x7a\x8b\x71\xc7\xda\xe0\xf9\x5b\x98\xf4\x65\x38\x11\x80\x3c\x73\x2e\x87\x22\x3c\x41\xcd\x3b\xef\x8d\x76\x07\xe4\x8d\x2f\xa1\xef\x0a\x62\x6b\x7a\x4c\xe5\x34\x04\x38\xca\x05\x22\xc8\xb3\xc3\x8e\xd0\x7b\x77\xdc\x60\xd3\xc2\x65\xf0\xf3\x37\x2d\xc3\xc5\x23\x4f\x86\xfe\xeb\xa6\x0d\x4d\xf0\x6e\x66\xa3\xb1\x03\x1e\x82\x57\x27\x2f\x34\x36\xd4\x8f\x66\x8d\xd6\x16\xdc\x53\xf4\x59\x68\x31\x17\xf7\xca\x93\x41\xb0\x0f\x42\x57\xb2\x61\x57\x56\x69\xcf\xae\x44\xe7\xc8\xcf\x79\x31\x67\xc5\x11\x2b\x8e\x59\x71\xc2\x8a\x53\x56\x9c\xb1\xe2\x0d\x2b\xde\xb2\xe2\x6b\x56\x7c\xc3\x8a\xa3\xd7\xac\x38\x3a\x62\xc5\xd1\x31\x2b\x8e\x4e\x58\x71\x74\xca\x8a\xa3\x33\x56\x1c\xbd\x61\xc5\xd1\x5b\x56\x1c\x7d\xcd\x8a\xa3\x6f\x58\x71\xfc\x9a\x15\xc7\x80\xe7\x98\x15\xc7\x27\xac\x38\x3e\x65\xc5\xf1\x19\x2b\x8e\xdf\xb0\xe2\xf8\x2d\x2b\x8e\xbf\x66\xc5\xf1\x37\xac\x38\x79\xcd\x8a\x93\x23\x56\x9c\xc0\x84\x27\xac\x38\x39\x65\xc5\xc9\x19\x2b\x4e\xde\xb0\xe2\xe4\x2d\x2b\x4e\xbe\x66\xc5\xc9\x37\xac\x38\x7d\xcd\x8a\xd3\x23\x56\x9c\x1e\xb3\xe2\x14\x28\x3b\x65\xc5\xe9\x19\x2b\x4e\xdf\xb0\xe2\xf4\x2d\x2b\x4e\xbf\x66\xc5\xe9\x37\xac\x38\x7b\xcd\x8a\xb3\x23\x56\x9c\x1d\xb3\xe2\xec\x84\x15\x67\xc0\xc2\x19\x2b\xce\xde\xb0\xe2\xec\x2d\x2b\xce\xbe\x66\xc5\xd9\x37\xac\x78\xf3\x9a\x15\x6f\x8e\x58\xf1\xe6\x98\x15\x6f\x4e\x58\xf1\xe6\x94\x41\x04\x4d\x0e\x1f\x33\x78\x41\xcd\x9c\x9a\x8a\x9a\x9a\x9a\x00\xb2\xa0\x66\x49\xcd\x8a\x1a\x45\xcd\x6f\xd4\xdc\x52\xd3\x50\xb3\xa6\x46\x53\x63\xa8\x69\xa9\xf9\x42\x8d\xa5\xc6\x51\xe3\xa9\xe9\xa8\xb9\xa3\x66\x43\xcd\x3d\x35\x5b\x6a\x7e\x67\x31\xdb\xbb\x26\x4c\xb8\x6b\x35\xc2\x11\x59\xa8\x32\x61\xe4\x83\xb0\x82\x10\xdf\xe8\x5a\x5a\x57\x19\x9b\x6e\x72\x9f\x9a\x7a\xf8\x01\x7e\xef\xc2\x55\x8c\x42\x5b\x76\x81\x2a\x87\xca\xfe\xa8\x79\x05\xc3\x41\xf3\xda\xc6\x53\xb2\xde\xb8\x34\xa4\xe4\x4d\x6f\x83\xc6\xb2\xcc\x28\x53\x73\x0b\x41\x00\x58\x9b\xaa\xeb\x46\xd2\x33\x19\x00\x3e\xfe\x7d\x25\x65\x83\xc1\x41\xfc\x81\x56\x30\xfc\x1c\x30\xe0\x4f\x7a\x15\x39\x78\x81\x27\xfb\x69\x01\x24\xfb\x19\xab\xfd\x44\xf6\x7c\x1b\xf2\xbc\x2d\x38\xa5\x3b\xd1\xa8\x90\x05\x1a\x2d\x43\x91\x46\x68\xe3\x57\x12\x8b\x3c\x73\x2b\xaa\x5b\xe9\xdd\x14\xcf\x08\x98\x70\xbc\xfc\x96\x16\xed\x9c\xda\xea\x1c\x6b\xc0\xfc\xfb\x9d\x70\x94\xd3\x29\x4d\x67\x45\x38\x03\x7c\x1f\x93\x8c\x85\xdc\xec\x1c\xfc\x0f\xd9\x91\xd1\xfc\x12\x4b\xac\xe0\x95\x85\x95\x28\x69\x24\x88\x99\x56\x02\x36\x88\xe5\xb7\xce\xcb\x75\x3c\xf5\x52\x8e\xcf\x65\x05\xb6\x9f\xe0\xf9\x74\x2d\x1d\x5f\x89\xbb\xa4\x8f\x55\x46\xdf\x49\x3d\xa4\x6a\xe8\x7f\xe3\xf1\x52\x88\xa8\xdd\x6c\x27\x33\xbc\x69\x27\xef\x78\xfa\x37\x89\x7b\xd7\x64\x4a\x10\xb0\x56\x19\xcc\x64\xd8\xca\x22\x0c\xae\x58\x0a\x34\x49\x62\xdb\x08\x84\x89\xe6\x1e\x44\xd8\x1f\x60\xf0\xbc\x2c\xa5\x69\x12\x03\xdd\x0c\x22\xa5\x69\x32\x44\xc0\x19\x4c\x3a\xdd\x64\x08\x8d\x33\x98\x94\xee\x49\x12\x33\x47\xa0\xf7\x8d\xcf\xa9\x9e\xf4\x19\xf3\x94\xbf\xbc\x14\xd5\x41\x0f\x97\x8b\x60\xd2\x07\xbd\x3b\x80\xb9\xc4\x27\x49\xf4\x9c\xcc\x9a\x0b\x7d\x92\x85\xd5\x11\x0c\x9d\x61\xca\xc5\x64\x14\xa8\xef\x00\x46\x5e\x26\x79\x04\xff\x30\xb7\x3b\xa1\x40\x02\x3a\x62\xb8\x0f\x1e\x13\x90\x5c\xc6\xbb\xe4\x8d\x24\x93\x2f\xdb\x0e\x91\x29\x74\x74\xa4\xc3\xfc\x09\xa9\xbb\xa0\x19\xad\x29\xa9\xcf\xa1\x60\x4f\x44\xf4\x94\x64\xf7\xbe\x92\xce\x85\x2f\x41\x18\x30\xd2\xd0\x47\xe6\x7a\x48\x9e\x49\x82\xf4\x94\x66\x64\xa0\x3b\xe4\x5c\xe8\x3a\x11\xe7\x63\xb8\x33\x15\x9e\x24\xa9\x6b\x0a\x94\xa9\xf0\xa4\xcf\x69\x77\x68\x8c\xc8\x72\x09\xec\x80\x45\x74\x29\x65\x89\x68\x0e\xff\x95\x59\xd5\x4e\x8a\x92\x82\xfe\x7b\x3f\xe8\x2f\xa8\x3a\x2c\xa8\x88\x97\x36\x03\xcb\x72\xcf\x94\xba\xc3\x55\x06\xd7\xef\xcb\x11\x66\xe8\x78\xf7\x10\x08\x10\x05\xa8\x3e\xf6\x20\xa3\xf2\x5c\x02\x97\xa1\x7b\x00\x8e\x0e\x67\x93\xbf\xe7\x9e\xd3\x26\x24\xfb\x14\xc7\x64\x9c\xb5\xfe\x91\x64\xad\x99\x30\x4c\x26\x8c\x98\xb4\x66\x20\x2e\x03\x81\x54\x3c\x1b\x5e\x64\xc3\x90\x88\x67\xc3\x7a\x67\x38\x5d\x37\x8a\xd6\x76\x40\xc6\x5a\xd0\x5f\x8f\x19\xc0\xc2\xd5\x99\x61\x78\x9b\x0d\xe3\x35\x9a\x74\xb8\xca\xb7\xbb\x50\x13\xf8\x03\x1e\x32\xb8\xfb\xd1\xb6\x98\x93\x7a\x3b\x1e\xdd\x11\x68\x9d\x41\x64\x65\x86\x0c\xee\x6e\xa4\xd4\xce\xe7\xe3\x22\x97\x7a\xac\x2b\x64\x30\xf9\x16\x4e\x69\x76\xaa\x7b\xd3\x7c\xfb\x4e\x12\xf0\x14\x6a\x96\x43\x85\xd4\x3c\x42\xa4\x4e\x2f\xd0\x92\x7a\xee\x68\x7e\xf5\x48\x81\xf7\xfa\xa1\x0c\xd7\x43\x7e\x28\xc3\xb5\xeb\x87\x28\x37\xdb\xf5\x67\xa1\x3f\x81\xda\xe7\xd0\xfa\xfe\x64\xc2\x0c\xe3\x3e\x21\x45\xa0\x1e\xe1\x58\x46\xfd\xb9\xe6\x40\xd4\x50\x53\x49\x45\xbd\x0f\xe6\x27\xb9\xbd\x94\xba\xcb\x70\xd9\x3d\x70\x58\x83\xc9\xa0\x9a\x0c\x2a\x3b\x52\x5d\x1a\x6f\x78\x1f\x11\xa2\xd3\x49\x45\x16\x7a\x52\x64\xf3\x5c\xdf\x62\x55\x27\x83\xf9\x92\xc1\xe0\xb5\x9f\x74\x58\x8e\x4c\xac\x2f\x07\x65\x50\x9b\x0c\xaa\x2f\x00\x65\x30\xdd\x1e\xfe\xb1\xd8\x93\x41\xfd\x96\x9b\x50\x2c\x08\x45\x18\x72\x93\x29\xdb\x84\xe8\xd3\x9d\xb4\x1b\xab\xbc\x0c\xa4\x21\xf4\x57\x5f\xf1\x8b\xb5\xa8\xdc\xa1\xf3\x5b\xaa\x2a\xf4\xd7\x93\xfb\xd5\x03\x4f\x37\xd9\x89\xd6\x60\x64\x1e\x47\xc6\xde\x5f\xe0\x66\x3e\xd4\xec\xd2\x31\x10\x57\x66\x27\x91\x90\x1f\xb5\x97\x4b\xca\x55\xe8\x7c\x0e\xaf\x0b\xaf\x85\x16\x4b\x69\x03\x3d\xc5\x31\x6d\xae\x89\x37\x2e\x4e\xb0\x2b\xf5\xc0\xc5\x29\x76\xa5\x2b\x55\xbc\xdd\x85\x3a\x7a\x0d\xa4\xa4\x50\x17\xae\x42\xea\x30\x45\x4d\x48\xbb\xa4\x54\x34\x13\x4d\x9a\x33\x86\x38\x2c\x54\xdf\x22\xb6\x3c\x91\x44\x91\xf4\x65\xb9\x0c\x26\xcb\x01\x86\xda\x50\x06\x43\x49\x6b\x88\x41\xd0\x6f\x5e\x59\xb5\x16\x36\x77\xe3\x29\xba\xc9\xb8\xb4\x14\x19\xc2\x65\x48\xe3\xf6\x71\xa5\x6f\x1c\xcb\xf5\x0c\xee\x54\x0e\xc7\x90\x3d\xa3\x7b\x0a\x8a\xa9\x12\xac\x1f\x99\x9d\x9c\x7e\x0a\x9d\x26\x5a\x3b\xe5\xc7\x14\xb0\xda\x01\x1c\x55\x25\x53\xe0\xfb\x94\x86\xbc\x58\x39\x99\xc6\x93\xc6\x17\x2f\xf8\x95\xd0\x92\x4e\xd7\x86\xab\xfb\x3f\xa5\x67\x3e\x94\xdc\x87\xb3\x5b\x49\x47\x7b\x43\x16\xdc\xc6\xd7\x1d\x17\x8e\x6f\x64\xd3\xec\x1c\xbc\x32\xbc\xe4\x2f\xfa\x5b\x10\x78\x1d\x01\xaf\xff\x89\xc5\x42\x56\xde\x8d\xaf\x7a\x4c\xfb\xab\xd5\xf1\x32\x4d\xc9\x5d\x37\x5f\x5a\xd3\xb5\xa1\x10\x18\x12\xe7\x30\x3c\x79\xc7\xa9\x23\x77\x48\x83\xf1\xe2\xe0\xbf\x23\xd7\x9f\xd3\x53\xab\x94\x01\x2b\x79\x49\x37\xa4\xf1\x70\x1d\x8b\x2f\xf4\xfb\x60\x9a\xd0\xf2\x32\xa1\xf5\x60\xca\xb0\x6e\x1b\xcf\x5c\x4b\xfe\xb2\x3f\x3c\x06\xd4\x07\x74\x4f\x22\xe6\xfe\xfd\xc1\x68\x44\x81\x27\xc9\xe9\x0b\x8e\x01\x19\x4b\x75\x27\x35\x5d\x0f\xcd\x39\x8e\xb0\x39\xcb\x54\x2b\xf9\x72\x1e\x5b\x34\xf3\xfb\xde\xf2\x13\x18\x79\x1e\x5b\x80\xd9\x75\xe7\x09\xe8\xe6\x3c\xb6\x00\x3a\xf8\x74\x12\x66\xb4\xb6\xbd\x4b\xb0\x5b\xd0\xf8\xa8\x9c\x37\x76\xdb\xdb\x14\x76\xee\x56\x35\x02\x58\x62\x50\xa4\xed\xcf\x28\x6d\x60\xf7\x33\xca\x1b\x64\x11\x4f\x95\x38\x06\xa8\xc7\xcb\x1c\x03\xdc\xe3\xa5\x8e\x01\xee\x89\x72\x47\x34\xe0\x67\x16\x01\x22\xf8\x13\x85\x80\x08\x36\xaa\x7b\xec\x46\x6b\x11\x70\x54\xfb\x18\x47\x6c\x9c\x3f\xaf\xb8\xb0\x0b\xfc\x70\x69\x21\xb7\xe0\xbc\xb0\xf0\x10\x54\x5e\x53\xd8\x3b\xf1\x9f\x2a\x0f\x8c\xd6\xea\x4f\x15\x07\xf2\xd9\x1e\xcb\xfa\x47\xb3\x3c\x2b\xe7\xef\xb1\x3f\x95\xf7\xf7\x80\x8f\xe7\xfe\x39\xb5\x8f\xe6\xff\x39\xe8\x23\x35\x80\xa0\x7a\xe3\xac\xfd\x82\x2e\x36\x06\x67\x33\x46\xfa\xf1\xd1\xcc\x7d\xd4\xf9\x50\xf6\x8e\x9d\x69\x41\x9e\x54\x6c\x2f\xd8\x33\x13\xfd\x1e\xf6\x19\xc9\x3e\xc2\xee\x26\xfc\x81\xe3\x0f\x21\xe7\x1f\xb3\x94\x67\xf7\x1f\xb6\x55\x23\xd3\x12\x01\x80\x8c\x85\x95\xe5\xcb\x69\xba\x3c\x40\xa4\x29\x73\x9a\x31\x0f\x10\x55\xa6\x40\x7b\x92\xe6\x01\xf4\x3e\xd7\xb5\x1d\x8d\xc8\x72\xe7\x51\xea\x3c\x00\xa5\x69\x71\x96\x15\x63\xc7\xa3\xc9\xe8\xae\x85\x3d\x9d\x96\xf6\x13\x3f\x95\x9a\xf6\x80\x8f\xa7\xa7\x9c\x3f\x9d\x6f\x0d\xcc\xa6\xf9\xd4\xe4\xfd\xdc\x58\xff\x80\xe2\x67\xa9\xd5\xc3\x4c\x64\x45\x83\x3d\x69\x07\xe7\xfb\x92\xb0\x47\xf4\xf4\xb9\x29\x54\x8e\x3c\xd5\xed\x07\xdd\x71\x56\x37\x7a\xd8\x1d\x67\xf5\x94\x47\x28\xa5\xb3\xc0\x4c\x4a\x8f\xba\x92\xac\x2e\xf5\x50\x2c\xb1\x53\x9d\xda\x1f\x9b\xec\xa4\xac\x3b\xae\xb1\x87\x7d\x22\xcd\xe4\xfc\xb1\x54\xb3\x1f\xdd\x97\x6e\xf6\x83\x69\xca\x99\xd4\x68\xfa\xf1\xfd\x69\x27\x7f\x76\xea\x89\x88\x42\xca\xf8\x90\xce\x86\xf4\x71\x34\x9c\x4e\xb4\x27\x91\xc4\x37\x77\x93\xc9\xbd\x22\xdf\xcd\x28\x1f\x58\xc2\x67\xa4\x95\x43\xef\xc3\xa9\x65\x9e\x15\xbc\x78\xc1\x0b\x8c\xc2\xb5\xf1\xd2\x31\x86\x1f\xe9\xf1\x4f\x9a\x8e\x6b\x4d\x93\xc4\xe9\x72\xdd\x35\xc2\x1b\x4b\x77\xdd\x8c\xe6\x7f\x57\xba\x36\x1b\xc7\xd7\xa2\x5a\x29\x2d\x5d\xfc\x28\x6e\x55\x72\xb7\xc2\xfb\x8b\x73\xbc\x72\x4c\xd9\xd3\x3c\x6e\x28\x33\xc6\xde\x87\xef\xd0\x44\xd3\x6c\xa7\xc3\xa7\xa4\xe3\x23\x55\xba\x7f\x88\xdf\x3a\xdc\xca\x6d\xfe\xfd\x09\x75\x8b\x92\x1b\xcb\xf0\xf1\xa6\x2d\x67\x9c\x3e\x65\x0d\x17\xca\x81\x50\x6e\x5a\x9a\x88\x97\x87\x65\xbc\x3d\xd2\x7f\x15\xe7\xe8\xbb\x30\x78\x9f\x6e\xa2\x30\xe4\xa0\xe4\xce\xf4\xf8\xab\xc0\x09\xb7\x12\xfc\x84\x97\x1a\x72\x3e\x18\x15\x90\x14\x09\x07\x4a\xe5\x3d\x20\x03\x36\x81\x99\xa8\x0b\x07\x33\x16\x4f\x52\x37\xab\xed\xe8\x3b\xa7\xec\xb0\xb6\xff\x38\x57\x12\x35\x7d\xe8\x56\xf2\xf8\xb1\x83\x59\xb0\xe1\x23\x40\x1a\xa2\xf3\x73\xc8\x9c\x86\x6f\x26\x0f\x66\x8c\x5d\xd1\xf7\xc8\xe1\xa2\xb4\xf0\x7b\xd7\x10\xbf\x0b\xb7\x42\x2f\x25\x17\x2d\x95\x76\xfb\x8b\x8c\x74\x07\x19\xb2\x55\x66\x65\x25\xd5\x9d\x74\xf9\xcd\xf8\x70\xb5\xbe\xc7\x5b\xcb\x4a\xd5\xb2\xbf\xf4\x3c\xe3\xd7\xe9\x35\xe9\x61\x5a\xb6\x16\x5b\xfa\x32\x53\xea\x9a\x57\xd2\x7a\xa1\x74\x44\x0b\x0d\x7d\x29\x95\x7c\xed\xcc\x9d\xd8\xba\xe1\x86\x36\x0f\xf4\xe0\x7d\x5c\x7c\x0f\x3f\xf5\x01\xb9\xc9\x7b\x81\x37\xa5\xf1\xf3\xe5\x78\x4f\x3e\x10\x8f\x37\xab\xf3\x9b\xec\xf9\x77\x19\x82\xdd\xca\xed\x94\xdb\x4e\xc7\x4f\xe0\xad\xd8\xf4\x5f\xd5\xcc\xd8\xff\x05\x00\x00\xff\xff\x79\x99\x1f\xbb\xe7\x3f\x00\x00" func runtimeHelpKeybindingsMdBytes() ([]byte, error) { return bindataRead( _runtimeHelpKeybindingsMd, "runtime/help/keybindings.md", ) } func runtimeHelpKeybindingsMd() (*asset, error) { bytes, err := runtimeHelpKeybindingsMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/help/keybindings.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeHelpOptionsMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x7c\x6d\x8f\xe4\xb6\xf1\xe7\xeb\xd5\xa7\x28\x4c\x16\xd8\x99\xfd\xf7\xf4\x6c\x1c\xfb\x10\xf4\x8b\x03\xfc\x94\xb5\x61\x3b\x1b\xd8\x6b\xf8\x82\x24\x88\xd8\x52\x75\x37\x33\x12\xa9\x90\x54\xf7\xb4\xe3\xdc\x67\x3f\x54\x15\x49\x51\x9a\x9e\x1d\x5f\x10\xbf\xf0\xec\x48\x64\xb1\x58\x2c\xd6\xc3\xaf\x4a\xf3\x1b\x78\x37\x04\x6d\x8d\xaf\xaa\xef\x74\xe3\x2c\xf8\x60\x1d\x7a\x50\x5d\x07\x76\x07\xe1\x80\x30\x7a\x74\xd0\x58\xb3\xd3\xfb\xd1\x29\x1a\x0c\xda\x80\x0e\x7e\xf1\xb0\xd5\x0e\x9b\x60\xdd\x79\x9d\x68\x8d\x1e\x3d\xd4\x2f\xbf\xfb\xfa\xf3\xef\xdf\xfd\xfd\xf3\x77\x7f\xfc\xc3\xd7\x6f\xff\xfe\xd5\xbb\xef\xbe\xac\x41\x79\x26\xfd\x14\x01\xf8\x9a\x96\xd6\xbe\x42\x73\xd4\xce\x9a\x1e\x4d\x80\xa3\x72\x5a\x6d\x3b\x04\xed\xc1\xd8\x00\x1e\xc3\x0a\x74\x48\xab\xfc\x9f\x2f\xde\x96\x6b\xdc\xf5\xc4\x42\x0d\xda\xf8\x80\xaa\x25\x92\x55\x38\xa8\x00\xbf\x9e\xe4\xff\xbd\x5b\x0b\x83\x89\x96\x70\x5d\x3d\xcd\xb5\xe1\x5d\xb5\xb6\x19\x89\x3c\xbf\x5f\xc1\x89\x45\x78\x81\x5c\xb0\x95\xc3\x1d\x3a\x08\xf6\x43\xd2\x80\x6b\x3c\xa2\x01\xbd\x23\xce\x7a\x75\x26\xe9\xef\x54\x13\x60\x8b\xe0\x6d\x8f\xa7\x03\x3a\x04\xec\x3c\x56\x7a\x07\x67\x3b\xc2\x41\x1d\x91\xf6\x02\xa8\xc3\x01\x5d\x3a\x48\xb5\xb5\x47\xbc\xb8\x7f\x7f\xb3\xae\xaa\xaf\x88\x8c\x72\x28\x63\x8f\x4a\x77\x2c\x1a\x2b\xfa\xb1\xa9\xaa\xd7\x50\xab\x31\x58\x6d\x5a\x34\xa1\xde\xc0\xe9\x80\x06\x1a\x87\x2a\x68\xb3\x07\x05\x06\x4f\xd0\x69\x83\x2b\xde\x2f\x51\xf1\xaa\x47\x90\xf1\xb2\xa9\x78\xee\x15\x00\x0c\x0e\x8f\xda\x8e\x9e\xa7\xac\xab\xea\x45\x8b\x3b\x35\x76\xc4\x54\x37\xe2\x06\xea\xe0\x46\xac\xf3\xaa\x5e\x1d\xb1\xde\x00\xfd\xb3\x57\x41\x37\xaa\xeb\xce\x40\x0f\x99\xe0\x76\xdc\x91\x20\xf1\x88\xee\x0c\x06\x3c\x36\xd6\xb4\x7e\x05\x22\x1b\x43\xe7\x4b\x27\x07\x20\xd4\xb3\x44\x22\xe1\xb8\xc9\x35\x7c\xda\x79\x2b\xfb\xfa\xe7\xa8\x03\xef\x8b\xb8\x86\xde\xb6\x7a\xa7\xb1\x8d\x0b\xad\x80\x8f\x90\xe8\x9d\x74\xd7\x5d\xe2\x4a\x99\x96\x69\xac\xe1\x33\x84\x93\x72\x06\xdb\x15\xeb\x74\x5c\x8b\x47\xf9\x82\x79\x21\x16\x0e\x76\x0c\x30\x38\xdb\x0f\xbc\x7a\xba\x80\x2b\xf0\x16\x5a\x15\x14\x6b\xc0\x16\xc1\x1e\xd1\x9d\x9c\x0e\x01\x4d\xbe\x2e\x89\xb4\xf6\x44\x8c\x14\x20\x58\xa8\xdf\xd4\x2b\x30\x36\xed\x95\x88\x6a\x0f\x03\xba\x9d\x75\x3d\xb6\xeb\x8a\xc6\xc2\x52\xf8\x6f\x0a\xc9\x8f\xf5\x06\x7e\x22\x99\x28\xd8\x69\xb9\x2c\xc4\x7c\x0b\x7c\x9f\xb2\x89\x68\x2d\x7a\xf3\x2a\x88\xf6\x0d\xe8\x7a\xed\x3d\x71\x13\x58\x4e\x2c\xc1\x73\x14\x5c\x94\x9a\xbf\x27\xad\xce\x04\x4e\x76\xec\x5a\xe8\xf4\x3d\x12\xdf\xa4\x43\x7e\x1c\xd0\xf1\x4b\xd1\x18\x7d\xd4\x1d\xee\x49\x6c\x76\x3a\x7b\xe2\xe9\x82\x08\x00\x0d\xe9\x6f\x5b\x2e\x49\x54\xe6\x67\xa5\x42\xc0\x7e\x08\x8f\x17\xbc\xb4\x5a\x3c\x1e\xa6\xe2\xef\xcb\xe3\x79\x42\x8a\x3b\xd5\xf9\xa8\xc3\x5b\xd5\xdc\x8f\x43\xbd\x99\x09\x60\xc6\xca\x3d\xe2\x00\x32\xcc\x93\x82\xb2\x09\x1e\xd0\x44\xfd\xf0\x6b\xf8\x4c\x5e\xf2\xfa\x0e\xc5\x54\xb7\x64\x0e\x96\xb6\xe5\x2e\x92\xa9\x59\x0d\x69\xac\xc3\xde\xd2\x91\xb1\x6e\x17\x37\x46\x54\xa5\xe9\xac\xc7\x16\x9a\x0e\x95\xe9\x26\x43\xd6\x28\xcf\x57\x45\x81\x3f\xfb\x80\x3d\x34\x4e\xf9\x03\x58\x47\x37\x82\xb7\xc1\x0f\x56\xc9\x7a\x05\x34\x81\xe9\xc5\xeb\x15\xd7\x68\x94\x21\x8d\x75\xd8\x90\xd2\x62\xbb\xd8\xf7\xf6\xcc\xdb\x4c\xe2\x64\x15\x63\xcd\x3a\x29\x26\xb6\x45\x7a\x85\xad\x0e\x74\xff\x70\x67\xa3\x89\x8a\x6b\x5b\x07\xbd\x32\x63\x22\xe5\x51\xb9\xe6\x40\x33\x76\xd6\x09\x17\x2c\x0b\xd0\x86\x88\x15\x0f\x0a\xc3\x1d\x05\xcb\x92\xea\x55\x4b\x36\x2b\x8f\xdc\x3b\x3b\x9a\x96\xa9\x19\x3c\x75\xe7\x6c\x0b\x98\x37\x39\x9a\x68\x78\x7e\x3f\x19\x1e\xeb\x44\xd4\x22\xa6\x16\x03\x36\xc1\x83\x12\xa6\x9f\xd0\x96\xc9\xe0\x09\x87\xad\x76\xf5\x46\x3c\x4a\xf6\x05\x42\xcf\x1f\xf8\xaa\x0c\x9d\x6a\x30\xab\x8c\x36\x6b\xf8\x43\xdc\x73\x24\x3d\x33\x78\xf5\xd5\x55\x0d\xd7\xa4\xed\x67\xf0\xc1\x69\xb3\xbf\x59\x5d\x94\x87\x28\xe7\x96\xcd\x65\xfd\x39\xab\xd5\x17\xda\x65\x9d\x22\xab\xaa\x9b\x03\x5d\xb1\xa7\xf5\x6e\x7b\x4e\x3c\xac\xe1\xbd\x58\xde\x89\xbe\x1f\xb0\x11\x73\x4a\x52\x4d\xfc\xc7\x55\xc5\xa3\x90\x5e\xb3\xc3\x23\xab\xc2\xbe\x19\x1f\xb4\x0f\x4f\x48\xee\xf1\xce\xa2\x18\x3d\x1a\xd5\x93\xdf\x88\x07\xaa\xcd\xce\x6e\x95\xe3\x6b\x11\xd4\x76\xab\xc8\xb0\x1e\xec\x09\xac\xe9\xce\x51\x18\x32\x27\xe9\x30\xa9\xe3\x23\x2d\x74\x8a\xfd\x6a\x38\x28\x21\xbb\x1b\xbb\x0e\x06\x15\x9e\x3a\xd9\xc2\x0e\x34\x9d\x1e\xb6\x56\xb9\xb6\xde\x64\x39\x78\x20\x16\x66\x47\xab\x9a\x06\xbd\xb8\x87\x74\xf7\xd2\xc4\x35\x2d\xf1\x27\xeb\xbd\x26\xf7\xcc\x4b\xb0\xe6\x6e\x78\xe9\xd7\x50\xe3\x43\x40\x67\x54\x47\xee\x92\xc9\xa0\x9f\x66\xc3\x51\x2b\x50\x06\xd2\x20\x08\xd6\x76\x2b\xf0\x63\x73\x20\xef\xfc\x40\x03\xef\x1e\x3c\xb2\xad\xa4\xff\x48\x93\xbb\xdb\x69\xbe\x35\xf0\xad\x36\xe3\xc3\x0a\x86\x6d\x63\x87\xf3\xdd\xb0\x1d\x94\x0f\x48\x2f\xbe\x53\xcd\xbb\x1f\x56\x2c\xdd\xc4\xb5\xea\x3a\x0f\xd6\x24\x6a\x3f\x69\xd3\xda\x93\x5f\xc3\xbb\x4c\x26\x06\x2d\xad\xe5\x63\x66\xef\x61\x4d\x96\x3f\xb1\xe7\x39\x8a\x53\x1d\x5b\x73\xeb\x40\xef\x12\xb9\x70\xc0\x33\xdf\x5a\x9a\x7a\xb2\x8e\x8c\xf2\xcc\xc7\x84\x83\xb3\x27\xde\xaf\x73\x56\xce\x9d\xec\xbc\xa2\x18\x56\x04\x90\x48\xcd\xe5\x4b\x72\x0c\xe4\xc3\x16\x72\x64\xc3\x33\x93\xe5\xd9\x8e\x0e\xd2\x50\xc0\x7e\xec\x54\xb0\x6e\x0d\x7f\xb4\x41\xec\x58\xc1\xab\x63\xe7\xd9\xe9\x9e\xb5\xc8\x8f\xc3\x60\x5d\x00\xd5\x5b\xb2\x7d\x4b\x12\x3e\x5a\x30\xed\x61\x87\x2a\x8c\x0e\x13\xa5\xeb\x86\x65\x01\xef\x7e\xf8\x1c\x3e\xf9\xe8\x66\x0d\xef\xe3\x5c\x2f\x86\x93\x04\x72\x6f\xec\x89\x7c\x2f\x4b\x85\x9f\x7c\xa3\x43\xa0\x60\x92\xdd\x62\x22\xe5\x50\xb5\xa4\xd8\xe4\xda\x0a\xe5\xfc\x3b\x59\x73\x67\xbb\x9a\xa2\x88\x20\xa6\x42\xd3\x2a\x1f\xc1\x35\x5f\x15\x3a\x79\x7e\x9c\x08\xf9\xb0\x02\xf7\x70\x0c\xb7\xa3\xd1\x8d\x6d\x25\x00\x22\x1d\xeb\xe9\x80\xa3\x2f\x86\x6b\x8f\x08\xf5\xff\x86\x03\x76\x03\xd3\x60\xd5\xa9\x69\xa7\x89\x50\x8b\x41\xe9\xce\xdf\x14\x12\x84\xb7\xc6\xf6\x78\x9b\x25\x94\x6d\x42\x92\x60\x29\xa4\x35\xfc\xa4\xc3\x61\x12\x3a\x45\x2b\xb2\x87\x15\xaf\x78\x2b\xda\xfa\xfa\x35\xe9\xc7\xeb\xd7\x22\x1f\x72\x4c\xe0\xfd\x61\x0d\x3f\x5c\x64\x30\x91\xa3\x13\x89\x0c\x66\x35\x49\x8a\x34\xf7\xed\x0b\x2d\x2b\xd5\xeb\xa2\x89\xc8\x97\x56\xac\x84\xed\xac\x6b\x6c\x37\xf6\x86\x8c\x57\x8c\x6d\xa6\x2c\x85\x0e\xf6\x0d\xa7\x2a\xbc\x58\xab\xfd\xd0\xa9\x33\xf9\x17\x9e\x03\x12\x97\x71\x14\x98\x6d\xad\xbc\x22\x73\x2c\xa4\x46\x8f\xbb\xb1\x4b\xd7\xef\xa4\x4c\x48\xb3\x7f\xff\x86\xe8\x6f\x11\x0e\x7a\x7f\xe8\xf4\xfe\x10\xc4\xdb\x31\x2d\xd5\xb1\x14\xf0\x41\xf5\x43\x77\x31\x70\x7f\x53\xec\xc1\x37\x07\x64\x03\xdc\x59\xd5\xa6\xa4\x2f\x3f\x2f\x42\x18\xa2\xff\xf2\xba\x49\xde\xe6\xe6\xae\x18\xe6\xef\x6a\x09\xeb\xea\x35\x4b\x78\x25\x7b\x88\xc7\xca\x8e\x68\xdf\xd9\xad\xea\xd8\x8c\xd7\x97\x78\x8a\xbf\xd7\x22\xfc\x49\xb3\x0a\x67\x59\x32\xe6\xe1\x3a\x3e\xa5\xc0\xbb\x53\x4e\xff\x4c\xb6\x87\x0d\x5b\xfa\xf5\x36\x34\x37\x4c\x2d\xd9\x9f\xce\x36\xe2\xb8\x0c\xe4\x7d\xac\x60\x8b\x8d\x8a\xf9\x90\x98\x2a\xec\xb7\xd8\xb6\x32\x8e\x96\xcf\xa9\x04\x6c\xb5\x51\x9c\x3e\xbf\x78\xbf\x90\x53\x0c\xa1\x3c\x76\xd8\xd0\x12\x3b\x67\x7b\x0e\x10\x93\x8b\xf2\x89\x5a\xf5\x62\xe9\x93\x67\x82\x2c\xa3\x1e\x49\xd2\x1b\x4b\xdb\x9d\xfc\xb5\x98\x82\x70\x70\x88\xd5\x8b\x72\xee\xa6\xaa\x5e\xfc\xd9\x8e\xcc\x0b\x99\x0d\xe8\x29\x12\x53\x5b\x4a\x58\x78\xa5\x57\x7e\x2e\xc2\xc8\x51\x54\x84\x5a\xee\x54\xb0\x83\x6e\xaa\x17\xd7\x75\xbc\x61\xfc\x8a\xd2\x4f\xd2\x98\xd1\x79\xeb\x28\x1f\xac\x37\x93\xee\x31\x11\x7a\x38\x9d\x98\x0c\xa4\x83\x17\x30\x42\x41\xab\x29\x10\x43\x13\x4f\x91\xc4\x79\x9d\x95\x8d\x06\xb6\xb8\xd3\x86\x02\xc8\xf3\x23\x25\x24\xf5\xa7\x83\x19\x3d\x59\xb4\x0f\xa7\xa2\xb4\xce\x7e\x0c\x01\x29\x34\x4b\xd7\x8e\x1e\x52\x9a\xab\x1b\xb1\xdb\x31\x48\x25\x9e\xfd\x25\x72\x45\x38\xd0\xea\x63\x73\x50\xce\xcf\xa2\x01\x62\xf0\xaa\xd5\x47\xdd\xa2\xbb\x02\x7a\xaf\x9a\x40\x61\xe6\xe8\x63\xcc\x24\x41\xe1\x51\xb3\xed\xa6\x75\x24\x44\x09\x27\x44\x03\x47\x74\x1c\x5b\xdf\x1d\xac\xd3\x3f\x5b\x13\x54\x07\x7e\xe8\x74\xf0\x1c\x8b\xc1\x4e\x3b\x1f\x26\xb2\x24\x1d\xa2\x99\xa6\x49\xac\xc6\x8b\x7b\x51\x79\x8e\x42\x38\xb2\x4d\x63\x0b\xca\x69\xe8\x1a\x3e\xcb\x3a\xb4\x4a\x06\xfd\x11\x07\x42\x2b\xa8\x30\x7a\x3e\x52\x8f\x8e\xd2\x60\xe5\xf9\x0c\x99\xd2\x0a\xb6\x63\x48\x89\xe1\x34\x94\xc8\xd1\x39\x6a\x2f\xae\x84\xde\x3e\x66\xa3\xd8\x56\x8a\x27\x49\x68\x4f\x18\xdd\x5f\x6e\xf3\x29\x38\x0a\xe1\x3d\x29\xde\x4c\x87\x07\x67\x89\xee\xa4\x33\x70\x4d\x67\x1b\x93\x02\x12\xce\x94\x23\xdc\xa4\x5d\xf3\xe0\xe9\xd4\xa2\x9a\xc8\x8d\x67\x31\x14\x42\xfb\x49\x6e\xdb\x94\xb9\xe6\xb4\x35\x1a\x70\x61\xa7\xb0\xe3\x17\x34\x38\x6d\x35\x6e\xa2\x5d\x32\xc9\xda\x31\xe5\x32\x89\xe4\x49\x0d\x03\xb6\x37\xcf\xa6\x23\x68\x1a\x4b\x9a\x16\xb3\x91\xf4\x2b\x39\x09\x4e\x50\xd9\x2c\x52\xdc\x26\x96\x88\x0c\xc8\x1a\x7e\x10\xdf\x8c\x6d\x1e\x9f\x13\xd7\x4e\x7b\x7a\xae\x02\x1c\x42\x18\xfc\xe6\xee\xee\x74\x3a\xad\x4f\xbf\x5b\x5b\xb7\xbf\x7b\xff\xfd\x5d\x9a\x70\xf7\x04\x67\x63\xd8\xdd\xfe\x3e\xb2\x66\x77\x94\x95\x89\xc9\x78\x32\xb5\x56\x6d\x2b\xf8\x94\x98\x11\x1b\xb7\xd1\xc6\x20\x93\x16\x11\x64\x63\xc7\xa1\xe7\xa3\x9c\xe3\x03\x06\x61\xa7\x7c\x68\xb5\x0b\x67\x16\x0e\x1b\x1a\x89\x53\x48\x10\x64\xaf\xee\xb5\xac\xa3\xba\xbd\x75\x3a\x1c\xfa\xc8\x26\x63\x8c\xc1\x4e\xe3\x59\xc1\x29\xd9\xce\xa9\xf9\x04\x3b\x51\xf2\x69\xc3\x5a\x60\x98\x62\x4d\x31\x81\x29\xe2\xfd\xc7\xe8\x23\x76\xa9\xf8\xc4\xad\xa5\x84\x1e\xea\x44\xa6\x16\x0b\x2a\xae\x93\xb1\x21\xde\x07\xdd\x3e\x6f\x27\x74\x8e\xe1\x8f\x5e\xdd\x13\x1d\xc3\x29\x0f\xc7\x3a\x29\x6e\xa0\xd5\xe5\x8e\x46\xaf\xa4\x8d\x6a\x9a\xd1\xa9\x20\x30\xcc\x92\xbd\xdd\x8e\x75\xd9\x2c\x70\x98\x83\xf2\x87\x64\xcc\xd9\x70\xc7\x6d\xab\xbd\xa2\x68\x1f\x94\x8c\x88\x69\x80\x75\x7a\xcf\xb1\x1f\x9f\xd3\x75\xca\x11\x29\xc7\xce\x69\xbd\xcc\x3f\x29\xcf\xc1\x06\x29\x76\xe6\x59\x5c\x55\xe4\x92\x79\xb7\x5b\x46\x1f\x39\x9f\x67\x7c\xc4\xdb\xd1\x35\x72\x08\x26\xa0\xf1\xfa\x88\x71\x7e\xbc\x98\xe9\x92\xcd\x55\x2b\xdb\x23\x3d\xe5\x8b\xe0\xf5\xcf\x4c\x09\x1f\x1a\xc4\xd6\xc3\x27\x6f\xbe\xf9\xec\x19\x47\x40\xf3\x76\xd6\xf5\x2a\x3c\xa7\x48\xac\xc3\x68\xf8\x46\x2d\x23\xce\xc2\x00\x09\x2c\xf6\xa3\xd1\x0f\xf3\x19\x74\x01\x59\x51\xea\xbf\x9a\x1a\xae\xe9\xdd\x0e\xb1\xbd\x11\xac\x54\x79\x68\xad\xcf\x2e\xa5\x9c\x54\xff\xd5\xf1\x8c\x46\x39\xa7\xd5\x9e\x64\x16\x46\x67\xe0\x7f\x20\xd3\x10\xff\x12\x4e\x16\x86\x45\x7e\x9a\x19\x9b\xe4\xc9\x34\x47\xa3\x1f\x04\xa5\xaa\x5b\xeb\xeb\xe4\xa0\x92\x2c\x2e\x0b\xbd\x92\x34\x41\x42\xa1\x6b\xc6\x59\xc8\x87\x47\x5b\x24\xb7\x96\x11\x20\xdd\xe1\x0d\x13\x9f\x4c\xb0\x35\x0b\xbf\xb2\x12\x1c\x27\x2c\xe1\xc3\x45\x78\x3c\xc3\x26\x9b\x83\x32\x7b\x9c\x02\x93\x24\xa6\x9c\x9b\xa6\x90\xc2\x07\xe5\x0a\x74\x5c\xce\xe4\x73\x9a\x2d\x70\x57\xa1\x5d\x07\x52\x1c\xba\x6c\x32\x9c\xf5\x28\xdd\x95\xb8\x1e\xf9\xcf\x72\xbd\x35\xbc\x8b\xc0\x59\x1e\xbf\x70\x26\x74\xcf\x59\x84\x9c\xb4\x51\x6e\xcd\x36\xd8\x00\xee\x76\xd8\x84\x99\xd2\x6a\x0f\x0c\xa1\xdc\x09\xcc\x15\xaf\xd8\x14\xc0\x5a\x4a\x60\x4f\xda\x4f\xa8\xab\x9c\x51\x46\xc1\x1f\xdf\x8d\x74\x46\x1c\xae\xb2\xcd\x4d\x47\x33\xdb\xc6\x85\x9b\xc1\x7a\x91\x2f\x46\x38\x0f\x64\xdf\x3d\xc6\x00\x22\x3d\xcb\xb1\xd0\xdc\x86\x50\x16\x37\x3f\x4f\xc6\xa0\x6b\xbb\xdb\xd5\x7c\x7c\x96\x52\x97\x80\xd3\xf5\x9d\x28\x0a\xcf\xda\x9a\xcb\x5c\x71\x5a\x5d\x47\xc3\x70\x79\xd7\x94\x4b\x3a\xdd\xb6\x68\xa0\xc5\x41\xf6\xc8\x6e\x2c\xaa\x1e\x0b\x3b\xe9\xab\x04\xbe\xda\x34\x82\x5b\xd6\x9b\xe8\xff\x41\x9b\xc6\x21\x57\x91\xba\x88\x69\x52\xf4\x70\xf5\x07\x6d\xda\xab\x58\x1f\x80\xeb\x5e\x05\xc1\x3a\x95\x67\x8a\xb4\x83\x67\x02\x58\xbd\x37\xd6\x61\xa3\x38\xd4\x89\x55\x00\x06\x7a\x6f\xb5\xf1\x64\xf6\x82\xe6\xe2\x11\xad\x78\x39\x7a\x2d\x68\x71\x65\x87\x22\x9d\xf2\x70\xca\x7a\x4f\x8e\x82\x2e\x11\x82\x1a\xae\xfd\xa0\x1a\xbc\x89\xd4\x18\x9b\xcb\x22\xf0\xd3\xfd\x8a\x61\xff\xd6\x86\x60\xfb\xe4\x12\xe8\xae\x08\xcc\xea\x10\x7a\xf4\x5e\xed\x05\x08\x8b\xb5\x02\x13\xb0\x9d\x5b\xf0\x5f\x93\x28\x4e\xbb\xbb\x47\x1c\x1e\xd7\xbb\x38\x49\x80\xe9\x39\xa3\xa1\x01\x79\x1f\xb4\x80\xe2\xd4\x8e\xf4\xf2\x6c\x47\x59\x9e\x11\x71\xe1\xa0\xb0\xe9\x7a\x07\xd9\x72\xf5\xf6\x98\xc3\x12\x83\x0f\x41\x76\x9d\xaa\x41\xca\x9c\x81\x0e\xc7\x49\xa1\x36\xda\xf7\x62\xd9\x84\x96\xc7\xc5\x23\x84\xb8\x25\x65\x26\x35\x6f\x89\xb4\x14\x00\x20\x38\xa5\xbb\xa8\x90\x13\x85\x35\xcc\x82\xf7\x54\x1a\x93\x1d\x2e\x36\x98\x68\x46\xd3\x91\x3c\x05\xbb\x5d\xdc\x05\xb1\x21\xcf\x38\xbb\x7b\x3c\xf7\x68\xc6\x22\x85\xe2\x9d\x2b\x63\x6f\x7d\x38\x77\x08\xf7\x78\x06\x1a\x71\xf9\xe4\x7d\xe3\x10\x8d\x00\x44\x22\x0e\x15\xe0\xbd\xdd\xef\x3b\xfc\x06\xcf\xdf\xd1\x3c\xed\x61\xcb\xb1\x2e\x45\x39\x9f\x76\xe1\x76\x5f\x62\xd2\x31\xab\x91\xd8\xa0\x0c\xcf\x93\x70\x27\xf7\xb0\x86\xf7\x36\x5b\x09\x9a\xb2\x02\xaf\xfb\x41\x8a\x0d\x89\x32\x2d\xf2\xa3\xd9\x6a\xd3\x7e\x83\x97\xd5\xaa\xd8\x3c\x5f\xda\xad\x53\x0d\xdd\xc0\xd1\xb4\xc8\x19\x2f\xe4\xbb\xcc\xaf\x24\xcd\x7a\x75\x7d\xf3\x6a\x05\xaf\xfe\xf5\x6f\xfa\xff\x5f\xfe\xf6\x6a\x2a\xdf\x48\x06\x1c\x73\x22\x2e\x51\xf2\xb4\xd9\x85\xfb\x70\x50\xdf\xdf\x0f\x8a\x6c\xa6\x17\x80\x69\xaa\xed\x91\x59\x12\x47\xa9\x18\xd3\x16\xf1\xce\x63\xe2\xd5\x0c\x1b\x6f\x94\xa1\x37\x5b\x8c\x75\xc1\x02\xf2\x00\x59\x24\xc3\x0e\x94\xde\xb6\xd6\xbc\x4a\xb1\xf5\xec\x7e\x76\x28\xe5\x23\x09\x6a\xe6\x56\x55\xdc\xd1\x53\x24\x29\xb1\x62\x04\x1b\xbc\x0e\xa3\x8a\xf6\xfb\x19\x28\xbe\xb7\x23\x5b\x41\xfe\x99\xb0\xc4\x18\x63\xcf\x9e\x95\x79\x27\x87\x0b\xa3\x97\x7a\x13\x03\xd4\x09\x95\xcc\xde\x80\x35\xc5\x26\x08\x5f\x28\xe1\x91\x44\x1d\x2b\x27\x31\x6e\x96\x08\x23\x86\xfd\x19\x83\x63\xff\x34\x9c\x27\x9f\x99\x17\x88\xad\x0c\x74\x0b\xf8\xa5\x88\xe9\x9a\x92\x96\x08\x5f\xa6\x30\x2b\x82\x73\x33\xf0\x69\xa2\x73\x20\x4b\x11\xeb\x0b\x62\x73\x3a\xdb\x94\x10\x25\x5f\x8f\x0c\x4b\xa5\x93\x7f\xc6\xb1\x08\x50\xba\x81\x40\x07\x55\xa6\xbf\x9e\x0e\xeb\xd2\x6e\xf8\xb4\xcc\xbe\x23\xad\x1d\xcd\xbd\x80\x00\x4c\x86\xf7\x40\x12\x9b\x55\x5a\x14\x78\xe4\xd3\xb6\xbb\x58\xf2\x63\x3b\x31\x38\x86\xe6\x39\xf7\x48\x71\x17\x51\xa1\xbb\xc4\xd6\x3a\x5d\xea\xbc\xf4\x3d\x9e\xe9\xae\xd2\x80\x6b\x52\xdc\xcf\x83\xeb\x6e\x8f\x45\x5d\x2b\xc1\x59\x69\xb7\x99\xa9\x69\xe6\x8d\xe4\x34\x9a\x95\x43\xc1\xde\xda\x16\x74\x8b\x8a\x44\x1a\x5d\x78\x19\x80\xb4\xa3\x4b\x05\xce\x4c\x2c\x06\xa6\xd2\x65\x61\x1a\x9c\xde\xf2\x35\x3c\x4a\x20\xf3\x14\x5e\x9e\x70\x68\x41\xe0\x04\x29\x60\x4c\x9e\xe9\x26\x01\xb0\x94\xa7\xd2\xc2\xd4\xfb\xf1\xfc\xf5\x18\x94\xf3\x28\x76\x46\x4c\x44\x81\x4c\xa4\xe0\x47\xb4\x4b\x14\x31\x58\xe0\x29\x6c\x16\x8c\xea\xd1\xa7\xaa\x52\xca\xaf\xd7\xe1\x21\x6c\x7e\xfb\x66\xf3\x09\x1d\xb5\xc3\x7f\x8e\x28\x4c\x26\x1c\xa1\x4e\x83\xea\x14\xc9\x66\xa8\x4f\x45\x9f\xf8\xdb\x37\x49\x72\x11\xab\xfe\x44\x52\x86\xf8\x9b\x19\xfb\x6d\xac\x38\xab\xce\x33\x86\xdd\x3a\x3b\x0c\xe2\x03\x79\x91\x1c\x82\xa9\x20\x69\xf2\x5e\x1f\xd1\xc4\x38\x63\xa2\xfb\xa6\xac\x3f\x3c\x8a\xab\x53\x3d\x43\x8e\x9f\x74\x28\x25\x3c\xac\x6c\x09\x17\x89\xd9\x60\xac\xad\xd5\x33\x19\xd4\xa9\x3b\xa5\x96\x5f\xb9\x2b\x43\xb9\x50\x16\x1e\x49\x8a\x9c\x7b\x7f\x2d\x6a\x46\x5b\xca\x99\xd5\x62\x15\xe6\x51\x41\x83\x2e\x28\x6d\x92\xdc\x18\x93\x26\x8e\xb7\xe7\x18\xba\x44\xbc\xa3\xfe\x9f\x6f\xbf\xfe\xe3\x97\xab\xcf\xdf\x7d\x5b\xc3\xae\x53\x7b\xf0\x67\x13\xd4\x43\xd4\x38\x39\xd1\x5b\x52\xbb\x7a\x0a\xb2\x6d\xdf\x93\x84\x58\x54\xb1\x2d\xe8\x57\xa8\x11\xba\x3e\x37\x3f\x94\x32\x64\xdd\xf1\xb9\xfc\x2b\xa5\xa1\x38\x32\x8e\xb9\x91\x3a\x04\x07\x74\xe8\x7a\x65\xd0\x84\xd8\x60\xd3\x46\xe8\x2c\x3f\x4f\x84\x66\xe5\x3f\x3a\x99\x18\xf9\xe4\x32\x73\x84\x0c\x04\xab\x22\x63\x11\xbb\x1f\x68\x6b\x32\x09\xc9\x9c\xaa\x61\x10\x0b\xdf\xf3\x95\x2e\x73\x4a\xbf\x86\x1f\xfd\xec\x7e\x17\x46\x9c\x28\x72\xd5\x07\x7d\x2c\x06\xe4\xf6\x84\x5e\x19\xc5\x89\x1f\xd7\x0c\x63\xd9\x5d\x08\x3e\x2f\xc6\x6e\xdc\x6b\x43\x89\xa0\xc1\x8e\x7c\x76\xa7\x3d\xeb\xca\x8f\xdf\x7f\xeb\x61\xb0\xda\xa4\xab\x24\x23\x21\x0d\x15\x5b\x61\x4f\xa6\xb3\x52\xea\x8b\x78\x60\x2c\xa9\xd2\x13\x99\xe1\xd7\xf0\xe9\x62\x32\x34\xd6\x78\xed\x83\xf4\xa3\xc0\x3f\xbc\x35\x85\xb2\x75\xda\xdc\xfb\xd8\xde\x13\xe7\x39\x1c\xac\x4f\x86\x94\x8b\x3b\x5c\x72\xa7\x34\x91\x53\x7e\x2e\x16\xc4\xb1\x47\x74\x9e\x54\x48\xec\x60\x64\x90\xb7\xc3\x2a\x3f\x0f\x48\x27\xb5\xe1\xad\x66\xcf\x65\x77\x3b\xcd\x35\xa9\x05\xe3\x07\xcb\xd2\xb7\x06\xde\xea\xf0\xd5\xb8\x65\xab\x31\xe1\x8d\x7b\x1d\x0e\xe3\x76\xdd\xd8\x5e\x8a\x24\xb7\x92\x4c\xdc\x09\x95\xdb\x48\xe5\x89\x53\x49\x44\x9c\x3a\xad\x85\xd0\xe8\xd1\xc5\xfe\x97\xe7\x68\xde\xf5\x64\xc1\xdd\x5d\x5a\x82\x64\x5a\x9e\x30\x4b\xb0\xde\x80\xca\x07\x9c\xc4\x3c\x93\xb1\x96\xc0\xe7\x09\x0e\x85\xa0\x43\xd5\x72\x9e\x13\x53\x97\x6c\xbf\xc9\xe9\x74\x9d\x3d\x79\xce\xa1\xb2\x2c\x53\xf2\x2c\xc6\xc6\x21\xdd\x77\x34\xad\xd4\xfe\xc8\xda\x98\xee\xcc\x9d\x2e\x02\x1f\x96\x81\x9b\x95\x20\x4d\x2c\x4c\xed\x31\xf0\x93\xfa\x79\xb5\x76\x7d\xca\x48\x4e\xfe\x43\x08\x6e\x70\xba\xcf\xc9\x4b\x91\x91\x78\xe0\x96\xce\x96\x34\x94\xd6\xfa\x35\x35\x17\x37\x76\xb3\xf2\x0d\xdb\x33\xf1\x1c\xcf\x24\xbc\x0e\x3b\x45\xf9\x71\xa2\xd0\xab\x7b\x9c\x4d\xcf\x34\xd3\xc8\x4e\x9a\x59\x23\xde\x4a\x94\x56\x5c\xb7\x63\x3e\x19\x1f\x1c\x42\xf5\x22\x59\xd8\xa7\xaa\x5c\xa9\xb2\x38\x2b\xf6\x4a\x0d\xc8\x07\x45\xa1\x43\x8e\xaf\xaa\x17\x32\xed\x55\x6c\xac\x84\x27\x65\x01\xbc\x25\xb2\xa5\xd9\xc9\x3b\xec\x91\x1d\xa8\x78\xa6\x82\x09\x4e\xef\x94\x0f\x10\x74\x3f\x01\x40\xfc\x38\xe6\x0b\xd1\xac\x0c\x63\x20\xaf\x28\xcd\x0e\x73\x68\x6e\xf2\xbc\x7b\xa5\xcd\x1a\xbe\x2e\x2c\xc3\xd4\x53\xc8\xe6\xe4\x71\x63\x91\x34\x5a\xdd\xd5\x1f\x3e\x5a\xa2\x71\xd0\x64\x78\xce\xe5\x76\x92\xe7\x8a\xaf\x72\xa5\x8c\x2c\x7f\x8a\x98\x1c\xde\xc6\x36\xb4\x9c\x82\x3c\xc9\xe2\xd3\xfc\xa5\xc5\x9f\x4d\xbf\x88\xd4\x68\x5a\x9b\x2e\xe7\x02\x7d\xb4\x66\x45\xb9\xa1\x9d\x56\xe5\x26\x60\xb5\x0b\xc8\xc8\x82\x38\xad\xe8\xfb\xb9\x36\x6f\x93\x03\x8a\x6f\x78\x4b\x45\x80\xb0\x92\x97\xca\x48\xa3\x21\x11\xd7\x66\xbf\xdc\x22\x93\x7a\x76\x97\xcf\xa5\xb8\xbe\x71\xb6\xeb\x04\xcc\x99\x7a\x13\xe4\x29\x6c\x95\x7b\xd6\x2c\xc8\xd0\x5e\xb9\xbd\x36\x7c\xcf\xe8\x1f\x74\xd5\xc5\xb3\x90\x26\x1d\x35\x9e\x04\x5f\xf5\x91\xb2\x58\x86\x47\x09\xb2\x1a\x06\x67\x55\x73\x88\x80\x12\xb6\xfb\xdc\x5c\x44\x34\x2e\x6d\xe5\x77\x25\x17\x7e\x40\x6c\xc9\x22\xf7\x76\x34\xc9\x22\xc7\xae\x50\xd9\x11\x5d\x5f\x6b\x30\xfd\xca\x99\xcb\x25\xb2\x1f\x45\xb2\xbd\x72\x21\xa5\x4b\xaa\x6d\xa1\x4b\x4d\x38\x13\xd0\xc2\xfb\x48\x41\x7c\x3f\x76\x41\x0f\x5d\xae\x28\xa7\x62\x8c\xd8\xc9\xa9\x83\x95\x32\x21\x74\x47\x9c\x41\xa2\x25\x1c\xd7\xe1\x11\xbb\x39\x6d\xc5\xb1\xcb\x68\x64\x18\x25\xef\x9d\x6d\xee\x3f\x6c\x06\xbd\xdd\x85\x93\x53\x14\xd0\xd1\x8f\x24\x8f\xd4\x7a\x14\xac\x85\xce\x4a\x30\xb2\xd3\x21\x43\xee\x82\xda\x3c\xa3\x39\x43\xa7\x83\xa0\x3d\xe9\x66\xa8\x47\x55\x64\xba\x14\x19\x9e\x8e\xc0\x80\x0e\xb0\xc5\xce\x9e\x72\xd9\x34\x6e\x9f\x27\x3c\xb3\x1d\x1a\xe2\xf4\xfe\x10\xa6\x25\x53\x31\xfc\x83\x0b\x46\xbf\xc9\x53\x8b\x52\xe2\xff\xcf\xd2\x8c\x33\xc9\x05\xec\xea\x0d\xc4\xaa\x87\x34\x31\x4a\xcf\x82\xe6\x93\xcb\x1e\x02\x77\xe1\xf6\x1f\xa3\x0f\x52\x17\x2c\x12\x06\xbe\xb9\x05\x6c\xf5\x43\x6c\xd6\x11\x98\x44\x1f\x29\x1d\xcb\xc0\x20\x77\x8e\x52\x70\xea\x75\x8b\x50\xbf\xbc\xbe\xa9\xf3\x8c\xa9\x57\x93\x27\x69\xd3\x74\x63\xcb\xc7\x14\x33\x92\x7a\x55\x94\x14\x57\x50\x73\xf5\x75\xc5\x7d\x1e\xf4\xc3\x0e\x81\x7e\x50\x9e\x5c\x47\x5d\x45\x79\x2a\x75\x1e\x7e\x51\xae\x10\xc8\x8b\xc6\x4f\x15\x94\x49\x46\x90\xbb\xf5\x40\x35\x12\x38\x92\xdd\x3b\x29\xd7\xa6\xec\x6f\x47\xaa\x1f\x1b\x4c\x66\x2d\xfd\xd3\x6c\xfa\xed\x1e\xcf\x13\x0e\xc8\xb0\x66\xf3\x01\x6c\xe8\xe5\x75\xda\xe2\x0d\xbc\xbc\x4e\x5b\xbc\xb9\x7e\xc9\x55\xb2\x9b\xd5\xcb\xeb\xc6\x76\x37\xf4\x4e\x04\xbd\xe6\x4b\x7c\xf3\x4b\xea\x0e\x9b\xfd\xb7\x0b\x9b\x97\xd7\x76\x08\x9b\x54\x5a\xb8\x81\x5f\x60\x7a\x22\x27\x3d\x3d\x4b\x35\xef\x9b\xc7\x8a\xe1\x7e\x8d\x62\xb0\x12\xfe\x2a\xcd\x78\x6a\xef\x74\x2e\x9b\x19\x8a\x7a\xb3\x81\x88\x76\xf8\x15\xcc\x06\x7c\x85\xdd\x70\xb3\x61\x58\xa2\xe4\x37\xd6\xe1\xcb\x08\x45\x5e\x7c\x00\xc6\x7f\xda\x2c\x14\xd7\x64\x6c\xfa\xf6\x51\x8b\x4c\xd1\xac\x1f\x1d\x3c\xb7\x95\xf6\xd6\x87\xd8\x7e\xea\x33\xc8\x7b\xe5\xc7\xd6\x5e\xc1\x56\x90\x12\x6b\xe0\xb3\x1f\xbe\xa0\x2b\x1c\xa1\xb8\xab\xd6\x2a\xbf\xbe\x9a\xa1\x91\xf1\x55\x33\xfa\x60\x7b\xfd\x73\xcc\x10\xd9\x37\x73\xa8\x5b\x94\x9f\xe3\x77\x15\x9c\x15\xf9\xf1\xd2\x5e\x68\xf9\xb8\x17\xce\xb3\x8b\x2a\x87\x3c\x98\xfa\x9d\xc8\x2b\x7f\x50\x1a\x41\x6d\x29\xa3\xed\xa5\x2a\x61\xd4\x51\xef\xc9\x20\x4d\xf1\x30\x0b\x19\xf7\xda\x70\x6d\x30\x3b\x2c\xe5\x23\x68\x2f\x7d\x68\x41\x6d\xd9\xdd\x5f\xe3\x7a\xbf\x96\x12\x04\xe3\x88\x1f\x17\x94\xac\x69\xf0\x66\x0e\xd2\xf2\xee\x19\x13\x54\xe6\x1c\x18\xb1\x96\x9a\x27\xf1\xe5\x83\x95\xc9\xb1\x33\xe1\x19\x6b\x4f\x33\xf4\xcf\x18\xfb\x4a\xe8\x9f\xd2\x22\xc3\xcb\x8b\x3f\x21\x36\x8b\xa6\x9e\xa2\xb6\x91\x61\x7b\xee\x37\xb9\xb0\xd0\xc7\xd3\x22\x99\xad\x8d\x7c\xe6\x21\x2b\x14\x80\x2a\x0d\x7a\x86\xd9\xd1\xe3\xe0\x74\xaf\xdc\xb9\x8e\x4d\xb0\xb1\x44\x6c\x0d\xf9\xcf\x87\x9b\x4d\x6c\x32\x63\x8c\x41\x3e\xbc\xe2\xb6\x8d\x65\x91\x3e\x5e\xc9\x48\xac\x80\x5d\x13\xf4\x2b\x6d\x7e\x9c\x1b\x3f\xfa\x10\x21\x1e\x46\x86\xe3\x15\x17\x72\x13\xc4\x69\xc8\x4c\x94\x48\xae\x64\x64\x0c\x70\x36\xac\xbf\x82\x75\x7e\x58\xc1\xb8\x6d\x77\x91\x8d\x79\x3f\xf6\x45\x6e\x32\xc1\xb8\x92\x2c\x8e\xa2\x6b\xb1\xf5\xd1\xba\x3e\x02\x03\x42\xeb\xf6\xa3\x4f\xfe\x17\x37\x1d\xd5\xe0\x70\xaf\x5c\xdb\xa1\x67\x4c\xe1\x94\xe8\xd5\x2f\xdf\x7f\xf9\xfd\x77\xf5\xf4\x45\x9e\x6a\x82\x80\x26\x94\x57\x2b\x6d\x24\xec\xf9\x92\xee\xcc\xb2\x74\xde\xab\x73\x04\x22\x47\x73\x52\x1c\xc4\x48\x79\xdb\xc7\x90\xd8\xcd\x50\xe7\x9d\x12\x79\x65\x11\x46\x8e\x93\x8b\x78\xc4\x32\xa5\x58\xed\xd4\xb9\xfb\xc5\x13\x2a\x72\x7b\x7b\x5b\x55\x7f\x92\x1c\x3d\x7d\x34\xc7\xb9\x5e\x84\x57\xb8\xd3\x32\xc1\x74\xa9\x95\x36\xd7\xa7\x13\x68\x6c\x5d\xc2\x84\xab\x70\xc0\x5e\xd0\xcd\x29\x2f\x50\xb9\xab\x27\x23\xa4\xfc\x91\x1d\x7f\xb2\x10\xfb\x77\x22\x4e\xa0\x83\xc7\x6e\xb7\xae\xaa\x65\x69\x6f\x67\x29\xf9\x2f\x80\x1f\x81\xcc\xa5\xd3\xad\x5d\x01\xaa\xe6\x10\xf9\x34\x8f\x18\xac\x26\x06\x19\x1c\x9b\xbe\x0b\xe4\xbc\xe3\xd1\x27\x7a\xfc\xd4\x73\x75\xea\x1e\x83\x5f\xc1\x3f\x47\x1b\xd0\xaf\x00\x43\xb3\x5e\xaf\xa5\x51\xb8\x8f\xb6\x2c\xf2\xe0\x27\x1a\x10\x5f\xa6\x0f\x7a\x54\x82\x78\xc9\xaa\x29\xb3\x1f\xd5\x1e\x3d\xb7\x09\x84\x28\x73\xe2\xa0\x93\xc2\x03\xc9\x3b\x69\x79\x7c\x3b\x95\xe4\xcb\x72\x3c\xb9\x67\x22\xd2\x31\x70\x57\x32\x82\x0f\xdc\x0b\xb4\x95\xe0\x3b\xb3\xd1\x2b\x73\x9e\xaf\xdf\xe9\x80\x4e\x71\x48\x3f\xed\xa2\x3d\x52\x72\xde\x5e\x32\xf1\xd9\x71\x7f\x1b\x27\x8a\x49\xb0\x7b\xa7\xfa\x5e\x90\x3c\xdb\xad\x27\xd7\x5a\xd2\xe5\x8d\x45\xce\x68\x4f\x51\x71\x4b\x57\x7b\x4d\x3b\xd9\xc7\x4f\x49\x4f\xb1\x21\xfe\xad\x96\xca\x67\x6f\x1d\xde\xac\x53\x3b\x2b\x7f\x1d\x23\x83\xa3\x63\x2d\xbb\x5c\xa7\xee\xa7\x70\x20\x02\xb3\x32\x0b\x57\x17\xde\xea\x50\x95\x9f\xf7\xac\x22\x32\xb1\xdb\x81\xd0\x10\x0b\xc2\x9f\xd9\x48\x23\x8b\xb4\x08\x82\x43\xba\x05\x39\x8c\x26\xbf\x5d\xf1\x27\x09\x0d\x45\xcf\xc4\x2c\x1d\xbe\x0e\x8f\x3e\xb7\x61\xda\x5e\x9b\x06\x1f\x7d\x39\xb6\xae\xaa\x4f\xcd\x39\x31\x4d\x7c\x7a\x0c\xc9\x8a\xa6\x8e\x81\x58\xa8\xcb\x79\x6e\xae\x65\x2e\xf3\xdd\xd8\x61\xee\x19\xa5\x03\x6f\x57\x44\x49\x6c\xcb\x4a\x0c\xcb\xfc\x9b\xdd\xdc\xb4\x43\xe4\xab\xd4\xa4\x96\x9b\x01\x44\x72\xaf\xa6\x3e\x22\x8e\x7c\x2f\xd0\x61\xf1\x70\x43\x87\x05\x65\xb8\xf1\xa6\xea\x55\x73\xe0\x8f\x6b\x63\xf9\x99\x3d\x85\x74\xe6\x96\x4c\x26\x5c\x94\x25\x16\xe7\xac\xab\xea\x37\xbf\x81\x1f\x66\xe3\x78\xbf\xd5\xfb\x47\xf3\xa5\x62\x21\x5e\x76\x6f\x69\xbf\x17\xf8\x2b\xbe\x4d\x9e\x8a\xea\x95\x0a\x8f\x3f\x72\xbe\x89\x4d\xf3\x42\x30\xda\x72\x89\x21\xd2\x8d\x94\x94\x9e\xbf\xfb\xd9\x22\x97\x5e\xe3\xf7\x75\x09\xd3\xd2\x2e\xdf\xe2\xc8\xeb\x1a\xbe\x8a\xdf\xd2\xe4\xaf\xaf\x12\x5a\x9a\xa8\x6a\x13\xe1\x6a\x0e\x9c\x57\x95\xb7\xe2\xbc\x12\x08\xe2\x11\x27\xef\x23\x83\xf8\x5a\x46\x4e\x3b\x6b\xef\xf9\x98\xd6\x55\x55\xd7\x35\x91\xaa\xfe\xc5\xe6\xff\x2a\xdb\xba\xab\x8d\x00\x7a\xd3\x63\x49\xa2\x1f\x3f\x27\x4d\xbb\xda\xc0\x9b\xf2\xd1\x78\xb5\x01\x76\x1d\xf1\xa1\x94\x03\xe6\x73\xf3\x77\x80\x57\x1b\xb8\xba\xca\x0f\xe5\x0b\xb5\xc5\xfc\xec\xf3\x69\x6c\xfa\x9a\x24\xcd\x29\xbe\x27\x29\xf8\x28\x5a\x88\x69\x52\x14\xf2\x34\x87\x2d\xef\x9c\xa3\xa9\x45\x7f\xfe\x9c\xae\xe4\xe3\x27\x72\xff\x17\x8c\xa6\x96\x77\x5a\xf2\x97\xdb\xab\xe9\x69\xec\x5e\x9e\x93\x49\x79\x11\x8d\xe6\xbe\xdf\x34\x61\xea\xfc\x9d\x4f\xc8\xdd\xa7\x8b\x65\xa7\xa4\x8b\x49\x19\xfd\x70\x55\xbc\x21\x0f\x20\xcf\xb9\xc3\x2b\xbd\xca\x8d\x59\x8b\x35\x92\xb3\x99\x3f\x9e\x7a\xab\x16\x6b\x4f\x8d\x52\xb4\x06\x4c\xd4\xb9\xe3\x69\x41\xc4\xe8\xd0\x8d\x6a\xfe\x70\xde\x8b\xb4\xa0\x1e\xbb\x69\x16\x4f\xc5\x97\xcd\xc9\x24\x27\x35\x7f\x3a\x35\xa4\x2c\x9e\xa7\x0e\x91\x05\x65\xee\x68\x98\x0f\x2d\x6a\xc5\x8b\xc1\x9c\x22\x2f\x9f\xe5\x92\xe0\xf2\xc5\xac\xc8\x75\xb5\x81\xbf\xe4\xd4\xfa\xea\xbf\x5e\x75\xb9\x62\xda\x7f\x9b\x2d\xcd\xb5\x15\x5a\x37\x3d\x4e\x35\x94\x05\xa3\xb3\x42\xc0\xf2\x5d\x51\xd2\x58\xbe\x8a\xc3\x0b\xc9\x4d\xf8\xfb\x62\x6c\x01\x65\x3f\x9e\x31\x9a\xd6\x2e\xc7\x27\xcc\xf5\xe2\x73\x41\x50\xaf\x36\xf0\xbb\xd9\x63\xc6\x36\xaf\x36\xf0\x51\x7a\x9a\xa1\xc9\xc5\x9a\x11\xf1\x5b\xd2\x9e\xd0\xba\xc5\xf8\x0c\xa9\x2d\x9e\x73\x88\x72\xe9\x59\xc4\xc0\xe8\x7e\xfc\xa7\x30\xcc\x7f\x0c\xb9\x5c\x5d\xe0\xc4\x09\x27\xff\x21\x28\x32\xa7\xf8\xd8\x48\x31\xa0\x41\x2b\x30\x2c\x91\x1e\x72\x94\x38\x1f\x58\xe4\xfa\x0b\xd9\xc7\xdc\xf9\x6a\x03\x1f\x17\x4f\x52\xa2\xbb\x18\x3c\xe5\xae\x73\xf2\x9c\xea\xa4\xb1\xd5\xbf\xc9\xd5\x71\xac\xf0\x56\xba\x24\xb9\xda\xcf\xbd\x41\x29\x48\xa8\xaa\x3f\x67\x07\xca\xbe\xd3\x4f\x01\x44\xc2\xf0\xa4\xc5\x92\x3c\xbc\x4b\x95\xc1\x35\x7c\x1b\x4b\x84\x3d\x2a\xe3\x73\x1e\x59\xa5\x6f\xf8\x4e\xdc\x13\x56\x06\x65\x8f\x8a\x0f\xb3\x38\xa5\x8e\x2d\x7c\x2a\xe4\x8f\x20\xe9\x9a\x56\x5b\x2c\x03\xbe\x0b\x6d\xc1\x11\xf4\x4e\x11\x62\xe6\x35\xc6\x12\x39\x51\x52\xa6\xad\x24\x6e\x95\x7d\xe6\x1c\xcc\x70\x4e\x97\xff\x26\xc3\x8f\xb1\xbb\x6a\x2a\x7a\xe6\x6a\x53\xb0\x3c\x39\x2f\x56\xa5\x32\x69\x19\xcf\x26\x06\xd6\x12\x8c\xcd\xbe\x9a\x2c\xf2\xbe\xa2\x6d\x75\xfa\x26\x6b\xea\x8d\x2e\x46\xf2\x22\x95\xe5\xbf\xe3\xf0\x7e\xc1\x41\x3a\x0e\xf9\x0b\x2d\x05\xcb\x05\x12\x42\x4f\xeb\x75\x55\xc5\xbf\x01\x51\x2f\xc4\x9e\xbb\x97\x73\x8f\xcd\x30\xca\x27\xa9\x29\xf2\x4a\xbb\xdc\xa6\x0f\xfd\xcf\xda\xec\xab\x84\xef\xf2\x4e\xe4\x4f\x48\x24\xee\xa7\x68\x8e\x9b\xf7\xb9\x75\x2d\x47\x85\x7e\x89\x2b\x49\x4c\x57\xd1\x21\x48\x0b\x87\x14\x51\xe1\xad\x95\xdf\x45\x3c\x19\x5a\x82\x8f\x25\x6f\x5c\x0e\xff\x7e\xdc\x9e\xe5\xc9\xa6\x8c\xf0\x5e\x5c\xed\xc2\x66\x4f\xb6\xf5\x5f\xd5\x8b\x17\x17\xaf\x54\xf5\xe2\xdf\x2b\x19\xe7\xc6\xed\xb9\x1c\x29\xd7\xf1\xa3\x38\x60\x31\x57\x6e\x5d\x39\xf0\xe3\x74\xe1\xde\x39\x0a\xea\x75\xa7\x5c\x77\xce\xb2\x65\xaf\x2c\x99\x00\x89\x6c\xc9\xe6\xeb\xf5\xaf\xe2\xf2\xf5\xda\x6d\xff\x0b\x2c\xfe\xbf\x00\x00\x00\xff\xff\x3d\x0d\x3b\x65\x27\x4a\x00\x00" func runtimeHelpOptionsMdBytes() ([]byte, error) { return bindataRead( _runtimeHelpOptionsMd, "runtime/help/options.md", ) } func runtimeHelpOptionsMd() (*asset, error) { bytes, err := runtimeHelpOptionsMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/help/options.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeHelpPluginsMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x7c\x6d\x8f\xe3\x36\x92\xf0\xe7\x47\xbf\x82\x8f\x83\xc3\xd8\x03\xb7\x7a\x0f\x87\x3b\x1c\x0c\x24\xc0\x4c\x92\x99\xcc\xdd\xbc\x2c\xa6\x3b\x1b\x1c\x82\x01\x44\x4b\x25\x99\x69\x89\x54\x48\xca\x6e\x67\xb1\xfb\xdb\x0f\x55\x45\x52\x94\xdb\x33\x9b\xdc\x7d\xb9\x7c\xc8\xb8\x2d\xb2\xde\x59\x6f\x2c\xf9\x2b\xf1\xe7\x7e\xea\x94\x76\x45\xf1\x4e\xd5\xd6\x08\x37\x8d\xa3\xb1\xde\x89\xda\x82\xf4\x4a\x77\x62\xe4\x05\xe2\xa4\xfc\x41\x48\xe1\xd4\x30\xf6\x20\xde\x4e\x52\xb8\xb3\xf3\x30\x94\x11\x84\x90\x16\x8a\xd6\xf4\x0d\x58\x27\x6a\xa3\xbd\x54\x1a\x01\xe0\xd2\x56\xf5\xe0\x84\xd4\x8d\x18\x8d\x73\x6a\xdf\x9f\x85\xf1\x07\xb0\xc2\x99\xc9\xd6\x10\x9e\x8f\xbd\xac\xa1\x29\x94\x16\xd5\xdf\x6f\xcb\xda\xe8\x56\x75\xb7\x03\xd2\x75\x8b\x54\x54\xa5\xb8\x3f\x40\x20\x48\x34\xca\x42\xed\x8d\x3d\x8b\x35\x92\x86\x9b\x68\xd1\x46\xb8\x83\x99\xfa\xa6\x08\x24\x08\xe9\x45\x0f\xd2\x79\x61\x34\x24\x62\x88\x16\xa9\x45\xa5\x74\x6b\xca\x5f\x9c\xd1\x15\x7d\xcf\x28\xf0\x4b\xfa\xb3\x18\xad\x39\xaa\x06\x69\x6f\x1a\xe5\x95\xd1\xb2\xa7\xa7\x76\x90\xf8\x97\x70\x53\x7d\x10\xd2\x09\x7f\x00\xa1\xe5\x00\xc2\xb4\xf4\x99\x89\xdc\xe2\xe7\x82\x3f\x3f\x73\xe2\x04\x7b\xa7\x3c\x6c\x45\x03\x23\xe8\x06\x74\xad\xc0\x6d\x05\xf8\xba\x2c\x4b\xf1\x03\x58\x10\x0a\xa5\x24\xe0\x51\x92\x94\x67\x3a\x5a\x6b\x06\x02\xdc\x99\x04\xfb\x74\x50\xf5\x41\x1c\x02\xf6\xd6\xf4\xbd\x39\xa1\xc0\x89\x3f\xe7\xed\x54\xfb\xc9\xc2\xae\x28\xaa\xaa\x2a\xae\x09\xf4\xb6\x33\x37\x0c\xec\xb6\x10\x42\x88\xce\x94\xfd\x24\xe9\xa3\x85\x91\xc5\x42\x7f\x1d\xa0\x1f\x79\x09\x2f\x0b\xbb\xca\xa1\x21\xd8\x05\xca\xac\xe2\xdd\x2c\xc6\xa8\x7f\x26\x6d\x40\x35\xd4\xa6\x41\x22\xed\x85\x78\xcc\xd4\x1d\x48\x4a\xf4\x7c\x90\x67\xb1\x07\xd1\x28\xe7\xad\xda\x4f\x1e\x1a\x21\x6b\x6b\x9c\x13\xc3\xd4\x7b\x15\x2d\x8f\xcc\x85\x55\x95\x29\xb0\x58\x62\xce\xd5\x24\xf7\x66\xf2\x19\xe6\x85\xde\xa2\x5a\x8a\x06\x5c\x6d\xd5\x88\x3b\xb6\xe2\x08\xd6\xd1\x07\xb6\x94\xb3\xb0\xf0\xeb\xa4\x2c\x0c\xa0\xbd\x9b\x8d\x1e\x29\x96\xbd\x33\xc5\x41\x1e\x21\xb7\x12\x36\x69\xd6\x51\x2d\x35\xb2\x25\x9b\x06\x1a\xe1\x8d\x20\x15\x3c\x73\xc2\x4e\xda\xab\x21\x98\xff\xb6\x30\x6d\x58\x8f\x47\x03\xf0\x3c\x89\x7f\x15\xfe\x3c\x82\xdb\x15\xc5\x73\xf1\xad\xe9\x8d\x75\xf5\x01\x06\x70\xc5\x73\x71\x77\xd6\x5e\x3e\xf2\xde\xe2\xb9\xf8\x01\xfa\x31\xfd\xc1\xd4\xa5\x3f\xc3\xd2\x03\xc8\x06\x6c\xf8\xb6\x78\xa3\xc5\x60\x9c\x17\xb5\x74\x68\x85\x32\x8a\xe6\xa4\xfa\x5e\x9c\xa4\xf6\x48\xa9\x6c\x1a\xd2\x7e\x20\x51\xec\x27\x2f\x50\x99\x60\x51\xc8\x05\xed\x9d\xb7\x46\x61\x2c\xb6\xd7\x19\xd9\xc2\x58\xe1\x32\xba\x4b\xf1\xc6\x17\xca\x89\x49\xf7\xea\x01\xfa\x33\x19\x48\x02\xe7\x8d\xd0\xc0\x12\x43\x40\x63\xc6\x14\x9e\xea\x28\x3d\x63\x0b\xf7\x94\xc1\x52\xbc\x37\x99\x93\x48\xe7\x01\x8f\x18\xa0\x69\xd4\xd0\x10\x3b\x0f\x00\xa3\xd2\x5d\xb1\x50\x06\x32\xe9\x0f\xa0\xac\x30\xa7\xd9\xd7\x28\x7c\xe0\x44\x67\x4c\x23\x46\x2b\x6b\xaf\x6a\x28\x8b\xe2\xab\xaf\xc8\x2a\x6b\xd9\xf7\x7b\x59\x3f\xb8\xa2\x88\xd6\x31\x39\x36\x58\xc4\x43\x82\x61\x2b\xa9\x6b\x70\x8e\x0c\x01\x0d\xab\x9d\x74\x8d\x46\xe3\xc4\xde\xf8\x83\xa0\xa3\x4e\x16\x52\xa0\xe9\xa5\x93\xff\xda\x08\xe7\xa5\x6e\xa4\x6d\x44\xaf\xf6\x56\xda\x73\x29\xde\x21\x80\x84\x98\x4c\x86\xf0\x34\xd0\x2a\x0d\x0d\xdb\x53\x81\x5f\xe3\x22\xfa\x02\x92\xfa\x04\x1c\xd1\x98\xc5\x41\x8e\x23\xe8\xd9\x03\x21\xb6\x5e\xa1\xc7\x6c\x33\xa6\xd8\x34\x89\xb0\x00\x9e\xcd\xb2\x52\x5a\xf9\xf5\xa6\xda\x09\x7f\x50\x2e\x71\x13\xdc\x30\xda\xfd\xe4\xa0\x21\xcd\x9e\xcd\x64\xa3\x1a\x71\x97\x92\xbd\xfa\x8d\x4e\x68\x89\xde\xe5\x7e\xb1\x5f\xb9\x48\xb3\x6c\x3d\x58\xb1\x9f\xda\x16\x43\x0b\x89\x70\x0f\x90\x81\x80\xa6\x24\x4a\x46\x0b\x89\x98\x25\xfc\x19\x6c\x80\xb9\x87\xd6\x58\x78\x0a\x14\xe9\x78\x0a\xd7\x38\xff\x7b\x01\x33\xb1\x51\x28\xbc\xdf\xe8\x97\x84\xe7\xc3\x08\x7a\xbd\x9f\x5a\x04\x63\x27\x0c\xaa\xa8\x0d\x19\xa8\x40\x8e\xcd\x08\x1a\x9a\x18\x85\xc6\xc9\x27\x7f\x86\x84\xa1\x62\xc2\x5a\xb3\xff\x05\x6a\x9f\x81\xff\xb3\xd4\x10\xe1\x8f\x52\xc3\x15\x1c\xf8\xf5\x55\x24\x08\x7b\xe1\xb1\xe3\xe2\x25\x96\x17\xc4\xe8\x75\x04\x15\x3f\xac\xc8\x7e\xac\xea\x3a\xb0\x28\xe5\x33\x81\x9b\x1c\x58\x8c\x57\x60\x01\x51\xe5\x6b\xa5\xd8\x2b\xdd\xc8\x3d\x86\x64\x96\xe3\xda\x01\x88\xea\x1b\x76\x3b\x0f\x70\xc6\xe7\x4a\x77\xae\xda\x94\xe2\x45\xa4\x8c\xd4\xe4\xc4\x28\x1d\xda\x96\x74\x41\x58\x78\x60\x28\x18\x5e\x18\xa1\x05\x3f\x59\x92\x82\x31\x3d\x48\xcd\x06\x8c\xa7\x5e\x08\xa4\x8b\x72\x11\xdc\x78\x54\x70\xca\x2c\xd7\x42\x6f\x6a\xe9\x93\x5a\xc9\xc2\x65\xb2\xcf\x11\x2c\xc6\x98\xcc\xfc\x3e\x23\x22\x35\x0c\xd0\x28\xe9\xd1\xc5\x05\xcb\xbb\x2a\x30\x24\x27\x93\x59\x29\x3e\x12\xe1\x2e\xa3\x9c\x8f\x61\x38\x80\x0b\xda\x65\xce\x32\x41\xc2\x53\xaf\x6b\xe8\x89\xc0\x57\xc6\xa6\xc4\x42\xce\x12\x62\x78\x8a\x82\x11\x3a\x04\x7b\x16\xe4\x06\x23\x0d\xc2\xc9\x23\xb8\xcc\xf4\x8a\x53\x90\x0e\x67\x16\x98\x31\x24\x60\x46\xdf\xc9\x23\xac\xf7\xe3\x86\xb2\x85\xb2\x2c\x43\x36\x41\xe2\x6f\x65\xef\xa0\x00\x9d\x67\x0d\xfb\xb1\x12\x47\x69\x15\x59\x00\xd9\x83\x85\x16\x2c\xe8\x1a\xd0\x41\xe6\xc6\x98\xf1\xa8\x9c\xd8\x03\xe6\x3a\xf0\x08\x35\xa6\x09\x05\xe7\x80\x65\x70\x22\x08\xa8\xa7\xe8\x26\xfb\x93\x3c\x33\xf9\xf5\x64\x2d\x68\x1f\xe1\x95\x45\xf1\xa2\xef\x85\x3c\x4a\xd5\x67\xf6\xc7\x4e\x14\xdd\x1f\x34\x21\x0a\xe4\x56\x28\x1c\x04\x56\x39\xd1\x43\x2b\x2d\x89\x17\x07\x99\x27\x0f\x26\x44\xbe\xf8\x89\xf1\xb9\x11\x6a\xd5\x9e\x91\xfe\x5c\x7f\xd1\xb4\xaf\x99\x5f\x10\x45\x3d\x59\x67\x2c\x46\x51\x6d\x7c\xb2\xc9\x5c\x2c\xb5\x41\x05\xfb\x10\x96\x5e\x50\xa4\x41\x44\xec\xb7\x13\x81\x45\x71\x67\x38\x5b\x8d\xb9\x88\xd2\x1e\xec\x65\x7a\x8b\xb1\xf2\x71\x34\x6e\x16\x05\x3e\xc3\x6d\xa3\xac\x1f\x64\x17\x33\x9c\x22\x64\x38\x6a\xc0\xea\x81\x0f\x3e\xc6\xbd\x50\x3c\xe0\xc1\x0d\x1b\xc4\xe5\x4a\xa5\x69\x25\x65\x59\xe2\x28\xfb\x09\x82\x2e\x85\xf2\x29\x71\x22\x36\xa0\x11\x13\xf1\xb2\x4c\x77\x39\xf6\xcf\xc6\x88\x22\xeb\x03\xbf\x5f\x07\x3c\xeb\x15\xfd\xbd\xda\x14\xf4\x6f\xf9\xd6\x74\xeb\xd5\x0f\xd0\xf7\xf8\x55\x32\xc6\xc4\x13\xc5\xdd\xa4\xcb\xcc\x1e\xf6\xd0\x9b\x93\x58\x2b\x8d\xd1\x18\x33\x33\xe1\x54\xa7\x25\xe6\x15\x6e\xc3\xd1\x90\x10\x54\x64\xf6\x37\xa2\xba\x07\x3b\xbc\x03\xe7\x64\x07\xeb\xc1\x75\x2c\xe5\x56\xd6\xf0\xd7\xbf\x95\x65\x49\x41\x13\x90\x42\x69\x55\x7f\x16\x75\x6f\x1c\x04\xd2\xa9\x58\xb2\x4a\x7b\x21\x63\xe6\x3d\x30\xa0\x22\x07\xfe\xbd\xb5\xc6\xae\x31\x67\xa1\xf2\x03\xf3\x66\xdd\x6d\x45\xaf\x34\xbc\x9f\x06\xc4\xb7\x15\x60\x6d\x78\x70\x15\x61\x02\x7f\x89\x57\xe3\x4e\x63\x05\xdb\x83\x67\x47\x5b\x45\x5c\x09\xc9\x0e\x97\x61\xa4\x0b\x64\xbd\xd1\xad\x79\x29\x2d\x05\xcb\x60\xfb\x3e\x14\x55\x7b\x69\x45\x88\x55\x73\x6c\x09\xdb\x50\x27\xd7\x45\x74\xb2\xca\xa3\xcf\x0a\xfc\xe3\x61\xa8\x7a\xd3\x95\xfe\xd1\x57\x62\x1d\xf2\x72\x17\xd9\xa8\x6e\x1a\xd8\x4f\x5d\x25\xda\x5e\x76\x5b\x3c\x2b\x7b\xa5\xa5\x3d\x8b\xfd\xa4\x7a\xcf\x75\x6c\x85\x9f\x9b\x9b\x66\xdf\x55\x9b\x99\x82\x3b\xf0\x77\x5e\xfa\xc9\x21\x07\xaf\xf4\xba\xd5\x99\xd8\x2c\x74\x68\x03\x7c\xde\x3a\x75\x04\x2d\xfa\x29\xf3\xa3\x32\x11\xc0\xd6\xaa\xd0\xa5\xa4\xe4\xcd\x11\x5c\x14\x58\x94\x26\x9a\xae\xa1\x5a\xc3\xcd\x14\x7c\x3b\x59\x94\xcd\x7a\x23\x9e\x07\x31\x25\x19\x2e\x7d\x58\x78\x4a\xec\x69\xd5\x0b\x45\xde\x28\x52\x10\x57\xc5\x80\x4f\xce\x22\xee\x59\x60\xbb\x97\x7b\x44\x76\x2f\xf7\x9f\x41\xe4\xe5\xbe\x4c\x66\x7d\xcb\x25\x64\x55\xfc\xbf\x1b\x51\xbd\x93\x0f\xf0\xad\x19\x06\xa9\x9b\xf5\xc2\xf6\x82\x33\x42\xc9\xac\xf7\x63\xe2\x64\x2b\xa4\xed\xdc\xcf\x9f\x82\x48\xb7\xa9\x9e\xcc\xfe\x8b\xde\x2b\x66\x7b\xe5\xb7\xf1\x8b\x4d\xb5\x4b\xdc\x59\x90\x64\x0f\x35\x63\x67\x95\xce\x6a\x61\xe3\xc4\x07\x7d\x96\x95\xe7\x11\x8f\xd3\x3c\x11\x32\xaa\x08\x86\x63\x20\xfa\xaa\x99\x8c\x54\xd1\xec\x23\x74\x6f\xa2\xff\x16\x07\x73\x4a\x3a\x9f\xbc\x09\xbb\xb2\xb4\xe3\x64\xec\xc3\x4c\x5d\x3d\x39\x6f\x86\x88\xae\x2c\x48\x8a\xaf\x54\x0f\x91\xc9\x6a\x97\xc3\x81\xe0\xed\xf2\x7a\x24\xa9\x25\x15\x36\x04\x04\x6b\xbf\x2f\x03\x41\x99\x38\xf4\xdb\x94\x55\x35\xa6\x9e\xa8\x8e\xa5\xdd\x1f\xc8\x0a\x7f\xe7\xfe\x60\xb2\xd9\xc6\xbf\xa0\xcf\xfe\x63\xbb\x59\x3b\x47\xd9\xab\x26\x0a\x90\x3c\xbf\xe3\x90\x76\x92\xb6\x61\x0c\xef\x4d\x06\x58\x9b\x27\x62\x9e\xba\x0e\x5c\x08\x68\xb8\xfe\xde\x9e\x5f\x2a\xdd\xfc\x27\x9c\xd7\x0f\x5b\x71\x4c\x26\x69\x8e\x60\xd9\x8b\x60\x0c\xde\x88\x35\xfe\xb3\x65\xf7\x86\x87\x1b\xa3\x7b\x8c\xf4\xc9\x8f\x3c\x54\x31\xec\x32\x18\x51\x1d\xab\xa8\x87\x2a\xe6\x03\x8b\xde\x91\x78\xd3\x8a\x2a\xe1\xc2\xd4\x2e\xd9\x99\x9d\x60\xcb\xe9\x23\xd5\xd7\x33\x41\x58\xc0\xc1\xa3\x72\xe4\x10\x02\x54\xc4\xfb\x00\x67\x24\x61\x4e\x01\x11\x44\x04\xc7\xc7\x3d\x2d\x3f\x49\x27\x06\xd9\x04\xab\x97\xb1\xc9\x06\xc1\x7f\xaf\xdb\x2c\xf5\x43\xac\x8c\x22\x31\x7a\xc1\x0b\x06\xdd\x5a\x62\xe9\x1a\x23\xc0\x26\x18\xeb\x47\xe8\x8d\x6c\x82\x63\xc7\x8f\x82\x1d\xc2\x64\x43\x2d\x44\x85\x37\xaf\x7d\xd1\x34\x1f\xb9\xa2\x46\x13\x7f\x65\xcd\xf0\x0e\x06\x63\xcf\x14\xab\x28\x74\x7e\xbc\x7f\x15\x3e\x6e\xc5\x1c\x54\x1a\xe9\xe5\xec\x76\xd3\xf9\x6a\x90\xaf\xbc\x44\x8f\xba\xa9\x22\xbc\x6a\xf1\x98\xc1\xd2\xd9\x43\xb8\x89\xd7\x88\xa8\x22\x51\x11\xb2\x0a\xff\x5f\x5d\x25\xdb\x21\xdd\xdf\xc5\xb3\xb6\x8e\xcd\xa3\x60\x55\xd7\x38\xb9\xe6\xd5\x9e\xfc\x97\x4e\xef\x56\x8c\x18\x58\xad\xbe\xce\xf1\xb2\x25\x11\x9b\x67\xec\x87\x52\xb7\x66\xe1\xfb\x66\x4a\x28\xf6\x24\x60\x59\x27\x24\x64\x57\x59\x33\xcc\x1a\xe3\x4b\xf1\x41\xf7\x67\xc4\xea\x02\x3a\x7f\x90\x5e\x0c\xd2\x73\x3f\x2a\x42\x8a\xf4\xf2\xc1\x7e\x8d\x99\x23\xc9\x74\x94\xfe\x50\xbe\xc3\xd5\xd5\x35\x41\xfe\x1e\xd1\x89\x08\xe7\x73\xea\x67\x16\x49\xf9\x4a\x3b\xd5\xc0\x25\x13\x19\x97\xd2\x5d\xd8\x4b\x3a\x89\xe6\xba\xb8\x30\xcf\xee\x8c\x3d\x07\x3b\x78\xab\x9c\xcf\x0d\x81\xcc\xf6\x7e\x49\xf1\x46\xc4\x68\x96\x05\x4f\x19\x5b\x27\x11\x61\x72\x7e\x4b\x6d\x86\xfa\x21\x04\x95\xf3\x08\xe9\x8c\xc9\x85\xe0\xae\xe0\xdd\x8a\x2c\xde\x6e\xc4\x13\x12\xf2\x4c\xc0\x68\x4f\x3d\x1e\xd3\x26\x01\xe6\x74\x04\xa4\xef\xe1\x34\x83\x5f\x6f\x30\x07\xab\x76\x21\xd0\x22\x4b\x1a\x4e\x0b\xfc\x78\x76\x22\x36\xe5\x1d\x7b\xef\xc8\xc0\x7d\xd6\xa8\xe4\x02\xf8\xc2\x88\xf3\x8e\x60\x19\xf6\x70\x8b\xf2\xea\xf2\x45\xc3\x30\x2c\xc7\x88\x77\x75\xf1\x32\xbe\xc5\xe5\xdc\x8f\xbb\xba\x21\x1a\x26\x5f\x44\xd4\xa6\x99\x15\xc1\x09\x1f\xe6\x38\x46\x73\xac\x5b\x8f\x7d\x32\xe1\x45\xce\xd3\x40\x2b\xa7\xde\x93\x1c\xf2\x0c\x36\xb3\xe1\x98\x40\x46\x79\x72\x2c\xe4\x03\x7c\xed\x68\x73\x7f\x26\xbb\x54\x88\x80\xd2\xc6\xbe\xc7\xb4\xa4\x1a\xfb\x92\x3c\x1a\xab\x85\xbe\xa6\x76\xd6\x0c\x30\x50\x17\xd4\x24\xee\x94\xae\xe7\xf3\x80\x31\x29\xa7\xad\x26\x7e\x03\x16\xba\xc1\xb8\xc4\x38\x98\x46\xb5\x5c\xb1\x63\xe2\x9b\x5c\x03\xd8\x9b\xd0\x9d\xda\x4b\xa7\x1c\xdd\x50\xf4\x90\x1a\x9f\xe8\x30\xa4\xe8\x7a\xb3\x97\x3d\x93\x42\x95\x54\xc6\xd9\x6b\x7a\x76\x07\x94\x1d\x63\x48\x1b\x37\x17\xca\xe0\x15\xff\x7b\x65\x38\x5c\x8f\xd5\xcc\x35\x2d\x57\xd4\xaf\xcd\x18\xaf\xa5\xc6\x14\x3a\xb1\x0e\x29\x6d\xa1\x62\xb3\x3f\xa3\x57\x01\x59\x1f\x62\xda\xca\x44\xbf\x06\xbf\xa0\x77\x71\x6a\x33\xba\x2e\x52\x6f\xa6\x1b\x0f\x6c\xc4\xb2\xf0\xf8\x31\x03\x59\x0a\xab\x42\x69\x05\xbc\x77\x17\x78\xa3\x2a\x19\x70\x24\x80\x22\x7b\xb5\x13\x0e\x3c\x5d\x3a\x05\x5e\xbd\xb9\xc4\x1b\xad\x26\x88\x6c\xae\xc1\xab\x6f\x70\x73\x95\x32\x5a\xee\xbd\x90\x95\x8c\xd2\x3a\xc8\x55\xcb\xb8\x83\xf3\x95\xb5\x9f\x92\x0d\x64\xbe\xef\x82\xf0\xf7\xd2\xab\x23\x04\xf2\x93\x76\x9f\xaa\x75\xc1\x4a\x0a\x19\x0b\x8e\x72\x56\x42\x27\x92\x28\x21\xd7\x6f\xda\x08\xd4\x65\xe4\xa5\x03\x12\x96\xcc\xaa\x89\xad\x92\xfe\x9c\x95\x46\xee\x00\x7d\xcf\x95\xd1\xf7\x8f\x50\x5f\xaf\x8c\x6c\x27\xca\xb2\x8c\x1a\x58\xc7\xef\x53\x1e\x4a\xcd\x42\x99\xaa\x13\xee\x6e\xd1\x41\xbb\x88\xf3\xd2\x76\xec\xe1\xf8\xd0\x8f\x6a\x0c\x3d\x3a\x33\xf9\x71\xf2\x08\xba\x01\x6b\x67\x61\x34\xc2\xf9\xc6\x4c\x7e\x13\x59\xc9\x60\xa3\x80\xf4\xdc\x00\x62\x1b\xde\xa6\xce\xe0\xec\xc0\xd0\x46\xb9\x0b\x20\x67\x9e\x7a\x83\x19\x28\xdf\x0e\x2f\x13\xcf\x78\x76\x27\x1d\xa5\xc1\x5d\xda\xcf\xf3\x9f\x8e\x65\x26\xc2\x6a\x3b\x8b\xa3\x86\xd1\xb3\xc7\x9a\x1c\xb8\xd4\xbb\x8a\xd2\x60\xb3\xb3\xc8\x50\x32\xc0\x59\x54\x8b\x8c\xc8\xc7\xde\x77\x29\xf2\xc6\x68\x55\x4b\x2f\x9e\xa1\x2a\x0d\x56\x6f\x7d\x53\xfa\x47\xff\x8c\x43\xa5\x7f\xf4\xd5\x36\x9a\xb7\x9b\x53\xfb\x93\xc9\x70\xc4\xd3\x99\x33\x30\xd3\x47\xa9\xc1\xfa\xd7\xc9\x50\x0a\x9e\x76\x45\x50\x0c\xdb\x82\x03\x7b\x04\xe1\x46\x59\x83\xdb\xcc\x52\x7c\x29\xeb\x87\xce\x9a\x49\x37\x77\x48\xe1\xa5\x34\xa9\xe0\xde\x88\xa7\x46\x15\x33\x93\x88\x26\x55\xc2\x94\xe2\x11\x52\x3b\xe9\xcc\xba\xc8\x96\x53\x5d\x3c\x07\x7b\x8a\xf5\x6c\x61\x33\x55\x6f\xd0\x6e\xb0\xe6\x3f\xc2\x53\xb2\xb6\xe2\x24\x95\x17\x5c\x6e\x75\xe0\x3f\xb0\x79\x52\x15\xf6\x85\x54\xf9\x89\x65\x24\x61\x5f\x36\xaf\x5c\xd6\xb6\xa2\xd3\x33\x73\x91\xea\x7a\x66\xcd\x83\x1d\x94\x96\x7d\x19\x61\x61\xb1\x86\xd4\x85\x16\x3c\x3a\x06\x86\x15\x6e\x40\x95\x4f\x71\x79\x8a\x56\x65\xc1\x39\x01\x9a\x3a\x14\xd4\xc7\x5f\x1e\x8e\x50\xbb\x79\x78\xf4\x02\x1a\x2a\xb4\x4a\xc2\x93\x58\x7f\x82\xcc\x02\x27\xad\x29\x32\xd1\x31\x9d\x3b\x47\x91\x8b\xe0\x3a\xd3\x21\x64\x09\x05\x35\xfc\x87\xd9\xdf\x79\x69\xfd\xba\x1e\x9a\xb9\xe8\xd5\x77\x04\x2b\x7c\x02\x6b\x9f\x56\x27\x46\x7f\xff\x88\x7c\xa2\xe9\xc4\x7d\x3f\x7f\xca\x9d\xeb\x96\x98\x97\xb6\x73\xe8\xba\xf2\x27\x4f\x80\x3d\x47\x9f\x52\x7e\x3b\x34\xb3\xbe\x88\x2a\xba\xbe\x48\xb6\x2b\x7e\x31\x7b\xb1\x3f\xa3\xb6\x74\x8c\x24\x6c\x70\x46\x3f\xd5\x5e\x04\xb4\xe6\xb0\x53\xb9\x83\xb8\xa9\xab\x0d\xc6\x1a\x0b\x90\x5d\x7d\x86\x56\x71\x18\xd8\x08\x37\x9f\x29\x65\xe1\xcb\xb9\x74\xce\x0e\xa0\x17\xc2\xed\x40\x83\xa5\x5c\xd7\x05\x91\xb1\xff\xa4\xfe\x1a\x3c\x2a\x1f\xa6\x0d\x92\x28\x10\x6e\x84\x86\x58\xf9\x1e\x2a\x76\xe9\x23\x51\x0b\xef\x98\x79\xe7\x38\xb2\xa1\xac\x4b\x7a\x4f\x3e\x22\xf8\xe7\x08\x24\xd3\xf0\x28\x4f\x7a\xa1\xe1\x7a\x68\x5e\x20\x35\xb1\x0c\xf9\xbf\xa1\xf3\xe4\xc4\xa3\x55\x56\xdb\xe8\xba\x1b\x03\x4e\x3f\xf3\xc9\xdd\x24\xe3\x3e\xd8\x38\x08\xc2\xb6\x90\x07\x2e\xa5\x9d\x07\xd9\x08\x2f\x1f\xb0\x18\x09\x77\x7d\xcb\x6b\xea\xe4\x4a\xf3\x03\x61\x46\x92\x56\x22\x11\x9d\xe1\x83\xea\x7b\xb4\xc7\x5f\xcc\xbe\x4c\x2b\x41\x37\xcb\x95\x97\x6d\x08\xe1\x40\x37\x4e\x38\x33\x00\x3f\xa1\x9c\xe2\x17\xb3\x7f\x46\x16\xa3\xf4\xec\x0e\xa9\x29\x3f\x4c\xbd\xf4\xc6\xae\x0f\x59\xf7\xf3\x77\xba\xc5\xcf\x76\x10\x16\x8d\xcc\xb5\xc9\x60\x25\x65\x5d\x68\xf1\x73\x90\x3e\xb3\x3e\xa6\x51\xb3\x27\x0a\x67\x37\x7a\x4e\x01\x81\x2f\xf6\x4e\x31\xa9\x8a\x0d\xfd\x64\xe5\xf1\xe2\x3a\xf4\x39\x03\xb8\x27\xee\x56\x28\xff\x05\x57\x8b\xa7\x0e\xdd\x04\xb9\x5c\xba\xea\x43\x52\x53\x0d\x44\xf7\x83\xcb\x34\x86\x26\xa1\x98\x54\xba\xab\x40\xd3\xb9\xea\x7a\x23\xe2\xd9\x77\xb3\x0b\x0e\xbd\x3e\xf2\xbf\x71\x8e\xcb\x9a\x38\xab\x21\x29\xcb\xba\xf0\x2b\xe9\xe0\x2f\x1a\xca\x51\x53\xe9\x6e\x55\x5e\xc4\xdc\x60\xca\xb1\xb1\xc8\x5d\xbb\x8b\xbe\x01\x67\xaf\xb2\x67\x89\xcc\x06\x7e\x31\x26\x91\xa2\x7b\xbc\xad\xc1\x54\x99\x26\xf3\x5c\xe6\xee\x62\xba\xfb\x44\x93\xe1\x76\x20\xcc\xfd\x41\x6c\x4b\x07\x2b\xbe\x8b\x5f\x57\x3b\x96\xdc\x0c\xfc\x1f\x40\x4d\x46\x14\x21\xf0\xa5\x9a\xec\x1d\xf0\xe8\xdf\x49\x39\x2c\x2a\xd2\xe3\x00\x36\x59\x9f\x78\x2e\xde\x2a\x3d\x3d\x66\x7f\xbf\x93\xf5\x87\xbb\xec\xef\xef\xac\xec\x8c\x6e\xfb\x73\xf6\xdd\x87\x11\xf4\xcb\xbb\xef\xb2\x6f\x5e\x59\x00\xfc\x66\x4e\xd5\x39\xc1\x4d\x77\x74\xef\xe1\x14\xaf\xe8\xcc\x49\x83\x4d\xe7\x6a\x70\x5d\xfa\x4c\x87\x61\x2b\x40\x37\x5b\xf1\xd6\xd4\x5b\xf1\xa0\x74\x23\xde\xb9\xee\xfe\x3c\xc2\xb5\x54\xe6\x79\x80\x79\x79\x6f\x11\xcb\xff\x78\x99\xc5\x99\xb3\x16\x8c\xda\x1c\x51\xd7\xc2\x4a\xdd\xc5\x40\x18\xe6\x01\x88\x80\xdc\x2d\x82\x6e\xa8\xfc\xbc\xb8\x42\x9a\xb9\x79\xe1\xdf\x2a\xfd\x25\x9e\xe8\x3a\x8a\x6e\x08\x91\x99\x2f\xf0\xf2\x3f\xe0\x88\xb0\x6e\xb9\x78\x42\x6a\xe3\x43\xe9\x93\xdf\x40\xf4\x33\xdd\xef\xee\xdf\xe8\xd6\xd0\x7c\x4d\x6b\xe2\xf2\x72\x7e\xfa\x93\xa4\xf4\xaa\xda\x89\x13\x7f\xba\xb2\x86\x2e\x43\xab\x70\x0e\xd2\xe3\xf9\x82\xb1\x5e\x3f\x6e\xc5\x19\x59\xde\xa0\x12\x9f\xb4\xb8\xa2\x38\xc3\xb4\xd8\xbc\xf5\xe5\xfd\x77\xdc\x53\xa8\x76\xa9\x99\x12\x5a\x1d\x5c\xbe\xa6\x75\x6f\x0d\x92\xd8\x9b\xee\x33\xcf\x3f\xca\x13\xa6\xe4\xf2\xf4\x99\xe7\xb9\x10\x16\x2b\x32\xfd\xf2\x30\xd1\x1a\xb3\x4c\x6a\x20\xa7\x86\x29\x45\x1b\x34\xed\x4b\xc6\x02\xa4\xe8\xa1\x97\xf5\x3d\x65\xab\xa4\x97\x38\x17\x46\xcd\xdc\xa7\x18\x5f\x59\x33\x70\x33\x37\xc7\xb9\x0e\x48\xb3\x8a\x63\x81\x3c\xa5\x49\xa1\x35\x74\x16\x16\x24\x5d\x5b\x50\x14\x69\x94\x7b\x40\xec\x59\xfb\x6b\x81\xfd\xe5\xd9\xc3\x87\xb6\x75\xe0\xd7\xa3\x71\x7c\xf6\xf6\x53\x1b\x59\x8d\xbd\xca\xbc\x81\xb2\x3f\x7b\xb4\xeb\x06\x1e\x2f\x3a\x67\x01\xbe\x71\x8a\xa7\x1b\xe6\xd9\xab\xe5\x35\xb4\xcb\x22\x3f\xdd\xd2\x64\xbe\x3a\xe4\x78\xb3\x86\xcb\x6c\xe7\xcb\xa9\x5d\xe7\x5a\xc8\xa9\xca\x77\x24\x57\x34\x79\xd5\x27\x47\xf4\x71\xd2\xf0\xc2\x63\x4e\x96\x8e\xa8\x6a\x1e\xd9\x5c\xaf\x35\x79\xc5\xe4\xdb\x7f\xc7\x5c\x8a\x8f\xd5\x92\x4b\xe6\x3f\x34\xfb\x65\x2a\x17\x02\xaa\xd7\xe0\xdf\xb2\x16\x7e\x3a\x20\x7f\x58\x6a\xce\x6c\x5f\xc7\xd6\xf3\x86\x39\xaa\xc4\x8d\xdc\x5c\xbe\xc0\xf0\xc6\xfd\x64\x6c\xf3\xed\x41\xda\x0c\x2e\x26\x38\x39\x54\x0a\xc6\xed\x9c\x0c\x33\x33\x2a\x6b\x2a\x06\xa9\x53\x0c\x3d\x19\xdb\x88\xfa\x20\xb1\xda\xcc\xe4\x7e\x47\x4b\xd6\x7b\xf1\xf3\x27\xd4\x7c\x46\x7d\x6d\xf4\x11\x42\xfd\x81\x36\x21\xad\x95\x67\x8e\xe5\x17\xd4\xa2\xe8\xef\xbc\x5d\x5b\xa2\xe0\x3a\x08\xa2\xed\xda\xe6\x1f\xf5\x6f\x6a\x5c\x3b\x5b\x6f\x45\x03\xce\x3f\xe9\xb0\x4d\xf8\x9c\x92\x80\x70\x6f\x15\x2e\x32\x68\x56\x9e\x86\x87\x14\x0f\x12\x3b\x80\x41\xf4\xea\x01\x10\xc7\x20\xfb\x7e\xce\x6f\xd3\x94\x52\x36\x2d\x8a\x29\xa0\x99\x67\xce\x79\xa0\xc2\x15\xa9\x44\x0c\x91\x63\xde\x41\x6d\x61\x9a\x39\x1d\xc0\x1f\x4c\x13\xaa\x9a\x79\x52\x87\xef\xbb\x79\x3c\x55\xea\x73\x31\x4e\xfb\x5e\xd5\x71\x35\x11\xa2\x03\x1e\x91\xa3\x41\x90\x81\x8a\x6c\x6e\x66\x6f\x8e\x50\x16\x3f\xea\xd6\x58\x3f\x69\x9e\x7e\x53\x3e\xa6\x1c\xa9\x57\xe4\x0d\xb3\x89\xfc\x52\xc3\xe6\x0a\xaf\x94\x38\x29\x57\x8c\xe8\xd1\xc5\x9f\x7b\x90\x8e\x66\xe1\xc3\x69\x4c\xbd\xab\xd8\xf9\x0f\x63\xdf\xbe\x38\x78\x3f\xba\xdd\xed\x6d\x67\x1a\x53\x97\xc6\x76\xb7\x9d\xf2\x87\x69\x5f\xd6\x66\xb8\xfd\xed\x0c\x8d\x6a\x94\xe4\x99\x78\xba\xda\x07\x08\x5c\x5c\x13\x7e\x91\xc4\xf6\xde\x78\xe0\x54\xce\xe8\xfe\x9c\x0b\x88\xe6\xb5\xf9\x11\x4d\xe3\x26\x66\xbc\x49\xef\x52\x1c\x95\x2c\xae\xc8\x2a\xd6\xb0\x61\x92\x34\x24\xd9\xf1\x36\x80\xfa\x54\x92\x87\x76\xc5\x60\x2c\x88\x06\xbc\x54\x58\xd6\xce\x23\x73\x91\xfe\xec\x3a\x03\x65\xf7\x9a\x79\x5e\x0c\x01\x6e\x63\xd3\x6e\x39\x90\x13\xb1\x57\xfb\xb1\xda\x8a\xb3\x99\x44\x4d\xb3\x0c\x75\x54\x4f\x75\x27\x8f\x50\xcd\x33\x7f\x61\x80\x2b\xcc\xd5\x8c\x3b\x9a\x00\xa4\xc9\xd7\x59\x48\xb8\x80\x3a\x76\x04\x60\x57\xc5\x3b\x1d\x6f\x18\x6e\x96\x1f\x5b\x19\x06\xe2\xa4\x0e\xd7\x8b\x65\x15\xe6\xbb\x4b\x9a\xf1\xea\x4c\x18\xe2\x4a\x73\x46\x65\x4c\xdf\xc2\x2c\x57\x70\x2e\x26\x8d\x84\x5d\xac\xdf\x5d\xac\x5f\x0c\xca\x7d\x66\xd4\xba\x28\xde\x90\xe5\x26\xab\x4d\xf3\xcc\x34\x64\x82\x72\x46\xd7\xc0\x47\x67\xb8\x7a\x1e\x42\x1f\xea\xb5\x29\x9e\xcc\x71\x17\xc5\x9d\x1a\x46\x3c\x1e\x34\xae\xc6\xa5\x47\x18\x98\x3b\x9b\xe9\x59\x13\xbc\x02\x4f\x29\x68\x56\x8b\xd4\x34\x5f\xae\x96\x2d\xcc\xcb\x41\x38\x65\x30\xc6\x64\x93\x70\xca\xdc\xf2\x77\xab\x4d\x58\xd2\x0e\x3e\x7b\xde\x0e\x3e\x3d\xf9\xdc\x14\x5d\x78\x8c\xa5\x30\x8f\x97\x7d\x1d\xf0\x94\x1f\x41\x36\x94\x23\xac\xee\x0c\xdf\x60\x96\xfe\x11\x01\x16\xaa\xa5\x95\x7f\xff\x9a\x06\x96\x7c\x1c\xc2\xb9\xd4\x0d\x0f\xb4\xad\xe8\x9f\x39\x53\x50\x3d\xec\xc4\x05\x44\xe8\xc3\xec\xda\xcd\x8d\xf8\x0e\x8b\x72\xba\xc8\xca\x7a\xd4\x3a\x38\x7c\xd3\x92\xfb\x77\x71\xf1\x8f\xa4\xe8\x3b\x9a\x72\x6b\xb9\x94\x0b\x6e\x1e\xdd\x53\xe6\xe1\x69\x03\xb3\x8a\x41\xf9\x6b\x94\x54\x19\xf6\xad\x57\xff\xe4\x56\xdc\x27\xd8\x14\x89\x0c\x43\x1e\x19\x63\x6e\xd6\xf5\x21\xb7\x8f\x2a\xfb\x65\xc2\x10\x07\xb2\xf9\xff\x71\x43\x59\x96\xf3\x40\xec\x0f\xf1\xad\x0f\x9f\x0f\x23\x7e\xe9\x05\x00\x3e\x5d\xd1\x1a\xd8\xfa\xca\xe2\x3d\x48\xdb\x9f\xc9\x9f\xce\xd6\x17\xc1\xb8\x7c\xce\xd1\x42\x56\xf9\x25\x07\xf3\x28\x6b\x5f\x44\xe7\xc7\x35\xec\x72\x1a\x72\x2e\xea\x22\xea\xde\x98\x87\xd4\xc5\x41\xeb\x2b\x3b\x53\x15\x6b\xde\x3c\x0f\xb4\x82\x74\x14\x7f\x27\xdd\x80\x25\x66\x36\x7c\xa8\x8b\x76\xf0\x85\x32\x45\x32\xce\x42\x83\x2f\x06\xe9\x0f\xf4\xbf\x5b\x2b\x75\x53\x18\x17\x5f\xd2\x28\x30\x47\x2c\xe2\xbc\x40\xc1\xda\xc2\xc8\xd7\xc1\xe3\x58\x50\xdc\x75\x05\x2d\x94\xb6\x3e\xa8\x23\xdc\xfe\xa6\x46\x04\x79\x8b\xf1\x80\xa5\x8d\xdc\x2e\xc3\x05\x8d\xc9\xc8\xfa\x10\x8e\x6e\x3e\xd0\xbb\x4d\x9e\x35\xd3\x42\x11\xb5\x70\x19\x75\xc4\x1c\x75\x7a\xa9\x3b\x0a\x3b\xe3\x43\x77\xcb\x93\x38\xb9\x76\x8b\x38\x5e\x1b\xdf\x0a\x8a\x31\x62\x33\x87\xe6\x27\x4a\xa7\xe9\x66\x67\xb2\xb8\x94\xc5\x96\xf0\x4a\x15\xc7\xd9\xe0\x4c\x29\x97\xe0\x29\xe5\xfc\x3d\xb1\x85\x4e\x97\x10\x45\xf6\xc2\xd9\xcd\x61\x1a\xa4\x56\xbf\x25\xaa\x77\x61\x76\x3b\x7e\x5f\x25\x5f\xc5\xdc\xb8\x1d\x26\xb8\x98\xb8\xbb\x0a\x3f\x7d\xb0\x8d\xd2\xb2\x0f\x9e\xb6\xa1\x13\x9d\xbf\x54\x94\x5f\xf0\x53\xc7\x75\xf1\xca\x90\xd2\xf9\x7b\x23\x45\xf1\x5f\x99\xef\xa3\x70\x72\x31\x69\xb2\xb8\x71\xe3\xd1\x0e\x1a\x52\x2a\xff\xc8\x94\xce\x62\x0c\x65\x8e\x75\xe1\x4d\xa4\xa3\xb4\xca\x4c\x8e\xca\x66\x0a\xfa\x61\x62\xc6\xe4\x94\x2e\xbc\xf2\x16\xd3\x5c\xf2\xe4\x05\x79\xf2\x00\x48\xb2\x1c\xbc\x19\x55\x7d\xb1\x3d\xc5\x61\x0f\xce\x87\x48\xcc\x93\xf7\x71\xfe\xb1\xa0\x47\xe5\xd0\xf0\xf8\x19\xdf\x04\xa6\x30\x1d\x69\x9e\xe3\x01\x8b\xe1\xd2\x9b\x87\x99\xce\xd5\x26\x3c\x2f\x2f\xc4\xb9\x42\x24\xab\xed\x2c\xc4\x1f\xa0\x1f\xb7\x62\x15\x70\xc7\xf9\xe9\x1f\xdd\x13\x4d\x5c\x0c\x4f\xf1\x78\x17\xcf\x8f\x34\xca\xa6\xd1\xa7\x4d\x35\x4b\x43\x4f\xc3\x1e\xac\x30\x6d\x91\x24\x4a\x97\x1e\x0c\xb4\x14\xf7\x86\xdc\x67\xe8\x1d\xd3\x68\x0b\x17\x1f\x8b\xc9\xb0\xc9\x41\xf1\xd9\x39\x9a\xe5\xf0\x4c\x85\xe6\xf6\x85\x61\x9f\xd9\x04\xd0\x37\xf2\x45\xd9\x3c\x40\x52\x8a\x37\x3a\xbd\xf3\xb7\x0d\xaf\xed\x29\xf7\xf9\xe1\xb7\x2a\xbe\x90\xd5\x34\x97\xf3\x49\x62\x2f\xd1\x0f\x18\x9d\x95\x9a\x3c\x81\x75\xce\x5e\x79\xaa\x8d\xe6\xde\x04\x86\x38\x1f\xdd\x21\x0f\xfb\x87\x16\x45\xf4\x04\x74\x48\x43\x40\xf9\xb7\xd4\xb5\x98\xdd\x84\xa4\x16\x2d\x88\xd1\xc2\x8d\xd2\xce\x87\xf7\xc3\x30\x68\x71\x4c\x16\xfc\x52\x83\xb4\x40\xbd\x33\x9a\xbd\xec\x8d\x8b\x33\x9e\x83\xf4\x8a\x87\x1f\xc2\x45\xdc\xde\xca\xfa\x01\xbc\xdb\x8a\x5f\x27\xe3\xe7\x37\x5b\x71\x73\x6d\x06\x74\x90\xd5\x4e\xcc\x6f\xd4\x46\x18\x22\x3c\x24\x9f\x44\xef\xff\x25\x33\x10\xe8\x3e\x27\x72\x94\xcf\x45\xd5\xfa\x30\x3f\x8a\x14\xf4\x34\xae\xc2\x1d\xf9\xc0\x5b\x78\x1a\x5e\xaf\xa5\x01\x6b\x9d\x02\x30\x1a\x1e\x02\xe9\xa9\x56\xc8\x09\x81\x47\x0f\x9a\x93\x3a\x7c\x18\xc9\xa0\x24\x6e\x81\xbf\x57\x9e\x6e\x89\x16\x5c\x34\x47\xa9\x6b\xea\x5f\xf2\x2b\x88\xaa\x3b\xf4\xaa\x3b\x24\x30\x88\xff\x6d\xd8\x88\x6e\x67\xb4\xa6\xb3\x72\x18\xb8\x97\x60\x7a\x12\x0f\x8f\x87\xe7\x70\x89\xb1\x40\x99\xd1\x6e\x9e\x44\xc5\x85\xdc\xb9\x5b\x23\x27\x5d\x18\xbd\x44\xbd\x21\xf8\xd7\x8a\xdf\x82\xc2\x02\x61\x43\xb0\x1b\xd5\xb6\xd4\x51\xe2\xc5\x31\x09\xc7\xaf\xbb\x09\x4f\x60\xb5\x18\x45\x7a\x8d\xf9\xe4\x1b\x72\x56\x64\x3a\xd4\x3d\x78\xad\xa8\xf5\x98\xcd\x2d\x22\x0c\x04\x21\x18\x06\x67\x51\xee\x60\x4e\x58\xa0\x6b\x7a\x31\x04\xa1\x59\x70\x23\x75\xd6\x99\xfc\xc1\xf0\x85\x97\x85\x1a\x8f\x2e\x12\x8b\xca\x57\x7e\x91\xf6\x27\xd8\x4e\x61\x4d\x63\x46\x48\x17\x85\x61\x66\xed\x2e\x7b\x45\x2c\x28\x74\x9b\xbe\x88\xb6\xc6\x0e\x31\x7e\x1b\x44\xcc\x16\x96\x5e\xd3\x2d\x96\xa1\x9b\x27\xbb\xd9\x17\xfb\x83\x71\x90\xde\x60\x89\xaf\xf8\xa0\x48\xe8\xfd\xcf\xe0\xd8\xdd\x6c\x2b\x93\x83\x1b\x7e\x21\x56\xcd\xe2\xc3\xc4\x28\xb4\x8d\xa8\x93\x54\x90\x8b\x37\x27\x9d\x41\xfe\x2a\xbe\x86\x2f\xde\x49\x2d\x3b\xb0\xf1\x6d\xfc\x30\x39\x45\xfd\x0b\x7a\x79\x41\xe9\xb9\x50\xa7\x95\x21\x3d\x8b\x69\x98\xd2\x47\xf3\x30\xdf\xc4\x14\xd5\x37\x71\x7d\x59\x96\x69\x50\x87\x62\x6c\xa8\x46\xf8\xe6\x95\x8b\x37\x4e\x40\x6e\xb2\x1d\xa1\x62\x0c\xa3\x2f\xaa\x89\x10\x5c\x5e\x81\xcc\xb9\x51\x15\x1f\x57\x59\x5c\x0b\x79\x47\x24\xb8\x05\x5f\x1f\xe8\x65\x7f\x76\x44\xf3\x45\xf7\x41\x6a\x0d\xbd\x13\xeb\x74\x6d\xe2\xb8\x28\x4a\x57\x23\x31\x07\x18\xc0\x4b\x4a\xbc\xe3\x0d\x8b\x17\x0f\xda\x9c\x1c\xbf\xe7\x5d\x8a\x97\xe7\xe8\x13\xe2\x2d\x3b\x55\xe9\xd9\x1a\x6e\x98\xb4\xad\xaa\x95\xec\x8b\x80\x7a\xbe\xaf\x49\x6f\xfd\x79\x91\xb5\x0b\x08\xd4\x0d\x34\xca\x1b\x7b\xcb\xa4\xdc\xc4\xad\xfb\x29\xe5\xe1\xe8\xdd\x45\x52\xb3\x3f\x28\xdb\xdc\x8c\xd2\xfa\xf3\xcc\x62\x36\x43\xc5\x70\xe2\x93\x74\x16\xd1\x74\x23\x3c\x3e\x76\xfd\x19\x4d\xfd\x61\x01\x30\x79\x73\xb4\x95\xde\x9c\x44\x70\xe4\x32\x5c\x35\xcd\xb7\xaa\x51\x72\xd1\x6c\x62\x6d\x12\xf0\x5b\x18\x4d\x42\x5e\x16\xc5\x9b\x36\xaf\x3b\x31\xbd\x9c\xf6\xbd\x72\x87\xf9\xe5\x6c\x7c\x4c\xdd\xa4\x06\x42\xb1\x15\xc5\x99\xde\xee\x47\xfa\xc3\xdb\x88\xd3\x48\xe3\xe2\x79\x7e\x63\x34\x7b\x31\x6f\x42\x7b\x02\x23\x51\x0b\x56\xee\xfb\xf3\x86\xaf\xc4\x28\x27\xa8\xd2\x6f\x11\x84\x31\x7b\xee\x97\x51\xcc\x8c\xb5\x1b\x75\xad\xc9\xc1\x04\xcb\xb8\x7c\xdd\xf8\xda\xcf\x2b\x70\x66\x44\x3f\x72\xf0\xf3\x5f\x0b\x21\x56\xef\xe5\x00\xab\x9d\x58\xf1\x16\x4c\x13\x56\x98\x29\xae\xbe\x9b\x7f\x17\x00\x1f\x27\x48\x42\x2b\xea\xb1\xe8\x5a\x39\x8c\x42\x69\x15\xbd\x57\x17\xb5\xc3\x30\x7e\xe2\x1f\x19\xc0\xfd\xa9\x38\x98\x2d\x6b\x72\x10\x2d\x8a\x97\xdf\xcb\xce\xad\x76\xe2\xe7\xd5\x78\xf6\x07\xa3\x57\x5b\xb1\x0a\xb1\x69\xf5\x89\x16\xfc\x85\x7f\x9e\x80\x16\x51\x36\xfb\xd7\x90\xd3\xc6\x27\x88\xe9\x9f\xcb\x3f\x95\x7f\x5a\xc5\x6c\x77\xf5\xa3\xed\xff\x31\xfe\xdb\x58\x31\x1d\x69\x77\xf9\x9b\x1a\x67\x08\x1f\xf9\x5d\xab\xd5\x2e\xa1\x13\x22\x34\x05\x76\x62\xf5\xcd\xd7\xb8\xe5\x5f\x56\xe1\xd1\xdf\x8a\xf8\xff\x4f\xc5\xdf\x3e\xa5\xd7\xec\x34\x39\x74\x34\xa4\x09\xf3\x29\xf8\x75\x02\xe7\xff\xc0\x49\x93\x5c\x40\xc8\x82\x4f\x43\xc8\x10\xe5\x69\x61\x28\x94\xde\xa8\xcb\xe2\x81\x7e\xd6\xc2\x21\xd0\x33\x7a\x25\x23\x06\xf9\x00\x62\x1a\x1b\xfe\xa9\x93\x6c\x9a\xfc\x64\xec\xc3\x36\xeb\x4b\x93\xa9\x9a\x36\x07\xe6\x52\xe7\x27\xbe\xb1\x99\x1b\x62\xf8\xf9\x88\xe5\xef\x81\x94\x62\xfd\x96\xce\xd3\x41\xb9\x9d\xa8\xfe\xf2\xfd\xc7\xbb\x37\x1f\xde\x8b\xaf\xa3\xa6\xaa\x4d\x11\x5a\x9b\x44\x98\x9b\x2c\x9d\x3d\xac\x74\x7e\x76\x30\x1c\xc1\x7e\x5a\xa3\xf6\x76\xb7\xb7\xfc\x27\x55\x96\x1b\x32\xf6\x80\x90\xfa\xd2\xff\x1d\x00\x00\xff\xff\xa8\x05\x7e\x01\xd7\x45\x00\x00" func runtimeHelpPluginsMdBytes() ([]byte, error) { return bindataRead( _runtimeHelpPluginsMd, "runtime/help/plugins.md", ) } func runtimeHelpPluginsMd() (*asset, error) { bytes, err := runtimeHelpPluginsMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/help/plugins.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeHelpTutorialMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x57\x4b\x8b\xe4\xc8\x11\xbe\xe7\xaf\x08\xaa\x0f\x53\x65\xaa\x35\x30\xec\xa9\xa1\x0d\xbb\x03\xeb\x6d\xd6\x86\x65\xa7\x31\xf8\xa6\x94\x14\x2a\xa5\x3b\x95\x29\xf2\x51\x6a\xd9\xac\x7f\xbb\x89\x88\x94\xaa\xaa\xbb\x67\x0f\xc3\x74\xe5\x23\xf2\xfb\xe2\xf1\x45\xe8\x0e\x9e\x73\xf2\xc1\x68\xab\xd4\xf3\x60\x22\x98\x08\x1a\x9a\x60\xb0\x07\xe3\x52\xf0\x90\x3c\x8c\xa6\x0d\xfe\x53\x84\xd6\xbb\xde\x9c\x72\xd0\xc9\x78\x07\x71\x89\x09\x47\x48\x83\x4e\x30\x1b\x6b\xe1\x64\xce\x08\xd1\x8f\xa8\xa2\x19\x27\x8b\x80\xaf\x9a\xfe\x8f\x10\x07\x3f\x1b\x77\x82\xc1\xcf\x64\x6f\xb5\x83\x10\x31\x25\xe3\x4e\xf1\x08\x01\x1b\xe3\x3a\x78\xc1\x25\x1e\x41\xbb\x0e\x72\x44\x55\x1b\x67\x52\x65\xb3\xae\x6f\xaf\x31\x20\x5a\x5a\x7c\x0e\x60\xcd\x8b\x71\xa7\x4a\xa9\x5f\xfc\x84\x7d\xb6\x76\xa1\xf5\x4f\xd6\x42\x4f\x26\x13\xd1\xca\x91\x76\x2a\xa5\xbe\x21\x42\xfd\x57\x18\xd0\x4e\xd0\x61\xaf\xb3\x4d\xf4\x66\x0d\xbd\x0f\xa0\xc1\x9a\x98\x40\x3b\xc0\xd7\xc9\x6a\x27\x44\x7d\x0f\x69\xc0\xf5\x34\x41\x24\xa8\x04\xbb\x52\xea\xee\xee\x0e\xbe\x15\x16\x4a\x3d\x39\xc1\x76\x14\x64\x2b\x3d\xd0\xc4\x35\xf9\x80\x1d\x18\x07\xf5\xff\x3e\x57\x42\xe6\x33\x9f\xfe\xbc\x9e\xab\xfe\x1d\xbd\xab\x8f\xa0\xa1\x37\x16\x15\xbb\xd6\x44\x68\x03\xea\x84\x1d\xa3\xe8\x4d\x88\x09\x92\x19\x91\x9e\x80\x90\xcb\x8b\x15\x3c\x25\x09\x1e\xd9\xe0\xfb\x30\x0f\xa6\x1d\x60\xf0\xb6\x8b\xa0\xad\x55\x74\xff\x02\x89\x5d\x83\x26\xc0\x59\xdb\x8c\xb1\x82\x67\x0f\xed\xa0\xdd\x09\xc9\x01\x7e\x22\xee\xcc\x03\x5a\x72\x88\x49\x03\x86\xf5\x40\x1a\x50\xf1\x35\xa2\x43\x66\xeb\x5b\x0a\xfc\xfe\x11\x7c\xd8\xee\xa7\x65\x42\x30\x89\xce\x77\x26\x60\x9b\xec\x42\xf8\x2c\x42\x8e\xc6\x9d\x94\x90\x50\xea\xb7\x80\x31\xc2\xd7\x14\xec\x3d\x52\x84\x4f\x5e\x42\x3f\x8e\x04\x78\xf4\x1d\x4a\x7a\xb0\x3d\x7a\xb5\x20\x15\x16\x35\xec\x05\x90\xea\x73\xca\x01\x8f\xf0\x24\xb9\x99\x23\x87\xfd\xfd\xf9\xe4\x81\x82\xd9\xea\x84\x30\xd1\xdb\x94\xa7\xf2\xfc\xa1\x82\xe7\x01\x0b\x65\xc5\x66\x92\x7e\x41\xc0\xbe\xc7\x36\x81\x19\x47\xec\x8c\x4e\x68\x17\x46\xc4\x07\xb4\x8d\x1e\x1a\x84\xa8\xcf\x14\x30\xff\x5d\xe7\xa8\xe8\xa5\x74\xae\x82\x22\x26\x62\x32\xed\x0b\xe0\x19\x1d\xe8\x3e\x61\x71\xa1\xf5\xb1\xe4\x7d\xa5\xd4\xbf\x8a\x53\xf9\xb5\x0b\xa7\x08\xd6\xb7\xda\x8a\x67\xdb\x01\x46\xd4\x2e\x7e\xe7\x15\xef\xec\x02\x83\x3e\x23\x67\x85\xc4\x92\x1e\xe2\x22\x96\x38\xd1\x46\x93\xfb\xbe\x40\xa0\x77\x78\xa3\x82\x9f\x7d\x58\x8b\xfb\x08\xa6\xe7\x6d\xb2\x05\x69\xf6\x2a\x4e\xd6\xa4\x08\x7e\x42\x27\xa1\xa2\x5d\x09\x17\x07\x80\x31\x42\xd2\x4d\x34\xff\x41\xf8\x52\x1f\xf9\xa1\xf5\xf7\x05\x5c\x83\xf0\x05\x8c\x63\x7c\x6d\x0e\x01\x5d\x2a\x70\x2a\xf8\x91\x88\x8b\x0a\xf0\x05\xe7\x13\xbb\x5c\x8a\x5d\x5e\x58\x53\x95\x63\xa0\x3e\x8a\x41\x05\xbf\xf8\x19\xcf\x18\x2e\x69\x1e\x13\x87\xe0\x03\x97\x96\xbc\xfa\xd8\xce\x47\x0e\x99\xb5\x13\xbf\xd7\x85\x1b\x27\x1b\xb3\x62\x7e\xc6\xa9\xdf\x73\xb3\xb0\x85\xa2\x79\x3f\x80\xa7\x2a\x9b\x4d\xc4\x02\xc9\x67\xdb\xc1\x94\xc5\x50\xef\xad\x15\x21\x25\x11\xb9\x05\xf2\xa0\x54\x5d\xd7\xf4\xa7\xfa\xaf\x02\x00\xd8\xfd\xa5\x0a\xcd\xee\x01\xe4\x17\xaf\x14\x1c\xbb\x07\xf8\xc2\x8b\x7f\x1c\xd5\x9b\xf5\x1f\xd4\x1f\x64\x46\xa9\x7f\x5c\x7c\x4b\xce\x78\x47\x63\xe3\x20\xf0\xd7\x84\xd3\xa9\x1d\xf8\xf0\xc9\xfa\x06\x6a\x82\x50\x57\x4a\x3d\x15\x8f\x30\x1b\x6b\x5e\x38\x2a\x2f\xce\xcf\x30\xfa\x80\xa0\x1b\x9f\x13\x29\x14\x5f\xd5\x67\x6d\xac\x6e\x2c\xae\x21\x38\x42\x44\x91\x9c\xba\xac\x10\x84\xc9\xb4\xb0\x5f\x95\x7c\x5d\x3f\x14\x45\xfe\xf5\xa2\xd1\x4a\x5d\xfd\x80\xd9\x87\x17\x42\x3d\xe6\x02\x34\xea\x11\x61\xd6\x0b\xe8\xb8\x5a\xa9\x80\xeb\x6b\xeb\x36\x69\xc0\x51\x54\x4a\x40\xbc\x55\xef\xad\x1b\x5c\x65\x84\x52\x57\x29\xb1\x65\xc4\x0d\x7f\xee\x77\x35\x4b\x4d\x60\x9f\x06\xec\xfc\xfb\xa8\xab\xdb\xa8\xdf\x3e\xf6\x3e\xea\x62\x6f\xf7\x00\x3b\x32\xb7\x5b\xe3\xf9\x4f\x0c\x0b\x48\x5b\x7e\xab\x1f\x5b\xdf\x2d\x7a\x6c\x4a\x47\x81\x66\xb9\xb0\xa6\xda\x5d\x0f\x82\x6e\xc9\x4f\xf5\xaa\xca\x47\xd5\x94\x04\xdd\xdc\x4c\x2c\x46\xd2\xca\xd9\x24\xf1\xf3\xaa\xe0\xb3\x77\x9f\xd2\x5b\x85\x54\xf5\xf7\x7d\xc8\x19\x62\x5c\xef\xc3\x28\xed\x58\xb2\xe5\xaa\x0b\x1f\xc5\xa5\x92\x82\x4c\x84\xb8\x35\x08\x8d\xcf\xae\x93\xca\x9a\x07\x9d\x94\xe0\x96\x6e\xbc\x65\xd9\x96\x5d\x50\x5f\xd9\xac\x25\xaf\xde\xa4\xd9\xf5\x81\x35\xd5\xbe\xde\x0c\x45\xcc\xf7\xef\x59\x6f\x39\xef\x10\x3b\xe1\x30\xf9\x19\x03\xa9\xb1\x28\xeb\xd6\xa6\x23\x4c\xc1\x9f\x4d\x87\x17\x15\xa2\x6e\xc5\x88\xb6\xf9\x47\x89\xce\x7c\xe5\x49\xa0\xe8\xf3\xdb\x44\xac\xa9\x5f\x99\x28\xbd\x9f\x47\x01\x9b\x65\x92\x80\x75\x92\xa0\x71\x61\x1e\xd0\x49\xbb\x85\x98\x74\x48\x32\x0a\x98\x08\x18\x23\xba\x64\x58\xed\x34\x78\x87\xf7\x7c\x77\xb2\xf9\x44\xa2\x4f\xbd\x50\xfe\x06\x47\x45\x63\xa2\xcc\x67\x04\xaf\x2a\xd3\xe3\x9a\xf0\x22\x1c\x34\xee\x71\x6b\x90\xb1\xef\x3d\x2b\x01\xd7\x2c\x32\xe1\x50\xaa\xe9\x35\x87\x54\xf2\x97\xe2\x90\xd0\xb2\x51\x7c\xc5\x36\x27\x31\xd4\xe8\x38\x6c\x89\x55\x9f\x3c\xd1\xab\xc1\x8b\x7f\xd7\x96\xc1\x93\x88\xa2\xb6\xe6\x2e\xad\xf0\x7a\x53\x5c\xf5\x37\xbf\x26\xdd\x5a\x1c\x5d\x69\xd0\xcd\x42\xa5\x98\xd6\x42\xb8\x2d\xc7\x8d\x8a\x54\xa2\xcd\x5a\x95\xee\xc3\x81\x81\x47\x30\xe3\xe4\x43\xda\xef\x44\x2b\x64\x79\x77\x28\xa7\xe2\x80\xd6\xbe\x3b\xc4\xab\xbb\x83\x52\x7d\x76\x9c\xb2\x40\xcf\xec\x0f\x5c\xe1\xf7\xf7\x90\x42\xc6\xd2\xdc\xfd\x19\xc3\x1c\x4c\xa2\x99\x6d\x01\x7c\x35\x91\x81\x16\x27\x92\xd7\xc5\x87\xdb\x55\x8a\x12\x3b\x72\xf4\x9d\xe9\x97\x9b\xb2\xad\xb6\x9c\xe4\xe3\x82\xb5\x7a\x0e\xcb\x4f\xc6\x75\xbf\xe2\xb2\x5f\xd5\xe5\x08\x3b\x9b\xf5\x43\x89\x7e\x75\xf2\x21\xbb\xdd\x91\x71\x1d\x14\xba\xee\x0a\x39\xef\xed\x9b\x49\xc0\x0b\xeb\x26\xf7\xf0\x08\xcd\x54\xfd\x94\x7b\x5e\x36\x3d\xad\x3d\xfc\x6c\x2c\x3e\x2f\x13\xee\x0f\xf0\xf8\x08\xbb\x93\xdf\x11\x3c\xb7\x35\x30\xc6\x8f\xd7\xf4\x29\x9f\xcb\xa4\xd2\xfb\x80\xa7\x40\x15\xff\xf6\x7c\xaf\x6d\x5c\x2f\x44\x74\x1d\xf8\x9c\x58\x5c\xa9\x00\x3a\x12\x93\xbd\x71\x31\xa1\xee\x68\xd4\x0f\x98\x72\x70\x1c\xdf\x74\xd8\x4c\x71\x48\xaa\xdf\xb3\x7b\x72\x09\x03\x09\xc9\x19\xbf\xd1\xda\x7e\x27\x79\x07\x3b\xa8\x2a\x62\x51\xfd\xa6\xd3\x20\xbe\x38\xca\xd3\x62\x85\xdc\x42\xff\x58\x8e\x7f\xb4\x09\x03\x7d\x5e\x9c\xd1\x2e\xd7\xad\xfe\x84\x09\x82\xe9\xd6\x6f\x8e\xfa\xe2\xfc\x1a\xac\x71\x65\xf8\x95\xd6\x40\x93\x8e\x71\xb8\xce\x48\x1f\x69\xe8\x9f\xf5\x87\xf7\x11\x5c\x9b\xc5\x9f\xc8\xae\x08\xc0\xf6\xf5\xc0\x0a\x73\xfd\x21\x28\xba\x92\x23\x5e\x77\xed\x72\xe9\x63\x4d\x5d\x37\x0f\x95\xfa\x7f\x00\x00\x00\xff\xff\xac\xb6\x3b\x9c\x8d\x0e\x00\x00" func runtimeHelpTutorialMdBytes() ([]byte, error) { return bindataRead( _runtimeHelpTutorialMd, "runtime/help/tutorial.md", ) } func runtimeHelpTutorialMd() (*asset, error) { bytes, err := runtimeHelpTutorialMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/help/tutorial.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimePluginsAutocloseAutocloseLua = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x55\x51\x6b\xe3\x38\x10\x7e\xcf\xaf\x18\x7c\x0f\xb1\x69\xec\xab\xef\xe9\x28\xf8\xe0\xda\x3b\x96\x40\x68\x97\x76\xd9\xee\xd2\x16\x2a\xcb\xe3\x58\xd4\x91\xcc\x78\xb4\xe9\x52\xfa\xdf\x17\xc5\x49\x6a\x67\x5d\x27\x81\xfa\x41\x89\xad\xf9\x34\xa3\x6f\xbe\x99\xf9\xfa\xff\xf5\xcd\xf4\xea\x12\x12\xf0\xe2\xe8\x34\x3a\xf5\x46\xa3\xd2\x48\x51\x82\xb5\xac\x4a\x48\x40\x2d\x2a\x43\xec\x7b\x0b\x25\xc9\xfc\xe9\x3e\x7a\xc1\xc6\x84\xf3\xbf\x5b\x16\xee\x75\xbb\x27\x2c\x1b\x59\x9a\x1a\x3f\x0b\x45\x35\x24\xf0\xe2\xdd\x7b\xf7\x9e\x37\x01\x6f\x3c\x76\xeb\xe3\xa3\x5b\xfd\xc0\xad\x2f\xaf\x6e\xbd\x7b\xf0\x5e\x5b\xe8\x4b\x5c\x96\x4a\xb7\xf0\xbf\xd9\x8e\x72\xab\x25\x2b\xa3\x41\x16\x82\xfe\x65\xbf\x66\x9a\x80\x0a\x46\x00\x00\x61\x08\xa5\x15\xa0\x74\x86\xcf\x4a\xcf\x41\xd5\x60\x34\x82\xc9\x73\xc8\xc9\x2c\x60\x6e\x56\x66\x84\x6c\x49\x37\xb7\x8d\xae\xad\xc6\xed\x31\x61\x1c\x8c\x50\x67\x2d\x2f\x46\x3b\x03\x3f\xad\x26\x40\x8d\x93\xdc\x10\x28\x48\x20\x9e\xc0\x1f\x3b\x37\xce\x9a\xf3\xdd\xa3\x72\x20\x48\x92\x4d\x94\x5d\xc3\x3b\xf5\x30\x81\xbf\x02\xe0\x02\xf5\x16\xe1\x9e\x86\x09\x69\x69\xa6\x34\x42\x02\x69\x15\x9d\xdb\xfc\xcc\xbd\xf9\x69\x15\x5d\x58\xaa\x0d\x45\xdf\x83\x51\x07\xa5\xf2\x8d\x9b\x35\x72\x02\x6f\xc6\xdf\x4e\xe2\xe0\xf8\x40\xdc\x93\x56\x67\xe7\x42\x3e\xd5\x95\x90\xe8\x07\x7d\xdb\x8d\x8b\x6b\x35\x2f\xb8\xcf\x80\x50\x3c\x75\xbe\xae\xa8\xdd\x89\xbc\x15\x29\xfc\x03\x31\x08\x9d\x81\xdf\xa4\x66\x5a\xdf\x1a\xca\x2e\x0a\x41\xfe\xc0\xfd\xc2\x38\x08\xc0\xd0\x10\x05\xe1\x3e\x0a\xdc\x11\xfd\x1c\xf4\xde\xa1\xef\xff\xfe\x84\xc7\x1f\x99\xf0\x36\x6d\x49\xb2\xd6\xb2\xa3\x4a\x48\x46\xba\x30\x56\xf3\x54\xdf\x30\x29\x3d\xdf\x50\xb2\x62\x49\x1b\x86\x63\xd8\x3d\x79\x97\x9a\x30\x74\xdf\x61\x1c\x8e\xa1\x40\x42\x57\x6c\x6c\x20\x43\xc2\x1c\xb5\xc4\xd5\x66\x65\x94\x66\x24\xb7\xf1\x76\xe6\xcc\x48\x58\x16\x4a\x16\x0e\xe2\x78\x5a\x08\x56\x52\x94\xe5\x4f\x58\x88\x0c\xfb\x1c\x2d\x0b\xd4\x20\x8d\xfe\x81\xc4\xae\xb0\xe7\x06\x6a\x26\x2b\x79\xe5\xb3\xb4\xa2\x0f\x34\x65\xd0\x88\xd9\xca\x24\xc5\x75\x64\xe4\x62\xcb\x20\x45\x29\x6c\xdd\x04\xb9\xad\x75\x7c\xae\xd0\x1d\x29\x40\x1b\xbd\x8d\xbd\x71\xd4\x23\xff\x55\xa6\xa6\xba\x46\x62\x3f\xec\x5c\x6f\x32\x58\x6d\x03\xa5\x34\xc3\xfc\xf0\x4a\xda\xfd\xbf\xf9\x5d\xb7\x37\x26\x8b\x3b\xcd\xac\x22\x6c\xe2\x5d\xf7\x59\x3f\xad\x1a\x67\x07\xcb\xb0\x63\xec\x3a\x23\x24\x43\x85\xd7\x06\x68\x7c\xe6\xfd\x88\x93\xb8\x8d\x59\xba\x29\xd0\xc8\xf5\x13\xf2\x0c\x45\xa6\xf4\xfc\xb6\x50\x8c\x4d\x57\xda\x28\x7b\xd4\xdb\x99\x3b\xd3\xa4\xdb\x9b\xb7\xd1\x77\x0a\xb6\x0d\x78\xb7\x64\x55\xde\xba\xca\x30\x7c\xa0\xb3\x76\xf3\xd0\x2b\x89\xc6\xe4\x8b\x48\x7b\xb7\x87\xd4\xe7\xdd\x6b\x0f\xa2\x08\x96\x75\xef\xc1\x37\x2c\x88\xaf\xf2\xd9\xbb\x9e\x07\xc5\xb8\x96\x57\x2e\xca\x1a\x0f\xd2\xe4\x7e\x51\xbe\x8d\x99\x8d\x20\x0f\x1b\xb2\x47\xc9\x16\x3e\x64\x52\xba\xf1\x34\x24\xf8\xe3\x47\x40\x5a\x9d\xfd\x87\x25\x72\x3b\x17\x7b\xe9\xfb\x15\x00\x00\xff\xff\x58\xaf\xc0\xe6\xc3\x09\x00\x00" func runtimePluginsAutocloseAutocloseLuaBytes() ([]byte, error) { return bindataRead( _runtimePluginsAutocloseAutocloseLua, "runtime/plugins/autoclose/autoclose.lua", ) } func runtimePluginsAutocloseAutocloseLua() (*asset, error) { bytes, err := runtimePluginsAutocloseAutocloseLuaBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/plugins/autoclose/autoclose.lua", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimePluginsCommentCommentLua = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x58\x6d\x6f\xdb\xb6\x13\x7f\xef\x4f\xc1\xbf\x5a\x03\x92\x63\x2b\x0f\xff\x77\xde\xbc\xa2\x0d\xb6\x76\x58\xd6\x02\x49\xd6\xa5\x08\x3c\x80\x96\x4e\x32\x6b\x8a\xd4\x48\xaa\x89\x5b\x74\x9f\x7d\x20\xa9\x67\xca\x8e\x13\xac\x18\x66\xa0\x88\xf9\xe3\xdd\xef\x8e\xc7\x7b\xa0\xfb\xfe\xc7\xcb\xab\x9f\xdf\xbd\x45\x0b\xe4\x9d\x86\x27\xe1\x89\x37\x1a\x51\x1e\x61\x8a\x0a\x45\x28\x5a\x20\x92\xe5\x5c\x28\xdf\xcb\x48\x24\xf8\xb1\x06\xbd\xa0\x94\x88\x38\x4b\x48\xea\xc8\x58\xb8\x96\x5a\x15\x49\x02\xc2\x91\xb2\xb0\x17\x54\xe6\x12\x85\x16\xe8\xcb\xd7\xd1\x28\x51\xb7\x1e\xce\x71\xb4\x06\x4d\xe4\x2d\xb5\x67\xcf\xd0\x58\x7a\x66\x67\x85\x95\x85\xe6\xf3\x1a\x8b\x2c\x72\x7c\xdc\x20\x47\x47\x2e\x96\xe1\x0d\xf4\xe9\x86\x4c\x44\x62\x2b\x15\xa6\x0e\x2c\x65\xc9\x39\x41\x63\x89\x26\xc7\x16\x8e\x1d\x43\x31\x16\xca\x05\x79\xb4\x01\x91\x10\xea\xb8\x00\x34\xb3\xd0\x6c\x56\x63\x09\x91\xeb\xbe\x5c\x1a\xcb\x48\x90\x5c\x39\x38\x95\xd4\x31\x97\x72\x07\x5a\x63\xb9\x01\x4a\x1d\x5b\x6b\x95\x95\xe0\xf7\xff\x33\x30\x9a\xcd\x7e\xb0\x5b\x84\x11\xbb\xf3\x5d\x2d\xfd\x11\x7f\xc2\x0e\xb5\x06\xdb\xce\xb5\xb7\x08\xfb\x88\xcf\x2c\xfc\x45\x3b\x8d\x9e\x7d\x2d\x77\x0a\x4a\x70\xff\x30\x1b\xae\x28\x61\x0e\x0b\x2d\xb0\xe3\x77\x86\xc5\x26\xe6\x77\x6c\x87\xef\x2c\x25\xec\xbe\x4f\xcf\x48\xd6\x87\xf8\xea\xa3\x9b\x3f\x3c\xc2\x55\x50\x7c\x7b\xdb\x81\xdd\xc8\xb1\x8c\xaa\xd4\xf8\xa2\x37\xca\xc3\xe4\x20\x9c\x84\xc9\xd7\xb9\x43\x9c\x73\xb6\x1d\x00\xef\x40\xc8\x75\x7d\x39\x2d\x0a\xc1\x95\x7b\x93\xf9\x56\xad\x39\x73\x64\x0d\xfa\xff\x3e\x2c\x8a\xd5\xd6\xc5\xa4\x7b\x53\xfa\x60\xee\xd5\x0e\xba\x25\xff\x74\xd3\x48\xde\x91\xc4\x25\x55\x50\xde\xc1\xb8\x81\x78\xe6\x10\xaa\x3b\x92\x0e\xe5\xc8\x27\x87\xf0\x7e\x67\xb2\x6e\xb1\xcb\xfb\xb9\xa2\x6d\x31\x7c\xde\x91\xa9\x9f\xbb\x25\x37\x4a\x0a\x16\x29\xc2\x19\xe2\xec\x95\xe9\x55\xef\x72\x60\xfe\xaa\x48\x82\x11\x42\x08\x91\x44\x77\xb6\xf0\x0a\x94\x22\x2c\x95\xba\x95\x64\x19\x30\xa5\xb6\xb9\x29\xf1\x05\x62\x84\x22\xb5\x06\x66\xc4\x4b\x95\x44\xdd\x76\xb5\x74\x47\xb0\x2a\x4b\xf4\xd7\x80\x8e\xfe\xec\xb5\xb3\x97\xb2\xa6\x01\x2a\xe1\x11\x9c\x65\x0c\x6a\x6d\x16\x8f\xaa\xbf\xfa\x5f\x13\x1b\x22\xcf\xad\x2a\xc4\xfe\x2a\x9f\x22\x4a\x18\xbc\x9d\xa2\x92\xef\x12\x52\xb8\xb7\xe1\xb2\x4d\x5e\x6f\xa3\x05\x5a\xe5\xe1\xab\x22\x99\x5f\x10\x06\xbe\xd1\xa8\x43\x2a\x95\x20\x2c\x0d\x33\xac\xa2\xb5\xd9\xea\x71\x75\x83\x23\x40\x15\x82\x21\x25\x0a\x18\xb5\xfd\x2c\xf1\x04\xeb\x53\x77\x1d\x2e\xd9\x8c\xe9\xda\xe1\xc3\x5d\xac\x06\x9f\x21\xb9\xde\xe6\x8d\xe8\xae\x68\xb6\xd4\x24\xe8\x81\x3a\x5b\xe5\xe1\x79\x21\x24\x17\xfa\xcf\x15\x50\x30\x9e\xb5\xe9\x0b\x91\x73\xd9\x15\xbd\xe0\x51\x4b\x82\xb0\x18\xee\xd1\xa2\x0a\x57\x42\x58\xec\xb7\x9c\x9a\x22\x6f\x3c\x96\x5e\x80\x66\xe8\xd4\x75\x1b\xe2\x0b\x7b\xc6\x96\xc6\x3c\x95\xc5\xca\x37\x5a\x53\xa4\x04\xc9\xcc\xa1\x03\x7b\xe8\x32\x16\x97\x90\x53\x1c\x81\x6f\x27\xb7\xf6\xc8\x3f\xa9\x02\x38\x45\x2d\xf4\x99\xbd\xb8\x6a\x47\xbf\x19\xc2\xd7\xa0\x2e\x00\xc7\x84\xa5\xbf\xaf\x89\x02\x99\x6b\x26\x63\x03\x85\x61\xd7\xb3\xa6\xbe\xaa\xd3\xcf\xdf\x60\x59\x07\xca\xef\x25\xc1\x70\x38\x6f\x4f\x97\xe1\x07\x1d\x21\xa0\xe6\xeb\x43\xe2\x67\x8d\xf8\xd9\x01\xe2\xa7\xcb\xf0\xa6\x61\xbf\x39\x80\xfd\xa6\x61\xb7\xe2\x9d\x92\x6c\xf4\xb4\x9c\x4d\x80\xf0\x06\x1d\xd9\x9b\x1e\x10\xfb\xd0\x88\x7d\xe8\xe4\x7e\x13\xb4\x4b\xd0\xd7\xae\xc0\x0f\xba\x1b\xe1\x05\x96\xea\x3d\x91\x05\xa6\x37\x36\x7d\x4b\x85\xd7\x50\xc1\x7e\xd0\x2b\x9b\x82\x0d\x16\xce\x53\x2b\xfd\x3f\x5a\x46\x8f\x6e\x50\x75\xd8\xea\x9a\x7b\x48\xbf\x7d\xd5\xdf\xb8\xe8\x7a\xce\x05\xed\x39\x75\x58\xe9\x3d\xa1\xfc\x9e\x50\x82\x4f\x28\xc3\x47\x96\xe2\xf0\x84\x1c\x2e\xc9\x59\xaf\x24\x1f\x28\x4b\xd4\x1b\x9f\xdf\xae\x44\x15\x4f\x53\x0a\xe7\x87\x96\x29\x49\x0e\x1a\xde\x3b\xf2\xf9\x61\xfe\x4e\x3c\xf7\x4c\x5d\xf7\x4d\xd1\x39\x48\x93\x7b\x5a\x4f\x2a\x2c\x0c\xcb\x54\xeb\x5d\xec\x28\x1f\x5b\xdc\x98\xd2\x92\x43\xf7\x80\xfa\x8d\x90\x70\x51\x35\x27\x97\x0d\xc5\xbc\x5d\x05\x8c\xab\xc1\x20\xed\x8d\x91\xfe\x74\x6d\xdb\x77\x48\x27\x61\x04\xe0\xcd\x60\x7e\x3c\xda\xc7\xb6\x29\xc7\x8f\xe1\xfb\xda\xd5\x72\x9c\x12\x18\x52\x0e\x0e\x78\x15\x96\x7a\x46\x07\x8b\x54\xfe\x03\x4d\xbf\xed\xb1\x7e\xa0\xfe\x31\x96\x13\xaf\xf5\x74\xe8\x3c\x62\xbc\xa9\x37\x1e\x8f\xc7\x5e\x50\x21\xcf\x35\xf2\xbc\x59\x07\x7a\x1d\x34\x6b\x5f\xaf\xfd\x66\xfd\x42\xaf\x5f\x34\xeb\x89\xa7\x67\xc1\xa4\x01\x66\x06\x98\x35\x40\x68\x80\xb0\x01\x8e\x0c\x70\xd4\x00\x4b\x03\x2c\x1b\xe0\xd6\x00\xb7\x0d\x30\xb6\xcf\x2f\xcf\x0f\x27\x2d\xdf\xa4\x65\x92\x13\x2f\x18\x3d\xee\x65\xd4\x16\xec\xf7\xcd\xf9\x6b\x01\x58\x81\xb8\x5e\x63\xe6\xef\x98\xa5\xb7\x67\xcb\x81\xdc\xb6\xf7\x51\x25\xe3\x62\xdf\x00\xe8\xe8\xed\xf3\x46\xb7\xd8\x05\x3a\x71\x8d\x95\xf9\x55\x9a\xaa\xbe\x55\xf3\xb8\x9f\x89\xd5\x67\x4f\x07\xd9\x33\x7b\xf6\xf6\x94\xc1\xfa\x38\x30\x14\xce\x34\xdb\x1d\x8a\xb3\x7f\x3f\x14\xa7\x07\x85\xa2\xaa\xfd\x76\x48\x86\x27\x50\x6b\x38\x0e\xce\x09\xb7\xff\xeb\x9f\x1f\x9d\x9e\xa1\x91\x0c\x62\xdd\x0e\xcb\xaa\xd0\xe5\xef\x87\xb3\x60\x2c\x27\xcf\x4d\x79\x9c\xb6\xca\xa8\x2e\xff\xf6\x8f\xc1\x92\xa3\x67\xab\x7c\x8e\x99\x2e\x2b\xfd\x2b\xb3\x9a\x5e\xe9\x55\x47\xb9\x12\x2b\x56\x95\xcc\xe9\xb4\xc4\x28\x30\xdf\x2a\x04\x8b\x85\xf9\xd2\xff\x89\xcc\x88\x2a\xe7\xbb\xfd\x9f\xd1\xf0\x57\xbc\x31\x51\xc2\x2c\xf6\xab\x86\xe7\xd5\xb1\x99\x56\x62\x6f\xf9\x39\xcf\x72\x0a\x0a\x3a\xda\xd7\x62\xfb\x8a\xb0\xf8\x17\xd8\xfa\xde\x4b\xaa\x66\xc7\xfa\xfc\xb4\xc0\xf3\x52\x3f\x6c\x18\xcd\xe0\xd9\xa9\x7c\xae\x04\xfd\x8d\xc5\x20\x64\xc4\x05\x3c\x86\xe5\x65\x1c\x5f\x16\x4c\x91\x0c\x7e\x22\x14\xba\x67\x30\x02\x97\xd7\x6f\x80\xe6\x53\xe4\xad\x81\xe6\xc7\x15\x65\x16\x7b\xf6\xd1\xf2\x77\x00\x00\x00\xff\xff\x72\xa3\xb1\xc1\x74\x16\x00\x00" func runtimePluginsCommentCommentLuaBytes() ([]byte, error) { return bindataRead( _runtimePluginsCommentCommentLua, "runtime/plugins/comment/comment.lua", ) } func runtimePluginsCommentCommentLua() (*asset, error) { bytes, err := runtimePluginsCommentCommentLuaBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/plugins/comment/comment.lua", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimePluginsCommentHelpCommentMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x54\xc1\x6e\xeb\x36\x10\xbc\xf3\x2b\xb6\x0e\x72\xf1\x8b\x6d\xa0\xbd\xa9\xc5\x03\x8a\x77\xea\xa9\x3d\xb4\x87\xde\xb8\x92\x56\x12\x63\x8a\x54\xb8\x2b\x3b\x4a\x90\x7f\x2f\x48\xc9\x16\x95\xf4\x64\xcc\x70\x67\xb8\xda\x35\xe7\x01\x7e\xf8\xbe\x27\x27\xf0\x97\x1d\x5b\xe3\x94\xfa\xbb\x23\xa8\x16\x6e\x48\x1c\x0c\xc1\x5f\x4c\x4d\x0c\x38\x8a\xbf\x1d\x1a\xd7\x9e\x46\xb7\x82\x63\x52\xd6\xd4\xe0\x68\x05\x4a\xe3\x6a\xe3\x5a\x58\xeb\xd7\x62\x40\xb0\xc6\x11\x18\x06\xfd\xbb\x95\xc3\x49\x2b\x74\x35\xe8\x1f\x12\xec\x3f\xae\xa6\xc0\x95\x0f\xa4\x9f\xe0\xda\x99\xaa\x8b\x65\xf4\x32\x9a\x0b\xda\xa8\x35\x0e\x7a\xcf\x02\x42\xa1\x37\x0e\x2d\x2b\xf1\xb3\xf4\x70\xd2\x47\xf8\xd7\x8f\x50\xa1\x03\x42\x36\x76\x82\xde\xd7\xa6\x99\x40\x3a\x4c\xca\xc9\x8f\x01\xf4\xd2\x1b\x1f\x9f\xd9\x3b\xad\x1a\x63\xa9\x50\x4a\x6b\x1d\xb1\x7a\x57\x00\x00\xbb\xd8\x58\xbb\x2b\x60\xb7\x34\x7d\x5c\x7e\x77\xea\x23\x96\x2a\x75\xbb\x09\x2d\x7b\xa0\x57\xaa\x46\x21\xc0\xf4\xb5\xf1\x6b\xe6\xde\xaf\xc6\x5a\xa8\x3d\x48\x47\xc0\xd8\x13\x48\x17\xa7\x82\xac\x22\xb3\x34\x32\x5f\xae\xbe\xdf\x26\x35\xfb\xff\xd1\xc4\x76\xa1\xc3\x4b\xb4\x65\xb2\x54\x89\xf1\xee\x29\x79\x2d\x8b\x49\xf6\xf7\xa9\x5a\x9b\xce\xe2\x6c\x59\xcd\x02\xaa\x8f\xdb\x8d\xca\x34\xd0\x2c\x2b\x69\x5e\x67\x4d\x92\x0a\xa1\x44\xa6\x1a\xbc\x4b\x26\x71\x28\xb1\xf6\x49\x95\xa3\x80\x91\xb8\x05\xef\xec\x04\x78\x41\x63\xb1\xb4\x04\x8d\x0f\x50\x51\x10\x34\xee\x5e\xce\x85\x52\x7b\xc0\x01\xab\x8e\x2a\xef\x9a\x02\xf4\x03\x3c\xb2\x56\x7b\x28\x51\x0a\xd0\x45\xb1\xc0\xaa\x00\x7d\x3a\xdd\xc0\xb7\x6f\x1b\xd8\xe3\x99\x32\xe9\x27\xa7\x2a\x4c\x2c\x68\x73\x86\x39\xea\xf7\xf0\xc8\xb0\x3f\x45\xa6\xce\xfd\x6a\x0c\xb2\xc1\xbe\x3a\x53\x48\x7b\x5f\x3d\xc8\xf6\x05\xe8\xc3\x61\x81\x8d\xe1\x2e\x3b\x6d\x6b\xae\x82\x19\x24\xa7\x2c\xdb\xdc\xb5\xf5\x39\xea\x90\xcf\x64\x6d\x6e\xd9\x49\x1f\xf1\x6f\x3f\x25\x06\x0e\x87\xef\x91\x35\xce\x14\xa0\x7f\x5d\x6a\x9e\xf1\x82\xb9\x4d\xc4\xf7\x9b\x57\xd6\xb8\x67\xfc\xb9\x00\xfd\x1e\x9b\x81\x87\x8f\x44\x8e\xd6\x60\xd6\xdf\xd9\x8b\x35\x2e\x97\xd9\x11\xf3\x7e\x7a\x0c\xe7\xda\x5f\xdd\xd7\x9e\x5c\x6b\xdc\x6b\x66\xe5\x4c\x9f\x21\x5f\x3e\x6f\xb6\x37\x20\x57\x69\x1d\xef\xd1\x22\xf5\x32\x50\xc8\xf7\x33\x74\xc3\x46\xe0\xdd\xb4\xc5\x57\x0a\xdc\xcd\xe3\xba\x6b\x82\x97\xcd\x44\x87\x49\x3a\xef\xf2\x8a\x44\xfc\x92\x31\x61\x2c\xa7\x0d\xe4\xcd\xd8\x62\x9b\x9b\xe9\x7e\xbe\x93\x5f\x36\x0b\xe3\xab\x69\x36\x06\x42\x71\x2a\x8f\x37\xe4\xfb\x5c\x2c\x57\xd3\x7e\x5a\xc9\x25\x17\xbf\xfe\xdf\xf6\x27\xdc\x78\xbc\x25\x8b\xbb\xe4\xed\xeb\xea\xdf\xb2\xbf\xe5\x92\x11\xe1\xfe\xfc\xe2\x2b\x75\x5e\xb2\x47\xda\x51\xa0\xa7\x14\x24\x31\xab\xd8\xf4\xc3\x3d\x15\x53\x04\xe9\x25\x18\xa2\x5a\x83\x1f\x62\xc4\x2c\x79\xc4\x24\x90\x9d\xc2\xee\xf6\xbe\x76\x73\x40\xfd\x19\xd6\x48\x65\x12\x59\x23\xf5\x6b\x9a\xee\x8f\xd5\xae\x80\x19\x24\x22\x33\x8e\x21\xbb\x5a\xc7\xd3\x8f\x25\x63\xff\x0b\x00\x00\xff\xff\xdd\x39\x14\xd9\x9d\x06\x00\x00" func runtimePluginsCommentHelpCommentMdBytes() ([]byte, error) { return bindataRead( _runtimePluginsCommentHelpCommentMd, "runtime/plugins/comment/help/comment.md", ) } func runtimePluginsCommentHelpCommentMd() (*asset, error) { bytes, err := runtimePluginsCommentHelpCommentMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/plugins/comment/help/comment.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimePluginsDiffDiffLua = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x50\x3b\x0b\xdb\x30\x10\x9e\xad\x5f\x71\x68\xb2\xc1\x51\xd2\x35\xe0\x21\x2f\x68\x97\xa4\xd4\xa5\x4b\x29\x45\x91\x4f\xb1\xa8\x2d\x19\xe9\x4c\x93\x25\xbf\xbd\x48\xb1\xdd\x94\x0e\x7e\xe8\xbb\xef\xa5\xfb\x76\xfa\x52\x7f\xba\x9c\xa1\x02\xfe\x41\x6c\xc4\x86\x33\xd6\x39\x25\x3b\x70\x01\x2a\x30\xfd\xe0\x3c\xe5\xdc\x05\x5e\x4c\xb8\x36\x1d\x0e\x92\xda\xb7\x69\x3c\xae\x67\x7c\x21\x86\x16\xbb\xee\x8d\xd5\x1b\xe5\xdd\x3a\xa1\xbc\x60\x4c\x8f\x56\x91\x71\x16\x9c\xdd\x8f\x5a\xa3\xbf\x0c\x68\xf3\xeb\xa8\x0b\x96\x19\x0d\xd7\x51\x8b\x1a\x89\x8c\xbd\x85\xef\xbc\x31\x5a\xdf\x46\x22\xf4\xfc\x07\x48\xdb\x40\x6e\x1d\x25\xce\xd7\xc7\x80\xa2\x56\x5e\x92\x6a\x8b\xd7\x28\xc2\x9f\x63\xc3\x67\x05\x9c\x17\x40\x2d\x5a\x96\x65\xab\x15\xa8\x16\xd5\x2f\xa0\x56\x52\xba\x06\xe0\xdd\x04\x0a\x2c\xcb\x5e\x8d\x7f\x96\x80\xde\x43\x05\x2e\x88\x9a\x24\x25\xa7\xdd\x35\x44\xb3\x82\x65\xb1\x56\x9a\x57\x60\x4d\x37\xdb\x4e\xda\xc6\xf8\xb3\xec\xb1\x4c\xc6\xf1\x0f\xaa\x65\x55\xa2\x1e\x3a\xf3\x9f\xdb\x22\xd4\x7a\x2f\x03\xce\xd9\x69\x41\xe2\x74\x47\x75\x70\x7d\x2f\x6d\x93\xf3\x9b\x21\x5e\x02\x5f\x1d\x78\xf9\x37\x87\x87\xd6\xfd\x8e\xf0\xc7\xd3\xee\xb8\x15\x6b\x0e\x42\x2c\xe1\xc9\x7f\xaa\xfb\xfc\xb7\x6e\x36\x07\x42\x15\x17\xb8\xdd\x3f\x08\x43\x9e\x04\x68\x9b\xf8\x89\x68\x8d\x74\x9c\x78\xf9\x2c\x88\x9c\x44\x89\xaf\xf8\xfc\x09\x00\x00\xff\xff\x92\x87\x8a\x37\x3c\x02\x00\x00" func runtimePluginsDiffDiffLuaBytes() ([]byte, error) { return bindataRead( _runtimePluginsDiffDiffLua, "runtime/plugins/diff/diff.lua", ) } func runtimePluginsDiffDiffLua() (*asset, error) { bytes, err := runtimePluginsDiffDiffLuaBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/plugins/diff/diff.lua", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimePluginsFtoptionsFtoptionsLua = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\xcf\x31\x4b\xc5\x40\x0c\x07\xf0\xfd\x3e\x45\xc8\xd4\x07\xf2\x78\xea\x56\xe8\x22\x28\xb8\x58\xb0\xe2\x7e\x57\x13\x7b\x78\x4d\x8e\xde\x75\xe8\xb7\x97\x9e\x55\xa7\x16\x5e\x20\x4b\x7e\x90\x3f\xff\xf7\xc7\xd7\xee\xb9\x7d\x81\x06\xf0\xf6\x7c\x39\x5f\xd0\x18\x9e\xa5\xcf\x5e\x05\x54\x1e\x66\x66\x9a\xda\x48\x52\xb9\x93\x01\x00\x08\xda\xdb\x00\x9c\xa1\x01\x57\x3f\xf9\x40\x6f\x4b\xa4\xea\x64\x0a\x7a\x2e\xd2\x00\x7e\x2a\x82\x4e\xe5\xb8\x5d\x46\xfb\x45\xec\x03\x21\xe4\x81\xa4\xc8\x3a\xae\xee\x28\xb7\x71\xcd\xab\x30\x5b\x97\xb2\xa6\x68\x7b\x4a\x78\x03\xa8\xcc\xf8\x13\x4b\x21\xd1\xff\x77\xf6\x69\xf8\xfb\xbf\xcd\x46\x71\xc9\x83\xca\x21\xde\x1d\xea\xfd\x8e\x2e\x76\x0c\x3b\x24\x7e\xbc\xaa\x95\xfc\x96\x92\x0f\xb3\xee\x77\x00\x00\x00\xff\xff\xfc\x92\x06\xde\x84\x01\x00\x00" func runtimePluginsFtoptionsFtoptionsLuaBytes() ([]byte, error) { return bindataRead( _runtimePluginsFtoptionsFtoptionsLua, "runtime/plugins/ftoptions/ftoptions.lua", ) } func runtimePluginsFtoptionsFtoptionsLua() (*asset, error) { bytes, err := runtimePluginsFtoptionsFtoptionsLuaBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/plugins/ftoptions/ftoptions.lua", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimePluginsLinterHelpLinterMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\xcf\x8f\xdb\x3a\x0e\xbe\xeb\xaf\x20\xb2\x08\x90\xc9\x38\x69\xcf\x3a\xe4\xd0\x05\x16\xbb\x40\x17\x3d\xf4\x01\xbd\x86\x91\xe9\x58\x1d\x59\xf2\xd3\x8f\x71\x8c\xa2\xff\xfb\x03\x25\xdb\x71\x5e\xdb\x41\x0f\x6f\x80\x51\xac\x98\xe2\xf7\x91\xfa\x48\xe6\x5f\xf0\x51\xdb\x48\x5e\x88\x3f\x5a\x02\x93\x9f\xa1\x37\xe9\xaa\x2d\xf8\x64\x03\x20\x28\xd7\xf5\xda\x90\x07\xe7\x67\x03\x67\x61\x74\xc9\x43\x70\xc9\x2b\x02\xe5\x6a\x12\x68\x6b\xe8\xd1\x07\x0a\x10\x5b\x02\x4f\x21\x99\xa8\xed\x15\x5c\x8a\x7d\x8a\x10\x1c\xc4\x16\x63\x7e\xd9\x51\x08\x78\xa5\x00\x7c\xc8\x68\x4b\x60\x53\x77\x21\x1f\x84\x42\x0b\x17\x82\x57\x4d\x03\xd5\xd0\x78\xd7\xc1\xa0\x63\xab\x2d\x74\x5a\x79\x77\x84\x0f\x23\xd4\xd4\x60\x32\xb1\xca\xae\x26\xae\x21\xf5\xbd\xf3\x31\x63\x8b\xc6\x19\xe3\x06\xc6\x6e\xb4\xa1\x38\xf6\x77\xa4\x48\x3e\x48\x21\xf6\xa0\x24\x5c\x95\xe2\x87\xe7\x67\x09\xd7\xe7\x67\xb1\x87\x5a\x42\xdd\xd5\x62\x0f\x57\x27\xe1\xea\xe0\x92\xb4\xe1\x6d\x8b\xe1\x85\x8c\x91\xd0\xb2\x07\xb1\x87\xaf\xf8\x8a\x32\xaf\x6a\xda\x05\xe5\x75\x1f\x25\x7c\x0d\xed\xdd\x64\xfe\x92\xc2\x74\xce\xe8\x48\x1e\x23\x49\x7e\xe2\x7d\x42\xc9\x8b\x6a\x49\xbd\x88\x3d\x58\xdd\x49\x5e\xc4\x1e\xdc\xe5\x2b\xa9\xa8\x5f\xe9\xa0\x24\x28\x83\xf6\x2a\xf6\xd0\x8f\xb1\x75\x56\x42\x3f\x36\x06\x5f\x28\xac\xbe\xea\xc6\x7e\x7c\xb0\x98\x20\x43\x9b\x99\x87\xb6\xe9\xf2\x76\xd0\x4d\x94\xe5\x43\xc1\xee\xff\xa8\x3e\x7d\xce\xb9\xf9\xa8\x6d\xba\x81\xb3\x66\x7c\x12\x7b\x18\xb1\x33\x32\xaf\xd9\x8d\xf8\x5f\x93\x93\xfd\xa8\x0f\x1d\x80\x2c\x5e\x0c\xd5\xd9\x03\x1b\x70\xbe\x41\x39\xef\x29\xf4\xce\xd6\x01\xa2\x03\x67\x09\x5c\x23\x62\x4b\x81\xee\x17\x52\x01\xa1\x6a\x21\xea\x8e\xf2\xc9\x4b\x6a\x1a\xf2\xec\x33\xe0\x2b\xd5\x15\xab\x6d\x68\xc9\xe6\x97\xe7\x53\x86\x3e\x0b\xe5\xba\x8e\xb1\x18\xfa\x46\x2a\x45\xb6\xcc\xca\x80\x41\x1b\xc3\x92\xcd\x07\xee\x14\x58\x05\x29\x6a\xa3\xe3\x08\x3a\xbf\x14\x17\x54\x2f\x57\xef\x92\x2d\xbc\x6b\x1d\x7a\x83\xe3\xa3\x30\x33\xb4\x8e\x59\xfc\x86\x22\x85\xe3\xcf\x2a\x04\x4d\x70\x80\x2c\xb6\x00\x29\x90\xcf\xf1\xd2\x2d\xd2\x94\x8e\x49\x95\xac\xe4\x39\xee\xa3\xf8\x0f\x8b\x5a\xdb\xa0\x6b\x02\xb4\x2e\xb6\xe4\xa7\x10\x8a\xd7\xa2\xeb\x26\x59\x15\xb5\xb3\x70\x2e\x90\xc7\x0e\x5f\xa8\xd4\xea\x19\x14\x5a\x71\x21\x50\x68\x38\xf9\xd1\x81\xa7\xab\x0e\x4c\x0c\xc1\xd2\xb0\xa0\x1d\xe1\xbf\xe4\x89\xb3\x95\xd9\xf4\xa4\xa0\x71\xbe\xa4\x74\xe5\x4f\xcc\x60\xb9\x32\x7e\x04\xdc\x59\xec\xa8\x5a\xbc\x56\xa0\xba\xba\x02\xf4\x57\xbe\x45\xef\x9d\x6f\x9c\xef\x30\x56\xe0\x42\x05\x43\xab\x23\x19\x1d\x62\x05\xb5\xeb\x30\xaa\xb6\x02\xe3\x9a\x26\x50\xac\x40\x2d\x0f\x68\x0c\xdf\xc3\xd3\x59\x88\x13\xb0\x7f\x99\x57\x70\x6b\xa5\x89\xd3\x02\x2a\x97\x27\x8e\x37\x17\x4c\x89\xc5\x71\xe6\xef\xf6\xaa\xab\x25\x74\xa8\xed\x72\x55\xde\x29\x0a\xa1\x34\x9f\x95\x6e\xc4\x29\x47\x20\x79\x4d\x1d\xd9\x98\x2f\xaf\xc7\x90\x3f\xd7\x6a\x2f\x0e\x04\x00\x64\xa8\x6d\x53\x32\xce\x72\x9d\x2c\x55\xf2\x9e\x6c\x2c\xf2\xe7\x30\xee\xc6\xf5\x2f\x8d\x6b\xed\x49\x45\xe7\xc7\x72\xe2\xb4\x4e\xa5\x84\xd6\x0d\x85\x8f\x0f\xb4\x62\xf3\x6e\xe9\xc6\x73\x5c\xa5\xbd\x66\xc0\x6d\x53\xb2\x54\xc1\xd6\xc8\x75\x5f\xad\x60\xdb\xc9\xe2\xff\xdd\x80\xde\x72\x51\x4c\x52\x17\x27\x70\x81\x8d\x43\xe4\xdc\x7f\xfa\xcc\x99\xd2\x61\x0e\x9e\xeb\x71\x11\xb1\xf3\x90\xec\x6a\x6b\x33\xaa\xeb\x59\x3a\x68\x98\x2b\x76\xd5\xdc\x9e\x25\x7c\xfb\x2e\x4e\x77\x39\x70\x0f\x72\xc9\x94\xc2\xf8\xf4\xb9\x20\x5e\x08\x10\x2e\x06\xd5\x4b\xde\xee\x6a\x07\xd6\xc5\xa5\x8c\x27\x12\x93\x66\x03\x9f\x0b\x4f\x19\x74\xfa\x73\xac\xf8\x05\x02\x76\xdc\xbf\x7e\xe3\xf4\x2f\x29\x37\x68\x02\xc1\x6e\x62\xba\x10\x7b\x12\xa7\x59\xcc\x0f\x61\x2c\x92\xbc\x10\x64\xb0\xde\x13\x67\x06\x79\x6e\x9a\x84\xd0\x63\x8c\xe4\x2d\xdf\x64\x3e\x9d\x87\xd9\x3d\x00\xf6\x81\x2a\x26\x34\xab\xe2\x72\x7e\x0d\xb1\x4c\x5c\x33\xb2\xa9\x7e\xc5\x48\x3c\x7f\xd1\x02\xdd\x50\xc5\xe2\xf7\xb7\xa2\xf2\xf4\x67\xd2\x9e\xd6\xe7\x38\xb0\xa9\x38\x27\xc1\x94\x4d\xe9\xa6\x7c\x3b\x75\x5d\x3a\xcc\xc4\x65\x56\x14\x78\x8a\xc9\x5b\xaa\xe1\x32\xae\x0b\x76\x09\x2d\x05\x6a\x92\x01\xfd\x30\x38\xca\xa1\x00\xef\x0f\xda\xd6\x74\xa3\x32\xfc\xc3\xdb\xec\xdf\x73\x55\xcf\x1c\x95\x33\xa9\xb3\x6f\xb2\x54\xce\xfc\xc3\x24\x0b\xe8\xef\xd0\x9c\xba\x9a\xbc\xb7\x6f\x6e\x56\x98\x59\x36\x2e\xe7\x9e\xbb\x0f\xd7\xdf\x1d\xb1\x62\x02\x3a\xce\xc0\x2b\x7d\x97\x8b\x9b\x2d\xb9\x18\x15\x5a\x45\x86\xea\x23\xf0\x34\x9a\xf1\xf8\x0d\x77\x2e\xaa\xe7\x59\x7a\x7c\x9b\xac\xd5\x46\x88\x0f\x64\xdc\xc0\x47\x8b\x96\x78\xd0\xe5\x62\xd1\x56\x99\x94\x07\x27\xae\x6b\x08\xed\x78\x17\x7c\x0a\xda\x5e\x45\x19\x24\x3a\x84\x9e\x8c\x39\xcf\xc6\x43\xab\x55\x5b\x5a\x74\xc8\x27\x67\x0b\xaa\x61\x70\xbe\x0e\x3c\x88\x31\xfb\x3a\x0a\x71\x3e\x9f\x4d\xc2\x65\x04\x81\xb6\x3a\xee\x4a\x99\x1e\x0e\x7c\x43\x65\x78\x4d\xd4\x1f\x07\xf0\x6c\x95\xb5\x9c\x7f\xe4\xdd\x29\xe6\x77\x3f\x8e\xb2\xcd\x4c\x66\x53\xc1\x86\xff\x57\xfb\x6f\x9b\x6d\xb3\xf9\x5e\xc1\x66\xdb\xc8\xad\x91\x5b\x25\x61\xdb\xf1\xf7\xdf\xab\x72\x15\x15\x44\x9f\xe8\x49\x90\xad\x99\xb7\x10\xf3\x78\xfd\x5b\x06\x11\x3a\xbe\xec\x38\xf6\x5a\xa1\xe1\x20\x0e\x0a\xf9\xf8\xd0\xf2\x81\x95\xd8\xb2\x82\x73\x71\x97\xfe\xc0\x3f\x96\x96\x24\xef\xfe\x5d\x7e\xb2\xe4\x7b\x0f\xf4\x24\xdf\xcc\xd6\x4f\x62\xbd\x2a\xc5\x21\xe6\xa5\x3c\x7f\xdb\x1c\x9a\x30\xda\x88\xb7\x03\xa3\xf2\x8b\xc3\x17\x2c\xd9\x38\x7c\xa1\x5b\xf4\xb8\xc9\x09\x78\xcc\xc3\xf1\x39\xa7\xe2\x1e\xf9\x5f\x01\x00\x00\xff\xff\x14\x89\x62\x32\x38\x0c\x00\x00" func runtimePluginsLinterHelpLinterMdBytes() ([]byte, error) { return bindataRead( _runtimePluginsLinterHelpLinterMd, "runtime/plugins/linter/help/linter.md", ) } func runtimePluginsLinterHelpLinterMd() (*asset, error) { bytes, err := runtimePluginsLinterHelpLinterMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/plugins/linter/help/linter.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimePluginsLinterLinterLua = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x39\x6d\x8f\xe3\xb6\xd1\xdf\xf7\x57\x10\xc2\x23\x40\xbe\x95\xb4\x77\x79\x52\xa0\x30\x60\x04\x69\x9a\xf4\x05\x97\xbb\xe2\xf6\xda\x7e\xb8\x5c\x0a\x9a\x1a\xd9\xcc\x52\xa4\x4a\x52\xf6\xba\x8b\xf4\xb7\x17\xc3\x17\x99\xb2\xa5\xbb\x6d\x1a\x03\x2b\x51\xe4\x70\xde\x67\x38\xc3\xfd\xdb\xb7\xef\xee\xff\xf4\xf6\x0d\xd9\x90\xec\x55\xfd\xb2\x7e\x99\xdd\xdc\x08\xc5\xa8\x20\x1d\x67\x5a\x91\x0d\xe1\x5d\xaf\xb4\x2d\x32\xf7\x9d\xad\xc2\xaa\x1e\xa4\xe5\x1d\x24\xeb\x61\x66\x84\x68\xb9\x80\x9e\xda\x7d\x02\x82\x9f\x77\x71\x7e\x04\x34\x7b\x10\xe2\x92\xd0\x9d\x9b\x1d\x61\xb6\x43\xdb\x82\xbe\x02\xf2\xd3\x23\x14\x53\xb2\xe5\xbb\x2b\x28\x3f\x3d\x42\x0d\x96\x5f\x93\xc3\xc9\x11\x42\x99\x64\x5d\x99\x6c\x15\x75\x22\xb8\xb4\xa0\x71\xf5\xe9\xe7\x9b\x9b\xaa\x22\x4c\x03\xb5\x60\x08\x0d\x4b\x04\xa4\xd5\xa7\x92\x30\x2a\x04\x69\xb5\xea\xc8\x91\xdb\x3d\x97\x84\x4a\xc2\x25\xb7\x9c\x0a\xfe\x2f\x6a\xb9\x92\xa4\x1d\x24\xc3\x41\x49\xa4\xb2\x88\xab\xe1\x1a\x98\x15\x27\x42\x6d\x84\x25\x42\xd1\x86\xa0\x5a\x6f\xaa\x0a\x61\x24\xed\x60\xed\x9e\x44\xb5\xc4\xee\x21\xd0\xc5\x35\x54\xac\x3d\xf5\xb0\x1e\x47\xc4\x2a\xc2\xf6\xc0\x1e\x48\xab\x34\x7e\x0c\x26\xdd\xc0\xba\x66\x4d\x3a\xca\x65\x64\xbe\xd7\x8a\x81\x31\xc4\xee\x91\x05\x43\xe0\x11\xd8\x60\xa1\x41\x60\xaa\x77\x66\x8d\xcf\xa1\x03\x69\x0d\x62\xeb\xa9\x71\xef\x33\x1b\x11\x03\x6e\xc0\x1f\xd2\xcb\x5b\x84\xd1\x80\xf6\x0b\xc0\x6c\xd0\x1a\xa4\x75\x7c\x3a\x61\x26\xf0\xcd\x22\xbc\xd7\x90\xd2\xa7\x71\x13\x68\xad\x74\xab\x74\x47\xed\x9a\xec\xd5\xd1\xb3\xa5\x0d\x24\x4c\xdd\x31\xd5\xf5\x5c\x24\xf2\xa9\xc1\xf6\x83\x8d\x44\xf3\xd6\x6b\xac\x24\xb9\x58\xe3\x1e\x20\x72\xe8\xb6\xa0\x4b\x92\x77\x6b\x4f\xe2\xee\x48\xb5\xe4\x72\x47\x3a\x30\x86\xee\x1c\x6d\x65\x10\xda\x58\xb4\xc4\xdb\x7b\xd4\x1a\x37\x51\x0f\xdc\x10\x33\xf4\xe8\x40\xd0\x10\xa5\xc9\x20\x93\x4f\x19\x29\xab\x1e\x1d\x80\x0a\x64\x99\x76\x25\x69\xa0\xa5\x83\xb0\x6b\xf4\xae\xaa\x22\xc7\x3d\xb7\x80\x14\xd6\xc4\xec\xd5\x20\x1a\x27\xd4\xdb\x7b\x4f\x75\x0b\x84\x92\xad\xa0\xec\xc1\x7d\x16\x8d\x42\x47\xc2\xc0\x4c\x0d\xe2\x0c\xbf\x07\x83\xfb\xcc\x2a\x12\x0e\x3f\xa5\x09\x3d\x53\x21\x85\x92\xe2\xf4\x3c\x04\x8b\x9c\xb7\x54\x18\x20\x45\xe0\x77\x64\xcf\x6d\x6c\x54\x47\x2d\xdb\x4f\xa4\x19\x5d\x75\x0b\xc4\x11\xec\x35\xa0\x92\xa8\x8b\xa9\x81\x92\x9e\x5a\x0b\x5a\xa2\x61\xdd\x6e\x17\x50\x13\x39\x10\x0d\x65\x76\x08\x39\x07\xb1\x95\x28\x5a\x42\x25\xc8\xe2\xe4\xa3\xcc\xf2\x03\xb5\x40\x94\x8b\x4a\x78\xa4\xcc\x7a\xd4\xcf\x15\x4e\xc3\x3f\x07\xae\x21\xdd\xea\xe4\x13\xaa\x6d\x0d\xd8\xe0\x43\xfe\x83\x1c\xb9\x10\xce\x56\x4d\x03\x4d\x12\x2d\xd1\xc9\x88\x06\x3b\x68\x09\x0d\xd9\x9e\x2e\x02\x7a\xfc\x0d\x06\xda\x41\x10\x9e\x46\x7c\xd8\x67\xc8\xcb\x8a\xcb\x06\x1e\xa1\x71\x58\xcd\x67\x85\x78\xe9\x42\x3f\xb2\xca\x94\x18\x3a\xf9\x49\x66\x99\x12\xbf\x3e\xaf\x9e\xee\x73\xb9\xa5\x42\x6c\x29\x7b\x58\x8f\x49\xd3\x65\x36\xea\x98\x6d\x95\x33\x05\x66\x2a\x0c\xd0\x33\xd5\x12\x99\xe0\x36\x12\x9f\xfa\xbe\x37\x65\x04\xc6\x78\x65\x54\x32\x10\xd0\xd4\xe4\x3d\x0a\x1d\x48\xe2\x0a\xe6\x39\xf0\x8e\xb4\x1d\xda\xfa\xb3\x3c\x4b\x2e\x6e\x46\x46\x3b\xfa\x00\xaf\x1d\x3f\x05\x26\xad\x32\xf1\x51\xd6\x35\xa5\xcb\xab\x65\x9a\xc7\x4a\xa2\x4c\x79\x8e\xca\x32\x86\x4d\x19\xfd\xab\x8c\xd6\x2b\x47\x2e\x57\x37\xc8\x10\x6f\xe3\x01\xf5\x01\x49\x7d\x24\x9b\x0d\xf2\x82\x8c\xcb\x9b\x28\xf8\x05\x04\xa6\x9a\xd9\xa5\x7a\x8c\xcc\xcd\xc8\xf2\x02\x24\xeb\x1a\xb2\x41\x69\x16\xd6\x51\x44\xb2\x71\x92\x2e\x40\x24\xe2\x93\x4d\xaa\x8c\x05\x78\x77\x40\x2b\x83\x51\xbe\xc8\xff\x39\xaf\x6d\x92\x1c\xa7\xb4\x37\xfd\xc2\xa6\xa0\x6b\xb2\x89\x5a\xff\xdc\x86\x60\x13\xb2\x89\xd6\xc1\x0d\x2f\x97\x14\x35\x02\xb3\x67\x00\x47\x0f\xdc\x9c\x9d\x51\x69\xe7\x5c\x08\x0c\xb2\xb9\xc1\xbf\xb3\xa7\x69\xe8\xd4\x21\xf5\x35\xef\x15\x97\x06\x47\x04\xd3\x8d\xbd\x06\xac\x37\x8a\x00\xef\x2a\x9d\x06\x0e\x72\x70\x65\x59\x76\xd7\xc0\xe1\x0e\x3f\xb2\xe8\x65\xa1\xd4\xab\xff\xf0\xf6\xed\x3d\x3a\x59\x76\xe4\xb2\x51\x47\x93\x4d\x5d\x2d\xc1\xf1\xe6\xaf\xaf\xb3\x91\x6d\x37\x48\xe2\x22\xdb\x31\x96\x95\x24\x73\x0f\x3f\x7e\xca\xaa\xd6\x9c\xa4\xa5\x8f\x15\x26\x6d\x5c\xa8\xfe\x4e\x85\xf0\x03\x78\xb4\x9a\xe2\x30\x6f\xb3\x9f\xdd\x6b\x9d\x8b\x75\xce\xd6\xf5\xed\x9a\xe4\x5d\xb6\xba\xa6\x70\x7b\xeb\x28\xf8\xd7\x02\x8d\xac\x32\xb6\xd9\xb0\xdb\xdb\x57\x5f\xfe\xcf\x04\x9b\xae\x41\x78\xff\x70\xe3\xa7\xac\x62\x4a\x28\xbd\x51\x6d\xeb\xb0\xaa\xca\xbd\x8e\xfe\xc9\xdd\x8b\x4d\x88\xe4\x45\x2e\xf2\xd5\x32\x11\x30\x68\x5c\xdc\xf2\x13\x3d\x50\xc3\x34\xef\xdd\xd7\x38\x8f\x22\x66\x65\x86\x05\x10\x65\x36\x2b\x13\xfe\xfd\x19\x94\x8b\xd2\xe5\xf7\x9c\x95\x0b\x8a\x53\xdb\x81\x0b\x27\xc6\x4e\x8d\xcf\xa7\x6c\x9c\xad\xf0\x3b\x58\x1a\x31\x37\x53\x05\x7d\x75\x46\x5b\x55\x17\x98\x23\xf3\x11\xf1\xc8\xf4\xa5\x96\xe7\x59\xdb\xc7\xfd\x7b\x6a\x1e\xc0\x9b\x6a\x3f\x87\xa3\xf8\x2a\x17\x1f\xca\xf5\xc7\x9c\xe5\xab\xaf\xea\x6a\x01\x1d\xaa\x90\x45\x5d\xc6\x77\xf0\x13\x27\x69\xde\x5c\x79\x80\x4f\x55\x4b\x08\xcd\x7e\xd6\x3a\xe3\xfc\xd3\x9c\x39\xea\xdb\x05\x4b\x08\x6e\x41\x53\x0b\x88\xe2\x62\x1c\xbc\xeb\xda\x41\x3b\x5c\xf9\xb9\xf4\x19\xac\x24\x56\x0f\x30\x83\x78\xa0\xae\x49\x70\xc8\x06\x1a\x5e\x71\xea\x29\xab\x2a\xa9\xbc\xeb\xce\x45\xc0\x3c\xb3\x92\x23\xe9\xe9\xeb\x29\x1b\xc9\x54\x15\x26\xe3\xef\x06\x21\xfe\x42\xed\xde\xf8\x29\x63\x1b\x35\x58\x3f\x46\x0d\x99\x75\x88\x94\x91\x64\x8d\xee\x9a\xb3\x7a\x9e\x26\x13\x54\xee\x10\x5e\x6d\x7f\x02\x2c\xf2\xc0\xab\xe4\x91\xe9\x41\x7a\xfa\x11\xe2\xd7\x4d\x2e\xfd\xa9\x15\xf4\x01\x9c\x18\xfd\xc9\xee\x95\xf4\xa3\x71\xf6\xc2\xa3\xeb\x2a\x0d\x8b\x14\x53\x77\xea\x4f\x53\x2c\x61\xe6\x02\xc3\x12\x1f\x31\x22\x52\x2e\xce\xa9\xa0\xf2\x7d\x4f\xe5\x8f\xd6\x8d\xeb\x93\xe8\x56\x80\x57\xb9\x06\xec\x4f\xcc\x46\xaa\x6b\x37\x9f\x25\xe7\xc4\xfb\xed\x94\xdc\x38\xf7\xdc\x20\x36\xfb\xb6\x73\x2c\xfb\x7e\xdf\x0d\xfc\xcc\xb3\x31\x1c\x79\x6b\x9d\xa1\xdd\x68\x6a\xf1\xf3\xe2\x82\x35\x11\xa8\xa1\xfa\xc8\x25\x2e\xcf\x07\xc8\x0c\x85\x71\xea\x9a\xcb\x04\xb1\xe0\x72\x78\x5c\xc6\x7b\xa2\x9d\x93\x38\x7d\x27\xd6\xf2\x66\x72\xfa\xa5\xda\x44\x43\x5d\x93\xf3\x6a\x71\xd8\xfd\x4d\x47\xfd\x3d\x7d\x80\x6f\x54\xd7\x51\xd9\x60\xde\x70\x18\xe3\x69\x5f\x6c\x7b\x5f\x74\xae\xc6\x73\x7a\xdb\xaf\xef\xe9\x01\x8a\xf3\x8c\x1e\x64\x60\x72\xdb\xd7\xbf\x1b\xda\x55\x3c\xbb\xcb\x48\xe2\x8d\xfa\x46\x75\xbd\x00\x0b\x53\xd2\x5f\x37\xcd\x3b\x5f\x1d\x7c\xc7\x05\x78\xea\x80\x89\x23\xac\xbf\x7b\xff\x47\x10\x3d\x66\x6a\x10\xfd\x9d\x5f\xad\xbb\x26\x5b\x5d\xd4\x24\x4c\x49\x4b\xb9\x34\x85\xaf\x81\x41\x40\x07\xd2\x7a\x3e\xb0\x25\x7d\x28\xc9\x81\x70\x49\x7a\xca\xb5\x07\x5a\x91\x46\x8d\x02\xf0\x96\x1c\xb0\x32\x09\xfb\xa6\x75\x89\x93\xd0\x35\x05\xce\x30\xe3\x3c\x72\x90\xbe\x03\x8c\x2f\xff\x2e\x6a\xad\xb3\x82\xa2\x76\xc2\xad\x17\x56\x77\xdb\xa1\x5d\xa3\xf8\xef\x4f\x3d\x4c\xaa\x2a\x77\xe1\xe1\xd6\x6b\x4c\x7c\x69\xbd\xc5\x35\xd6\x49\x75\x46\xea\xda\xdd\x50\xd5\xef\x06\x09\xf7\x56\x17\xca\x38\xd8\x7b\xc0\x36\xc3\x2a\xbd\x42\x88\x78\x89\x56\xff\x9e\xeb\x02\x3f\x82\x15\xe6\x54\xe3\xca\xbf\x89\x76\x22\xab\xb1\xd6\x45\xa6\x37\xe4\x50\x5f\xd5\xf9\xa8\xc6\xb1\x26\xbe\xd2\xe1\x19\x81\xb1\x9a\xcb\x5d\xed\x3e\x8b\xd6\x96\x09\xae\xd5\x44\xbd\x17\x2c\xec\xa9\xc1\x0a\xf2\x6c\xed\x43\x8d\xcd\x4f\x5a\x5f\xae\x52\x66\xa4\xb2\x61\x0f\x95\x0d\x39\x24\x35\xfe\x27\x98\x9b\x96\xef\xd1\xb8\x01\xe3\x19\x1b\xe2\xfe\xc5\x18\x2f\xe4\x0a\x1d\x4f\xd2\x9b\x04\xc3\x50\xbd\x3b\x9b\xe6\xe0\x3a\xa3\x89\x65\xf0\x87\x93\x1f\x1e\x3e\xfa\x8e\x69\xbd\x33\xc3\xb6\xc8\xf2\x1c\x4f\x42\x67\xe8\x71\x06\xcb\x91\x86\xeb\x05\x05\xf3\x76\x64\xf8\x4a\x12\xf4\x09\x74\xdc\xd2\xf9\x4a\x9d\xf4\xa1\x87\x7a\xd2\x89\x1e\xea\xb1\xe7\x3c\xd4\x2c\x19\x4e\xfa\xce\xcb\xd8\x99\x86\x8a\x92\x2e\xb9\x6c\x7b\x0f\x3c\x9f\x5a\xd2\x70\x9c\x6e\x3f\xf3\x1a\xbb\xfa\xa5\xb6\x19\x59\xf5\xbd\xf1\x65\x63\x8c\xf1\xf8\x8d\x00\xaa\xbf\xf7\xb7\x77\x31\x2a\x42\xd0\xf0\xf6\xdc\x61\xfd\x7b\xa6\x65\x0e\x8e\x17\x61\x5c\xc8\x2f\x65\x94\x59\x85\xb8\x81\x3b\xe0\xea\x3f\xab\xed\x7d\x4f\x8f\xb2\x48\xa4\x90\x5c\x84\x87\x92\xdf\x3e\x72\x5b\x92\x89\xbc\x0b\x42\x5e\x66\x4c\xbf\xb7\xf0\x67\x7c\x9a\xe2\xc7\x1b\xf4\xcf\xa2\x0c\x4d\xfa\x87\x57\x1f\xfd\xfe\x0f\x5f\xc4\xc1\xff\xc7\xc1\x97\x71\xf0\x9b\x8f\x09\x72\x77\xf3\x84\x79\xa0\x17\x09\x0b\xd9\x0f\x32\x1e\x4c\xe1\x9f\x06\xb0\x83\xc7\x69\x83\x3f\xf1\xef\xac\xa8\xeb\x6a\x95\x9d\x5d\xdc\x1d\x8b\x45\xde\xdc\xa6\x93\x6c\x6e\xb2\xf3\xdb\x71\x6e\x4c\x84\xff\x28\x5d\x51\xcd\x25\xe1\x63\x2e\x84\x69\xbc\x55\x15\x79\xaf\x79\xe7\x2f\x08\x4c\x4f\xd9\xa4\xcf\xc7\x5c\x8d\xaf\xb5\x4f\x6c\xd9\x8f\xb9\x79\x81\x34\x72\xf3\xe2\xff\xb2\x49\x62\x0a\x09\xb0\xe5\xb2\x71\x54\x4a\x2f\xeb\x8c\x9b\x9c\x0f\x02\x67\x0e\x70\xfd\x57\x49\x3a\xb3\xbb\xcc\xa3\x29\x9e\x19\x14\x7b\x6a\xb0\x73\xdb\x4c\xcf\xb0\xc4\x5f\x53\x9e\x26\x06\x77\x3a\x9c\x61\x0d\x7f\x23\xd6\x69\x8e\x8b\x3f\xcf\x26\x53\x62\xb2\x02\xc2\x00\x06\x11\x6e\x9c\x89\x9f\x67\xe0\x4e\xb3\x72\x10\x61\x4b\x0d\x48\xda\x41\x11\x4f\xcb\x15\x22\x1f\x67\x5d\x2e\x9c\xa7\x13\x1c\xde\xf3\x1a\xef\x4b\x2e\xb0\x07\x5e\x66\xf7\x9f\x71\x74\xc6\x52\x1d\x4e\xf4\x16\x74\xfd\x5a\xb1\xc2\x2a\x7f\x19\x5a\x30\x25\xaa\x57\xb7\x2e\x14\x4b\x32\xce\xa2\xd5\xaa\x57\xb7\x18\x54\xab\xd5\xa7\x50\x83\x6c\x96\x11\xff\x02\xb4\x41\xde\x80\xf0\x0d\x1c\x43\xb2\x2b\x62\xd0\x77\x66\x57\x06\x89\x4a\x47\xbe\x8c\xc0\xdf\xbf\xff\x16\xfd\xe3\x1a\x2f\xcc\xf9\xc0\xa7\x88\x7d\x6d\x5f\x73\x79\x41\x72\x22\x83\x97\xe0\x19\x94\x2f\x1c\x82\x84\x34\xfe\x75\xd3\x44\xb9\x90\x87\xd5\xa2\x17\x2d\x1f\x48\x3e\x49\x19\xab\x4b\x62\xa0\x5f\x4d\xf2\x93\x19\x84\x3d\x1f\xdc\xd3\xac\x55\x64\xc5\x87\x1f\x73\xf3\xd1\xe5\x1d\x1f\x4b\xc5\x88\x00\xf3\x0d\x50\xb6\xc7\x6c\x63\xac\x5e\xef\x7c\x0c\x87\x2c\x90\x64\x1c\x8b\x85\x7c\xcd\xa5\x01\x6d\x0b\x4f\xb0\x74\x3b\x57\x73\xb5\xa7\x07\xb8\x10\x60\x1a\x03\x09\xa7\x06\x7a\x77\x61\xf7\xdf\x5e\xd4\x85\x7d\x3f\xfc\x90\x4d\x78\xf0\x48\xdd\x3f\x1b\xc7\xd4\xe4\xf2\xad\xcf\x5e\x59\x51\xbf\x70\xe5\x2a\x6e\xaf\x6b\x92\xad\x8a\xfa\xc5\xca\xf5\x28\x5f\x64\x93\x63\xdd\xfd\xb7\x0e\xb1\xfe\x27\x00\x00\xff\xff\x2a\x90\xf8\xb6\x6d\x1e\x00\x00" func runtimePluginsLinterLinterLuaBytes() ([]byte, error) { return bindataRead( _runtimePluginsLinterLinterLua, "runtime/plugins/linter/linter.lua", ) } func runtimePluginsLinterLinterLua() (*asset, error) { bytes, err := runtimePluginsLinterLinterLuaBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/plugins/linter/linter.lua", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimePluginsLiterateReadmeMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\xcd\x3d\x4e\x05\x31\x0c\xc4\xf1\x3e\xa7\x18\x89\x06\x9a\x4d\xcf\x19\xa0\x82\x0e\x21\x3d\xbf\xc4\x9b\x58\x78\x93\xc8\x71\x84\x96\xd3\x23\xbe\x2a\xea\xff\x6f\x34\x37\x78\x10\x67\x23\x67\x3c\x4a\xb2\x1e\xc2\xd3\x1a\xa3\x9b\x63\xef\x06\x63\xca\xd2\x0a\x2e\x9b\x8a\x5f\xb0\x8b\xf2\xc4\x6e\xfd\xc0\xcb\xc7\xc9\x59\xb2\x50\xfc\xdb\xbf\xde\x56\xf7\x31\xef\x63\x2c\xe2\x75\x5d\xb7\xd4\x8f\xf8\x4f\xdd\x6d\x21\x3c\x57\x99\x18\xba\x8a\x34\xbc\x8b\x2a\x68\x79\x3f\xc8\x25\x91\xea\x89\xcc\xce\xc9\xe1\x95\xbf\x0f\xfd\x1c\x0c\x6a\x19\x55\x4a\x55\x29\xf5\x27\xa5\x6e\xf6\xc5\x94\x5a\x59\x54\x18\xd2\xa6\x64\xfe\x6d\x99\x71\xd5\x9e\xde\xe6\x16\x3e\x03\x00\x00\xff\xff\x46\x7f\x67\x35\xe2\x00\x00\x00" func runtimePluginsLiterateReadmeMdBytes() ([]byte, error) { return bindataRead( _runtimePluginsLiterateReadmeMd, "runtime/plugins/literate/README.md", ) } func runtimePluginsLiterateReadmeMd() (*asset, error) { bytes, err := runtimePluginsLiterateReadmeMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/plugins/literate/README.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimePluginsLiterateLiterateLua = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x55\xdf\x6f\xc2\x36\x10\x7e\xe7\xaf\x38\x79\x9b\x9a\xac\x49\x56\xf6\x88\x14\x29\x9b\xb4\x4a\x93\xb6\x76\xa2\xdb\x5e\x80\x22\x13\x5f\xc0\xc2\xb1\x23\xfb\x32\x86\x4a\xff\xf7\xc9\x71\x80\x14\x55\x1a\x34\x2f\xf1\x9d\xbf\xfb\xbe\x3b\x9f\x7f\xfc\xfd\xcb\xf4\xe5\xd7\xe7\x27\xc8\x81\x8d\xb3\x87\xec\x81\x8d\x46\xca\x94\x5c\x41\x69\x74\x25\xd7\x90\x83\xac\x1b\x63\x29\x62\xb5\x2c\xad\xf9\x21\xb8\x59\x3c\x1a\x55\xad\x2e\x49\x1a\x0d\x8e\xb8\x25\xb7\x93\xb4\x89\x1c\xd9\x24\xd8\xf1\x08\x00\x2c\x52\x6b\x3d\xc0\x4a\xbd\xce\x5c\xbb\xea\x00\xe3\xa4\x77\x28\xd4\x51\x00\xc7\x79\xde\x0d\x46\xa8\xc5\x80\x19\xb5\x18\xf0\xa2\x16\x2f\x64\x87\xc4\xc1\x93\xe7\x77\x77\x60\xec\xa5\x4c\x3a\x50\xe9\x43\xe3\x3c\x0f\xa3\x0b\x1d\xd7\x28\x49\x51\xc0\x27\xe0\xb0\xe9\x44\x20\x2c\x84\xc3\x26\x81\x4a\xa2\x12\x0e\x72\x6f\x79\x2d\x36\x61\x09\xbc\xbd\x0f\x60\x0d\x27\x42\xab\x3d\x24\xe8\x56\xc6\xd6\x9c\x22\x16\xcd\x5e\xbf\x73\x8b\xfb\x98\x0d\x98\x03\x64\xb2\xf6\xb9\xf6\x81\x09\x1c\xd3\x89\xca\xb8\xd7\x9b\x7d\x13\xfe\xf7\xe3\x05\xe4\x50\xfa\x7a\x43\x7c\x5f\x7f\x98\xbd\x28\xc6\xe8\x9f\xdb\xaa\x42\xfb\xdc\xa0\x8e\x56\x6d\x15\x22\x64\x05\xda\xd0\x79\x45\x57\x6d\x95\xfd\xc1\x69\x93\x00\xcb\x94\x24\x16\x03\x6d\x50\x77\xd0\xb3\x40\x67\x76\xec\xe7\x3a\x4b\x23\x90\xf6\x0d\xfa\x1d\xd3\xea\xad\x36\x3b\xcd\xba\xe9\xca\x58\x90\xf9\x38\x59\xb5\xd5\xe4\x37\xa9\xd1\x3d\xb5\x75\x14\x83\x30\x27\xd2\x40\xa0\xa4\xf6\xc1\x47\x58\x24\xd3\x71\x7c\x82\xc8\x6a\xb8\x9d\x3c\x34\x01\x56\x78\xcd\xa5\x17\xbd\x4c\xd3\x7f\x83\x84\x42\x1f\xfb\x28\x60\xf1\xec\xc7\xc5\x07\xe8\xca\x22\xdf\x9e\x3c\xbe\xb0\x4f\x0a\x74\x7b\x4d\xfc\xdf\x47\xa9\xba\x12\x43\x6d\x1f\x7c\x03\x23\xcb\x80\x55\x52\x75\xfa\x13\x50\x92\xd0\x72\xc2\x94\xf9\x89\x53\x5e\x1e\x34\xd7\xff\x4f\x24\x90\xb0\xa4\xc9\x35\xd0\x6e\xbd\xa5\x42\xcd\x6b\x9c\xc0\x9c\xcd\xe7\xf3\xb9\x6f\xe3\xb7\xf3\xab\x94\x6c\xab\xd0\x5d\x2d\x94\x82\xd4\xa5\x6a\x45\xa7\x54\x73\xbb\x15\x66\xa7\xaf\x13\x0a\xe1\xae\xc1\x52\x72\xe5\xc3\x5f\xa3\xc2\x1d\x0a\x92\xa4\xf0\x70\x6e\xab\x1f\xd6\x35\x6a\xea\xad\x5e\xef\x50\x94\x1b\xae\xd7\xa7\xff\xd2\xef\xff\x2f\x0a\x47\x05\x17\x62\x59\x3a\x77\x28\xcc\x3f\x68\x77\x56\x12\x06\xb3\x34\xca\x58\x57\x6e\xb0\x0e\x79\x34\x52\xa1\x3d\x14\x68\xad\xb1\xcb\x70\x88\x0f\xc5\xca\x98\xed\x4d\xd2\x02\x2b\xde\xaa\xeb\xbb\x19\x6e\x05\x6e\xc9\x27\x9b\xa6\x69\xf6\xfd\x95\xbd\x1c\xec\xe6\x3e\xf4\xc6\x40\x25\x6b\x49\xe9\xda\x9a\xb6\xf1\x04\x52\xa0\x26\x59\x49\xb4\xb7\xd1\xdc\xb6\xa7\x8e\xdf\xb9\x47\xb7\x46\x7e\x58\xb0\xc2\x1f\x80\xb7\xdb\x12\xbe\x58\x38\xcf\xf0\xfe\x35\x86\x50\x3a\xcc\x16\xb7\x57\x7f\x3a\x59\x9f\x5f\x19\xa3\x70\xc1\xf9\x27\x37\xfb\x49\x88\x69\xab\x49\xd6\xe8\xb9\x1e\xad\xa9\x7f\xc7\xda\xd8\x7d\xd4\xcf\x4f\xff\x7c\xe9\x94\x12\x60\xc7\x8b\x28\xdb\xf3\x5a\xf9\x77\xe7\x94\x42\x3c\x64\x9c\xa2\x32\x5c\x44\xc1\xe7\xef\xe3\xbf\x1a\xc1\x09\xa7\xbe\x9c\x28\xee\x9e\x95\xff\x02\x00\x00\xff\xff\x0d\x7e\xfd\xa0\x1f\x08\x00\x00" func runtimePluginsLiterateLiterateLuaBytes() ([]byte, error) { return bindataRead( _runtimePluginsLiterateLiterateLua, "runtime/plugins/literate/literate.lua", ) } func runtimePluginsLiterateLiterateLua() (*asset, error) { bytes, err := runtimePluginsLiterateLiterateLuaBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/plugins/literate/literate.lua", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimePluginsStatusHelpStatusMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x91\x31\x8e\xdc\x3c\x0c\x85\x7b\x9d\x82\x98\xbf\xf9\x13\x24\x3e\xc0\x16\x01\x52\xa4\x5f\x60\x37\xbd\x69\x89\x1e\x13\x90\x28\x43\xa4\x06\xd9\x9c\x3e\x90\x3c\xc6\x7a\x3d\x41\x3a\x81\xe4\xf7\xc8\xf7\xf4\x1f\xbc\x18\x5a\x55\xe7\x5e\x17\x02\xed\x6f\x58\x63\xbd\xb2\xc0\x5a\xf2\x8d\x03\x29\x68\x4e\x04\x73\x15\x6f\x9c\x45\x61\xce\x05\x52\x0e\x3c\xbf\xb1\x5c\xc1\xde\xb9\xc8\x42\x83\x73\x3f\x75\xaf\x8f\x5b\x63\xce\x25\xa1\xc5\x11\x50\xc2\xc7\x5a\x19\x21\xaf\x5d\xf5\x4b\x07\xe8\x17\x7a\x03\x9f\xc5\x48\x4c\x5d\x9e\xcf\xf2\xe0\x51\x60\xa2\x6d\x3f\x53\x18\xe0\x39\x12\x2a\x81\x12\xf5\xd9\x90\x7d\x4d\x24\x86\x4d\xb5\x9d\xea\x6c\xc9\x4a\xfb\x1a\xf8\x7f\xfc\x06\x0b\xc5\x75\x2f\x8c\x9f\xee\x7e\x0a\x01\xcb\x76\x15\x67\x19\x5a\x20\xfc\x18\xc5\x7b\x0a\xb6\xa0\xed\xd7\x54\xa5\x00\x2c\x0f\xc7\x6e\x72\x4f\xce\x7d\xde\x6d\x0f\x53\x41\xf1\xcb\xf8\x04\x85\xac\x96\xae\x43\x20\x98\x08\xee\x66\x7d\x2d\x85\xc4\xe0\xca\x06\xdb\xf0\x70\xc0\x17\xd4\x33\xdc\x4a\x7f\x83\x7d\x4e\x89\xed\x08\xaf\xa8\x46\x07\xfa\x72\x01\xde\xb8\xde\xb9\x47\x02\xac\x10\x58\x71\x8a\x14\xfa\x8f\x5d\x9e\xbf\xbf\xbc\xfe\xb8\x38\x80\x36\xce\xd6\x06\x48\x7a\xff\xa8\xde\x1c\xeb\xd9\x58\x4d\x13\x95\x76\x5d\xef\xee\x19\x4d\x75\x9e\xa9\x1c\xe1\x9b\xcf\xf1\xc4\xde\x58\x2b\x46\xf0\x39\xd6\x24\x07\xa5\xbb\x4f\xcd\x1f\x04\xa6\x37\xfb\xc7\xf6\xde\xdd\xb7\xef\x21\x3d\x5e\xa1\xfc\x9b\x4e\x1a\xad\x74\x4e\x77\x03\x9b\x1c\xc2\x52\x13\xca\xd7\x42\x18\x5a\x20\x2d\xa3\xed\xd3\x07\xf7\x27\x00\x00\xff\xff\x7c\x2c\x21\x7f\x5b\x03\x00\x00" func runtimePluginsStatusHelpStatusMdBytes() ([]byte, error) { return bindataRead( _runtimePluginsStatusHelpStatusMd, "runtime/plugins/status/help/status.md", ) } func runtimePluginsStatusHelpStatusMd() (*asset, error) { bytes, err := runtimePluginsStatusHelpStatusMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/plugins/status/help/status.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimePluginsStatusStatusLua = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x94\xc1\x6b\xdb\x30\x14\xc6\xef\xfe\x2b\x84\x4e\x32\x24\x6a\x77\xd8\x65\x90\x43\xda\xa5\x69\xd9\x68\x47\x1c\xca\xae\xb2\xfd\x1c\x3f\x90\x25\x23\xc9\x61\xed\x61\x7f\xfb\x90\x64\xb7\x76\x42\xc0\x1b\xa3\xb9\xe9\xbd\xdf\xfb\xf2\xf9\xb3\x9e\x9f\x37\xbb\xec\xe1\xe9\x91\xac\x08\xfd\xc4\xaf\xf9\x35\x4d\x12\xa9\x0b\x21\x49\x83\x85\xd1\x64\x45\xb0\x69\xb5\x71\x8c\x86\x33\x4d\xfb\x6e\xde\x55\x15\x98\xd3\xf6\x55\x2c\xbf\x51\x85\x56\x15\x1e\xce\xa8\x58\x7e\xa3\xea\xae\x11\x0a\x5f\x61\xc4\x0d\x25\x9a\x26\x49\xd5\xa9\xc2\xa1\x56\x04\x15\x3a\x96\x26\x84\x90\x68\x8e\x67\xe0\x32\x27\x5c\x67\x1f\x54\xa5\xef\x14\xa3\x36\x9c\x78\x6e\x84\x2a\x6a\x3a\x07\xad\x85\x9d\x07\xb6\xc2\x3a\x98\x45\x1e\x0b\x2d\x67\x81\x12\x15\xd8\x59\x64\xfe\xe2\x66\x92\x36\x86\xe6\xc1\x98\x32\x5f\x97\xe5\xae\x53\x0e\x1b\xb8\x43\x09\x03\x48\x17\x43\x7f\xb7\xbf\x07\xd9\x2e\x08\xad\x41\xb6\x57\xbd\x4c\x53\xd2\x34\x01\x55\x8e\xd2\x0f\x6e\x59\x1e\xb5\x0d\xb8\xce\x28\xe2\xb4\x75\x06\xd5\x81\xe5\x5f\xbe\xfb\xf6\x63\xd7\xb0\xf4\x74\xd0\xe7\x71\x79\x6e\x0b\x6e\x5d\x38\x3c\xc2\x6d\x67\xac\x36\x2c\xf5\x95\x67\xb4\x9d\x90\x3f\xcf\xb5\x42\x10\x97\xc5\x32\x7c\x85\xf3\x21\x9f\xc9\xc9\xcc\x70\xbf\xf8\x4d\x14\xbc\x30\x19\x2f\xd2\x30\x8b\x15\xc9\xf9\xfe\xa5\x05\xfe\x0d\x55\x49\x7e\xaf\xfa\x2d\xe0\x37\x7b\xff\x16\x88\xab\x41\x05\xd0\xff\xe2\xd5\xb6\x35\x48\x79\x76\xff\x43\xb5\x7f\x4b\x23\x36\x3c\x85\x1d\xd1\x7d\xc5\x2f\xc1\x14\x8d\xbe\x16\x04\x8c\x5f\xc1\x20\xc7\x37\xbf\xa0\xb8\xd5\x4d\x23\x54\xc9\xe8\x01\x1d\x5d\x10\x6a\xe0\xb8\x6c\x85\xb1\xe0\x0f\xcb\xa5\xc8\x73\x5f\x31\x50\xf9\xf3\xfd\x66\xfd\x75\x64\x02\xab\x28\xb7\x22\x0a\xe5\xf4\x59\x46\xc1\xf5\x96\xf8\xde\x60\x93\xb5\xa2\x00\x16\xbd\xbc\xeb\xf8\x04\x4f\x86\x28\x4d\x86\xce\x34\x5f\xbf\x7d\x97\xd3\xfd\xfc\x81\x89\x7a\x27\x7f\x9d\xa7\xad\xb5\x71\xff\x31\x4a\x6f\xe2\xdf\x82\x0c\x5f\xa7\x51\x92\xfd\x6e\x6f\xc1\x6d\xa5\xce\x85\x7c\x6a\x3d\xc6\x68\xff\x15\x9b\x7a\x1a\xc4\x7f\xac\xb3\xfd\x86\xbc\xff\xc5\xf4\x8f\x7d\xe5\x4f\x00\x00\x00\xff\xff\xdc\xdb\xdf\x2a\x2d\x06\x00\x00" func runtimePluginsStatusStatusLuaBytes() ([]byte, error) { return bindataRead( _runtimePluginsStatusStatusLua, "runtime/plugins/status/status.lua", ) } func runtimePluginsStatusStatusLua() (*asset, error) { bytes, err := runtimePluginsStatusStatusLuaBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/plugins/status/status.lua", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxLicense = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x51\x4f\x8f\xe3\x26\x14\xbf\xf3\x29\x7e\xca\xa5\xbb\x92\x35\x5d\xed\x71\x6e\x4c\x4c\x12\x54\x1b\x22\x4c\x36\x4d\x6f\xc4\x26\x31\x95\x03\x91\x21\x9d\xcd\xb7\xaf\x20\xd9\x9d\x6d\x4f\x48\xbc\xf7\xfb\xfb\x5a\xd7\xcf\xe1\xb7\x88\x78\xf7\xc9\x7c\xc7\xc9\x4d\x36\xc2\xcc\x16\x93\xeb\xad\x8f\x76\xc0\xcd\x0f\x76\x46\x1a\x2d\x5a\xae\xb1\x60\xdf\xaf\x26\x2d\xd0\x3c\xc6\xaf\x84\x2c\xc3\xf5\x3e\xbb\xf3\x98\xf0\xa9\xff\x8c\xaf\x5f\xbe\x7e\x79\xc5\x5f\xa6\x1f\xcd\x7c\xc7\xc1\x0e\x6e\x70\xa6\x82\x4d\x30\xd3\x0b\x21\x5b\x3b\x5f\x5c\x8c\x2e\x78\xb8\x88\xd1\xce\xf6\x78\xc7\x79\x36\x3e\xd9\xa1\xc2\x69\xb6\x16\xe1\x84\x0c\x3e\xdb\x0a\x29\xc0\xf8\x3b\xae\x76\x8e\xc1\x23\x1c\x93\x71\xde\xf9\x33\x31\xe8\xc3\xf5\x9e\x37\xd3\xe8\x22\x62\x38\xa5\xf7\xec\xd9\xf8\x01\x26\xc6\xd0\x3b\x93\xec\x80\x21\xf4\xb7\x8b\xf5\xc9\xa4\xac\xf7\x88\xf6\x29\x8d\x96\x2c\xba\x27\x62\xf1\xb9\x88\x0c\xd6\x4c\x70\xbe\x84\xfc\x31\xc2\xbb\x4b\x63\xb8\x25\xcc\x36\xa6\xd9\xf5\x99\xa3\x82\xf3\xfd\x74\x1b\xb2\x87\x1f\xe3\xc9\x5d\xdc\x53\x21\xc3\x4b\x13\x31\x93\xde\xa2\xad\x8a\xcf\x0a\x97\x30\xb8\x53\x7e\x6d\x89\x75\xbd\x1d\x27\x17\xc7\x8a\x0c\x2e\x53\x1f\x6f\xc9\x56\x88\xf9\xb3\x74\x5a\xe5\x1c\xbf\x87\x19\xd1\x4e\x53\x66\x70\x36\x3e\xb2\x7e\xb8\x2b\x3b\x48\x81\x5c\x73\xa1\xe9\x59\x51\xd1\x7d\x1f\xc3\xe5\xbf\x49\x5c\xc4\xe9\x36\x7b\x17\x47\x3b\x94\xb8\x01\x31\x14\xc5\xbf\x6d\x9f\x32\x4b\x5e\x3f\x85\x69\x0a\xef\xce\x9f\xd1\x07\x3f\xb8\x9c\x28\xbe\x12\xa2\x47\x0b\x73\x0c\xff\xd8\x92\xe5\x71\x68\x1f\x92\xeb\x1f\x75\x97\x03\x5c\x3f\xae\xfa\x1c\xc5\xd1\x4c\x13\x8e\x96\x3c\x0a\xb3\x43\xae\xd7\xfc\x12\x67\xce\xf2\x31\x19\x9f\x9c\x99\x70\x0d\x73\xd1\xfb\x7f\xcc\x17\x42\xf4\x86\xa1\x93\x2b\xbd\xa7\x8a\x81\x77\xd8\x2a\xf9\x8d\xd7\xac\xc6\x82\x76\xe0\xdd\xa2\xc2\x9e\xeb\x8d\xdc\x69\xec\xa9\x52\x54\xe8\x03\xe4\x0a\x54\x1c\xf0\x07\x17\x75\x45\xd8\x9f\x5b\xc5\xba\x0e\x52\x81\xb7\xdb\x86\xb3\xba\x02\x17\xcb\x66\x57\x73\xb1\xc6\xdb\x4e\x43\x48\x8d\x86\xb7\x5c\xb3\x1a\x5a\x22\x0b\x3e\xa9\x38\xeb\x20\x57\xa4\x65\x6a\xb9\xa1\x42\xd3\x37\xde\x70\x7d\xa8\xb0\xe2\x5a\x64\xce\x95\x54\xa0\xd8\x52\xa5\xf9\x72\xd7\x50\x85\xed\x4e\x6d\x65\xc7\x40\x45\x0d\x21\x05\x17\x2b\xc5\xc5\x9a\xb5\x4c\xe8\x17\xc2\x05\x84\x04\xfb\xc6\x84\x46\xb7\xa1\x4d\x53\xa4\xe8\x4e\x6f\xa4\x2a\xfe\x96\x72\x7b\x50\x7c\xbd\xd1\xd8\xc8\xa6\x66\xaa\xc3\x1b\x43\xc3\xe9\x5b\xc3\x1e\x52\xe2\x40\x96\x0d\xe5\x6d\x85\x9a\xb6\x74\xcd\x0a\x4a\xea\x0d\x53\x65\xed\xe9\x6e\xbf\x61\xe5\x8b\x0b\x50\x01\xba\xd4\x5c\x8a\xdc\xc9\x52\x0a\xad\xe8\x52\x57\x44\x4b\xa5\x7f\x42\xf7\xbc\x63\x15\xa8\xe2\x5d\x2e\x64\xa5\x64\x5b\x21\xd7\x29\x57\xa5\x33\x91\x71\x82\x3d\x58\x72\xd5\xd9\x35\xf9\x79\x11\xa9\x4a\x8a\x5d\xc7\x3e\xbc\xd4\x8c\x36\x5c\xac\xbb\x0c\xfe\xf5\x7c\x2f\xe4\xdf\x00\x00\x00\xff\xff\xb7\xaa\xfa\x48\x6e\x04\x00\x00" func runtimeSyntaxLicenseBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxLicense, "runtime/syntax/LICENSE", ) } func runtimeSyntaxLicense() (*asset, error) { bytes, err := runtimeSyntaxLicenseBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/LICENSE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPowershellHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xc8\x2f\x4f\x2d\x2a\xce\x48\xcd\xc9\xe1\x8a\xd1\x2b\x28\xd6\x30\xac\xc9\x35\xac\x49\x31\xd4\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\xa5\x59\x84\xcc\x1b\x00\x00\x00" func runtimeSyntaxPowershellHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPowershellHdr, "runtime/syntax/PowerShell.hdr", ) } func runtimeSyntaxPowershellHdr() (*asset, error) { bytes, err := runtimeSyntaxPowershellHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/PowerShell.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPowershellYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x58\x6f\x73\xdb\xb8\xd1\x7f\xaf\x4f\x81\x93\xf2\x3c\x91\x62\x4b\x4e\x3a\x9d\xce\x1c\x27\x8d\xcf\x91\xed\xd4\xad\x5d\x7b\x4c\xab\xc9\x54\xd4\x64\x40\x72\x25\xa2\x02\x01\x1e\xb0\xb4\xac\xcb\xa6\x9f\xbd\x03\x90\x92\x68\x49\x76\x3c\x37\x7d\x53\xcf\x98\x20\x17\xbb\x8b\xdf\x2e\xb0\x7f\xa0\x0e\xbb\xd1\x0b\x30\x61\x06\x52\x32\xbb\x54\xc8\x1f\x58\x26\x66\x99\x14\xb3\x0c\x85\x9a\xb1\xa9\x90\xc0\xa6\xda\xb0\x5c\x24\x46\xb3\x3e\xcb\x10\x0b\x1b\x1c\x1d\xf9\xef\x3e\xa4\x02\xb5\x19\xcc\x04\x66\x65\x3c\x10\xfa\xa8\xb5\x4f\x23\xf2\x39\x28\x36\x35\x3a\x0f\xd6\xf2\xb5\x48\xa2\xf3\xa3\x8d\xc0\xd1\x99\xd7\x17\x7a\xb1\x56\xcb\x2d\x8e\xcb\x02\x02\x56\x38\x16\xeb\x58\x5a\xad\x14\x10\x12\x0c\x5a\x8c\x31\x0f\x4f\xf1\x1c\x02\xd6\x8e\xa2\x41\x61\xbb\xef\x28\x7f\x47\xe9\xbb\xde\xab\xb6\x9f\xef\x64\xc0\x53\x30\x01\x6b\xb7\x5b\x2d\x53\x4a\xb0\x95\x5c\x87\xf5\x59\xa2\xf3\x1c\x14\x0e\x62\xa9\x93\x79\xc0\x36\x7f\x1d\xf6\xd1\x91\xd8\xb0\x62\xd8\x11\x48\x75\xd2\x64\x77\x93\xa7\x3a\x79\x92\x5d\x0a\x05\xc1\x63\xf6\x4b\xa1\xe0\x49\x7e\x9b\x41\xcc\xd5\x2c\x68\xf0\x87\x15\xc9\xcb\xb5\x1a\x02\xca\x22\x57\xf8\x18\x8c\x9f\x1c\xd6\x53\x3b\xbc\x83\x58\x6b\x19\xec\xe5\x65\x5d\x34\x25\x1c\xb2\x29\x97\x16\x7a\xbb\x92\x42\x21\x98\x42\x4b\x8e\x42\xab\x60\x77\x5e\x95\x79\xec\x5c\xbd\x4f\xb3\x2a\xa5\xdc\xa3\xd2\x16\x90\x08\x2e\x87\x19\x37\x7b\x14\x5a\x34\x62\xcb\x0f\x9e\xf2\x14\xe7\x20\x79\x4e\xcf\xa0\x34\xb5\xe1\x1d\x36\x32\x62\x97\xad\x54\x22\xd1\x29\x04\x1b\x07\x8b\x14\x14\x8a\xa9\x68\x5a\x55\x6b\x38\x91\x56\xb3\xd2\x42\xea\x83\x63\x5a\xaa\xc4\x79\xc5\xee\x11\x1d\x24\x92\x5b\x1b\xfc\x2e\xd1\x9c\x27\x46\x07\xfb\x66\xee\x9d\xa5\xeb\x89\xc2\x40\x61\xb6\x4f\x65\x35\x79\x53\x4d\x81\xb5\xda\x6c\xf3\x0f\x4e\x21\x2e\x67\x17\x0d\x2b\x7f\xc0\xbf\xe7\x68\xde\x65\xc0\x3a\x3f\x31\x8e\x0c\x33\x60\x31\xcc\x84\x52\x2e\x71\xe8\x29\xe3\x55\xf6\xc0\xcc\x4d\x82\x94\xd6\xb3\x68\xcb\x16\x8e\x62\x13\x23\x0a\x64\xd5\xa9\x32\x80\x60\x18\x7a\xbf\x6c\xcc\xaa\x8f\xc7\x3e\xb3\xc2\x6a\x8a\x75\x67\x52\xc7\x5c\x92\xd4\x09\x97\x54\x18\x71\xcf\x11\xa8\xd2\x4d\xa5\x15\x6a\x46\x0b\x6d\xe6\x53\xa9\x17\xbd\x86\x62\xe4\x08\x2e\xd8\xb6\x55\xbb\x23\x56\x4f\x59\xf6\x37\x58\x2e\xb4\x49\xed\xae\xd8\x20\x2e\x85\xc4\xaf\xa2\x11\x06\x9b\xb9\x14\x12\xc9\x4d\x15\x25\x55\x72\xd8\x10\x9e\xd3\x99\x03\xf2\xa0\x09\xe5\x0a\x90\xef\xe1\x33\x60\xc1\xdc\x43\x1a\xac\xf8\x6e\x6b\xc2\x46\xf9\x46\x6a\x99\xc7\x5a\x6e\x7d\x0e\x62\xc3\x93\x39\xa0\x6d\xee\xe3\xb7\xef\xdd\xde\x78\xc2\xb8\x4a\x99\xd5\x39\xa0\xc8\xc1\xb2\xf7\x1f\xb6\x45\x75\x01\x86\xa3\x7e\x14\xe6\xd7\x35\xcd\x6e\x33\x23\x9f\xed\x04\xce\xb9\x36\x2c\xc3\x5c\x32\xe4\x33\x7b\xc8\x78\xae\xdd\x61\xc1\xcc\x6d\x7f\x26\xd4\xac\x01\xde\xa5\xfe\x47\x1f\x83\x44\x4b\x09\x55\xb8\x34\x02\x6a\xb8\xa1\xb2\x2e\x37\x86\x2f\x0f\x59\xc6\x6d\x86\x3c\x96\x8d\x44\x56\x69\x70\x4f\xbb\x9d\xbe\x87\x77\x8e\xca\xba\xc3\x8f\x5a\xcb\x43\x36\x74\x09\xe9\x90\x01\x26\x83\x2d\xf1\x79\xe5\xe1\xad\x74\x7e\x31\x65\x4b\x5d\xb2\x85\x4b\x75\x7c\x75\x6a\x37\x75\xd4\xc7\x79\x2d\x69\x99\x14\x73\x60\xaf\xeb\x93\xfa\xfa\xb1\x7a\x8b\xda\xf0\xd9\x76\xb5\x08\x2b\x2a\xab\x41\x0a\x85\x87\xac\xf4\xcf\x2a\xb3\xad\x90\xd6\xba\x86\x2e\xdf\xf8\xf7\x7d\x69\xa8\xed\x47\x76\x30\x3e\xe9\xff\x93\xf7\x7f\x7b\xdb\xff\x79\x72\xc0\xde\x74\xbb\x41\xaf\x49\x1b\x4c\x0e\x7a\xc7\xed\xa7\x95\x74\x57\x69\xab\xd7\x3d\x0e\xba\xe3\x71\x60\x0b\x9e\x40\x30\x99\x34\xd5\x36\xc8\x6f\x7a\xbd\xf6\x0a\xdf\x3f\xc0\xc4\xb6\xd1\x13\xb0\x9b\x45\x98\xb1\x3f\x0d\xde\x0e\xfe\xb0\xb3\xa0\x5b\xea\x24\x4d\xe9\xa4\x28\x8c\xbe\x07\x3a\xb1\x16\x0c\xd2\x47\x9e\xcc\xcb\x82\x7c\x99\xa6\x8f\xa5\x90\x29\x0d\x33\x48\xe6\x85\x16\x0a\x69\x28\x81\x1b\x1a\x4a\x6d\x81\x86\x3a\x2f\xb8\xa9\x46\x09\x58\xbd\x18\xb0\x96\x86\x5a\x4d\x85\xc9\xdd\xa8\x20\x41\x37\xde\x3b\xdd\xf5\x78\x6e\x74\xbe\x7a\xbf\xd3\x34\xd4\xc5\xb2\x37\xee\x3f\xb2\x6f\xd7\x3f\x0e\xae\xcf\xa9\x74\x0a\x6a\x49\xa7\x50\x48\xbd\xa4\x53\x61\xdd\x49\x74\x63\x52\x2f\x76\x2a\x6c\xae\x4b\x85\xe4\x1a\x1e\x3a\x53\x7e\xfe\xcc\xa5\x42\x3a\x7b\x70\x94\x87\x82\xab\xd4\x0d\xda\x20\x9d\x0b\x95\xd2\xb9\x36\x39\x47\xfa\x04\x48\x9f\x0c\x57\xee\xa9\xcb\x82\xfe\x22\x52\x78\x19\xb0\x8b\xdc\x2b\xbb\x50\x02\x05\x97\xe2\x37\xa0\x0b\x57\xf9\xa4\xa4\x0b\x75\xaf\xe7\x40\x7f\xd5\x42\xd1\xa5\xc8\x05\xd2\xa5\x73\xec\x15\x70\x5b\x1a\xa0\x2b\x30\x33\xa0\x2b\x8f\xf7\xca\xed\xc2\xdf\x61\x41\xd7\x05\x28\xba\x2e\x50\xe4\x4e\xd3\x75\x89\x74\xe3\x92\xed\x8d\x2e\xe8\xc6\x68\xd7\xa1\xd1\x4d\x19\x4b\x61\x33\xba\x29\x6d\xf6\x32\x88\xb7\xc0\x53\xba\x85\x04\xc4\x3d\xd0\x2d\xa4\x9a\x6e\x61\x26\xac\x73\xcb\x2d\xe4\xda\x13\x5d\xbb\x47\xb7\x50\x70\xe1\x88\xbf\x96\x60\x91\x5c\x06\xf4\x4f\x87\xe5\x16\xac\x96\x9e\xd5\x22\x37\x9e\x8c\xda\xf8\xef\xd2\x8b\x3a\x63\x5f\x86\x27\xe4\xf7\x40\x21\x70\x93\x64\x14\x82\x4b\x32\x14\x82\x4a\x29\x04\xa4\x30\xd3\x0b\x0a\xe7\xa2\xa0\xb0\x90\x02\x29\xf4\x8b\x85\x08\x05\x85\xa8\x0b\x0a\xcb\xd8\x79\x32\x2c\x6d\xe1\x45\x16\x02\x9d\x96\xa5\x4a\xe8\xce\x61\xbe\x33\x3c\x79\x21\x8c\x91\xf2\x3d\x2a\x8d\x54\xaa\x69\xa4\x44\xbd\x6d\x23\x55\x53\x8b\xda\xe1\x23\x55\xd4\x2e\x1f\x29\xb3\x72\xdc\xa8\x48\x5d\x49\x1c\x59\xa0\xcf\x5c\x20\x7d\xe6\x0e\xc7\x67\x23\xf0\x05\xab\xfb\x3e\xc3\xf5\xd6\xaf\xba\xc7\xa2\xd7\xed\x7e\xaa\xaa\xed\xa5\xaf\xb6\x37\x75\xb5\x0d\xab\x6a\x3b\xf2\xd5\xf6\xf3\xaa\xda\x8e\x83\x49\xef\xb8\xa1\xfd\x4d\xbb\xb5\xca\x00\x67\x0f\x3e\x04\x5d\x3d\x74\xf5\xc6\xa7\xe4\x7a\xe9\xaa\xdd\x6f\x47\xd1\x38\x8a\xe2\x6e\x2d\x3e\x39\xa0\xf5\xdb\xd8\x23\xed\x45\x51\x1c\x45\x93\x75\x4e\x79\x54\x56\x1f\xd5\xf7\xb6\xd3\xc3\xa5\xe0\x96\xb8\x25\xdf\x9f\x50\x6c\x80\xcf\x29\xf1\x8e\x48\xb4\x42\xa1\x4a\xa0\x94\x23\xa7\x14\xa6\xbc\x94\xe8\x46\xa1\x80\x52\x4d\xe9\x52\xf1\x5c\x24\x05\x37\x3c\x77\xab\xb6\x9f\x58\x02\xa4\x05\x72\x0f\x31\x25\xb7\xdf\xe0\xc2\x78\x2a\x14\x97\x72\x49\x53\x6d\xdc\x3f\xf0\x24\x5b\x8d\x7d\x1d\xff\xcb\xed\x99\xcb\x80\x24\xa6\x24\x14\x09\xe5\xae\x0a\x55\xef\xf2\xdc\x52\x0e\x8b\x94\x20\xc9\x83\xa2\xba\x5d\x23\x03\x58\x1a\x45\xb6\x3a\x68\x98\x19\xbd\x20\x34\xbc\x20\x34\x4b\x2a\x15\x0a\x59\x37\x44\xf7\xdc\xd0\x22\x03\x03\xd5\x73\x85\x64\x91\x09\x09\xd5\xba\xad\xc7\x4d\xd6\xb6\x77\x57\x6d\x99\x47\x53\x3b\x73\xe5\x46\x67\x77\x43\xc9\x9e\x9e\xa3\xdd\x8d\xa2\x6f\x14\x45\xdf\x7b\xed\xe7\x58\xba\x14\x45\xbd\xe7\x59\xc6\x14\x45\x93\x6d\x96\x4d\x87\xd2\x1e\x47\x51\xff\xe0\xe8\xcd\x9f\xdf\x7f\x38\x0e\x7e\xfa\xf7\xff\xfd\x3f\x4d\x9e\xe1\x6d\xd4\xb0\xfe\xa4\xab\x80\xe0\x57\x9a\x21\xcd\x80\x24\x92\x04\x72\x75\x9b\x94\x46\x3f\xe6\xfe\xec\x28\x8d\xf9\xfa\x10\x71\xa1\xac\xa3\xac\xdf\x85\x72\x9f\x42\x91\x81\x42\xf2\x04\x48\x58\x12\x56\x69\xec\x35\xd6\x5a\xfb\x7a\x75\x57\x5a\x39\x79\xeb\xc2\xd6\xf6\x07\xfe\x95\xbf\xa2\x91\xbf\xa1\x91\xbf\x53\x35\x8e\xc9\xce\x45\xcc\x6f\x8f\x8b\x97\xc1\xd7\xc9\x01\xbd\x7d\x18\x9f\xf4\xcf\x79\x7f\xfa\xb6\xff\xb3\xff\x8e\xc7\x6f\xfb\xef\xbe\x4e\x0e\x7a\xe3\xf3\xcb\xc9\x71\x73\xdf\x1b\xf1\x79\xa5\x53\x68\x5e\xbb\x76\xaf\x67\xad\x55\xa3\xe2\xb3\xad\x5b\xb5\xdd\x5e\xd3\x40\xa5\x5b\x94\x8e\x9d\x8b\xc2\x63\x8b\xa2\xc1\x86\xdc\xb8\x9b\xaf\xfe\x9e\xb8\x27\x56\xa2\xdd\x71\x8c\x6a\x6a\x26\xf4\x9a\xa2\x28\x6a\xbb\x47\xd4\x6b\xbf\x5c\xbe\xdc\x38\x63\xf2\xed\x8f\xdf\xd7\xa6\x9f\x98\x59\xe9\x42\xed\xf7\x18\xfe\x7a\xdb\xee\xd7\xff\x33\x66\xef\xfc\x20\xb1\xfe\x39\x62\xd7\xcc\xce\xb6\x99\xaf\x7e\x60\x0f\xea\x54\xbb\x80\xbd\xbb\x3e\xbd\xa6\x2f\x5f\xbe\xd0\xf9\xc5\x97\xab\x33\xfa\x38\xfa\xd4\x0b\x8e\xd7\x10\x76\x7f\x73\x79\x06\xc3\xfb\x1d\x10\x9d\x0f\xff\x15\x14\x67\x79\x0c\x69\x0a\x29\x1b\x76\x6a\x0c\x75\x49\xd8\xc5\xf0\xcb\xbe\x83\xfe\xcb\x0f\x50\x08\x95\xc8\x32\x75\x25\x2e\xb1\x19\x37\xc5\x7a\xe1\x3b\x9d\xea\xd6\x8b\x90\xfe\x27\x00\x00\xff\xff\x5e\xc4\xe1\x21\xb4\x13\x00\x00" func runtimeSyntaxPowershellYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPowershellYaml, "runtime/syntax/PowerShell.yaml", ) } func runtimeSyntaxPowershellYaml() (*asset, error) { bytes, err := runtimeSyntaxPowershellYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/PowerShell.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxReadmeMd = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x56\x41\x8f\x1b\x37\x0f\xbd\xeb\x57\xf0\x4b\x3e\x60\x6d\xc3\x18\x5f\x7a\xca\xa1\x3d\x14\x09\xba\x45\xb2\x97\x6c\x0f\xc5\x62\xd1\x91\x25\xce\x48\xb1\x46\x1c\x48\x9c\xb5\xa7\x87\xfe\xf6\x82\xd2\xd8\x6b\x67\x9b\xc3\xc2\x36\x45\x52\x8f\x4f\x8f\xe4\xbe\x87\xaf\x73\x64\x7d\x82\x4f\x3e\x60\x56\xea\x37\x4c\x08\x3a\x21\x0c\xde\x24\xba\xcb\x90\xeb\x71\x27\xc7\x8d\x52\x1f\xb5\x71\x30\xeb\x21\x14\x0b\xe4\x11\x8d\xef\x3c\x66\x70\x74\x04\x26\xb0\xc8\x68\x18\xd8\x61\x71\xe0\x79\x44\xd8\xeb\x8c\x16\x28\xd6\x10\x3c\x31\xc6\xec\x29\x02\x25\x70\xa8\x2d\xa6\x0c\xab\xce\xa7\xcc\x10\x7c\x44\xa0\xee\x12\xbe\x6e\xd4\xa3\xc3\x28\xbf\x17\x58\xa3\x66\xc6\x14\x33\xe8\x68\x21\x61\xef\x29\x66\x09\x3b\xa0\x95\xeb\x9d\xef\x5d\xf0\xbd\x63\xe8\x13\x4d\x63\x86\xa3\xf3\xc6\x01\x63\x08\xb5\xa2\x33\xce\x57\x47\x76\x9a\x2f\x58\x1b\xa5\xbe\xe8\x83\x8f\x3d\xcc\x34\x25\xa0\x63\xbc\x21\x00\x7c\x86\x17\x4c\x33\x64\x3f\x8c\x01\x1b\xb8\x87\x84\x86\x86\x01\xa3\x95\x08\x30\x0e\xcd\xe1\x02\x1f\x74\xc7\x98\xca\x81\x60\xef\x7c\xf4\xd9\xa1\x85\xa3\x67\x27\x4e\xea\xa9\xad\xd9\xff\x2a\x71\x98\x9a\x9e\xda\xe7\x55\xb3\x7b\x63\x5d\xc3\x98\xa8\x4f\x7a\x80\x55\x20\xa3\x19\x2d\x78\xa1\xc5\x67\xb0\x3e\xa1\x61\x4a\xf3\xba\x81\xdf\xa7\xcc\x30\x06\x6d\xb0\xe2\x2f\x0f\x55\x93\xa9\x02\xa8\x04\x21\x98\x29\x25\x8c\xfc\x1a\x5b\xe9\x9c\x22\xb4\x3d\x95\xcf\xb7\xb8\x8a\x8b\x67\x38\xfa\x10\x96\x3a\xb1\x70\x21\x89\x1b\xb8\xef\xae\x5e\x29\x92\xc2\x94\x28\xe5\x4b\xc0\x98\x7c\x64\x68\x1f\x08\x7c\xce\x13\xe6\xff\xb5\x8d\x52\x7f\x0a\x63\x3a\x42\x42\x6d\x61\x20\x09\xde\xd3\xc4\xe7\x37\x3a\x26\xcf\x78\xcb\xff\x4a\x40\x18\x0a\x94\xb2\x71\x38\x60\x5e\x9f\x4b\x7a\xaa\xd6\xe7\x55\xd3\xec\x1c\x86\x71\x57\x7f\x37\x83\x5d\x83\x25\x33\x0d\x18\x59\xb3\xa7\xd8\x28\xf5\x1e\x3e\x63\xaf\xcd\x0c\x77\x4d\x95\xf9\xe5\xfd\x95\xfa\x52\x54\x32\xe5\xaa\xa7\x29\x63\xc9\xde\x56\xc7\xf6\x55\xd4\x1d\xa5\x5b\x68\x55\x69\x3e\x43\x24\x08\x14\x7b\x4c\x90\xa7\x71\xa4\xc4\x68\x0b\x3d\x22\x03\xa7\x5f\x5e\x93\xa9\x9b\xf8\xa2\x43\xf1\x39\xd2\x14\x2c\x04\x7f\x40\x41\x60\x28\xbe\x60\x62\xf9\x2a\x40\x22\x1e\x2f\x18\xb6\x55\x72\x3a\x5e\x60\xbe\xea\xa9\x46\xbd\x55\xd4\x95\xfd\x4a\x53\x3a\x64\x01\xfd\x23\x61\x7d\x50\xaa\x6d\x5b\xf5\x7f\xf8\x4e\x1c\x57\xc9\xc0\xd4\xa2\xe0\x67\x30\x8d\xc8\xae\x44\xa8\x2f\x94\xeb\x30\x90\xbf\x9b\x72\x8b\x56\x0a\x1d\x7b\xc4\x78\x2e\x13\x2d\x4c\x59\xda\xaf\xb0\xc1\x44\xa1\x51\xea\x81\x18\x17\x83\x64\x22\x0a\xe0\x73\xbc\x63\x18\x31\x75\x32\x6d\x44\x14\xec\x68\xea\x9d\xe8\xcd\x67\x98\xa2\xd0\x17\xe6\xca\xd0\xa0\xe7\x02\xdb\x47\x26\xc8\x34\x20\xe4\x41\x87\xb0\x28\xf1\x8a\x78\x11\x6a\x81\xc4\x04\x9d\x3f\xc1\xa0\xe3\xa4\x43\x98\xd5\xaa\xea\xf2\xa7\x05\x7b\x97\x68\xf8\x8e\x23\x70\xda\x9e\x13\xd6\xae\xdf\xa3\xd4\x71\xa9\x6b\x5d\x74\x57\xd5\xb5\x10\x71\x99\x41\xe2\xd8\xd5\xf9\xfb\xe8\x30\xd7\x1e\xba\x62\xec\xad\x63\x91\x5f\x21\xbc\x81\x47\x02\x1f\x33\x4b\x45\xec\x70\xd8\xc2\xb7\x29\xb3\x1a\x27\x86\xc5\xf4\xdd\x08\x8b\xd0\xfe\xb3\x6b\x0c\xc5\xce\xf7\xbb\x92\x63\x51\x87\xb4\xe4\xa3\xc3\xb9\x5e\xaf\x0f\x18\x6b\xa5\x0f\x3a\xd2\xf6\x3c\xea\x8d\x10\x52\xed\x4f\x85\x82\x84\x23\x65\x2f\x1c\x3c\xaf\x1c\xf3\x98\x3f\xec\x76\xbd\x67\x37\xed\x1b\x43\xc3\x2e\x1b\x1a\x35\xff\xbd\x8b\x3a\x52\x32\xeb\x46\xdd\x50\x50\x21\xc9\x7d\x3a\x0c\xa2\x15\x6f\x31\xb2\x5c\x22\x6f\x20\x17\xdf\xe5\x2d\xe0\xc9\xe0\xc8\xb5\xe5\xe4\xf9\x0e\x38\x83\xf5\x5d\x87\x09\xa3\xc1\xfc\x41\xa9\xcd\xc2\xac\x25\x94\x06\xe4\xd2\x11\xad\x2f\x33\xa0\x6d\xe0\x3e\x66\x46\x6d\xb7\x25\x85\x06\xa3\xb3\x8c\xc2\x2c\x7b\x88\xfd\x0b\xc2\xa0\xd9\xb8\xed\xa5\x8d\xde\x9c\x77\x41\xf7\xb0\x6a\x7d\x7b\x19\x37\x09\xfb\x29\xe8\x04\x78\x1a\x13\x66\x59\x67\x0a\x00\x60\x03\x9f\x48\x8c\x5a\xd6\xc3\xf6\x8c\x00\xfa\x24\x1a\x7f\xd7\x6c\xde\xb5\x4b\x7b\xef\x65\x6d\x20\xb4\x37\xe7\xab\x5f\xfc\x5a\x7c\x44\x29\x7f\x94\x36\x28\x9b\xe2\x7a\xde\x95\x6e\x28\x0f\x5b\xd7\x64\xc6\x73\x3f\xfd\x47\x2b\x2d\x03\xec\xbc\xca\xaf\xf2\x40\x87\x9a\xa7\x84\x0d\x94\x0e\xad\xb9\x86\xa2\x1c\x70\x3a\x59\x43\x76\xa1\xa2\xc4\x6c\x97\xe9\x26\xb3\x66\x8f\x32\x37\xf6\x01\x07\xcd\xde\x80\xc5\x11\xa3\x15\xac\x14\xaf\x22\xea\x2d\xd2\x55\x53\x96\xad\x5a\xfe\xaf\xf0\x19\x34\x04\x7f\xb9\xf0\x7a\xf2\xfd\x00\xff\x98\x68\xc4\x14\xe6\x52\xc8\x35\x11\xe5\xd1\x5f\xbc\xda\x40\x4f\x6a\x03\x46\x6d\xc0\xaa\x0d\x0c\x3a\x1d\x2c\x1d\xa3\xda\x80\xe3\x21\xa8\x0d\x84\x49\xab\x0d\xe4\xa3\xef\x58\x6d\x20\x49\x6f\x6c\xe0\x9b\x7e\xd1\xcb\x47\x36\xc9\x8f\x62\x1b\x75\x36\x5a\x22\xc6\x99\x1d\xc5\xe2\xbc\x9f\x25\xd6\xc9\x2d\x5e\x7c\x18\x4f\x62\xa0\xe0\xad\xe7\xb9\x6c\x12\x6f\x30\x66\x54\xea\x2b\x22\x3c\x7d\xbe\xff\xf5\xe3\xc3\xd7\x8f\xcf\xab\xe5\xcb\xba\x51\xff\x06\x00\x00\xff\xff\xf5\x4f\x77\x99\x62\x09\x00\x00" func runtimeSyntaxReadmeMdBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxReadmeMd, "runtime/syntax/README.md", ) } func runtimeSyntaxReadmeMd() (*asset, error) { bytes, err := runtimeSyntaxReadmeMdBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/README.md", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxAdaHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x4c\x49\xe4\xd2\x88\xd1\x4b\x4c\x29\x56\xa9\x01\x51\x49\x10\x2a\x51\x45\x93\x8b\x0b\x10\x00\x00\xff\xff\x47\x29\x8c\x94\x1c\x00\x00\x00" func runtimeSyntaxAdaHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxAdaHdr, "runtime/syntax/ada.hdr", ) } func runtimeSyntaxAdaHdr() (*asset, error) { bytes, err := runtimeSyntaxAdaHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ada.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxAdaYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x54\x6d\x6f\xdb\x36\x10\xfe\xee\x5f\xa1\x79\xdd\x62\x27\x8b\xd6\xaf\xd3\x5e\x0a\xc3\x73\xd2\x00\x59\x3c\x38\xea\x10\xc0\x34\x86\x93\x78\x96\x89\x48\xa4\x76\xa4\x92\x78\x7d\xfa\xdf\x07\xca\x2f\x6b\xb3\xb5\x31\x60\x9d\xee\xed\x79\x8e\xd4\xdd\xad\x4d\xcd\x61\xdb\x72\x96\x90\xa6\xc1\x40\x73\xe0\x32\x64\x83\x24\x49\x92\xe8\xb2\xd4\x70\x96\x0c\x47\x4a\xa5\xa4\xfd\x2b\xf4\xb2\xd8\x4b\x7a\x35\x1e\x0e\x06\xd2\xd5\xec\xb3\x24\x49\xfa\xa4\xaf\x93\x79\xcb\x42\xc1\x89\xef\xf5\xf3\xc4\x6f\x9b\xc2\xd5\xa9\xdb\x9b\xb3\x64\xb4\x4c\xb3\x1f\xbf\x3b\x3b\xc5\xcf\x5f\xbd\x51\xea\x9b\x15\x7e\xc2\x2f\xf8\x1e\xe7\xf8\x76\xfc\x69\x4a\x21\x54\xde\x73\xf0\x59\x32\x5c\x8e\xc6\xef\x3f\xac\xa0\xd4\x12\x4a\xad\x86\x7b\xaa\x7b\xde\x3e\x3a\xd1\xa9\xb0\x67\x79\x60\x7d\x48\x0f\x14\xb8\x61\x1b\x8e\x8e\x2c\x51\xc5\x88\x0a\x27\x01\x54\xf8\xf8\x0f\x42\x65\x00\x95\x25\xb7\x3b\xe1\x3d\xa8\x36\xe4\x59\x83\xea\x1a\x64\x35\x48\x84\xb6\xa0\x80\x82\x2b\x63\x51\x38\xbd\x45\x49\x9e\xc7\xaa\xf8\x32\x53\xe9\xac\x0f\x64\x03\x34\x97\x35\x09\x43\x73\x4d\xdb\xf8\x0c\x04\x6d\x2a\x13\x3c\xb4\x03\xd7\x9e\xe3\xc3\xac\xc1\x56\x83\x6d\x90\x2d\xf8\x29\x96\x64\x9c\x05\x3f\x99\x80\xb5\x13\xac\x3b\x5b\x46\xcb\x8b\xbc\x15\x5b\x16\x53\xa2\x72\xc1\xc1\xac\x61\x2c\x8c\x0d\x2c\x6b\x2a\x19\xc6\xa3\x36\x8d\x09\xac\x51\x3b\xd7\xa2\x71\x1a\x96\x1f\x61\x5d\x80\xed\xea\x1a\x6e\x0d\x27\x70\x61\xc3\xe2\xe1\xba\x00\xf7\xc0\x22\x46\x1b\x5b\xbd\xc8\xdc\x52\x79\x4f\x15\xa3\x15\xaa\x1a\x42\x2b\xe6\x81\x42\x54\x5d\xc9\xba\x93\xfe\x2d\x76\x16\x6b\x08\x19\xcf\x10\xb2\x15\x43\xb8\x74\xa2\x21\xdc\x40\xfa\x5e\xf3\x10\x0e\x9d\x58\x08\xff\xd5\x71\xf7\xf2\x55\x0b\x3f\xb0\x78\x86\xe7\x9a\xcb\x00\xcf\x2d\x49\x64\xf6\xae\x61\xf8\xae\x88\xbd\x0d\xbf\xb5\xe5\x46\x9c\x35\x7f\xb3\x46\xa0\xaa\xea\x85\xbf\x47\x60\x69\x8c\x8d\xf1\x61\xc3\x16\x7d\x70\x67\x83\xa9\x5f\xe4\xed\x3c\xe3\x31\xe6\x3c\x6e\x4c\xcd\x78\x34\x61\x83\x27\x27\x31\x6f\xdf\x9c\xd3\x7d\x13\xec\x71\x0e\x3d\x91\x16\xce\xd5\x3d\x44\xbe\x78\x37\xc3\xc5\xe4\xfa\x76\x36\x7e\x1e\x63\xbb\xa6\xe0\x7e\x54\x5e\x9f\xff\xb0\x3a\xdb\xf9\xf7\xb8\xb7\xc1\x09\x55\x9c\xe4\xdb\x96\x0f\x33\x16\x0b\x4f\xfd\xce\xd1\x63\x5f\xdd\xe4\xb3\xcb\xd9\x02\x37\x93\xfc\xdd\x62\x72\x8d\xdf\xe7\xb7\x57\xf9\xd5\x1f\x33\x5c\x5c\xcf\x27\x39\xa6\x6f\x27\x8b\xc9\x34\x9f\x2d\x70\x9b\x2f\xae\x6e\x2e\xff\x3d\xee\x7f\x90\xae\xe7\x37\x97\x7f\x1e\xe0\x6e\xdf\xce\x17\xf9\x51\xeb\x5d\x3b\xc0\x9d\xa3\x7f\x3f\x60\xed\xca\x9d\x6e\x28\x4e\x1a\xcb\xf3\x23\xfa\x20\xc6\x56\x69\xb9\x21\xc9\x12\x75\x92\xaa\x93\xc1\xf1\x80\xd1\xf3\xff\xf1\xbb\xcd\x14\x7f\x3e\x90\x84\x2c\x51\xc3\xa3\x85\xad\xfe\x44\xf7\xf7\xa6\xcd\x12\xa5\xd2\xa3\x65\xb7\xaa\x8e\xea\x73\x86\x96\x4b\x43\xf5\xb4\xaf\x68\xa4\xd4\x6b\x28\xa5\x14\x94\x0a\x50\xca\x42\x29\x81\x52\x43\x28\x75\x32\xfe\x1c\x44\x3f\x6d\xad\xab\x29\x8e\x6b\xe4\x56\xa3\xe5\x32\xab\x84\xda\x4d\xb6\x5a\x9d\xaa\xcf\x26\x76\xd6\x94\x4e\xc7\x1b\x57\x9d\x7a\xbf\x5c\x66\x4f\xfd\x9a\xc8\x56\xab\xb3\x0f\x83\x8f\xbf\xfe\xb5\xb1\x9c\x4c\x5d\x13\x3b\xf2\x78\x45\xbd\x96\xd6\xc6\xc6\x5d\x7d\x7e\x9e\x9e\x0e\x3f\x4e\xc9\x9d\x76\x87\xaf\xeb\xb4\x8b\xeb\x3c\x9f\xff\x3a\xc7\xdd\xdd\x1d\x2e\xae\xee\x7e\x9b\x8d\xb3\x37\xc3\xc1\x3f\x01\x00\x00\xff\xff\x2d\xaf\x92\x76\x09\x06\x00\x00" func runtimeSyntaxAdaYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxAdaYaml, "runtime/syntax/ada.yaml", ) } func runtimeSyntaxAdaYaml() (*asset, error) { bytes, err := runtimeSyntaxAdaYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ada.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxApacheconfHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x14\xc6\x31\x0a\x80\x30\x0c\x05\xd0\xbd\x47\x71\xc8\x89\xfe\x12\xd2\x48\x1c\x6a\x03\xf9\x08\x42\x0e\x2f\x6e\x4f\x53\x2d\xdc\xf6\x7d\x8e\x20\x73\x42\x7e\xf7\xba\x96\x43\xf8\xa6\x57\x3f\xb1\x8b\x05\x99\xc0\xd1\x90\xa0\x9a\x79\xd5\x18\x5f\x00\x00\x00\xff\xff\x8c\x53\x79\x6f\x3c\x00\x00\x00" func runtimeSyntaxApacheconfHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxApacheconfHdr, "runtime/syntax/apacheconf.hdr", ) } func runtimeSyntaxApacheconfHdr() (*asset, error) { bytes, err := runtimeSyntaxApacheconfHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/apacheconf.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxApacheconfYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x59\xdb\x8e\xe3\x36\xd2\xbe\xef\xa7\x68\xf4\xff\x5f\x6c\x36\x48\x27\xc8\xde\x35\x06\x09\x7c\xea\x19\x21\x92\xed\x58\xee\xc9\x60\xe3\x6c\xc0\x11\xcb\x12\xd7\x12\xa9\x25\x29\xb7\x1d\xf0\xe1\x17\xc5\xa2\x0e\xb6\x5b\xbd\x03\x8c\x55\xdf\xa7\x22\x55\x24\xeb\x24\xf5\x5e\x94\x60\xcf\x35\x3c\xdd\xb3\x9a\x65\x05\x64\x4a\xee\xef\xee\x38\x58\xc8\xec\xd3\xdd\xfd\xfd\xfd\x3d\x6a\x48\x56\xc1\xd3\xfd\x43\x61\x6d\xcd\x77\xbb\x47\x54\x72\x95\xa8\x60\xb7\x7b\xc4\xc1\xc6\x1d\x0b\x65\xac\xd9\xed\x1e\xf9\x6e\xb7\xdb\xfd\xdd\xed\x76\x8f\x85\x65\x59\x06\xc6\x3c\xdc\xdd\xe9\xa6\x04\x43\xb3\x7d\x77\x2f\x38\x48\x2b\xf6\x02\xf4\xd3\xfd\xc3\xdf\x26\x59\x06\xb5\x4d\x1a\x0b\x27\x47\xf2\x9a\xd9\x22\x92\x7b\xe5\xa1\x31\xcf\xa2\x84\x25\xab\xc0\x4d\x32\x2b\x94\x74\x13\xce\x27\xa5\x0d\x97\xe9\x79\x21\x33\xc5\x85\xcc\x3b\x62\x7b\xae\x01\xc1\xac\x60\xda\x80\x57\x9c\xc3\x9e\x35\xa5\xbd\x60\x4c\xa6\x45\xdd\x4e\xd8\x4e\xf2\xcd\xc3\xdb\x36\x72\xfe\x89\x49\x5e\x82\x46\xe5\x28\xa3\x41\x78\xbd\x7c\x3e\x31\xad\x01\x91\xac\x1b\xfb\x2c\x4a\x4b\xc3\x62\x26\xf3\x86\xe5\xfe\x56\xa2\x78\x53\x02\x2d\x92\xf3\x55\x63\x2f\x34\x87\xb8\x9f\x8e\xae\xa5\x60\x86\x7e\x13\x66\xb3\x62\xcc\xe0\xb2\x54\xaf\xce\xff\xce\x56\xcb\xe5\x62\xb6\x25\xe0\x8d\x05\x9e\x96\xcc\x14\x60\x88\x5b\x1d\x41\x6b\xc1\xc1\x4d\xa4\x92\xe7\x4a\x35\xa6\x97\xfe\x9c\x34\xb6\x50\x5a\x58\x66\xc5\x71\xa0\xf1\x67\xac\xf2\x45\xc5\x44\x39\xa0\x92\xc6\xd8\x8f\xe2\x08\xd7\xfc\x52\xbd\x18\xd0\xd1\x7c\xcc\xd4\x4e\xf1\x33\x68\xb1\x3f\x87\xe1\xc6\x88\x5c\xd2\x40\x87\x46\x5c\x19\xd2\xd8\x62\x3e\x4d\xde\x24\x3f\x6a\xd5\xd4\xe8\x34\x2d\x41\x1b\x47\x32\xce\xd8\xdf\x13\x39\x18\x3b\x29\x73\x9c\xa3\xa8\xc6\x0c\xec\x34\xe7\xaa\x62\x42\x0e\x86\x5e\xcd\x74\xf5\x64\xcf\x2d\xb3\x59\x01\xd9\x61\xc8\x28\x99\xc1\xb3\xd2\x15\xb3\xd7\x6c\x2c\xf6\x60\x45\x35\x1c\xff\xab\xaa\x07\x28\x2d\x2a\xa8\x52\xf1\x17\xbc\x63\xeb\xa5\x15\xf1\x7c\xb2\xbe\xdd\x26\x64\xa7\x42\xf2\xf9\xf2\x02\xae\x99\x31\xaf\x4a\xf3\x8e\x0c\x11\x33\x53\x72\x2f\xf2\x9e\x55\x55\xcd\x34\xcc\x97\x2b\x99\x82\x3e\xa2\xd3\x86\x3b\x73\xd0\xb0\x07\x0d\x32\x03\xef\xa3\x60\xde\x31\x14\x07\x2c\x24\xfb\x5a\x42\xff\xc0\x67\xad\xa4\x5d\xb3\x1c\x3e\xb1\xb0\x69\xc8\xfa\x25\x4d\xac\xd5\xe2\x6b\x63\x61\x84\x8e\xcc\x60\x35\x1b\xa8\x94\x05\xef\x3f\x43\xfa\x45\x97\x5e\xa6\x7c\xd2\xd8\xa2\xf3\x8d\xd6\x31\x46\xec\x9d\x6a\xf5\x6a\x40\xfb\x98\x73\x43\xb0\x54\x33\x66\xc0\x4d\xd3\x1f\x7f\xf8\xe1\x87\x49\x96\xa9\x46\x5a\x37\x6d\xf6\xb8\x0b\x3c\x56\xb9\x71\x33\xcc\xaa\x21\x03\x2d\x4e\xb5\xd0\x10\x28\xa1\x63\x90\xb9\x2d\x06\xf0\x08\x65\x3b\x40\x18\xdc\x19\x02\xb4\x4b\x41\xc6\x29\xce\xde\xa9\x46\x6c\xf5\x6a\xde\x01\x48\x52\x3a\x03\x3c\xb2\x12\x7c\xba\xf3\xe4\xc7\x6c\x56\x02\xeb\xc0\x9c\x89\xf2\xdc\x82\x48\x5a\xd0\x47\x56\xb6\x38\x81\xea\xc5\x60\xe2\x0a\xf8\x45\x36\x06\x38\xa1\x28\x97\x4a\x83\x17\x67\x4a\x5a\xad\xca\x21\xff\x09\x18\x07\x3d\xe6\x03\x03\xc5\xa5\x8a\x99\xb1\x89\x0a\xb3\x06\x80\x9a\xfc\x99\x65\x56\x69\xe2\x13\x76\x1a\xee\x60\xc2\x4e\xb8\x4c\x8c\x87\x40\x08\x79\x49\x2c\x21\x57\x56\x30\x0b\x7c\xae\xb2\xb0\xb3\x1b\xa5\x2c\x49\xbd\xde\x56\x54\x90\x30\x9d\x0b\x39\x66\xeb\xc7\x28\x61\xf5\xe2\x64\x41\x1a\xbf\x89\x14\x18\xe1\x58\x5b\xb8\xf2\x05\xc5\xb4\x30\x55\x8d\xce\x60\x21\x33\xe7\x8f\x2b\xad\xa1\x2c\xb1\x52\xcc\x0a\x51\xf2\x35\xe8\x90\xde\x70\xe3\x40\x5a\x8a\x70\x37\x53\xea\x20\x20\xa4\x1a\x02\xb4\x66\x13\x50\xac\xf2\x20\xa1\x17\x8f\xd9\xeb\x15\x52\x7b\x46\x2f\xf0\xf2\x56\xb3\xec\xe0\x9f\xae\x34\xcc\x9b\xaa\x9e\x0b\x0d\xb8\xb5\x67\x37\x6b\x8c\x55\x15\xce\x3b\x67\x47\xfc\x3f\x87\xda\x97\x60\x21\x85\x3d\x23\x11\xab\xec\x30\x9f\xa2\x94\x08\x89\x9b\xa5\x1a\xeb\xc2\xe2\x7d\x39\x0c\x72\x57\xe3\x02\xc6\xf0\x1a\xb1\x70\x0e\xfb\x92\x59\xa0\x50\xf1\x27\x11\x18\x74\x55\x0d\x06\xb7\xd9\x07\x44\xcb\x53\x3d\x5c\x2a\xdb\x69\x26\x50\x5d\x68\xfc\x26\x24\x57\xaf\x61\x2e\x79\x76\xfd\x0a\x3b\x29\x92\x1c\x4e\x3d\xa4\x78\xee\xa0\xaf\x8b\x63\xf6\xaa\xac\xa9\x40\x5a\xef\x3e\xb8\x7f\xd1\xca\x17\xf8\x20\x53\xcd\x76\x14\xa9\x8b\x13\xf6\x31\x42\xc9\x4f\x4a\x1d\x02\x97\x24\x93\x75\x10\x53\x90\x1c\x9b\x2a\xb7\xd0\x5a\xe9\x76\x62\x42\x78\x0a\x8b\x13\xc3\x68\x75\xe1\xdc\xb1\xef\x39\x76\x88\x1a\x82\x11\x23\x83\x4e\xeb\x96\xde\x5f\xb1\xde\x5b\x66\x1b\x83\x90\x36\x71\x0e\x7b\x21\xa1\xc7\xad\xdf\x62\xf0\x2c\xb6\x2c\xf7\x02\x41\x6a\x33\x9c\x4f\x22\xed\xe9\xae\xb5\xc0\x72\x72\x26\xd6\xa7\xd0\x67\xa5\x31\x32\x32\x34\xdf\xa7\x65\x47\xb1\x3f\x62\x27\xdd\xf4\x59\xf8\x93\x32\x16\xbb\xcb\x58\xa9\x43\x53\x1b\x17\x79\x45\x4b\x19\xce\x45\xfb\x60\x6b\xb4\xa7\x9e\xc9\x45\xfb\xcf\xa0\x7d\x0c\x46\x15\xab\xa7\x98\x7c\x51\x68\x97\x8c\x72\x02\xb2\x71\x91\xcc\xca\x86\x83\xf3\x27\x4e\x59\x86\xe4\x76\xb1\x04\x34\xf7\xdb\x81\x63\x47\x6c\x8d\xd2\xc9\x3a\x9a\xd4\x35\x48\xcc\xe7\x5b\xe5\x8f\xc9\xb8\x6b\xfa\xd7\x06\xf4\x99\xd8\x3e\x01\x7b\xf8\xcc\x0e\x30\x31\x67\x99\x11\x8c\x55\xbe\x54\x36\x6d\xea\x5a\x69\x0b\x9c\xc8\x0d\x30\x3e\x29\x80\x71\x8a\x07\xf7\x0b\x40\x3d\x29\xf1\xd8\x3b\x29\x84\xdd\x88\x95\x37\x67\xe3\x0b\x35\x15\x0f\xab\x05\x98\x9e\xd8\x6e\x63\x02\x4a\x4a\xf0\x3d\x75\x1b\xd1\xc8\xae\xea\x9b\x51\x81\x6a\xc7\xa5\x05\xd3\xc0\xfb\x45\x5e\x71\xef\xb4\x27\xa8\xb9\xd5\x8d\xb1\xc0\x67\x13\x77\x81\xbc\x17\xc5\xa2\x12\x96\x7e\x29\x84\x48\xf6\x05\x49\xb2\x72\x03\x59\x43\x47\xef\xe9\x0d\xfc\xa7\x01\x63\xa7\x8a\x9f\x2f\x88\x67\x01\x25\x37\xb7\x94\x4f\x0c\x43\x36\x16\x72\xd4\x52\x54\xfb\x92\xc4\x97\xcf\x30\x16\x64\xb8\x4c\x59\x76\x40\x67\x8f\x15\xe3\xb4\x0b\x8a\x85\xb6\xde\xc5\x2a\x63\xbe\xd4\xb6\x02\xc5\x10\x26\xd1\xa0\x9a\x87\xfe\x2f\x56\x39\x65\xb0\x84\x9d\x66\xa5\x00\x69\x0d\x8a\xdd\x99\x87\xc7\x8f\x55\xd0\x84\x9d\x12\xa8\x9e\x35\x00\x8e\x6a\x95\xd7\xa0\x7d\x85\xb9\xe2\xb6\x85\x06\xe6\xc9\x14\xbb\x37\xea\xdc\x4c\x87\xe9\xb6\xc7\xb7\x62\x3f\x65\x5b\x78\x57\x5f\xff\x0d\x99\x9d\xf9\x76\xe7\x8a\x7c\xc7\x01\x3a\xcd\xd4\x6a\x60\x95\x90\x79\xf0\xf7\xa4\xad\xdf\xfd\x14\x81\xc3\x4e\xee\xc8\xca\xae\x4b\x0f\x34\x69\x80\x65\x73\xa1\xfd\x95\x52\x16\x4a\x69\xb3\xdf\x8b\x93\x4b\x7c\x4d\xcf\x45\xe6\xf7\x3c\x11\xf2\x72\xd9\x01\x87\x05\x8e\xd9\x9b\x30\x6a\xa5\x13\xc5\x71\xbe\x17\x03\xdd\xdb\x69\xd2\x94\x56\x1c\x05\xbc\x86\x14\x89\xd9\xec\xb3\xd0\xb6\x61\x25\xe6\x34\xb7\x54\x6b\xad\x4e\x67\xb7\x6c\xaa\xf6\xa1\xcb\xdf\xd2\x34\x6e\x5d\x1e\xb4\x0d\xcc\x4b\x9d\x6b\xc6\xc1\xf7\x78\x6d\x76\xf2\x89\xc9\x61\x43\xbe\x90\x47\xb7\x16\xfc\x9d\xe6\x74\xad\x95\x55\x99\x2a\x17\x59\xa1\x1c\x3d\xd4\xff\x4e\x19\xa7\x44\x1b\x60\xa9\xb2\x03\x89\xa1\xbd\xf0\xb2\xcf\x67\xdd\x4b\xa0\xa7\xa2\xd5\xa0\x2c\x7b\x86\x96\x18\xc4\xd3\xb3\xd2\xaf\x4c\x73\x43\x04\x1a\xd9\x4b\x1b\xc0\xa5\xbe\x63\xea\xe9\xbc\xd6\x60\x70\x47\xfc\x36\x79\x66\x03\x19\x88\x23\x5c\x3f\x95\xba\xf8\xa1\x3c\xb0\xa3\x75\x6d\x42\x6d\x0a\xf3\xe0\xb3\x60\x0e\x33\x6a\x45\x1f\x0e\x36\xc0\x7d\x85\xef\x84\xf7\x5e\x9d\x5b\x9d\x35\xe8\x8a\x49\xac\xcb\x2d\xb3\x85\xaa\x76\xde\x1d\xa1\xfd\x92\x40\xa8\xfb\x04\x40\xb0\xfd\x54\x40\x68\xf8\x15\x80\x98\xae\x49\x22\x78\xf1\xf6\x4f\x94\x4f\x86\x61\x7d\xef\xd6\x51\xd4\xc1\x76\x78\x03\xaf\x5a\x58\xf0\xd5\x30\xc8\x33\x25\x79\x2b\x2f\x64\x8e\x35\x34\x20\xcc\x43\xbd\x9c\x0f\x44\xca\x45\x01\x27\xac\x6e\xc5\xd6\x29\x03\xdc\x60\x92\xdb\xf8\x14\x39\x5b\xbf\x04\x29\x59\x24\x41\x5a\xae\x37\xab\xd9\x88\xc1\x29\xb3\xc2\xec\xcf\x2e\xcd\x94\x86\xa9\x62\x9a\x92\x67\xea\x3f\xc6\x84\x0b\x7d\xe3\x18\xc8\x74\xe8\x44\xf8\x5a\x50\x6b\xb0\xa0\xa9\xbd\x0e\x3c\x2e\xa4\x93\x42\x52\xe9\x70\x78\xcf\x22\x9c\xe2\xf2\x53\x2c\x25\x40\xa9\x7c\xcc\x54\x90\x7c\xe0\x90\x14\xc3\x13\x5e\x09\xd9\xca\x64\xa7\x97\xa9\x72\x91\xec\x7d\x8e\x44\x4c\x16\x41\xf4\x7d\x23\x89\xa9\xc8\x25\xb3\x8d\x6e\xb5\xb6\xea\x00\x12\x67\xb2\x18\xeb\x74\x89\xf6\x9d\x10\x5e\x31\x53\xb0\xc1\xb3\x46\x0d\xb6\x43\x67\x4b\xc1\x5e\xb8\x56\x9a\x46\x0b\xc9\xb1\xbb\x43\x09\x83\x3e\x31\x5e\x4e\x2d\xd3\x36\xf0\x18\x46\xa1\x36\xa5\x69\xf4\x22\xb9\xef\xbe\xb8\xcf\x2c\x69\x1a\xcf\x26\x98\xb6\xc4\x5e\x64\xd4\x90\xc3\x0d\x89\x2b\x1e\xb3\x0f\x55\x37\x70\x0c\x45\xb1\x1f\xde\x73\xb4\x5f\x69\x3c\x98\x70\x56\x30\xd1\xeb\xbe\xf1\xf4\x9e\xfa\x05\xce\x1d\x2b\xea\x02\x74\xda\x08\xeb\x61\x08\x80\x34\x8d\xe9\x43\x63\x9a\xc6\xc1\xa7\xc7\x6d\xc5\x64\xb6\x2e\x34\x33\x30\x17\xac\x44\xf7\x4a\xe3\x36\xd3\x06\xf9\x74\x7e\x73\x43\x6e\xef\xb4\xeb\x0a\x77\x6e\x37\xe1\xe6\xc6\xe5\x88\x7e\x35\xef\xd8\xeb\x93\x79\xb7\xd0\x90\xab\xb3\x42\x48\x18\xb3\xf1\xf6\xf6\xc5\x63\x6f\x56\x4b\x5f\xe8\xae\xa0\x7f\x59\x44\x6e\xc3\x24\x57\x55\x0a\xc0\x3d\xa2\xd4\x34\x6e\x6f\x50\x48\xd3\x18\xd5\x53\x7a\xe3\xf3\xb5\xfd\x1a\xb7\xb9\x1d\x4b\xa5\x69\xe3\x2b\x8d\xe9\xf1\xd4\x36\xf5\x38\x98\x83\x3e\xdd\x96\x5d\x72\xf0\xd0\xd4\xa4\x0d\x9c\x20\xc3\x79\xe8\x3d\x85\x78\x1f\xbf\x23\xb6\x5e\xf7\x40\x84\x53\xcb\xb2\x83\xcf\x0c\x68\xde\xaa\xb1\x0e\xdf\xb0\xdb\x4f\x35\x5b\xcd\xa4\xd9\x83\x7f\x9d\xc3\x6c\x6e\xc2\x27\xb4\x17\x69\x28\xca\x5f\x0c\xcc\x98\x54\x52\x64\xac\xf4\x0b\x42\x8b\xfc\x0f\x36\x34\xa1\x8f\x18\xbe\x73\x8e\x18\xf7\x86\x66\xb4\x76\xc3\x3e\x24\xc8\xc3\xdc\x7a\x4b\x45\x6b\xf7\x9b\x90\xff\xf8\x31\x7c\x76\xa2\x0f\xf1\x8b\x93\xfb\x32\x15\xf6\x13\x1b\x7c\x6a\x32\xe7\xea\xab\x2a\x1f\x2d\xcb\x9f\xee\x1f\x3e\xfc\xfe\xaf\x9f\xfe\xf8\xf6\xa7\x37\x2d\xfb\xf0\xfd\xcf\xbf\x4f\xbe\xfb\x27\xfb\xee\xaf\x3f\xbe\x7d\xdb\xf4\x0f\xee\xc3\xf7\xee\xa7\x6f\x1e\xee\xc2\xdd\x4c\x49\x63\x99\xb4\x8f\xc6\x6a\x21\x73\xfa\x73\x01\xfe\x33\x78\x7e\x4f\xf7\x0f\xbb\x87\x87\x8e\x03\xc9\xaf\x18\x73\x10\x35\x52\xbb\xdd\xee\xb1\x67\x07\x7f\x79\x68\xff\x0d\x9f\x54\x43\x26\x58\x89\xe5\xbc\x1f\xda\x99\x53\xe1\x8e\xde\x9a\xf1\x7f\xd7\x56\xfc\xff\xff\x78\x9c\x55\x5c\x79\x47\x5a\xcd\x57\xee\xcb\x97\x2f\xee\x39\xfa\x92\x2c\xbe\x79\xfa\xf9\xe1\xee\xee\xbf\x01\x00\x00\xff\xff\xbb\xb1\xb0\x1d\x7f\x19\x00\x00" func runtimeSyntaxApacheconfYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxApacheconfYaml, "runtime/syntax/apacheconf.yaml", ) } func runtimeSyntaxApacheconfYaml() (*asset, error) { bytes, err := runtimeSyntaxApacheconfYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/apacheconf.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxArduinoHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xcc\xcb\xe7\x8a\xd1\xb3\xcf\xcc\xcb\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\xeb\x53\x0c\xfa\x0d\x00\x00\x00" func runtimeSyntaxArduinoHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxArduinoHdr, "runtime/syntax/arduino.hdr", ) } func runtimeSyntaxArduinoHdr() (*asset, error) { bytes, err := runtimeSyntaxArduinoHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/arduino.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxArduinoYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x56\x71\x4f\xdb\xc8\x12\xff\x9f\x4f\x61\x85\xea\xd5\x6e\x55\x78\xd0\xf7\xaa\xbb\x48\x55\x04\x21\x80\x25\x48\x10\x31\x2d\x77\xb8\xb5\x36\xde\x71\x3c\x62\xb3\xeb\xee\x8e\x09\x9c\xe6\xc3\x9f\xd6\x09\x90\x73\x1a\x5a\xf5\xf2\xc7\xce\xec\x7a\xf6\x37\xbf\x9d\x9d\x99\x4d\x81\x0a\xe8\xa1\x82\x6e\x80\xda\x6c\x6d\x49\x20\xc8\xa9\xbb\x15\x04\x41\xe0\x3f\x69\x31\x83\x6e\xd0\x49\xd3\x9d\x1e\x6a\xf3\xaa\xb3\xb5\x65\x6b\x05\x6e\x61\xf0\x2e\x40\x09\x9a\xb0\x40\xb0\x8d\xd1\xe4\xe6\xe0\xdd\x9f\xd9\x97\x9b\xff\xbe\xfb\xbd\x51\xde\xa6\xe9\xa4\x13\x6c\x35\xc6\x41\xb0\xbd\x1d\x2c\xb7\x2d\x1c\xfa\x0d\x61\xe8\x7a\x0e\xff\x82\x88\xc3\xb0\xce\x7a\x51\x0f\x35\x85\xbf\xf1\xde\x07\x7e\xbf\xcf\x1f\xfe\xc7\x15\xd9\x28\x8a\x32\xf2\x40\x2b\x38\x7d\xa3\x1d\x09\x4d\x6e\x09\x98\x2f\xe7\xdd\xa0\x13\xf6\x30\xf2\xc0\xa7\xf1\xc9\x29\x9f\x8d\x3e\x73\x3c\xbc\xb8\x4a\x78\x74\x95\x5c\x5c\x25\x51\x0b\x67\x0c\x16\x85\x0a\x2e\x2c\x6a\xda\x0c\x75\x34\xe8\xf3\x61\x3c\xe4\xd3\xc1\x35\x8f\xfa\x09\x1f\xfe\x91\x0c\xda\x48\x17\xf1\xcf\x90\xba\x88\xf9\xf4\xe0\xec\x38\xbb\x88\x39\xf9\x3c\xca\x2e\xe2\x35\x42\x25\x16\x34\xaa\x5f\x20\x73\x36\x3e\x3c\x8e\x2f\xc7\x09\x9f\x2f\x95\x36\xc4\x01\x91\xc8\xcb\x20\xd6\x04\xd6\xd6\xd5\x0b\x50\xfd\xd3\x83\xe1\xc9\x80\x8f\x0f\xce\xce\xe2\xe1\x09\x5f\xc6\xe3\x78\x78\xb2\x06\xa7\x85\x32\xd3\xe0\x12\x0a\xb0\xa0\x73\x78\x29\x4c\xc7\x07\x57\x67\x09\x0f\xae\x93\xc1\xe5\xf0\xe0\x8c\xe3\x61\x4b\xd9\xfb\xb4\xf7\xa4\xef\x7f\xfa\xff\x87\xb6\xaf\x8f\x1f\x3f\x06\xc7\x57\xc3\x7e\x12\x8f\x86\xe3\x66\xb6\xbd\xbd\xf2\xf9\x48\x90\x08\x92\x87\x0a\xdc\x7a\x1e\x4d\x8c\x51\x20\x34\x4f\x1e\x08\x38\x2f\x85\xe5\x42\x19\x41\x8c\x9a\x58\x19\x3d\xe5\xb9\xb1\xb2\xed\xaf\x6f\x34\x59\xa3\x82\x31\xd9\x3a\x27\x34\xfa\x11\xd8\x91\x20\x98\x41\x73\x3c\x8f\x9e\x0b\x07\x9c\x2b\xe1\x1c\x4b\x28\x44\xad\x88\xa5\x61\x69\xea\x89\x02\x06\xe5\x80\x0b\xd1\x8c\xc6\x32\x16\xac\x61\xce\xba\x56\x8a\x2b\x8b\x77\x82\x80\x2b\x6b\x7c\x5d\x81\xe4\xaa\x9e\x28\xcc\xd9\x95\xc6\x12\x3b\x9c\x6a\x90\xec\xbd\x61\xce\x63\xb2\xa8\xa7\xec\xe6\x48\x79\xc9\x54\xa2\x63\x2a\xad\x99\x33\xd9\x07\x26\x5b\x03\xd7\x7a\xb9\xe3\xce\xa0\xe4\x79\x89\x0a\xa2\x45\x89\x7d\x9f\xf6\xd4\x90\xe1\xdc\x68\x42\x5d\x03\x4f\x2c\x88\x5b\xb6\x40\xb5\xd5\xed\x48\x9c\x0b\x2a\x37\xd4\x74\x28\x26\x8e\x45\x6e\x1c\x0b\x87\x9a\x05\x89\xc5\xb0\xcf\x39\xa0\xe2\x26\x11\xac\x40\xcd\xde\x44\xc2\xd4\x02\x38\x86\xfb\xca\x5f\x80\xb1\xac\xcc\x94\x67\xa2\xe2\x99\xb8\xe7\x19\x6a\xb6\x42\xa2\xd0\x8e\xad\xd0\xd2\xcc\x96\x62\x0c\x20\xd9\x9a\x5a\x4b\xf6\x3e\xdc\x37\x76\xdf\x2c\x31\x89\x35\xa2\x87\x48\x2e\xf8\x4f\x70\xf8\x40\x4f\x59\xb0\x46\x78\x82\x74\x09\x42\xf2\x04\xe9\xb3\x45\x02\xaf\x8c\x81\xbc\xe8\x2b\x10\xd6\x2b\x5c\xe2\xb4\xf4\x28\xac\xcc\xdc\xcb\x0d\x79\x1f\xef\x8e\x36\xc6\xa5\xb1\x78\x2a\x0c\x7e\x9c\x0b\xb9\x54\x1b\xe7\x6d\xdc\xc1\x3d\x81\xd5\x42\x3d\x17\xe8\xc6\x73\x88\xa6\x92\x9f\xec\x58\xc2\x3f\xe6\x6d\xe4\x04\x67\xb0\x09\x4a\x82\x12\x0f\xdc\x8c\xe7\x98\x5b\xe3\x20\x37\x5a\x3a\x9e\xa1\x52\xe8\x85\x5f\x6b\x03\x1e\xe1\x14\xc9\x33\xdd\x1c\x83\x0a\xf5\xb9\x91\xc0\x72\x61\xba\x08\xf7\x72\xe2\x23\xd1\x86\xfc\xf1\xa1\xf1\xc9\x82\xb5\x79\x36\x5f\xbb\x1e\x79\x27\x74\x0e\xf2\x25\x72\xda\x24\x46\x03\x57\xb5\x72\x10\x6b\x76\xbe\xb7\x3e\xca\x51\x4d\x4c\x46\xaf\x5d\xcf\xe2\x45\xd8\x84\xb8\xf8\xca\x0b\xb1\xb7\x94\xfb\x4b\xf9\x9e\x27\x30\x45\xcd\xa0\x25\x57\x00\xbe\xd4\x84\xf4\x2d\x40\xd3\x62\x54\x9a\xc5\x9d\x40\x25\x7c\xd7\x28\x54\xed\xca\x35\xef\x4d\x23\xaa\xed\xc6\x7b\x74\x40\x75\xc5\xca\x98\xaa\xbd\xf5\x3b\x2d\xe0\xeb\xcd\x4d\xd7\x55\x22\x87\xee\x97\x2f\x6f\xb6\x57\x27\xa1\x84\x02\x35\x30\xea\x5c\xd5\x12\xc2\x4c\xc3\x3d\x45\x3d\x0e\x6b\xcd\x58\xe8\x5e\x24\xa1\xf0\xe7\xc0\x82\x41\x85\x58\xb0\x83\xc8\x37\xb6\xb9\xb0\xda\xf7\x28\xb0\xd6\x58\xae\xac\x98\xce\x44\xb4\xca\xe2\xa4\xdf\x0f\x26\x35\x2a\x42\xfd\xbd\x67\x30\xcb\x04\x91\xc5\x49\x4d\x90\x65\xab\x84\xd2\x34\x4c\xd3\xf0\xe6\x6b\xe4\xd5\x28\x4d\x23\xce\xb2\x50\xa8\x45\xb7\x13\x6e\xc6\x4b\x50\x2e\x51\x4a\xd0\x8c\x5a\x79\xfe\x95\xc8\x6f\x7d\xe7\x00\x47\x16\x73\x62\x07\x4d\x1b\x67\xff\x30\x98\x82\xe7\x20\x6e\xa3\x2c\x7b\x64\xf8\xcc\x65\xc7\x35\xbd\xb6\xbb\x24\x1e\xf8\xb0\xd9\xa6\x6b\x76\x3a\x4f\x6b\xa0\x65\x6b\xc5\xdd\x62\xd5\x5c\x44\x9a\xee\x3c\xaf\xae\xfc\x23\x7a\xfc\xad\x7a\xaa\x20\x47\xa1\xfa\xa5\xb0\xcf\x5b\x7f\x96\xce\xeb\x36\x9b\xd7\xbf\x44\xa6\xb2\x50\x59\x93\x77\x83\xce\xce\xce\xdb\xce\xaf\x31\x9d\x35\x49\xb5\xc6\x70\x77\xb7\x4d\xf1\xd5\x0f\xc8\x90\x91\xc6\xe7\x42\x32\x3a\x1a\xf1\xf5\xf5\x35\x1f\xc7\xd7\xe7\x83\xa8\xdb\xfb\x09\x67\x69\xfa\x66\xed\x7e\xd2\x37\xbb\xff\xc2\xe3\xdf\x01\x00\x00\xff\xff\x21\xfd\xe0\xed\x00\x0b\x00\x00" func runtimeSyntaxArduinoYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxArduinoYaml, "runtime/syntax/arduino.yaml", ) } func runtimeSyntaxArduinoYaml() (*asset, error) { bytes, err := runtimeSyntaxArduinoYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/arduino.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxAsciidocHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x4e\xce\xcc\x4c\xc9\x4f\xe6\x8a\xd1\xd3\x48\x2c\x4e\xae\x81\xf1\x6b\x12\x53\xf2\x93\x35\x55\xb8\xb8\x00\x01\x00\x00\xff\xff\xe1\x70\xa5\x8c\x21\x00\x00\x00" func runtimeSyntaxAsciidocHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxAsciidocHdr, "runtime/syntax/asciidoc.hdr", ) } func runtimeSyntaxAsciidocHdr() (*asset, error) { bytes, err := runtimeSyntaxAsciidocHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/asciidoc.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxAsciidocYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x93\x5d\x6f\xda\x30\x14\x86\xef\xf3\x2b\xac\xac\x12\x6d\x42\xac\x51\xad\x17\x8b\x4a\x25\x34\x4d\x13\x17\x03\x54\x65\xda\x85\x8f\x03\xc6\x31\x25\x6a\xbe\xe4\x38\x9a\x18\x21\xbf\x7d\xca\x67\x43\x21\xd5\x90\x2f\x90\xcf\xc3\xe3\xe3\xf7\x98\x9d\x1f\x08\x75\x48\x84\x8d\x58\xca\x7d\xdf\x8b\xb9\xa6\x79\x42\x09\xae\x6c\x0d\x21\x84\xca\x7a\xc4\x42\x61\x23\x1d\x00\xdf\xb2\x94\xe7\x2d\x98\x33\x2f\xe6\x77\x37\xba\xa6\xc9\x2c\x10\x69\xcd\x7f\x42\x21\xf3\x23\xb4\x17\xcc\x13\xb2\xda\xb1\x50\x22\x45\x22\x63\x6e\x23\xdd\x9d\x4e\xa7\x53\xf3\x46\xaf\x0a\x25\xbc\x9f\x34\x4c\xaa\x98\x12\xa1\x88\x54\x4d\x11\x62\xa7\x09\xe3\xc2\xa6\x14\x1b\x0d\xff\x0e\xb2\x2c\xcb\x3a\x53\xdd\xb7\xd4\x21\xdc\xc6\x41\x73\xda\x80\xa8\x43\x8a\xa2\x28\xce\x2c\x5f\x1a\xa4\x0e\xa5\xee\xf8\xba\xa4\x25\x00\xde\xd6\x99\xea\xa1\x01\x79\x1c\xa5\x8a\xb5\x57\x1b\xf4\xf5\x31\x00\xb3\x5b\xa5\xb3\x93\x32\xa5\xa4\xbf\xcd\x94\x48\x7b\x5d\xe0\x57\x71\xf8\x13\x4b\xcf\x46\xba\x8d\x0d\xbb\x15\xfa\x9e\x88\x94\xbf\xf3\x85\xc4\x21\xe3\x32\xae\x66\x78\x24\xcc\xfa\xfb\xd9\xfa\x4a\x0d\x80\xd3\x25\x59\x31\xe5\xe7\x7f\xb8\xae\xc7\x33\xb8\xdb\xef\xb5\xbd\x62\x92\xbd\x48\x96\xec\x91\xe3\xab\x40\x5c\x9b\x27\x00\xae\xc2\xe8\x7e\x93\xc6\x99\xe4\x02\x5d\x3b\xda\x05\x20\xb7\x75\x7d\x8c\xcd\x7c\xb1\x74\xbe\xe7\xce\x7c\x95\xcf\x7f\xae\x96\xcf\xce\x6c\xe1\xe4\xbf\x67\xcf\x8b\xf9\xe2\x47\xfe\x6d\xf6\xcb\x99\x2f\x17\x77\x00\xb4\xa7\x5e\xaa\xbd\x90\x28\x64\xf2\x35\x4b\xde\xa5\x8f\x53\x25\xfd\xe8\xc5\x46\x3a\x36\x7a\x73\x02\x30\x2f\x06\xf5\x86\xae\x89\xbb\xa6\xe6\x7a\x18\x00\x30\x88\x0b\x60\x50\x13\xc0\xf8\x08\x33\x4b\xcc\xa4\x75\x7c\x43\xd8\x86\xb8\x1b\x6a\x6e\x3e\xf2\xb8\xa5\xc7\x2d\x3d\xee\x30\x56\x10\xb7\xa0\x66\x31\x0c\x8c\x88\x3b\xa2\xe6\xa8\x49\xee\xec\x89\x6e\x8e\x93\xf1\xfd\xa9\xae\x57\x5f\x7b\xf1\x6e\xb3\x20\x10\x2a\xbd\xf8\xb3\xf5\xf2\x34\x08\x80\x01\x80\x2d\x7a\x9c\x8c\x1f\x4e\xbd\x4a\xff\xb1\x47\x7c\x1f\xcb\xd6\xa3\x6f\xe3\xc0\x43\x9e\xd8\xb1\x2c\x50\x7a\x75\x4b\x02\x40\xb0\x01\x40\xab\xf1\x0e\x60\x8f\x8f\xd8\x78\x7a\xd2\xb5\x7f\x01\x00\x00\xff\xff\x85\x03\x17\x35\xeb\x04\x00\x00" func runtimeSyntaxAsciidocYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxAsciidocYaml, "runtime/syntax/asciidoc.yaml", ) } func runtimeSyntaxAsciidocYaml() (*asset, error) { bytes, err := runtimeSyntaxAsciidocYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/asciidoc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxAsmHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\xce\xe5\x8a\xd1\xd3\x08\xae\x29\xae\x49\x2c\xce\xd5\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\x12\x07\x9a\x53\x12\x00\x00\x00" func runtimeSyntaxAsmHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxAsmHdr, "runtime/syntax/asm.hdr", ) } func runtimeSyntaxAsmHdr() (*asset, error) { bytes, err := runtimeSyntaxAsmHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/asm.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxAsmYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x5a\xe1\xaf\xdc\x36\x8e\xff\x9e\xbf\x62\x90\xee\x61\x93\x0b\xd2\xcd\xcc\x4b\xd2\x24\xf7\xa1\x28\xba\xb7\x40\x3f\xb4\x3d\x5c\xf7\x80\xe2\xfa\x8a\x42\x16\xe5\xb1\xe6\xc9\xb2\x46\x94\xc7\x9e\x01\xff\xf8\x03\x49\x79\xde\x24\x0d\x72\xfe\xb2\x01\xe6\x47\x8a\xa6\x44\x8a\xa2\x24\xda\x79\xad\x0f\xae\x9c\x93\xfb\xb0\x31\xd8\x3f\x79\x02\xae\x38\x5b\x3e\x3c\xd9\x6c\x36\x1b\x7e\x14\x4d\xef\x3e\x6c\x9e\xde\xdf\x7f\xfd\xec\x17\x42\x32\xd8\x3f\xff\xcb\xd3\x27\x4f\xf2\x18\x1c\xaa\xd6\x57\x9b\x7f\x76\x1e\x45\x79\xe3\x71\xd3\x1b\x70\x9b\x76\xc8\x9b\x9f\xbe\xfb\xe5\xc7\x8d\x41\x74\x7d\x13\xce\x4f\x54\xf5\xab\xcd\x0f\x11\x4b\x1e\x6d\xf1\x43\xc4\xda\x7d\x7e\xf7\x56\xb8\x97\x1b\x2c\xa6\xb8\xde\xc5\x22\x16\x9b\x67\xdf\xfa\xe7\xcf\xfa\xe1\x44\xc6\x18\x32\x06\xc8\x98\x9e\x8c\x41\x32\x60\xc9\x00\x90\x89\x40\xd6\x84\x40\xb6\x99\xc8\x06\x4b\x36\x00\xd9\xe0\xc9\xf6\x96\x6c\x9f\xf8\x87\x8d\xe0\x44\x76\x02\x02\x63\x08\x0c\x12\x38\x4b\xe0\x4f\xe4\xd0\x52\x17\x0a\x79\x6e\xf8\x7e\x0c\xe4\x23\xf9\x68\xc9\xc7\xc2\xbf\x81\x7c\x76\x85\x0e\x86\x0e\xc6\xd1\xa1\xa1\x43\xe3\xe8\x60\xe9\xe0\xe8\xb0\xa7\xc3\xde\xd1\x21\xd0\x21\x38\x3a\x44\xc3\x3f\x66\x1a\xfe\x31\x63\xe9\x10\x99\xee\xf9\xc7\x4c\xe0\x1f\x33\x03\x1d\x62\xa2\x43\x44\x3a\xc4\x0b\x1d\x06\x3a\x24\x3a\x24\x47\x87\x34\xd0\x01\xe9\x70\xa1\x83\x9d\x2f\x74\xe8\x13\x05\xd3\xb5\x14\x00\x29\x38\x43\xc1\x21\x85\xc1\x3e\x50\x18\x00\x1b\xc1\x89\xc2\x30\x24\x01\x27\x18\x2b\xb9\x08\xb9\x50\x3f\x9c\xb0\x11\x9c\x88\x27\x18\xdd\x9e\xe2\x90\x68\xc8\x94\x86\xc4\xbf\x96\xd2\x88\x9d\x40\x4b\xd9\x06\xca\x36\x53\x76\x89\x7f\x8e\x21\x2a\x5e\x18\x19\x0a\xff\x22\x43\x4b\x79\x08\x94\x87\x4c\xc8\x7e\xa2\x09\x84\x26\x13\x36\x0d\xa1\x35\xa8\x38\x11\x76\x81\xb0\xcb\x84\xc5\x12\x16\x20\x2c\x9e\xb0\x0c\xfc\xbc\x0c\xfc\x7c\x6c\xa8\x38\x2c\x34\x19\x5f\x68\xb6\xdd\x9e\xe6\x60\x0a\xcd\x43\x7e\xfe\xec\xdb\x97\xfe\xf9\xfd\x7d\xf3\xf4\x0b\x39\xd2\x0c\x63\x04\x72\xb1\xb8\x4c\x3e\x4a\xac\x4e\x8e\x86\xb1\x20\xcf\xcf\xc8\xd4\xcc\xaa\x91\x4c\x4e\x81\x6c\x28\x48\xc1\x64\x0a\x7b\x28\x14\x3c\x43\x60\xe8\x25\xdc\x06\x38\xe5\x02\x06\x0a\x25\x13\xb2\x0e\xb2\x0e\xb2\x0e\xb2\x0e\x96\x4c\x27\x97\x05\xa6\x75\x33\xc0\x96\x1a\xcc\xd4\x14\x6a\x8a\xa5\xa6\x30\x8b\x64\xe1\x28\xd9\x0b\x9c\xbd\x8e\xe7\x06\x9a\x91\x0c\xca\xb6\x74\x70\x9c\x2c\xa1\x45\x0a\x7b\xa4\x80\x28\x89\x01\xb2\xfe\x9a\x1e\x6e\xaa\xa9\x51\xe9\x45\x69\x25\xaa\xe9\xa0\xea\x54\x7a\x51\x7a\x01\xb2\x99\x4a\x26\xc8\x92\x44\x20\x38\x33\x5e\x66\x09\x31\x48\x8c\x05\x5b\xd0\x50\x2b\x69\x41\x96\x1f\x08\x5d\x31\x02\x8e\xb1\x11\x10\xd6\x32\x08\xb7\x17\x10\x36\x08\x08\x1b\x8d\xa2\x36\x1a\x45\x6d\x48\xd7\xa8\xfc\x5e\x51\x1b\x41\x51\x1b\x83\x60\x12\x44\xc1\x0b\xa3\x88\x45\x9a\x44\x2f\x89\x40\x14\x2e\x84\x1d\x48\xb6\x82\x24\x27\xac\x5c\xbe\xc9\xc8\x69\x33\xdb\x7d\x47\x3e\x9e\x80\x21\xa4\x3d\x4d\x8d\xb4\x66\x03\xeb\x46\xb2\x69\xf4\xa0\x23\x75\xfb\x77\x0d\x65\xe8\x31\x53\x86\x82\x96\xa6\x2c\x3c\xf6\xab\x46\xca\x90\x7a\xbb\x4a\x13\xcf\x28\xa7\x28\x9e\x31\xbb\xb2\xce\xcd\x7e\x38\x19\x12\x74\x42\x1a\x45\x6d\x58\x41\xe5\xf7\x8a\xda\x08\x8a\xda\x88\xa6\x92\xda\x6c\x2a\xa9\x4d\x1d\x24\xd6\xd6\xbe\x92\xda\x5c\x86\x18\x84\xa4\xa8\x2d\x54\x72\x11\x52\x1f\x29\xaa\x7a\x52\x99\xaa\x5d\x78\xbe\x7a\x66\x30\x33\xfb\x42\x23\xec\x56\xcd\xbe\x37\xf8\xd0\x0f\xa7\x23\xef\x82\x58\x12\x2a\x3d\x52\xca\xae\x75\xc5\x76\xaf\xae\xdc\xf6\xca\xed\xae\x5c\xe4\xdd\xd0\xba\x68\xdd\xba\x50\x87\x36\xf0\xf9\x1c\xa4\x0b\x55\xdb\x70\x1c\xa9\xaf\x12\x36\x0e\xd5\x19\x5f\x7d\x02\x4a\x66\xc4\x75\x16\xfa\x21\xfa\x32\x64\xea\xf9\xf8\x5d\xe7\x13\x1c\x1d\xd9\xe3\x20\x87\xd3\x71\x49\xd7\xed\xdb\x46\x8e\xa4\x23\x1d\xb2\x1c\x49\x03\xe0\x51\x4f\x8d\x59\x8e\x87\xa3\x9e\x0b\x47\xcd\xe7\x24\xc7\xc3\x51\xb6\xd9\x91\x78\x07\xed\x71\x65\x44\xf6\xbe\xee\x2f\x43\xf8\xe0\xa3\x2f\x84\x65\xef\xe9\xd4\xf3\xe9\x4c\xa7\xbe\x97\x7c\x3e\xf5\x79\x8c\x74\xea\xd1\x9c\xd6\x05\xe2\xd4\xa7\x92\x81\x3b\xa6\x92\xb1\xd0\xa9\xb7\xc1\x99\xcc\x03\x39\x19\x77\xca\xbe\x38\x16\xeb\xf0\xc1\x8c\xd1\x76\xf2\x18\xc7\x9e\x1f\xcc\x43\xdb\x0a\x89\xab\x0c\x86\x8b\x8d\x85\x43\x63\xe3\xba\xc0\x37\x6e\xe6\xab\x21\xd8\xd6\x87\xc0\xd4\x0b\x58\x46\xce\x0c\xa6\x48\x4d\xc0\xfa\x1c\xbd\xa5\xb2\xed\xf1\xc1\x52\xb9\xf4\xf8\x70\x63\x44\xac\x68\xfd\xf5\xcd\x17\x2c\xb6\xbb\xb9\xdf\x52\x6b\x1a\xa4\x96\x6b\x2e\x86\x44\x6d\x13\x80\xda\x06\x4b\xa2\xd6\x76\x48\xad\x0d\x6e\xa6\xd6\x0e\xbd\x40\x52\x4c\xd4\x82\xb3\xa2\x04\x1e\x3d\xe3\x89\xda\x93\x07\x11\x9c\xb2\x62\xa2\xd6\x45\x4f\x6d\x9b\x9d\xa3\xd6\x8b\x11\x2f\x23\x79\x1d\x4a\xaa\x33\xc1\x4c\xad\x67\xc3\x52\xaa\xb5\x3e\xea\xd8\x92\x00\xad\x47\x05\x16\x70\x41\x21\x98\xa9\x65\xfd\x00\x5b\x06\x3b\x31\xba\x78\xaa\x44\x9a\x61\xe7\x94\x14\x21\xfb\x9d\x90\x28\x24\x79\xc6\x0b\xb5\x62\xaf\x1f\x43\xa2\x36\xea\x54\xa3\xce\x28\x8a\xeb\x51\x5d\xe0\xba\xaa\x8d\x9c\x6e\x95\xf0\x8d\xdb\x46\x2c\x56\x89\x58\x56\xaa\x02\x9c\xa8\x4d\xa6\x98\x48\x6d\xca\xae\xa7\x36\x09\x9f\x23\x70\x01\xda\x66\xe4\x6d\xa9\x64\xa2\x56\x07\x66\xe4\x86\x35\x81\x5b\xc7\x5c\xa8\x45\xf9\xb1\x95\x6a\x64\xb1\x21\xe1\xc0\xc2\xf5\x6f\x2b\x41\xc1\xb1\x49\x82\x59\x31\x51\x5b\xb8\xb7\x54\x5e\xed\x6c\x7a\x6a\x67\xdb\x51\x3b\x97\x6c\x6c\xa1\xf6\x1c\x76\xb3\x62\xda\xae\xca\xd0\x96\xef\xd3\x75\x37\x54\x6b\x07\xac\x2b\x01\x3a\x2f\xa8\x9e\x83\xc6\x63\x5b\xe7\xce\x62\x1f\x05\xa4\xcb\xa2\x33\x4a\x96\x8c\x9a\x25\x42\xd2\x4a\xc3\x72\x63\xb5\xf5\xca\x6a\xf5\xb6\xba\x25\xb1\x59\xe8\x22\x58\xe8\xa8\x74\x5c\x3b\xc3\xde\xcb\x5e\xf0\xd5\x43\x5f\xc9\x4a\x47\xe7\x9a\x02\xf3\xea\x33\x8c\xb7\x40\x59\x39\x3a\xef\xb8\xf4\xb9\x23\xe1\x97\x1f\x7e\xfc\xfb\x17\x3a\xba\xbe\x97\x3b\x4f\x8a\xc1\x23\x25\x63\x1f\x10\x61\xaa\xcc\xd4\x08\x33\x2a\x03\xa0\x38\x09\x82\x20\xaa\x08\x55\x36\xd6\xe6\x28\xed\x08\x02\x91\x12\xbf\xa1\xcc\x0c\xb6\x4f\xee\xd8\x54\x3a\x55\x0a\x42\xf7\xa5\xa9\x74\xaa\x14\x28\xf5\x6c\x8e\xe9\x18\xba\x49\x48\x98\x28\xe1\x82\x20\x78\xa4\x84\x99\x2b\x55\xcc\x86\xe5\x39\x28\x8a\x44\x9e\x8e\x4d\x23\x38\x09\x82\x20\xaa\x08\x55\x26\x9e\x8f\x31\xd9\x87\x8e\xb5\x94\x63\xcb\xca\x01\xdf\x77\xf1\xc1\x3e\x84\xeb\xd3\xa0\x32\xe6\xa6\x75\x05\x61\x32\x27\x57\xc3\xe5\x79\x32\x66\x3f\x51\x02\x8f\xc5\x57\x57\x44\x3a\x5d\x1a\x9d\x6f\xe6\xd6\x29\x4a\xf3\x14\x94\xec\xdd\xf5\xa9\x0e\x61\x99\x59\x97\x22\xb2\xd4\xc9\x9c\xf6\x32\xd7\x76\xe7\x81\x52\x6b\xac\x65\xe4\xd5\x6c\x65\x31\x94\xee\x5d\xa5\x85\x52\xdb\x9b\x99\xd1\x47\xc6\x31\x50\x6a\xb3\x4d\x8a\xbe\x6c\x17\x66\xc7\x0c\x1e\xab\x44\x0e\xb3\x24\x07\x55\xd2\x33\x2a\xf9\x5d\x0b\x8f\x33\xab\x15\xd4\x95\x59\x37\x09\x76\x7b\xa2\xd4\x46\xf5\x3b\x29\xf5\xbb\x96\x57\x71\x32\x69\xe5\x42\xa8\x7f\x27\x75\xfd\xb4\xee\x75\x12\x20\x21\xf1\xda\x71\xcd\x99\x92\x20\xf3\x43\xef\x99\x9c\x4a\xf2\xbb\xa4\x0c\xee\x92\x67\x06\xfd\x4e\x1f\x21\xee\x50\x24\x8f\xcf\xaa\x0c\xfc\x29\x21\x23\xbf\xeb\x41\x3f\x5b\xcc\xd4\x9b\x99\x0b\x51\x33\x23\x52\xef\x63\x12\x44\xd9\xa6\x46\x2b\xd4\x2e\x54\xaa\x24\x2c\x54\x49\x8f\x0f\x4b\x21\xab\x54\xfb\x8e\xdc\x18\x83\x22\x22\x65\xcb\xb3\xc8\x96\x67\x21\xf1\x48\x95\x22\x12\x76\x63\x9b\x90\xaa\x74\x11\x16\xf5\x8f\x2f\x1e\x64\x44\xa4\xb1\xce\x5f\xb7\x49\xaa\x4c\x48\xeb\xca\x3f\x3e\x1d\x38\xaa\x91\x63\x3b\xe4\xa4\xf9\xd9\x08\x4e\x94\xb8\x42\x9a\x28\xf9\x88\xb2\x17\xcc\x8c\x4a\x38\xa9\x38\x24\x93\x10\x69\xc9\xac\xeb\xd6\x18\x39\x19\x0c\xc8\x6e\xef\xc6\x76\xa2\x99\x87\x5e\x59\x3f\x6b\x98\x96\x98\x85\x8f\xe3\x1d\x6e\x26\xf8\x38\xe5\x4f\x16\xe2\xf6\xe5\xe0\xcb\xaf\x11\x5c\x64\xd4\x45\xbd\xcd\x9f\x6b\xda\x7c\x9a\x2c\x1f\xe5\x96\x48\x96\xf0\x57\xf2\xf1\x7a\x7d\xba\xa8\xba\xe0\x37\xc1\x96\xb8\xd0\x6d\x66\xdf\xe6\xc7\xed\x32\xdf\xa6\xe1\x6d\xca\xde\xa6\x6a\x0d\xf6\x92\xc5\xd7\x6c\xd1\x57\x9b\xdb\x3d\xb3\xac\xa8\xae\x6f\xcd\xb5\x9b\x35\xac\x6b\xaa\x0b\x7d\x9b\x10\x75\x75\x97\x77\xb4\x25\x07\x34\x31\x74\xc9\x97\x17\xba\xd5\x9b\x1a\x64\xea\x82\x31\xc9\xfb\xba\xe2\xca\xef\x05\x1f\x0d\x11\x65\x08\x8e\xf0\x47\x03\xe9\xf2\x00\x2f\x1b\x1c\x77\xe9\xca\xe8\x22\xc3\x0e\x8e\x95\xd1\xa5\x65\xe6\x9a\x11\x50\x57\xbd\xea\x60\x95\x20\xd4\x84\x60\xe6\x9a\x35\xb0\x64\x06\xe8\x61\xb3\x0c\xfd\x38\xf6\xe3\x50\x75\x08\x5e\x4d\x90\xd5\x04\x59\x4d\x41\xe6\x3d\x4f\xa5\x97\xef\x54\x92\xa3\xa0\x79\x0e\xba\x0f\x60\x39\x68\xe0\xf1\x5b\xd2\xc8\x8d\x31\x28\x22\x70\x8e\x81\xae\x2e\x68\x66\x2a\x41\x90\xd4\x12\x44\xa8\x29\x0c\xcb\x76\x82\x65\x83\x81\xa4\xe7\xba\x45\x90\xb7\xe8\x9d\xbc\xa0\xc2\xd1\xd0\xf2\x52\x3d\x9c\x8e\x3c\x59\xbe\x71\xb5\x0a\x38\x4a\x0a\x8d\xd2\xea\xc6\xb6\xab\x27\x44\xa8\x54\xcb\x09\x79\x9a\x1f\xaf\xf7\xee\xf8\x78\xd3\x1f\x61\x75\x62\xe9\x1c\x2b\x83\xd4\x69\xa2\x74\xba\xdb\x3a\x7d\xda\xe9\x33\xf6\x17\x46\x39\x0b\xb0\x5b\x98\x00\xeb\x0a\xd3\x00\x70\x5c\xa7\x99\xd0\xef\x23\x4f\xd5\xef\xb9\x34\x63\xd2\xe8\xc4\x97\x9a\x42\x77\x13\x80\x96\x45\x9d\x56\x4c\x1d\x3e\x36\x81\x52\xa7\x15\x60\x57\xab\xbe\xae\x96\x82\xc1\xef\x63\xa6\x64\x44\xd5\xf0\xc2\x32\x36\xab\x1c\x03\x3e\x1a\x80\xb7\x4b\x13\x9c\x1c\x4f\x4a\x6b\xfb\xb4\x08\x38\x53\xf3\x30\x8a\x86\x50\xac\x74\x91\x23\x90\x8f\xe8\xe4\xd4\x73\xfa\xde\xb3\xf6\xe0\x5f\x6e\x8c\x8e\x13\x7f\xc0\xb1\x56\x9b\x5a\xb1\x70\x02\xa8\x07\x4d\x65\xf4\xea\x41\x3d\xa6\xb0\x1e\x5a\xf5\x76\xaa\xd7\x12\x68\x0b\x54\x53\x5b\x4c\xf8\xf0\x6b\x94\xc0\xdf\x84\x1c\xf5\x28\x6c\xae\x37\x1e\x13\xf8\x9b\x90\xa3\x1c\x8c\x38\xb3\x6f\xf2\xa5\xb6\x32\x38\xf3\x62\xa8\x04\x16\xc9\x71\x91\x2c\xbd\xa6\x45\x67\x5a\x74\xa6\x45\x67\x5a\x74\x60\x91\x30\x23\xdf\xee\xb5\x2c\x3f\xd6\xda\x1f\xa6\xe5\xbb\xd4\xba\x0f\xef\xea\xb5\xae\x43\xfd\x94\xa5\xe7\x43\x2c\xb8\xf2\xab\x50\xb6\x77\x3b\xf5\x02\x4b\xf6\x57\xae\x17\xce\x5f\x65\xfe\x2a\xdb\x97\x75\xfb\xf2\xd4\xf6\xba\x0f\x2b\x83\x95\xc1\x45\x82\x57\x89\x6c\xd0\x47\x5e\xe4\x38\x36\xd7\xee\x95\x5f\xe4\x57\xe1\x55\x82\x8b\x44\xc6\x8c\x57\xc3\xf1\x6a\x39\x5e\x4d\xc7\xab\xed\x78\x1d\x23\x5e\x07\x51\x0e\x3f\xf7\x7a\xf7\x7d\x3e\xa7\x32\x7c\xe9\x24\x72\xe8\xa2\x25\x25\xc1\x60\x61\x16\x9c\xad\x64\x91\x3c\xb8\xf3\xde\x45\x83\xe8\xb5\xed\xd7\x7e\x70\xee\xcc\x36\x47\xc0\xd7\xc4\x5c\x74\x73\x71\xc2\xf5\xb8\xdf\x2e\xcc\x8e\x99\xdd\x9b\xb7\xac\xb7\xf0\xcb\x73\x65\x77\x9f\x9b\xda\xff\x44\x18\xec\xc8\xf6\x1c\x7c\x69\x82\xf2\x3f\x89\x40\x68\x82\x25\x6f\x5d\x93\x1e\xff\x63\x47\x29\xd0\x08\xdb\xcf\x58\xf8\x6a\xf3\xdf\x6e\xef\xb1\xb8\x8c\x75\x7c\x0f\x2e\x16\xdf\x7a\x97\x6f\x0d\x04\x32\x1d\x35\x81\x9a\x8e\x6c\x20\xdb\x11\x04\x82\x8e\x9a\x14\x08\x7d\xa0\xfc\xae\xa1\xfc\xbe\xa1\xbc\x7d\xc5\xb0\x6d\x08\x7c\x20\x4c\x81\xf2\x76\xc7\x92\x3b\x86\xd7\x0c\x6f\xfe\x14\xd3\xcf\x5a\xb4\x13\xe1\x44\x65\xa2\x36\xfd\x01\xc8\x38\x24\xcb\xc4\x27\x11\x09\x5a\x24\x8b\xc4\xf5\x18\x92\x43\x6a\x91\xf6\x48\x7b\x28\x99\x3c\x43\xc9\x14\x98\x9a\x99\x9a\x99\xec\x4c\x30\x53\x93\x08\x3d\xe5\x77\x13\xe5\xf7\x13\xfb\xcb\xb0\x9d\x08\x3c\x61\x62\x6f\xb9\x7d\xc7\xf0\x9a\xe1\xcd\x44\x9f\xf9\xb8\xf1\x59\x8f\xaf\x5e\xf9\x44\xce\xcc\xe4\x9a\x99\x9c\x9d\xc9\x01\xf3\x89\x9c\xd8\x05\xca\xef\x81\xed\x32\x6c\x81\x1c\x78\x72\x6a\x99\x25\x77\x0c\xaf\x19\xde\x00\x39\x1e\xa9\x0d\x66\x8f\x24\x75\xe4\x3a\x3f\xfa\xfe\x15\xf5\xfd\x96\xfa\x7e\x47\x7d\x7f\x47\x7d\xff\x9a\xfa\xfe\x0d\xf5\xfd\x5b\xea\xfb\x6f\x28\x9b\x99\x72\x33\x53\xb6\x33\x65\x60\x3e\x51\x16\xdf\x28\xbf\x67\xcf\xd8\x31\xca\xe0\x29\xab\x5f\xec\x16\x7b\xc5\x4e\x51\xf6\x89\xb2\xfa\x64\xf3\x2b\xb2\x79\x4b\x36\xef\xc8\xe6\x3b\xb2\xf9\x35\xd9\xfc\x86\x6c\x7e\x4b\x36\x7f\x43\x36\xbf\x23\x9b\xdf\xb3\x8e\x28\xb2\xe6\x96\x55\xb7\xac\xbb\x65\xe5\xed\x1b\xea\x71\x22\xc8\xaf\x08\xf2\x96\x20\xef\x08\xf2\x1d\xe5\xd7\x04\xf9\x0d\x41\x7e\x4b\x90\xbf\x21\xc8\xef\x08\xf2\x7b\x56\x11\x3d\x56\xdc\xb2\xe6\xf6\x8e\x81\x95\xd7\xa6\x15\x96\x57\x84\x65\x4b\x58\x76\x84\xe5\x8e\xb0\xbc\x26\x2c\x6f\x08\xcb\x5b\xc2\xf2\xcd\xba\x41\x66\x0e\xf1\xcc\x31\x9e\x39\xc8\x33\x47\x79\xe6\x30\xcf\x1c\xe7\x99\x03\x3d\x73\xa4\xe7\xbe\x7f\xc7\xf0\x5e\x94\xb5\x8b\xf4\xd9\x4a\xa7\xad\xf4\xda\x4a\xb7\xb5\xfe\x9f\xd9\xf4\x99\x4d\x9f\xd9\xf4\x99\x4d\x9f\xd9\xf4\x99\x4d\x9f\xd9\xf4\x99\x4d\x9f\xd9\xf4\x99\x4d\x9f\xc5\xf4\x59\x4c\x9f\xc5\xf4\x59\x4c\x9f\xc5\xf4\x79\xbd\xe9\x0b\x9b\xbe\xb0\xe9\x0b\x9b\xbe\xb0\xe9\x0b\x9b\xbe\xb0\xe9\x0b\x9b\xbe\xb0\xe9\x0b\x9b\xbe\xb0\xe9\x8b\x98\xbe\x88\xe9\x8b\x98\xbe\x88\xe9\x8b\x98\x66\x94\x7e\x5b\xe9\xb8\x95\x9e\x5b\xe9\xba\x95\xbe\x3b\xe9\xbb\x53\x7b\xd2\x77\x27\x7d\x77\xd2\x77\x27\x7d\x77\xd2\x77\x27\x7d\x77\xd2\x77\x27\x7d\xef\xa4\xef\xdd\xe7\x8f\xbc\xef\x87\x88\xc5\xc4\x82\xd7\x73\xf6\xa7\xb1\x6f\x5c\xe6\x99\x97\xcd\x34\xe4\x87\xe5\x30\xb4\x55\xf3\xeb\x28\x0a\x35\x1a\xd4\xd1\x77\xf4\x6a\x7e\xfe\xe2\xb7\x57\x2f\xdf\xff\xfe\x42\xda\xcf\x5f\xdc\xc4\xef\xb3\xdd\x5e\xcd\xac\xbe\x31\x2f\xdb\xcd\x77\x2f\xff\xf1\xfb\x8b\x4f\x9c\xfa\xaf\xec\x52\x1e\xac\x43\x1c\xf2\xe6\xd9\x4f\xdf\xfd\xf2\xe3\xf3\x3a\x5a\xd2\x27\x1f\x36\x4f\xff\xed\xc5\xb3\xfb\xfb\x17\x74\x7f\xff\x2d\xff\x98\x3c\xff\xcd\xbc\xbc\x6c\xbe\x7b\xf9\xbf\x1b\x71\xe5\xe9\x9f\xbb\xdc\xdf\xff\xf6\xdb\xd7\x9b\x5b\xad\x7f\xbf\xbf\xff\xfd\xd6\xf2\xcf\xa5\x73\xf9\xcb\xc5\x8c\xcb\x91\xf6\x61\x68\x4c\x20\x74\xf2\xe7\x2e\x84\x6e\xcf\x7a\xf4\x07\x16\x93\x0b\xdd\xdf\x7f\x5d\xdc\x2c\x14\x4c\x31\x4c\x9b\x95\xa5\x0e\x34\x04\x13\x01\x10\x1c\x09\x0a\xf1\x8b\x0a\x0c\x5f\xce\xc9\xdb\x59\x6f\xfe\xf8\xfd\xc5\x87\x3a\x9f\x9b\xd0\x73\x85\x14\xf7\x1f\xea\x34\x37\x1b\x71\x93\xad\x3e\x7d\x7a\x95\xb9\x08\x9f\x48\xf0\xc1\x27\x71\xed\xfe\xfe\xeb\x47\xe9\xcd\xdf\x07\x2d\xff\x6e\x2d\x25\x67\xbd\x09\xdf\x77\x26\x3f\x76\x5d\xeb\xce\x5f\x3f\xf5\xe6\xaf\xff\x4a\x67\x7a\x09\xfd\x9f\x9c\xf8\x8f\x4f\x9d\xf8\xcb\xff\x63\xae\x0c\x30\x7c\xd8\x3c\x7d\xf6\xcf\x9f\xff\xfe\x33\xfd\xfa\xeb\xaf\xf4\x8f\x1f\x7e\xfd\xf1\x3f\x9f\x7f\xf8\xf6\xe9\x93\x27\xff\x17\x00\x00\xff\xff\xc4\x3e\x7c\x48\x83\x25\x00\x00" func runtimeSyntaxAsmYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxAsmYaml, "runtime/syntax/asm.yaml", ) } func runtimeSyntaxAsmYaml() (*asset, error) { bytes, err := runtimeSyntaxAsmYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/asm.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxAtsHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x0c\x09\xe6\x8a\xd1\xd3\x48\xa9\xc9\xa8\x29\xd6\x4c\x2c\x29\x56\xe1\xe2\x02\x04\x00\x00\xff\xff\x46\xc8\x8b\xf6\x13\x00\x00\x00" func runtimeSyntaxAtsHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxAtsHdr, "runtime/syntax/ats.hdr", ) } func runtimeSyntaxAtsHdr() (*asset, error) { bytes, err := runtimeSyntaxAtsHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ats.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxAtsYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x17\x7f\x73\xdb\xba\xed\xff\x7c\x0a\xd6\x69\x57\x29\xa9\x9d\xec\xed\xaf\xe7\xfd\x90\xbb\xae\xbd\xdb\xae\xef\x75\x77\xed\xee\x7a\xb3\x9c\x8c\x96\x40\x9b\x0b\x45\x6a\x24\xa4\xd8\x19\xde\x3e\xfb\x0e\x94\x64\x39\x6d\xbc\xeb\x75\xbe\xb3\x08\x40\x20\x00\xe2\x07\x01\x29\x6d\x00\xf7\x35\xcc\xc5\xeb\x4f\x1f\xcf\xce\x4a\x40\x28\x70\x7e\x26\x84\x10\xfc\xca\xca\x0a\xe6\x62\x92\xe7\xb3\xa4\xa4\x2d\x85\x54\x62\x78\x3e\x39\x3b\xf3\x8d\x81\xd0\xb1\x4d\x45\x09\x4a\x36\x06\xe7\x22\x5f\x2f\x97\x73\x69\x6c\x53\xcd\x57\xab\xcb\xe5\xcd\xf5\xf4\xc7\xd7\xd3\xbf\xcb\xe9\xc3\xea\x2c\xb2\x9e\x8b\x0f\x35\x78\x89\xce\x87\x7e\x6b\xd8\x57\x6b\x67\x66\xae\x27\xcf\xc5\x64\x39\x9b\xff\xf6\xf2\x1f\xf4\x9f\xdf\xfd\x21\xfb\xfd\xcb\x3c\xff\xd5\x8a\xae\xe8\x05\x4d\xe9\x15\x3d\xa3\x3c\xbf\xa0\x05\xe5\xf9\xf9\xe4\xd4\xf6\xfc\x66\xd0\xf4\x69\x5f\x43\x78\x25\xe4\x3a\xa0\x97\x05\x0a\x3e\x64\x10\xd2\x96\x22\xb8\x0a\x44\xed\xa1\x04\xa5\x2d\x30\xee\x71\xb0\xa7\x73\x45\xbe\x4e\x64\x59\x7a\x92\x1b\xc8\x1e\x68\xed\x9c\xa1\x62\x2b\x3d\x15\x26\x50\x88\x50\x13\x9f\xa5\x6b\xd6\x06\xc8\xf4\x2b\x28\x45\xb0\xb3\xa4\x8c\x93\x48\xda\x62\x52\xa3\x4f\x33\x32\xda\x16\xc6\xd5\xe8\xa9\xd1\x16\xd3\x7c\xfd\xa5\x32\xa3\x2d\x52\x13\x9f\xa6\x87\xe3\x62\x25\x12\x6f\xf3\x20\x0d\x79\x50\x14\xf4\x03\xdc\x22\x85\x61\x8d\xbc\xf1\x19\xd0\x6b\xbb\x21\xbc\xd3\xb6\xa4\x56\xc3\x3d\x52\x9b\xe1\x75\x4d\x2d\x52\xeb\x74\xf9\x84\xd6\xda\xbb\x9a\x70\xb9\xb8\x5e\xed\x6b\x20\x26\x77\x1b\x07\x4a\x44\x22\x30\x92\x0e\x5c\x27\xe4\x2d\x2f\xa7\xab\x83\xcc\x0e\x19\x80\x63\xd9\x23\xe1\x80\x3c\x7e\xf5\x68\x17\x03\xe9\x10\xd7\x8f\x28\x11\x2a\xb0\x87\x90\x85\x81\xd0\xc5\x6d\x1d\xa2\x8d\xbc\xf2\x23\x1e\x52\xae\x43\xe7\x12\x06\x30\xd9\xd7\x90\x66\x03\x91\xa4\x2d\xf9\x2f\x4d\x70\x24\x03\x25\x1e\xd2\x4c\x86\xd0\x54\x40\x6b\xd8\x68\x4b\x49\xed\xd3\xac\x90\x01\x28\xc4\x65\x3c\xfa\x63\xd5\x85\x91\x21\x94\x50\x50\x29\x51\x46\xbd\x0c\x24\x6d\xe7\xaf\x2c\x9a\xc5\x94\xa8\x95\x01\x4e\x3c\x2a\x1d\x95\x7b\x6b\x9c\x2c\x09\x4c\x00\x02\x5b\x12\xec\x0a\xa8\x51\x3b\x4b\xb0\x8b\xdb\x60\x87\xad\x4c\x3c\x99\x94\x42\xa6\xd5\x29\x0b\xb4\x8a\x66\xea\xaa\x66\xc9\xca\x79\xd2\x96\xb4\x55\x7a\x97\x18\x8a\x99\x08\x48\xc6\x15\xd2\x50\x25\x0b\xef\x4a\x50\x0c\xf0\x62\x1d\x92\x53\xe4\x6a\x72\x9e\x9c\x8f\xa6\xb8\x16\x7c\x34\x2c\xa9\x3d\x50\xed\x02\x92\x75\x36\x55\x7a\x77\xca\x00\x3e\x35\x4b\xf3\x50\x10\x9f\x8e\xe1\x80\xb2\x08\x9c\xa0\xb2\xc7\xa2\xc8\x80\xb2\x95\x9e\x97\x04\x75\x91\x66\x14\xf6\x15\x18\x5d\xf1\xaa\x2d\xfa\x2e\x93\x41\x11\x6e\xc1\x12\xfa\x7d\xf4\x22\x13\xda\xe8\xc9\x12\x4e\x7a\x61\xc8\x2b\x66\x8e\xb1\x6b\x65\x3c\x3e\xdd\xb3\xa8\xfb\x2d\x78\xa0\xfb\xad\x36\x40\xf7\x1a\xb7\xf1\x11\x9d\xcc\x40\x0c\x1b\x03\x6d\x32\x06\x2d\xe2\x8f\x72\xfe\xeb\x9c\x1b\x2a\x64\x48\x35\xc6\xb3\x81\x70\xfc\x16\xd7\x6e\x17\x57\x65\x64\x9f\x90\x3d\xa5\x3d\x90\x74\x55\x1b\x5e\x3d\x0c\xd0\xc9\x9c\x93\xa1\xab\x93\xe3\x83\x46\x82\x72\x3e\xbf\xe8\xce\x99\x5f\x1c\xaa\xe7\xe7\xa6\x5a\xc3\xe1\xf6\x2d\x9c\x0d\x28\x2d\xce\x6c\x24\xc7\x0b\xfc\x7a\xfa\xe3\x6c\x75\x99\x2c\xe1\xed\x8a\xe5\x64\x4c\x58\x5d\xa6\xd9\x52\xbd\x33\xef\x57\xd9\xc1\x8e\x27\xf6\x5e\x2f\x77\x9f\x57\xcb\x78\xe9\xbf\x93\x53\xb5\xba\x48\xf2\xd9\x31\x9a\x66\xcb\xfa\xaf\xc7\x52\xbf\x41\x66\xd2\x71\xd2\x97\xb2\x2f\xd3\xa5\x79\xdf\xfc\x6d\x75\x91\xaf\x87\xb3\xbd\x6b\x6c\xc1\x45\x33\xf5\x60\x24\x42\x29\xee\x60\x7f\xef\x7c\x19\x5e\x89\x50\x43\xa1\xa5\x11\xaa\x67\xe9\x1a\x01\x37\xb7\x50\xcb\x02\xc2\x4c\xfc\xec\x50\xf0\x35\x6b\xf6\x42\x97\x60\x51\x2b\x3d\xfa\x69\xa4\x44\x93\x94\xde\x75\xfe\x56\x4d\x66\x49\xd9\x1d\x15\x32\xa0\xb2\x54\x7b\xb9\xd3\x5c\xac\xe0\x2d\x19\x59\x91\xe1\x47\x64\xe5\x40\xc6\xb0\x8d\x68\x75\xdc\x0b\xbe\x56\xb1\x20\xe5\x4c\xb9\x20\xe5\x01\x16\x2c\x6d\x11\xc5\x2d\x88\x5b\xd3\x22\x96\xc3\x82\x9b\xc2\x82\x94\xe5\x08\x3f\x21\xe7\x79\x7e\x7f\xe4\x9f\x0f\xb8\x05\x7f\xe4\x94\xc1\x19\x02\x94\x82\x02\xc3\x6c\x36\x1b\x72\xac\x73\xd7\x5c\x24\xf9\xf3\x44\x7a\x5f\x87\x07\xe2\x05\x3d\x37\x1e\x5a\x7b\x90\x77\x54\x38\x8b\xda\x36\x40\xe5\x0f\x45\x77\xb7\x81\x91\x7b\x6e\x82\x95\x0c\x77\xb7\x89\xc5\x2a\x76\x43\xee\x5b\xf7\x1e\x49\x1a\x93\xa6\x47\x79\x7c\xac\xa3\xdf\x34\xb8\xae\xbb\xf5\x6e\x03\xfa\xa6\xc0\xa3\x3b\x30\x36\xb7\x78\x17\x1a\x5e\x54\x21\x4d\x04\xaa\x08\x98\xce\x00\xa3\x11\xbc\x34\xa7\x54\x19\x9d\x05\xbc\x6d\x91\x3a\xa0\x5f\xa9\xda\x0f\xe3\x0e\x83\xbd\x67\xa8\xda\xf3\x6d\x19\x41\x2f\x75\x00\xbe\xd8\x12\xe7\xcb\x34\xbb\x6d\xf1\x94\x86\x91\x07\x47\x7e\x0a\x5b\xd7\x75\xd3\xe0\x4c\x0b\xfe\x56\x86\x00\x1e\x07\xac\x05\xaf\xd5\x9e\x10\xaa\x1a\x6c\x0b\xfe\x94\x6c\x6c\xea\xc4\x40\x54\x4f\x07\x78\x04\x09\xf7\x1e\x6a\x6a\xa5\x97\x7e\x43\x6d\xe1\xea\x3d\xd8\x96\x99\x47\xf8\x29\xd1\xf9\xb3\x84\x43\x04\x3b\xcb\xd1\x82\x9d\xed\x31\x0e\x1e\x83\x4c\x65\x17\x73\x4c\x8d\x7c\x78\x4a\xc2\x3a\x51\x8d\x4d\xae\xe9\xd7\x29\xf1\x3c\x93\x66\xdd\xc8\x13\x29\x19\x15\xc6\x79\x50\x23\xd2\x43\x46\x73\xd1\xa8\x13\xf2\xb2\xda\xf3\x10\x65\x6c\x9a\x3d\xa3\xda\x83\xf7\x3d\x8c\x4d\xfd\xf0\x6c\x9c\x08\x78\x9e\x7b\x23\x62\x47\xeb\x0a\xdb\xc5\x4c\x7f\xfd\xe9\x63\x4f\xec\x85\xd7\x1e\x6a\xef\x8a\xb9\xb8\x59\x2e\xe7\xb1\xf0\xe7\xab\xd5\xc5\xf9\x31\x92\x74\x43\x21\x57\xf2\xa6\x92\xc4\x83\x5b\x53\x02\x25\x8d\x25\xad\x6c\x96\x72\x4f\x01\x5b\x6a\x45\x60\x12\xad\x28\x40\x4a\x5a\xd1\xbd\xf4\x96\xc7\x2f\xf0\xde\x79\xea\x42\x3b\x1e\xea\x5b\xf4\x16\xae\x84\x0d\xd8\x1f\xa8\x07\x7e\x43\x60\xb4\x8a\xea\x8c\x56\xb1\x13\x46\x0f\x50\xf4\x09\x79\xf8\x57\xa3\x3d\x74\xdd\x71\xe8\xa9\xfd\x1c\x91\x8e\x25\xff\x47\xe7\x0c\x48\x2b\x5a\x69\x1a\xf8\xea\xd6\xe7\xc1\x36\x7a\x1a\x7d\x03\xa4\x24\xf7\x7c\xdb\x18\x13\x05\x0c\x63\xf4\x16\xc4\xe4\xc5\xbf\xc5\x6c\x36\x13\x2f\x7e\x99\x88\xb5\x71\xc5\x9d\xd0\x96\x4f\x18\x84\x72\x1e\xf4\xc6\x0a\x36\x5a\x68\x8b\x2e\x3a\x5d\xa2\x28\x5c\x55\x6b\x03\x53\xd4\x15\xf4\x92\xde\x74\x3c\x41\x97\x20\x9c\x12\x1a\x85\x0e\x62\x03\x96\x8b\xd5\xec\xc5\x1b\xe1\xbc\xf8\x8b\x6c\xe5\xc7\xc2\xeb\x1a\xbf\xf8\xb4\x88\x28\xff\x02\x4a\x8f\x73\x36\x69\x79\x7e\xf3\x7c\x95\x4d\x0e\x6f\xc0\x96\x4c\xff\x65\xa4\x84\x3b\x5d\x77\x1f\x2f\x23\xcd\xe8\x4a\xe3\x74\xe3\x5d\x53\xcf\xbf\xfc\x7c\x38\x30\x1d\x7d\xdd\x0c\xbf\xa9\xe8\x73\x61\x2e\x26\xc5\xe4\xe4\xab\x7f\xca\x56\x86\x78\x80\xc9\xd9\x38\xb1\xf2\x68\xde\x65\x26\x7f\x36\x7c\x15\x87\x6e\x76\x9f\x8b\x7c\xb2\xbc\x99\xac\x2e\xf2\xc9\x49\x86\x97\xcb\x9b\x97\xab\x8b\xfc\xe5\x41\xf6\x1b\x57\x8d\xb3\xf0\xb9\x98\x5c\x5d\x5d\x5d\x4d\xd8\xfb\x91\x2a\xa0\x05\xbf\xc7\xad\xb6\x1b\xd1\x58\xd4\x86\xbd\xee\x41\x16\x5b\x08\xe2\xed\x87\x77\x07\x3d\x91\x7d\x16\x63\xfb\x95\xab\x59\xe4\x63\x27\x3f\x97\xff\xdb\x53\xe8\x4a\x37\x17\xc9\xa7\x0f\x7f\xfa\x40\x9f\x3f\x7f\xa6\x77\x7f\xfe\xfc\xd3\xdb\xbe\x5c\x47\x6d\x46\x5b\x78\x42\xd9\x17\xaa\xbe\x5f\xd3\xb9\xf8\xe9\xfd\xd4\xe8\x3b\xe8\x73\xb6\xd7\xfb\x4d\x67\xce\x93\xfc\xe2\xb1\x21\xf9\x45\x9e\xfe\x3f\xb6\xbc\xf9\x5e\x53\xae\x9e\xb0\xe4\xea\xbb\x2c\xf9\x6f\x00\x00\x00\xff\xff\xdb\x34\xe9\x45\xeb\x0f\x00\x00" func runtimeSyntaxAtsYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxAtsYaml, "runtime/syntax/ats.yaml", ) } func runtimeSyntaxAtsYaml() (*asset, error) { bytes, err := runtimeSyntaxAtsYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ats.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxAwkHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\xcf\xe6\x8a\xd1\x4b\x2c\xcf\x56\xe1\x8a\x53\x56\xd4\xd3\x4a\xca\xcc\xd3\xd7\x48\xcd\x2b\x53\xd0\xd6\xb4\x4f\x2c\xcf\xd6\x50\xa8\x51\xd1\xe4\x02\x04\x00\x00\xff\xff\xd4\xba\xfa\xcf\x25\x00\x00\x00" func runtimeSyntaxAwkHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxAwkHdr, "runtime/syntax/awk.hdr", ) } func runtimeSyntaxAwkHdr() (*asset, error) { bytes, err := runtimeSyntaxAwkHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/awk.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxAwkYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x94\xdd\x72\xea\x36\x10\xc7\xef\x79\x0a\xc7\xa1\x3d\xf9\x18\x48\xa7\x77\xa5\x1f\x29\x01\x9b\xe3\x99\x20\x9f\x31\x6e\xca\x34\x4a\x3a\xc2\x5e\x83\x06\x59\x72\xa5\x75\x21\x9d\x7d\xf8\x8e\x20\x39\xe1\xa4\x19\xda\x9b\xfa\x62\x77\xb5\xd2\xfe\xf6\x2f\x4b\xa3\x4a\x2a\xc0\xa7\x06\x06\x81\xd8\xac\x3b\x9d\x12\x10\x0a\x1c\x74\x82\x20\x08\xfc\x94\x16\x35\x0c\x82\x90\xf3\xbe\xd8\xac\xbb\xe1\x2e\xbf\x02\x51\x82\x1d\x04\xe1\xe3\xe9\x49\xff\x62\x21\xf5\xd5\x19\xe8\x3f\x83\xcb\xf3\x6b\xb1\x59\x9f\x05\xd4\x3d\x0f\x3b\x1d\xdb\x2a\x70\x7b\x4e\x2f\x68\x2c\x34\xd6\x14\x3b\x50\xf7\x7e\xd8\xfb\x4d\xf4\xfe\xfa\xa6\xf7\xdd\xef\x27\x3f\x9f\x76\x2f\xae\x39\xef\x3d\x5c\x86\xef\x2c\x5d\x9c\x0d\xb3\xc9\x88\x86\xd9\x24\x61\x63\xef\xee\xe8\x26\x61\xd3\x74\x1c\xd1\x28\x65\x77\xf1\x34\xa7\x88\xdd\x25\x59\xca\x28\xca\x32\x96\x52\x9c\x44\xb7\xe3\x5f\x93\x71\xfe\x71\x76\xce\xf9\xe2\x7d\x66\x9c\xdc\x46\x6c\x38\x8d\x28\x66\x19\xc5\x33\x4a\x26\x2c\xcd\xa2\xd1\x70\x16\xd1\x6d\xc2\x72\x62\x31\xb1\x8c\x52\x4f\x4f\xe3\x19\xa5\xd9\x11\xd6\xa7\x2c\x1d\x25\x2c\x4e\x29\x9b\x51\x96\x53\x36\xcb\x87\xde\xdd\x46\x6c\x92\x7f\xa4\xd9\x2f\x37\xb3\xe8\x13\xe5\xd1\x3c\x1f\xa7\xd3\x61\xc2\x0e\x41\xb2\x04\x8d\xb2\x92\x60\xfb\x85\x12\xce\x3d\x13\xab\x56\x17\x28\x8d\x26\xd8\x22\x68\xe7\xa3\x9b\x68\x92\x30\x8a\xd8\xf8\xb0\xdc\x3d\xd5\x0b\xa3\xfa\xa6\x01\x2b\xd0\xf8\xd3\xb8\xe7\xbc\x77\x79\x71\xf5\xd5\x23\x9d\xfc\xf8\xf5\x0f\x3f\x5d\x7f\x3f\x78\x20\xce\x39\x27\xce\xef\x89\xf3\x87\xcf\x95\x28\x10\x6a\xd0\x38\x08\x9e\x5b\x1a\x4b\xb2\xa2\xcd\x4a\x2a\xa0\xd2\x10\x28\x07\x24\x35\x95\xa0\x00\x81\x60\x2b\xf1\x8b\xce\x0d\x14\x52\xa8\x97\xea\x85\x05\xb1\xa6\xc2\x68\x94\xba\x05\xb2\x80\xad\xd5\x5f\xac\x7f\xed\xb7\x2b\x28\x94\x71\x40\x4b\x40\x25\x35\x90\x86\x2d\xee\x8c\xbf\x6d\xd4\x58\xa9\x71\x6f\x2b\x72\x4f\x0e\xa1\xa6\xaa\x52\xad\x5b\x1d\x23\x0a\x14\xfa\x5b\x2a\x8c\x23\xd8\x36\xe4\x09\xca\x2c\xc9\x0a\x5d\x92\x93\x9a\xdc\x1f\x16\xc9\xf9\xe1\x51\x88\x33\x16\x69\x67\x25\x2d\x41\xbb\x76\x41\x4b\x6f\xa4\x2e\x61\x4b\x0a\xf4\x12\x57\x54\x0b\x2c\x8e\x6a\x71\x8d\x92\x48\xee\x65\x0b\x68\xd1\xe8\xb6\x26\x0f\x72\xed\xc2\xa1\x25\x34\xca\x6c\xc0\xfb\xb6\x69\xc0\x1e\x83\xd5\x6b\x94\x35\x78\x4a\xb5\x0f\x9e\x9c\xf7\x47\xb7\xa1\x4b\x2a\x4c\xdd\x28\x52\x6e\x25\x2b\x24\x63\xc9\xee\xa3\xad\x39\xda\x6c\x21\x75\x89\xb0\xc5\xd2\xd4\xc2\x9f\x7e\xb1\x04\xf4\x63\x2a\x0b\xfd\x1c\xbe\x7f\x0d\x82\xf0\xaa\x7f\x71\xff\xe8\xef\xda\xc3\x55\xd8\x79\x9e\x2f\x8c\x76\x28\x34\xf6\x1d\x5a\xa9\x97\xfb\xa7\xc0\x7f\x0e\x85\xdd\xf5\x0c\xc3\xcf\x39\xd0\xe5\x9b\x8c\x5b\xcb\x66\x27\x8c\xf3\xfe\x6b\xf6\xe0\x55\x79\xf9\x0e\x3b\xed\x25\x8d\x56\xc2\xbe\x96\xfe\x57\x39\x1f\xde\xaa\xf9\xf0\x7f\x8a\xa9\x77\x3f\xfe\x1f\x22\x4e\xdf\x8a\xe8\xfe\x4b\x3b\x34\xa5\x19\x04\xe1\x59\x9e\x8e\x53\x9a\xcf\xe7\x14\x27\xf3\x69\x74\x3e\xb8\x0e\x3b\x9d\xbf\x03\x00\x00\xff\xff\x75\x88\x25\x4c\xdb\x05\x00\x00" func runtimeSyntaxAwkYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxAwkYaml, "runtime/syntax/awk.yaml", ) } func runtimeSyntaxAwkYaml() (*asset, error) { bytes, err := runtimeSyntaxAwkYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/awk.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxBatHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x4a\x2c\x49\xce\xe0\xd2\x88\xd1\x4b\x4a\x2c\x51\xd1\xe4\xe2\x02\x04\x00\x00\xff\xff\x8a\xb7\xa1\xd0\x10\x00\x00\x00" func runtimeSyntaxBatHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxBatHdr, "runtime/syntax/bat.hdr", ) } func runtimeSyntaxBatHdr() (*asset, error) { bytes, err := runtimeSyntaxBatHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/bat.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxBatYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x57\x4f\x73\x1d\xb7\x0d\xbf\xeb\x53\x6c\x14\xa7\xb6\xe2\x91\x92\x48\xbd\xf4\xf5\x8f\xdb\x66\xa6\xc7\x5e\x3a\xd3\x43\x4d\x4f\xca\x25\xb1\xbb\xcc\xe3\xbf\x07\x60\xdf\x4a\x09\xf2\xdd\x3b\x20\x57\x8e\x5d\xdb\x72\xab\xd1\x03\xb0\x24\x48\x02\x20\xf0\x23\x39\x85\x08\xfc\x50\xe1\x30\x8c\x96\xdd\x72\x71\xe1\x81\xc1\xf1\xe1\x62\x18\xb4\x2b\xdb\x04\x87\xe1\xf2\x85\x31\x37\xa3\xe5\x67\x57\x97\x17\xc3\xf0\xe5\xb0\x80\xf5\x80\x87\xe1\xf2\xf2\xe2\x02\xd7\x08\x74\x68\xcd\x7f\x5f\xd3\x08\x48\x17\xc3\x70\x3d\xb8\x92\x89\x6d\xe6\x9b\xdc\x1a\x0f\xc3\xa5\x31\xe3\xeb\x6f\xaf\x7f\xf7\xe6\xa5\x31\x63\x9f\xe6\xaf\x68\xdd\x11\x98\x06\x9b\xfd\x40\x0f\x69\x2c\xb1\x0f\xa6\x0a\x2e\xd8\xd8\x17\xfe\x59\x8c\xf9\x45\x8c\x79\x21\xc6\x5c\x89\x31\xbf\x17\x63\xde\x88\x31\xaf\xe5\xdf\x62\x8c\x31\x62\xcc\x33\xf9\x83\xfc\x49\xbe\x90\x3f\xca\x6f\xc4\x18\xd9\xad\xfc\xbe\x64\x1f\x38\x94\x6c\x63\x5f\xc2\x95\xcc\x58\xe2\x30\xc5\xb2\x35\x8d\x5c\x18\x86\x17\xaf\xc2\xd5\x90\xc0\x66\x1a\x9c\x25\x18\x42\x26\xc8\x14\x38\x9c\x61\x48\x2d\x26\x6a\x52\x8f\x91\x3a\xa1\xfa\x2f\x54\x53\x7c\x11\x5f\x32\x08\xc4\x30\x09\x44\x02\x01\xb2\x4e\xe0\x3e\xb0\x4c\x41\xa6\x82\x32\xad\xd9\xa9\x09\x12\x26\x09\x59\x62\x71\x36\x0a\x82\xf5\x82\xc0\x2b\x66\x21\x88\xe0\x58\x78\x81\x2c\x6b\xe6\x10\x65\x5b\x42\x84\xab\x3d\x48\x1f\x2c\x0c\xa7\x55\x32\x9c\x24\x12\x49\x84\x93\xcc\x8c\x32\xc3\x49\x4a\x96\x32\x4d\x9f\x1c\x36\x17\x2e\xcd\xa0\x90\xd5\x6c\x67\x63\xec\x76\xe6\xc2\x2a\x10\x0b\x20\x16\x8c\x70\x86\x28\x1e\xa6\x90\xc1\x7f\x72\xb6\x8a\x59\xf2\x1a\x25\x56\xbe\x53\x72\xab\xe4\x3b\x71\x25\x8b\x2b\xe9\xb7\x4a\xee\x94\xdc\x2a\xf9\x4e\xec\x7a\x7f\xf5\x76\xd3\x8f\xf0\xb0\x15\xf4\xfb\x46\xb3\x65\x48\x90\xf9\x9d\xc9\xad\xaf\x08\x55\x6c\xad\x90\xbd\x58\xac\x62\x89\x8a\x13\xcb\x62\x39\x59\x9f\xc4\x32\x63\x18\xc5\xae\x3e\x70\x2d\x51\xec\xca\xc5\x2d\xc7\xce\x4b\x3e\x37\x61\x4a\x2c\xa3\xf3\x63\x29\x8d\x83\x0f\x2c\xa3\x87\xc5\xbb\x69\x96\x31\x30\x59\x9f\x42\x16\xed\x6f\x2d\x08\xf6\xd8\xe8\xaf\x5e\x7f\xcc\x3a\x67\x5d\x24\x71\x5e\x1c\x20\x23\x9c\x1a\x5f\x75\xdf\xdc\xe2\xaa\xb8\xc5\xe6\x19\xc4\x2d\x25\x38\x10\x17\xea\x02\x28\x6e\xf1\x41\xe9\xd1\xd3\x51\x59\xe6\x89\xc4\x2d\x73\x2c\xb3\x46\x6c\x99\x6b\x41\x56\xbe\x12\x8a\x8b\xa1\x4a\x5b\x23\x92\x8b\x6b\xb7\xd2\xc5\x95\x58\x67\x4a\x5e\x7f\x47\x78\x10\x97\x88\xab\xb8\x12\x0b\x7e\xc6\xe2\x92\x54\x2f\x55\xeb\x58\xb7\xe8\x0c\xba\x58\xa9\x0f\xe2\x2a\x16\x2d\x72\x71\xe4\x30\x54\x16\x47\x67\x0f\xe2\x2d\x83\x78\xe7\x83\x9d\xc5\xbb\xb9\x96\x29\xdc\x8b\x57\xe5\x54\x34\x35\xd0\x8a\xd7\x24\x99\x48\xcd\xf1\x13\x75\xcd\x89\x30\x85\x59\x7c\xb0\x99\x7f\x12\xf5\xd8\x07\x3c\xad\x85\xad\xf8\x40\xc7\x66\x46\x17\xea\x43\x13\xaa\x45\xee\x02\xe0\xd4\x04\xb4\xc1\x37\x81\x16\xeb\xcb\xa6\x62\xed\x93\x17\xcd\xdb\xdc\x17\x2c\xa4\xfe\x7b\x0c\x67\xc0\xd3\x0a\xf8\x20\x9e\xda\xae\x78\xb2\xde\x2b\x4d\x56\xd5\xc9\x8f\x6d\x63\x3c\xcd\xc0\xe2\x29\xcd\xa9\xb1\xe2\x1b\x3d\x83\x78\x7a\x1c\x8f\xe9\xe9\x20\x82\x5b\x8a\xb4\x1c\x82\xec\x7b\x15\x03\xda\x56\xf1\x90\x79\xe5\x28\x70\x86\xcc\x0e\x41\x83\xd7\xe4\x3e\x75\x13\x19\xc3\x3c\x03\x92\xc0\x39\xb3\xfa\x00\xf7\xd5\x66\x65\x8c\xd6\xf1\xd3\x4b\x4f\x4e\x74\x93\xc8\x61\x96\x29\x64\xdf\x08\x31\x2a\x9f\x01\x65\x8a\x96\x19\x52\x95\xa9\x64\x0f\x5a\xe4\x4d\x5d\x85\x64\x59\x26\x04\xd0\x90\xca\x44\x32\x51\x0b\xc8\xc4\x55\x26\x2d\x69\x99\xce\xb0\xd6\xb6\xdf\x33\x70\xb2\x4e\x59\xeb\x98\xeb\x14\xee\xd7\x2a\x73\x45\xa0\x35\xb2\xcc\xf5\x51\x11\xed\xc4\x76\x8c\x4f\x1b\xbd\x58\x5a\x66\xc8\xb2\x40\x95\x05\x62\x27\x8e\x51\x96\x42\xac\x87\x8a\x84\x5e\x49\x21\x10\x02\x01\x4b\xc8\x2b\x81\x84\xea\x4a\x9e\xc2\x2c\xa1\xde\x63\x59\x19\x24\xa0\x9a\x1b\x28\x11\xe0\x59\x7e\x04\xae\xd6\x1d\xe5\x08\x0f\xa3\x1c\xa3\xe2\xd6\x91\x80\xd7\x2a\x47\x4e\xcd\xb9\x23\x57\xab\xd8\x68\x47\x88\x12\x7d\x98\xbc\x44\x5f\x25\x16\xaf\xcb\xc7\x32\x27\xab\x38\x3c\x97\x69\x92\x58\x4f\x12\x2b\x4a\xb2\x6e\x7a\x0f\x74\x3f\xe6\x52\xb2\x47\x70\x76\x94\x64\xb3\x9d\xe1\x7a\xf4\x20\xc9\xd6\x5e\x9f\xc9\x4b\x3a\x6a\xca\xa7\x63\x0c\xf9\x28\x29\x39\x49\x45\x35\x0a\x2a\x59\x33\x77\x7a\x2e\x51\x5a\xea\xa5\xd3\xb8\x56\x49\x27\x3a\x3b\x49\x27\x9e\x1b\x27\xcf\x92\x68\x96\x44\x01\xee\x41\x1b\x42\x9e\xca\xdd\xad\x24\x62\x72\x92\x47\x56\xc3\x24\x03\x0f\x5a\x4e\xab\x42\x82\x7e\xcc\x58\xd6\xfa\xb4\xf5\xaa\xd6\xf2\xb6\xe9\xb6\x51\x15\x43\xee\x93\x11\x10\xe9\x21\xd5\xe4\xc5\x22\x74\x89\xb5\x40\xbb\x54\xfa\x10\xdd\xa2\x9d\xf7\x95\xcf\x01\x36\x15\xf4\xa7\x30\x9a\x81\x5b\xc1\x2a\x2f\x49\x19\x2d\x8d\x36\xbb\xa7\x1d\x74\xf3\x44\xfb\x32\x13\xf5\x9e\x38\x7e\xc6\xfc\x38\xa6\x19\x25\x47\x06\x62\xc9\x14\x4b\x39\xaa\x1b\x6c\x5d\xe7\x2e\x79\x05\xa8\xca\x92\xd9\xf7\x34\xcf\x3c\x21\x69\x69\x96\x0a\xb9\xd7\x44\xb5\x33\xa8\xb4\x27\x59\xb5\xbc\x34\x52\x43\xd6\x2f\x75\xaf\x8e\xdd\xc6\x0a\x99\x33\x8b\x62\x53\x2a\x59\xba\x46\xae\x6b\xd6\x6a\xcb\x4d\xd4\x45\x6a\xa9\xfe\x69\xd3\x6b\xd9\x00\x35\x36\x4d\xa0\x05\x62\x7c\x47\xfc\x21\xe8\x9a\x6d\x27\x2a\x66\x97\x55\x0f\xb3\xc7\x33\x2a\xff\xb1\x8c\xa4\x3c\xe5\xb9\x7d\xb7\x83\xa2\x62\x3e\x39\x8e\xb2\xfb\x5b\xd7\x51\xcf\xe3\xba\xd2\xe2\x1b\x6d\xb3\x01\xba\x92\x33\xb4\xcb\x07\x49\xdd\xa2\x5d\xb3\xd3\xc3\xe8\x64\x6b\x25\x3c\xcb\xa9\x62\x71\x40\xf4\xb4\xf1\x1d\xc4\x4e\x6d\xbf\x4f\x5b\xd0\x3b\x9d\xa0\x55\xc4\x8f\x82\xae\x0a\x7a\x41\x5f\x29\xcc\x59\x10\x66\x45\x40\x41\x70\xe5\x0c\x28\x08\x3e\xa0\x4b\xb5\x0b\x7a\xb4\x21\xcc\xfa\x0b\x39\x28\xa3\x33\xde\xdd\x0a\x42\x2c\xda\xaa\xe3\x1b\x2e\x20\x64\xcd\x1c\x84\xbd\xb4\x54\x08\xd8\xca\x0d\xa1\x46\xeb\x94\x2b\x60\x20\x10\x17\xfc\x4c\xd1\xa2\x96\x11\x86\x0e\x11\x98\xb4\x44\xb1\x8c\xa5\x9d\x41\x1d\x5f\xb0\x3a\x2d\x32\xe5\x6d\x8f\x91\x16\xc1\x35\x5b\x52\xea\x63\x54\x1b\x77\xc7\xc9\x55\x21\x27\x04\xdc\x4f\x80\xc7\xb2\x21\xb7\xb0\xa5\x23\x09\xb9\x4d\xd1\x9d\xc0\xb5\xa3\x42\x11\x0b\xd0\x41\xa8\xa5\x72\xc8\xed\x1b\x3b\x7c\x60\xd7\xd3\xfe\x0d\xf0\xb1\x5b\x87\x30\xd5\xfc\xb4\x4f\x04\x7c\x2f\x34\x39\xd9\x4f\x49\x5a\xc2\xc4\x42\x4b\xd9\x3a\xd0\xd0\xb2\xb2\x2f\x5b\x16\xd2\x6c\x21\x5a\xa4\x57\xb2\x86\x0b\xa1\xb2\xd0\x3a\x12\x0b\xdd\x93\x9e\x3e\x20\x0f\x54\x9c\x16\x17\x3d\x10\x43\x6a\xc1\x60\x7b\x04\x9d\x81\x6d\x0d\x9a\xba\xea\xde\x31\xc4\xd8\x84\x86\xba\xec\x52\x0f\x2a\x43\xd4\xfa\x67\x45\x69\x0e\xe9\x33\xfb\xa1\x1a\x65\x65\xe1\xc0\x11\x84\x63\x66\xeb\x53\x16\xae\xe9\x4c\xcd\x88\x77\x24\xeb\x00\x2b\x4b\x33\x12\x95\x03\x08\x93\x5e\x32\x99\x7c\xd8\x05\x70\x21\x55\x61\xea\xd6\x91\xde\x68\xa4\x9d\x60\x4a\xda\xc5\x82\x7f\x6a\x85\xba\x7a\x1f\xf6\xb2\x5f\x7b\x9c\xd6\xbc\x1f\x0a\x9a\xad\x67\xc0\x30\x3d\x3c\x6d\x7c\xd3\x09\x8f\xca\xa2\x58\x7e\xa6\x1d\xd2\xb6\xbb\x5b\x4e\xb2\xd9\xc0\x7a\xcb\xde\x76\x10\xd9\x76\x28\xda\xc0\xed\xfc\xdc\x2f\x8b\xdb\x02\x08\xb2\x2d\xc5\xa6\x20\x5b\xc8\x99\x3b\xbd\xbb\x55\x5e\x4b\x55\x86\xa9\x51\x52\x4a\x96\x65\x8b\x23\x49\x0a\x4e\xb6\xfd\xbe\x76\xaf\x79\xfc\xeb\xd5\xfa\x9b\xe1\x6f\xd1\xce\xef\xbf\xbf\xf4\x0d\xf5\x8d\x31\xdb\xcb\xfd\x51\xf4\x4f\x8b\xc1\x8e\x11\x3e\x78\x68\x7d\xf5\xd5\x5b\xad\xf7\xdb\xb5\xf9\xab\x0f\x9f\x54\xc3\xf4\x76\xad\xfd\x75\x70\x7d\xfd\xda\x5e\xff\x74\xfd\xe6\xe5\x7f\xbd\x19\x86\xd6\xae\xcd\xad\x3d\x78\xc8\xdc\xe2\xd8\x7a\x9f\x19\xf3\xf3\x2b\x7d\x18\xfe\xe5\xfa\x5f\x3f\x7c\xf1\xe7\x2f\x9f\x7d\xfd\xea\x5a\xdf\x88\xbf\xbc\xba\xfc\xff\xd5\xbf\x1c\x2e\x2f\x87\x7f\x30\x86\x3c\xbf\xff\x0a\xa5\xd6\xa6\xcf\x54\xfd\x6b\xf5\x70\x18\xcc\xe5\xfe\x0d\xd9\xbf\xf3\x45\xc7\x50\x0f\x83\xb9\xd9\x3f\xdf\x3e\x70\xfb\xdf\xbb\x93\xf6\x28\x7d\xbf\x58\x3c\x0c\x2f\x8c\xf9\xf6\xf1\x3d\xca\x62\x4c\x16\x63\x50\x8c\xb9\x14\x63\x9e\x5f\x7d\x6c\xf8\x9a\x83\x2b\x1e\x0e\x83\x31\xab\xf9\xf9\xf5\xeb\xc3\xbd\x0f\x73\xe0\xc3\x9b\x37\x2f\x7f\x69\xbe\x3c\x7f\x3e\xd0\xa7\x7d\x69\x8f\xe3\xe7\x37\x2f\x75\xfa\xee\x3b\x42\x1a\x2c\xe9\xd5\x40\x13\x77\x1f\xd4\xe4\x1b\x84\xa4\x03\x1a\x24\x42\x32\x86\x6e\xbe\xde\x07\x1d\x0e\xff\xc3\x18\x63\x0e\xed\xbf\x0f\xfb\x4f\x00\x00\x00\xff\xff\x8e\x03\x2d\x0d\x34\x10\x00\x00" func runtimeSyntaxBatYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxBatYaml, "runtime/syntax/bat.yaml", ) } func runtimeSyntaxBatYaml() (*asset, error) { bytes, err := runtimeSyntaxBatYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/bat.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xe6\xd2\x88\xd1\xd3\x48\xae\x71\xd6\x54\xa9\x89\xd1\xd3\xc8\xa8\xf1\x00\x33\x32\x33\xed\xc1\xfc\x94\xd4\x34\x4d\x15\x4d\x2e\x2e\x40\x00\x00\x00\xff\xff\x62\x51\x8f\x94\x27\x00\x00\x00" func runtimeSyntaxCHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCHdr, "runtime/syntax/c.hdr", ) } func runtimeSyntaxCHdr() (*asset, error) { bytes, err := runtimeSyntaxCHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/c.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x54\x6d\x6f\xdb\x36\x10\xfe\xee\x5f\xa1\xa9\xd9\x22\xda\xb5\x93\xb4\x45\x5f\xb4\x17\x61\x4b\x9b\xb5\x40\xb6\xec\xc3\x02\x04\x13\x55\x81\x92\x4e\x36\x11\x9a\x14\xc8\x53\x92\xb6\x97\xff\x3e\x50\x92\x13\xd5\x09\xba\x20\x9f\x66\xc0\x10\xef\x8e\xc7\xe7\x79\x8e\x77\xac\xa5\x02\xfc\xd4\x40\x1c\x94\x93\x49\x05\x08\x25\xc6\x93\x20\x08\x02\x1f\xd0\x62\x0d\x71\x10\x46\x9c\x2f\xa2\x92\x0e\xd9\x0e\xf9\xd5\x8a\xde\xf7\x2b\x29\x93\xde\x53\x41\xcd\x76\x58\x38\x99\xd8\x56\x81\xeb\xf3\xe7\x81\xac\x40\xa3\xac\x25\xd8\x38\x08\x39\x2f\xd2\x5f\xe7\xff\xe4\x59\xba\x3f\x7f\xd3\x2d\x66\x9c\x17\xe1\xb0\xb5\x67\xe0\x37\x45\xa2\x45\x43\xb5\x32\x02\xa9\x32\x6d\xa1\x80\xca\x95\xb0\x24\x35\x92\x5b\x19\x8b\xa4\x8c\x5e\x92\x93\x9f\xc1\xd4\x04\xba\x5d\xd3\x85\x91\x15\x39\x14\x28\x4b\x2a\x8d\x76\x48\x0e\x6d\x5b\x22\xb5\x5a\x1a\x4d\xfe\xec\x0a\x6a\x82\x2b\x04\xab\x29\x6a\x35\x4b\x9c\x5c\x6a\xa8\x48\x6a\x25\x35\xb0\xfb\x89\x44\x2e\xf1\x28\x8c\xa2\xa8\xcd\x13\x96\x48\x8d\xd1\x6b\x3a\x78\x49\xcf\x9f\xd1\xcb\x17\xd4\xa0\x65\x8c\xe5\xb8\x95\xbc\xf0\x30\xba\x82\x6a\x38\xa5\x30\x46\x8d\x01\x3c\x4f\x58\x83\xc6\x21\x7e\x61\x94\x40\xa9\x80\x2c\x2c\xa5\x43\xb0\xdf\xda\x5c\x1b\x4b\xb2\xa6\xcb\x95\x4f\xa8\x0c\x81\x72\x40\xa5\x70\x40\x15\xd4\xa2\x55\x48\xee\x52\x62\xb9\xfa\xd6\x19\x4b\x83\xc6\x97\x09\xa5\x6e\x81\x0a\x0b\xe2\x9c\x2c\x60\x6b\xf5\x38\xab\xb1\xd0\x58\x53\xc6\x41\xf8\x31\x4d\x63\xd7\x88\x12\xe2\x2c\x9b\x3e\x19\x1b\xfe\xda\xa5\x06\x6a\xac\x58\xae\x05\x49\x5d\xaa\xb6\x02\x5f\x60\x92\xb5\x4e\x58\x57\x74\x5d\xc9\x9a\x40\x45\xb2\x26\x07\xac\x63\x2f\xac\x96\x7a\x49\x60\xad\xb1\xac\x07\x0c\x82\x27\xc1\xef\x87\x87\x41\xd1\x4a\x85\x52\xbb\x7b\xb8\xe7\xb9\x40\xb4\xb2\x68\x11\xf2\x7c\x4c\x83\xf3\x88\xf3\x28\xfd\xc8\xfc\x92\x71\xce\xee\x53\x9e\xe7\x91\x50\xfd\xa5\x0b\xb7\xa6\x01\x87\x56\xb2\xaa\x40\x0f\x7d\x40\x8d\x28\xcf\xa1\x22\x0b\x0e\xad\x2c\x91\x1c\x94\xb8\xe9\x20\x53\xd3\x25\x88\x73\x96\xe7\xb7\x8c\x4f\x1a\xb0\x02\x8d\x0d\x0e\x8d\x32\x76\x83\xfa\x69\x5d\x18\xb5\x30\x43\xcc\x8f\x4f\xba\x88\x7f\x7c\x3a\x9b\xd2\xcf\xdf\x71\xfe\x7d\x46\x3f\xd1\x2f\xb4\x47\x73\xfa\xe1\x96\x69\x9f\x53\x58\x4f\x00\x5d\x1c\x84\x69\xc4\xbe\x5c\x67\xc4\x79\x4a\x9c\x67\xb7\x90\x1f\x34\xc2\x12\x3c\xa2\x76\x28\x34\x6e\x2a\x55\x0e\xf6\x42\xb7\xeb\xa2\x1b\xb8\xc8\x5f\x76\x7a\x30\x7f\xd3\x4d\x5c\x36\xa5\xfd\x74\x7f\xfe\xaa\xfb\x9e\x5d\x0d\x53\x78\x24\xe6\x75\x36\xa3\xfd\xf4\xb7\x22\x4b\xf7\x0f\xb2\x19\x8b\xd2\xd3\x36\x4b\xd2\x63\x95\xf9\x7f\x42\x37\xab\xce\xcf\x12\xce\x8b\xd1\x95\xbd\x85\x52\xae\x85\x0a\x8e\xfc\xb8\x4a\xbd\x7c\x28\xad\xa8\xa7\x94\x2e\x7a\x6e\x33\xea\x3f\x1b\x7b\xca\xa2\xf4\x1d\x64\xe9\x6c\x9e\x25\x7d\x84\x25\x9b\x2d\x5b\xfe\xf4\xa8\xf6\xec\xbe\xa6\xf5\x1e\xae\x44\xf5\x38\x6a\x5d\x71\xa2\xe1\x8d\x12\xf3\xcf\x37\x24\x07\xb3\xa7\xba\x31\xbe\x8e\x4d\x59\xfa\x57\x33\x66\x77\x87\xdc\x7d\xa8\x7f\x9e\x1e\x1f\x87\x93\xed\xb0\xef\x40\xbd\x8c\x07\x49\x81\xef\x65\xdb\x4d\x70\x18\xde\xf8\x40\x57\x5b\x1e\x77\x2e\x9b\x6e\xcc\x39\x5f\xdc\x7a\x47\x8f\xf2\xe6\x37\x46\x6a\xa0\x94\x42\x1d\xae\x84\x1d\x52\xa3\x94\x87\xbb\xa2\xa8\xb5\xc5\x0b\x6f\x67\x5e\xf3\xf3\x4e\xd4\xab\xec\xcb\xc1\xd3\x67\xd7\x74\x35\xea\x9f\xde\xd3\x8e\x3d\x2f\xae\xe9\x74\x6c\xbf\xbe\x66\x0f\x97\xb8\xbb\xad\x70\xf7\x51\x02\xbb\xe7\x25\x0e\xc2\xc5\x62\x16\xfe\x7f\xb4\xaf\xbb\xf7\xe8\x8e\xe6\xbd\xbd\x6d\xd1\x3b\xff\x21\x0f\x4d\x65\x7c\xcf\xfe\x7d\xf2\xf6\x84\xce\xce\xce\xe8\xe8\xc3\xd9\x1f\xef\x58\x9c\x3c\x00\x8c\xf3\xe9\x9d\x2e\xe2\xd3\xbd\xc7\x23\xfe\x1b\x00\x00\xff\xff\x17\x33\xfc\x7d\x45\x08\x00\x00" func runtimeSyntaxCYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCYaml, "runtime/syntax/c.yaml", ) } func runtimeSyntaxCYaml() (*asset, error) { bytes, err := runtimeSyntaxCYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/c.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCaddyfileHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x4e\x4c\x49\xa9\x4c\xcb\xcc\x49\xe5\x72\x86\xb3\xb8\x00\x01\x00\x00\xff\xff\xd5\x4d\x82\x4b\x15\x00\x00\x00" func runtimeSyntaxCaddyfileHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCaddyfileHdr, "runtime/syntax/caddyfile.hdr", ) } func runtimeSyntaxCaddyfileHdr() (*asset, error) { bytes, err := runtimeSyntaxCaddyfileHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/caddyfile.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCaddyfileYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x8f\x41\x6e\x83\x30\x10\x45\xf7\x3e\xc5\xc8\x25\x12\x94\x84\xee\xd9\x64\x91\x23\x74\xc9\x10\xc9\xc2\x93\xd6\x2a\x38\x96\x3d\x55\x14\x91\xdc\xbd\xb2\x09\x4d\x45\xab\x66\x16\x20\x7f\x3d\xcf\x7f\x3e\x98\x9e\xf8\xec\xa8\x86\x4e\x69\x7d\x8e\x47\x21\x34\x31\x75\x5c\x0b\x00\x80\x98\x58\x35\x50\x0d\x72\x37\x13\x52\x08\xff\xd9\x53\x98\x88\x0d\x18\x4d\x96\xcd\xc1\x90\xaf\x41\xee\x11\xc3\x33\xe2\x6b\x99\x23\x86\x4b\x56\xc8\x1b\x34\xb5\xc8\x7d\xde\x20\x9e\xaa\xfa\x65\xd3\x96\xeb\x2d\x6c\x8b\xb2\x59\x8f\x6d\x36\x53\xdd\xd1\x06\x56\x96\xab\xe0\xa8\x33\xaa\xdf\xbd\xab\xb8\x14\x31\x8c\x8f\x98\x54\x7c\xfd\x83\x62\x6f\xec\xdb\xe4\x1a\x27\xb0\xf2\x1c\x77\x4a\xf9\x9d\x91\xd5\x8b\x24\x7c\x18\x97\x8a\x11\xab\x7b\xfa\xe3\xd9\xf3\xfc\xe3\x9c\xae\xde\x74\x9c\x27\xe7\x8f\x5d\xca\xc7\x1c\xf1\x54\x5e\x10\xb3\xf4\x5f\xc5\xef\xaa\x40\xbc\xde\xdd\x87\x81\x2c\xff\x76\x7e\x5a\x2a\x67\x4b\x37\x68\x5a\x21\xbe\x02\x00\x00\xff\xff\xde\x9c\x93\x00\xd6\x01\x00\x00" func runtimeSyntaxCaddyfileYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCaddyfileYaml, "runtime/syntax/caddyfile.yaml", ) } func runtimeSyntaxCaddyfileYaml() (*asset, error) { bytes, err := runtimeSyntaxCaddyfileYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/caddyfile.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxClojureHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xce\xc9\xcf\x2a\x2d\x4a\xe5\x8a\xd1\xd3\x48\xce\xc9\x8a\x2e\x4e\x8e\xb5\xaf\x49\x4d\xc9\xd3\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\x82\xd0\x0b\x85\x1b\x00\x00\x00" func runtimeSyntaxClojureHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxClojureHdr, "runtime/syntax/clojure.hdr", ) } func runtimeSyntaxClojureHdr() (*asset, error) { bytes, err := runtimeSyntaxClojureHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/clojure.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxClojureYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x53\x51\x6f\xd3\x30\x10\x7e\xcf\xaf\xb0\xc2\x24\x12\x46\xba\xb2\x4d\xa0\x05\x41\x34\x15\x26\xed\x01\xed\x81\x09\x55\xc4\x79\xb0\x9d\x4b\xea\xcd\xb1\x23\xdb\x01\x0a\xe6\xbf\x23\x3b\xa1\x8d\xda\x49\xeb\x8b\xfd\x5d\xbf\xfb\xee\xbb\xbb\xb8\xe1\x02\xec\xb6\x87\x1c\x31\xa1\x1e\x06\x0d\x51\x54\x83\x05\x66\xf3\x08\x21\x84\xfc\xdf\x92\x74\x90\xa3\x18\xe3\x45\xc2\xc4\x43\x69\x58\x55\x38\xa8\x65\x7a\x12\x47\x91\x1e\x04\x98\x3c\x0a\xdc\x17\x68\xa5\xa4\xb1\x44\x5a\x13\x70\x86\xd8\x84\x17\x54\x29\x11\x24\x68\x62\xf5\x00\xae\x21\xc2\x40\x8a\x31\x8d\x0f\x99\x1d\x61\x5a\x4d\x54\xc9\xc5\x9e\xe3\xf5\xbf\x11\xc1\x6b\x24\x87\x8e\x82\x3e\xaa\x31\x86\x73\x14\x97\x18\x67\x55\x51\x2e\xb3\xab\xea\xb4\x78\xaa\xc6\x8e\xb9\xfc\x15\x58\xe5\x75\x76\x43\xb2\xe6\x39\xf6\xa8\x9b\x5c\x94\xcb\xec\x6d\xe5\xce\x43\xaa\x7b\x33\x1e\xe5\x79\x76\x55\xa5\xda\x83\xeb\xec\xfb\x5c\xc9\xfb\xbe\x95\x3f\x9e\x70\x0e\x5a\xab\x99\x6e\x79\xe9\xad\x04\xb5\x8b\xf2\x5d\xd0\x76\xcb\x23\xc9\x9d\xe6\xd7\x6d\x47\x95\xf8\xaf\x65\x02\x5a\xa8\x1e\x34\xb1\xa3\xea\x87\x8f\xa7\x18\x67\xaf\xce\x5e\x16\xd5\x2c\xed\x7e\xdb\x83\x39\x63\xc4\x58\x2e\xdb\x29\x79\xdc\x7f\x18\x39\xdd\x5a\x70\x66\xa3\xb4\x75\x09\xe5\x6d\x5a\x70\x69\x13\x68\x41\xa7\x85\x13\x4a\xb6\xae\x11\x8a\x58\x27\x87\xce\x51\xde\xd6\xc0\x9c\x26\x96\x2b\x49\x04\xff\x3d\x2d\x74\xef\xd0\x6a\x2e\x5b\xb4\xe1\xed\x46\xf0\x76\x33\x2b\xb8\x9b\xad\x09\x94\x7c\x4a\x41\xc8\x58\xa2\xad\xb7\x12\xc7\xbb\x18\xc8\xfa\x20\x62\x1e\x79\x1f\xfc\x62\xbc\xd8\x47\xa7\x4f\x11\xcd\x7e\xf3\x4a\x3d\x30\x4e\xc4\x6a\x43\xfc\x70\x12\x9f\x3b\x8c\xa3\x6d\xfc\xea\xff\x5c\xbe\xbe\xfc\xeb\x7c\x54\xc2\x4f\xc1\x25\x84\xbb\xe9\x09\x1b\x6f\x96\xd0\x70\x36\x4a\x77\x0d\x40\x1d\x00\x25\xec\x71\x4f\xd1\x60\x07\x2d\xc3\x75\x91\xce\xc6\xb0\x52\x5d\x07\xf3\x37\x11\xe0\x71\xcf\xef\x0f\x5b\x3e\x79\xa6\x37\xab\x6a\xff\x52\x92\xfb\xbb\x4f\x77\x6e\xbd\x5e\xbb\x9b\xdb\xf5\x97\xcf\x69\x5e\xc4\x51\xf4\x2f\x00\x00\xff\xff\x9a\x5d\xd4\x68\xd7\x03\x00\x00" func runtimeSyntaxClojureYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxClojureYaml, "runtime/syntax/clojure.yaml", ) } func runtimeSyntaxClojureYaml() (*asset, error) { bytes, err := runtimeSyntaxClojureYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/clojure.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCmakeHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xce\x4d\xcc\x4e\xe5\xd2\x70\xf6\x4d\xcc\x4e\xf5\xc9\x2c\x2e\x29\x8e\xd1\x2b\xa9\x28\xa9\x89\xd1\x03\x4b\x68\xaa\x70\x71\x01\x02\x00\x00\xff\xff\x50\x65\xaf\x78\x22\x00\x00\x00" func runtimeSyntaxCmakeHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCmakeHdr, "runtime/syntax/cmake.hdr", ) } func runtimeSyntaxCmakeHdr() (*asset, error) { bytes, err := runtimeSyntaxCmakeHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/cmake.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCmakeYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x53\xdf\x6f\x9b\x3c\x14\x7d\xe7\xaf\x40\x7c\x95\x0a\xdf\xa7\x46\xf9\x36\x69\x5b\x79\x89\x28\x71\x53\x24\x7e\x64\x40\x9b\x64\x71\x86\xa8\xb9\x59\xbd\x10\x83\x8c\xb3\x75\xea\xdd\xff\x3e\x41\x92\x2e\x4b\x2a\x6d\x2f\xf3\x0b\xf8\xda\xf7\x9c\xa3\xe3\x73\x97\xbc\x04\xf5\xad\x06\x5b\x67\xeb\x7c\x05\x9a\x56\x80\x02\xa6\x6c\x4d\xd7\x75\xbd\x3d\x14\xf9\x1a\x6c\xdd\x30\xdd\x20\x5f\x81\xcf\x1b\xd5\x50\xda\x53\x8f\x0a\x29\xed\x75\x2d\xd6\x99\xa1\x69\x72\x53\x42\xb3\x6d\xba\xd0\x79\x01\x42\xf1\x25\x07\xd9\xfb\x92\x4b\x5b\x37\x3e\xce\xe7\x76\x53\xe7\x0c\xec\xc5\xe2\xdf\xb9\x73\xf1\xa1\x7f\x71\x99\x2d\xfe\x33\x76\xf7\x6b\x09\xb5\xac\xd8\xf1\x45\x93\x0b\x56\x6e\x0a\xc0\xdd\x37\x2b\xb8\x04\xa6\x2a\xc9\xa1\x79\xae\xc1\xa3\x02\x29\xf2\x32\x5b\x37\xb5\xac\x3e\x03\x53\x16\xa5\xf7\x86\xb6\x83\x6e\x54\xae\x60\x0d\x42\x1d\x83\x53\x7a\x6f\x9a\x50\x36\x80\x20\x0a\x6b\xc0\x97\xd8\x6d\xcc\x6e\xf7\xf5\x81\x97\xfb\xff\x65\x25\x21\x67\x0f\x78\x2f\x21\x5f\x6d\xb1\x4f\xa1\x5b\x34\x37\x1a\xcf\x30\x8c\x52\x74\xa3\x20\x70\xc2\x21\x8e\xe3\x68\x4c\xe2\x74\x86\xe3\xc8\xf7\xdc\x19\xa6\x4e\x3c\x22\x29\x92\xa9\x97\xa4\x09\x7a\x49\x66\x0e\xbd\x98\xb8\x69\x14\xcf\xd0\xb9\x4a\x22\xff\x36\x25\x16\x0e\xc9\xb5\x17\x92\x61\xcb\x74\xa0\xf7\x25\xd2\x83\xe3\x96\x3f\x8a\xb1\x65\xf5\x92\x2c\x24\x13\x12\x67\xe9\x8d\x13\x62\xe0\xa4\xee\x0d\x49\xd0\x4c\xd2\x18\xef\x48\x9c\x78\x51\x98\x59\x03\xd3\x27\x49\x82\xa3\x98\x38\x29\x89\x91\xbc\xbf\x75\x7c\xeb\x84\x71\x4f\x59\x03\xe3\x79\xf9\xb2\x81\xad\x43\xe6\x72\x23\x98\xe2\x95\xc0\x75\xce\x64\x65\xa1\x04\xb5\x91\xc2\x7a\x46\x60\x95\x68\x54\x2e\x54\xaf\x51\x92\x8b\x4f\xdb\x98\xb4\xab\x51\xb9\xec\xec\x33\x8c\xe7\x1a\x88\xe2\xa8\xd2\xac\x78\xdd\x79\x4c\x69\xef\x67\xf5\x20\x71\xfb\x75\xc8\xb4\x15\xed\x3e\x74\xf9\xdb\xb5\xfe\xa9\x9c\xf3\x63\x35\xe7\x7f\x4f\xcc\x3e\xfb\xa7\x9e\xd0\x33\x93\xd2\x27\x24\xe1\x1d\xa5\x4f\xd6\x89\x41\xf4\xfb\x31\xbd\x3e\x5f\x68\xa7\x13\xd8\xbd\xc9\x2e\xa2\xce\x78\xec\x13\xbc\x0d\xbd\x29\x4e\xbc\xf0\xf5\x2b\x74\x67\xa3\x89\x17\xe2\x55\x14\xfb\x6d\x76\x02\x2f\x1c\x4d\x30\x48\xee\x5c\x33\xf3\x86\x04\xdf\xf4\xf1\xed\xff\xf8\xae\x8f\x97\x7d\x6b\xf0\xcb\x5c\xb1\x6a\xdd\xa5\xf0\x44\xf6\x3f\xc7\x42\xcf\x7e\xe3\x92\xaa\x8a\x56\x9e\x99\x46\xc3\x08\xa7\xd3\x29\x5e\x7b\xd3\x80\x58\xf6\xc0\xd0\xb4\x1f\x01\x00\x00\xff\xff\x28\x8d\x1c\xb5\x9d\x04\x00\x00" func runtimeSyntaxCmakeYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCmakeYaml, "runtime/syntax/cmake.yaml", ) } func runtimeSyntaxCmakeYaml() (*asset, error) { bytes, err := runtimeSyntaxCmakeYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/cmake.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCoffeescriptHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xce\x4f\x4b\x4b\x4d\x2d\x4e\x2e\xca\x2c\x28\xe1\x8a\xd1\x83\x70\x55\xb8\xb8\x00\x01\x00\x00\xff\xff\xa2\x22\xc2\xb2\x18\x00\x00\x00" func runtimeSyntaxCoffeescriptHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCoffeescriptHdr, "runtime/syntax/coffeescript.hdr", ) } func runtimeSyntaxCoffeescriptHdr() (*asset, error) { bytes, err := runtimeSyntaxCoffeescriptHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/coffeescript.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCoffeescriptYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x95\x61\x6f\xdb\x36\x13\xc7\xdf\xfb\x53\xe8\x51\xfa\xac\x76\x0c\x79\xe9\x3a\x74\x88\xb0\xc5\x4b\x57\x7b\x08\xb0\x24\x45\xd3\x62\xc1\x24\xa1\xa0\xa4\x93\xcd\x85\x3a\x0a\xe4\xa9\xb6\xb6\xdb\x3e\xfb\x40\x49\x4e\x1c\xc7\x4d\xb3\x17\xf3\x0b\x53\x3c\xde\xfd\xee\x4f\xea\x78\x2a\xa4\x02\x6a\x2a\x08\xbd\x4c\x17\x05\x80\xcd\x8c\xac\x68\x30\xc8\x81\x20\xa3\x70\xe0\x79\x9e\xe7\x7c\x50\x94\x10\x7a\x7e\x1c\x4f\x3a\xbf\x67\xfe\x60\x60\x6a\x05\xb6\x73\x09\x3c\xdb\x94\xa9\x56\x13\x5d\x81\x11\xa4\x4d\xe8\xf9\xc3\x28\x18\x7f\x7d\xf8\xc3\xf7\x27\xff\xfb\xfb\xff\xd3\xf0\x2b\x4e\x38\x9a\x24\x7f\xbe\xfc\x6b\xc4\x71\x9c\x0e\x05\xe6\xac\x0d\x4b\xcb\xd2\x22\x31\x6a\x1a\xc5\x71\xea\xf7\x34\x99\x03\x92\x2c\x24\x98\x49\xa6\x84\xb5\x2d\xee\x34\xf8\x4d\x04\x7f\x7c\x4c\xfa\x87\xa3\xe0\xf8\x63\x72\x18\x46\x51\x68\x2b\x91\x41\x98\x24\x87\xc3\xe0\x84\xe3\x78\x38\xe2\xe0\x64\xe4\xdf\x17\x96\x1a\x91\xdd\x00\x39\x52\x34\x1c\x25\xfe\x60\xb3\x4c\x82\xa0\x04\xa4\xd0\x73\xdb\x4b\x87\x62\x25\x24\xf1\x6a\x09\xc8\x99\xa0\x6c\xc9\x99\x46\x92\x58\x03\xe7\x90\xd6\x8b\x05\x18\xce\xa1\x10\xb5\x22\x4e\x1b\xae\x91\xa4\xda\x56\xfe\x80\x97\x83\x02\x02\xce\x35\x83\xb2\xc0\xb0\xae\xb4\x21\x2e\x24\x0a\xa5\x1a\x2e\xb4\xe1\x76\x87\x0c\x6b\x02\xcc\x2d\xaf\x96\x52\x01\xd3\x12\xf0\x51\xec\x02\x88\x65\xc1\xb2\xec\x70\x46\x97\x2c\x91\x25\x5a\x12\x98\x81\x2e\x18\x61\xc5\x06\x7e\x87\x8c\xd8\x80\xd5\xea\x13\xb0\x01\xaa\xcd\xe3\x58\x0b\xc4\xb6\xae\xc0\xb0\x5d\x49\xb7\x7b\x5a\x4a\xcb\xb4\x34\x7a\xc5\x64\x1a\x76\xb5\xa2\x0b\x5e\x49\x5a\x72\x23\x41\xe5\x5c\xa3\x02\x6b\x3b\x68\x4f\xcd\x74\x2b\x83\x26\xa9\xd6\x6a\x43\x26\x53\x03\x17\xc2\x9d\x41\x03\x96\x51\xb3\x46\xd6\x45\xb1\x2d\xe7\x5e\xe0\xa4\x75\x0e\xbb\xe8\x2e\xd0\x05\x3d\x16\xe1\x72\x84\x5b\xe9\x5c\x22\x8d\xfb\xb5\x61\x5d\xa6\x60\x3a\xef\x28\x18\x27\xd3\x61\xf4\x22\x38\x4e\xa2\xa3\xe0\x38\x39\xe4\xa3\xe8\x28\xf8\xce\x8d\x6b\x67\x10\x41\x71\x1a\xcc\x93\xf1\x68\x18\xd5\x1f\x92\x48\xfd\x92\x4c\xd9\xfd\xbb\xd9\x74\x34\xdd\xa7\x67\x0f\xde\x91\xc7\x71\x3c\xe9\x53\x74\xc3\x66\xee\xd8\x33\x78\x5b\x25\xd1\x38\x48\xa6\xbd\x69\x1a\x15\x73\x97\xec\xc9\xf4\x87\x88\x1d\xc2\xdd\xc5\x0a\x3d\xff\xc7\x7b\x37\xe9\xf6\x88\xc0\x18\xdd\xb3\x87\x80\x75\xe9\x8a\x4c\xb5\x55\x62\x59\x22\x81\x29\x44\x06\x5c\x89\xec\x46\x2c\x80\x2b\x23\x3f\x09\x72\xa3\x76\x2d\x03\x72\xae\xea\x54\xc9\x6c\xb4\x2b\xba\x27\x2e\x94\x4e\x85\x7a\xef\xca\xea\x0c\x0b\x89\x92\x1a\xc6\x5a\x29\xae\x31\x87\x42\x22\xe4\x7c\x21\x2e\xf6\xbd\xe3\x1e\xf0\xaf\x9c\x9f\x52\x75\x5d\xff\x6b\xdd\x4f\x8d\x11\x0d\xbf\xd6\x5a\x81\x40\x7e\xe3\xf6\x35\xc3\xba\xec\x7a\x1a\xcf\xdc\xc1\xf0\xbc\xc6\x8c\xa4\x46\xfe\x19\xb0\x5f\x38\x17\x15\x9f\x0b\x5a\x7e\x86\x7a\xd1\xbe\x2d\xbe\x4c\xdb\xdb\xf8\xd6\xe8\x52\x5a\x70\xe3\xba\xe1\x77\x50\x28\x67\x7d\x07\x8b\xd9\xba\xe2\x2b\x20\xbe\x22\x23\x71\xc1\x57\x6d\xe3\xe2\x5f\x41\xdc\x38\xbe\x1b\xaf\x80\x3e\x93\xe2\xb5\x5c\x9c\x21\xbd\xfa\xb6\xdf\x80\x5c\x7c\x90\x77\xd3\xb9\xd2\x82\x5e\x7e\xb3\x35\xd9\xac\x9c\x21\xbd\x78\xd5\x3e\xee\xbf\x24\xb6\x95\xd2\xf5\x78\xf7\xb3\x24\x4c\x7b\xb4\xbe\x7f\x6b\x03\xcc\x77\x2c\xf6\x46\x56\xad\xae\x38\x9e\xdc\x59\xb7\x3e\x17\x9b\xdf\x76\xa6\x0a\x32\x29\xd4\x4f\x4b\x61\x76\x42\x9f\xaa\xe9\xf9\xae\xa4\xe7\xff\x81\xa2\x5b\x31\x65\xdb\x35\x1f\x88\x38\x38\x38\xd8\x95\x71\xcf\xd4\xa5\xf4\xbc\x28\xf9\x32\x6a\x17\xf4\xec\x0b\xca\x49\xe7\xda\x7d\x28\xdf\x5f\xbe\xb9\xe4\xeb\xeb\x6b\x9e\x9f\x5d\x9f\xcf\x46\xe1\xd4\x1f\xfc\x13\x00\x00\xff\xff\xec\xdd\x6b\x65\xe7\x07\x00\x00" func runtimeSyntaxCoffeescriptYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCoffeescriptYaml, "runtime/syntax/coffeescript.yaml", ) } func runtimeSyntaxCoffeescriptYaml() (*asset, error) { bytes, err := runtimeSyntaxCoffeescriptYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/coffeescript.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxColortestHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xce\xcf\xc9\x2f\x2a\x49\x2d\x2e\xe1\x72\x06\xb1\x42\x52\x8b\x4b\x54\xb8\xb8\x00\x01\x00\x00\xff\xff\x45\x0d\x6f\xbc\x16\x00\x00\x00" func runtimeSyntaxColortestHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxColortestHdr, "runtime/syntax/colortest.hdr", ) } func runtimeSyntaxColortestHdr() (*asset, error) { bytes, err := runtimeSyntaxColortestHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/colortest.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxColortestYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8f\x31\x8a\xc3\x30\x10\x45\x7b\x9d\x62\x10\xdb\xee\x05\xd4\x2d\x5b\x2d\x2c\x21\x45\x4a\x35\x92\xfc\xe3\x98\xc8\x76\x90\xc7\x04\xdf\x3e\xc8\x32\xf6\x18\x75\xf3\xff\x7b\x48\x33\xf7\x2e\x82\x97\x17\x0c\x85\x31\x8e\x89\x31\xb1\x52\x0d\x18\x81\x8d\x22\x22\xca\xc2\xe0\x7a\x18\xd2\xbf\xd9\xb8\x61\xe2\x2f\xad\x54\x9a\x23\xa6\xa2\x7c\x93\x8f\x2e\x3c\x0d\x69\x6b\xfd\xf5\xff\xe7\xef\x62\xad\xd7\x1b\x4a\x68\x0a\x48\x68\x44\xdd\x26\x60\x28\x60\x1d\x05\x5a\x10\xe3\xf8\x2e\xac\xcc\x02\xfa\x38\xa3\xa0\x3c\x09\xd0\xbb\x16\x03\xbb\xc2\xb6\x20\x70\x58\xdc\xf6\x5d\x9e\xe4\x83\xa9\x6b\x1f\xbc\x6f\xb9\xc7\x4a\x11\x1b\x8b\xa2\xd2\xe4\xf6\xb2\xa9\x44\x71\xc9\x9e\x2b\xe9\x74\xd5\xa9\xaa\xd4\xe3\xc2\x23\xaf\xd2\x27\x00\x00\xff\xff\xcc\x8b\xc4\xc2\xe3\x01\x00\x00" func runtimeSyntaxColortestYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxColortestYaml, "runtime/syntax/colortest.yaml", ) } func runtimeSyntaxColortestYaml() (*asset, error) { bytes, err := runtimeSyntaxColortestYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/colortest.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxConkyHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xce\xcf\xcb\xae\xe4\xd2\x88\xd1\xd3\x02\xb3\x8a\x92\xf5\xb4\x54\x6a\xc0\x4c\xbd\xe4\xfc\xbc\x34\x4d\x2e\x2e\x40\x00\x00\x00\xff\xff\x5a\x1e\x47\x5c\x22\x00\x00\x00" func runtimeSyntaxConkyHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxConkyHdr, "runtime/syntax/conky.hdr", ) } func runtimeSyntaxConkyHdr() (*asset, error) { bytes, err := runtimeSyntaxConkyHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/conky.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxConkyYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x59\x49\xaf\x1c\xb7\x11\xbe\xeb\x57\x8c\x9f\x85\xc0\x72\x20\xc1\x96\x37\x59\x59\x9c\x20\xc8\x35\x27\x23\x08\xe2\x76\x98\x6a\xb2\xba\x9b\x18\x6e\xe2\x32\x8b\x4d\xff\xf7\xa0\x8a\x64\xcf\x8c\xe4\xdc\x82\x1c\x5e\xd7\x57\x1f\xd7\x61\x17\x6b\xe9\xb7\x68\x83\xf9\x1a\xf0\xed\x41\x7a\x77\xbc\x3e\x7b\xa6\x30\xa3\xcc\x6f\x9f\x1d\x0e\x87\x03\x35\x3a\xb0\xf8\xf6\xf0\xf4\xc9\x34\xbd\xfa\x94\xbb\x44\xf9\xea\xd3\xe7\x95\xe1\x2b\xe9\xdd\xf2\xe2\xe9\xd9\xb3\x58\x0c\xa6\x36\xe6\xe5\xa1\x4d\xf7\x34\x4d\xf3\x27\x60\xf4\xea\x2c\xba\x5c\x21\x04\x74\x4a\xd0\x8c\x75\x06\x79\x5c\xa3\x2f\x4e\xd5\xd9\x47\x85\x51\x68\xe7\x30\x0a\x0b\x71\xd5\x6e\x70\xbe\xe4\x0f\xb8\xb3\x56\x79\xab\xd2\x1b\x1f\x3f\x6b\xe2\xf3\x26\x5e\x37\xf1\x45\x13\x5f\x36\xf1\x55\x13\x5f\x37\xf1\x4d\x13\x6f\x9a\xf8\xb6\x89\xbf\x55\x19\x8a\x80\xd3\x2a\x12\xd8\x60\x30\x55\x85\x0b\x14\x93\xc5\x0c\x51\x6c\xa8\xd7\x2d\x3f\x50\x6d\x07\x83\xe1\x39\x76\x6d\x85\xb2\xe2\xfb\x83\x1a\xf9\x38\x6c\x8d\x10\xb6\x0f\x3a\x32\xf9\xd8\xd1\x97\x6c\xb4\xc3\xf7\xd6\x49\x1b\xa8\x9d\xd3\xe9\xa8\xfd\xe3\x2f\xd0\x29\x18\xb8\x56\xe5\xcb\x6c\x50\xcc\x65\x59\x30\x56\x15\xe1\x2c\xda\x31\xa6\xa6\xb4\x05\x1f\xa8\xbe\x5e\x53\x78\x99\x54\xf1\x92\x23\x08\x87\x67\x6e\x59\xbc\xcb\x75\xf1\xd1\x42\x16\x5b\xb1\xe0\x44\x44\x50\x30\x1b\xac\x2b\x04\x71\xe1\xe7\xb5\x6e\x39\x07\x11\x71\x89\x98\xb6\xaa\x17\x51\x82\x48\x39\x6a\x99\x1d\xa6\x54\xb5\x85\x50\xb5\x35\x7a\x16\x12\xe4\x86\x62\x31\x25\x6d\x42\xbb\x8c\xf1\x04\xe6\xa1\x29\xe9\x9f\xb0\x9a\x02\x82\xf7\xb4\x79\x7f\x14\xc1\xa7\xfc\x3e\x15\x5b\x27\xe3\x41\x31\x48\x5b\xc9\xca\x9f\x1d\x37\x37\x26\x43\xcc\x25\x34\xc2\x82\x36\x22\x05\xef\x4d\xb5\x70\x11\xc1\xc7\x2c\xac\x77\x3a\xfb\x28\xa4\x77\x0e\x65\xd6\xde\x25\x6e\xcc\x78\xc9\xfd\xbd\x90\x5a\x12\x46\xe6\x48\xd3\xb6\xd8\xd1\xa6\x1d\x6b\xfd\xb5\x0e\xb5\x37\x06\x25\x36\xda\x36\x81\x00\x29\x9d\x7d\x54\x4d\xf1\x31\x57\x5b\x92\x96\x82\xde\x1a\x5f\x86\x7e\x0c\xf6\x9a\xde\x99\x3e\x8c\x61\xeb\xcb\x90\x76\x31\xd8\x7d\x3a\x56\xd5\x5c\x1d\xe6\x07\x8b\x70\xbe\x5b\x41\xaa\xee\xa4\x95\x06\x31\x6c\xc4\x97\x2c\xb2\xa7\x9f\x9c\xbc\xc1\xa1\xd2\xdb\x1b\xd8\xc9\x12\x13\xa6\xa1\xa6\xac\x30\xc6\xa1\x5d\xaa\x3f\x61\x8c\x5a\xa1\x28\x79\x79\x23\x8c\x97\x40\xd3\x9c\x30\x9e\xa3\xce\xd8\xee\x3b\xbd\x86\xb3\x76\xca\x9f\xef\xa0\x90\x06\x52\x7a\x20\xbc\xf1\x25\xde\x33\x9b\x76\xf9\xa1\x4b\xd6\xf9\x61\x3e\x91\x23\xb8\x14\x20\x92\x8b\xb9\xa7\xaf\x01\x6b\x00\x25\x02\x46\x89\x34\x49\xf0\xe1\x8b\x9a\xd0\x25\x1f\x85\xc2\x93\x96\x58\xd3\x46\x6f\xbd\x38\x9d\x13\xe1\x71\x21\x22\xb8\x15\xef\x89\xc4\xbf\x29\x65\x1d\x82\x41\xb5\x5f\x98\x8c\x36\x60\x84\x5c\x22\xf2\x24\x4c\x18\xc8\xb8\x83\xcf\x76\xf4\xf9\x8e\x5e\xef\xe8\x8b\x1d\x7d\xb9\xa3\xaf\x76\xf4\xf5\x8e\xbe\xd9\xd1\x9b\x1d\x7d\x5b\xd9\x00\xd9\x32\xdb\x9b\x6d\xf7\x24\x6b\x8b\x49\x68\x27\x12\x4a\xef\x54\xaa\xd9\x07\x41\x1e\x2e\x61\x80\xc8\x7b\xf3\x41\x90\x4b\xef\x76\x99\x7d\x06\x23\x62\x71\x82\x87\xd6\x12\x14\x64\xbc\x99\xe0\x7b\xba\xf0\x4e\xcc\x90\x33\xc6\x6b\x2d\x81\x0e\x17\x12\xd6\x92\x50\xa4\x00\x12\x23\xc3\xcb\x92\xeb\x65\xc9\x60\xc2\x06\x04\xc8\x65\xbc\x98\xa6\xf9\xe9\x19\x07\x88\xc3\xe1\xe3\xc3\x5f\xbc\x5b\xf4\x5a\x22\xd0\x2d\x3b\xe8\x8c\x96\xc2\x4f\xca\xe0\x72\xea\x51\x24\x65\xc8\x48\xa1\x63\x84\x92\xd9\x9f\xb0\xce\x68\xfc\xb9\xce\x3e\x67\x6f\x85\xc1\x25\x0f\x1c\xf9\xd2\x75\xc5\x6a\xa5\x0c\x56\x85\xe9\x98\x7d\xa8\xca\xcb\x63\x75\xbe\x3a\xef\xb0\x3a\xf2\x5d\x66\xb7\xdb\x9a\x8e\x3a\x88\x00\x2b\xc6\x06\x33\xa4\xe3\x0c\x91\xde\xb7\x3c\x5e\xf9\xbc\x78\x1d\x02\x6d\x11\x42\x7d\x85\x26\x5a\x87\x8e\x63\xbf\xfd\xac\xf4\x6e\xc5\x29\x94\x9e\xce\x5f\xd5\x2b\xa6\xf7\x0e\xe3\xef\x10\x35\x39\xd0\xf1\xcb\x43\xc4\x10\xbd\x1c\xbf\x5b\x06\x0d\x12\x14\x84\x8c\xb1\x92\xb6\x80\x63\x49\xc6\x50\x41\xa9\xc8\x8f\x54\x39\xd8\xca\x26\x62\x85\x20\x4b\x48\x6a\x48\x21\xd9\x47\xef\xda\x06\x71\xbd\xa9\x06\x52\xbe\x50\x94\xd8\x09\xed\xf0\x74\xd3\xc8\xab\xde\x2b\x74\x40\xf7\x3a\x07\xb9\x47\x86\xae\xce\xce\x58\xaf\xd0\xec\x1a\xd9\xdf\xae\xd0\x7b\x2e\x69\x57\xdb\x8f\x1a\x8a\xb6\xc8\x67\x3b\x88\x12\x12\x4d\x55\x21\x58\xb1\x1f\x49\xb0\xc3\x26\x85\xd1\x0b\x3e\x10\x34\x43\x85\xa2\x40\x6a\x5f\x92\xe0\x7d\xdf\x34\x9d\xf9\x4e\xdc\x18\xb9\x81\x73\x68\xd2\x1d\x35\x72\xa0\x7b\x2a\xe2\xbb\x82\x4e\x5e\xef\x38\x83\x6e\xcd\xdb\x07\xc4\x7e\x11\x6f\x0d\x16\xb4\x13\x27\x6f\xca\xc3\x9c\xe4\x8d\x8d\x4e\xf9\xc3\x89\xf6\x96\xe0\x93\xa6\xfb\x72\xdf\xf6\xdf\xa9\x5f\x59\x79\x1c\xf5\x4e\x34\x77\x3a\x2e\xf4\x38\x33\x3a\xa4\x81\xbb\xff\xdc\x75\xf6\x99\xf5\xe1\x74\x67\xa3\xdd\xb1\xce\x36\x5c\x04\x98\xb9\xd8\x0e\x63\xd6\x29\x37\x3c\xce\x99\x95\xbe\x26\xc3\x08\xb2\x8f\x2c\x51\xd7\x11\xa2\x38\xee\xab\x2a\xad\xe2\xdc\x27\x7b\x11\xb4\x6a\xe9\xda\xff\x2c\xf5\xb3\x33\x25\x33\x9c\xc4\x8a\xb9\x68\xa3\x04\x44\xb9\x3d\x10\xe4\xf8\x3a\x71\xc2\x98\xe8\x94\x65\x28\xf4\x47\x07\x24\x43\x69\x46\x4f\x80\x6d\x5d\x96\x68\x6e\x2e\xa7\xc9\x66\xea\xbb\x52\xec\x8c\x2d\x65\x13\x21\x7a\xca\xb3\x7b\xfe\x36\xd2\x38\xca\xa5\x06\xe6\x00\xda\x95\xb6\xc2\x1d\xbe\xef\xd9\x13\xc7\xd1\x3d\x47\x3d\x17\x36\x0a\xca\x7f\x52\x40\x54\x37\xb4\xdc\x60\x9f\x33\xc2\x92\xc9\x26\x4d\xaa\x68\x12\x56\x74\x4a\x2f\x15\x5d\x8e\x3e\x5c\x05\x9c\x40\x9b\x5d\xa3\x1f\x3e\x30\x59\xc6\x4d\xf1\xde\x70\x00\x42\x0a\x1a\x78\xc2\x8a\x17\x94\xfc\xe0\x31\x17\x94\xed\xb4\x18\xf1\xc2\x84\x74\x7b\x8e\x2e\xfa\xd6\x47\xdf\x3a\x85\xf6\xd4\x75\x31\xb0\xae\xa8\xfa\x66\xef\x13\x51\xb6\xc3\xc5\xc7\x33\x44\x75\xeb\x10\xf1\x1d\x3f\xc4\x5a\x97\x76\xf5\x9b\xa0\xfb\x8b\x84\xef\x65\xfb\x3d\x4b\x6a\x71\x74\x49\x2d\x85\x58\x12\x25\x5a\x6a\xc8\xd6\x69\xf5\xd9\xd7\xf5\x2c\xf4\x02\x12\x19\x84\xba\x29\xc5\x9e\x6b\xa3\xd7\xb2\xc5\xba\x9d\xad\x77\x55\xbf\x96\x55\xbf\x39\x0a\x90\xe3\xee\x91\x36\x6b\xdf\x41\xc9\xd9\xbb\x74\xdf\x46\xb1\x9a\x27\x22\x85\x5c\x9f\x58\x28\xc5\x0e\xf6\x91\xb8\x1b\xc1\xf1\xe6\xa1\xd7\x8d\xb9\xeb\x96\x30\x6a\xca\xac\xdf\x1c\x77\x6b\xd6\xb3\x15\x33\x77\x6e\x49\xf9\x6c\x69\x10\x4b\xda\x42\x63\xba\xa3\xd2\x92\x06\x4b\xef\x4e\x2d\x8f\xde\xb1\x0f\x94\xde\xa3\x0d\xf9\xca\xe0\xa2\x53\xd6\x6e\x25\xbc\x9e\xe9\x69\x21\x4b\x2e\x01\xac\xbe\x50\x3d\x57\x32\xb2\xe6\x8b\xa3\x70\x48\x90\xb2\x60\x03\xd7\x3e\x2c\x16\xe7\x3a\x4c\x16\x82\x26\x5f\x2e\x34\x25\x07\xc6\xb4\x01\x25\xb4\x27\xdd\x50\x17\x09\x5f\xac\x4d\xaf\x47\xe2\x4e\x9d\x2c\xac\xc8\x65\x86\xb0\x98\x12\xac\xd8\x8a\x0e\x51\x5c\x42\x74\x55\xfb\x44\x3e\xa6\x18\x8c\x55\x47\x59\x8f\x18\x1d\x9a\x6a\x20\x70\x70\xa7\x10\x43\xbe\x27\x55\x0a\x65\x70\x5a\xeb\x2d\xa4\x99\x02\x5c\x4e\x90\x3d\x91\x6c\x36\xcb\x68\xb4\x8b\x00\x31\x61\xb5\x20\x37\xf2\x32\xcd\x1c\xed\xec\x2f\x49\x82\xab\x16\x2d\xfd\x9d\x75\xde\x86\xc7\xb3\x68\x69\xba\x47\xb6\x33\x08\xe9\xca\x86\x6a\xd1\x0e\xd9\xd6\x24\xc0\x4b\x5a\xb4\x16\x2e\x24\xd8\x3e\xf9\xa0\xdb\x93\xe7\x20\x60\xba\xd8\x89\x21\x98\xf0\xb2\xbb\x6e\x46\xcd\x73\x13\x1c\x8e\x9b\xb0\x2c\x91\xaf\x19\x61\xce\xea\x09\xec\xad\xc9\xbb\xb5\x81\x3c\xa8\x3d\x78\x37\x25\xf7\x21\x9c\x71\xf6\x99\xb8\xde\x1a\x72\xb8\x47\x32\x87\xbe\x1b\x42\x7d\x37\x41\xf1\x89\xb3\x1c\xbb\x0a\x4a\xa0\x81\x40\x17\x94\x70\xdb\x55\x50\x23\x84\x12\x64\xff\xcb\x06\xd6\x03\x19\xe1\x08\x4e\xf9\x36\x7d\xc4\x80\xd0\xd8\x64\xc9\xae\x19\xb5\x6b\x43\xb0\xef\x9b\x10\x07\x2b\x42\x27\xdf\x4b\xb3\x4a\xb3\x27\x8c\x27\x8c\xd5\xe1\xb9\xfb\x1d\xe7\x55\x4b\x18\x06\xe8\x41\xd3\xf9\x6e\xb2\xbd\x06\xab\x7e\x4e\x8a\xe2\x80\x2a\x32\x37\xa5\xd5\x27\x89\xaf\xe1\x03\xc1\x2e\xe1\x81\x39\x79\xd3\x07\x9d\xd0\x29\x1f\xab\x5f\x96\x84\xb9\xf6\x0a\xbe\x45\xcb\x30\xef\xd9\x7a\xd0\x94\xf4\x45\xef\x73\x83\x2d\xb8\x36\x7c\x56\x2c\xd1\x9d\x74\xf4\xee\x1e\x0b\x4a\x3c\x1a\x71\x69\x9d\x1d\x55\x4e\x04\x7c\x40\x47\x27\x9e\x58\xeb\x25\x18\xc3\xa8\x7d\xd4\xb9\x2d\xd9\xcc\x61\x47\xfd\x28\x9a\xce\x85\x64\x87\xda\x0d\xe4\x4b\x6b\xcf\x1b\x85\xb8\x74\x87\x6f\x9b\x21\xf3\x11\xed\xce\xf2\x5d\xdd\x39\xaa\x8a\x1f\x18\x06\x45\xf7\x1f\x38\x40\x1a\x60\xd9\xd1\x3a\xfa\x0c\x90\xd6\xbd\xcf\x40\x1c\x73\x09\x9c\x6c\x40\x38\x76\xc8\x01\xa3\x41\x23\x07\xb9\x9d\x6d\x47\x31\xa5\x8e\x14\x64\x18\x63\xf2\xe8\x38\xce\xf5\x64\x8d\x9e\xc7\xe4\xfd\xc8\x5a\x48\xa7\x82\x8f\xe2\x1c\x97\xb0\xc3\x81\x35\x4c\x96\x4f\xa5\x02\x26\xaa\xd0\xf9\x8c\xb2\x0c\x0d\x14\x45\x20\x18\xbd\x07\x44\xda\x49\x77\xae\xe2\x6e\x54\x67\xc6\x79\x27\x19\xbd\x31\x95\x56\xe9\xe3\xf8\x3b\x50\x33\x28\x76\xc8\xf5\xe6\x96\xb9\x50\xda\x35\xf6\x3e\x77\xaa\x3f\xe3\x7d\x33\x1b\x71\xf2\xee\x4a\xf6\xdd\xf2\x92\xbd\xa8\xde\xa8\xe0\xa2\x32\x2d\x9d\x21\xf0\x83\xa7\x3e\x43\x60\x9f\x47\x80\x5c\x1c\xc9\xb6\xca\x35\xf1\x1d\xcb\x30\xd7\x4c\x29\x4a\x96\x41\x04\x0a\x1b\x0c\x7c\xcc\x14\x7f\xff\x4f\x85\x38\x25\x32\xb9\x27\x29\xe3\x18\xd9\xf8\xb2\x17\xf3\x35\x23\x97\xe1\x5c\x36\x6a\xdf\xaa\x47\xb4\x2c\x7b\xa7\x0c\x86\xb2\xb2\x86\x4a\xa8\x39\x42\xda\xf6\xd7\x96\x7f\xe2\x6e\xab\xee\xde\xac\xec\xc0\x3d\x66\x44\xc5\xbd\x9f\x02\x15\xf7\x68\x01\xcd\x78\x86\xc2\xce\x88\x64\x7b\x17\x5d\x2e\x03\xb4\xd8\x52\x02\xaf\xde\x44\xbf\xbe\xfc\x05\x8c\x7d\x5f\x87\xcd\x71\xf7\x0f\x63\xd1\x76\xba\x7f\x51\x18\xb0\x16\x7e\x9e\xba\xa3\x22\x07\x06\x2b\x0a\x7b\xda\xe1\xa9\x9e\x11\xf2\x86\xb1\x9e\x75\x44\x83\x29\x09\x08\x37\x3c\xfc\xfe\x4e\x60\x4a\x5a\xdd\x54\xaa\x43\xd8\x22\x1f\x99\x77\x05\xcc\xaf\x50\x82\xec\xe9\x57\x68\x36\xaf\x9d\x67\x67\x72\xf6\x51\xa5\xda\x72\x8c\x16\x99\x3a\x6e\xb1\xa9\x29\xb4\x70\x47\x7d\x9f\x23\x29\xb1\xfc\x01\xbc\x69\xea\xd6\xa0\xfa\xe7\x8f\xae\x8e\x48\xd6\xb4\x15\x5d\x1c\x1d\xf5\x20\x47\x0c\xeb\x5a\xaf\x0b\xbb\xca\x6e\xa8\x43\x8e\x64\x1d\xb7\x58\xd6\x14\x7e\x23\xfc\x95\x51\xed\x0c\xc5\xb7\x8e\x29\xc2\xb9\xf1\x2b\x4a\x34\x77\xdf\x29\x5e\x1e\xb4\x42\x97\xf5\xa2\x31\xbe\x3a\x41\xe4\x8f\x13\xcf\xa7\xe9\xe7\xef\x7e\xf8\xec\xe5\xb7\x7f\x7e\xf9\x4f\xf1\xd1\x9f\x3e\x7e\xfe\xe9\x77\x2f\x7f\xfc\xed\x34\xfd\xf2\xdd\xd3\xf8\x88\x73\xb5\xb3\x37\xaf\x3c\x7f\x28\xf3\xb1\xfd\x1f\xe1\xe7\x3a\x4d\xbf\xd4\x69\xfa\xa4\x4e\xd3\x8b\x3a\x4d\xbf\xab\xd3\xf4\x63\x9d\xa6\x1f\xea\xbf\xeb\x34\x4d\x53\x9d\xa6\xe7\xf5\xf7\xf5\x8f\xf5\xa3\xfa\x87\xfa\x9b\x3a\x4d\xf5\xc5\x98\x6f\x7c\x24\x7a\x65\x41\x46\xff\xf6\xf0\xf4\xaf\xef\xff\xfa\x8f\xef\x9f\x3f\x3d\xfb\x4f\x00\x00\x00\xff\xff\x83\x4d\x49\xe6\xc7\x18\x00\x00" func runtimeSyntaxConkyYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxConkyYaml, "runtime/syntax/conky.yaml", ) } func runtimeSyntaxConkyYaml() (*asset, error) { bytes, err := runtimeSyntaxConkyYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/conky.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCppHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xd6\xd6\xe6\xd2\x88\xd1\x4b\xd6\x48\xae\x29\x28\xa8\xa9\xa8\xd0\x54\xa9\x89\xd1\xcb\xd0\xc8\x40\xe2\x65\x66\xda\x83\x28\x8d\x94\xd4\x34\x4d\x15\x4d\x2e\x2e\x40\x00\x00\x00\xff\xff\x34\xff\x51\x82\x33\x00\x00\x00" func runtimeSyntaxCppHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCppHdr, "runtime/syntax/cpp.hdr", ) } func runtimeSyntaxCppHdr() (*asset, error) { bytes, err := runtimeSyntaxCppHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/cpp.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCppYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x56\x6d\x6f\xdb\x38\x12\xfe\x9e\x5f\xa1\x73\x7b\x17\xd1\xae\x9d\xa4\x2d\xfa\xe2\x7b\x31\x7a\x69\x73\x57\x20\xbb\xed\x87\x2d\x10\x54\x72\x05\x8a\x1c\xd9\x83\x50\xa4\x4a\x8e\x12\xa7\x9d\xec\x6f\x5f\x50\x96\x13\x37\x69\xb3\xdd\xed\x97\x35\x60\x88\x1c\xce\x70\x9e\x67\xde\xa4\x0a\x0d\xd0\x45\x03\xd3\x44\x8d\x46\x3b\x3b\x1a\x08\x14\x4d\x77\x92\x24\x49\xe2\x91\x95\x35\x4c\x93\x41\x9a\xe7\x13\x95\x2a\x6e\x1a\x5e\xad\xc4\x7d\xce\xf3\xc9\x32\x5d\x6e\x6f\x11\x67\xdd\x33\xd5\x50\x89\xfb\x62\xb0\xb3\xe3\x5b\x03\x61\x7d\xd3\x38\x41\x0d\x96\xb0\x42\xf0\xd3\x64\x90\xe7\x65\xf6\x62\xfc\xbe\x98\x67\xfb\xe3\xe7\xdd\x62\x98\xe7\xe5\xa0\x57\x5d\xa3\x89\x4a\x69\x65\x9c\x24\xd6\xae\x2d\x0d\x70\xe9\x9c\x61\xb5\x94\x9e\xd1\x12\x87\xa5\xf3\xc4\xc6\xd9\x05\x83\x6d\x6b\x3e\x73\xa8\x39\x90\x6f\x15\x71\x6b\xd1\x59\x8e\xf7\x68\xa8\x38\x6d\xad\x98\x05\x5c\x58\xd0\x8c\xd6\xa0\x05\xf1\x75\x6f\x69\x1a\x66\x01\x3f\x81\xe0\x34\x6d\x8b\x99\x98\xa1\xa5\xf4\x19\x1f\x3c\xe1\x47\x0f\xf9\xc9\x63\x6e\xc8\x0b\xd1\x21\xd8\x48\x85\x28\x88\xcf\xa3\xa4\xa0\x6f\x5c\x5a\xa1\x95\x86\xdd\x19\x78\x8f\xfa\x96\xe7\xc9\x29\x5c\x9c\x3b\xaf\x7b\x65\xd9\x92\xe3\x33\x67\x24\xa1\x01\x56\xce\x06\x4a\x61\xd5\x78\x86\x33\x69\x18\x2d\x92\x98\x71\xdd\x92\x8c\xf1\xf0\xb0\xc0\x40\xe0\x99\x96\x1e\xa4\x2e\x8c\x53\xd2\x70\x20\x49\xa8\x18\x56\x04\xde\xb2\x06\x65\xa2\x1f\x86\x55\x63\x50\x21\xf1\x19\x7a\x6a\xa5\xd9\x06\x12\x4d\xa0\x06\x4b\x3d\x0a\x65\x64\x08\x1c\x33\x1f\x1a\xa9\x80\x09\xea\xc6\x48\x82\x2e\xa2\x51\xcc\xb4\xc4\xc0\x95\x47\xb0\x9a\xdb\x80\x76\xc1\x4d\x5b\x1a\x54\xdc\x78\x17\xeb\x07\x34\x37\x1e\xcf\xa2\x8d\x75\xb0\x52\xd0\xd0\x9d\x0e\x9d\x8d\x2a\xec\xe1\x63\x8b\x1e\xc2\x5d\xba\x58\x37\x31\xf1\xb0\xea\x1e\xb5\xd3\xad\x81\xbb\xf4\x2b\xe7\x19\x2b\x3e\x5f\xc6\x88\x6a\xc7\x60\x02\xb0\x92\x01\x58\x43\x25\x5b\x43\x1c\xce\x91\xd4\xf2\xae\x3b\xc8\x5f\xc4\x20\xbb\x73\x56\x92\xd4\x92\x5d\x03\x5e\x92\xf3\x6c\xe1\x9c\x35\x18\x20\xe8\xe3\x5e\xc8\x10\xc0\xdf\x49\x76\xe1\xc8\xc5\xd4\x12\xda\x16\xb8\xf4\x20\x4f\xd9\x03\xb5\xde\x6e\x5b\x35\x1e\x1a\xef\xd4\x34\x19\x7c\xc8\xb2\x69\x97\x87\xe9\x7c\x3e\xbc\xb7\xbd\x89\xad\x86\x16\xb8\xf1\x72\x51\x4b\x46\xab\x4c\xab\x21\xd6\x3b\x63\x65\x67\x22\x16\x3f\x58\x8d\x15\x83\x49\xb1\xe2\x00\xa2\x0b\x85\xf4\x36\xa6\x0c\xbc\x77\x5e\x70\xf1\xb6\x33\x1f\xec\x74\x9e\x93\xe4\x5e\x72\xe8\xac\x46\x42\x67\xa5\x31\x17\xe3\xd0\x36\x31\xd4\xa0\xf7\x62\x4d\xd9\x80\xce\x26\x7d\xd5\x86\x6f\x50\x94\xa1\xe6\xca\x79\xf2\xb2\xe7\x74\x75\xf5\xff\x0e\x0f\x93\xb2\x45\x43\x68\xbf\x66\x9c\x16\x85\x24\xf2\x58\xb6\x04\x45\xb1\xcd\x35\xcf\xd3\x3c\x4f\xb3\x0f\x22\x2e\x45\x9e\x0b\x2e\x8a\x54\x9a\x75\x57\x47\x7f\xfd\xad\xbc\x44\xad\xc1\xf6\x8d\xce\x8d\x54\xa7\xa0\xd9\x43\x20\x8f\x8a\x38\x80\xa2\xcd\x6c\x70\x15\x9f\x83\x3c\x15\x45\x21\xb6\x10\xbe\xe9\x73\x9b\x1c\x3a\xe3\xfc\x06\xe3\x45\x5d\x3a\x33\xd9\xe4\x7d\x9a\x0c\xb2\xf1\x68\xb8\xf7\xf7\x7f\xff\xeb\x3f\x93\xe9\x3f\x1f\xfc\xfa\x0f\xfe\xf0\xb7\xd9\x9c\x23\xf7\x38\x40\x5c\xc5\x1d\x34\x57\x75\x8e\x50\x73\x2a\xad\x66\xe7\x79\x15\x8b\xc6\x91\x48\x0b\xf8\x28\x66\x5c\x62\xac\x22\xe5\xea\xc6\xc4\x75\x54\x4a\xbb\xae\x67\x7d\x61\x65\x8d\x8a\x3d\xa0\x25\xf0\x8d\x07\xea\x4b\x4c\x14\x4a\x86\xad\x0a\x8b\xa0\xdf\x4a\x0f\x96\x96\x40\xa8\xa4\xf9\x1a\xf2\xd2\xc7\x40\x50\x88\xc8\x53\xf1\xf9\x32\x62\xcd\x38\xcf\xe7\xd7\x77\xbc\xb6\x04\x0b\xf0\xc9\x31\x12\x78\x69\x36\xe9\xe9\xe0\x48\x4b\x13\xdb\xd6\x65\x37\xbd\xd3\x48\x33\x3b\x18\x3f\xef\xc6\xf7\xee\x7c\xc8\xfb\xd9\xfe\xf8\xe9\x7a\x71\xb2\xea\xa4\x72\x5c\xbd\x18\x1f\xed\xce\x47\xbc\x9f\xfd\xb7\x9c\x67\xfb\x07\xf3\x91\x48\xb3\x77\xed\x7c\x96\x1d\x9b\x79\xfc\xcf\xf8\x6a\xd5\xc9\xc5\x2c\xcf\x4b\x71\x8d\xe7\x25\x28\xac\xa5\x49\x8e\xe2\x3b\x00\xed\x62\xdc\x38\xb4\xf4\x9d\xf0\xd2\x1e\x5a\x36\xe9\x41\x8e\xb8\x7f\x5e\x49\x86\x22\xcd\x5e\xc1\x3c\x1b\x8d\xe7\xb3\xfe\x4c\xcc\xae\xb4\x6e\x9e\x64\x47\x55\x44\xfa\x25\xc4\xff\xc3\x4a\xea\x1f\x80\xd9\x85\x2b\x5d\xc7\xeb\xd3\x8b\xf1\xfb\x6b\xc0\x9b\xfd\x1a\xf6\xd5\xee\xc6\xe9\x50\x64\x6f\x9b\x2f\x70\xde\x82\xb9\xe5\x3a\xbe\x3f\x37\xf1\x21\xdf\x02\x57\x32\xce\xc2\x9f\xdf\x1d\x1f\xb3\x6d\x8d\x89\xaf\xb7\xb5\xe1\x4d\xcb\xd8\x3c\x76\x31\xed\x79\x27\xb1\x65\x7d\xd7\xeb\x83\xc1\x95\x0c\xac\xbe\x21\x09\xa7\xd8\x74\x03\x21\xcf\x27\xd7\xd2\xad\xaf\x82\xcd\x6f\xdb\x53\x03\x0a\xa5\x39\x5c\x4a\xdf\x9b\xa6\x59\x3e\xd8\x95\x65\x65\x3d\x9d\xc5\xfd\x3c\x46\xe4\x51\x47\xf8\xe9\xfc\xf3\xc1\x83\x87\x97\xbc\x5a\x7f\x46\x1c\xc9\x71\xd5\x4b\xda\x6d\xc9\xe3\x4b\x7e\xb7\xbd\x7f\x76\xf9\x07\x28\xee\xde\x64\xb8\xfb\xa7\x08\x76\xb3\x76\x9a\x0c\x26\x93\xd1\xe0\xaf\xc3\xbd\xee\xc6\xee\x2d\xce\x7b\x7b\x37\x49\xdf\xff\x1d\x7a\xe4\xb4\x8b\xa5\xf5\xcb\x9b\x97\x6f\xf8\xe4\xe4\x84\x8f\x5e\x9f\xfc\xf4\x4a\x4c\x67\xdf\xe1\x2c\xcf\x87\xb7\xaa\x28\x1f\xee\xfd\x80\xc7\xdf\x02\x00\x00\xff\xff\x78\x29\x06\x1a\xd3\x0a\x00\x00" func runtimeSyntaxCppYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCppYaml, "runtime/syntax/cpp.yaml", ) } func runtimeSyntaxCppYaml() (*asset, error) { bytes, err := runtimeSyntaxCppYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/cpp.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCrontabHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2e\xca\xcf\x2b\x49\x4c\xe2\x82\xd2\x2a\x5c\x71\xca\x7a\x5a\xf6\xfa\xa9\x25\xc9\xfa\x30\x29\x40\x00\x00\x00\xff\xff\x10\x7a\x06\x47\x23\x00\x00\x00" func runtimeSyntaxCrontabHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCrontabHdr, "runtime/syntax/crontab.hdr", ) } func runtimeSyntaxCrontabHdr() (*asset, error) { bytes, err := runtimeSyntaxCrontabHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/crontab.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCrontabYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x54\x5d\x4f\xdc\x3a\x10\x7d\xcf\xaf\x98\x6b\x56\x57\x09\x10\x58\x40\x57\x88\xbd\xa5\xb4\xea\x87\xd4\x07\xc4\x03\xa8\x5a\x95\x01\xd5\xbb\x9e\x25\x01\xc7\x5e\xd9\x0e\xab\xa8\xd3\xff\x5e\x39\x59\x02\x94\x05\xb5\x7d\xec\xbc\xcd\xcc\x99\x13\x1f\x7b\x4e\x66\xa5\xa6\xd0\xcc\x69\x04\x53\x67\x4d\x90\x93\x24\x51\x14\x68\x1a\x46\x09\x00\x40\x6c\x1b\x59\xd1\x08\xc4\xb2\x3f\x10\x6d\xa3\x20\xa9\xc8\x8d\x40\x5c\xae\x6d\xad\x1f\x6d\x53\x98\x6e\x2f\x01\x22\x49\x5c\xad\xc9\x77\x04\x00\x6b\xf0\x28\xce\x0a\x82\x50\x56\x04\xd2\x28\x50\x32\x10\xcc\x4a\xd2\xca\x83\x74\xf4\xcc\x48\x0b\xb8\x4f\xa5\xd6\x76\x41\x0a\x6e\xa5\xae\xc9\xaf\x1e\xc9\x63\xfc\x94\xf6\xb1\x7a\xa4\x2a\x4d\x1d\xa8\x4f\x87\xf9\x7f\x07\xab\x81\x85\xad\xdd\x83\x74\x98\xef\xee\xad\x06\x2a\xd9\x80\x9d\x41\x65\x4d\x28\x5a\xe0\xde\xce\x33\x9f\x5e\x22\x7a\xc6\x9d\x5d\x48\xad\x83\x78\xf3\x7e\x13\x3c\x11\x4c\x48\xdb\x45\xf6\xe2\x77\x16\x44\x37\xdd\xf8\x3e\xa4\x43\xb0\x0e\xf6\xa1\xf4\x70\x5a\x9b\xcd\x98\xd4\x9e\x3a\xc2\x2c\x69\x69\x72\xf0\x41\x06\xaa\xc8\x84\xf8\x8c\xe9\x39\xe2\xfa\x30\x3f\xd8\x44\xcc\x11\xb7\x2f\x36\x32\x44\xbf\xf1\x5b\xd5\xa7\x65\x4e\x11\x27\xe9\xb5\x34\x3c\xa3\x09\x57\xd2\xb1\x9c\x3b\xae\x64\xc3\xd7\xb5\xe1\xeb\x5a\xb3\xac\xaf\xd8\xd3\x9c\xed\x34\xb0\xb1\xb7\xac\x68\x9a\x21\x4e\xb2\x97\x19\x7d\x6d\xb8\xb2\x86\x43\x4d\xbc\x20\xc5\xa1\xa8\x79\xe6\x4a\xf6\x32\x3c\x98\xde\x5a\xcf\x06\x88\xe6\x48\x2c\xf5\x4e\xad\xf1\x41\x46\xb9\x7f\x9d\xde\x4e\x62\xbf\x1e\xa7\x05\x69\x0d\x9f\xef\x0d\x92\x43\x67\x72\x71\x79\xfe\x36\xff\x72\xb1\x81\x78\x28\x92\x1e\x7e\x1c\xf7\xcf\xb7\x8e\x8c\x4b\x14\xf7\xe9\x86\x9a\x85\x75\xca\x3f\xb9\x3a\xf1\x87\x0a\x9f\x3e\x82\xf8\x05\x65\xe2\xf1\xe9\x11\xdf\xa4\x8e\x26\xd6\x06\x6e\x48\x3a\xdd\xb0\x34\xa6\x96\x5a\x37\xdc\x7a\x48\x37\x1c\x05\xe8\x86\x95\x2c\x63\xb1\x54\xa6\xbc\x2a\x02\x47\xcf\xea\xa6\x63\xec\x65\xbf\xb3\x46\x95\xa1\xb4\x46\xea\x3b\x9d\x7e\x4e\xd3\x52\xea\x11\x88\x14\xf1\x1b\x23\x7e\x67\xc4\x94\x11\x33\x46\xfc\x9f\x11\x2f\x18\xf1\x9c\xbf\x32\x22\x22\x23\x0e\xf8\x15\xbf\xe6\x4b\xfe\x87\x0f\xf9\x5f\x46\xe4\x4c\x24\xbd\xd0\xaa\xf5\x56\x72\x67\x53\x1f\xa4\x8b\xb2\xd7\x44\x5f\x22\xa3\x46\x20\x06\xf7\x85\x47\x7f\xce\x2e\x72\x08\x56\xd9\x78\xa2\xb3\x93\xf7\x27\x3c\x1e\x8f\xf9\xe3\xa7\xf1\xf1\x87\x6c\x74\x24\x92\xe4\x47\x00\x00\x00\xff\xff\x0b\x8e\x5a\x12\xc0\x05\x00\x00" func runtimeSyntaxCrontabYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCrontabYaml, "runtime/syntax/crontab.yaml", ) } func runtimeSyntaxCrontabYaml() (*asset, error) { bytes, err := runtimeSyntaxCrontabYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/crontab.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCrystalHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2e\xaa\x2c\x2e\x49\xcc\xe1\x8a\xd1\x4b\x2e\x52\xe1\xe2\x02\x04\x00\x00\xff\xff\x1d\x33\x64\x59\x0f\x00\x00\x00" func runtimeSyntaxCrystalHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCrystalHdr, "runtime/syntax/crystal.hdr", ) } func runtimeSyntaxCrystalHdr() (*asset, error) { bytes, err := runtimeSyntaxCrystalHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/crystal.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCrystalYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x54\xdd\x6a\xe3\x48\x13\xbd\xfe\xfc\x14\x85\x66\x42\x6c\x0f\x76\xbe\xdb\x35\x03\x4e\x98\xcd\x40\x60\x76\x03\xbb\xb9\x08\xe3\x76\xe4\x96\x54\xb2\x0a\xb7\xba\x95\xfe\x89\x9d\xa4\xf2\xee\x4b\x2b\xca\x9f\x1c\x66\x87\x85\x01\xe3\xa6\xab\xba\xcf\x39\x75\xaa\xd4\x25\x29\xf4\xb7\x0d\xce\x20\xb7\xb7\xce\x4b\x35\x18\x14\xe8\x31\xf7\xb3\x01\x00\x40\x4c\x6b\x59\xe3\x0c\x12\x21\xa6\xb9\xfd\x98\x0c\x06\x36\x28\x74\x8f\xe9\x0f\x70\xe2\x72\xa2\x0c\x3d\xe5\x52\x81\x22\xe7\xc1\x94\x60\xd1\xa1\xbd\xc1\x02\xb6\xc6\x16\xae\x3d\x39\x01\xe7\xa5\xc7\x1a\xb5\x6f\xb1\xb2\xa1\xcc\x9c\xb7\x32\xf7\x2c\x15\x49\xc7\xed\xaf\xe6\x0c\xd7\xa4\x39\xb3\x28\x37\x9c\x4b\x87\x9c\x2b\xe9\x1c\x17\x58\x72\x61\x18\x95\xc3\xf8\x47\x25\xa3\x2e\x18\xb5\x0b\x16\x19\x75\xa8\x19\x77\x3e\x86\x4a\x63\xb9\x0c\x9a\xa9\x64\xd2\x4c\x3a\x57\xa1\x40\x26\xed\xbc\xd4\x39\xa6\x8e\xee\xd0\x94\xac\x28\x63\x65\x4c\xc3\xb5\xcc\xad\xe1\xda\x14\x41\x21\x6b\xdc\x79\x36\x25\x9b\xe0\xb9\x31\xa4\x3d\x5a\x53\x72\x63\xe9\x46\x7a\xe4\xc6\x9a\xe8\x0b\x16\x6c\x25\x39\x64\x8b\xd7\x81\x6c\x5c\x5d\x1e\xe2\xe2\x83\xd5\xec\x50\x61\xee\xe3\x52\x72\x47\xe6\x1a\xb9\xd5\xec\xbc\x0d\x31\x11\x1a\xb4\xec\x2b\xd4\x1c\x6d\x6f\xff\x4c\xc9\x41\x93\x26\x4f\x52\xd1\x1d\x16\x71\x67\x34\x07\xad\xd0\x39\x0e\xda\x93\xe2\x1b\xb4\x99\xf4\x54\xf3\x36\x5e\xdd\x56\xa4\x90\xb7\xe4\x2b\xbe\x25\x54\xc5\x48\x88\x2c\x69\x7d\x8e\x3d\xf9\x62\xda\x72\xfd\x93\xf3\x79\xb7\xef\x8c\xf7\x36\x20\x97\x32\x5a\xa9\x49\xbd\x5c\x7d\x39\x38\xd5\xa1\xce\xd0\x3e\x9e\x5f\xfc\x7f\xf2\xdb\xf2\xd3\x1b\x82\x73\x8d\x0e\x7c\x25\x3d\xe4\x52\x1f\x7a\xc8\x10\x48\x83\xaf\x10\x9c\xac\x11\x2c\xae\x71\x07\x19\xe6\x32\x38\x8c\xe1\x5b\xe8\x1a\x01\xda\xe8\x49\x3b\x14\xd3\x67\xb0\x8b\x0a\x41\x93\x9a\x83\xd1\x08\x95\x74\xe0\x4d\x04\x94\xa5\x47\xdb\x62\x3e\xa9\xea\xee\xec\x4f\x92\x26\x25\xc4\x9c\xa5\x1b\xc6\x45\x88\x6c\xc4\xe4\x52\x19\x37\x16\x5d\x63\x74\xe1\x52\x6f\x84\x98\x8f\x9e\x0a\x7d\x9c\xf8\x64\x28\xc4\x47\x3e\xe6\xe3\xe3\xd1\x3c\x16\x7a\x32\xf9\xbe\xfc\x14\xcb\x3d\x99\x7c\x4f\xe5\xe4\x6e\x39\x7e\xe5\xe9\xe3\xd7\x01\x89\xbb\xad\x33\xa3\x5c\xdf\xb2\x19\x40\x32\x5c\xc0\xff\x96\x7c\x35\x9a\x3d\x61\xf4\x6c\xfb\xdb\xd4\x08\x41\xd3\x75\x88\xae\x90\x5e\x3b\xd8\x22\x6c\xa5\xf6\xb1\xe6\x08\x53\x80\x09\xfe\xfd\xae\xa5\xe9\xd7\xb3\x6f\xa7\x69\xca\x69\xfa\xed\xec\xcf\xd3\x34\x7d\xdb\xf3\xbf\x70\x1d\x94\xb4\x80\xbb\xc6\xa2\x73\x64\xf4\x3b\xdd\x3f\x1a\x2e\xae\x8e\x96\x3c\x14\x42\x88\xa3\xd1\x68\x7c\xb4\x20\x53\xef\x96\x63\x3e\xb0\x42\xdc\x0f\x17\x57\x0f\x5d\xf2\x61\x34\x1a\x0b\xf1\xd0\xa5\x93\xc1\x4b\x09\x15\x2a\x05\xb9\xa9\xeb\x28\x16\x77\x8d\xd4\x91\x0b\xc8\xc5\x09\x58\x65\x32\xdf\x78\xca\x37\x6e\x05\xc6\x82\xa2\x0d\xc2\xc1\xee\xde\x57\xe4\x1e\xa6\x10\x3b\xed\x10\xa4\xc5\x67\xb8\xa4\x30\x21\x53\x38\xb9\x0e\xc6\x93\xab\x12\x18\x7a\x03\x71\x68\x24\x34\x68\x15\xb9\x7a\x34\xed\xcf\xa6\xf3\x96\xf4\x7a\x06\xc9\x6a\x71\xb5\x5a\x8e\x57\x7c\xb0\x13\xe2\x3e\x6a\x8f\x92\x3b\xad\xfb\xe7\x3b\x4e\x88\x3e\xdb\x68\xc6\x2a\x79\x0e\xa1\x2e\xde\x06\x1e\x9f\x38\x58\x2c\x7f\x1a\xad\x15\xd1\x47\x6c\xf5\xfc\x77\x4c\x91\xec\x01\xbe\x8a\xb8\x0d\x35\x2d\x87\x10\xd3\x3e\xcb\xf3\xb6\xcf\xd4\x60\x4e\x52\x7d\xa9\xa4\xdd\xbf\xda\x7d\x5c\xed\x7c\x4f\x33\x2b\xf3\x0d\xfa\x1e\xd4\x6b\x75\x1f\xde\x14\xfc\x83\xc2\x7f\x20\xed\x85\xb6\xc0\x52\x06\x15\x71\xa7\xe3\x9f\xef\xe1\x61\xdf\xa0\xc3\x5f\xe0\xcf\xb3\x98\xba\x7d\x73\xf6\x44\x7c\xe8\x8b\xf8\xf8\x2f\x74\xde\x14\x26\xbe\x3e\x17\xe7\xbf\x9f\xf3\xe5\xe5\x25\x7f\x3d\xbb\xfc\xe3\x74\x34\x9b\xf7\xb9\xa6\x99\xa5\x75\xf5\x1e\xe5\x2f\xe1\xec\xde\x89\x3d\xb6\xcf\x9f\x27\xf3\xc3\xf9\xe9\xf9\xc5\xe1\xbc\x4f\x7b\x75\x7a\x7e\xf1\xee\x88\xff\x13\x00\x00\xff\xff\x1c\xad\x51\x3e\x58\x08\x00\x00" func runtimeSyntaxCrystalYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCrystalYaml, "runtime/syntax/crystal.yaml", ) } func runtimeSyntaxCrystalYaml() (*asset, error) { bytes, err := runtimeSyntaxCrystalYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/crystal.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCsharpHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2e\xce\x48\x2c\x2a\xe0\x8a\xd1\x4b\x2e\x56\xe1\xe2\x02\x04\x00\x00\xff\xff\x0b\x10\x57\x51\x0e\x00\x00\x00" func runtimeSyntaxCsharpHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCsharpHdr, "runtime/syntax/csharp.hdr", ) } func runtimeSyntaxCsharpHdr() (*asset, error) { bytes, err := runtimeSyntaxCsharpHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/csharp.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCsharpYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x55\xdf\x6f\xe4\x34\x10\x7e\xdf\xbf\xc2\x84\x83\xee\x0f\xed\xb6\x48\xbc\x10\x01\xa5\x3a\xa8\x54\xe9\xe0\x40\xe2\xa1\x22\x89\xaa\x89\x3d\xd9\xf8\xd6\xb1\x73\xf6\x78\xb7\x39\x06\xfe\x76\xe4\xec\x2e\xdd\xb6\x02\x2a\xf1\x74\x2b\xad\x3d\x9a\x64\xe6\xf3\xcc\xf7\x8d\xd3\x68\x83\x34\xf4\x98\x0b\x19\x5a\xf0\xfd\x64\xa2\x90\x50\x52\x3e\x11\x42\x88\xf4\xd4\x42\x87\xb9\xc8\xca\x72\x25\xc3\xab\x6c\x32\xf1\xd1\x60\xd8\x3f\xfe\x54\xbc\x36\x10\xc2\x68\x2f\x85\x56\x68\x49\x37\x1a\xfd\x4a\x26\x77\x2e\xb2\x71\x17\x8b\xe2\x6a\xf9\x1b\x2c\x3f\x5c\x2c\xbf\xaa\x16\x62\x3e\x9d\xe6\xb3\x53\xdf\xaa\x5a\xcc\x2e\xb3\xc9\x98\x25\xe5\xbc\xb2\xd6\x11\x90\x76\xf6\x79\xe2\x2d\xf8\x5c\x64\xdf\x1d\x82\xab\xc5\x21\xec\xf4\x9d\x5c\x64\xd3\x87\xe4\x77\xd5\xbc\x28\xf2\xd0\x83\xc4\xbc\xaa\xe6\xc5\x74\x56\xcd\xb2\x43\xcc\xbe\xee\xac\x2c\xeb\x69\xed\x9c\xe1\x7a\x20\xe4\x30\xae\xb2\x05\xcf\x0a\xa5\xee\xc0\xb0\x72\xb1\x36\xc8\x8d\x71\x40\x7c\x63\xe9\x67\xf2\xac\x2d\x71\x4c\x8b\x71\x76\xcd\x71\x5c\x5d\xfd\x0e\x25\x71\x68\x9d\x27\x8e\xfb\x2d\x90\xd7\x76\xcd\x35\x04\x64\x6a\x75\xe0\x2d\x78\xde\x3a\xad\x66\x65\x59\x1f\x0f\x12\x08\x08\x3b\xb4\x74\x38\x0d\x18\x0d\x81\x21\xb0\x4c\x61\x12\x48\xb6\x2c\x5b\x94\x1b\x54\xac\xb0\x81\x68\x88\x95\x63\x35\x58\xe8\xb4\x64\x34\x01\xb9\xd1\x16\x8c\x19\xb8\xd1\xf7\xa8\xb8\x71\x3e\xfd\x11\x64\xcb\x6b\x47\x8e\x75\xc3\x3a\xb0\x71\x72\xc3\x16\x77\x6c\xa3\x31\xec\x91\xa2\xb7\x1c\x76\x3a\x01\x50\xeb\xdd\x8e\xc9\x0f\x1c\xed\x11\x6c\xd7\x6a\x83\xff\x7a\xd2\x3a\x90\x07\x49\x0c\x61\xb0\x92\x47\xbe\x59\x3a\x1b\x88\x15\x1a\x5c\x03\x21\xa3\x8d\x1d\xe3\x16\x2d\x31\xde\xf7\x46\x4b\x9d\x0c\x42\x6f\x79\x8d\xc4\xba\x3b\xf8\xb4\x4d\x5d\x45\x6f\xc1\xec\x8d\x06\x24\x72\x92\xdf\x48\x1f\xbb\x1e\x3d\x90\xf3\xec\x22\xb1\xdb\xa2\xf7\x5a\x21\xf7\xe0\xa1\x0b\x69\x23\x0d\x86\x7b\xaf\xb7\x09\xb4\xf7\x2e\xc9\x18\x15\xf7\xb1\x36\x5a\xb2\x47\x50\xce\x9a\x81\x3d\x36\x1c\x10\x0c\x2a\x0e\x48\x1c\xf4\x07\x74\x0d\x07\x02\xb9\x01\x63\x9c\x4c\x26\xe9\xb4\xf9\x28\x89\x93\x48\x5c\xc3\xd1\x06\x68\x90\x63\x48\x6c\x6e\xc1\x44\xe4\xad\xf6\x14\xc1\xf0\xd6\x19\x20\x6d\x90\x07\x8d\xe6\x84\xd7\xa4\xe5\x37\x37\x3f\xfd\xb2\x4c\xb0\x62\x83\xc3\xce\x79\x15\xc4\xd4\x59\x0c\x82\x5a\x20\x21\x21\x49\x5d\xd4\x28\x62\x40\x25\x5c\xa4\xa0\x15\x0a\xd7\x08\x18\x23\xc5\xfb\x88\x7e\x10\x4b\x61\x1c\x05\xe1\xa8\x45\x1f\x52\xd0\xec\x1f\xd8\x68\xbc\xeb\x78\xd7\xa2\x47\x0e\x68\x92\x16\xd7\xde\xc5\x9e\xb5\x6d\x1c\x3b\xaf\xd0\xd7\x03\xbf\x73\xda\xb2\xc1\xb1\xdf\xce\x32\xbe\x8f\x60\x02\xd7\x03\x43\x90\x68\x55\xaa\x4f\xe1\xd1\x7c\xc4\x7d\x8f\x52\x83\x39\x4e\x8c\x47\xd8\x24\xaa\x49\xdb\xf8\x48\x23\x23\xfd\x60\x69\x95\x86\xea\xf0\x36\xf9\x88\xdc\x80\x09\x8f\xd5\x34\x74\xb5\x33\xab\x23\xb1\xb9\xc8\x8a\xb2\x5c\x2e\xce\xe7\xdf\x7c\xfd\xed\x65\xfe\xc9\x9f\x9f\x7d\xce\xd5\xb3\xac\x36\x76\xf5\x38\xe5\x29\x6f\x91\xee\x8f\xbb\x6a\xc1\x17\xf7\xc5\xd5\xf2\x1a\x96\xcd\x38\xf3\x0b\xbe\xa8\x8b\x8b\xe5\x17\x77\xd5\x62\x56\x5c\xbf\xa9\x2e\x47\xd0\xa7\x99\xf6\xb3\x99\x1f\xc8\x12\xa9\x9d\x7e\x6c\x65\x96\xfd\xed\x43\xab\x9e\x78\xc2\x46\xf7\x23\x7a\x59\xae\x1e\xbc\x27\xb7\xe2\xf1\x77\x8a\xb4\x6f\xdd\xeb\x16\xfc\x21\x74\x5a\xd4\x64\x1b\x5f\xf1\x19\x97\x65\x99\xa5\xa5\x9c\x65\x2f\x8f\x8f\x0f\xe5\x56\xbf\x7f\xf9\xc7\xcb\x8b\x3b\x7b\x5a\xdb\xd9\xc7\x53\x5a\x37\x6a\xfd\x59\x49\xe7\xe7\x4f\x6b\x7a\xf5\x1f\xa7\x27\xa7\x5c\xfa\x4e\xfc\xfa\xf6\xfb\xb7\x7c\x7b\x7b\xcb\xd7\x37\xb7\x3f\xfe\x30\xcb\x2f\x5f\x00\x56\x96\xf3\x67\xf2\x28\xe7\xe7\xff\x03\xf1\xaf\x00\x00\x00\xff\xff\xd5\x63\x44\x89\x84\x07\x00\x00" func runtimeSyntaxCsharpYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCsharpYaml, "runtime/syntax/csharp.yaml", ) } func runtimeSyntaxCsharpYaml() (*asset, error) { bytes, err := runtimeSyntaxCsharpYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/csharp.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCssHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2e\x2e\xe6\x8a\xd1\xd3\x48\x2e\x2e\xae\x29\x4e\x2e\x2e\xd6\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\x2a\xe5\xab\xb6\x13\x00\x00\x00" func runtimeSyntaxCssHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCssHdr, "runtime/syntax/css.hdr", ) } func runtimeSyntaxCssHdr() (*asset, error) { bytes, err := runtimeSyntaxCssHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/css.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCssYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x59\x4f\x8f\xe4\xb6\xf1\xbd\xcf\xa7\xe8\x5f\xff\x8c\x78\xc7\x08\xd7\xf7\x76\x10\x2f\xb0\x4e\x00\x1f\x02\x1f\x36\x08\x16\xb0\x36\x40\xb5\x54\x6a\x71\x9b\x22\x65\x92\x9a\x9e\xde\xa5\xf3\xd9\x83\xaa\x22\x25\xaa\xa7\x07\xc9\x25\x73\x50\xbf\xf7\x48\x91\x54\x91\xf5\x47\x9a\x5e\x1b\x8c\xd7\x09\x0f\xbb\x36\x84\x87\x87\x0e\x23\xb6\xf1\xf0\xb0\xdb\xed\x76\xd4\x64\x61\xc4\xc3\x6e\xdf\x34\x6f\xdf\xb4\x21\xa4\xd0\x86\xf0\xf8\xcd\xfe\xe1\xc1\xcf\x06\x83\x74\xfb\xff\xdd\x7b\x03\x21\x60\xd8\x81\xed\x76\x3f\xff\x14\x58\x55\xbb\x10\x21\xe2\x88\x36\x1e\x76\xfb\x37\x3f\xea\xc7\xb7\xfb\xdc\x5d\xed\xac\xf3\x23\x98\x72\x3b\xfd\x85\x08\x3e\xf2\x44\x5f\xf7\x95\x8c\xb6\x63\xf1\xf7\x5a\x94\xb9\x77\xbf\x7e\xca\x5a\x1b\xc2\xae\x75\xe3\x08\xb6\x2b\x73\xcb\x13\xed\xdf\x80\xd1\x27\xab\x5a\x67\x23\xda\x98\x84\xe9\x88\x63\x10\x4c\xab\x53\x47\x08\x68\xb4\xc5\xdc\x1c\xd0\xf4\x09\x8c\x49\x60\xf5\x08\x51\x3b\xbb\x22\xd5\xa1\x81\x6b\xcd\xb5\xc7\xf6\xb6\xcf\xec\x6f\x6f\xeb\xb5\x31\x6a\x74\x1d\x56\x9a\x8e\x28\xfd\x54\xeb\x66\x5a\xdc\xd2\x42\x36\xaf\xe8\x64\xe0\xaa\xd8\x98\x95\x18\xf5\xa8\xed\x49\xf5\xb3\xcd\xd3\x4f\x13\x82\x07\xdb\x62\x82\x2f\x7a\x9c\xe3\x90\x8e\xd0\x9e\x7b\x68\x51\x3d\xe9\xa0\x8f\xda\xe8\x78\x65\xed\xe4\xdd\x6c\xbb\x0a\x2a\x88\x11\xda\x81\x8c\x51\xab\x47\x83\xb6\x93\x55\x57\x6a\x6b\xf4\xb4\xe1\xce\x38\x5f\x0b\x7a\x84\xd3\xe6\x0e\xe7\xf5\x49\xdb\x5a\x99\x5c\xd0\xbc\xea\x4a\xf3\x38\x21\x6c\xe6\x0f\xfa\x0b\x8d\x23\x9b\xa3\xc2\xa0\xfb\x98\x8e\xce\x9d\x47\xf0\x67\x65\xe0\x88\xa6\xa2\xf8\x54\x53\xb1\xd6\xd1\xf9\x0e\x7d\xfe\x51\x47\x17\xa3\x1b\xb7\xac\xac\x7e\xa3\x19\xec\xa3\xf2\xd0\xe9\x39\xdc\xb4\x78\x7d\x1a\x5e\x69\x0a\xf1\x6a\xf0\x46\xbb\xe8\x8e\xb6\xa1\x68\xb3\xed\xc0\x5f\x0b\x6f\x9d\x31\x30\x05\xac\xf8\xba\x92\x6c\xc3\x8a\x28\x37\xc7\x80\x71\xab\x15\x9b\xd5\x5a\x30\xba\xbd\xb9\x35\xb8\xd9\xdf\x6a\x9b\xb5\xd1\x13\xd7\x78\xbb\x18\x56\x36\xcf\xc7\xca\x66\x84\xad\x4d\xd8\x4e\x1b\xb2\x1d\x51\xa4\xcd\x90\x22\x6d\xc6\x0c\x13\xb4\xda\x9e\x16\x5a\x77\x8f\x6e\xaa\xe0\x76\x74\x12\xee\xec\x21\xc9\xf7\x36\x90\xf4\xdb\xb1\xb7\x0b\x29\x24\x9f\x9f\x67\xd5\x61\xeb\xb2\xef\x1e\x3d\xc2\x99\xc5\x30\x40\xe7\x2e\x02\xf5\x17\x59\xf8\xb3\x0a\x16\x26\x01\xf3\x34\x79\x0c\x21\xf1\x1d\x0a\xfa\x48\x47\x93\xf1\x11\x7b\xe7\x31\x13\x6d\x83\xee\x30\xb5\x30\xf1\xf8\x99\x78\x8c\x72\x55\x6b\x54\x12\x2e\x8f\x2e\x38\x0c\x30\x61\x6a\x07\xd0\x36\xa4\xd6\x20\xf8\xc4\xee\x4a\x17\x35\x41\x1c\x04\x51\xfc\x4c\xf9\x3e\xba\x2a\x6d\x23\xfa\xc9\x99\x25\x58\x45\xf4\x81\xda\xe6\xb1\x44\xa7\x4c\x28\x90\x15\x7c\x82\xa9\xc0\x32\x62\xc1\x6a\x19\x7d\x51\xc4\xc4\xb5\x22\x66\x15\x65\x99\x2d\x4c\x60\x0b\x2e\x1d\x24\x78\xd3\xaf\xb6\x33\x8d\x31\xd3\x7a\x95\xb6\xad\xe7\xfc\xb2\x28\x1e\xc9\x45\x0a\x63\x4c\xfd\x67\xcc\xe6\x26\x94\x8d\xdd\xce\x3e\x38\x9f\xd6\xf8\xdd\xe9\x40\x81\x36\x75\x6e\xd4\x16\xea\xb4\x80\x06\x9f\xc4\xe2\x38\x4e\xf1\xaa\x5a\x34\x26\x24\xb1\x52\xea\x0d\x3e\xf3\x85\xfa\xeb\x20\x70\x1d\x95\x69\x6f\xdc\x45\xd0\xc9\x17\x14\x06\xaf\xed\x59\xf0\xc5\xc3\x94\x7a\xe3\x20\xca\x55\x75\xd8\xf3\xd0\x84\x5d\xdf\xd3\x83\x08\xf1\xd4\x80\x14\xe4\x7b\xe3\x5c\x09\xbe\x82\x1d\xb9\x4b\xbc\xa6\x3c\x9b\xbb\xa8\xde\xbb\x51\x90\xb6\xd1\xa5\xde\xd9\xc8\x17\xd5\xc3\xa8\xcd\x35\x63\x84\x38\x7b\x24\x6b\x45\x6d\x4f\x41\xd4\x33\x7a\x4b\x47\x98\x89\x01\x7b\x9a\x39\x06\x3d\xa1\xf7\x74\x20\x59\xe6\xf8\xbc\x20\x05\xdd\xe7\x39\xe4\x09\x42\xf4\x18\xdb\xa1\x10\xda\x79\x81\x57\x1b\x07\x64\x3b\x11\x7d\x02\xaf\xa1\x2c\x2a\x13\x05\x64\x57\x0b\x11\xb7\x9d\x54\x0b\xd3\x8d\x82\x10\xa2\x82\xa0\xc1\x6e\x75\xa3\x4f\xfc\x4c\x37\xdd\xed\x3c\xa2\xd7\xed\x56\x5c\x52\x11\xab\x17\xe4\xc8\xd5\x3b\x17\xad\x8b\xa8\xca\xa1\x58\x84\xc9\x19\xdd\x5e\xd3\xc9\x5c\xa7\x81\x12\x1b\xda\x28\x4e\xf3\x84\x3e\xea\x16\x4c\x3a\x79\xdd\xf1\x45\x81\x47\xc8\x68\x8e\x4e\x95\x83\xbe\x2a\xbc\x53\x2b\xf5\xee\x92\x5b\xa5\x6b\x8d\x15\xda\x6e\xc3\xc9\xf9\x6a\xce\xf5\x93\x28\x4b\x93\x2f\xc3\x7b\x77\x59\x07\x20\x52\x77\xa9\x6f\x8d\x38\x4e\x86\x52\xe7\x86\xf1\x93\x84\x1b\x6d\xf3\x38\x8b\xca\xcf\x30\x80\x3d\x51\x71\x32\x51\x71\x32\x8b\xeb\x0c\x62\xd9\xe1\x3a\x0d\x68\xf9\xfe\x01\x3c\xb4\xe4\x42\xab\x66\xf4\xa8\x23\xb7\x84\x17\xaa\x81\x10\x5f\x8a\xda\xe2\xcb\xae\x5f\x9c\xc5\x2c\x86\x94\xb3\xe7\xba\x55\xa9\xe4\x4e\xdb\xa1\xa7\x33\x5e\x78\x70\x66\x96\x0e\x56\x47\x0d\x46\x19\x8c\xb4\xbe\x2d\x55\x5c\x25\xde\x8a\xec\xc2\x3a\xe4\x10\x9a\xc8\x13\x74\x7f\x5d\x0a\xcf\xc2\xa5\xf4\x2c\x8c\x2b\x4d\xce\xbd\x79\x94\x92\xf1\x0c\xd9\x8a\x2c\x28\xfe\xcd\xf5\x8f\x24\x1a\x86\x7c\xc4\x18\x65\xab\x4a\x81\x44\x99\xc6\xe8\x50\x1c\x6e\x85\xb9\x9c\xa8\x84\xe5\xd4\x57\x1a\x95\xcc\x69\x04\x4f\xb5\x9a\xfc\x94\x92\x29\x33\x5e\x69\xc6\x92\xe1\x33\xa1\x64\x4c\x65\x17\xfa\xfc\xc3\x87\x2d\xc3\xb3\x75\xed\xd9\xcd\x71\xb9\x7d\x23\x2e\xe3\x90\x3a\xea\xe5\xae\x09\xc8\x20\xb6\xd0\x80\x27\x0e\xf4\x85\x52\x0c\x2a\x98\x4f\xef\x08\xfe\xb7\x19\xb1\x8a\xbc\x45\x31\x4e\x56\xc7\x24\x4c\x88\xdd\xca\xd8\x4e\x23\x84\x33\x5f\x54\xae\x17\x2b\x2c\xd5\x6f\x2d\xe4\x32\xac\x96\x72\x15\x56\x4b\x52\x84\x6d\x14\xa9\xc1\x6a\x49\xd2\x1b\x2b\x9c\xa5\x05\xb9\x91\x37\x27\x77\x95\x9d\x63\xb8\x2e\x25\x17\xd4\x8c\x97\x9d\x64\x56\x2f\x85\xc3\x33\xa3\xbc\xb3\xcf\xe5\xb8\x10\x14\xcf\x21\x94\x97\xa1\xed\xd2\xac\xed\x22\x3e\xd7\x6f\x01\xa3\x93\x99\xf8\xa7\x24\xa6\xcc\xb8\xba\xc8\xd8\xbb\xec\x69\x16\x9e\x54\xe7\x2e\x02\x78\xff\x09\xc8\x9e\x13\x9a\xa7\xe4\x8e\x9f\xb1\x8d\xaa\xd7\xb1\xc0\xe5\x89\x64\x82\x9c\xba\x33\xc9\xd9\x3b\x33\x3a\x66\x19\xca\x31\x28\x39\x50\x36\xd2\xf9\x69\x00\x1b\x92\x9b\x23\x27\xf2\xfc\x9b\xbd\xaa\xb0\xfc\x1c\x85\xca\xa1\x28\x4c\xec\x40\x79\x8f\x83\x75\x01\xa5\x57\xa1\xec\xfe\x0b\x7b\x5e\xe1\x35\x4d\xd0\x75\xe4\xd3\xf9\xb7\xf8\x54\xa1\x6c\x95\x42\xc4\x32\x85\x91\x5b\x4d\xb4\xfd\x74\x51\x75\xd9\x58\x09\xd9\x20\x95\x92\x0b\xc8\x09\xe6\x90\xaf\xcb\x5d\x84\xcb\x0d\xe8\xc3\x44\xae\xf2\xb4\xc1\xe5\x6c\x4d\x9a\xd2\x37\x5f\x95\x07\x4b\x8b\xa0\xb7\xd0\x6e\xe6\x88\x49\xa5\xa2\x57\x60\xdb\xc1\xf9\x85\x9c\x0c\x66\xdc\xe9\x10\xf9\x4d\x54\x68\x19\xb2\xec\x2b\x95\xc1\x4b\xde\x94\x17\xb7\xdf\x66\x47\xf9\xde\xe3\x89\x0b\x50\x0f\xe2\xee\x1e\xf9\x10\x7b\x0c\x8c\xcb\x59\x60\x98\x9f\xc3\xeb\x76\xb0\x54\x56\x8b\xed\x96\xa3\x57\x80\x9a\x9c\xa6\x91\xe6\xe3\x35\x47\x6e\x86\x23\xfa\x13\x0a\x5c\xd6\xe5\x67\xcb\x35\x4f\x68\xbd\x33\x46\x1d\x71\x80\x27\xed\x7c\xe1\x14\x5f\xf3\x10\xb5\x92\x23\xe6\x4b\x49\x1d\x8d\x6b\xcf\xaf\x36\xf0\xe1\x7d\xb5\x51\x8e\xf3\xbd\x66\x39\x3e\x77\x5a\xb4\xe5\x43\xfe\x6a\xcb\x6b\x13\xe6\xd6\x57\x67\xe4\x13\x7a\x47\x17\x83\xdf\x69\xa0\x73\x5b\xcb\xc5\x03\xee\x68\x77\x6c\xb4\x69\x79\xb1\xe6\x6d\xeb\xcb\x35\xdf\x78\xd9\xbd\xa6\x3b\x76\xda\x36\xbd\x3a\xe9\xab\x96\xda\x38\xf3\xbd\x86\x97\xb6\xaa\x9d\xbc\xd6\x39\x56\xf3\x7b\x5c\x7e\x51\x8f\x83\xc7\x30\x38\xd3\x15\x55\xdc\x5b\x48\x39\x7c\x4c\x28\x35\x71\x13\xf9\x4c\x98\xa8\x5c\xe0\xab\x82\x90\xc1\x80\x40\x71\x51\x08\x97\xc3\x60\x32\xab\x6b\x35\xca\x92\xec\xf7\x11\x13\x55\xf2\x21\xd0\x0f\xad\x96\x02\x65\x88\xde\x9d\x31\xff\xa8\xe5\x33\x5a\x11\x3a\xa0\x17\x61\x7e\x15\xa8\x15\xef\xe1\x5a\x0b\xad\xf3\x96\x96\xb2\x2a\x39\x0e\x67\x85\x2c\xdd\xc2\x54\xd3\xcf\x8e\x1e\x55\xf8\xa8\x23\x7a\xae\xf6\x8a\x52\x42\x7f\xa6\x12\xb8\x23\x1c\x0d\x2a\x03\x57\x37\x47\x22\x92\x14\x23\x3e\xc7\xec\xc9\x2b\x54\x60\x4c\x4d\xb9\xde\x64\xde\xba\xf1\x48\xfb\x3e\x4f\xb2\x8d\x2c\xae\x9f\x00\x6e\x79\x4e\x2f\xb7\x2a\x1f\xba\x5b\x31\x9c\xf5\xf4\x52\xe4\xdc\xc2\x2a\x8e\xd3\xc0\xaf\x95\x1b\x56\xcf\xb0\x68\x4b\x18\xdb\xca\xd5\x60\xda\x76\xb4\x4f\x8c\x73\x09\x2a\xa4\x2e\x8e\x45\x28\xf9\x8e\x59\xfe\xb0\x21\x78\x82\x16\xd7\x6f\x57\x95\x16\xbd\x1e\x57\x4e\xfe\xce\x24\x7a\xb0\xa1\x77\x3e\xb7\xcd\x54\x74\xb3\x17\x6d\xd7\xcb\x09\x94\x7c\xa1\xea\x5f\x90\x3a\xba\xe7\x8a\xe5\x74\xb2\x0a\xf9\x11\x89\xe7\x11\x17\x98\xbf\xd7\xd6\x42\xf9\x38\x5b\x69\x93\x77\x13\xfa\xb8\xe9\x77\xfb\x7d\x75\xb6\xba\x75\x1d\xaa\xa3\xee\x74\x9a\x03\xd7\xa4\x06\xdb\x98\xca\x8b\x5f\x3e\x50\xd5\xb7\xd6\x27\xa7\x5b\x54\x47\x30\x9c\x0b\x85\x2d\xd3\x0b\xcd\x2f\xe2\x42\x24\xe7\x0a\x96\x9c\x5b\x70\x2c\x30\x7b\xa3\x90\x27\x7a\x03\xa3\x16\xfe\xb9\x0c\x3a\xa2\xec\x45\xba\xe8\x8e\xde\xc3\xc4\x07\x2e\xda\x18\x7a\xa7\xa2\x01\x2f\xce\x77\xf9\x4d\x82\x61\xd9\x2a\x26\xbc\x07\x74\xc9\x69\x96\x61\x4e\xb3\x8c\xf9\x48\x30\xca\x41\x88\x71\x1c\xbc\x9b\x4f\x43\xba\x78\xcd\xef\x2c\x5c\x2a\x7e\xe1\xd3\xf6\xfc\x78\x58\xbf\xf9\x77\xd8\xc3\x6c\xe2\xbd\x8f\xfe\x87\x97\x9f\xfc\x7f\xfd\xe1\x9f\x4d\xf3\xf5\xd3\xeb\x9f\xfd\xd5\x8e\x6a\x16\x0d\xe6\xb0\xdb\xff\x9f\x1e\x27\xe7\x23\xd8\xb8\xcf\x6d\x9a\x8e\xba\xee\x35\x7a\x1a\x1e\xa4\xce\x39\xf4\xae\x9d\x43\x3a\x0c\x74\xbe\xd3\xc1\x68\x7b\x4e\x07\xda\xb0\x88\x5d\xa1\xf2\xe8\x87\xfc\xd8\xdf\xec\x5f\xcc\xf5\xa6\x69\xbe\xa6\xa6\xf9\x3d\x35\xcd\x9b\xd4\x34\x8f\xa9\x69\x7e\x48\x87\xd4\x34\x9f\xd2\xbf\xd2\x9f\xd2\x9f\xd3\x1f\x1f\xcb\xa2\x3f\xbc\xff\xf0\x61\xf7\x0f\xf0\xa0\x8f\x06\xef\xfd\x57\xe4\x9d\xac\x3b\xbd\x1b\xf5\xb3\xb6\xe9\x1d\x3e\x47\xb4\xdd\x72\x3b\xc7\xdc\x72\x5f\xeb\x2c\x55\x55\xf1\xad\x84\x62\x31\xe3\xe6\x3f\x27\xfb\xfd\xa2\xe5\x7f\x9b\x54\x0a\x45\x1a\xfe\x4f\x4a\xd3\xbc\x5d\xd5\xea\xbf\x38\xe5\xaf\x9e\x49\x1e\xfa\xfd\x00\x7e\x7b\xeb\x7f\xb1\x9a\x6f\x6f\x17\xf3\xed\xff\x6c\x2d\xeb\xde\x34\xfb\xf4\x6d\xb1\xde\x7b\x37\x92\x95\xc3\xee\x0f\xbb\xbf\xff\xf2\xd3\x2f\xab\x19\x59\xbe\x63\xbe\xe6\xfb\xa6\xf9\xee\x85\x09\x9b\xef\x9a\xe6\xfb\xff\xb0\xc8\xe8\x3a\x47\x27\x83\xe6\x49\x1f\x3f\x7e\x4c\x7f\xfd\xf9\xe3\xdf\xfe\xf2\x78\xf8\x71\xbf\xe9\xf8\xf0\xef\x00\x00\x00\xff\xff\x7e\xdc\x51\x61\x6b\x1b\x00\x00" func runtimeSyntaxCssYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCssYaml, "runtime/syntax/css.yaml", ) } func runtimeSyntaxCssYaml() (*asset, error) { bytes, err := runtimeSyntaxCssYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/css.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCsxHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2e\xce\x48\x2c\x2a\xd0\x2d\x4e\x2e\xca\x2c\x28\xe1\x8a\xd1\x4b\x2e\xae\x50\xe1\x8a\x53\x56\xd4\xd3\xd2\xd7\x48\xcd\x2b\x53\xd0\xd6\xb4\x4f\xc9\x2f\xc9\x4b\x2d\x81\x2a\xd1\x50\xa8\x51\xd1\xe4\x02\x04\x00\x00\xff\xff\xf8\x78\x99\x4c\x36\x00\x00\x00" func runtimeSyntaxCsxHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCsxHdr, "runtime/syntax/csx.hdr", ) } func runtimeSyntaxCsxHdr() (*asset, error) { bytes, err := runtimeSyntaxCsxHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/csx.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCsxYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8d\x41\x0a\x83\x30\x10\x00\xef\x79\xc5\x1a\x3d\x68\x45\x7b\xcf\xa5\xd0\x6f\x74\x5b\x48\x93\x2d\x0a\x69\x0c\x9b\x58\x5a\xc8\xe3\x8b\xc6\xeb\x30\xcc\xbc\x66\x47\xe9\x17\x48\x81\x89\x93\xe6\x30\x44\xc3\x73\x48\xc2\x52\x22\x93\x94\x00\x00\xd8\x1c\xaf\xdf\xa4\x40\x22\x8e\x26\x7e\x1b\xb9\xf3\x89\xb4\x25\x56\x20\x1f\x75\x35\x9e\xce\x2d\xf9\x0f\xf4\xdd\xc5\x2e\xc9\x53\x3a\x42\x2d\xe4\xa6\x2b\xba\xe0\xd5\x51\x2c\xc9\x01\x66\x6f\xdc\x6a\xb7\x66\x19\xcb\x83\x07\xa6\xc0\x8b\xd9\x5f\xd7\x16\xb1\xae\x32\x62\x7d\xe3\xec\x16\x6d\xf3\xbd\x47\x7c\x76\x52\xfc\x03\x00\x00\xff\xff\xbb\x93\xaa\x6d\xb7\x00\x00\x00" func runtimeSyntaxCsxYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCsxYaml, "runtime/syntax/csx.yaml", ) } func runtimeSyntaxCsxYaml() (*asset, error) { bytes, err := runtimeSyntaxCsxYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/csx.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCythonHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xae\x2c\xc9\xc8\xcf\xe3\x8a\xd1\x2b\xa8\xac\x50\xa9\x89\xd1\x2b\xa8\x48\x01\x53\x95\x99\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x1c\x17\xef\x77\x1d\x00\x00\x00" func runtimeSyntaxCythonHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCythonHdr, "runtime/syntax/cython.hdr", ) } func runtimeSyntaxCythonHdr() (*asset, error) { bytes, err := runtimeSyntaxCythonHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/cython.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxCythonYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x94\x4d\x4f\xdc\x3e\x10\xc6\xef\xf9\x14\xf9\x2f\xfc\x0b\xb4\x65\x7b\xdf\xbe\x1d\x60\x57\x42\xa5\x02\xa9\x3d\xac\x44\x38\x38\xf6\x84\xb5\x70\x6c\x6b\x3c\x29\x1b\xf5\xe9\x77\xaf\x9c\x2c\x65\x79\xa9\xda\x0b\x4d\x0e\x96\xc7\xd6\x6f\x9e\x79\x66\x92\xc6\x3a\x92\x3e\xd2\xac\xd4\xbd\xac\x82\x2f\x0a\x43\x42\x5a\x66\x45\x59\x96\x65\x3e\xf5\xaa\xa5\x59\x39\xa9\xaa\x69\xec\xd7\xbb\xc8\xeb\xda\x8c\x6b\x6f\x77\x27\x45\xc1\x9d\xa3\x34\xde\xdf\x29\xcf\x07\x4a\xf9\x89\xfa\x9b\xc0\xa6\x3c\x0a\x2e\xf0\x70\x74\x58\x26\x51\x42\x2d\x79\x19\x68\xf5\xbe\xf2\x06\x2a\x41\xa5\x44\x2c\xd0\x4e\xa5\x04\x43\x0d\x8e\xe7\x0b\x18\x72\x20\x67\x1b\xcc\x4f\x4f\x16\x20\x97\x08\xf3\xd3\x2f\x73\xd0\x5a\x53\x14\xd0\x9a\x34\x1a\xeb\x95\x73\x3d\x9a\xc0\x68\x38\xb4\xb8\x72\xa1\x56\x0e\xb6\xc1\xc9\x02\xb6\x8d\x81\x05\xd6\xc3\x26\x38\xd5\xd6\x46\xa1\x55\x11\x3e\x08\x02\x23\xe6\x6c\x91\xad\x17\xb0\xb2\x89\x20\xdc\xe3\x66\x65\x1d\xe1\xc6\xca\x0a\xbd\x25\x67\x0e\xaa\xaa\x9e\xdc\xaa\x8f\xa4\xad\x72\x1b\xed\x3a\x78\xb1\xbe\x23\xd4\x4c\xea\x1a\x4c\xd2\xb1\x1f\xaf\x0f\xf7\xb3\x15\x47\xbf\xb7\xc2\x1a\xf2\x62\x1b\x4b\x3c\x6d\x95\xe6\x70\x4b\xcd\xe5\xeb\x8d\x72\x1d\x87\x5d\x8c\xa3\x33\x3a\x77\x29\x47\x68\x2d\xc4\x1e\xd6\x6b\xd7\x19\x42\x6e\x4f\x8a\x4a\x13\x22\x87\x48\x2c\x3d\x92\x70\xa7\x65\x5b\xfc\xd8\xe1\x21\x47\x9d\x4b\xd6\x2b\xc5\x30\xa1\xab\x1d\x21\xef\x63\x57\x3b\xab\xf1\x2d\x58\x83\xce\x27\x7b\xe5\xc9\x3c\xa8\xe6\x2c\x12\x2b\x09\x7c\xbf\xa5\x7d\x5b\x87\xec\xc9\xc5\x74\xf6\xf6\xf5\xab\x97\x78\xff\x5f\x55\xfd\x7f\x89\x77\xf8\x80\x37\x38\xc4\x8b\x2d\xc0\xb9\x62\xf2\xb2\x22\xb1\x5a\xb9\x27\x28\xd3\x9a\x95\xbe\x26\x49\x19\xb7\x7f\xf0\xfd\xc7\x25\xaa\xea\x02\x55\x75\xb9\x81\x1c\x96\x3a\xf8\x24\xca\xcb\x34\x09\x5b\x7f\x35\xdb\xb0\xcb\x3c\x5a\x3c\x8c\xd5\xf0\x4e\x7e\xc5\xc9\x9b\x27\xa2\x5b\x03\x7b\xfb\x6c\xb3\xc7\x46\x1f\xad\x14\x0f\x96\x55\xd5\xf4\xef\x05\xec\xed\xed\x3d\xcc\x7e\x2f\xf4\x8c\xa9\x9f\xaa\xfb\x2e\x92\xae\x6d\xbc\x63\xfe\x0b\x27\x1e\xf9\xf0\x9c\x62\xda\xe1\xbf\xf2\x48\xc4\xce\x43\x11\xbb\x7f\x48\x27\xc1\xe4\x8f\x71\xff\xeb\xd9\xf1\x19\x96\xcb\x25\x16\x27\xcb\xcf\xf3\x83\xd9\xc7\x49\x51\xfc\x0c\x00\x00\xff\xff\x14\x89\xfe\x81\x2b\x05\x00\x00" func runtimeSyntaxCythonYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxCythonYaml, "runtime/syntax/cython.yaml", ) } func runtimeSyntaxCythonYaml() (*asset, error) { bytes, err := runtimeSyntaxCythonYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/cython.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxDHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xe1\x8a\xd1\xd3\x48\xd1\xc8\xac\x49\xd1\xb4\xd7\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\x4d\x4e\x48\x0f\x10\x00\x00\x00" func runtimeSyntaxDHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxDHdr, "runtime/syntax/d.hdr", ) } func runtimeSyntaxDHdr() (*asset, error) { bytes, err := runtimeSyntaxDHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/d.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxDYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x96\x6d\x53\x1b\x39\x12\xc7\xdf\xf3\x29\xe6\x4c\x92\xf3\x40\x19\xc8\xab\xab\x70\x1c\xae\x24\xc0\x85\x3a\x02\x5c\x42\xee\x76\x6b\x34\x4c\xe4\x51\x8f\xad\x42\x23\xcd\x4a\x2d\x1b\x27\xbd\xf9\xec\x5b\x9a\xb1\xc1\xc6\xe6\x71\x37\x50\x85\x1e\x7b\xfe\xfd\x93\x5a\x6a\xb9\x90\x0a\x70\x5c\xc1\x76\x24\x56\x56\x04\x20\xe4\xb8\xbd\x12\x45\x51\x14\x26\x34\x2f\x61\x3b\x6a\x31\xb6\xd1\x16\x6d\x49\x22\xee\xc6\x2f\x5a\x2b\x2b\xd6\x2b\x70\x8d\xd5\x6a\x74\x52\x81\xe5\x68\xac\x8b\xb8\x16\x51\xe5\x75\x8e\x9e\xa3\x34\xba\x9e\xef\x44\x0e\x39\x42\x09\x1a\xb7\xa3\x56\x9b\xb1\x35\xda\xa4\x97\xc4\xd8\x3a\x75\x68\x77\x97\x76\x76\x68\x77\x77\x97\x5e\x11\x63\xe7\x6d\xc6\xce\xe3\x2e\x31\x46\xf4\x23\xee\xfe\xab\xb5\x44\x80\xb1\x8d\x00\xc3\xd8\x46\xdc\xa5\xbf\x51\x90\x7b\x45\x3f\x88\xb1\x36\x31\x16\x13\x63\x09\x31\x96\x12\x63\x8c\xd1\xe6\xc4\xcb\x4b\xda\xa1\x5d\x62\xac\x4b\xdb\xf4\xcf\xd6\x94\x3a\x47\xae\x22\xa9\x11\xfa\x60\x23\x25\x11\x2c\x57\x2e\xe2\x16\x22\x01\x95\x85\x9c\x23\x88\x09\x00\x58\x6b\x6c\xa0\xdf\x4a\xb6\x3a\xff\xc8\xd2\xb5\xb8\x7d\x94\xf8\x2f\x69\x97\x42\x79\xd4\x8d\xbb\x53\xd5\x3d\xc8\x65\xb9\x44\x77\x22\x94\x1b\xed\x90\x6b\xdc\xd0\xbe\xec\x41\x2d\x99\x6c\x75\xde\xa4\x94\xbc\xee\xbc\x49\x43\xf3\x2e\xf1\x77\x52\x73\x3b\xbe\x4f\xbb\xe1\xec\xbd\x4b\x93\xad\xd7\x0f\x41\x2d\x94\xe1\x78\x3f\x68\xcd\x39\x21\x0c\x11\x98\xed\xc7\xed\x04\xf6\xd3\x64\xbd\x93\x76\xe7\xc7\xe3\x6e\x52\x1c\x1c\xa5\x5d\xd9\x6d\x3d\x48\xf8\x56\x9d\x07\xc8\x9c\x6f\xa4\x3f\x91\xab\x31\xa7\xa4\x38\x48\xe3\xe9\x0e\x7e\x80\x4b\x2e\x1e\x1d\xf0\xad\xe4\xf2\x97\xb4\xc6\xe1\x9d\xe2\x6d\xe7\x20\xbd\x6e\x66\xe9\x1a\xcd\xf5\x66\xac\xe2\x5b\x03\x39\x8b\xf1\xc0\x60\x3e\x95\x21\xdc\xbb\xc7\x7f\xd5\x4d\xaa\xd3\x65\x51\xb8\x3f\x06\x35\xe7\x34\xaa\x8f\x73\xfa\x20\x9f\xab\xd1\xfb\x01\xb7\x3c\xc7\x3b\x22\xe7\xd0\x4a\xdd\x6f\x92\x5d\xf8\x73\xc8\x6d\xb8\x64\x7f\x6f\x5d\x0d\x81\x16\xf3\x03\xee\x42\x56\x75\xb2\x62\x6c\xe3\x7a\x74\x26\x6b\x4e\xff\x66\xfd\x54\x90\x4b\xae\x02\xd0\xfc\xa7\xab\xd1\x7f\x60\x3c\x32\x56\xb8\x49\x97\x77\x60\x69\x66\xec\xb5\x79\xcf\x61\x58\x0e\x71\x25\xb9\x0b\x65\x5f\x13\x77\x25\x71\xe7\xc0\x22\x71\x8f\x86\x7a\x46\x8c\xa9\x67\x81\x5f\x50\xce\x1d\x84\x02\x29\xe7\x98\x0f\x28\x57\xdc\x39\xaa\x91\x42\x89\x52\x7b\x20\x01\x3d\xdf\x27\x01\x05\xf7\x0a\x49\x80\x82\x3e\x47\x20\x61\x08\x94\x03\x02\xed\x4b\x82\xcb\xca\x58\x24\xb8\x44\xb0\x3a\x66\xac\x37\x45\x2f\x3a\xea\x16\xd6\x82\x87\xaf\x0b\xa9\xb9\x6a\x4a\x35\xa6\xc2\xd8\xf0\x0f\x3c\x1f\x4c\xeb\xcc\xc2\x10\x6c\xb0\x0c\x0f\x8b\x34\x9a\xfa\x06\x0d\xc9\x82\x64\x59\x7a\xe4\x3d\x05\x24\xcb\xda\xbb\xd4\x24\xb5\xf1\xa1\x81\x60\x0b\x9e\x03\x49\x3d\xe4\x56\x72\x8d\x24\x1d\x29\xfe\x6d\x3c\xcb\x56\x76\xec\x2d\x6c\x25\xcf\xad\xa1\x52\x5e\x4a\x4d\xa5\x11\x5e\x01\x69\x18\x91\x36\x38\xb0\x66\x44\xda\x2b\x45\xc1\x91\x19\x82\xb5\x52\x00\x55\x3c\xbf\xe0\x7d\xa0\xca\xf2\x7e\xc9\xa9\xb2\x72\x18\xf6\xa8\xb2\x26\xbc\xa7\x20\xa8\xf2\x3d\x25\x73\xaa\xbc\x05\xb2\x50\x90\x05\xf4\xf3\x3b\xe5\x3a\xa3\x5b\x68\x5c\x6e\x2a\x20\x37\xe0\x16\x04\x85\x49\x99\x93\x43\xeb\x73\x24\xe7\x2b\xb0\xe4\x46\x32\x44\xcf\x8d\x75\x3e\xb0\x46\xcb\x6f\x20\x08\xa1\xac\x54\x60\xc0\x81\x74\xd4\x70\xa3\xf5\x40\x68\xc7\x14\xde\x7b\x29\xea\xca\x14\xe4\x75\xd8\x56\xaf\x25\x22\x38\xa4\xb0\xdd\x61\x60\x34\x90\x0a\x68\x24\x71\x30\x8b\x99\x65\xb7\x50\x66\xd9\xc1\xe1\xd1\x7e\x96\x51\x96\x7d\x3c\xd9\xfb\x32\x69\x1e\x1d\x1e\x37\x8d\x83\x2f\xc7\xef\xcf\x0e\x4f\x8e\xeb\xce\xe9\xa7\xfd\xb3\xb3\x5f\xe7\xc7\xfa\x93\x05\x66\x19\x5a\x2e\xd1\x51\x96\x0d\x21\x47\x63\x29\xcb\x2a\x6e\x79\x09\x08\xd6\xcd\xa2\xec\x5d\xbd\xd3\xd1\xc5\xec\x0d\xb9\x7e\xb0\x03\x57\x38\xb0\xe1\xb8\x5e\x19\xd7\xcb\x16\x50\xd0\xd0\x28\x8e\x52\xc1\xac\xe6\xa9\x95\xa5\x44\x39\x84\x28\x58\x4d\xf5\x9a\xdf\x47\xb5\x5c\xcf\x18\x45\xbd\x31\x02\xe5\xc2\xf8\x70\xfa\x72\xd0\x48\x79\x9d\x79\x29\x1f\x70\x4b\xb9\x05\xae\x48\xd4\xed\x89\x4d\x33\x2b\x27\x3d\x39\xe9\x86\x63\x59\xdb\x2a\xa3\xfb\x54\xb7\xdc\x20\x9c\x64\x5f\x3b\xf0\xb5\xb2\x0f\x66\xbe\xb6\xf0\xcd\xec\xd0\x48\x41\xa3\x20\x3f\x4b\xfe\x6f\x65\x7a\xe1\x12\x45\x02\x0a\xa9\x41\x44\x6e\x5c\xf6\x8c\x5a\xb2\x84\x26\xa3\xd1\x68\x52\x8b\x49\xed\xe4\x37\xc8\x90\x2a\xb4\x42\x16\x45\x86\xb3\xe2\x9f\x9b\xe4\x14\xa1\xb9\x00\xbd\xe4\x17\x47\x73\x00\xf6\xde\x9e\x35\xc1\xde\x3f\x39\xa8\xeb\xb3\xc3\x8f\xfb\x57\x8d\xcf\x67\x6f\x3f\x9e\xd6\xbd\xff\xed\x1f\xef\x9d\x7c\x9a\x34\x3f\x7d\xae\x4f\xc0\x9c\xb7\x1a\x68\x3e\x23\xaf\x46\x7b\xf5\xe6\xfd\xd7\x1b\x04\xd1\x58\xdc\x92\xaa\xa3\x85\x5c\xcd\x5a\x37\x93\xf5\xec\xc8\x5d\xd9\x3a\x7a\x42\xba\xfe\xff\xd8\xc9\xd1\xb8\x7f\x27\xe3\x02\xa2\xbd\x9b\xf1\x89\x6f\xc7\x03\x1c\x7f\xbd\xe9\xf6\xeb\x5f\xf0\x62\x7d\x80\xcb\xc7\x2d\xff\xf2\xa7\x2c\x3f\xe4\x08\x15\x2e\xf4\x3d\x27\x66\x01\xe7\x37\xd6\x62\xac\xbd\x40\xc4\xe2\xe7\x89\x49\xed\xfe\xfb\x4d\xf7\xf5\xe8\xef\xcf\xe6\x3f\x59\xea\x3f\x7d\x26\xff\x3b\x4b\xbc\xef\xfe\xf9\xdb\xf9\x30\xe7\xc9\x79\xfb\x7b\xb2\xc3\x5a\x69\x72\xce\x5a\xe9\xda\x8b\x9b\x2c\xe7\xf5\xf8\xfa\xb3\x1d\x86\xf6\x15\x50\xfc\x53\x6e\xc9\x7b\x53\x86\x97\xfc\x3a\xb1\x97\xcd\xc3\xbe\xc0\xb2\xb9\x79\xd3\xff\x8b\x85\x98\x24\xe9\x0d\x99\x45\x15\xc6\xd6\x16\xef\xd6\xda\xe6\xd3\xa4\xd6\x17\xa5\xd6\x97\x4a\xad\xfc\x11\x00\x00\xff\xff\xb7\xae\x06\xa1\xeb\x10\x00\x00" func runtimeSyntaxDYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxDYaml, "runtime/syntax/d.yaml", ) } func runtimeSyntaxDYaml() (*asset, error) { bytes, err := runtimeSyntaxDYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/d.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxDartHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x49\x2c\x2a\xe1\x8a\xd1\x03\x51\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x3e\xc9\xfd\x80\x0e\x00\x00\x00" func runtimeSyntaxDartHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxDartHdr, "runtime/syntax/dart.hdr", ) } func runtimeSyntaxDartHdr() (*asset, error) { bytes, err := runtimeSyntaxDartHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/dart.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxDartYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x93\x41\x6f\xdb\x3a\x0c\xc7\xef\xf9\x14\x7e\x46\xdf\x6b\xe2\xc0\x71\xde\x69\xa8\xb1\xcd\x28\xb6\xf5\x54\xa0\x03\xb6\x5d\x26\xa9\x85\x6c\xd3\x8d\x50\x59\x36\x24\xba\x69\x06\x62\x9f\x7d\x90\xe2\xb6\x59\xda\x6e\xc1\x80\xf9\x40\x49\x14\xf9\xff\x51\x92\xd9\x28\x0d\xb8\xe9\x21\x8f\x6a\x69\x71\x32\xa9\x01\xa1\xc2\x7c\x12\x45\x51\xe4\xf7\x8c\x6c\x21\x8f\x62\xce\x17\x7e\xff\x28\x9e\x4c\xec\xa0\xc1\x6d\x03\xd2\xa8\xea\x8c\x43\x69\x70\x61\x86\xb6\x04\x1b\x22\x4b\x96\xce\x45\x31\x65\xff\xa7\x27\x82\x2d\xd3\x13\x91\xd0\x92\x2d\xd3\x57\x7e\xbc\xf3\x0e\x99\x36\xa7\xe9\x99\x98\xcf\xa6\x6c\xf8\x22\x98\x3e\x17\x05\x79\xeb\x57\xc5\xac\xe0\xbc\x8c\x0f\x90\xf7\xca\x73\xce\x17\x23\x62\x3b\xdc\xaf\xbd\xf6\x07\xf8\xd8\x0b\x36\x4f\x45\x31\xba\x0a\xd6\x9c\x79\xd8\xc1\xea\x4f\x25\xf6\x14\x54\x0d\x06\x55\xa3\x42\x32\x3b\x4d\xbf\xca\xf4\xdb\x95\x18\x27\xcb\xf4\xe4\x4a\x24\x8c\xe5\xae\x97\x15\xe4\x42\x24\x6c\x2a\xee\x33\x1d\x4a\x84\x16\x0c\x6e\xa9\xd3\xd2\x82\xbc\xa1\x4a\x3a\xa0\x4a\x62\xb5\xa2\xaa\x33\xa8\xcc\x00\x54\x43\x23\x07\x8d\x04\xda\x01\x35\xca\x48\xad\x37\xb3\x9d\x3b\xda\x57\x6a\x3a\x4b\xcd\x60\x2a\x54\x9d\xa1\x6b\x40\x52\x0d\x29\x43\xd2\x91\x72\x64\x60\x4d\x16\x70\xb0\x86\x1c\x20\xb9\xb5\xf2\xac\xa0\x4a\x72\x2d\x15\x92\x74\x1b\x53\x91\x37\xbf\x82\x8c\x89\xb8\x52\x8e\x70\x65\xbb\x35\xa1\xdd\xd0\xad\xb4\x74\xdb\xa9\x9a\xd6\x2b\xa5\x81\xd6\x0a\x57\xa4\xda\xbe\xb3\x48\x5a\x95\x56\xda\x0d\xf5\xd2\x22\x85\x8b\x27\xb8\xf3\x3b\xb3\x67\x9e\x7b\x84\xa0\x1d\x80\x1a\xe9\xcf\x6d\x06\xad\x77\x23\xb7\xbf\x6c\x88\x3a\x57\x0e\xe9\x13\x5a\x65\xae\x5f\x88\x50\x06\xc9\x0c\x2d\xd5\xdd\x50\x6a\xa0\xb2\xeb\xf4\x4b\x67\x63\xe9\x3c\x4b\xde\xbc\x7e\xfb\xcf\xf7\x7f\x8b\xfc\x3f\x12\xcf\x54\x96\xb1\xcb\x44\x4c\xd9\x65\x26\x68\xca\x39\xe7\xd9\x6c\x96\xb0\x4b\x3f\x13\x19\xbb\x56\xad\x48\x9e\x3d\x0e\xe7\xa1\x07\x82\x29\xb6\x96\xbc\xf7\xa7\x8e\x08\x1e\x56\x36\xc6\xe2\x31\x8f\x39\x2f\x82\x6c\x3c\x79\x10\x6c\x43\x9d\x61\xe9\x3f\x87\xd2\x86\x9a\xb2\xf8\xc1\x07\xa6\xce\xa3\xf8\xe8\xd1\xb1\xd3\xb0\xf7\x5f\x1a\x61\x57\x77\x79\x14\x7f\xbe\x78\x7f\x91\x17\x07\x00\x38\x4f\xf6\x11\x9c\x27\xd9\x1f\x52\xc6\xbe\x73\xe1\xd5\x9e\xd2\x78\xfc\x84\xb5\xe3\x71\x37\xaa\x1f\xaf\x74\xf1\x1b\xfe\x23\xa9\x87\x4a\x49\xfd\x6e\x25\xed\x63\xea\xa1\xe5\x1c\xef\x57\x73\xfc\x37\x8a\xf9\x11\x00\x00\xff\xff\x7a\xf4\xbf\x0c\x8a\x05\x00\x00" func runtimeSyntaxDartYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxDartYaml, "runtime/syntax/dart.yaml", ) } func runtimeSyntaxDartYaml() (*asset, error) { bytes, err := runtimeSyntaxDartYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/dart.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxDockerfileHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xc9\x4f\xce\x4e\x2d\x4a\xcb\xcc\x49\xe5\xd2\x70\x81\xb3\xa3\xe3\xf4\x63\xb5\x54\x6a\x62\xf4\x10\xd2\x2a\x9a\x5c\x5c\x80\x00\x00\x00\xff\xff\x2c\x4e\xd6\x72\x2d\x00\x00\x00" func runtimeSyntaxDockerfileHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxDockerfileHdr, "runtime/syntax/dockerfile.hdr", ) } func runtimeSyntaxDockerfileHdr() (*asset, error) { bytes, err := runtimeSyntaxDockerfileHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/dockerfile.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxDockerfileYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x90\x51\x6f\xda\x30\x10\xc7\xdf\xf3\x29\xac\x80\x28\x99\x54\xf6\x9e\x97\x2a\x24\x6e\x89\x48\x62\xe4\x84\x2e\x15\xa6\x92\x97\xdc\xd6\x08\x70\x22\xdb\xd5\x54\xe9\x3e\xfc\x64\x28\x05\x75\x0f\xdb\xcb\xfc\x76\x7f\xdd\xdd\xef\xe7\xfb\xd1\xed\xc1\xbe\x0d\x10\x92\xb6\x6f\x76\xa0\x5d\xed\x79\x2d\x58\x68\x6c\xe8\x11\x42\x88\x4b\x94\x3c\x40\x48\xfc\x69\xf2\xd1\xb3\x79\xfe\xba\xfd\x32\x46\x21\x66\x97\xb9\x71\xe0\x7b\x9e\x7e\xdd\x83\x39\x4d\x8e\x46\x64\x09\x6f\xbf\x7a\xdd\x9a\x63\x7d\x4b\x1c\x69\xb6\x3b\x65\x6e\xdf\x5d\x17\x3c\x4f\xef\x39\xcb\x31\x8f\xd2\xa2\x8a\xd2\x82\x72\xe4\xeb\x02\xe3\x3c\xc1\x2c\x9a\xd3\x0c\x69\xbd\x62\x25\x45\x5a\x3c\x62\x94\x24\x18\xb3\xd5\x13\xd2\xa2\xe2\x4f\x2b\x96\x16\x15\x3e\xb2\x6c\x9d\x53\x5c\x97\x94\xe3\x37\xc6\x97\x49\xca\x91\x15\xf3\x75\x9a\x25\x18\xf1\x07\x5c\xd0\x28\xab\x16\xf1\x82\xc6\x4b\x2c\x2b\xb6\x2a\xd3\x87\x22\xca\xb0\x5c\xd0\x2c\x0b\x36\x9b\xd0\x0c\xb2\x81\x70\xbb\xf5\xbd\xa3\xe2\x51\x7a\xae\x65\xb3\x03\x6b\xc8\x84\x0c\x52\x83\xb2\x2f\x60\xba\xf3\x17\x8c\x95\x16\x0e\xa0\xac\xf3\x17\x62\x8a\x42\x04\x28\xc4\x06\x85\xd8\x06\xd7\x5b\x92\xfe\xf5\xfb\x1e\x88\x3c\x0c\xa0\x8d\x54\xed\x79\x7e\x80\xa6\x93\xfb\x90\xf8\x93\xc9\x75\x7b\xdc\x1f\xdc\xd6\x33\xa6\x39\x95\xe1\x7b\x03\x71\x5c\xed\x98\x23\xff\x23\x02\xe5\x8e\x38\xbe\x04\x57\xb7\x3f\xbf\x5b\x62\xfb\xb6\x77\xae\x15\x4b\x18\xd6\x75\x8d\xf7\x69\x9d\xd3\x20\xbc\x7b\xa7\x3b\x96\x32\x56\x2a\x3b\x33\x56\x77\xea\xe7\x9f\x4c\xe1\x7f\x86\x5e\x27\x66\xd7\x0d\x2e\x12\x42\xcc\xfe\xe2\x72\x21\x9d\xae\x10\xbf\x48\x7d\x19\xfd\x57\x9d\x9b\xcf\x36\x37\xff\x43\xe6\x77\x00\x00\x00\xff\xff\xda\x2b\xb9\x29\x1a\x03\x00\x00" func runtimeSyntaxDockerfileYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxDockerfileYaml, "runtime/syntax/dockerfile.yaml", ) } func runtimeSyntaxDockerfileYaml() (*asset, error) { bytes, err := runtimeSyntaxDockerfileYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/dockerfile.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxDotHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xc9\x2f\xe1\x8a\xd1\xd3\x48\xc9\x2f\xa9\x49\x2f\xd3\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\xb0\x0c\xf2\xbd\x11\x00\x00\x00" func runtimeSyntaxDotHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxDotHdr, "runtime/syntax/dot.hdr", ) } func runtimeSyntaxDotHdr() (*asset, error) { bytes, err := runtimeSyntaxDotHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/dot.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxDotYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x52\x4d\x8b\xdb\x40\x0c\xbd\xfb\x57\x18\xb3\x07\x7b\x21\x9b\xbb\xa1\xf5\xa1\x1f\x50\x68\xd9\x52\x5a\xc8\xc1\xb0\xc8\x1e\xc5\x16\x19\xcf\x0c\x1a\xa5\x21\x45\x3f\xbe\x8c\x67\x9b\xec\xc7\xa1\x85\xfa\xe4\x91\xf4\xf4\x9e\x9e\xb4\x27\x8b\x72\x0e\xd8\x96\xc6\x4b\x51\x18\x14\x1c\xa5\x2d\xca\xb2\x2c\x53\xca\xc1\x82\x6d\x59\xf5\xfd\x5d\x6d\xbc\xe8\xf4\xb3\xb9\xa9\x8a\x82\x8f\x16\x63\x2e\xda\x94\x19\x5d\xa6\xa2\xa1\x36\x34\x31\x84\x59\xd1\x4c\xa8\xf9\xd7\x79\x83\x1a\x8f\xc3\xfa\x6a\xfa\x7e\xa8\x1e\x81\x51\x40\x70\x41\x27\x6d\xc6\x02\xb3\x3f\xd5\x33\x82\xd1\x48\xbf\x50\x05\xc8\x36\x5a\x0f\x93\xee\xc9\x5a\xdd\x7b\x27\x4d\x37\x7a\xeb\x59\x47\x74\x82\xac\xa3\x77\x51\x18\xc8\x89\x1a\x1c\x3d\x83\xe0\x57\x35\xc4\x6a\x28\x8a\x67\x21\xef\x56\x58\x9d\xc6\x58\x9b\x36\x9a\xfa\xd7\xa3\xa5\xa0\x16\x06\xb4\x29\x40\xd3\x2c\xf9\x55\x83\x9b\x2c\xae\x70\x70\x23\x66\x70\xa6\xbc\xb6\x68\x3a\xb5\x70\x46\xae\x63\xd3\xe9\x02\x3c\x91\xd3\x65\xb4\xb4\x90\xe8\x42\xce\xa2\xcb\xc5\x69\xf0\x88\x41\x5d\xcc\x39\xcf\x06\x99\xdc\xa4\x9e\x09\x9d\xc0\x2a\x2f\xc0\x84\xb5\x21\x6e\x3a\x0d\xc8\x14\x66\x64\xc2\xa8\xc1\xb3\x3c\xac\x92\x1e\x2e\x62\x18\xdc\x21\x95\x6a\xc4\xd0\x74\xca\xa9\x81\x32\x4e\x47\x0b\xac\xec\x93\x9b\x1a\x61\xc1\x6c\x61\x76\x2f\xce\x10\xb0\x4e\x9b\x6c\x3a\x8d\x64\x30\x66\x6f\xe3\x01\x4f\x1a\xe5\x6c\xb3\xcd\xcf\x0c\xf9\xf1\xed\xb3\x9e\xb2\x29\x27\x32\xf2\x7c\x67\xe7\x65\xf0\xb6\x2d\xcb\xea\x8d\x6e\xde\xea\x66\x53\x15\x8f\x99\x75\x17\xe0\xe4\x2e\x4a\x1a\x32\x5f\x47\xfa\xa2\x00\xaf\x2b\xae\xaa\x4b\x0c\x9d\x79\x11\x89\x07\x0a\xeb\x1d\xf4\xfd\xdd\x35\xfa\xe4\xd0\xfe\x7c\x4f\x99\x02\x8e\x04\xf6\xdd\x0c\x7c\x85\x5e\xe4\x2c\xeb\x69\xbd\x92\xb1\xdd\xbe\x94\x71\xf3\x17\x3e\xf1\xc6\xb7\x65\x55\x7f\xbf\x7f\x7f\xaf\xbb\xdd\x4e\x3f\x7e\xda\x7d\xf9\xd0\xb4\xdd\x3f\x90\xf5\xfd\xed\xab\xa9\xfb\xdb\xed\x7f\x30\xfe\x0e\x00\x00\xff\xff\xd2\x53\x55\xa9\xb1\x03\x00\x00" func runtimeSyntaxDotYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxDotYaml, "runtime/syntax/dot.yaml", ) } func runtimeSyntaxDotYaml() (*asset, error) { bytes, err := runtimeSyntaxDotYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/dot.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxElixirHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcd\xc9\xac\xc8\x2c\xe2\x8a\xd1\x4b\xad\x50\xa9\x01\x91\xc5\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x2e\xb5\x63\xa5\x15\x00\x00\x00" func runtimeSyntaxElixirHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxElixirHdr, "runtime/syntax/elixir.hdr", ) } func runtimeSyntaxElixirHdr() (*asset, error) { bytes, err := runtimeSyntaxElixirHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/elixir.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxElixirYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x54\x7f\x6f\xdb\x36\x10\xfd\xdf\x9f\xc2\x71\x5d\x44\x72\x11\xa3\xff\x36\x18\x9a\x15\x4d\x06\x14\xe8\x0f\xac\xeb\xd6\x60\xa2\xc4\x50\xe2\xc9\x26\x4c\x91\xca\xf1\x14\xdb\xcd\xf5\xbb\x0f\x94\x14\xc7\xd9\x16\xc3\xd0\x51\xef\x9e\x8e\x8f\xc7\xbb\xab\x8d\x05\xda\xb7\x70\x3e\x05\x6b\x76\x06\x27\x13\x0d\x04\x15\x9d\x4f\xa6\xd3\xe9\x34\x7a\x9d\x6a\xe0\x7c\x3a\x13\x62\x09\xbb\x39\xf7\x26\xcc\x67\x93\x09\x76\x16\xc2\x40\x3b\x9b\x06\x52\x04\x0d\x38\xea\x99\x65\xa2\xca\xc0\x84\x9d\xab\x18\xa1\x61\x6d\xee\x18\x7d\xe7\x34\x37\x6a\xc7\x8d\x71\xac\x9c\x66\x8f\xec\x3c\x31\xad\xd1\x6f\x19\x95\x09\xc0\x08\x83\x5d\x6b\x26\xcb\xc6\xb1\x05\xb7\xa2\x35\x83\x85\x86\xdb\x8e\x64\xbf\xd0\x10\x08\xbb\x8a\x3a\x04\x26\x2f\x93\x40\x68\xdc\x8a\xab\xb5\x42\x6b\x02\xa5\x6c\x82\x4c\x14\xf9\x86\x4b\xe3\x14\xee\xb9\x34\x34\x72\x4a\xef\x2d\x28\xc7\xb5\xf5\x8a\xb8\xee\x5c\x45\xc6\x3b\x36\x8e\x60\x05\xc8\xf1\x73\x6e\x54\xcb\xce\x58\x76\x5d\x53\x02\x72\x6b\x34\xb7\x1e\x89\x11\x6a\x40\x70\x15\x30\x75\xad\x85\x94\x93\xd2\x10\x97\x7b\x82\xfe\x93\x01\x94\xc1\xfc\x80\x71\x5f\xd9\x2a\x24\xd6\x50\x27\x1a\x2c\xac\x14\x01\xc3\xae\x82\xb6\xdf\x72\xd5\x29\xd4\xc3\xb3\x65\xd3\xb4\x96\x1b\x55\xa1\x1f\x9e\x2d\x37\x5e\x77\x16\xd8\xdf\x01\xa2\xd1\xaa\xb4\xc0\x2d\xb7\xe8\xc9\x57\xde\xf2\x70\xfe\xf4\x82\x83\x59\x19\x2b\xb3\x0a\xc3\xf6\xfd\xd7\x3f\xbe\x5f\x7e\xfe\x96\xb3\xa9\x19\x6c\x00\xee\x9c\x85\x10\xb8\xf2\x4e\x47\x41\x3a\x9e\xdf\x79\x0d\x1c\xc0\xd6\x1c\x5a\xb5\x75\xc3\x53\x5a\xe3\x36\xe3\xb2\xf1\xce\x90\x47\x0e\xe0\x34\xc3\xce\xd0\xb8\x17\xaf\x80\xa4\x72\x5a\x76\xad\x56\x04\xd2\xb8\x1e\x31\xae\xbf\x96\x68\x7c\x1b\xcd\xa3\x5b\xb5\xad\xdd\xb3\x71\xa1\x85\x2a\x26\x75\x03\x12\xa1\xe6\x2e\x00\x6b\xcf\xe0\x74\x2a\x44\x39\x7b\xae\x7e\xac\x51\x21\xa6\x65\x48\xfc\x6d\x67\x10\xb8\x52\x01\xb8\x76\x8c\x50\x81\xb9\x03\x56\x35\x01\x32\xe1\x9e\x2b\x45\xd5\x9a\x11\x42\xd5\x01\x87\xae\x05\xe4\xdb\xce\x53\xcc\xc1\x13\x2b\x43\x6b\x4d\x15\x13\x51\x7b\xe4\xad\xa1\xf5\x20\x62\x54\x51\x79\x17\x48\x3d\x88\x10\x22\x7b\x77\xf6\x77\xfe\xea\x48\xe6\x03\x61\x39\xd4\xc6\xc0\xcb\x5e\x9f\xbd\x19\x59\xff\xa6\x0d\x55\x77\x3e\x9d\xdd\x64\xc5\x4d\xbe\xb8\xe1\x97\x3b\x21\xee\xb3\xe2\x67\xbe\x10\xe2\xe7\x7f\xa2\x1e\xe8\x62\x96\x64\x85\x98\xe5\x9c\x88\xf8\x9b\xa5\xe9\x42\xcc\xf8\x65\xf6\xfb\xf7\xfc\xe2\x28\xc0\x01\x49\xb2\x22\x8d\x48\x3a\x22\xbf\x64\xc5\xdb\x7c\xf1\xf6\xe0\xcf\xb2\x22\x8f\xfe\xfc\x80\xcc\xb3\x62\x1e\x91\xf9\x01\x29\xb2\xa2\x88\x48\x31\x22\x27\x59\x71\x92\x2f\x4e\x9e\x17\x79\x9a\x64\xc5\xe9\x28\xf1\x34\x4d\x17\xa7\xfc\x32\xbb\xdd\xe6\x4f\xf5\xf5\xc0\xb1\xbc\xdb\x6d\xfe\xa8\xae\xf7\x1e\x8b\xeb\x81\x63\x6d\x3d\x70\x2c\xed\x76\x9b\x1f\x94\x3d\x14\xcf\xbe\x29\xbd\x5d\x96\xa8\xaa\x0d\x50\xe8\x6f\xe5\x9e\xe3\xfe\x42\x64\x1c\x03\x0b\x91\xb0\x10\xe9\xd1\x05\x35\x63\xb1\xbd\xc8\x8a\xfb\x7c\xb9\x98\xf3\x8b\xf9\xec\xa9\x73\x59\xa2\x59\xad\x7b\xce\x23\x29\xb2\x46\x5a\x9c\x9a\xcb\x0d\xec\xb7\x1e\x75\xbf\xe5\x79\xa6\xce\x7e\xc4\x8a\x19\xed\xeb\xb3\x37\x32\x5f\xcc\x9e\xa3\x97\x89\x86\x50\xa1\x29\x81\x09\x02\xa5\xcf\xb5\x02\xec\x62\x03\x81\x66\x15\x02\x20\x8d\x46\x0e\x83\x72\x7c\x31\x4e\x6a\xb0\xa4\x0e\xce\xa1\x43\xf4\xd0\x18\x12\x10\x3d\x8e\xeb\x61\xdc\xd6\xb6\x73\x9b\x38\xd1\x3a\x82\xd1\x3c\x06\x19\xdf\x1f\x82\x3c\xe9\xd3\x21\xd5\xa4\x62\x01\x14\x42\x84\x85\x10\xbf\xfe\xef\xb9\x8f\xfb\xc1\x68\x70\x64\x6a\x03\xb8\xec\xc7\xdb\x78\x32\x29\xdf\xbf\xfb\xf8\xf1\xea\xab\x94\x2c\xe5\xe5\x87\xc1\x5e\x7d\xfe\xab\xb7\x9f\xbe\x5c\xfe\xf9\xf1\xaa\x5f\xf6\xc3\x00\x42\xbf\x2e\xad\xaf\x36\x52\xc6\xa9\xda\x87\x7a\xd2\xbf\xe4\x75\x8c\x9d\x5c\x5f\x5f\xf3\xb7\x2f\x97\x5f\xf8\xb7\x0f\xd7\x9f\xae\x58\x88\x8b\xe1\x7f\xc8\x71\x8b\xd0\xa2\xaf\x96\x61\x0d\xa5\x1a\x3a\x4e\x7c\x5f\xbc\x38\x59\xbe\xba\x48\xa6\x3c\x4f\x67\x93\x7f\x02\x00\x00\xff\xff\x5b\x2b\xa6\x36\x18\x07\x00\x00" func runtimeSyntaxElixirYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxElixirYaml, "runtime/syntax/elixir.yaml", ) } func runtimeSyntaxElixirYaml() (*asset, error) { bytes, err := runtimeSyntaxElixirYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/elixir.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxElmHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcd\xc9\xe5\x8a\xd1\x4b\xcd\xc9\x55\xe1\xe2\x02\x04\x00\x00\xff\xff\x4d\xbc\x1f\x55\x0c\x00\x00\x00" func runtimeSyntaxElmHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxElmHdr, "runtime/syntax/elm.hdr", ) } func runtimeSyntaxElmHdr() (*asset, error) { bytes, err := runtimeSyntaxElmHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/elm.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxElmYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x92\xdd\x4a\x33\x31\x10\x86\xcf\xf7\x2a\xc2\x52\x68\xfb\x41\x7a\x01\x0b\x9f\x22\xfe\x80\x07\xd2\x13\x0f\x16\x3b\x15\xd2\xdd\xd9\x36\x98\x9f\x65\x33\x05\xad\xe3\xbd\x4b\x52\xaa\xb5\x5b\x29\x08\x3a\x81\x39\x78\x67\x92\xf7\x99\x30\x8d\x36\x48\x2f\x2d\x16\x02\x8d\xcd\xb2\x1a\x09\x2b\x2a\x32\x21\x84\x88\x25\xa7\x2c\x16\x22\x07\x98\xa0\xb1\x83\x3c\xcb\xba\xb5\xc1\xb0\xad\x4b\x11\x48\x11\x5a\x74\x94\x5a\x16\x23\x15\x58\x19\xad\x02\x57\x2a\x20\xa3\x89\xe9\xb9\xf5\x41\xbb\x25\xeb\x86\xb5\x6d\x7d\x47\xac\x1d\x1b\x24\xb6\xbe\x5e\x1b\x64\xdf\x70\x52\x69\x85\x8e\x23\x09\x8f\x01\x16\xf9\x11\x87\x11\xc0\x7f\x06\x28\x18\x40\x9e\x8d\x77\x1d\x5b\xf8\x64\x3f\xbb\x90\x0f\xf3\x98\x94\xdc\x00\xd4\xf3\x7f\xfb\x2f\xe9\x1a\x1d\xe9\x46\x63\x57\x88\xfc\x71\x34\x53\x72\xf3\x6d\x6f\xe5\x5d\x20\xe5\x68\x12\xa8\xd3\x6e\xb9\x1d\x37\x46\x20\xd5\xa5\x61\xd3\xc9\x3f\x74\x74\xf5\x11\x35\x3c\xe9\x36\xa1\x01\x4c\x3e\xd5\xbd\x1f\xdc\xc5\xbe\x63\x8b\x95\x56\xe6\x72\xa5\xba\xaf\x57\xfb\x54\xe2\x08\x56\x1f\xe9\xcf\x70\x7a\x34\xc3\x43\x98\xe1\x2f\xb2\xd8\xb4\x24\x3d\x06\x29\x0f\x21\x06\x27\xec\xc8\xd7\x3e\x2e\xdb\xfd\xf4\x6a\xca\x65\x59\xf2\xcd\x6d\x79\x77\x3d\x2e\xce\x4f\x7a\x01\xbc\xf6\xdc\x24\xc0\xdb\xcf\x0d\xdf\x03\x00\x00\xff\xff\x24\x7c\xac\xca\x9d\x03\x00\x00" func runtimeSyntaxElmYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxElmYaml, "runtime/syntax/elm.yaml", ) } func runtimeSyntaxElmYaml() (*asset, error) { bytes, err := runtimeSyntaxElmYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/elm.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxErbHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2d\x4a\xe2\x8a\xd1\x4b\x2d\x4a\x52\xa9\x89\xd1\x2b\xca\x28\xc9\xcd\x51\xe1\xe2\x02\x04\x00\x00\xff\xff\xf9\x74\xbd\xae\x15\x00\x00\x00" func runtimeSyntaxErbHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxErbHdr, "runtime/syntax/erb.hdr", ) } func runtimeSyntaxErbHdr() (*asset, error) { bytes, err := runtimeSyntaxErbHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/erb.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxErbYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x55\x7f\x6f\xdb\xc8\x11\xfd\xbb\xfe\x14\xb4\x22\xd5\xbb\x72\x25\xb7\xff\x04\xa8\xce\x67\xe6\xda\x28\x45\x80\x6b\xdc\x02\x01\x9a\x1e\x7f\x28\x4b\x72\x48\x2d\xb4\xdc\xa5\x77\x97\xb2\x75\x79\xfe\xee\xc5\x52\xb2\x65\xc7\x6e\x0c\x7a\x21\xbc\x19\xce\xbc\xd9\x79\x33\xac\xa5\x22\xbf\xeb\x68\x11\x91\x2d\x4e\x4e\x2a\xf2\x54\xfa\x45\x74\x12\x45\x51\x14\x6c\x5a\xb4\xb4\x88\x46\x69\x3a\x27\x5b\x8c\x91\xa6\x73\xbb\xf6\xad\x1a\x8f\x4e\x4e\x6c\xaf\xc8\x2d\x06\xcf\x59\x44\xd6\x1a\xbb\x88\x46\x97\x49\x7e\x9a\xcd\xa7\xf1\xd5\xe8\x60\x70\xbb\xb6\x30\x6a\xee\x45\xb3\x88\x46\x2c\x96\xfc\x32\xb9\xc8\x62\x26\x58\x51\x58\x94\xd6\xe8\x5d\x8b\xaa\xb2\xe4\x1c\xba\x4e\x91\x87\x25\x01\xeb\x65\xa9\x08\x4e\x56\x84\xbe\x92\x86\xc7\x28\x98\x70\xc4\x6a\xa3\x3d\x8f\x51\x31\x09\xc3\x21\x1b\x28\x53\x6e\x6e\x7a\xe3\x09\x96\xc7\x28\x05\xd3\x5b\xe1\xd0\x79\x69\x34\x47\x49\xda\x93\x45\x29\x3d\xa1\x34\xac\x22\x28\xa8\xc6\x9a\xbe\xe3\xa8\x98\xf0\x82\x29\xe9\x86\x78\x20\x05\xf2\x42\x2a\x87\x5a\x43\x0a\x65\x1a\x48\x0b\x05\xcf\x41\x2d\x2b\xa8\xe2\x31\x6a\x49\xaa\x72\xe4\x51\xcb\x86\x95\x62\x48\x82\xde\x12\x47\xa0\x85\xda\xd8\x16\x4c\xf2\xb8\xb6\xa2\x25\x0c\x67\xf0\x5e\x27\x7f\x99\xbd\xcd\xb0\xb6\x90\x90\x6d\x03\xa9\x59\xd7\x7b\x38\x8e\x4d\x51\x61\x43\xbb\x86\x34\x94\x28\x48\x41\x51\x43\xba\x82\x92\x4c\x6f\x78\x8c\x56\x30\xa9\xd1\xc1\x6e\x38\x5a\xd2\x3d\x93\x9e\xda\x80\x93\x67\x02\x64\x39\xb4\xd8\x42\x1b\xb6\xcf\x05\x57\x5a\xd9\x79\x0e\xc3\x14\x3a\xcf\x86\x4a\x31\xdc\x44\xef\xbb\xde\x73\x74\x4c\x58\xd1\x42\x96\xbe\xb7\x84\xf0\x98\x26\x5c\x3d\x8f\x71\x03\xcb\x3a\x78\xf4\xc5\x8e\xc3\x31\x6f\xe5\x86\x78\x0c\x27\xda\x0e\x8e\x58\x39\x14\xab\xa8\xf4\x1c\xae\x15\x4a\xc1\x99\xde\x96\x04\xd7\x09\x0d\xe7\xad\xd1\x0d\x5c\xcf\x0a\x74\x68\x5b\x61\x77\x1c\x9e\xee\xbc\x08\xdd\xf4\xb2\x25\x78\x2b\xca\x0d\x7a\xa6\x78\x8c\xad\xb0\xd8\xca\x8a\x0c\x6e\x0b\xcb\x59\x34\x9f\xe2\x8a\xbf\xaa\x99\x39\xdd\x79\xd2\x15\x55\xcf\xc4\x53\x98\x6a\x87\x4a\x6e\x11\xa4\x88\x35\x89\x8a\x51\x68\x7f\x6d\x4c\xe8\xb7\x97\x5e\x11\xbc\x28\xc2\x79\x70\xc6\x9a\x91\x08\x4d\xb4\x83\x17\x7f\x25\x6b\x67\xa9\xb3\xa6\x7c\x96\x69\x7f\xa3\x70\x7e\xa7\xe8\x35\xa2\x1d\x95\x52\xa8\x45\x34\xfa\x63\x92\xff\x94\x24\x0b\xd7\x89\x92\x16\x59\x96\x4d\x7f\x7a\x5e\xcc\x22\x1a\x25\x8b\x9f\xb3\x07\x50\x56\xa4\xbd\xac\x25\x85\x99\x61\x42\x79\x14\x4d\x69\x94\xb1\x58\x93\x6c\xd6\x1e\x6b\x4b\x35\x64\xf5\xa0\x0b\xa3\x9b\x8a\x5c\x89\x30\x8e\x30\xba\x54\xb2\xdc\xc0\xe8\xda\x94\xbd\x83\xd1\xca\x88\x0a\x46\xb7\xa6\x77\x64\xb6\x64\xe1\xe4\xef\x0f\xad\xb1\xe5\x9e\x3e\xbc\xb0\x0d\x79\x84\x69\xc7\x56\xa8\x9e\x70\x2b\x2b\xbf\xe6\x3f\x3f\x90\x2a\x8d\x76\x5e\x68\x3f\x77\xde\x4a\x1d\xe6\x35\x1d\x25\x79\x3a\xca\xa6\xe9\xe8\x85\x8f\xee\xdb\x62\xcf\x3e\x96\xfc\x4d\xf2\xe7\xd9\x5f\x7f\x99\x7d\xc8\xbe\xbd\xfd\xd3\xdb\xfb\xff\x13\x6f\xde\xdb\x70\x0d\xac\xf6\x1d\x0b\x8a\x5b\xfb\xc3\x8f\x46\x7a\x94\x6b\x6b\x5a\xe2\x8b\x8b\x8b\x24\x8f\xfe\x90\x9d\x1f\x63\xb4\x2d\x69\x1f\x36\xcb\xe9\x6c\x36\x3f\x8f\x67\xb3\x57\x1a\x76\x79\xfa\xfe\xfa\xef\x9f\xff\xfb\xaf\xe5\xfc\xfc\xd8\x9c\x8a\x6a\xd1\x2b\xbf\xdf\x50\xe1\xcf\x79\x61\x87\x48\x93\xd1\x23\x46\x3a\x48\x6b\x72\x75\x44\xf6\x6b\x2d\x4a\xb2\x93\x97\x69\x26\x98\x3c\x86\xb7\x83\x28\x7f\xd0\x77\x2f\x3c\x1d\xb8\xa7\x69\xc1\xfe\xb6\xfc\xc7\xc7\x4f\x58\x7e\x7a\x0f\xa1\xa4\x70\x10\xba\x42\x41\x8d\xd4\x28\x2c\x89\x0d\x4a\xe1\x08\xa5\x12\xce\xa1\xa2\x3a\xfc\x4b\x4d\x55\x9a\xc6\xa8\x0c\x48\x39\x0a\x87\xac\x11\x16\x04\x69\x17\x06\xb8\x16\x01\xae\x8d\x85\xac\x21\x35\x5a\x53\xf5\x8a\xa0\xe9\xce\x43\x4b\x05\x6d\x3c\x8c\x85\xa5\xca\xc0\x92\x2b\xfb\x30\xf3\xde\xee\xc2\xd9\x5b\x0d\x47\xaa\x86\xeb\xbb\x30\x33\x6b\xd2\xf0\xb6\x27\xf4\x3a\xa4\xef\xb5\x0a\x2b\xb9\xd7\x5e\x2a\xdc\x06\xe3\xed\x5a\x2a\xc2\x2e\xec\x40\x9e\xa6\xc5\x4b\x25\xcf\xb7\x62\xd0\x43\x9a\x8e\xf1\x0e\xef\xde\xf1\x38\x4d\x8b\xe4\x97\xd9\x6f\xd9\xf9\x5e\x1e\xbf\xad\xc4\xec\xf7\x6c\xfa\xf0\x66\x2b\x1a\xd2\x5e\x1c\x24\xc4\x92\x28\xca\x90\xf3\xc5\x83\x6f\x76\xfe\x7a\x96\x56\x94\xd6\x1c\xee\x74\xb5\xfa\xf0\xf1\xd7\xe5\x6a\x85\xd5\xea\xd7\x8f\x9f\x96\xab\xd5\x53\x66\x85\x0d\x93\x74\xcc\x72\x7a\xc1\x92\xfc\x22\x03\x4b\xd3\x34\xbd\xe0\x7c\x7a\x91\x48\xd3\xde\x65\x53\x4c\x6c\x9a\x7e\x63\x49\x7e\x7f\x30\xde\x73\x3e\x4d\xd3\xfb\x83\xf9\x79\xbc\x42\xf5\xe1\x83\xf8\x35\xc9\xbf\x66\xd3\xaf\x98\xdc\xa5\xe9\xb7\xf0\x66\x78\xe1\x47\x83\xc4\x86\x49\xda\xc7\x4f\x47\x21\xc1\x08\x93\xe4\xdf\xff\xc9\xe2\x27\x01\x1e\x11\x96\xe4\x3c\x20\xfc\x80\x5c\x26\xf9\x55\x36\xbd\x7a\xb4\x27\x49\x9e\x05\x7b\xf6\x88\x8c\x93\x7c\x1c\x90\xf1\x23\x92\x27\x79\x1e\x90\xfc\x80\x9c\x86\x4f\xf3\xf4\xf4\x79\x39\x8d\x25\xd2\x8b\x68\xf4\xe6\x95\x32\x1e\x6c\x67\x2c\xc9\xcf\x0e\xd4\xcf\x38\x9f\x9e\x61\x92\xdc\xdc\x66\xcf\x79\x0f\xc0\x53\xda\x37\xb7\xd9\x91\xf5\x60\x7d\x4a\x7a\x00\x9e\x72\x1e\x80\xa7\x94\x6f\x6e\xb3\xef\x18\x1f\x77\xc1\x9b\x24\xff\x96\xcd\xa7\x63\xbc\x19\x7f\x67\x9c\xef\xcb\x0a\x3e\x47\xa7\xa3\xd7\x0b\x1d\xbd\x5c\x0e\x97\xb3\xf8\x2c\x5e\x5e\x7f\x3e\x8b\xbf\xdf\x12\xf9\xf2\xfa\xf3\x0f\xf6\x84\x37\x55\xd0\x25\xfb\xf2\xe5\x0b\x3e\x5f\xbf\xbf\xc6\x87\x8f\x5f\xfe\xb9\x44\x9a\xc6\xfb\x87\x8f\x4e\xfe\x17\x00\x00\xff\xff\x6d\x99\xea\xb9\x6e\x09\x00\x00" func runtimeSyntaxErbYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxErbYaml, "runtime/syntax/erb.yaml", ) } func runtimeSyntaxErbYaml() (*asset, error) { bytes, err := runtimeSyntaxErbYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/erb.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxErlangHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2d\xca\x49\xcc\x4b\xe7\x8a\xd1\x4b\x2d\xca\x51\xe1\xe2\x02\x04\x00\x00\xff\xff\x11\xca\xcc\x3c\x0f\x00\x00\x00" func runtimeSyntaxErlangHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxErlangHdr, "runtime/syntax/erlang.hdr", ) } func runtimeSyntaxErlangHdr() (*asset, error) { bytes, err := runtimeSyntaxErlangHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/erlang.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxErlangYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x56\x5f\x8f\x13\x37\x10\x7f\xcf\xa7\x88\x72\x54\xec\xd2\x26\x07\xb4\x52\xcb\xbd\x44\x27\x0a\x2a\xaa\xca\x3d\x40\x55\x44\x7c\xb2\xbc\xf6\xec\xc6\x3a\xaf\xbd\x1d\xcf\xde\x25\x30\xf9\xee\x95\xbd\xd9\x5c\xe0\x10\x50\x2a\x35\xd2\xee\xac\xff\x8c\x67\xe6\xf7\x1b\xcf\xa4\xb6\x0e\x68\xdb\xc1\xd9\x14\xd0\x29\xdf\x4c\x26\x06\x08\x34\x9d\x4d\xa6\xd3\xe9\x34\xad\x7a\xd5\xc2\xd9\x74\x26\xc4\x02\xd0\xdd\x9b\x4d\x26\xd8\x3b\x88\xc3\xfa\x7c\x6a\x0d\x78\xb2\xb5\x05\xcc\x7b\xaa\xd5\xf9\xfc\xed\xe5\xea\xe1\xfc\x89\x9a\xbf\x93\x97\x0f\x84\xa8\x66\x79\xe7\xc9\xf4\x15\xc0\xd9\x74\x4d\xd4\x9d\x9d\x9e\x0e\xb6\x16\x01\x9b\x53\x13\xf4\x29\x42\x0d\x08\x5e\x83\x6c\x95\xef\x95\x3b\x35\x8a\x94\x4c\x6e\xc5\xc5\x9a\x5a\xb7\xb7\xa5\x83\x8f\xa4\x3c\x2d\x7c\xdf\x56\x07\x83\x0f\xe7\x4f\x2e\xbf\x2f\x84\x58\x0c\x5f\xe5\xb2\x80\xf9\x72\xfc\x3e\xd8\xff\x9c\xf6\xfb\x47\x3f\x3c\xde\x09\x71\xb2\x52\xf3\x77\xe7\xf3\xb7\x59\xf5\x53\x8a\x55\x08\x6e\x50\x2b\x08\x7b\xe0\x5a\xb9\x08\xe5\x17\x4c\xdc\x13\x42\x88\xa5\x10\xaf\xde\x3f\xda\x7d\x0b\x14\xd6\x13\x06\xd3\x6b\xb2\xc1\x1f\x83\x11\x49\x11\xb4\xe0\x69\xef\x91\xaa\x09\x90\x95\x37\xe9\x51\x2e\x06\xae\xd2\xa0\x82\xc6\x7a\xae\x7c\x20\xae\x02\x72\x15\x1d\x57\x11\xb9\xda\x04\x64\xad\x22\xb0\x56\xa4\xd7\xac\x83\x37\x6c\xec\x35\x83\x37\x5c\xf7\x9e\x6d\xcd\x0e\x88\x93\x5e\xa8\x39\x20\x07\x04\x17\x81\x11\x34\xd8\xeb\x24\x5b\x26\xdc\xf2\xcd\x1a\x3c\x6f\x02\x96\xdf\xc8\x74\xab\x34\x86\x0f\x58\xee\x10\x3a\x0c\x3a\x87\x35\x2f\xda\x60\x7a\x07\x0c\x9b\x2e\x20\x25\xeb\x01\x0d\x5b\xaf\x5d\x6f\x60\x94\xd2\xd9\x8a\x0d\xd4\xd6\x03\xf7\xde\x40\xcd\xb6\x1e\xde\x79\x90\xfd\x06\x6f\x6c\x9a\x61\x70\xe9\x85\x18\x90\x6f\x14\x7a\xeb\x9b\x63\x06\x6f\xd3\x79\x91\x3d\xcb\x5e\x2c\x57\x43\x56\xc8\xa3\xb4\xf8\x6c\x94\xad\xf2\xe3\xd4\x31\x63\x1d\x68\xab\xc6\x0c\x82\x0d\xc9\xca\x7a\x85\x5b\xde\x0b\x1b\xae\x41\x73\x0b\x31\xaa\x06\xe4\xdf\x3d\xf4\x20\xd3\x45\x60\xb2\x2d\x14\xb2\xf7\x96\x38\x92\x6a\xbb\x92\x55\x15\x59\x75\x9d\xdb\xb2\xa2\xd0\x16\x92\xc2\x78\x56\xfa\x74\x36\x52\xb9\x3f\x55\x16\x9d\x42\x62\x0a\x32\xed\x4c\x12\x36\x36\x92\xf5\xcd\x61\xa2\x76\x41\xe5\x1d\xd6\x13\x34\x80\xbc\x3f\x22\x49\x02\x6c\xd3\x51\x54\xc8\x68\xdf\x01\x47\xc2\xa4\x7a\x6b\x64\x4b\x30\xac\x68\xb0\x8e\xf5\x1a\xf4\x95\x2c\x82\x33\x52\x07\x03\x9c\x88\x84\x18\xf3\xa0\x64\xa3\x08\xd8\x80\x03\x02\xb9\xe7\xd5\x40\x1b\xbc\xa5\x80\x6c\x6c\xd4\xc1\x7b\xd0\x24\x7d\x52\x05\x97\xb3\x9b\x01\x53\x96\x0e\x84\xc1\xc6\x12\x67\x77\x3f\x19\xf2\x32\xad\x05\xe4\x46\x61\x95\x20\xd4\xc1\x39\xd0\xc4\x0d\x10\x37\x18\xfa\x4e\x3a\x50\x06\x90\xd7\xca\x11\xef\xa3\x3d\x3e\xe9\x10\x96\x0d\x49\xca\x22\x47\x76\x58\x2f\xd9\x46\x59\x28\x97\xf2\x3f\x83\x77\xe0\x8f\x06\x5c\x38\x55\x08\x50\x7e\xf0\x31\xdd\xa3\x7c\x6d\x47\x53\x9c\x51\x6d\x55\x97\x1e\x79\x05\x5b\x1e\xea\x04\x77\xd6\x70\xce\xef\x11\xaf\xc1\xc6\x3e\xdb\x0f\x77\x86\xa9\xef\x1c\xb0\x03\xdf\xd0\xba\x64\x67\xfd\x55\x3e\x32\x45\x50\x7c\xda\xa1\x0f\xc9\x1e\xdc\x1a\xbd\x39\x58\x45\xa8\x87\xa3\x4b\x76\x41\x99\x91\x9b\x56\x5d\x81\x4c\x6b\xc9\xdb\x22\x81\x98\xe0\x28\xb9\x55\x1b\x6e\xad\xe7\x61\x9b\x4c\x2a\x60\x78\xcf\x63\x91\xd9\x2b\x97\x9c\x44\x4c\xe2\x86\x43\x07\x5e\x0e\xf1\x59\x33\xb2\x95\x4d\x17\x52\xbb\x90\x8a\x50\x68\xdb\x54\xad\xf6\x19\x90\x24\x61\x70\xb7\x84\x74\x78\x30\xb4\xc7\xa8\x90\xb5\x53\x0d\x4b\xeb\xeb\xc0\x10\x4b\xee\x7a\x6c\x0e\x79\xd5\xf5\x29\xac\xc6\x46\x02\x2c\xc0\x94\x4b\xc6\xd0\x7b\xc3\x11\x5c\xcd\x11\x68\xcc\xae\x21\xa9\x3b\x75\xe3\x0b\x99\xf1\x94\x63\x3e\xca\xd0\x11\x8f\xc4\x2f\xd3\xc5\xa3\x04\xa5\x8e\x4c\xd8\x7b\x3d\x00\x76\x9b\x21\x83\x9b\xbd\xcf\x87\xf4\x7e\xb4\x9d\xea\x23\x82\x8d\xdf\x5a\x1e\x3f\x6a\x84\x27\x89\xc6\xb1\x9c\x6c\xdb\x2a\xb8\xa1\x0f\xa7\x5f\x24\x85\xa9\x19\xdc\x9f\x1d\xa6\xc0\x9b\x0f\x27\xe2\x95\xed\x72\xfd\x11\x62\x71\x3b\x3b\x34\xf4\xe9\xea\x72\x72\x32\x3d\xfa\x1d\xf5\xb3\x7d\xe9\x7a\xba\x56\xa9\xa9\x7d\xb7\x98\x7d\xe5\xce\x64\x68\xa5\xaa\xda\x23\x5d\xdf\x17\x42\xe4\x89\xcb\x7f\xa3\x5d\xac\x1e\xce\x7f\xbe\x7c\xff\xe3\x8e\x37\xab\xf3\xf9\x73\x35\xaf\x73\xc7\x7e\xbc\xe3\xfe\x78\xfc\xd3\x8e\xff\x3c\x1e\xff\xb2\x2b\xef\x34\xe5\xe1\x4a\xdc\x05\x4c\xcc\x3e\x46\xec\x78\xe6\x73\x90\x4d\xbe\x1a\xae\xff\x84\xd6\xff\x0a\x56\x9b\xff\x53\xdc\x05\x49\x14\x42\x3c\xb8\x03\x94\x78\x20\x44\xf9\x05\x58\x28\x98\xd4\x47\x8b\xd7\x17\xbf\x5e\xf0\xf3\x17\x6f\xfe\x78\xc6\x7f\x5d\xbc\x7c\xfd\xfc\xc5\x1b\x7e\x79\xf1\xfa\x19\xff\x76\xfe\xf4\xf7\xf2\x6c\x39\xfb\x27\x00\x00\xff\xff\x80\xeb\x8d\x34\x8b\x0a\x00\x00" func runtimeSyntaxErlangYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxErlangYaml, "runtime/syntax/erlang.yaml", ) } func runtimeSyntaxErlangYaml() (*asset, error) { bytes, err := runtimeSyntaxErlangYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/erlang.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxFishHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcb\x2c\xce\xe0\x8a\xd1\x03\x51\x2a\x5c\x71\xca\x8a\x7a\x5a\xfa\x1a\xa9\x79\x65\x0a\xda\x9a\xf6\x20\x31\x0d\x85\x1a\x15\x4d\x2e\x40\x00\x00\x00\xff\xff\xb7\x31\x12\xaf\x25\x00\x00\x00" func runtimeSyntaxFishHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxFishHdr, "runtime/syntax/fish.hdr", ) } func runtimeSyntaxFishHdr() (*asset, error) { bytes, err := runtimeSyntaxFishHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/fish.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxFishYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x55\x5b\x73\x54\x37\x12\x7e\xf7\xaf\x38\x8c\x5d\xcb\x0c\xec\x78\x81\x05\x6a\xd7\x7b\x71\x52\x24\x54\xe5\x21\xe1\x25\x0f\xae\x58\xc6\xd1\x48\x7d\x46\xe2\xe8\x86\xd4\x9a\xb1\xc3\xc7\x7f\x4f\x49\x33\x36\x60\x28\x82\xcb\xba\x4c\xf7\xd1\xd7\xdd\x5f\xb7\x5a\xa3\x75\xc4\xd7\x89\x4e\x86\xd1\x16\x73\x70\xa0\x89\x49\xf1\xc9\xc1\x30\x0c\x43\xd3\x05\xe9\xe9\x64\x98\x09\x71\xdc\xf4\x47\xb3\xae\x30\x24\x35\xe5\x93\x61\xf6\xfa\xf0\xde\xf1\x83\x7f\xcc\x29\x6c\x86\x87\x8b\xd3\xf6\xc5\x7c\xc0\xd1\x62\x76\x70\x90\xab\xa3\xb2\x83\x19\x86\xc3\xe1\x97\xea\x57\x94\x4b\xff\xbd\x1c\x54\x0c\x85\x65\xe0\x0e\xbc\x3a\x7f\xb4\xfc\xf7\xc5\x43\x21\x56\xb3\x83\xdb\xef\x5f\xc4\xa0\x2d\xdb\x18\xa4\x2b\x83\x0c\xba\x1d\xe1\x1c\xdd\x30\xba\xb8\xdd\xa3\x14\x96\x4c\x9e\x6e\x60\xe6\x32\x68\xac\x68\x6d\x03\x56\x99\xe4\x04\x25\x0b\xa1\x9d\xb3\xa1\x12\xc8\x15\x02\x05\x8d\x31\x66\x8c\x35\xa8\x86\x0e\x3b\xc2\x06\x84\xc8\x88\x19\x99\xb8\xe6\x80\x42\x8e\x14\xa3\x18\x3b\x32\xca\xd6\xb2\x32\xd8\x1a\xeb\x68\xd1\x7d\xdc\x1b\x4f\xa4\xac\x74\x27\xc3\x6c\x2e\xc4\x3b\x08\xf1\x1e\x42\xcc\x21\xc4\x02\x42\xfc\x07\x42\x5c\x40\x88\x73\xfc\x0e\x21\x84\x80\x10\x47\xf8\x2f\xfe\x8f\xd7\xb8\x87\xff\xe1\x6f\x10\x02\x8b\x8f\xa2\x7d\x69\x8b\x19\x54\xf4\x5e\x06\x7d\xc3\xd1\x2e\x29\x3d\xb0\xd5\x1a\x2b\xdb\x82\x73\x51\x4d\xbb\xe0\x52\xb4\x81\xb1\xaa\xd6\xb1\x0d\x50\x1a\x2a\xd6\xc0\xd8\x63\xdc\xac\xce\x86\xc6\x80\x4f\x8e\x98\xa0\x6d\x36\x6d\x2a\x20\x65\x22\xc8\x5b\x06\x6d\xa4\x03\x5d\x91\x02\x5d\x59\xc6\xb8\x46\x4b\x62\x9f\x2e\x55\x0c\xa3\xdd\x09\x2e\xad\xa6\xc0\xbb\x6d\x92\x6b\xca\xfb\x6d\x8e\x3e\xed\xc5\xd9\xae\x0d\x7f\x22\xa9\x49\x4b\xa6\xcb\xbd\x7d\x1b\x43\xe9\x72\xdd\xd9\xa7\xdd\x52\xe4\x86\x6e\xb3\x51\x60\xc8\x25\x18\x5b\x38\xe6\x6b\xbc\x89\xab\x02\x2f\xd9\xc0\x5b\x4f\x7a\x85\x40\x57\xac\x11\x13\x05\xa4\x98\x34\x52\xa6\x8d\x46\x2a\x75\x85\x54\x1b\x70\xda\x6a\x64\x19\x74\xf4\xc8\x24\x35\x0a\x71\x1b\x97\x2a\xba\x98\x51\x62\xcd\x8a\xd0\xca\xa6\x16\x14\xce\x36\xac\xc1\x59\x26\x34\xae\x51\x9d\x6d\x8c\x54\x2f\xcb\x84\x8d\xcc\xa4\x17\x77\x6b\xd2\xfb\x18\x06\x67\x43\xbd\xfa\x4a\xb6\xe6\x6b\xd8\xf5\xe2\x54\x6e\x27\xac\x64\x31\xd0\xb2\x13\x1a\x34\x84\xd8\xbe\x7b\xf4\xf7\xa7\xef\xd7\x99\x12\x26\xeb\x5c\x9f\xa4\x73\xb7\x1a\x47\xa5\x85\x3c\x11\x52\xd7\x17\xd2\x28\x06\x2c\xf3\x67\xbe\x64\xaa\x6c\x5d\xf9\x5a\xd9\xc8\x42\xcf\x9f\x36\x27\xfa\x2d\x86\x92\x0c\x65\x54\x0c\x50\x66\x9d\x13\x94\xf1\x51\x43\x99\xb8\x6d\x92\x1c\x23\x43\x4d\xa5\xfa\x5e\x3d\x50\x09\xaa\x24\x67\x19\xaa\x32\x5a\x26\xa1\x35\xf4\xd8\x2a\xa8\x8d\xce\x69\x69\xbb\x0e\xae\x2b\x28\x6c\x40\x57\xa9\xd5\x1f\x5d\xa5\x8c\x51\x2a\x6e\x77\x4d\xb6\x9b\x37\x7a\xc6\x18\x9d\x46\xeb\x1d\x30\xb1\xb0\xd5\x68\xff\xad\x13\x38\x87\x37\xd1\x06\x38\x1b\x26\xb8\x00\x17\xd7\x1d\xd4\x15\x78\xfd\xac\xb9\xe4\xa7\x66\xd6\x4f\xa3\x1d\x23\xfc\x14\xa2\x86\x9f\x98\x7c\x82\xdf\x20\x58\x45\x08\x0e\x21\x9a\x9a\x10\x52\x8e\x0a\xa1\xfa\x66\x32\x6a\x24\x59\x98\x90\x24\x1b\x65\x26\x24\x1b\xa6\x6b\xa4\x8c\x94\x6d\xe0\xe6\x72\xdf\x8c\x48\x7c\xb5\xab\x1f\x92\xba\xfb\x91\x49\xba\x76\x0a\xd9\x23\xfb\x66\x3e\xd7\xd0\xd8\x2b\xf4\x16\xf3\x62\xe4\x63\x14\x23\x9f\x3c\x79\xda\x97\x67\xcf\xdb\xf2\xcf\x7f\xf5\x5f\xcf\x1e\x3f\x59\x34\xaf\x8b\xc9\x3d\x81\x75\x44\x71\x44\x09\x25\x66\xc6\x8e\xd5\x56\x86\x28\xac\x57\x4d\xc9\x7c\x8d\x7e\xe0\x3a\x28\xb0\x6c\xc3\x3a\x30\x11\x98\x0a\x83\xad\xa7\x3e\xc5\xca\xe0\x58\x95\x01\x67\x70\xae\xd4\xa6\xa0\x5a\x72\xb8\x63\x37\xa0\xda\xb9\xab\x61\x9f\x8b\x1a\xec\x5b\xd4\xd0\x63\xaa\x85\x72\xc1\xa6\x05\xb3\x55\xd8\x9a\xd8\x86\xf4\x16\xd7\x54\x3e\xab\xb0\xdb\x0e\x3c\x8c\x4e\xae\xcb\x17\xba\xee\x72\x79\x2e\x97\x7f\x2c\x2f\x1e\xce\xbe\xd8\x92\x87\xae\x6e\xda\xbd\xba\x77\x11\x3b\xda\xfe\x76\xcc\x4f\xed\x42\x88\x23\x21\xde\x9d\xb6\x17\xe0\xfb\xe5\x6f\x97\xf7\xbe\x3b\x3c\x7a\x70\xba\x6c\x8f\xc1\xfb\xd3\xdb\x53\x37\xaf\xc5\xf1\xee\xca\xde\x3c\x2a\x43\xb3\x96\xbb\xa5\xd9\xec\x56\x46\x41\xdf\x91\x94\xc9\xa6\xee\x8e\x10\xc7\x1f\xa4\x9f\xbc\x4f\xbb\xbf\x8f\x2d\xed\xba\xfb\x0b\x23\xf3\x87\xa3\xdf\xea\xce\xfd\xbb\xde\xdc\xff\x36\x67\x86\xf3\x8b\x0f\x36\x7c\x67\xf1\x33\xec\xc3\xbb\xd8\x47\x7f\x11\x12\x47\x1d\x1b\xd9\xbf\xbe\xfa\xe1\x15\xce\xce\xce\xf0\xf2\xa7\xb3\x9f\x7f\x5c\x9c\x34\x7a\xff\x0c\x00\x00\xff\xff\xd8\xe9\x5d\x6d\xfc\x07\x00\x00" func runtimeSyntaxFishYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxFishYaml, "runtime/syntax/fish.yaml", ) } func runtimeSyntaxFishYaml() (*asset, error) { bytes, err := runtimeSyntaxFishYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/fish.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxForthHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcb\x2f\x2a\xc9\xe0\x8a\xd1\xd3\x00\x33\x6a\x4c\x4a\x32\x6a\xd2\x8a\x6b\xd2\x8a\x2d\x6a\xd2\x4a\x6a\xd2\x40\xbc\xa2\x12\x4d\x15\x2e\x2e\x40\x00\x00\x00\xff\xff\x51\x5f\x4e\xdb\x28\x00\x00\x00" func runtimeSyntaxForthHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxForthHdr, "runtime/syntax/forth.hdr", ) } func runtimeSyntaxForthHdr() (*asset, error) { bytes, err := runtimeSyntaxForthHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/forth.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxForthYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x51\x4f\x8f\xd3\x3e\x10\xbd\xe7\x53\x58\xf9\xf5\x90\xfc\x96\x54\x7b\xe0\xc0\x86\x43\x44\xc5\x22\x71\x80\x1e\xd8\x43\x45\x1d\x90\x13\x8f\x5b\x4b\xce\xb8\xb2\xa7\x65\x17\xcd\x87\x47\x71\xda\x2c\x2a\x7b\x40\x22\x87\xd8\xce\xbc\x3f\xce\x7b\xc6\x3a\xa0\xa7\x03\xd4\xc2\xf8\x40\xfb\x2c\xd3\x40\xd0\x53\x9d\x09\x21\xc4\x38\x44\x35\x40\x2d\x72\x29\x97\x45\x42\xf0\x6b\xda\xb3\x89\x6c\xe2\x1b\x36\xc4\x66\x3c\x05\x2a\x17\x79\x96\x85\xa3\x83\x38\x31\x2b\x61\x35\x20\x59\x63\x21\x24\x76\xb7\x7d\x57\x7d\x55\xd5\xcf\xef\xb7\xd5\x5d\xd5\xfe\x2f\x65\x97\x27\xe0\x19\x1d\x49\x11\x0c\x80\x34\x81\x8b\xc6\xd6\x85\x35\x0c\x2e\x02\xd3\x1e\x90\xb5\x67\xe7\xfd\x81\x7b\x15\x81\x01\x75\x5a\xbd\x19\xb7\xde\x70\x07\x3b\x8b\xfc\x63\x6f\x1d\x70\x80\x03\x28\xe2\x23\x92\x75\xac\x76\xca\x22\x1f\x31\x71\x1d\xa8\x13\x30\x3c\x5a\x62\xed\x11\x18\xe1\x91\x58\xca\x46\x7b\x96\xf2\x26\xbd\xab\x69\x9f\xe0\x52\x56\xe7\xb5\x49\xcc\xb2\x4c\xb7\x7e\xe1\xc6\xc5\xb7\x9a\xdf\x2e\xca\x79\x36\x05\x3a\xff\xc8\x49\x05\xab\x3a\x07\xdc\x7b\x8c\xa4\x90\xb8\x07\xe7\xe2\x95\xde\x01\x7a\xab\x5c\xa2\xad\xb6\xcd\xb2\x95\x72\x95\x8b\xff\x8c\x0f\x22\xfa\x01\x44\x00\x15\x3d\xbe\x12\xb2\x13\x0a\xb5\x90\x2b\xa1\x02\x08\x8b\x27\x08\x04\x5a\x24\xdc\xd3\xd0\x79\x17\x2f\x8a\x17\xb7\x25\x1e\x87\x6e\xae\xe1\xb6\xba\x6b\x6f\x7e\x37\x9e\x61\x91\x82\xc5\xdd\xd4\xdf\xf8\x44\x52\xe1\xd2\xc7\xf6\x4b\x5c\xb6\x32\x17\x65\x3e\x8f\x01\xf5\x38\xcc\x9f\xbf\x4c\xfd\x8b\x6d\xfb\x2c\x3d\xa4\x84\x5e\x90\x2c\xfe\x10\x92\xe5\xb5\xd2\x7c\x3c\xa7\xea\xb5\x1f\xc3\x7e\x58\xbf\x5f\xf3\xe7\xf5\xc3\x3d\x6f\x36\x1b\xfe\xf0\x71\xf3\xe9\xbe\xac\x9b\xfc\x2f\x4c\xa5\xbc\x76\x5d\xfc\xa3\xe7\xaf\x00\x00\x00\xff\xff\x44\x4c\x9c\xb0\x3f\x03\x00\x00" func runtimeSyntaxForthYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxForthYaml, "runtime/syntax/forth.yaml", ) } func runtimeSyntaxForthYaml() (*asset, error) { bytes, err := runtimeSyntaxForthYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/forth.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxFortranHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcb\x2f\x2a\x29\x4a\xcc\xe3\x8a\xd1\xd3\x88\x76\x4b\x8b\xad\x01\x11\x96\x06\x10\xca\x14\x4c\x45\xfb\xe7\xc7\x46\x07\x15\xc5\x6a\xaa\x70\x71\x01\x02\x00\x00\xff\xff\xec\xb9\xd8\x96\x2e\x00\x00\x00" func runtimeSyntaxFortranHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxFortranHdr, "runtime/syntax/fortran.hdr", ) } func runtimeSyntaxFortranHdr() (*asset, error) { bytes, err := runtimeSyntaxFortranHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/fortran.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxFortranYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x96\xdf\x8f\x23\x35\x0c\xc7\xdf\xf7\xaf\x98\xeb\x1d\xdc\xf6\xe0\x0a\x2f\x3c\x50\x84\x56\xe8\xe0\x24\x1e\xd0\x22\xc4\xc3\x4a\x6d\xa9\xdc\xc4\x33\x35\x9b\x71\xb2\x89\xb3\xdb\x82\xf9\xdf\x91\x67\xba\x3f\xee\x07\xed\xbd\x50\xa9\xf1\x24\x93\x7c\xea\xc4\xdf\xd8\x6d\x29\xa0\xec\x13\xce\x9b\x36\x66\xc9\xc0\x67\x67\x1e\x05\x9d\xcc\xcf\x9a\xa6\x69\xec\x35\x43\x8f\xf3\x66\xb2\x5c\xce\xce\x17\x6f\xdb\x95\x5a\xf3\xed\xd7\xa3\xf9\x66\x30\x8b\xcb\xb8\x5a\xfc\x96\x57\xd3\x17\x93\xb3\xb3\x5c\x03\x96\x71\xf5\xeb\x66\x44\x37\x93\xf3\x0b\x9a\x2e\x97\x9b\x73\x70\x42\x91\x15\xfc\x2d\xb0\x43\x85\x10\xec\x1b\x1d\x08\x6c\x02\xde\x3f\xa3\x57\xe0\xbd\x42\x8a\x45\x72\x4c\x5b\xb4\xb5\x93\xff\x42\xa6\x84\xec\x15\x0a\x15\x85\x52\xa8\xe3\x83\xe9\x91\xc5\x1e\xa3\xa3\x01\xe9\xb6\x90\xc1\x09\x66\x75\xb1\xef\x23\x1f\x83\xba\xd8\xa7\x80\x3b\xf5\x20\xa0\x1e\x5b\xa8\x41\xd4\x63\xa0\x5e\x3d\xf5\xc8\xc5\x76\xe1\x63\xdd\x04\x6c\x52\x46\x47\x36\x70\x0c\x88\x01\xcd\x1f\x08\x8a\xa9\x50\x88\xac\xb8\x13\xcc\x0c\x41\xed\x8c\xb5\xed\x45\xdb\x98\xfb\xa1\x01\xd1\x6d\xed\x8e\xee\x9a\xfa\x14\xc8\x91\x28\xb1\x0b\xd5\xa3\x12\x7b\xdc\x29\xf1\x4d\xa5\x6c\x3d\xc1\x0e\xf3\x60\x59\x06\x93\x5b\x70\xc7\x91\x2c\x99\xb8\x90\x53\x8a\x45\x40\xf4\x9a\xd8\x6b\x88\x1d\x39\x08\xda\x47\x5f\x03\x2a\x47\x46\xe5\x1a\x82\x46\x0e\xfb\xe9\x72\x79\x04\x18\x13\x66\x90\x98\x35\x26\x8b\x3a\x04\x4d\xe0\xae\x35\x41\x86\x1e\x2d\x0e\x29\x0e\x8e\x69\x8a\x85\x06\x5d\xa4\x4c\xb7\x20\x47\xbd\x4c\x39\x76\x19\x7a\x4d\x75\x13\xc8\x69\x46\x08\x9a\xd1\x0d\x4d\xcd\x85\x6e\x51\x0b\x06\x74\x82\x7e\x4d\x2c\x6b\xdb\xc4\x31\xde\xc3\x64\x23\x0d\xb3\xb5\xd4\x4d\x8e\x55\x88\x51\xed\x1c\x6a\x19\xd7\x1f\x00\x2e\x72\x11\x60\x79\x47\x83\x9b\xa2\x60\xfa\x52\xf0\x7f\xd6\x22\xe1\x60\xf3\x83\xa2\x75\x43\xb2\x2e\xf4\x17\xaa\x33\xd1\xdb\xdc\x81\xda\x1c\xa1\xba\x10\x0b\xaa\x8b\x2c\x40\x5c\xd4\xc5\xca\xa2\x2e\xd5\xb5\x50\x8f\xea\xca\x96\x5a\x31\x85\xe2\x1a\xd8\x0f\x83\x27\x91\x1e\x1f\x1c\xf2\xd4\x91\x14\xf5\x51\xd6\x29\x47\x5f\x9d\x28\xc6\xac\x18\x47\x6e\x5b\x79\xbc\xab\x04\x9f\xe4\x2c\x01\x7b\xa5\x8d\x0b\x59\x69\x63\x60\xda\x14\x14\xa5\xe1\x54\xc8\xc8\x14\x03\x72\x27\x5b\x25\xeb\x94\x6d\x2b\x63\xeb\x4e\xb2\xc3\x26\x56\x93\x22\xb2\x7d\xd7\x92\xa9\xd7\x1e\xa4\xaf\x41\x7b\xd8\xe1\x2e\x45\x36\x95\xf7\xb0\x0b\xd1\x99\xb9\x35\xc1\x62\xee\x4e\x1f\x48\x4f\xfc\xb8\x9e\x78\x58\x4f\x3c\xac\xbf\x1d\xb6\x61\xd9\x2f\x50\x11\x65\x84\x8c\x66\x6b\x08\xd4\xee\x4f\x92\x63\x42\xd6\x04\x5e\x53\xc6\x62\xf8\x94\x69\x68\xc7\xb3\x4e\x35\xa3\xde\xd4\x28\xa8\x19\x3c\xed\x4e\xf2\x32\xb0\x8f\xfd\x9a\x6b\xbf\xc1\xac\x87\x5e\x41\xf4\xf6\xdc\xa1\xdd\x04\x3f\x34\x77\x99\x0c\x8a\x29\xdc\x5f\xf8\xa3\x58\x2c\x5b\x48\x36\xff\x6e\xd0\x3e\xd8\x05\x72\xc0\x5a\xf0\xa6\xa2\x25\xe9\xf1\xfd\x90\x58\x07\x01\x97\x04\x8e\xb8\x3b\x49\x2e\x69\x70\xa9\xd4\x5e\xcb\xbe\x08\xf6\x6b\x17\xa2\xbb\x56\x81\xdc\xa1\xa8\x15\x9b\xd2\x62\x1e\x1f\x92\x49\xdd\x02\x7b\x12\x5b\x47\x31\x54\x1e\x92\xc9\x2d\x66\x6a\xf7\x3a\xee\x59\x88\xf7\x6a\x17\x5c\x6b\x41\xdd\xe3\xbb\x17\xd7\xee\xf2\x90\x84\xe7\x8f\xb0\x19\xb0\x9f\xa9\x83\x82\xea\xa3\x62\x28\x38\x34\x17\xd4\x8e\xf6\x6e\x8b\x19\xd5\xea\x0b\xb2\xbf\xb0\x29\xec\x2f\xa8\x7d\x9a\x50\x3e\x86\xb5\x59\x63\x62\xd1\x19\xde\xdc\xce\x2c\xab\xdb\xb5\xa7\x56\x43\x87\x1a\x3a\xd1\x10\x50\x43\x10\x9d\xf1\x30\x61\xc6\x51\x66\xa7\xb0\xb3\x98\x67\x16\x58\x04\x39\x24\xb9\x66\x70\x5d\xb6\xc8\x3a\xba\x7a\xb7\xa5\x80\xef\x6e\x3b\xa1\x23\x08\xf3\xa7\xc5\x8d\x85\xb8\xa2\xba\xbd\x0b\xa8\xb8\x23\xd1\x2e\x5e\x48\xd4\x8c\xc5\x0a\x5d\x46\xa9\x99\x9f\x50\x9a\xe6\xf9\xe5\x21\x99\x37\x6f\x62\x88\xf9\x9e\xbd\xef\x37\x31\xcc\xee\x13\xfd\xbc\x99\x2c\x66\xf3\xef\xbe\xfc\xe2\x95\x7e\xff\x6c\xb9\xfc\x6c\xa5\x5f\xe9\x6b\xfd\xfc\x11\xf2\x2b\x64\x64\xd9\xa2\x58\x49\xf9\x18\x69\x93\xc1\x5d\xa3\xed\x79\x71\x3e\xfd\xfb\x9f\x95\x2e\x97\x0b\x5d\x2e\x57\x8f\x88\xe6\x07\xef\xad\xe4\xa6\x1c\x1d\x96\x12\x73\x63\xd5\x1c\xd8\x97\xd9\x01\x75\x78\x39\x6f\x26\x7f\x2c\x16\x73\x53\x2b\xce\x57\xab\x57\xcf\x9f\x76\xce\x3d\xb6\x96\xdf\xef\xab\xe7\x79\x65\xa5\x96\x2f\xa6\x1e\x5b\x8b\xf1\x10\xff\x73\x6a\xb5\xe0\xd4\xa2\x76\x07\x99\x89\x3b\xc5\x9c\x63\x9e\x7e\x50\x0b\x66\xc5\x4a\x67\x37\x3f\x38\xd9\x58\xf4\xb2\xed\x62\x39\x99\x3c\x8c\x21\xfb\xf7\x46\xca\x35\xa5\xe1\x9f\xd5\x72\x39\x7b\x1c\x7d\xf2\x07\xea\xfe\xf3\xf4\x97\xc6\x70\xbe\xd9\x42\x7e\x5c\xfa\xa9\xee\xbc\x7c\xdf\x9b\x97\xff\xa7\x33\xfd\x20\xdf\x0f\x9c\x78\xf6\xbe\x13\x2f\x4e\xfc\x9c\x44\x1f\x4d\xbe\xbf\x5f\xfe\x78\xa9\x57\x57\x57\xfa\xf6\xe7\xab\x5f\x7e\x9a\xce\x2f\x26\x67\x67\xff\x06\x00\x00\xff\xff\x80\x03\x11\xed\xc0\x0a\x00\x00" func runtimeSyntaxFortranYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxFortranYaml, "runtime/syntax/fortran.yaml", ) } func runtimeSyntaxFortranYaml() (*asset, error) { bytes, err := runtimeSyntaxFortranYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/fortran.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxFsharpHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2b\xce\x48\x2c\x2a\xe0\x8a\xd1\x4b\x2b\xb6\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\x47\x1c\xd5\x73\x0f\x00\x00\x00" func runtimeSyntaxFsharpHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxFsharpHdr, "runtime/syntax/fsharp.hdr", ) } func runtimeSyntaxFsharpHdr() (*asset, error) { bytes, err := runtimeSyntaxFsharpHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/fsharp.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxFsharpYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x94\xcd\x6e\x23\x37\x0c\xc7\xef\x7e\x0a\xc5\x6d\x91\x64\xd1\x49\x83\x6d\x81\x76\x73\x29\x16\x05\xfa\x06\xbd\xd4\x63\x14\x1c\x89\xf2\xb0\xab\xa1\x06\x12\xe5\x8f\x84\x7e\xf7\x42\x63\x3b\x6b\x27\xd9\x45\x7b\xae\x01\xcf\x68\x28\xf1\x4f\xea\x47\x4a\x9e\x02\xca\x6e\xc4\x07\xe3\x73\x0f\x69\x9c\xcd\x1c\x0a\x5a\x79\x98\x19\x63\x4c\x9d\x65\x18\xf0\xc1\xcc\xdb\xf6\xce\xe7\x5f\xbf\x9d\xcf\x66\xa9\x04\xcc\x87\xf9\xc6\x90\x43\x16\xf2\x84\x69\x5a\xd3\x2d\x3e\x36\x7f\x2e\x17\xf7\xcd\x07\x68\x1e\xff\x5a\x3e\xbd\xff\x7e\xdf\xb6\xdd\x7c\x5a\x6c\xcc\x37\x0e\x6d\x80\x04\x42\x91\xf3\x51\x20\x0b\x08\x0e\xc8\x72\xf0\xbf\x09\x28\xba\x86\xa0\x03\x4a\x1f\x9d\x12\x2b\xb0\xd3\x84\x56\xc7\x44\x6b\x10\xd4\x35\x25\x29\x10\xd4\x46\xce\x92\x80\x58\x6e\xcf\x63\x64\x49\xc5\x4a\x49\x68\x48\x70\x38\x85\x39\xec\x71\x8a\x50\x87\x1a\x47\x64\xb5\x01\x72\xd6\x21\xba\x12\x50\x71\x6b\x71\xac\x99\x29\x6e\x05\x13\x43\xb8\x90\x1d\x41\xaa\xf5\x4b\x69\xfb\xc2\xea\x0b\xdb\x49\x60\x1a\xc4\xa4\x03\x88\xed\x55\xd2\x4e\x37\x24\xfd\x9b\x72\xcd\x10\xdd\x84\xef\x4b\xc2\x90\x75\xd3\x23\x6b\xf4\x93\xbf\x39\x09\xd8\xc8\x8e\xbe\x06\x92\xbc\x4a\x75\xc4\x90\xf1\x22\x74\x17\xa2\x7d\x03\x4b\x87\x2b\x62\x45\x76\x1a\xbb\xbf\xd1\x8a\x1e\x40\x6a\xa6\x95\xfa\x98\x74\xd3\x53\x40\x75\x51\x5d\x64\x54\xa9\xef\x0d\x4b\xbc\x90\x9e\x4a\x02\x2c\x78\xd2\x3f\x19\xee\xba\x18\xc3\x89\x7f\x2a\xa8\x1e\x5e\xa6\x75\x28\x43\xfe\x61\x2a\xca\xb3\x40\x1e\xd1\x12\x9c\x5c\x89\x6d\x28\x0e\x95\xb8\xc7\x44\xa2\xc4\x24\x04\x81\x1e\x31\x5d\x68\xe1\x76\x4c\xe6\x15\xd9\x0b\x29\xc6\x8d\x26\xf4\x3a\x14\x81\x2e\xa0\x06\x78\xdc\x69\x8d\x9c\x44\x13\xd0\x8b\xe4\x3e\xe1\x6e\x13\x93\xcb\x66\xd3\x93\xed\x8d\x8b\x7c\x2d\x06\xb7\x94\xc5\x10\x9b\x68\x61\x08\x6f\x10\x85\x8c\xea\x30\xe0\xaa\xb6\x6d\xc5\x65\x21\xcb\xb1\xbd\xd4\x13\x43\x08\x3b\xf5\xb4\x45\xa7\xab\x10\x3b\x08\x4a\x1c\x88\xeb\xfe\x04\x93\x07\x7b\x1c\x31\x04\x0d\x28\x57\x3a\xe0\xd0\x61\xd2\x7a\x24\xf3\x58\xa7\xb9\x84\xa0\x71\x8d\x29\x91\xc3\xe7\x13\x32\x96\x2e\x90\xfd\xbc\x81\x8b\xac\x12\x4a\x49\xac\x87\xd7\x95\x66\x0c\x87\x62\x83\x90\xd5\x32\x4e\x29\x96\x8c\xf5\x7f\xa5\xeb\x48\x4e\x77\x84\xe1\xf8\xbc\x3a\x17\x7d\x2e\x6e\x96\x44\xbc\x7a\x38\xc2\x32\xb5\x15\x53\x6d\xc3\xeb\xf9\xb3\x09\xd9\x5d\x1a\xf2\x27\x1a\xa7\x8c\xda\xf6\xee\xb3\xf5\xec\x6e\x39\xfd\xce\xe3\x1c\x2a\xf8\x5b\x0f\xf5\xb6\xf9\xee\xcc\xef\xab\x0b\x6b\x8c\x05\x74\x9e\x93\xac\xaf\xdb\xb6\x9d\x0c\xcb\xff\xe0\x7c\xb3\xb8\x6f\x7e\x5e\x3e\xfd\xb8\xd7\xed\xe2\x63\xf3\x3b\x34\xfe\xbe\xf9\xb0\x7c\x7a\xbf\xd7\x72\xfe\xfd\xd3\x5e\xff\x38\xff\xfe\x65\x7f\xfb\xaf\x51\xb5\xf3\x97\xac\xce\x2d\xff\x37\x58\xc3\x74\x8f\xbd\x86\xd4\xde\xb4\xed\xbb\x57\xa0\xda\x77\x6d\x7b\xfb\x12\x8b\x59\x2c\x67\xff\x04\x00\x00\xff\xff\x83\x0b\x31\xb7\xdd\x06\x00\x00" func runtimeSyntaxFsharpYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxFsharpYaml, "runtime/syntax/fsharp.yaml", ) } func runtimeSyntaxFsharpYaml() (*asset, error) { bytes, err := runtimeSyntaxFsharpYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/fsharp.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGdscriptHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x4f\x29\x4e\x2e\xca\x2c\x28\xe1\x8a\xd1\x4b\x4f\x51\xe1\xe2\x02\x04\x00\x00\xff\xff\x52\x41\xa3\x8f\x10\x00\x00\x00" func runtimeSyntaxGdscriptHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGdscriptHdr, "runtime/syntax/gdscript.hdr", ) } func runtimeSyntaxGdscriptHdr() (*asset, error) { bytes, err := runtimeSyntaxGdscriptHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/gdscript.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGdscriptYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\xff\x4f\x1b\xc7\x12\xff\x9d\xbf\xc2\x8f\xe4\x3d\x42\xf2\x4c\xa3\x4b\xa5\xb6\xf4\xab\xc1\x41\x45\x6d\xc0\x05\xa7\x42\xc5\x28\x1a\xdf\xce\xd9\x5b\xf6\x66\x2f\xbb\x73\x80\x93\x0f\xff\x7b\xb5\x77\x87\x4d\x89\xa3\x54\xf9\xa9\x87\x98\x9d\xaf\x3b\x3b\x33\xfb\x59\x17\xd6\xb1\x2e\x2a\xde\xed\xcd\x4c\xcc\x83\xad\x74\x63\xc3\xb0\x72\xae\xbb\x1b\xbd\x5e\xaf\x97\xec\x42\x25\xef\xf6\x36\x27\x93\x9d\x99\x79\xbc\xb9\xb1\x11\x6a\xc7\xb1\x35\x3f\xea\xed\xd5\xd6\x69\xdf\x4a\x2f\xf7\x12\x95\x44\x63\x63\xe8\x2f\xe5\x26\x72\xfa\xe4\xf0\xe8\x00\x47\x83\x23\x8c\x0e\x31\x1e\xbc\xde\x9e\x4c\xa6\x9b\x0f\x1c\x77\xa6\xde\xbb\xce\x5b\x6a\xe7\xa0\xa1\x66\x14\xe4\x22\xaf\xdc\xef\x25\x2c\x6a\xc9\xd5\x7a\xb9\x4b\x68\x0d\x8b\xda\xc2\x72\xe8\x36\xa1\x69\x04\xe5\x3e\x82\xa2\x15\x90\x52\x4b\x32\xe4\x6c\x1d\x72\x47\x65\x85\xdc\xcb\x15\x07\x45\x72\xcb\x7d\x9c\xc3\x4c\x33\x67\x85\x29\xc0\x70\x6e\x4b\x72\x11\x86\x67\x59\x20\x03\xa6\xc8\xe0\x9b\x0a\x85\xf3\xa4\x89\xfa\x80\xa2\xf4\x06\x45\xe5\x63\x5a\xe7\x14\xe7\xb0\xa2\xb0\xd1\x4a\x01\x1b\x85\x04\x8e\x43\x85\x76\xcf\xcc\x4c\xe1\x3c\x19\x38\x3f\x43\x49\x37\x28\xad\x20\x19\x38\xea\x9b\xca\x67\xa8\xfc\x35\xaa\xc0\x8d\x4f\x15\xd2\x4e\x0d\xe5\x10\x5a\x26\xd0\x75\xcb\xc4\x76\x51\x04\x32\x99\xe1\x19\x02\x89\x79\x13\x48\x66\xdc\xb2\x91\xd9\x34\x9c\x2f\xed\xbb\x56\x67\x1b\x5a\xa0\xf3\xf2\xb5\x18\x34\x6e\xa9\x3d\xb1\x39\x66\x7c\x1b\x14\x51\x43\xfa\xcf\xae\x28\x20\x35\x2d\xdd\x0f\x5f\xe0\x8a\x42\x96\x4c\xd7\x4c\x97\x81\x8b\xb5\x33\x11\x6f\xb8\x97\xee\xcb\x47\x87\x32\x10\x5b\x52\x1a\xdb\xc8\xd1\x82\x03\x96\xf2\x38\x30\x77\xba\xbd\x5a\xd5\x0b\xf6\xbd\x68\xf0\x0e\x2f\x65\x66\x85\xf1\xf3\x78\x3c\xda\x77\x96\x45\x1b\xf6\x84\xdf\xd6\x1c\x15\x87\x52\xd5\x1d\x7d\x79\x95\x8c\xaf\xc8\xca\xaf\xde\x57\x38\xf2\x86\x1b\x92\x0d\x71\x7c\x8a\xd3\x9c\x85\x53\x16\x9c\x56\xa4\x96\x1c\x4e\x35\x30\x95\x23\xe6\x80\x11\xe5\x97\xac\x0f\xd8\xd7\xc3\x11\xc6\xb6\xe4\x80\xf1\x35\xb3\xdc\xaf\x78\xbc\xa8\x96\x35\xb6\xf8\x69\xab\x1b\xec\xed\x61\x10\x02\x2d\xb0\x47\xd1\x46\xec\x7b\xe7\x03\x86\xb6\xb9\xa9\x14\x16\xcd\x79\x46\xa4\x73\x1c\x4f\xff\xe4\x5c\x31\x72\x24\x8c\x91\xf7\x6e\x6f\xa1\xdc\x86\x26\xa9\x09\x5c\x89\x87\xa2\x2b\xe1\x84\xc9\xad\xa4\xdf\x39\x57\x1f\xb2\x87\x8a\x17\xad\xe2\xb7\x9a\x14\x27\x9c\x6b\x86\x93\xc3\x61\x2a\xd9\xca\x0c\xe3\x40\x12\x0b\x1f\xca\x15\x97\x0d\xd1\xed\xd4\xad\x2f\xee\xd7\x3b\xe4\xc2\x8a\xfd\x28\xdc\x12\x16\x7b\xe7\xd4\x7f\x37\xe8\xff\xf1\xe6\x79\xff\x9b\x8b\x67\x77\x81\xbf\xf0\xe2\xda\x07\x73\x17\x15\x95\x94\x4b\x5e\x3e\x0b\x24\x06\x94\x10\x1a\x13\x0a\xa7\x81\xe9\xb2\xa5\x95\x4f\xb7\x3f\x77\x14\x13\x30\x25\x26\x88\x8a\x5a\xa9\x19\xec\x6c\x01\x76\x09\x8c\x52\x97\x09\x91\x3e\x28\xf8\x46\x59\x4c\x44\x91\x40\x59\x4b\x0e\x5b\xc0\x0a\x6c\x44\x49\x15\x4a\x8a\xca\xa1\x5b\xe2\x42\x72\x94\xa4\xf9\x1c\xe2\x15\x5e\x02\x93\x59\xc0\x07\x54\x29\x5d\xe0\xd2\x2b\x77\x4b\xe3\x1b\x58\xeb\x20\x88\xec\x0a\x44\xd6\x19\x2b\xa2\xa3\x2b\x6e\x69\xe3\x12\xed\x4c\xc8\xa1\xe1\xd5\x7b\x97\xe0\x82\xeb\xb9\x75\x8c\x85\x65\x67\xda\x66\x76\x4d\x39\xae\x38\x90\xfa\xb0\xae\x2b\xe7\x3b\xbb\xdf\xfe\xff\xd9\x53\x7c\xff\x9f\xc9\xe4\xbf\x3f\x5d\xe0\x3b\xfc\x80\x2f\xd0\xc7\xff\x96\xd1\x23\x0a\x2c\x3a\xe7\xc8\x6b\xe3\x9f\x6c\xbf\xbf\xbd\xc0\x64\x72\x8e\xc9\xe4\x62\x19\x74\x54\x97\x53\x0e\xeb\x1f\xe7\xf3\x66\x62\xeb\x9e\x64\x69\xa2\xba\x59\xb5\x6e\x78\x7e\x93\x18\xea\x17\x83\xfe\xc1\xc5\xd3\x54\x17\xb6\x76\xb6\xba\x44\x29\xb6\x6c\x4e\xd2\x88\xe9\x8b\x4a\xa1\x49\xd4\xfc\x6d\x2e\xf5\x2c\x66\x8d\xf6\xde\x8f\xcb\xdd\xd7\xef\xa9\x37\x7e\xb7\xb7\xf9\x64\x7c\x3c\x3c\xc6\xd9\xd9\x19\x0e\x0e\xcf\x5e\xbd\xdc\xde\xfd\xf1\xd3\x59\xb7\xb6\xb6\x1e\xa6\xfc\x9b\xea\xb3\xf3\x75\x1d\x8a\x0d\xa0\xd6\x55\xfb\x61\xa5\x2b\x4d\xbc\xb4\x55\xd3\xd5\xc9\x64\xe7\x13\x67\x59\x65\xaa\x38\xb7\xe4\xf6\xe7\x14\xba\xd0\x34\x91\xaf\x2e\xde\xbf\xb8\xc5\xcd\xf9\xa0\x7f\x40\xfd\x22\x4d\xe8\x7d\x76\x8b\xfa\xbe\xfc\xe5\x2d\x5e\xdf\x97\xbf\xbe\xdd\xfe\xe7\x75\x7c\xd8\xbd\x7f\x65\x15\x1f\x99\xfe\xa3\x87\xa7\x7f\xfc\xf9\x93\xff\x2b\x00\x00\xff\xff\x87\x84\xe4\x7b\x2b\x09\x00\x00" func runtimeSyntaxGdscriptYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGdscriptYaml, "runtime/syntax/gdscript.yaml", ) } func runtimeSyntaxGdscriptYaml() (*asset, error) { bytes, err := runtimeSyntaxGdscriptYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/gdscript.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGeminiHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x4f\xcd\xcd\xcc\xcb\xe4\x8a\xd1\xd3\x48\xcf\xcd\xac\x81\xf0\x34\x55\xb8\xb8\x00\x01\x00\x00\xff\xff\xa1\xad\x1a\x4e\x18\x00\x00\x00" func runtimeSyntaxGeminiHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGeminiHdr, "runtime/syntax/gemini.hdr", ) } func runtimeSyntaxGeminiHdr() (*asset, error) { bytes, err := runtimeSyntaxGeminiHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/gemini.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGeminiYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xcf\x4a\xc4\x30\x18\xc4\xef\x79\x8a\x8f\xac\x07\x5d\x74\x41\xbc\x05\xdc\x17\xe9\x1f\x1a\x9a\x69\xfd\x30\x49\x6b\xf2\x15\x14\xf5\xdd\x25\x5b\xb6\xee\xa2\x97\x1c\x26\x33\xf3\x9b\x64\x60\x0f\xf9\x98\x61\x68\x44\xe0\xc8\x4a\x39\x08\x7a\x31\x8a\x88\xa8\xdc\x46\x1b\x60\x48\xd7\xf5\xe1\x76\x0c\xfc\xb5\xda\xee\x6e\xb4\x52\x69\xf1\xc8\xab\x91\x68\x47\x9e\xe3\x6b\x39\x90\x4f\xd2\x03\xf5\x53\xcc\x62\xa3\x18\xd2\xed\xf3\xb1\xaa\x4c\x9e\x6d\x0f\xd3\x34\x87\xbd\xde\x52\x73\xc2\x30\xa5\x60\x45\xe0\x48\xf0\x2e\x57\x15\x79\x46\xcf\xd6\x9f\x21\x44\x59\x6c\x3a\x15\x76\x5d\xa7\x37\x15\xd1\xfd\xd1\xd6\x75\x54\x35\x1b\xea\x05\xd6\x71\x1c\xff\x05\x10\xe9\x76\xf7\xf9\x78\xff\xf4\x7d\x39\x6e\x89\x53\x72\x48\x70\xe4\x39\x0b\xb1\x20\x9c\x83\xec\x10\x85\x07\x46\x2a\xe4\xba\xde\x5f\xbc\xef\xb7\xe0\x6d\x99\x04\xd7\x40\xb1\x82\x80\xf2\x2b\xa4\xdb\x63\xa1\xfd\x04\x00\x00\xff\xff\xd2\xe2\x43\x1e\x84\x01\x00\x00" func runtimeSyntaxGeminiYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGeminiYaml, "runtime/syntax/gemini.yaml", ) } func runtimeSyntaxGeminiYaml() (*asset, error) { bytes, err := runtimeSyntaxGeminiYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/gemini.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGentooEbuildHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x4d\x2a\xcd\xcc\x49\xe1\x8a\xd1\x4b\xd5\x00\xb3\x6a\x92\x73\x12\x8b\x8b\x35\x55\xb8\xb8\x00\x01\x00\x00\xff\xff\xc4\x91\x08\xd1\x1a\x00\x00\x00" func runtimeSyntaxGentooEbuildHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGentooEbuildHdr, "runtime/syntax/gentoo-ebuild.hdr", ) } func runtimeSyntaxGentooEbuildHdr() (*asset, error) { bytes, err := runtimeSyntaxGentooEbuildHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/gentoo-ebuild.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGentooEbuildYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x55\x5d\x73\xdb\xb6\x12\x7d\xf7\xaf\x60\x14\xcf\x0d\x99\x5c\x69\xf2\x1a\xdf\xdb\x6a\x54\x89\x8e\x35\x51\x2c\x8d\x24\x27\x6e\x83\x44\x05\x89\xa5\x88\x0a\x04\x58\x00\xb4\xec\xe4\xe4\xbf\x77\x40\x49\xce\x47\xad\xb6\x2f\xf5\x8c\x25\x61\xb1\xc0\x9e\x3d\x7b\x76\x51\x48\x45\xfe\xae\xa6\xb3\x88\xb2\x46\x2a\x71\x72\x22\xc8\x53\xee\xcf\x4e\xa2\x28\x8a\xc2\xae\xe6\x15\x9d\x45\x1d\xc6\x7a\x14\xb7\x2e\xc8\x15\x77\x2e\x39\xed\x9c\x9c\xd8\x46\x91\xdb\xb9\x3e\x8e\x06\x4a\x45\xbe\xa4\xc8\x79\xae\x05\xb7\x22\xaa\x8d\xf5\x7c\x4d\x51\xd1\xe8\xdc\x4b\xa3\x5d\xeb\xd8\x8d\xa4\x20\xed\x65\x21\xc9\x9e\x45\x9d\x0f\xce\xe6\xab\xb8\xd1\x35\xcf\x37\xc8\x4d\x55\x4b\x45\x90\xda\x79\xae\x14\x3c\x39\x9f\xe0\x43\xbd\x59\xaf\xe2\xdc\xe8\x42\xae\xa1\x4d\x41\x3e\x2f\xe1\xc8\x37\x35\xe2\xda\x12\x6a\xe3\x7c\x12\x87\x33\xb0\x55\x92\x74\xda\x30\x01\xd1\x85\x5c\x97\x4a\xae\x4b\x1f\x65\xdc\x95\x91\x25\xc5\x3d\x89\xc8\xdd\x69\xcf\x6f\xf7\x60\x9c\xe7\x9e\x2a\xd2\xbe\xcd\x31\x8b\x73\xee\x08\xc2\x40\x18\x4d\x20\x25\x0b\x90\x72\x04\x72\x3c\x07\xdd\x4a\x8f\x42\xa2\x30\x16\x87\xa4\x20\x0b\x48\x0d\x65\x72\xae\x60\x89\x0b\x58\xf2\x8d\xd5\x70\xa4\x28\xf7\x70\xa5\x2c\x3c\x7c\x49\x1a\x5e\x56\x84\x46\x7b\xa9\xb0\x2d\x43\x9a\xb9\xd1\x5e\xea\x86\x90\x59\xe2\x9b\x84\xb1\xac\xf3\x00\xaa\x98\xb1\x4f\x60\xec\x33\x18\x8b\xc1\x58\x02\xc6\xfe\x07\xc6\xde\x83\xb1\x77\xf8\x15\x8c\x31\x06\xc6\x4e\xf1\x7f\xfc\x88\x47\xf8\x01\xff\x01\x63\x48\x1e\xba\xa9\x1b\x13\x04\x0a\x58\xac\xd1\x60\x8b\x5b\x4c\x8e\x05\xed\xc6\xf4\x3b\x34\x61\xed\xa1\x3c\xd6\x04\x45\x70\xd0\xf8\xf8\xe5\xc0\xb7\x0c\xdf\x70\x2b\x79\xa6\xc8\x45\xbd\x5e\x2f\x32\x45\x21\x73\xc9\xd5\xbd\x06\x8c\x26\x17\x49\x1d\x59\x12\xff\x8d\xb8\x52\x91\xf1\x25\xd9\xd6\x94\xd9\xf6\x02\x4b\x62\x8f\xa3\xb6\x54\x5b\x93\xb7\x05\x39\x65\xec\x53\xff\x1d\xef\x7e\x1c\x74\x7f\x59\x3d\xef\xbe\x78\xff\x8c\xb1\xcf\xfd\x7b\xc4\x35\x85\x28\xfb\xd2\x0d\xe6\xc3\x0b\x5c\x4c\x5f\xa7\xb3\xc1\xcb\x14\xa3\x74\x31\x9c\x8f\x67\xcb\xf1\xf4\x12\xe3\xab\x45\x8a\xc5\x7c\xb8\xba\x9a\x8f\x31\x19\x0f\xd3\xcb\xb0\x9e\x4c\x97\x78\x95\xfe\xfc\x76\x3a\x1f\x2d\x70\x3e\x9e\xa4\x8b\xd1\x78\x8e\xb7\xd3\xf9\xab\xf0\x1d\xcf\x30\x4f\xfa\xa3\x74\x96\x5e\x8e\x30\x9b\x4f\xdf\x8c\x47\x29\x46\xe3\xc5\x32\x6c\xce\xd3\xc5\x72\x3e\x1e\x2e\x71\xb5\x48\xe7\x93\xc1\xe5\xe8\x1b\x1e\xbf\x41\xb5\xc0\x08\x4b\xcc\xde\x60\x76\x8e\x19\x66\x97\x18\x04\x5f\x30\x96\x0d\xe3\xeb\xeb\xa4\x7f\x3e\x19\xbc\x5c\xec\x2d\x93\xd1\xd7\xab\x61\x7c\x31\x5d\x2c\xb1\x1c\xcc\x5f\xa6\x4b\xfc\x74\x35\x9e\x8c\x8e\xb1\x7f\xa0\x39\x37\x55\xc5\xb5\x78\xb0\xd3\x18\xcb\x1a\x47\xf1\x2a\xde\x4a\x5f\x82\x74\xa8\x56\x92\xf4\x19\xcb\xa2\x77\x8f\x76\x0c\x3f\xef\xbe\x58\x3d\x8b\xba\xef\x9f\x42\xea\x92\xac\xf4\xbd\xa7\x0f\x89\x83\xb1\x8c\xe2\x8c\xd6\x52\x83\xb4\x08\x32\x2e\xee\x5b\xb6\xe2\x1b\xc2\x96\x5b\x0d\xa9\x0b\xa3\xfb\x20\x6b\x8d\x85\x32\x6b\xd4\x3c\x34\xae\xa6\x6d\xbc\xb6\xa6\xa9\xd1\x38\xb2\xc9\x31\x01\x32\x96\x09\x49\x7b\x26\x8e\xe0\x0e\x5b\x7b\xa0\xfb\x55\xc9\xdd\xfe\x57\x5c\x72\x87\x2c\xcc\x8f\xd5\x0d\x59\x27\x8d\x3e\xdc\xd5\x8e\x9a\xe3\x51\x63\x61\x02\xc6\x76\xa0\xc0\xf5\x33\xa9\x21\x4c\x0e\x25\xb3\x98\xb1\x9e\x33\x60\xac\xc7\x13\x54\x7c\x97\x21\xe8\x36\xcc\x2b\xe9\x77\x3c\x08\x90\xbe\x11\xa8\x79\x85\x8a\x74\x03\x99\x1b\xfd\x57\x29\x9a\xb8\xbe\xf3\xa5\x09\xe3\x42\x40\x48\x8b\x92\x5b\x01\x77\x57\xa1\xf4\x95\xc2\x6f\xdc\xa2\x32\x07\xc1\x6c\x88\x6a\x21\xed\x91\xeb\x42\xdb\x70\xa5\x62\x61\x72\xb7\x83\x16\x30\x3a\x6f\x65\x9d\x20\x6c\xc6\xad\x51\xc9\x2c\xfc\x33\xd6\x8b\x9d\xc1\x3e\x93\x9d\xd7\x71\x46\xf2\x50\xdf\x90\x6a\x22\xb5\x37\x7b\x38\x45\x6c\xb6\x9a\xac\x43\x4d\xb6\x72\x07\x90\xf1\x8e\x10\x17\xb2\x49\x4c\xed\xdd\x11\xc9\x06\xa9\x1a\x7d\xaf\xd8\xa8\x71\x24\xc2\x38\xd8\xbd\x43\x07\x05\xef\xde\xa6\x80\x22\x08\xeb\x10\x22\xe7\x1e\xb9\x40\x5e\x56\x26\x7c\x9a\xad\x46\x5e\x83\xf2\xd2\x04\xfa\x41\xb7\xa1\x1f\xb0\xb6\x54\x43\x91\x87\xd2\xa8\x36\x81\xdc\xea\x06\xb6\x6a\xa9\x76\xe4\xe1\xb9\x85\x37\x4d\x5e\xa2\xd1\x8e\xfc\xae\x4c\xfb\xb8\xb9\x09\x7a\xd6\xbe\x17\x98\xd1\xeb\xb3\x7d\x02\x51\xe0\xc6\xb6\xbc\x74\x3a\xf7\x36\xd2\xe2\x3b\x8b\xdb\xc8\xba\x85\xcd\x58\xef\x8b\xf5\xab\xe7\xf2\xf0\xf7\x75\xa4\xdd\xd8\x18\x96\xdc\x7e\x39\xfa\x4f\xe1\x3c\xf9\x1e\xcd\x93\x7f\x13\x4c\xd5\x8a\xe3\x4f\x20\x1e\x7f\x0f\xe2\xf4\x6f\xc2\x79\x23\x4c\x78\xe1\x96\xd3\xd1\x14\xd7\xd7\xd7\x38\x1f\x5f\xbf\x4e\x93\xb3\x7e\xe7\xe4\xe4\x8f\x00\x00\x00\xff\xff\xe2\xea\x68\x25\x9a\x08\x00\x00" func runtimeSyntaxGentooEbuildYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGentooEbuildYaml, "runtime/syntax/gentoo-ebuild.yaml", ) } func runtimeSyntaxGentooEbuildYaml() (*asset, error) { bytes, err := runtimeSyntaxGentooEbuildYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/gentoo-ebuild.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGentooEtcPortageHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2d\x49\xd6\x2d\xc8\x2f\x2a\x49\x4c\x4f\xe5\x8a\xd1\xd3\xc8\x4e\xad\x2c\xcf\x2f\x4a\x29\xae\xc9\x4d\x2c\xce\xae\x29\xcd\x83\x50\xc5\xa9\x9a\x1a\xfa\x7a\xda\x9a\xf6\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x90\x22\x80\x75\x31\x00\x00\x00" func runtimeSyntaxGentooEtcPortageHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGentooEtcPortageHdr, "runtime/syntax/gentoo-etc-portage.hdr", ) } func runtimeSyntaxGentooEtcPortageHdr() (*asset, error) { bytes, err := runtimeSyntaxGentooEtcPortageHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/gentoo-etc-portage.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGentooEtcPortageYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x92\x5b\x8b\xdb\x3e\x10\xc5\xdf\xfd\x29\x84\x93\x87\x5c\x90\x77\xe1\x1f\xc2\x7f\x45\x2e\x2c\xfb\xda\x3e\xf6\xa5\xb6\x5b\xc6\xf2\xc4\x11\x91\x25\xa1\x51\xda\xa6\x0c\xfb\xd9\x8b\x9b\xcd\x85\x65\xa9\x61\x30\x33\xe8\x77\xce\x61\x98\x9d\xb1\x98\x4e\x01\x95\xc0\xa4\x65\xf0\x31\x41\x87\x59\xd6\x62\x42\x9d\x54\x26\x84\x10\xc3\x13\x07\x3d\x2a\x91\x57\x55\x31\x39\xe0\xe9\xa7\x8f\x2d\x71\x0f\x74\xe0\xa3\x3b\xff\x08\xa7\x93\x87\x62\x3e\xdd\x8e\xf3\x2c\x8b\x47\x8b\x74\x86\x47\xe2\x0b\xa1\xd8\x59\xe8\xde\x06\x52\x68\xef\x28\x81\x4b\x45\xe3\xbd\x2d\x76\x60\x69\x90\x2e\x4b\x45\x01\x34\xaa\xba\x9e\x57\xd5\x7c\x5b\x82\xfc\xfd\x2c\xbf\x3e\xca\xa7\xef\xb2\x9e\xe7\x1f\xb2\x29\x1e\xdf\xa3\xf2\x23\x6e\x24\x3e\x99\x03\xda\x93\xf8\x81\x91\x8c\x77\xc2\x1d\xfb\x06\xe3\x35\x11\x05\xd4\x06\xac\x12\xb9\x2c\x4b\xd5\x9a\xce\x24\x55\xd7\xc5\x6c\x72\xa7\xcc\xe3\xe9\x45\xec\x59\x6b\x0c\x09\x5b\x01\x51\xef\xf1\xaa\x62\x5a\x74\xc9\xec\x0c\xc6\x42\x5b\x20\x1a\x92\xbd\xca\x7a\x5b\x55\xcd\x04\x6c\xd8\x03\x43\xdf\x2e\x17\x0c\xb1\xe7\x7d\x08\xc0\x06\x96\x0b\xee\x4d\x20\x0e\x41\x0f\xb5\x5c\x30\xfd\xf7\xf4\xc8\xb4\x67\x0a\x10\x35\xff\xfa\x7f\x39\x94\xdc\x35\xd4\x4e\xab\xaa\xc9\xff\x61\x75\x8b\xfa\xe6\x3a\xbb\xe4\x7d\x81\x84\x9d\x8f\xe6\x16\x95\x12\x24\xec\xd1\x25\x25\xf2\x6f\x77\xe4\xac\x98\x3d\x5c\xa8\xcf\x40\x07\xe3\x3a\x11\xb1\x3b\x5a\x48\xfe\x6e\x5d\xa7\xbe\xf1\xf6\x3d\x3a\x59\xf3\x2b\xaf\x78\xb5\xe6\xf5\x8a\x37\xbc\x59\xf3\x7a\x73\x5d\xd9\x8b\xef\x07\xbb\xbb\x1b\xf8\xdb\x9f\xdb\xe1\xa3\x04\x71\x48\x33\xca\xaf\x23\x74\xad\x12\xf9\xf8\x36\x38\x9f\x95\x28\xeb\xec\x4f\x00\x00\x00\xff\xff\x7c\x89\xb4\x8b\xb6\x02\x00\x00" func runtimeSyntaxGentooEtcPortageYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGentooEtcPortageYaml, "runtime/syntax/gentoo-etc-portage.yaml", ) } func runtimeSyntaxGentooEtcPortageYaml() (*asset, error) { bytes, err := runtimeSyntaxGentooEtcPortageYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/gentoo-etc-portage.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGitCommitHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcf\x2c\xd1\x4d\xce\xcf\xcd\xcd\x2c\xe1\x8a\xd3\xd0\xd3\x8a\x8e\xd1\x8f\xd5\xb4\xd7\x70\xf6\xf7\xf5\xf5\x0c\x89\x77\x75\xf1\x0c\xf1\x0d\x76\xaf\x09\x71\x74\x87\xb1\x35\x55\xb8\xb8\x00\x01\x00\x00\xff\xff\x2e\x11\x61\xbe\x34\x00\x00\x00" func runtimeSyntaxGitCommitHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGitCommitHdr, "runtime/syntax/git-commit.hdr", ) } func runtimeSyntaxGitCommitHdr() (*asset, error) { bytes, err := runtimeSyntaxGitCommitHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/git-commit.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGitCommitYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x54\x4d\x6f\x9b\x40\x10\xbd\xf3\x2b\x46\x24\x52\x20\x11\xb4\xd7\x72\xb1\xaa\xf8\x43\x96\xea\xfa\x50\x5f\x2a\xc0\xd5\xc2\x0e\xb0\xea\xb2\x8b\xf6\xc3\x49\x24\x7e\x7c\xb5\x60\x6c\x2b\x4a\x55\x54\x4e\xec\xe8\xcd\x7b\x6f\x86\xb7\x54\x8c\xa3\x79\xeb\x30\x81\x9a\x99\xa8\x94\x6d\xcb\x8c\xe7\x51\x34\x58\x9a\xc4\x03\x00\x70\x08\x41\x5a\x4c\xc0\x3f\x06\xf1\x63\x9a\x65\x9f\xf2\x70\x11\x3c\xef\x77\xbb\xed\xe1\xd7\x6a\xb9\x3d\xec\x7e\x6c\xfa\xc3\xd7\xcd\xf4\x1e\xde\xfb\x9e\xa7\x2c\x47\x3d\x12\xdc\xc1\x9a\x71\x84\xb2\x21\xa2\x46\x3d\x94\x22\x70\x9a\xf1\x6f\x7c\x7b\x91\x8a\x26\xe0\xdf\xa5\x69\xa2\x3b\x52\x62\x92\xe7\x01\x45\x8e\x06\x69\xdf\x4a\xca\x2a\x86\xb4\x17\xf8\x32\xd8\xe8\xd5\xe0\x84\x86\xc9\x0d\x3c\x7e\xf4\xff\xcd\x79\xa6\x4c\x66\x40\x27\xd5\x39\xd8\xc9\xd8\x1c\xec\xd9\xfb\xdf\xa0\xc7\x5b\xec\xf3\xb8\xab\xf8\x31\x4d\xf2\x39\xf8\x9f\xd2\x2a\x28\x14\x11\x65\x03\x44\x50\x78\x48\x8f\x0f\xf9\xd3\x7f\x75\xce\x69\xda\x8b\xa9\x25\x3d\xc2\x3c\x9d\x4b\x8b\x7f\xce\xc4\xb3\xe4\x52\xc1\x19\xad\xa1\x92\x0a\x4a\x2e\x35\x13\x35\x30\xad\x2d\x6a\x08\xb4\x75\xa6\x34\x48\x01\x1b\x66\x1a\x5b\x84\x1f\x0b\x65\x59\x11\x2c\x58\x18\x04\x15\x7b\x0d\x50\xf7\x48\xc3\x45\xef\xc8\x30\xd0\x3d\x0d\x17\x21\xdc\xa5\x9f\xa3\x2f\xf9\x53\x98\x65\x85\xef\x5d\x0c\xb4\x2d\x0a\x33\x05\xb2\x1c\x8f\x31\x67\x02\xc7\xdc\xba\x47\x1b\xa2\xcc\x30\x8b\x7f\xa9\xa1\x70\xa2\xf7\xd7\xc2\x98\x75\x48\xf3\x89\x7a\xc9\xaa\x4a\x43\xc0\x62\x8c\xdd\xb5\x82\xf1\x5a\x41\x14\x9d\x50\x15\x52\xe3\x34\x07\xc5\x8a\x58\x6e\x3e\x90\xa3\xac\xaa\x20\x8a\x6a\x66\xae\x32\x23\x2f\x48\x6b\x3a\x6b\xa0\xb3\x46\x03\x81\x61\xbf\x50\x60\x25\x15\x0e\x51\x84\x52\x0a\xe3\xe6\x72\x6b\x43\x52\x36\xe0\x26\x02\x2d\xc1\x34\x4c\xdf\x90\xe9\x46\x5a\x4e\x41\xe0\x09\x15\xb4\xc4\x94\x0d\x9c\x08\x67\x14\xe8\x8d\x8a\x8b\x04\xbe\x1a\x14\x14\x1a\x56\x37\x9c\xd5\x8d\x71\x9f\xc8\x38\x3a\xbc\x61\x73\x08\x59\xb9\xe2\xe0\xe2\xdd\xb2\x8e\xab\xef\xcb\xfd\x7a\xbd\xfd\xb6\xba\x8e\xc3\x59\xcb\x4c\x54\x2b\x69\xbb\x04\xfc\x96\xd4\x28\x0c\x79\xbf\xd4\xcb\x71\x5c\x18\x13\x25\xb7\xd4\xfd\x8a\x3a\x67\xd8\xf7\xfe\x04\x00\x00\xff\xff\x8b\xd7\x0c\xa4\xbf\x04\x00\x00" func runtimeSyntaxGitCommitYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGitCommitYaml, "runtime/syntax/git-commit.yaml", ) } func runtimeSyntaxGitCommitYaml() (*asset, error) { bytes, err := runtimeSyntaxGitCommitYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/git-commit.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGitConfigHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcf\x2c\xd1\x4d\xce\xcf\x4b\xcb\x4c\xe7\x4a\xcf\x2c\xd1\x80\x30\x6b\x72\xf3\x53\x4a\x73\x52\x8b\x35\x55\x6a\x62\xf4\xd2\x33\x4b\xf4\x21\xc2\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x4b\xff\xb8\x40\x2f\x00\x00\x00" func runtimeSyntaxGitConfigHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGitConfigHdr, "runtime/syntax/git-config.hdr", ) } func runtimeSyntaxGitConfigHdr() (*asset, error) { bytes, err := runtimeSyntaxGitConfigHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/git-config.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGitConfigYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\xd1\x6a\x84\x30\x10\x45\xdf\xf3\x15\xc3\x54\x50\x03\x6b\xdf\x43\xb7\x3f\x92\x89\x10\x74\x94\x50\x8d\x8b\x99\xa5\x2c\xe4\xe3\x4b\x70\x59\x29\x6d\x1e\x4f\xce\x5c\xee\x9d\xc2\xc2\xf2\xb8\xb1\x81\x39\xc8\x65\xd8\xe2\x14\x66\xa5\x46\x16\x1e\xc4\x28\x00\x80\x62\x44\xbf\xb2\x01\x9c\x83\x34\x87\x92\xd7\x6d\xbc\x2f\x9c\xda\x2a\x13\x75\x73\x90\xf7\x83\x57\xa8\xd4\x5e\x3e\x8e\xdb\x0b\x0c\x5b\x4c\xe2\xa3\x18\x40\xa2\x8f\x46\xf6\x3b\xe7\xc9\x2f\x89\x5b\xa2\x4f\x7c\x4a\xa5\x40\xf7\xc5\x8f\xef\x6d\x1f\x0d\x60\x6f\xad\x49\x37\x3f\xb0\x71\x4e\xdb\xfe\xea\xf4\x15\xff\xc6\xfd\xb2\x88\x6c\xa7\x89\x5c\xf5\x8f\x48\xd8\x10\x11\x75\xd9\xf6\x84\xae\xd5\x84\xb9\x7e\x91\xda\xb5\xba\x3e\x8f\xd6\x95\xe3\x73\x77\x79\x49\xfc\x5e\x22\xde\xf0\x85\x38\x96\x8a\xd5\x09\x8e\xb9\x60\x9d\xfa\x09\x00\x00\xff\xff\x9d\x79\x43\xdc\x4c\x01\x00\x00" func runtimeSyntaxGitConfigYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGitConfigYaml, "runtime/syntax/git-config.yaml", ) } func runtimeSyntaxGitConfigYaml() (*asset, error) { bytes, err := runtimeSyntaxGitConfigYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/git-config.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGitRebaseTodoHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcf\x2c\xd1\x2d\x4a\x4d\x4a\x2c\x4e\xd5\x2d\xc9\x4f\xc9\xe7\x8a\xd3\xd0\xd3\x8a\x8e\xd1\x8f\xd5\xb4\x4f\xcf\x2c\x89\x81\x4a\xc5\x80\xe5\x54\xb8\xb8\x00\x01\x00\x00\xff\xff\xef\x2d\x8f\x29\x2e\x00\x00\x00" func runtimeSyntaxGitRebaseTodoHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGitRebaseTodoHdr, "runtime/syntax/git-rebase-todo.hdr", ) } func runtimeSyntaxGitRebaseTodoHdr() (*asset, error) { bytes, err := runtimeSyntaxGitRebaseTodoHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/git-rebase-todo.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGitRebaseTodoYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x90\x41\x6f\xe3\x20\x10\x85\xef\xfe\x15\x23\x27\x07\xd8\x5d\x67\x73\xa8\x54\xd5\x17\x0e\xad\x54\xf5\xda\x6b\x70\x25\x6c\xc6\x09\x8a\x0d\x2e\x8c\x55\x47\xa5\xff\xbd\xc2\x76\x52\xa9\xdc\x78\xcc\x7b\x6f\xf8\x5a\xd3\x21\x5d\x06\x2c\xe1\x68\xa8\xf0\x58\xab\x80\x05\x39\xed\xb2\x4c\x23\x61\x43\x65\x06\x00\x90\xc6\xac\xea\xb1\x84\xfc\x8d\xed\xfe\x1c\xa4\xfc\x5f\x71\x71\x34\x24\xe5\x6a\x92\x72\xb6\x6d\xf3\x2c\xf3\x63\x87\x61\xf1\x6d\xe0\x75\x7e\x85\xc6\xf5\xbd\xb2\x3a\xcc\x6a\x01\x81\x14\x61\x8f\x96\xe6\xc0\x81\x99\xe6\xcc\x45\xf4\x0c\x3f\x9c\xd7\x5c\x44\x64\xda\x10\x17\x31\xb0\xf7\x51\x85\x13\x17\xb1\x65\x66\x1a\x07\x2e\xe2\x14\x71\xc2\x26\x6a\xe6\xdd\xc0\x05\x97\xb2\xce\xd7\xaa\x47\xd7\xf7\x86\xe0\xe5\xe9\xda\x62\x34\x5a\x32\xad\x41\x5f\x42\x2e\x65\xcd\x0e\xfb\xe2\x41\x15\x6d\xf5\x79\xff\xef\x6e\xff\xb5\x78\x6f\xe6\xce\x79\x38\xe3\x25\x6d\x10\xa0\x75\x1e\x9e\x0d\x9d\xc6\x1a\x98\xb2\x1a\x1c\x9d\xd0\x07\xbe\x06\x27\x62\xbb\x75\x76\x8d\x16\x86\x33\xd6\x9a\x89\x61\x88\x98\xbe\xd0\x74\x2e\x20\x0b\x51\x73\xc1\x61\x93\x9a\xab\xbf\xbf\x1a\xfb\x44\xe0\xba\x6c\xb3\x5c\x77\x9d\xb1\xb8\xc0\x4b\x27\x90\xf2\x33\xa4\x4d\x7e\xd3\xd0\xa6\xd2\xed\x8f\xb0\x00\x87\x43\x95\x7d\x07\x00\x00\xff\xff\x8f\x8c\x0f\x68\xcf\x01\x00\x00" func runtimeSyntaxGitRebaseTodoYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGitRebaseTodoYaml, "runtime/syntax/git-rebase-todo.yaml", ) } func runtimeSyntaxGitRebaseTodoYaml() (*asset, error) { bytes, err := runtimeSyntaxGitRebaseTodoYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/git-rebase-todo.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGlslHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcf\x29\xce\xe1\x8a\xd1\xd3\x48\x2b\x4a\x4c\xaf\x29\x4b\x2d\x2a\xa9\x49\x2b\xa8\x29\x2b\xa8\x01\x89\x6b\xaa\x70\x71\x01\x02\x00\x00\xff\xff\x9c\x66\x9c\x6e\x20\x00\x00\x00" func runtimeSyntaxGlslHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGlslHdr, "runtime/syntax/glsl.hdr", ) } func runtimeSyntaxGlslHdr() (*asset, error) { bytes, err := runtimeSyntaxGlslHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/glsl.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGlslYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x93\x4f\x6f\xd3\x4c\x10\xc6\xef\xf9\x14\x7e\xad\xbe\x28\x75\xe5\x24\x24\xbd\xd4\x02\xaa\x42\xe8\x89\xaa\x15\x85\x0b\x59\x13\x8d\xed\xb1\xb3\x62\xbd\x6b\xed\x8e\x53\x82\x46\x7c\x76\xe4\x75\xfe\xd1\x20\x24\xf6\x30\x9a\xf9\xf9\x19\x3f\xb3\x5e\x6f\x29\x15\xd2\xa6\xc1\x24\xa8\x94\x53\x83\x41\x81\x84\x39\x25\x83\x20\x08\x82\xee\x99\x86\x1a\x93\x20\x14\x62\x34\x2c\x2d\x54\xbc\x46\x4b\x5c\x36\xbc\x6e\xb8\x6b\x38\x3f\x0b\x07\x03\xdb\x2a\x74\x7d\x4b\x1c\xc8\x02\x35\xc9\x52\xa2\x4d\x82\x70\x71\x13\x7f\x81\xf8\xc7\x32\xdd\x26\x93\xf8\x6a\x99\x46\x8b\x45\xe2\x1a\xc8\x31\x49\xd3\x68\x31\x3c\x4f\xc3\x6d\x6b\x3f\x47\x28\x44\x36\x5c\x1b\x59\x70\x66\x8c\xe2\x6c\x8d\xf9\xd4\xc7\x99\x8f\x97\x2c\x35\xb1\xf4\x54\x7a\x2a\x3d\x2d\x95\x01\x62\x8f\x3d\xf5\xb0\x06\x9a\x76\x61\xd6\x85\x4b\x76\x64\xdb\x9c\xd8\x41\xdd\x28\xb4\x2f\xe7\xbb\x6c\xba\xcf\x66\xfb\xec\xdd\xe7\xb7\xef\x0f\xca\xc7\x15\x14\xe6\xe9\xa0\xef\xeb\x73\x21\xb2\xf0\x4f\xfb\x16\x22\xab\xd4\x72\x38\xc7\x86\x56\x1f\x41\x57\xf8\x00\x16\x6a\x24\xb4\x8e\x1f\x8c\xd4\x74\x54\xdf\x01\xa1\x95\xa0\x8e\xd0\x07\x59\xad\xe8\xd1\xb4\x36\xc7\xe7\xf4\xce\x14\x78\x22\xed\xa1\x35\x45\x9b\xd3\x16\xed\xab\x5b\x53\x1d\xe4\xc7\x03\x3b\x02\xc2\x1a\x35\x6d\x3f\x79\x6e\xb4\x23\x06\x22\x2b\xb3\x96\x90\xd7\x60\x37\x52\x57\xdc\x6a\x59\x1a\x5b\xb3\xd4\x6c\x5a\x62\xa9\x7d\x2c\x19\x95\x43\xb6\x48\xad\xd5\x5c\x48\x97\x83\x2d\xf8\x69\x25\x15\x72\x69\x2c\x17\xe6\x6f\x5e\x99\x45\xf8\xc6\xb9\xd1\x24\x75\x8b\xc7\x4a\x3f\x05\x68\x1a\x75\x87\xbf\x55\x93\x6d\x91\x4b\x50\xee\x37\xa5\xdb\xd4\x99\x51\x23\xd3\xa0\x05\x32\xfe\x6f\x8b\x2f\xc6\xd1\xeb\x57\x6f\xae\x93\xff\x7e\xfe\xff\x82\xbf\xa6\x27\x2f\xd5\x6d\x9d\xed\x0e\x68\xb8\x98\xc4\x57\xe9\x05\x4f\xbe\x77\x09\xc4\xe5\x4d\x7c\x9b\x46\xbd\xc3\xbe\xaf\xee\x87\xf6\x75\xb7\x1c\x81\xed\x36\x31\x1e\x87\x7b\x86\xba\x48\x82\xf0\xec\x00\x8e\xee\xc3\x6e\xc5\x01\x99\xc2\x24\x41\xf8\xe9\x7e\x7e\x9f\x5c\x9f\x38\x9c\x1a\x08\x11\x3d\xb7\x10\x22\x1a\xff\x9b\xcb\xaf\x00\x00\x00\xff\xff\xb8\x3f\xae\xfa\xde\x03\x00\x00" func runtimeSyntaxGlslYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGlslYaml, "runtime/syntax/glsl.yaml", ) } func runtimeSyntaxGlslYaml() (*asset, error) { bytes, err := runtimeSyntaxGlslYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/glsl.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGoHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcf\xe7\x8a\xd1\x4b\xcf\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\xe7\x61\x51\x76\x0a\x00\x00\x00" func runtimeSyntaxGoHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGoHdr, "runtime/syntax/go.hdr", ) } func runtimeSyntaxGoHdr() (*asset, error) { bytes, err := runtimeSyntaxGoHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/go.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGoYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x94\x41\x6f\xe3\x36\x10\x85\xef\xfe\x15\xac\xba\x5b\x5b\x4e\x2d\xef\x66\x83\x34\x15\xba\x0d\xb6\xdb\x06\xe8\xa1\xdd\xcb\x16\x30\x60\xba\x08\x45\x8d\x64\xc2\x14\x49\x50\xa3\x38\x46\xc6\xfd\xed\x05\x25\x25\x51\x1c\x20\x49\x73\xac\x4f\xe6\xe8\xcd\x1b\xbe\x4f\xa4\x0a\xa5\x01\x77\x0e\x52\x56\xda\xd1\x28\x07\x04\x89\xe9\x88\x31\xc6\xc2\x13\x23\x2a\x48\x59\xc4\x79\x52\xda\x37\xd1\x68\xe4\x1b\x0d\x75\xf7\xf8\x5b\xf6\xd9\x9a\x5c\xa1\xb2\x46\xe8\x9a\x09\x93\x33\x69\x0d\x7a\xab\x59\xa1\xed\xb6\xd5\xcc\x58\xed\x40\x2a\xa1\x5b\x8f\x6c\x92\x79\x10\x1b\x92\xa2\x06\x0a\x5a\x65\x1a\xa0\x1c\x0a\xd1\x68\xa4\xd2\x52\x69\xd1\x92\x17\xa6\x04\xf2\x80\x8d\x37\xe4\xbc\x32\xa8\x0d\x15\x42\x6b\x5c\x7b\xdb\x94\xeb\x98\xf3\x2c\xba\x75\x47\x81\x50\x81\xc1\xde\x1f\x74\x0d\x54\x58\x4f\xaa\xa0\x7a\xab\x50\xae\xa9\x06\x0d\x12\x87\x4d\xce\x83\xf3\x56\xf6\x2d\x4e\xc8\x8d\x28\x81\x54\xe5\xac\xc7\xb0\xad\x1a\xe9\x4a\x78\x0a\x50\xa8\x46\xdf\x48\xa4\xa2\x31\x32\x6c\x14\x3c\x29\x8b\x82\x2a\xb1\x01\x32\xb0\x25\x69\xdd\x8e\x34\x18\x92\xc2\x91\x13\x46\x49\x12\xce\x81\xc9\x49\x6a\x5b\x87\x70\x1a\x10\xba\x18\xe4\x41\xda\x2b\xf0\x0f\x02\xec\xaa\xcc\xea\xc4\x3a\xf0\x02\xad\x4f\x59\xb4\x9c\x1d\xcd\xa7\x1f\x7f\xfa\xf9\x9b\x7f\xde\x7e\x47\x7f\xaf\x28\xfd\x18\x8d\x5a\x71\x20\xfe\x75\xe7\xa0\x7e\xd0\x9a\xb2\x68\xf2\x3d\x71\x9e\xc4\xb7\x96\xdd\xcb\x6c\xb3\x35\xe7\xca\xe0\xe4\x8c\xde\x9f\xd2\x87\x63\x3a\x3d\x89\xcf\xa9\xd0\x56\xe0\xa4\x5b\x91\xb4\x95\xd3\x70\x3d\x39\x3d\xa1\xf7\xc7\x67\xf1\x70\x63\x43\x17\x65\xd0\xa1\xa7\x6c\x87\x40\xbe\x31\x2d\x15\x65\x4a\x52\x06\xc1\x17\x42\x02\x65\xd6\x6a\xaa\x84\x23\xb9\x16\x86\xc0\x7b\xeb\x0f\xcd\x92\x0d\xec\xb6\xd6\xe7\xbd\x69\x07\x76\x28\x6a\xc9\x0b\x83\x49\x30\xeb\x55\xe8\x1b\x08\xef\xbe\x06\x32\x4a\x77\xea\x3b\x18\xbf\x78\x21\x37\x80\x0f\x79\x24\x59\x5f\x0d\x60\x38\xbf\x21\xce\xf7\x71\xf4\x94\x64\x42\x9c\xc7\x4f\x4b\x96\xc4\xf9\x2a\x1e\x8c\xfe\xb3\xa9\x32\xf0\xdd\xa1\xef\x60\xd4\x87\x29\x4c\x2b\xe9\x73\x2c\xdf\xcd\x7e\x5c\x1d\xd1\xbb\xeb\xf0\x47\xcc\x8a\x4f\xb3\x8b\xd5\x34\xc4\xa1\x71\x32\xee\x7d\x07\xbd\x9d\x65\xda\x8f\x63\xe1\x98\xfb\xf6\x88\x47\xd1\x5d\x0d\x4c\x7e\x50\xa9\x37\xca\xb5\xf3\x38\x4f\xee\xab\x83\x1b\x7b\xfb\x1b\x4e\xea\xae\xe7\xe7\xb5\x08\x5b\x7d\x3b\xe8\x7b\x52\x18\x66\x2c\x45\x56\x18\x8f\x57\x63\xce\x79\x5b\x58\xfd\x87\xe6\x40\xe4\x87\xd5\xcd\x87\x3d\x5d\x2f\x3f\xcd\x2e\xc4\xac\x08\x84\x6e\x8e\xf7\xd4\x0c\xd7\x27\x7b\xfa\x6b\xb8\x3e\xdb\xc7\x2f\xa7\x35\x3e\x84\x35\x7e\x15\xab\xf6\x34\xa7\x2c\x4a\x92\xa3\x17\x06\xfc\x7f\x61\xbc\x3c\xc4\x78\x79\x08\x8c\x2d\x57\xf7\x6e\x55\xfb\x39\x7e\xe4\x32\x9f\x1f\xda\xbc\x79\x86\x3b\xda\xdc\x86\xeb\xf7\xf5\xcb\xaf\x5f\x68\xb1\x58\xd0\xc5\xef\x8b\x3f\x7e\x8b\xd3\xf3\xe8\xf9\x61\x9c\x4f\x1f\xdd\x14\x3e\x9d\xbf\x7e\xe2\xbf\x01\x00\x00\xff\xff\x62\x86\xdc\xce\x26\x07\x00\x00" func runtimeSyntaxGoYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGoYaml, "runtime/syntax/go.yaml", ) } func runtimeSyntaxGoYaml() (*asset, error) { bytes, err := runtimeSyntaxGoYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/go.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGodocHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcf\x4f\xc9\x4f\xe6\x8a\xd1\x03\xd3\x2a\x5c\x05\x89\xc9\xd9\x89\xe9\xa9\x7a\x5a\x99\xb9\x05\xf9\x45\x25\x5c\x80\x00\x00\x00\xff\xff\x10\xe1\x31\x92\x1f\x00\x00\x00" func runtimeSyntaxGodocHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGodocHdr, "runtime/syntax/godoc.hdr", ) } func runtimeSyntaxGodocHdr() (*asset, error) { bytes, err := runtimeSyntaxGodocHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/godoc.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGodocYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8d\x31\x4b\xc4\x40\x10\x85\xfb\xf9\x15\x8f\xb9\x2b\xf4\x20\xb9\x7e\x1a\x1b\x15\x2c\xe4\x1a\x8b\x80\xe7\xc1\xb2\x3b\xc6\xe0\x6e\x66\xd9\x5b\x41\x21\x3f\x5e\x12\xa3\xde\x2b\xdf\x37\xdf\xbc\x0d\x7a\x0b\xe6\x69\x03\xfd\x74\x29\x47\x15\xf4\x86\x60\x1e\x8d\x8b\x11\x13\xd2\xe0\x8b\x81\xe8\x75\x88\x5a\xbf\xf2\xc2\x67\x81\x82\x56\xf5\x55\x08\x00\x66\x38\xba\xa4\x02\x3e\x1e\xdb\xe5\x60\xcb\x0b\x79\x53\x17\xb4\x08\xb2\xf3\xef\xae\xd7\x76\x37\xa4\x6c\xa5\x12\x95\x8f\xa8\xe7\x1f\xbb\x41\x2e\x9a\x8b\x79\x01\x9f\x9e\x4f\x78\x69\x77\x4c\x2b\xf1\x96\x92\x8e\xeb\xcc\x9c\x73\x75\xa5\x0a\x78\xbf\xe7\xbf\x4e\xc7\x20\xe0\xed\x7f\x71\xf1\xfc\x37\x0d\xaa\x05\x13\xf0\xd5\xd3\xe1\xf6\x30\x75\x5d\x37\xdd\x3f\x74\x8f\x77\xd7\x72\xc3\xf4\x1d\x00\x00\xff\xff\x73\xe8\x65\xe9\x06\x01\x00\x00" func runtimeSyntaxGodocYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGodocYaml, "runtime/syntax/godoc.yaml", ) } func runtimeSyntaxGodocYaml() (*asset, error) { bytes, err := runtimeSyntaxGodocYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/godoc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGoloHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcf\xcf\xc9\xe7\x8a\xd1\x03\x51\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\xa8\x1f\xae\x3d\x0e\x00\x00\x00" func runtimeSyntaxGoloHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGoloHdr, "runtime/syntax/golo.hdr", ) } func runtimeSyntaxGoloHdr() (*asset, error) { bytes, err := runtimeSyntaxGoloHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/golo.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGoloYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x57\x5f\x73\x1c\xb7\x0d\x7f\xf7\xa7\x50\xd5\xb4\x8e\x93\x91\x9a\xd7\x6a\x9a\x76\x54\x5b\xd7\x51\x9b\x58\x19\xfb\xea\x78\xc6\xe7\xda\xd8\x25\xf6\x8e\x39\x2e\x41\x83\xe0\x9d\x36\x45\xfb\xd9\x3b\xe0\xde\xea\x6f\x3d\xd9\x3e\x54\x33\x22\x41\x2e\x01\x02\x20\xf0\x03\xae\xf3\x01\x65\x48\x78\x76\xb4\xa6\x40\x4f\x9e\x38\x14\x6c\xe5\xec\xc9\xd1\xd1\xd1\x91\x7d\x8b\xd0\xe3\xd9\xd1\xf1\x6a\x75\x6a\xdf\xbf\x38\x7e\xf2\x84\x4b\xc0\x3c\x1e\x38\x39\x1a\x59\x8f\x57\xab\xe6\xcb\xae\xc4\x56\x3c\x45\xed\x4a\xd4\x67\xab\x55\x73\xfc\xf8\x4c\x16\x2e\xad\xe8\x8b\x21\x42\xef\xdb\xab\xe6\x27\x6c\x45\x4b\x34\xae\x73\x07\x49\x90\x17\xd0\xb0\x6f\xa7\xd5\x74\xf2\x0d\xb0\x87\x26\xa0\x5e\x35\x19\x79\x67\xe4\x67\x6e\x08\x3e\x8b\x66\x14\x05\x66\x18\x74\x87\xad\x10\xab\x94\x14\x50\x7b\x48\x9f\xe1\xba\xda\xea\x05\x33\xb1\x5e\xf4\x49\x06\x7d\x49\x11\xf5\x35\xf5\xa8\x57\xa9\x9a\xf4\x0a\x73\x09\x72\x98\x4e\x69\x3b\x51\x1d\xf8\x30\xd1\x58\x05\x4c\x8b\x2a\x67\xe4\x86\xf0\x70\x49\xdd\xa8\xc7\x41\x11\xef\x30\x8a\xef\x3c\xf2\x69\x1b\x20\xe7\x83\x52\x50\xd6\x3d\x46\xd1\xe4\xfb\x7b\x7a\x7f\xe6\xb8\x8f\x82\xdc\x41\x8b\x59\x7d\x9f\x02\x1a\x6f\x56\xbc\x16\x8c\x2e\x2b\xed\x90\xd9\x3b\xcc\xda\xc3\x16\x59\x23\xee\x2f\x63\x16\x88\x2d\xce\x91\x9d\x47\xc7\xf8\x5c\x5d\xe3\xf3\x0f\x8c\xd9\x74\xf3\xb9\xba\xc9\x0b\x32\x98\xa3\xbb\x00\x22\x18\xd1\xa9\xd0\x77\xf6\x14\xb6\xf1\x3d\x24\xfd\x08\xd1\x29\xf1\x45\xc8\xf8\x17\x14\xfd\x68\x8f\x42\x07\xb7\x42\x4a\x61\x50\xf4\xb2\x41\x9e\xa1\x0c\x8f\x5c\x34\x3e\x8d\xf0\xe0\xe3\x5a\x19\x7c\xb6\x39\x96\x10\x7c\x37\x68\x0b\xd2\x6e\x7c\x5c\xcf\x90\x97\x98\x7a\x9f\xd1\xa2\x66\x51\xa4\x30\xaa\x3d\x2b\xba\xc3\x02\x42\x50\x88\xc3\xac\x17\xf0\xe2\x21\xf8\x9f\x51\x6f\xc9\x1f\xbd\x6c\x7c\x5c\x6e\x18\xc1\x69\x16\x60\xd1\x6e\xba\x25\x84\x06\xda\xed\x92\x94\xe2\x6b\x14\xa5\xb8\xb0\x78\x6a\xed\x51\x82\x62\xfc\x54\xb0\xcc\x79\x9d\xc4\x3e\x4a\x88\x5a\xe7\xea\x09\x54\xbb\x2e\xc4\x3a\xfd\x00\x39\xef\x89\x9d\x66\x6c\x0b\xe3\xab\xbb\x5b\x8c\x9f\x8a\x67\x7c\x49\xf2\xb2\x84\x30\x2d\x2d\x3a\x96\x43\x42\x77\x5e\x93\x88\x21\xae\x4d\xe2\x0e\x39\xa3\x7b\x55\x57\x3d\xa4\x8b\x28\x3c\x28\xe4\xcb\x29\xf0\xa6\x80\x52\xc8\x8b\x03\x18\x40\xb8\xf9\xaa\x3e\x3f\x0f\x94\xab\xe5\x3e\xe0\x92\x96\x78\x2d\x2a\x78\x2d\x4b\x5a\xf8\x30\xee\x5e\x5c\xfb\x2c\x59\xdb\xc2\x8c\x51\x5e\x78\xd6\x1c\x10\x93\x96\xe2\x9d\xfa\x3c\xea\x53\x53\xdb\xf4\xbb\xea\xb4\xdd\x00\xbf\x81\x50\xcc\xe5\x32\x12\x81\xe2\x7a\xa4\x1c\x95\x26\xe0\x48\x77\x81\xe0\x70\x80\xb1\xa7\x1d\xfe\x79\xb8\x8c\x0e\xaf\xb5\xa1\xeb\x19\x3e\x0e\x7e\x8b\x61\x78\x5d\x52\x22\x16\x34\xc7\x19\xc8\x34\x14\x9c\x96\xe8\x90\x73\x4b\x8c\xda\x04\x1f\xb7\x93\xa7\x3e\xec\xbc\x43\xd2\x96\x62\x8b\x10\xd0\x69\xb7\xfe\xd0\x04\x68\xb7\x46\xf0\xb8\x5e\x33\x62\x34\x62\xc0\x10\x68\x3f\x1e\x31\x6d\xd7\x1f\x7a\x58\x63\x14\x30\xb2\x1d\xa0\x1e\xda\x6f\xbc\xa0\x36\x93\x98\x66\x14\xd3\x4c\x62\x9a\x1b\x31\xcd\x41\x4c\x73\x2b\xa6\x39\x88\x69\x26\x31\x6d\xe1\x4c\xfc\x21\x51\xf6\x35\x91\x0e\xeb\x0c\x3b\x7c\xb4\xc9\x98\x85\xf8\xf1\x7e\x49\x13\xe5\x68\x7f\xb3\xdb\x11\xef\x81\xdd\xb4\xb4\x18\xaf\x6b\x64\xc8\xf8\xc1\xf9\x9c\x02\x0c\x87\x55\xf0\x71\x4e\x88\x57\x00\xad\x80\xd2\x52\xcc\x1a\xe0\xe7\x71\xd5\x31\xf5\x97\x56\x28\xd6\x18\x0f\x10\xc4\x98\x10\xe4\x00\x49\x73\x64\x43\xfe\xee\x46\x1c\x05\x17\xea\xc8\x2a\xb0\xc5\x3a\xfc\xb8\xb1\xe8\x74\x4c\xa9\x0e\xe3\x32\x97\xc6\x38\xe6\xa0\x42\x6f\x21\x33\xe3\x60\x4f\xae\x84\x39\x0a\xff\xf5\xf5\xd5\xcb\x19\xc7\xb2\xb0\x8f\x6b\x03\xc3\x04\x9c\x51\x85\x8c\x51\x85\x1e\x94\xdf\xe4\x40\x70\xc1\xd4\xcf\x94\x7b\xa7\x74\xa8\xc3\xce\x47\xd4\x35\xca\xdf\x70\xb0\x69\xcc\xb0\xc4\x94\x90\xc5\x63\xbe\x41\xb9\x19\x82\xc5\xf7\x98\xb5\xa4\x25\xa9\x85\xd3\x92\x66\xf0\x74\xc4\x3d\x88\x0a\x5d\xc6\xc3\x88\x6b\xb4\xda\xf2\xa2\xe6\xbe\x0a\x2d\x2c\xf1\xad\x1c\xd1\xac\x6a\xb0\x31\x9c\x16\xc3\xe1\xa9\xe8\x31\xba\xd2\xa2\x22\xb4\x1b\x6d\xa9\x44\x51\xac\x28\x35\xcf\x55\x86\xff\xaf\xa1\x47\xc3\x2b\x75\x78\xe8\x80\x20\x25\x8c\x4e\xc1\xd5\xff\xcb\xee\xbc\xa9\xe5\x34\x59\xf0\x46\xa7\x3e\x66\x64\xd1\x00\xd9\xda\xa3\x9e\x9c\xef\x6a\xff\xf3\xc6\xe3\x5e\x3b\x1f\x9d\x81\xa5\x85\x7d\x0f\x49\x7f\x22\x1f\x27\xcc\xb9\x41\x69\x25\x76\xc8\xe3\x58\xe1\xca\x20\xef\x5c\xd4\xc7\x36\x14\x87\x8a\xd7\xe3\x3c\x7e\x50\x87\x01\x05\x75\x03\xd9\x12\x4c\xc0\xc7\x6c\xaf\x79\x55\x0b\xb6\x0a\x55\xe0\x9d\x93\x4b\xa3\x41\x4b\xd2\x5c\xda\xd6\xec\x71\xda\x97\xa0\x11\xd7\x96\x32\xca\x36\x38\xbf\x53\xb6\xa1\x27\xa7\x6c\x43\xa2\xbd\xb2\x0d\x59\x58\x83\xe8\x5a\x14\x3f\x69\x0d\x2c\x0d\x38\x36\x0f\xd6\x32\x7c\x8c\x24\x7a\x4d\xac\xb8\xc3\xa8\xe4\xdc\xad\xb6\xd3\x6b\x7d\xf4\xd9\xfe\xa3\xf5\x18\x9d\xb5\x78\xc6\x78\xd9\xd5\xf2\xd6\x59\x6f\x18\x9d\x59\xe6\x05\x7b\xab\xf8\x75\x5e\xa3\x98\x33\x7d\x15\x97\x45\x17\x60\x56\x2f\xb9\xa0\x56\x3e\x2b\x47\x83\x96\x38\xcd\xc0\x83\xe6\x64\xb5\x15\x59\x77\xc0\xc0\xeb\xac\x79\x0f\xe9\x7c\x22\x9e\xd7\x93\x95\xa2\xda\x7b\x1a\xa9\x3e\xee\x68\x5b\x3b\x02\x4d\x3e\xa1\xb6\xd4\x27\xca\xa8\x9e\x14\xa2\x5b\x6e\x30\x6a\x89\xe2\xad\x0e\xb7\x85\x4d\x19\x37\x27\x6d\xe8\xef\x29\x21\x3f\x87\x8c\x8a\x9f\x0a\x84\x3c\xf6\x19\xd9\x2e\xba\xd7\x68\x66\x01\xa9\x7d\xe1\x04\x4d\x9d\x62\x7d\x5f\xbb\x79\x6f\x43\x6b\x42\x7a\xeb\x9d\x94\xac\x1d\xdb\xfb\x7c\x0f\x91\x72\xc2\xd6\x43\x38\xf0\xef\xcd\x92\x86\x11\xb6\xf5\x1d\x7c\xac\xc5\x55\x0a\xc7\xbb\x3c\xb5\x31\x9e\x74\xe5\x43\x6b\x66\x51\x0c\x21\x0c\x2a\x1b\xa6\xfd\x7f\xb7\x72\xc2\xb1\x92\x2c\xa3\x37\x3e\x6b\x40\x31\x7f\x6b\xa0\x16\xc2\x3d\xbd\x86\xbe\xa1\x70\xda\x30\xb4\x5b\x14\xf3\xcc\xbb\x2f\x9f\xfd\xf3\x5f\xef\x75\xb5\x7a\xa7\xab\xd5\xfb\xe3\xcf\x78\xa0\x23\xd6\x7d\x05\xf4\x8e\xb8\x66\xb8\xbf\xa7\x7b\x8d\x07\xb8\x39\x0e\x35\x37\xd5\x67\xb5\x40\x24\xd6\x1a\x68\x53\x7c\xdd\xf3\xf5\xc4\x79\xda\x10\x85\x1b\xeb\x4b\x6d\xfb\xee\xfb\xf4\xf6\x8e\x03\x68\x58\xc8\x59\x53\x61\xd0\xea\xee\x3f\xe0\x68\xa6\x81\xab\xd5\x3a\x33\x73\xb5\x3a\xf9\xfa\x77\x5f\x7d\xfb\x87\x3f\xfe\xea\xdf\xbf\xf9\xad\xfe\xe3\xbd\x9e\x7d\xfb\x50\xf0\x69\x2c\x7d\x63\xee\x3c\x5c\xf0\xee\x9b\x93\xdf\xbf\xff\x5a\xbf\xb9\x36\x02\x4e\xba\xf3\x93\xc5\xfb\xaf\xec\x1e\x7d\x7a\xfa\xf4\xb1\x01\x63\x1d\x19\x7f\xf1\xd9\x5f\x0d\x2e\xb3\xe8\xf8\xf8\x66\x0f\xa3\x7b\xb0\x93\xb7\x3e\x55\xb3\x57\xab\xd3\xdb\xdd\x3b\x3f\x1e\xa7\xbf\xbb\x37\x8d\xd1\xf5\x7c\x03\x7c\xcb\x3a\x57\x9d\xa7\x0f\xb5\x79\xfa\xff\x54\xa6\xaf\x41\xf4\x48\x89\x5f\x3f\x54\xe2\x8b\x5f\xb8\x4e\xc8\xd1\xd9\xd1\xf1\x97\xcb\xab\x17\x57\xfa\xf6\xed\x5b\x5d\x5c\xbe\xfd\xfe\xe2\xd9\xd9\x9f\x7e\xf9\xae\x93\x93\x93\x93\x87\xd7\xdd\xdf\xfb\x9f\x6f\xfc\x4f\x00\x00\x00\xff\xff\x8f\x72\x85\xf4\x0e\x10\x00\x00" func runtimeSyntaxGoloYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGoloYaml, "runtime/syntax/golo.yaml", ) } func runtimeSyntaxGoloYaml() (*asset, error) { bytes, err := runtimeSyntaxGoloYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/golo.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGraphqlHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2f\x4a\x2c\xc8\x28\xcc\xe1\x8a\xd1\xd3\x48\x2f\xcc\xa9\x81\x72\x35\x55\xb8\xb8\x00\x01\x00\x00\xff\xff\xa8\xdb\x12\x45\x1a\x00\x00\x00" func runtimeSyntaxGraphqlHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGraphqlHdr, "runtime/syntax/graphql.hdr", ) } func runtimeSyntaxGraphqlHdr() (*asset, error) { bytes, err := runtimeSyntaxGraphqlHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/graphql.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGraphqlYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x53\xed\x6e\xdb\x38\x10\xfc\xef\xa7\xe0\x39\xfe\x21\xdd\x21\x79\x00\x01\x07\x9f\x62\xcb\x39\x15\xb6\x92\x4a\x56\x81\x22\x1b\x18\xb4\xbc\x71\x84\x52\xa4\x4c\x52\x69\x83\x6e\xdf\xbd\x10\x65\xf9\x2b\x8d\x7e\x08\xd8\xe5\xec\xcc\xee\x70\xf9\x5c\x0a\xb4\x6f\x35\x06\x6c\xab\x79\xfd\xb2\x13\x83\xc1\x06\x2d\x16\x36\x18\x30\xc6\x58\x7b\x2c\x79\x85\x01\x1b\x02\xdc\x78\xdb\x9d\xa0\x3d\xce\x1f\x0d\x07\x03\xdd\x08\x34\x1d\xf2\x9a\x75\x34\x43\x80\xb5\x37\x0e\xbc\x5d\x83\xfa\x8d\xaa\xc6\x72\x5b\x2a\x49\xa6\x59\x9b\x42\x97\xb5\x0b\x5a\x24\x95\xb2\x6e\x2c\x99\x82\x0b\xae\xe9\x59\xf3\x6d\x85\xb2\x8d\x5f\xb0\xe2\xd4\xc8\x16\xa7\x24\xe1\x0f\x8b\x72\x63\xc6\xbe\x0f\xb0\x1e\x0e\x9c\xd4\x15\xeb\xaa\x9c\xa2\xd9\xab\x1b\xcb\x2d\xb6\x14\xfb\x16\xe2\x29\xc5\xd2\xd2\x4c\x28\x6e\xe9\x56\x29\x81\x5c\x52\x66\x75\x29\xb7\x34\xe5\x16\x6d\x59\x21\x25\x8d\x10\x67\xc4\xa5\xb4\x5a\x99\x1a\x8b\xb6\xcf\x0f\xf9\xbd\xd5\x0a\xe0\xfb\x3f\xfe\xa1\xac\xe6\x9a\x57\x68\x51\xff\x11\xed\x39\xb0\x37\x0e\x00\x02\xef\x11\xc0\x3c\xfd\xed\x8f\xbb\x78\xe4\x1f\x49\x36\xa5\x6e\x75\x5f\x91\x09\x55\x38\xd7\x3e\x9a\xed\x73\x1e\xa5\x5f\x69\x91\x2f\xc3\x65\x7c\x9f\x50\x96\xdf\x66\x93\x34\x7e\x70\xc1\x2c\x8e\xe6\x53\x9a\xa5\xe1\xdd\x22\x4a\x96\xab\x69\x34\x8b\x93\xb8\x3b\xe9\x73\xd9\x43\x1a\x85\x53\x8a\x93\x79\x9c\x44\xab\x3e\x4d\xd9\xe4\xff\x68\x11\x52\x36\x09\xe7\x61\x4a\xf7\xb7\x9f\xa2\xc9\xb2\xa3\x3b\x65\x09\xd3\xbb\xfc\x92\x39\x4e\x96\x51\x3a\x0b\x27\x11\xe5\x49\x1b\x47\x49\xbe\x70\xbf\xd5\x97\x70\x9e\x47\x14\x27\x0f\xf9\x72\xb5\x67\xec\x82\x4b\xde\xb3\x5b\x38\x38\xd1\x1b\x50\x28\x69\x2c\xef\xdc\xfc\xef\xdc\x7a\xad\x94\x3d\xbb\xa8\x13\xac\xf3\xca\xed\xe1\xa2\xdf\xc3\xec\x74\x0f\xb3\x6e\xd9\x52\xa5\xec\x99\xfe\x2b\xd7\x25\x5f\x8b\xe3\xdd\xd7\x58\x94\x5c\xb4\xea\x00\xa3\x0b\x7d\xdc\x35\xa5\xc6\x0d\x33\x6f\xd5\x5a\x89\xf7\x15\x7f\xf5\xd8\xeb\x3d\xa4\x4d\x06\xf4\x2f\x01\x10\x01\x78\x04\xe0\x13\xc0\x4f\x02\xf8\x45\x00\x8f\x04\xf0\x74\x2c\xe9\xa7\xb9\x59\x2b\x57\xd9\x8e\x64\x75\x83\xf4\xcc\x85\x41\xd7\x35\x63\xef\xc0\xc6\xed\x79\xf7\x30\xdb\xcf\x58\xae\x9d\x21\xc3\xe1\x21\x87\x72\x73\x91\x31\xdf\xca\xda\x49\x00\xdc\x1c\xb3\x27\x6f\xbc\xff\x4e\x95\xba\x41\x27\x2f\x5c\x1f\x4b\x0f\xed\x54\x6e\x69\xdf\xb5\x71\x75\xd9\xc5\xe8\x52\x8e\x3d\x3e\xfd\x0e\x00\x00\xff\xff\x8f\x8a\x78\xa2\x9a\x04\x00\x00" func runtimeSyntaxGraphqlYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGraphqlYaml, "runtime/syntax/graphql.yaml", ) } func runtimeSyntaxGraphqlYaml() (*asset, error) { bytes, err := runtimeSyntaxGraphqlYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/graphql.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGroffHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2f\xca\x4f\x4b\xe3\x8a\xd1\xcb\x8d\x4e\xcd\x2d\x8e\x55\xa9\x89\xd1\x2b\xca\x4f\xab\x89\xd1\x2b\xc9\x4d\x4c\x56\xa9\x89\x03\x51\x7a\x5c\x5c\x80\x00\x00\x00\xff\xff\xc1\x42\xbc\xff\x26\x00\x00\x00" func runtimeSyntaxGroffHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGroffHdr, "runtime/syntax/groff.hdr", ) } func runtimeSyntaxGroffHdr() (*asset, error) { bytes, err := runtimeSyntaxGroffHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/groff.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGroffYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x52\xc1\x4e\xc3\x30\x0c\xbd\xf7\x2b\xac\xa8\x87\xb6\x68\x11\x1c\xc9\x85\x03\x9f\x11\x67\x52\xd4\xba\x23\xd2\x92\x56\x89\x39\x20\xf5\xe3\x51\xd2\x31\x26\xca\x06\xf3\xc5\x6d\xf2\x9e\xfd\xfc\x9c\xd1\x1d\x89\x3f\x66\x52\x70\x88\xd3\x38\x56\xd5\x40\x4c\x3d\x2b\xa8\x00\x00\xf2\x6d\xb0\x9e\x14\x08\x44\xe9\x35\xf9\x64\xea\x05\x51\xc6\x69\xcc\x89\xbd\xed\xeb\x65\x9f\x93\x14\x55\x15\xdf\x8f\x94\x54\x61\xee\x20\xb1\x65\xf2\x14\x58\x81\xd8\x23\xca\x66\x48\x4b\x88\x2d\xe8\xbd\xd6\x2a\xcd\xb6\x27\x65\x8c\xe9\xc4\x09\xde\x4f\x21\xb1\x0d\x2c\xd3\x4c\xbd\xb3\xc7\xd7\x37\x1b\x4b\x5b\x44\xf9\x0f\xcc\x28\x97\x92\x10\x1b\xb9\x7e\xa6\x06\xf1\x61\x41\xdc\xb5\x2f\xfa\x71\xf7\x6c\x7e\x16\x51\x20\x9a\x8c\x2b\xe0\x1c\x6d\x68\x32\xb3\x91\xb2\xdd\x60\xcb\x7f\x8e\xc4\x36\xfe\x46\x45\xd4\xe2\x0c\xa2\x30\x28\x10\xe6\xfb\x60\x35\x06\xb4\xa9\x4e\x85\x57\xcb\x8b\x2f\x17\x6e\x74\x57\xbd\xf1\x17\x46\x96\x8e\x42\x76\xf5\xd6\x16\x8e\x2e\x1c\xb6\xea\x10\xbb\xab\xa3\x7d\x91\xfe\x9a\x10\xb1\xbb\x73\xc6\x1b\xdb\x2a\x52\x6e\x6e\x75\x23\x67\xa5\xdd\x25\xc0\x0d\x14\xd8\x8d\x8e\xa2\xf4\xb6\x8f\xd3\xb9\x4a\x8e\x5a\x3f\x95\x47\xf1\x19\x00\x00\xff\xff\xb6\xd6\x2a\x2f\x01\x03\x00\x00" func runtimeSyntaxGroffYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGroffYaml, "runtime/syntax/groff.yaml", ) } func runtimeSyntaxGroffYaml() (*asset, error) { bytes, err := runtimeSyntaxGroffYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/groff.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGroovyHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2f\xca\xcf\x2f\xab\xe4\x8a\xd1\xd3\x80\xb0\x6a\xd2\x2b\x6b\xd2\x41\x54\x71\x46\x4d\x7a\x51\x62\x4a\x4e\xaa\xa6\x0a\x57\x9c\xb2\xa2\x9e\x96\xbe\x46\x6a\x5e\x99\x82\xb6\xa6\x3d\x44\xa1\x82\x96\x0a\x17\x20\x00\x00\xff\xff\x5f\x02\x10\x8c\x3d\x00\x00\x00" func runtimeSyntaxGroovyHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGroovyHdr, "runtime/syntax/groovy.hdr", ) } func runtimeSyntaxGroovyHdr() (*asset, error) { bytes, err := runtimeSyntaxGroovyHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/groovy.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxGroovyYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x57\x6d\x6f\xdb\x36\x10\xfe\x9e\x5f\x71\x75\xbd\xc5\x76\x22\xc7\x29\x8a\x75\xf1\x5e\xdc\x2c\xa9\xbb\x6e\x6b\x53\x20\xd9\x10\x54\x52\x03\x4a\x3a\x49\x5c\x68\x52\x23\x29\x3b\x6a\x98\xfd\xf6\x81\x94\xe2\xf8\x6d\x5d\xd2\x02\xc3\x3e\x4c\x1f\x6c\xeb\x48\x3e\xcf\xf1\xee\xf8\x1c\x9d\x52\x86\xba\x2a\x70\x08\x99\x14\x62\x5a\x6d\x6d\x25\xa8\x31\xd6\xc3\x2d\x00\x00\x3b\xca\xc9\x04\x87\xd0\x0a\x82\x7e\xa7\x9e\x62\xb2\xca\x64\xf6\x4b\xe5\x26\x93\x24\x61\xd8\x6d\xb7\xdc\xf4\x1c\x49\x82\x72\x08\xad\xf7\x8f\x1f\xf5\x7b\x7b\x1d\xe4\x53\xd8\xe9\x8e\xea\x65\xd0\x6b\xb7\xb6\xb6\x64\xc9\x50\xd5\xe0\x8f\xe1\x90\x27\xa0\x73\x04\xa5\x2b\x86\x90\x95\x34\x41\x48\x85\x84\x58\x70\xa5\x09\xd7\x0a\xa8\x82\xa3\x93\x37\xa7\x67\x87\x6f\xce\x2e\x8e\x0e\x4f\x5f\xb8\x85\x1e\xd0\x04\xb9\xa6\x29\x75\x64\x41\x10\xf9\x87\xde\xbb\x8b\x76\xb8\x13\x04\x51\xab\xc1\x3e\xdb\x80\xfb\xd3\x6f\xaf\x81\x11\x9e\x95\x24\x43\x87\xfd\x96\xa8\x98\xb0\x23\xa2\x1a\x5e\x46\x94\x42\x05\x84\x27\x40\xb9\x46\x99\x92\x18\xd5\x1a\x67\xdf\xcd\xbb\x63\x0e\x7d\xe2\x7d\x38\xf4\xde\x0d\xbc\x83\x45\x1f\x1a\x47\xde\x4a\x3a\xa1\x9a\x4e\x11\x6c\x9c\x6f\xd1\xea\x98\x5b\x84\x4e\x54\x69\x34\x2a\x17\x52\x1b\xca\xb5\x61\x82\x67\x26\x65\x82\x68\x93\x88\x32\x62\x68\xe2\x9c\x48\x13\x09\xc1\x90\x70\x33\x15\x34\xe9\xae\x72\x9c\x55\x05\x7a\x12\x19\xd1\x98\xc0\x25\x56\x33\x21\x93\x45\xa6\x7e\x63\x6b\x18\x0b\x49\xa7\x44\xa3\x29\xca\x88\xd1\xd8\x14\x52\xd8\x94\x63\x62\x94\x26\x9a\xc6\x26\xa5\x9c\x30\x33\x25\xd2\x24\x98\xae\x91\xfd\xbc\x8c\x6f\xd7\xe0\x04\xb9\x6e\xc0\x53\x21\xcd\x2c\xa7\x0c\x4d\x22\x0c\x4d\x0d\x32\x85\x46\xcd\xa8\x8e\x73\x13\x13\x85\x16\x93\x94\x4c\x1b\x2d\x2b\x13\x13\x6b\x76\x7c\xac\xba\x63\x5a\x47\x8d\x24\x92\x4b\x13\x0b\xae\x29\x2f\xd1\x48\xd4\xa5\xe4\x46\xe7\x52\xcc\x8c\x4d\x9a\xd4\x1f\x5b\x5d\x90\xf8\x92\x64\x68\xe8\xa4\xb0\x61\x76\xf9\x33\xf3\x0c\x1b\x2d\x09\xd5\x06\x79\x39\x31\x78\xa5\x91\x27\xca\xce\x64\x0e\x41\xd5\x24\xea\x63\xf0\x3a\xa7\xca\xa8\xb2\x40\xd9\x5d\xa8\xc0\x5f\xb9\x2a\x15\x26\xbb\x10\x95\x1a\x24\x2a\x94\xd3\xf5\xec\xac\x42\x65\x42\x0b\xe3\xea\x7f\x2d\xee\x27\x05\x4a\xa2\x85\xac\xeb\xb3\x28\x79\xac\x4b\xa2\xa9\xe0\xb7\x50\xd5\x24\x12\xac\x2f\x9a\x69\x43\x68\xf9\xde\x4e\x6f\xef\x8b\xef\xbe\xfd\xfe\xfd\x9f\x5f\x9a\x47\xa3\xe1\x37\xbb\xfd\xe7\xa1\xb1\x34\x94\x1b\xaa\x0c\xb1\x41\xb0\x27\x2d\x46\x91\x1a\x8e\xb3\xa5\x4d\xd6\x70\x91\x24\xf1\x25\x6a\x5b\xee\x7e\xa7\x7b\x7d\x63\xd7\xfb\x26\x08\xc2\x25\xdf\x8e\x31\xa6\x13\xc2\xdc\xa9\xc9\x50\x02\xa3\x1a\x25\x61\x0d\xd4\xed\x79\xee\xf3\x72\x12\xb9\x33\xdb\x19\x51\xcb\xe5\xef\x7b\x07\x61\xc7\xbf\x18\x78\x07\x61\xcf\xb7\x9f\xdd\x91\xff\xf2\x97\x57\xc7\xe3\x70\xb4\x10\xc9\x1f\x28\x27\xb2\x7a\x28\xf8\x20\xf2\x07\xfb\x61\xc7\x1f\xec\x5f\x58\xf0\xfd\xcd\xd8\x27\xb1\x7e\xb8\xdf\x03\x7f\xe0\x3d\xb3\xd0\xde\x33\x87\xed\x3d\xdb\x0c\xfe\x23\x5e\x91\xe4\xd3\x42\x33\xb8\xb2\xf1\x20\x5e\xea\x68\xec\x8f\x9a\xc9\x99\x36\x92\x8d\xad\x66\x50\x9e\x79\x85\xa0\x5c\xdf\x3b\x05\x03\x97\x82\x81\x77\x70\x31\x4f\x41\xc7\xef\x87\x9b\xec\xdd\x51\x07\xfd\x1d\x2f\x1c\x6d\x1e\xf4\x97\x1c\x5a\xe0\xb4\xda\x75\x7b\x54\x64\x89\x26\x25\x56\x13\x78\xc9\xd8\x5a\x91\x1f\x72\x2e\xb4\xab\xea\x75\xdd\x1d\x42\xeb\xb9\xd5\x5b\xe2\x7d\xb8\x68\x87\xcd\x2f\xeb\x43\x3b\xec\xad\xe2\x9c\x52\x9e\x31\xf4\xfe\x28\x85\x95\x44\xa5\x25\xe5\x99\x5a\xf5\xab\x36\xd7\xdd\xc8\x3e\x4a\x13\x69\x0f\xe2\x76\x6b\x6e\x42\x9e\x2c\x1b\xd4\x25\x2d\xdc\x5e\x82\xa0\x7f\x67\x5d\x68\x6b\xb7\xcf\x22\x4f\x81\x31\x25\xec\x28\x27\xb2\x59\xda\xf1\x83\xd6\x76\x94\x72\xa9\x74\x10\x5c\x3d\x79\x6a\x6d\xa1\x29\x7d\xe2\xa5\x87\xde\xd8\x06\xf4\xfa\xe9\x4d\x77\x59\xe3\x73\xaa\x80\x30\x25\x60\x62\x45\x13\x95\x6b\x9d\x67\x92\x16\x0c\xbd\xba\x53\xac\x6c\x17\x24\x66\x54\xf0\x5a\x80\x5e\x41\x4c\xf8\xb6\x15\x22\x2b\xb5\x90\x52\x9e\x00\x81\x19\xa9\x40\x0b\xb0\x0d\x2a\x23\x1a\x81\xea\x5d\x20\x8c\x39\x68\x27\xe2\xa0\x34\x65\xac\xa6\xa4\x3c\x83\x56\x0b\x88\x02\xd2\x50\x40\x2c\xa4\xc4\x58\xb3\xea\x36\x7d\x4c\x89\x5d\xe0\xa8\x6c\x21\x42\xfb\xfa\x06\x88\x44\xe0\x38\x45\x09\x99\xb0\x36\x2d\x20\xc2\x66\x0b\xc9\xdd\x7a\x98\x51\x9d\xc3\xef\xa5\xb2\x1e\x66\x78\x05\x48\x75\x8e\x72\x17\x94\x80\x9c\x66\x39\xa3\x59\xee\x30\x67\xd6\x1d\xd7\x0d\x80\xa6\x20\x38\xda\x3e\xae\x85\xe3\xac\x9b\x76\x21\xd8\x9d\x2c\xba\x8b\x80\x42\xd0\x33\x01\x85\x14\x11\xc3\x89\x82\x58\x4c\x22\xca\x31\x81\x09\x12\x0e\xca\x61\xc3\x84\x2a\x4d\x2e\xed\xbd\x80\xcf\x19\x9d\xc3\x39\xd1\x2e\x1e\xa5\x42\x69\xc9\x9c\x93\xf3\xcd\xe4\xc4\x76\x76\x01\x09\x12\xe6\x36\x71\xab\x88\x9b\x32\x72\xdf\x02\x0c\x5a\xab\x15\xb8\x68\xf9\xf7\x4b\xf0\x0e\x70\xe1\x16\x34\x6d\xa0\xae\x9e\x3c\xf5\x83\x60\x16\x94\x83\xc1\xd1\xc0\xb3\x5f\xc7\x5f\xb9\xcf\xaf\xdd\xcb\xd8\xbd\x8c\x9b\x97\x71\x50\x0e\xf6\x07\x76\xda\x78\x3c\x7e\x11\xee\x38\xa9\x99\x5f\x9f\x2e\x3e\x0d\xa4\xdb\xfb\x7b\x37\xe7\x2e\x5e\x87\xfd\x9e\x7f\xb3\xdc\xb6\x3e\x76\x7a\xee\x9f\xab\x60\x63\xbe\x82\xff\x73\xf6\xc9\x39\x5b\x1a\x59\x0c\xb6\xdf\x0e\xfd\xeb\xb0\xb5\x36\x5e\x07\x7d\x9e\xde\xc5\xa7\x8e\x31\xf8\xe1\x86\xc4\xab\xcf\xea\x12\xdb\xeb\x7d\x62\xfb\xbf\xd0\x29\x4e\x19\x51\x79\x35\xef\x02\x56\x81\x19\xa6\x1a\x44\xa9\x77\x21\xc2\x98\x94\x56\x10\x73\xac\x6a\x19\xb6\x82\x57\xf2\x19\xe1\x36\x06\x05\xb3\x7f\x79\xa0\x90\xa8\x75\x05\x93\x32\xce\xe7\xfd\x40\xd3\x09\xce\xc5\x8d\x31\x22\x3d\xb5\x44\x74\xdf\xb8\xf9\xed\x70\x6f\x35\x70\x7b\x7e\x3b\x5c\x8d\xd1\x4a\xca\x9a\x8e\xce\x28\x47\x2b\xe0\xee\x6e\x3e\xa7\x74\xaf\xeb\x54\x7b\x6b\x44\xed\x7f\xc8\x84\x16\x89\xb0\x97\xa3\xb3\x93\xe3\x13\x73\x7e\x7e\x6e\xc6\xaf\xce\x5f\xbf\xe8\x0e\x47\x4b\x11\x7e\x5d\x32\x4d\x1f\xe6\x89\xdf\x0b\x57\x7d\xf1\x7b\x8b\x81\xf8\x0c\x77\x5e\xba\x3f\xd8\x89\x88\x1f\xe4\x8e\xdf\x0b\x9f\x8f\xee\xe3\x93\x4d\xc4\x5f\x01\x00\x00\xff\xff\xc4\x23\x99\xf3\x28\x10\x00\x00" func runtimeSyntaxGroovyYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxGroovyYaml, "runtime/syntax/groovy.yaml", ) } func runtimeSyntaxGroovyYaml() (*asset, error) { bytes, err := runtimeSyntaxGroovyYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/groovy.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxHamlHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x48\xcc\xcd\xe1\x8a\xd1\x03\x51\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x47\x1a\x0c\x70\x0e\x00\x00\x00" func runtimeSyntaxHamlHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxHamlHdr, "runtime/syntax/haml.hdr", ) } func runtimeSyntaxHamlHdr() (*asset, error) { bytes, err := runtimeSyntaxHamlHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/haml.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxHamlYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x91\xdf\x6e\x82\x30\x14\x87\xef\x79\x8a\x5a\x31\x50\x0c\x64\xb7\x23\x93\xb9\x47\xd8\xd5\x92\x9d\x9e\x63\x3a\xad\x1b\x09\xe0\x1f\xea\x8c\x5a\xdf\x7d\x29\x43\x64\x73\xe3\xf2\xfb\x7d\xa1\x5f\xd3\x65\x5e\x68\x73\x58\xeb\x94\x7d\xa8\xb2\xf0\xbc\x85\x36\x7a\x6e\x52\xe6\x31\xc6\x98\x1b\x2b\x55\xea\x94\x71\x29\x13\x27\xf8\xdc\xf3\xb6\xbb\x42\xd7\x69\x23\xc4\xac\x3e\x94\x6f\xab\x22\x65\x3c\xb6\x13\xde\xb2\x85\x5e\xaa\x5d\x61\x1c\xcc\xec\x24\xbb\xe0\xf9\xaa\xaa\x8d\xaa\x1c\x0f\x81\x31\xb4\x24\x46\x70\x17\xdf\x3f\xc5\xaf\x2a\x3e\xce\x70\xdc\x99\xf5\x5a\xcf\x73\xe5\xfe\x9a\xfe\x2d\x7c\x17\xbb\x28\xb8\x1d\x2f\xe7\x24\xb5\xd9\xe6\xd5\xbb\xf3\x78\x08\x24\x39\xda\x50\xba\x8f\x0b\x11\x49\x6e\x47\xf0\xfc\x82\x8f\x52\x9e\x80\xce\x18\x49\x79\xee\x48\x08\x24\x1c\x11\x2d\x79\x00\xca\x30\xca\xba\xdd\x07\xf2\xdd\xee\x77\x84\x80\xc8\x11\x6a\xc9\x00\x68\x80\xd1\xe0\xff\xa4\x20\x04\x0a\xda\xa0\x40\x88\x28\xb0\x23\xd8\xec\xf1\x67\x4d\x03\xfa\x31\x9b\x3d\x5e\x5b\x9a\x15\x80\xd0\xad\x78\x01\xfd\xb6\x06\xf4\xd3\x36\x7b\xfc\x55\x96\x2f\x74\x65\xf2\x65\xae\xb7\x29\xe3\xc3\xde\xf1\xb7\x42\xf2\xa9\x9c\x14\x4e\xed\x74\x2a\xda\x77\x99\xa9\xf8\x88\xe3\xeb\x35\xcb\x52\x37\x0f\x3c\x04\x3a\x61\x12\xf9\x76\xe8\x73\xef\x2b\x00\x00\xff\xff\x82\x41\x7f\x6a\x64\x02\x00\x00" func runtimeSyntaxHamlYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxHamlYaml, "runtime/syntax/haml.yaml", ) } func runtimeSyntaxHamlYaml() (*asset, error) { bytes, err := runtimeSyntaxHamlYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/haml.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxHaskellHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x48\x2c\xce\x4e\xcd\xc9\xe1\x8a\xd1\xcb\x28\x56\xe1\xe2\x02\x04\x00\x00\xff\xff\xbf\xb7\xe2\xf8\x0f\x00\x00\x00" func runtimeSyntaxHaskellHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxHaskellHdr, "runtime/syntax/haskell.hdr", ) } func runtimeSyntaxHaskellHdr() (*asset, error) { bytes, err := runtimeSyntaxHaskellHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/haskell.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxHaskellYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x53\xef\x4f\x1b\x39\x10\xfd\x9e\xbf\x62\x6f\x0f\xa1\x44\xba\xe4\xbe\xe7\x08\x77\x57\x48\x2a\x5a\x20\x2d\x44\x55\x54\x06\x55\xce\x7a\x36\x6b\xe1\xb5\x83\xed\x25\x8d\x78\xf4\x6f\xaf\xec\x04\x08\x41\x2a\x1f\x1a\x45\x6b\xcd\x9b\x1f\xef\xcd\x78\x5c\x2a\xcd\x61\xb5\xe0\x7e\x56\x09\x7f\xc3\x5a\xb7\x5a\x92\x03\x17\xa1\xdf\xca\xb2\x2c\x8b\x6e\x23\x6a\xee\x67\x39\x51\xaf\xf2\x7b\x79\xab\xe5\x1a\xcd\x7e\xed\xfe\x33\xfb\xc8\xab\xa5\x75\xd2\x27\xb3\x9b\xf9\x20\x02\xd7\x6c\x42\x4a\x98\xb5\x85\x47\x21\x3c\xc3\x96\x28\xb4\xf0\x1e\x52\x04\x01\xc9\xa5\x68\x74\x80\x64\xa7\xee\x94\x99\x43\x5a\x94\xd6\x09\xad\xe3\xc1\x6a\x6e\x50\x29\x19\x1d\xaa\x44\xa8\xd8\x80\xb5\x67\xa8\x7a\x61\x5d\x80\x32\xa5\xfa\xbe\xfe\xea\xf5\xe1\xa0\x8c\x0f\xc2\x14\x0c\xcd\x31\x00\xb5\xb4\xa8\xad\x6c\x34\xc3\xf0\x32\x36\x88\xdb\x46\x68\x55\x2a\x96\x48\xe6\xb2\x62\xc7\x1d\xa2\x59\xde\x4a\xda\x63\x33\x5f\x84\x53\xb6\xf1\x99\x5f\xd5\x33\xab\x9f\x7a\x4a\x56\x3f\xcb\xdb\x44\xc0\x7f\xf8\x03\x7d\x7c\xc3\x0f\x0c\x40\x44\x84\x7f\x40\xd4\x26\xea\xe0\x2f\x10\x5d\x81\xe8\x1a\x44\xf7\x20\x7a\xe8\x6c\x95\x1e\x2f\xd8\x89\x60\xdd\xcb\xa2\x3d\xbb\x81\x63\xf5\xc1\x00\x7f\x0f\xb0\xbf\x0f\xa2\xf8\xc7\x01\x0e\x71\x30\xc0\xe1\xa0\xf3\xb6\xc4\x05\x17\x4a\x24\x8d\xdd\x43\x1c\x74\x3b\xf9\xae\x76\xa2\x1e\x88\xf6\xb6\x2a\x1d\x8b\x20\xb2\xc2\x1a\x1f\x5c\x53\x6c\x29\x4b\x90\x30\xa1\x37\xb3\x9b\xcc\x59\x7b\xe2\x1a\xc6\x48\x68\xbf\x99\xd8\xcb\xc8\x4d\xd0\xb9\x0d\x55\xbc\xb3\x0f\x8d\x0f\x38\xe5\x32\xe0\x42\xcd\xab\x80\xd3\x09\x86\x9f\xf1\x7e\xb2\x33\xec\x35\x7f\x5c\x0a\x7e\xa4\x56\x92\x4d\x88\x77\xe4\x7a\xc9\xb1\x29\x7c\xc1\x42\xe2\xb2\xb2\x4b\x0c\x4d\x53\x63\x78\x8b\xb1\x93\x88\xf9\x78\x67\x1b\x23\x59\x62\xb2\x5a\xb0\x98\x69\xc6\x79\x53\xe3\x82\x85\xc6\xc8\x89\x22\x28\x6b\x84\xc6\x89\x09\x3c\x77\x42\x27\x47\xc4\x31\xd2\x56\x84\xa8\x35\x21\xd1\xc0\x99\x35\x42\xae\xbf\x9f\x74\xe3\x31\x6a\x4c\x9c\x0a\x46\x56\xcb\x54\xf9\x7f\x29\x55\x50\x77\x8c\xaf\x6a\xd1\xb9\xca\xae\xb7\x5a\xb9\x0c\x4e\x99\xf9\xab\x01\xfa\x04\xf7\x37\x61\x59\x7c\x1c\x2e\x0d\x2b\xcf\x9f\x30\x36\x72\x07\xf1\x37\x6a\x91\x1a\x27\xea\x3d\xa3\x5b\x8f\xee\xf1\xb7\xcd\xb4\xbe\xff\xa3\x4a\xb8\xe7\xd4\x27\x79\x47\xb6\x8e\x4f\xf2\x59\x5f\x32\x5f\xeb\xea\x76\x77\x75\xed\xbd\x21\x20\x58\x69\xe3\xd2\x4d\xc6\xc7\x63\x4c\xa7\x53\x8c\x4e\xa6\x67\xc3\x4e\xff\xdf\x0d\xfb\x2f\xc8\x88\xee\x5f\xd1\x75\x89\x1e\x7e\x9b\x71\x6b\x89\x6a\x55\xb8\x18\x1d\x77\xa4\x54\x86\x65\xde\xfa\x19\x00\x00\xff\xff\xff\xf1\xc5\x3b\xf0\x04\x00\x00" func runtimeSyntaxHaskellYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxHaskellYaml, "runtime/syntax/haskell.yaml", ) } func runtimeSyntaxHaskellYaml() (*asset, error) { bytes, err := runtimeSyntaxHaskellYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/haskell.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxHtmlHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x28\xc9\xcd\xe1\x8a\xd1\xcb\x28\xc9\x8d\xce\x89\xb5\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\x5c\xf7\x51\xaf\x11\x00\x00\x00" func runtimeSyntaxHtmlHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxHtmlHdr, "runtime/syntax/html.hdr", ) } func runtimeSyntaxHtmlHdr() (*asset, error) { bytes, err := runtimeSyntaxHtmlHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/html.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxHtmlYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x57\xdd\x6e\x1b\x37\x13\xbd\xd7\x53\x30\xf2\x07\x47\x8a\x3f\xc9\x4d\x2e\x0a\x54\x4e\x6d\x18\x49\x8a\xf6\x22\x75\x51\x04\xe8\x8f\xd7\x85\x67\xc9\xd1\xee\x44\x5c\x72\x3d\x9c\x95\xa3\x60\x1e\xbe\xe0\xae\x6c\xc7\xb1\x12\xa0\x68\x2f\x5a\x20\x0b\x88\x5a\x71\xf8\x33\x73\xe6\x1c\x0e\xb5\x24\x8f\xb2\x69\x71\x61\x6a\x69\xfc\x68\xe4\x50\xd0\xca\x62\x64\x8c\x31\xd9\x16\xa0\xc1\x85\x19\x17\xc5\xbc\x96\xe6\xdc\x5f\x9c\xfc\x6f\x3c\x1a\x71\xe7\x31\x0d\x63\xf6\xcc\xcb\x68\xf3\x02\x86\x92\xb1\x90\x70\x46\x21\x61\x48\x24\xb4\xc6\x7e\xc4\xcc\xb4\x8c\x2d\x47\xbb\x30\xe3\xe7\x8f\x26\x27\x34\x9d\xbc\x3c\x7b\xf1\xe6\xb7\x9f\x5e\xf5\x5b\xce\x9f\x4c\x8f\xc7\xdb\xa5\xce\x5a\x0c\x14\x2a\x23\x50\x6d\xa7\xa6\x4d\x53\x46\x3f\x17\xa8\x86\xed\xf2\x93\x04\x58\xf2\x62\x13\x50\x28\x4b\x56\xb0\x1c\xc3\xa6\x51\x70\x8e\x31\x25\x85\xb6\xf5\x28\x0a\x8c\xa0\xc0\x42\xd6\xa3\x42\x22\x87\x0a\x9d\xa3\xa8\xa5\x96\x90\x50\x4b\x47\x5a\xba\xa8\x25\x55\x5a\xfa\x68\x57\x57\x5d\x14\xd4\x32\xba\x8d\x96\xac\x65\x27\x12\x83\x5a\x08\x6b\x48\x6a\xa1\x15\xca\x3f\x31\x08\xb2\x5a\x12\x54\x1b\x5d\x6e\x7c\xfe\x54\x1c\xbb\x56\x6d\x6c\x1a\x08\x4e\x1d\x08\x78\x4a\xa2\xce\xa9\x43\xaf\x0e\x05\xc8\x27\x75\xcb\xa0\x8e\x58\x1d\xad\xd5\x79\x75\xa2\xd8\x28\x36\x25\x3a\x5d\x12\x7a\x97\x50\x74\x49\xd5\xcd\x66\x4b\xaa\x3a\x46\x5d\xc6\x20\xba\x8c\x31\x6f\xbc\x8c\xdc\xe8\x92\xa1\xc1\xa1\xcd\x33\xea\xf3\xa7\xb3\xaf\x2f\xb4\x46\x70\x7d\x83\xac\xf5\xe0\x4f\xcd\x9a\x31\x56\x52\x1a\xe6\x50\x53\x29\x85\xb6\x13\xa5\x90\x74\x55\x3a\x5d\xe1\xa6\xc2\xa0\x1e\x4a\xf4\xea\xb1\xc2\xe0\xd4\x93\x7a\x0a\x2b\x6d\xa0\xd5\x06\x78\xa5\x0d\x86\x4e\x1b\x14\xc8\x0d\xb2\x06\x58\x6b\x88\x83\x03\x1a\x62\xb2\x4c\xad\x68\x2c\xdf\xa2\x15\x8d\x5e\x63\x2b\x83\x03\x71\x08\x24\x76\x92\xf7\x6c\xb5\x05\x86\x46\x5b\x46\x6d\x39\x56\x7d\xb6\xae\x94\x5b\x65\x51\xee\xca\x8d\x26\x4d\xd0\xb4\x9a\xd0\xf6\xf3\x12\xfa\xbc\x62\x6a\xc0\x7b\x4d\xb1\x63\x8b\x9a\x5a\x08\x9a\x84\x69\x85\xf9\x2b\x86\x4a\x53\x57\x6a\xea\x9a\x06\x78\xa3\xa9\x6b\x55\xa0\xf4\xa8\xd2\x67\x52\x9c\x0a\xbe\x93\x9e\x0c\x92\x41\x54\xa9\x55\x7a\xac\x84\x1a\x54\x21\xc9\x63\x59\x85\xc1\xae\x54\x44\x3b\xed\xbc\xae\x81\x75\x4d\x0e\xa3\x5e\x97\x3c\x2d\x8a\x72\x7c\xcb\x3f\x0c\x6e\x61\xc6\xc7\x77\x1d\x1f\xc8\x61\x78\x66\x86\x1c\x06\xa1\x25\x21\xf7\xe2\x29\x27\xad\x07\x8b\x75\xf4\x39\x39\x49\x36\x99\x91\x5e\xb4\xac\x6c\xf4\x91\xb5\x46\xaa\x6a\xd1\x9a\x71\xa9\xe4\x74\x02\x4c\xd0\x93\x68\x5a\x14\xb3\xf9\xc1\x4d\x76\x62\xa8\x1c\x26\xab\x59\x94\x1a\xc3\xc4\x7a\xb2\x2b\x5d\x46\xdb\x25\xf5\x11\x9c\x36\xb1\x4b\x18\xd7\xc8\x53\x4d\xf4\xfe\x06\x2b\xb6\x2a\xc0\x15\x8a\x66\xa1\xea\x1a\x7c\x87\x7a\x4d\x4e\x6a\xb5\x1e\x52\x52\x5b\x03\x67\x22\xd9\x18\x04\x83\x28\xa3\x57\x0a\x82\x15\x93\x6c\xd4\x72\x4c\x29\x32\x55\x14\x32\xfd\x34\x86\xd4\x95\x0d\x89\x7a\x08\x95\x72\xf4\x78\x1f\x9f\x5e\xb7\x2d\x5a\x02\xbf\x0d\x9e\xf1\xaa\x23\x46\xf7\xf1\xb8\x3d\xf3\x1a\xc4\xd6\xc6\xc5\xae\xf4\x38\xeb\xf5\x67\x72\x6a\x43\x95\xee\x2d\x67\x63\x48\x02\x41\xe6\x83\xf1\x43\xac\xef\x9f\x09\xc5\x78\xfc\xc0\x36\xe4\x6b\x97\x25\xad\xa8\xed\x5d\x2c\x8a\xf9\x43\xeb\x83\xb4\xee\xf2\x67\x88\xf3\x45\x0d\xfc\xe9\x85\x76\x44\x30\xef\x38\x83\x33\x99\x2c\xa5\x9d\xa4\xe9\x89\xd6\xb2\x7d\xa9\x48\xd4\xd6\x1c\x1b\x9c\x2e\x0e\x0f\xcf\xff\x28\x8a\x74\x71\x30\xdd\x85\x5a\xa2\x50\xfd\x33\xa8\x3d\xfe\x14\x68\x3b\x0c\xff\x55\xcc\xbe\xa7\xaa\xf6\x59\x65\x46\x6a\x34\x78\xd5\x81\x4f\x06\x82\x33\x10\x36\x26\xab\x30\x98\x12\xe5\x1a\x31\x98\xeb\xc8\xee\x3e\x92\x43\x19\xda\xb2\xf9\x5b\x5d\x14\x45\x39\x1d\x8f\xb6\x55\xeb\x85\x8f\xe9\x2f\x54\xad\xc3\x2f\x65\xeb\x4b\xd9\xfa\x57\x96\xad\x3d\x73\x1a\x36\x52\x67\x2e\x53\xe8\x65\x62\xef\xa8\x9d\xef\x77\x10\x0c\x32\x47\xbe\xa7\x8d\xbe\x67\x61\xc6\xf3\x5b\x41\xfc\x8c\x09\x79\x8d\xce\xe4\x1a\x28\x84\xc9\x78\x5a\xa1\x81\xfd\xbd\xa7\xcf\x8e\xcc\x7e\x28\x53\x7b\xd4\x4b\x6f\x7f\xef\xdd\xd3\x67\xa7\x47\x37\xaa\xb9\xad\x19\x93\xc9\x39\xcc\xde\x9f\xce\x7e\xbf\xd8\xdf\x3b\xff\x6a\xf6\xcd\xc5\x81\xee\xdf\xf4\x1c\xe8\xfe\xde\xf6\xbd\xb7\x4c\x8f\xee\x94\xf8\xe6\xec\xe5\xd9\xc2\x9c\x3a\x67\x2e\x3d\x35\x24\xb3\x3e\xc4\x4b\x23\xd1\x94\x51\xea\x3e\xa4\x4b\x87\x4b\xe8\xbc\x5c\x0e\xf1\x9b\x12\x7d\xbc\x36\x31\x58\x34\x24\x8f\x93\xa1\xa6\xf5\xd8\x64\xb9\x38\x43\x41\xa2\x79\x4d\x96\xe3\xd6\xc5\xed\xdc\x1d\xaa\x1e\xb8\x34\x7f\x72\x72\xfc\x31\xe2\xcf\x0f\x77\xd9\x06\xff\x7a\xb6\x2d\x3e\x38\x2f\x3e\x7b\xa7\x08\xd6\x77\x2e\xdf\xc6\xdf\xc2\x1a\x86\x45\xb7\xa1\x7f\xd6\xb3\x7c\xdb\xf8\x84\x63\x0f\x4d\x7f\xcb\x2f\x9b\xd2\x5d\x2e\x6a\x4a\xe6\x1a\x89\x9d\xc1\xa6\x95\x7c\xc6\x36\x19\x56\xb3\x25\x58\x32\x82\xb6\x0e\x64\xc1\xfb\x8d\x59\x83\x27\x37\xba\x39\xf6\xfb\x81\xfd\xdf\x85\xe3\xdb\x00\xb7\xbd\xf3\xfe\xc8\xdb\x11\xe6\xa3\xa2\x98\x15\xc5\xec\xe3\x20\x87\xde\xcf\x5f\xd6\x24\xba\x98\x59\xf7\xdd\x0f\xbf\xbe\x7e\xa5\x3f\x9e\xbd\x79\xa5\x99\x49\xd3\xc5\xc9\xfd\x12\xf2\x4b\x4d\x1e\xef\xb9\x1d\xa2\x18\x30\x63\xe1\x0e\xc7\x83\x10\xfe\x9f\x49\x96\xd0\x00\xa3\x61\x1c\x9c\x76\xe8\x32\x05\xf3\xe0\x12\x4d\x97\x7a\x66\xe5\x83\xdd\xc0\x4d\x58\x3b\x15\x35\x19\x9c\xd7\xe3\xe9\x78\xf4\x67\x00\x00\x00\xff\xff\x81\x0a\x94\x06\xa8\x0d\x00\x00" func runtimeSyntaxHtmlYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxHtmlYaml, "runtime/syntax/html.yaml", ) } func runtimeSyntaxHtmlYaml() (*asset, error) { bytes, err := runtimeSyntaxHtmlYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/html.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxHtml4Hdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x28\xc9\xcd\x31\xe1\x8a\xd1\xcb\x28\xc9\x8d\xce\x89\xb5\x37\x51\xe1\xb2\x51\x74\xf1\x77\x0e\x89\x0c\x70\x55\xf0\x08\xf1\xf5\x51\x08\x08\x75\xf2\xf1\x74\x56\x50\xd2\xd5\xd7\x0f\x37\x76\xd6\xd7\x77\x09\x71\x81\x48\x98\xe8\x19\x18\xea\xeb\xbb\xfa\xd5\x64\x94\x94\x14\x58\xe9\xeb\x97\x97\x97\xeb\x95\x1b\xeb\xe5\x17\xa5\xeb\x87\x04\xe9\x83\xcd\xd5\x2f\x2e\x29\xca\x4c\x2e\xd1\x4b\x29\x49\x51\xb2\xe3\x02\x04\x00\x00\xff\xff\x48\xee\xe7\x28\x6b\x00\x00\x00" func runtimeSyntaxHtml4HdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxHtml4Hdr, "runtime/syntax/html4.hdr", ) } func runtimeSyntaxHtml4Hdr() (*asset, error) { bytes, err := runtimeSyntaxHtml4HdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/html4.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxHtml4Yaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x54\x71\x8b\xdc\xb6\x13\xfd\xfb\x77\x9f\xc2\xf1\xaf\x14\xe9\xd2\xb5\x13\x12\x02\x75\x2e\x67\xda\x24\xa5\x85\xb4\x0d\xe5\x4a\x29\xbb\x7b\x20\x4b\x63\xaf\x58\x59\x72\xa4\xf1\x6e\xb6\x7d\xfd\xee\x45\xde\x5c\xd3\x90\xab\x58\xc4\xa2\x19\xeb\x8d\xe6\xbd\x79\xbd\x75\xc4\xa7\x89\x9a\x62\xc7\xa3\x7b\x7a\x71\x61\x88\x49\x73\x53\x5c\x14\x45\x51\xe4\xa8\x57\x23\x35\x45\xb9\xd9\x54\x3b\x1e\xd7\x6e\xdb\x3e\xfd\xa2\x5c\x82\x3b\x52\x86\x62\x53\x94\x57\x0f\x5e\xfd\xfc\xf2\xe6\xf7\xb7\xaf\x8b\xef\x6f\x7e\x7c\x53\xbc\xfd\xf5\xdb\x37\x3f\xbc\x2c\x36\xe5\xaa\xae\x7f\x7b\xf2\xb2\xae\x5f\xdd\xbc\x3a\x47\x9e\x56\x8f\x1e\xd7\xf5\xeb\x9f\xb0\x63\x9e\x9a\xba\x3e\x1e\x8f\xd5\xf1\x49\x15\xe2\x50\xdf\xfc\x52\x2f\x05\xd4\x89\xa3\xd5\x5c\x19\x36\x9b\xf2\xba\xbc\xb8\x88\xb3\xa3\xd4\x2c\x80\xab\x82\x62\x0c\x0b\xe2\xfa\xf6\xc1\xb6\xba\x6c\xaf\xcb\x0f\x81\x74\x1a\xbb\xe0\x2a\x56\x43\x53\x94\xa2\xb5\xf2\x6a\x5d\x6f\x5b\xa1\x44\xd7\x45\xe8\x18\xfc\x69\x84\x31\x91\x52\xc2\x34\x39\x62\x44\x52\x88\x6c\xb5\x23\x24\x6b\x08\xb3\xb1\x41\xb6\xe8\x84\x4a\x24\xfa\xe0\x59\xb6\x30\xc2\x22\x48\xd8\x01\x2e\xe8\xfd\xbb\x39\x30\x21\xca\x16\x5a\x09\x7f\x50\x09\x13\xdb\xe0\x25\x34\x79\xa6\x08\x6d\x99\xa0\x83\x30\x04\x07\x37\xc4\x30\x4f\x12\x46\x28\x56\xc2\xd9\xb4\xdc\x07\x72\x20\x56\xd6\x25\xf4\x1e\x56\xb9\x30\xc0\x46\x38\xb0\x04\x8d\xa2\x23\x23\x5b\xf4\x96\x9c\x49\xc4\xe8\xed\x20\xb4\x5a\x40\x30\x47\x92\xc8\x65\xa1\x0f\x71\x84\xb0\xb2\xed\xa3\x1a\x09\xcb\x9e\xb3\x77\xeb\xc7\xab\x67\x5b\xec\x22\x2c\xec\x38\xc0\x7a\x31\xcd\x8c\x24\xb1\xef\x0c\xf6\x74\x1a\xc8\xc3\xa9\x8e\x1c\x1c\x0d\xe4\x0d\x9c\x15\x7e\x2f\x5b\x8c\x4a\x58\x8f\x09\x71\x2f\x31\x92\x9f\x85\x65\x1a\xf3\x39\xb1\x50\xa0\x28\xe1\xd5\x01\x3e\x88\x33\x16\x92\x8e\x76\x62\x89\x20\x1c\x26\x16\xcb\x4b\xb1\x74\x62\xe6\x69\x66\x89\x49\xa8\xa8\x46\x58\xcd\x73\x24\xe4\x5f\x18\x72\xeb\x65\x8b\x77\x88\x62\x02\x63\xee\x4e\x12\x49\x70\xb4\x7b\x92\x2d\x92\x1a\x27\x24\x12\x7a\x79\xac\x23\xcd\x12\x69\x54\xce\x21\x85\x39\x6a\x42\x9a\x94\x47\xe2\x18\xfc\x80\x34\x8b\x0e\x13\xc6\x51\xc5\x93\x04\xd3\x7b\x56\x99\x4d\xb6\x23\x81\xa3\xd2\x7b\xcc\xc2\xc9\x16\x07\x15\x71\xb0\x86\x02\x8e\x5d\x94\xa2\xa8\x2e\x71\x2d\xef\xd5\x4c\x45\xef\x99\xbc\x21\xf3\x89\x78\xba\x60\x4e\x30\xf6\x80\x2c\x4c\x64\xb5\x0b\xca\xf4\xf7\x21\x64\xbe\xd9\xb2\x23\xb0\xea\xf2\xfe\x21\x19\x3b\x41\x2a\x93\x18\x97\x2c\xb9\xa0\xfe\x1b\x73\x8a\x34\xc5\xa0\x3f\xc1\x39\xf7\x13\x89\x4f\x8e\x3e\xfb\x20\x4d\xa4\xad\x72\x4d\x51\x7e\xb9\xbe\x7d\xbe\x5e\x37\x69\x52\x9a\x9a\xed\x76\x7b\xf9\xfc\xd3\x87\x34\x45\xb9\x6e\x5e\x6c\xef\x0e\xad\x21\xcf\xb6\xb7\xcb\x84\x0a\xe5\x18\xdd\xa0\x83\x0b\x11\x3b\xb2\xc3\x8e\xb1\x8b\xd4\xc3\x9a\x3b\x4d\x04\x3f\x18\x4a\x1a\x79\xdc\x11\xbc\xd0\xce\xea\x3d\xfa\xa0\xe7\x04\x17\x94\xc1\x18\xe6\x44\xe1\x90\xf5\x90\xec\x1f\x77\x94\x44\x7d\x2e\x1c\xac\xe2\x40\x8c\xec\x25\x38\x28\x37\x13\x8e\xd6\xf0\x4e\xbe\xb8\x2b\x48\x07\x9f\x58\x79\xae\xf2\x84\xfb\x3c\xa7\x9b\x72\x7d\xbb\x29\xb7\x97\x9b\xf2\xb3\x1c\x3f\x8f\xdd\xb9\xf2\xd6\xca\xff\xaf\x1f\xad\xbe\xfe\x66\xf5\xdd\xf6\xcf\x67\x5f\x3d\xfb\xeb\x2e\xd7\x50\xaf\x66\xc7\x67\x6b\xc8\x2b\xb1\x8a\xdc\x14\xe5\x87\xde\xe5\x45\x3e\x53\x7a\xf5\xf1\xe0\xec\x26\xc5\x7a\x7b\x71\x9f\x71\x5c\xe1\xfa\x3f\xaa\xad\xe6\x98\x1b\x2c\x7a\x9e\x44\xd6\x71\x36\xb0\xe5\xcf\x60\x19\x7a\x17\xc3\x48\xb2\xa9\xeb\xf5\x6d\xf1\xbf\xed\xc3\x8f\x77\x8c\x23\x79\x5e\x1c\x72\xb5\xaa\x1e\xb6\xab\xd5\x3d\x42\xf8\xc7\x3d\xab\x87\x99\xf6\xbf\x03\x00\x00\xff\xff\x65\x55\x73\x5e\x91\x05\x00\x00" func runtimeSyntaxHtml4YamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxHtml4Yaml, "runtime/syntax/html4.yaml", ) } func runtimeSyntaxHtml4Yaml() (*asset, error) { bytes, err := runtimeSyntaxHtml4YamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/html4.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxHtml5Hdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x28\xc9\xcd\x31\xe5\x8a\xd1\xcb\x28\xc9\x8d\xce\x89\xb5\x37\x55\xe1\xb2\x51\x74\xf1\x77\x0e\x89\x0c\x70\x55\x00\xcb\xd9\x71\x01\x02\x00\x00\xff\xff\x12\x3e\x4e\x3a\x23\x00\x00\x00" func runtimeSyntaxHtml5HdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxHtml5Hdr, "runtime/syntax/html5.hdr", ) } func runtimeSyntaxHtml5Hdr() (*asset, error) { bytes, err := runtimeSyntaxHtml5HdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/html5.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxHtml5Yaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x54\x5d\x6f\xe4\x34\x14\x7d\x66\x7e\x45\x36\x20\x64\xb7\xcc\x14\x1e\xb6\x12\xd9\x6e\x47\x88\x8f\x57\x78\xe0\x05\xa5\xa9\xe4\xd8\x37\x89\x19\x7f\x64\xed\xeb\xd9\x1d\x38\xfc\x77\x94\x74\x86\x55\xd5\x62\x29\x56\xec\x7b\xe4\xfb\x75\xce\x1d\xac\x23\x3e\xcd\xd4\x54\x13\x7b\xf7\x76\xb3\x31\xc4\xa4\xb9\xa9\x36\x55\x55\x55\x8b\x35\x28\x4f\x4d\x55\x3f\x3c\xec\x26\xf6\xad\xeb\xf6\x6f\xbf\xaa\x57\xe3\x44\xca\x50\x6a\xaa\xfa\xee\xcd\x4f\xbf\xfe\xf8\xfb\x1f\xbf\xfd\xfc\xf4\xc6\x7d\xbd\xd9\xa4\xe2\x28\x37\x2b\x6c\x5b\x51\x4a\x71\xc5\xb5\x8f\x6f\xba\xdd\xd5\xfe\xbe\x3e\x1b\xf2\xc9\xf7\xd1\xed\x58\x8d\x4d\x55\x8b\xbd\x95\x77\xed\x4d\xb7\x17\x0a\x4a\xf4\x7d\x82\x31\x89\x72\x46\x22\x85\xc4\x56\x3b\x42\xb6\x86\x50\x8c\x8d\x12\x3d\x7a\xa1\x32\xc1\x08\x8b\x28\xe1\xa2\x3e\x7c\x28\x91\x09\x09\x85\x39\x06\x09\xad\x44\x38\xaa\x8c\x99\xed\x7a\xa4\xc0\x94\xa0\x2d\x13\x74\x14\x86\xe0\xe0\xc6\x14\xcb\x2c\x61\x84\x62\x05\xc5\xca\xd9\xcc\x30\x20\x07\x62\x65\x5d\xc6\x10\x60\x95\x8b\x23\x1c\x58\x82\x3c\xc8\xf7\x64\x30\x58\x72\x26\x13\x63\xb0\xa3\xd0\x6a\x75\x81\x92\x48\x62\x88\xc9\xc3\x0e\x49\x79\xc2\xd4\x7e\xb7\xbd\xed\x30\x25\x58\x58\x3f\xc2\x06\x31\x17\x46\x96\x38\xf4\x06\x07\x3a\x8d\x14\xe0\x54\x4f\x0e\x8e\x46\x0a\x06\xce\xc2\xd9\x70\x80\x57\xc2\x06\xcc\x48\x07\x09\x4f\xa1\xac\x9b\x65\xf2\xf0\xc4\x42\x81\x92\x44\x50\x47\x84\x98\x75\xb2\x33\x23\x8a\xfe\x4f\xd2\x0c\x87\x99\xc5\x9a\x15\xd6\xac\x0b\xcf\x85\x25\x66\xcc\x2a\x29\x8f\xd9\x6a\x2e\x89\x30\xaf\x5f\x1c\xd7\x02\x7f\x40\x12\x33\x18\xa5\x3f\x49\x64\x64\xe5\x67\x64\x12\x7a\x4d\xca\x91\x66\x89\xec\x95\x73\xc8\xb1\x24\x4d\xc8\xb3\x0a\xc8\x9c\x62\x18\x91\x8b\xe8\x31\xc3\x7b\x95\x4e\x12\x4c\x9f\x58\x2d\xfd\x62\xeb\x09\x9c\x94\x3e\xa0\xa0\x38\x1c\x55\xc2\xd1\x1a\x8a\xf8\xd8\x27\x29\xaa\xdd\x95\x7c\x95\x07\x3b\xfa\xc4\x14\x0c\x99\x67\x84\xe8\xa3\x39\xc1\xd8\x23\x16\x7e\x61\xe1\x9d\xa0\x24\xf7\x18\x62\x5c\x5a\xca\x96\x1d\x81\x55\xbf\xec\x67\x30\x26\x41\xca\xc8\x3d\xd2\x8a\x92\x2f\x7c\xce\x89\xe6\x14\xf5\x33\x3f\xe7\x5a\x66\x3e\x39\x7a\x19\xe4\x4c\xda\x2a\xd7\x54\xf5\xd7\xed\xe3\xbb\xb6\x6d\xf2\xac\x34\x35\x5d\xd7\x5d\xbd\x7b\x9e\x48\x53\xd5\x6d\xf3\xbe\xbb\x5c\x5a\x43\x81\xed\x60\x57\xad\x08\xe5\x18\xfd\xa8\xa3\x8b\x09\x13\xd9\x71\x62\x4c\x89\x06\x58\x73\x61\x42\x0c\xa3\xa1\xac\xb1\x08\x0f\x31\x08\xed\xac\x3e\x60\x88\xba\x64\xb8\xa8\x0c\x7c\x2c\x99\xe2\x71\xe1\x40\xb6\x7f\x5d\xfa\x91\xf4\x53\xe0\x60\x95\x46\x62\x2c\xaa\xc6\x51\xb9\x42\xf8\x68\x0d\x4f\xf2\xfd\x25\x20\x1d\x43\x66\x15\x78\x97\x39\xd9\xb0\x68\xef\xa1\x6e\x1f\x1f\xea\xee\xea\xa1\x7e\x81\x09\xc5\xf7\x4f\x91\xef\xad\xfc\xb2\xfd\x76\xfb\xfd\x0f\xdb\x5f\xba\xbf\x6f\xbf\xb9\xfd\xe7\x82\x35\x34\xa8\xe2\xf8\x49\xee\xcb\xca\xac\x12\x37\x55\x7d\xae\xdd\xb2\x28\x2c\x2d\xbd\xfb\x7c\xf1\x34\x21\xaa\xb6\xdb\xbc\x36\x0c\xee\x70\xff\x3f\xd1\xee\x4a\x5a\x0a\x2c\x06\x9e\x45\x96\x7b\x4c\x7c\xfe\x19\x2d\x43\x4f\x29\x7a\x92\xcd\xcd\x4d\xfb\x58\x7d\xd1\x5d\x7f\x7e\xc3\x7b\x0a\xbc\xce\xaa\xed\x76\x77\xbd\xdf\x6e\x5f\x21\xc2\x7f\x73\x6c\x77\xbd\xb4\xfd\xdf\x00\x00\x00\xff\xff\x14\x2c\xef\x1d\x1b\x05\x00\x00" func runtimeSyntaxHtml5YamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxHtml5Yaml, "runtime/syntax/html5.yaml", ) } func runtimeSyntaxHtml5Yaml() (*asset, error) { bytes, err := runtimeSyntaxHtml5YamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/html5.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxIniHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\xc1\x0e\xc2\x30\x08\x00\xd0\x7b\xbf\xa3\x87\x2d\x26\xf8\x43\xbd\x2c\x94\x4e\xb4\x2b\x04\x50\x2f\x7c\xfc\x1e\x2f\x2e\x0d\x36\x5e\x9c\x9d\xfc\x13\xa2\x39\xc7\x4c\xf9\x91\x19\x77\xca\x70\x5c\x19\x46\xbe\xd7\xdc\x2e\xbe\xe8\x50\xf5\x06\x93\x3d\x52\x79\x0d\x31\x4c\xa7\xf8\x6a\x03\x1c\x67\xaa\xc9\x9b\x30\x1a\x9c\xd2\x25\xf6\x9a\x7f\x22\x7c\x1d\xf1\x84\x47\x03\x94\x35\x6a\x29\x77\x00\x00\x00\xff\xff\x17\x9d\xbf\xed\x73\x00\x00\x00" func runtimeSyntaxIniHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxIniHdr, "runtime/syntax/ini.hdr", ) } func runtimeSyntaxIniHdr() (*asset, error) { bytes, err := runtimeSyntaxIniHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ini.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxIniYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x90\xc1\x6b\xdb\x30\x14\xc6\xef\xfe\x2b\x84\x66\x88\xed\x11\xed\xae\x10\x76\xd9\x06\x3b\x8c\x5c\x76\x30\xf8\x39\xa0\xc8\xcf\x99\x56\x59\x12\xd2\x4b\x4b\x41\x7f\x7c\x71\xd2\xb8\xa1\x2d\xf4\xd2\x77\xfa\xf4\xe9\x27\x7d\x1f\x6f\x34\x16\xe9\x31\xa0\x64\xc6\x99\xa2\x18\x90\x50\x93\x2c\x18\x63\x6c\xbe\x72\x6a\x42\xc9\x38\x80\xa8\x8c\x33\x79\xc0\x74\x47\x3e\x64\x3b\xda\xec\xef\x31\x46\x33\x60\xa6\xa4\x5d\xa6\x88\xa9\x2e\x73\x35\x99\x09\x55\x08\x09\x40\x58\x93\x28\x07\xe3\x46\x1f\x75\x4e\x48\xa7\x00\x20\xf4\x78\xcc\x21\xfa\xff\xa8\x09\x40\x1c\xfd\xe0\xa9\x2e\xf3\x03\xa2\xfe\xa7\xe8\x9b\xf8\x3a\x23\xde\x8d\x25\x2f\x8a\x78\xb2\x98\x2e\x55\xd6\x4c\x7b\x97\x48\x39\x12\x07\xef\xad\xa0\x78\xba\xd4\x3a\xcc\x0a\xe0\xc0\xdf\xc5\x46\x65\xd3\x33\x77\x96\x37\xa0\x19\xd0\x91\x19\x0d\x46\xc9\xf8\xbe\xeb\x64\x0a\x4a\xa3\xec\xfb\xa6\xdb\x6f\xfb\x66\x7b\xe5\x52\x40\x6d\x94\x7d\x0d\x01\x74\xa2\x01\xe8\xcb\x85\x23\x45\x38\xa1\x23\xc9\x78\xb7\xdd\xf4\x6f\x0a\x25\x8a\xc6\x1d\xe7\x32\xbc\x02\x00\x10\xb9\xdb\x03\xef\xeb\x06\x78\x5e\x2d\xce\xaa\xaf\x9b\x15\x2f\x96\xc7\xd3\xf9\xcb\xf3\x71\x9e\x44\x2a\xce\x09\x5f\xf8\x62\xa1\x1b\x24\xe3\xe5\x8b\x71\xb3\xb6\xeb\xac\x19\xf9\xc1\x4b\xc6\xab\xbf\xbb\x1f\xbb\xdc\xb6\x6d\xfe\xf5\xbb\xfd\xf3\xb3\x96\xdf\xf9\x47\x51\x9b\x4f\x8c\x7a\x0a\x00\x00\xff\xff\xff\x58\x08\xe3\x6d\x02\x00\x00" func runtimeSyntaxIniYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxIniYaml, "runtime/syntax/ini.yaml", ) } func runtimeSyntaxIniYaml() (*asset, error) { bytes, err := runtimeSyntaxIniYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ini.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxInputrcHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xcc\x2b\x28\x2d\x29\x4a\xe6\x82\xd2\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x16\x24\xb8\x80\x12\x00\x00\x00" func runtimeSyntaxInputrcHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxInputrcHdr, "runtime/syntax/inputrc.hdr", ) } func runtimeSyntaxInputrcHdr() (*asset, error) { bytes, err := runtimeSyntaxInputrcHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/inputrc.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxInputrcYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xcd\x4f\x6a\xf3\x30\x10\x05\xf0\x75\x74\x8a\x41\x5f\x20\x76\x4c\x74\x00\x6d\xb2\xf8\x8e\xe1\x71\x40\x51\xc6\x8d\x40\x19\x09\x69\x4c\x29\xd5\xe1\x4b\xfe\xb4\x0d\x34\xdb\x79\xbf\x37\x6f\x0e\x91\xe4\x23\x93\x85\xc0\x79\x91\xe2\x95\x3a\x91\x90\x17\x0b\x0a\x00\xe0\x9a\xb3\xbb\x90\x05\xfd\x00\x6b\xad\x54\x59\x22\x55\x7b\x03\x3b\xf0\x89\xab\x38\x16\x73\x4c\x29\x9a\xd9\xc5\x7a\xd5\x88\xc7\x2e\xcd\x73\xe3\xc4\xd4\x23\x1e\xf5\x4b\x2d\x65\x79\xe0\xc4\x4f\x28\x17\xca\x25\xf9\x7b\x52\x49\x1a\xe2\x3a\xb0\x8f\xcb\x89\x5e\xbd\xaa\x52\x02\xbf\x5d\xb5\xee\x10\x11\x4d\x1b\x0f\xa8\xa7\x7e\x8b\xba\x6d\x7e\x2e\x9b\xa9\xdf\x6e\xfe\x76\x33\xf9\xe0\xe2\xff\xb3\x2b\xb7\x39\x44\xb3\xff\x45\x97\x0b\xb1\x58\xd0\xdd\xa1\x8d\xa3\xad\xd9\x79\xb2\xd3\xd4\xff\xeb\xc6\xc3\xe7\x64\xb6\xfd\x7e\xfd\x6d\x03\x9f\x88\x65\xe7\xcf\xae\x98\xf7\x73\x10\xba\x63\xd0\x4f\xbd\xe1\x95\xb6\xa0\x57\x03\x0c\x0d\x86\xd5\xa0\xd5\x57\x00\x00\x00\xff\xff\x33\x3d\x95\x68\x90\x01\x00\x00" func runtimeSyntaxInputrcYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxInputrcYaml, "runtime/syntax/inputrc.yaml", ) } func runtimeSyntaxInputrcYaml() (*asset, error) { bytes, err := runtimeSyntaxInputrcYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/inputrc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJavaHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4a\x2c\x4b\xe4\x8a\xd1\x03\x51\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x78\xb5\xb9\x55\x0e\x00\x00\x00" func runtimeSyntaxJavaHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJavaHdr, "runtime/syntax/java.hdr", ) } func runtimeSyntaxJavaHdr() (*asset, error) { bytes, err := runtimeSyntaxJavaHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/java.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJavaYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x92\xc1\x6e\xdb\x30\x0c\x86\xef\x79\x0a\xc3\x28\xd0\xad\x45\x93\x5d\x97\xeb\x1e\xa3\xea\x81\x96\xa9\x58\x8b\x4c\x09\x14\xe5\xcc\x03\x1f\x7e\x90\xbd\xac\x81\x5b\x60\x45\x75\x91\x41\x91\xff\xff\x91\xa6\xf3\x01\x65\x4e\x78\x6c\x7e\xc2\x04\xbb\x5d\x8f\x82\x56\x8e\xbb\xa6\x69\x9a\xfa\x46\x30\xe2\xb1\x69\x8d\xd9\xd7\xf7\xbb\x76\xb7\xe3\x12\x30\xaf\x09\x4f\xcd\x5a\xda\x1a\xd3\x7d\xe9\x62\x0c\x08\xa4\xdd\x2c\xa8\x76\x00\xd6\x3e\x96\x2e\xa0\xba\x10\x41\xd4\x93\x68\x88\x74\x52\xc2\x8b\xe6\x21\xb2\xa8\x0c\x3e\xab\x30\x50\xf6\x48\xa2\x53\xf4\xfd\x57\x63\xba\xf6\xaf\x76\x16\x10\x1c\x91\xe4\x6a\xc0\x08\x67\xb5\x90\x51\x2d\x88\x1d\xd4\x46\x12\x4f\x05\xb5\x47\x07\x25\x88\xf6\x51\x31\x64\x54\xe7\x09\x42\x98\xd5\x45\x56\xef\x94\x51\x0a\x93\xe6\x8b\xaf\x55\x32\x70\xbc\xa8\xf0\xac\x97\xc1\x07\xbc\x75\xbc\xe9\x06\xba\x2c\x0c\x56\xd4\x06\xc8\x59\xf1\x97\x20\xf5\x79\x55\x56\x3f\xa6\xb0\x90\xe5\xfa\x59\x5b\xf1\x94\x05\xc8\x62\x74\xb5\x51\x64\x07\x16\x95\x40\xfc\x84\x9a\xc0\x9e\xe1\x84\x9a\xd8\x4f\x20\xf5\x8e\x75\xc6\xd8\x6b\x2a\x5d\xf0\x56\x6b\xa3\xcb\xc5\xde\x8a\x4b\x9a\x4b\x42\xd6\x3c\x93\x1d\x38\x92\xff\x8d\xfd\x0a\x9d\x75\x8a\x01\x64\x03\x6d\xe3\xe2\x7d\x9d\x92\x70\x41\x75\x50\xc7\x40\x25\x84\xf7\x32\xf7\x54\xc6\x0e\x79\x2d\x78\xfe\xf6\xf4\xfd\xe5\x71\xc9\xda\xa6\x55\x20\x3a\xad\xbf\xba\x9e\x2c\xc0\x8b\x4d\xdb\xfe\x8b\x21\xf5\x9b\x48\x3e\xfb\xb4\x48\x1b\xb3\x7f\x8d\xde\x6c\xcd\xf5\xdc\x3a\x25\xb4\x1e\xc2\x8f\x01\xf8\xb5\xf4\xa3\x38\xf7\x5b\x9a\xfb\x4f\xc1\x24\xc6\xc4\xd1\x1e\x9b\x76\xbf\x7f\x6c\x3f\x47\x3a\x2e\xeb\xfa\x86\xf0\x70\xd8\x22\xde\x6d\x61\x9a\xe7\x97\xff\xcb\x18\xf3\xf0\x66\xf2\xe6\xe1\xf0\xae\xd6\x9f\x00\x00\x00\xff\xff\x38\x5c\x13\xf4\xd9\x03\x00\x00" func runtimeSyntaxJavaYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJavaYaml, "runtime/syntax/java.yaml", ) } func runtimeSyntaxJavaYaml() (*asset, error) { bytes, err := runtimeSyntaxJavaYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/java.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJavascriptHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4a\x2c\x4b\x2c\x4e\x2e\xca\x2c\x28\xe1\xd2\x88\xd1\xcb\x2a\x56\xa9\x89\xd1\x4b\x2d\x8e\x36\x35\x33\xb7\x88\xb5\x07\x71\x72\xb3\x8a\x55\x34\xb9\xe2\x94\x15\xf5\xb4\xf4\x35\x52\xf3\xca\x14\xb4\x35\xed\xf3\xf2\x53\x52\x35\x14\x6a\x54\x34\xb9\x00\x01\x00\x00\xff\xff\x6d\x28\xf1\xe4\x3f\x00\x00\x00" func runtimeSyntaxJavascriptHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJavascriptHdr, "runtime/syntax/javascript.hdr", ) } func runtimeSyntaxJavascriptHdr() (*asset, error) { bytes, err := runtimeSyntaxJavascriptHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/javascript.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJavascriptYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x56\x6d\x6f\xdb\x36\x10\xfe\x9e\x5f\xc1\x3a\xdd\x6a\x2b\x90\x9d\xbe\xac\x5d\x8d\x6d\x42\xda\x26\x83\x81\x35\x2d\x9a\x16\x0b\x26\x2a\x2d\x25\x9d\x6c\x26\x14\x29\x90\x27\x3b\x5e\xae\xfb\xed\x03\x65\xb9\x76\x9c\xc6\xcd\x30\x0c\xf3\x07\xbe\x9c\x1e\x3e\x77\xbc\x3b\xde\xb9\x90\x0a\x70\x5e\xc1\x90\x9d\x8b\xa9\x70\x99\x95\x15\xee\xec\xe4\x80\x90\xe1\x70\x87\x31\xc6\x3c\x42\x8b\x12\x86\xac\xd3\xe5\xbc\x7f\xee\xee\x13\xe7\x7d\x70\xf1\x0f\x4f\x9f\xfd\x98\x44\xcd\xae\x3c\x77\xf7\x7b\x9d\x06\x3e\x01\x91\x83\x1d\xb2\xce\xd9\xee\xbd\x7e\x30\xe8\x82\x9e\xb2\xbd\x5e\xa4\x4d\x0e\x5d\x46\x1e\xb5\x63\x6b\x05\x6e\x41\x1e\xb2\xcc\x68\x87\x42\x63\x5f\xd7\x65\xda\x1c\xe4\x3c\x8d\xc3\xbd\x24\xea\xc6\x0f\xc3\xe7\x49\xbc\x1f\x3e\x4f\x02\xda\x8f\xf7\xc3\x67\x7e\xbe\xf4\x02\x11\x16\x07\xe1\x51\xb2\xd7\xeb\xc6\xf5\x87\x24\x56\xbf\x25\x11\xf9\xd1\xef\xa2\x5e\xc4\x79\xda\xb9\x03\xbd\x67\xde\xe3\xbc\xdf\xaa\x58\x4c\xcb\xbd\xe7\x3e\x84\xb7\x55\x12\xef\x85\x49\xd4\x8a\xa2\xb8\x38\xf2\xca\xee\xcc\x7e\x93\xe2\x1a\xc3\x6e\xc8\x64\x0e\x1a\x65\x21\x9b\xd3\xf1\x41\xf8\x87\x08\xff\xfc\x98\xb4\x8b\xfd\xf0\xf9\xc7\x24\x88\xe3\xa1\xab\x44\x06\xc3\x24\x09\xe2\x6e\xd2\x1e\x65\x67\x0c\x27\xd2\x31\xe9\x98\x36\xc8\x32\x63\x2d\x64\xc8\x6a\x27\xc6\xc0\x4c\xc1\x70\x02\x6b\xe4\x2c\x33\xca\xd8\xd6\x6c\x37\x2f\x53\xa3\xfa\xa9\x15\xd9\x05\xa0\x5b\x44\xf6\x8a\x38\xff\xdc\xeb\x6c\x83\x74\x89\xf3\xde\x76\x48\x4c\x9c\x27\xdb\x21\xff\xa1\x22\x53\x81\x15\x68\xbc\x2b\xbb\x71\xb8\x37\x08\x7e\xfe\xe9\x97\x7b\x7f\x7d\x17\x0d\xbf\xa7\x84\xe2\x7e\x72\xf5\x78\x4d\x31\x0a\x84\x12\x34\x2e\xa2\xd6\x15\x6e\xae\x33\x12\x33\x21\x91\x52\x0b\xe2\x82\x32\xe1\x80\x32\x81\xd9\x84\x9a\x40\xfb\x11\xa5\xae\x81\x72\x48\xeb\xf1\x18\x2c\xe5\x50\x88\x5a\x61\x6f\x2d\xe3\x36\x79\x73\x50\x80\x40\xb9\x21\x50\x0e\x08\x2e\x2b\x63\x91\x0a\xa9\x85\x52\x73\x2a\x8c\xa5\xa2\xd6\x19\x4a\xa3\x39\x0f\x22\xca\x94\x70\x8e\xe0\x12\x41\xe7\x6e\x1b\xef\x18\x90\x64\x41\xb2\x5c\xf0\x59\x53\x92\xd4\x64\x0a\x92\x4d\x4e\x66\x60\x0a\x52\x80\xa4\x61\x46\x16\xce\x21\x43\xb2\xe0\x8c\x9a\x02\x59\xc0\xda\xea\x6d\xe4\x0e\x90\xbc\x4c\x66\xe4\xea\x0a\x2c\xb9\x99\xf4\x7e\xf0\x19\x47\x38\xb1\x66\x46\x68\xe7\xe4\x2b\x87\x29\x68\x2a\x2c\x4d\x8d\xcc\x69\x36\x91\x0a\x68\x26\x71\x42\x73\x09\x2a\x5f\xa9\xd8\x65\x16\x1c\xd8\x29\xe4\x2c\xad\x91\xd5\x5a\x38\x27\xc7\x1a\xf2\xd6\x00\xb0\xd6\xb4\xef\xa7\x0b\xba\x2e\xfd\xbd\x54\x63\x91\x23\xa9\x11\x6c\x21\x32\xa0\x4a\x64\x17\x62\x0c\x54\x59\x39\x15\xe8\x67\xe3\x0b\x15\xe4\x54\xd5\xa9\x92\x59\x6f\xf3\x61\x2e\x7d\xa5\x4c\x2a\xd4\x7b\x6f\xfc\x48\x17\x52\x4b\x9c\x93\xae\x95\xa2\x5a\xe7\x50\x48\x0d\x39\x1d\x8b\xe3\xde\x57\xea\x46\x4b\xf0\x8f\xc0\x68\x6b\xa0\x42\x28\x07\xeb\xa0\x45\x95\x6d\x00\x07\xd6\x8a\x39\xbd\x30\x46\x81\xd0\xf4\xca\xdf\xe4\x50\xd7\xe5\x22\x77\xe9\xd0\xbb\x82\x8e\xda\xa4\xa0\x5f\x41\xb7\x1f\x5e\x8b\x8a\x5e\x0b\x9c\xdc\xc2\x7a\xdc\xd4\x20\x7a\x93\x36\xb1\x7e\x6b\x4d\x29\x1d\xf8\xf9\x72\x4e\xef\xa0\x50\x5e\xfa\x0e\xc6\x87\x97\x15\x9d\x00\xd2\x09\x5a\xa9\xc7\x74\xd2\xbc\x1c\xfa\x1d\xc4\x85\xe7\xf7\xf3\x09\xe0\x2d\x2a\x5e\xc8\xf1\x48\xe3\xd3\x27\xed\x05\xe4\xf8\x83\x5c\x6d\x8f\x94\x11\xf8\xf8\xd1\xda\x66\xf9\x65\xa4\xf1\xe1\xd3\x66\xb9\xe0\x6d\x33\xe2\x9a\xe3\x06\xf1\x59\x90\x74\xe3\xb3\x41\x42\x5d\xce\x39\x1f\xf4\x7a\x41\x7c\xe6\x57\xc9\x20\x1e\xcb\x32\x09\xbe\xea\x6d\xce\x9b\xc6\xd0\x0c\xd1\x62\x24\x2f\xbd\xd6\x26\x1a\x49\x9c\x16\xda\xe2\x03\xde\xe1\x3c\x6a\x68\x57\x7c\x65\x9b\xf9\xb7\xb7\xac\x05\xf2\x5a\xad\x6e\x6a\x86\x02\x8b\x94\x43\x66\x72\xf8\xf0\x6e\xb4\x5a\xbd\x34\x65\x65\x34\x68\xa4\xdc\x64\xb5\xa7\x27\xd0\x4b\xd4\x97\xd5\x0a\x05\x2e\x13\x15\x10\x4c\x85\x22\xe9\x8e\x7c\x86\x02\x49\x77\x2c\x8e\xa9\x12\xd6\x41\xe3\xce\xc5\x72\xa4\x91\x6a\xdd\x1e\xa8\x75\x73\x64\x26\x75\x6e\x66\xeb\x41\xbb\x61\xea\x48\xa3\x8f\x72\x7a\xe0\x1c\x94\xa9\x9a\x6f\x05\x1f\xd8\x71\x63\x74\x5b\x80\x76\x36\xdb\x9d\x6b\x72\x67\xd1\xc2\xfd\xcf\xa1\xb0\x4d\x3c\x3a\x9d\x2f\x32\xd0\xf9\x86\xc4\x5d\xc8\xaa\x0d\x5a\x7f\x25\x5d\xfb\x37\xb0\xfc\xad\x6b\xaa\x20\x93\x42\xbd\x9c\x08\xbb\x3a\x7a\x57\x73\x1e\x6c\x5a\xf3\xe0\x7f\x34\xe6\xd3\xa6\x31\x9f\xfe\x95\xda\xeb\xd8\x8d\x08\x5e\x3e\x7a\xc2\xf9\x55\x3f\x88\x38\xff\x7c\xd3\xc2\xd4\x18\xb5\xb5\x54\x5d\x43\xf6\x9b\xcf\x2d\xfe\x1b\x50\x4f\xb7\xc6\xbc\xf6\xda\x57\xcf\xec\x86\x63\x06\x83\x4d\xcf\xdc\xff\x86\x67\xd0\xe4\xc6\xb7\xf8\xf7\x6f\x5e\xbd\xa1\xd3\xd3\x53\x3a\x1a\x9d\xbe\x3e\xec\xdd\x41\x15\xe7\xc1\x8d\x0c\xe5\xc1\x60\xab\xbe\x5d\xb6\x6c\xd0\x6c\xf9\x98\x85\xdf\x6d\x0f\x81\xe3\x3c\xe0\xdc\xf5\x83\xcd\x50\xdd\x6a\xfc\xdf\x01\x00\x00\xff\xff\xc6\xc3\xdb\xb7\x8b\x0b\x00\x00" func runtimeSyntaxJavascriptYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJavascriptYaml, "runtime/syntax/javascript.yaml", ) } func runtimeSyntaxJavascriptYaml() (*asset, error) { bytes, err := runtimeSyntaxJavascriptYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/javascript.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJinja2Hdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xca\xcc\xcb\x4a\x34\xe2\xe2\xe2\x02\x04\x00\x00\xff\xff\x15\x55\xdb\x7b\x09\x00\x00\x00" func runtimeSyntaxJinja2HdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJinja2Hdr, "runtime/syntax/jinja2.hdr", ) } func runtimeSyntaxJinja2Hdr() (*asset, error) { bytes, err := runtimeSyntaxJinja2HdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/jinja2.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJinja2Yaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x53\xc1\x6e\xeb\x38\x0c\xbc\xe7\x2b\x8c\x14\x05\xda\x43\xf6\xb0\xc7\x5c\xfa\x21\x9b\x3d\xc8\xd2\xd8\x61\x56\xa6\x14\x8a\x4a\x9a\x86\xf9\xf7\x85\x1c\xa7\x68\xfb\x80\x87\x27\x04\x21\x2d\x8e\xc4\x19\x52\x1c\x28\x42\x2f\x19\xdb\xee\x40\x7c\x70\x7f\xaf\x56\x52\x23\xca\x76\xd5\x75\x9b\x8e\xd8\xc7\x1a\xb0\xed\xd6\x7b\x9d\xe2\x7a\xde\x2b\x19\x9e\x5c\xdc\x76\xeb\x97\xeb\xd5\x6e\x37\xbb\x3e\x6f\xde\x6c\xf3\xf6\x7c\x7b\xbd\x03\x02\x06\x57\xa3\xb6\x1b\xee\xab\xa8\x13\x9d\xf1\x0d\x79\xbd\xce\xb8\xfb\x02\x87\x16\x68\xa7\xed\x76\xfb\x12\x88\x34\x91\x6e\x46\x49\x35\x6f\x1f\x29\x3f\x83\x9f\x0c\x1f\xeb\x2b\xd3\x7c\xd1\x7d\xe2\xf5\xb7\x68\x51\xa7\x98\xc0\x8d\xc5\x6e\xd7\xbf\xd0\xc8\x49\xd0\x4d\x54\x0a\xf1\x68\x67\xd2\xfd\x4b\xaa\xfa\xfa\xd6\xf9\xc4\x8a\x77\xb5\x3e\x26\xff\x9f\x79\x17\xa3\x81\xc3\xfd\x0b\x1c\x1e\x1b\x03\x45\x85\xcc\x5e\x9a\xcd\xe4\xbc\xa4\xe6\x88\x3b\x37\x53\xa0\x86\x77\x6d\x9e\x2d\xe0\x86\x5c\x68\xda\x1d\xde\xb0\x02\x5f\xa5\xd0\x09\x56\x7c\xca\x08\x56\xa0\xaf\xbb\x5d\xff\x5d\x00\x05\xb0\xd2\x40\x90\xbf\xfa\x4a\x51\x89\x87\xca\x7e\x51\xe3\x54\xc5\x7a\xa7\x7e\x6f\xde\x65\x52\x17\xe9\x03\xe6\xc1\x2d\xab\x4f\x95\xd5\x82\x2d\x5d\xb1\x40\x5e\x4b\x12\x35\x18\x8a\x77\x19\x8d\x1e\x0a\x7d\x60\x48\x32\x39\xb5\x81\xa4\x68\x23\xeb\xb1\x00\xe6\x2e\xf4\x17\x23\x6e\x2c\xec\x90\x88\x2d\xba\xa2\x16\xc1\xa3\xee\x2d\xa6\x33\xc4\x72\x16\x62\x35\x71\x1c\xd2\x64\x82\x03\xbc\x2e\x66\x26\x28\xc8\xd1\x79\x98\xe0\x04\x29\xb0\xe2\x06\x58\x41\x6c\xb0\xbb\x99\x61\x45\x85\xb2\xba\xb1\x98\x92\x46\x98\xa6\x43\x49\x6c\x2a\x34\x99\x4a\x65\xef\x14\x56\x99\x8e\x15\x56\x73\x86\x58\x95\x08\xf6\x29\xa0\x79\x4d\xf9\x39\x49\xb8\xcb\x6e\xde\x59\x5c\xb6\xf7\x29\xb6\xdb\xff\xa4\xb0\x8a\xf2\x78\x26\xad\xdb\xae\x8f\x68\xc5\x23\x46\xb0\x40\x27\x2a\xd4\x47\xf4\x17\xc3\xd1\x70\xac\x2e\x6a\x5a\x0a\x19\x0c\x27\xb0\x8d\xb0\x51\x8d\x14\x32\x1f\x6d\xbf\xb9\x3e\x51\x6d\x72\x39\xb7\xf7\xc6\x30\x4e\xed\xaf\x4e\x3d\xc4\x52\x08\x56\xdc\x04\x57\xac\xe0\x58\xc1\x1e\x73\x19\x78\xb4\xca\x8f\xd4\xb3\xd6\xdf\xf2\x5f\x3a\x3c\xc6\xd4\xcf\xe3\xd9\x14\x44\xca\xa5\x4e\xe6\x2f\x3e\x42\xe6\xce\x41\x8c\xdd\x84\x92\x9d\xc7\xe3\xba\x4d\xe7\xd3\x34\x8f\xc7\x2f\x33\x7b\x7d\xfa\x39\xac\x4f\xb7\xf5\x8f\x41\xec\xfe\xf9\x77\xf5\x7f\x00\x00\x00\xff\xff\xb4\x53\x06\xfd\x47\x04\x00\x00" func runtimeSyntaxJinja2YamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJinja2Yaml, "runtime/syntax/jinja2.yaml", ) } func runtimeSyntaxJinja2Yaml() (*asset, error) { bytes, err := runtimeSyntaxJinja2YamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/jinja2.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJsonHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x2a\xce\xcf\xe3\x8a\xd1\x03\x51\x2a\x5c\x71\x31\xd5\x2a\x5c\x80\x00\x00\x00\xff\xff\x32\xc0\x2c\x31\x12\x00\x00\x00" func runtimeSyntaxJsonHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJsonHdr, "runtime/syntax/json.hdr", ) } func runtimeSyntaxJsonHdr() (*asset, error) { bytes, err := runtimeSyntaxJsonHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/json.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJsonYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x52\x3b\x6b\xf3\x30\x14\xdd\xfd\x2b\x84\x08\xf8\x85\xfc\xe5\x83\x42\x89\x16\x53\x4a\x33\x75\xe8\xd2\x49\x57\x01\xd9\xb9\x6e\xdc\x3a\x8a\x91\x64\x68\x89\xfb\xdf\x8b\x1c\xa7\xcd\xab\x90\xa5\x1a\x2c\xdf\x73\x74\x1e\x58\xae\xea\x06\xdd\x47\x8b\x9c\xbc\xda\x8d\x0e\x82\x25\x3a\x2c\x1d\x0f\x08\x21\xc4\x73\x5a\xad\x91\x13\x0a\x90\x79\x7e\x42\x07\x62\x85\x6a\x89\x86\x13\xba\x00\xd8\x4e\x68\x10\x98\xae\x41\xbb\x13\x31\x52\x6e\xb4\x75\x4a\xbb\x4c\x77\xeb\x62\x38\x06\x50\x08\x96\xca\x3c\x12\xff\xd9\x4c\x8a\x29\x9b\xc9\xa4\x9f\x8a\x29\xbb\xf5\xfb\xbb\x07\x14\xab\xee\xd8\x5c\xa6\x71\x24\xba\x67\x29\x9a\x47\x99\xf7\xfe\xe9\xa7\x3c\xce\x01\x0a\x7a\x85\xbd\x77\x4e\x01\xb2\x31\x62\xb7\xed\x67\xef\xfd\x80\x4f\xad\x14\x29\x93\xf9\x08\xe5\xa2\x9a\xfb\xb0\xab\xdd\xcf\x2d\x7e\x71\xd8\x49\x23\xdd\x35\x4d\x7c\xa1\xfe\x48\x3b\xd3\x61\x5f\xa9\xc6\xe2\xa5\x43\x99\x75\xa6\xd6\x2f\x9c\x0c\xb8\x5f\xd6\x29\x33\x68\x29\xfd\xc6\x50\x2f\x4f\x10\xfb\x56\xb7\x43\x00\x40\xf6\x83\x1e\xdc\xd2\x7e\x1d\x46\xb5\x58\xd6\xaa\xb9\x5f\x29\x73\x2c\x3d\xaf\x73\xd6\x26\x3c\x2d\x13\xfe\x41\x97\xb1\x8c\x75\xca\xe1\x1a\xc7\x2f\x08\x34\xf2\x34\xd0\x5e\x2c\x80\xca\x38\xf1\xef\x42\x70\xdb\xaa\x12\xb9\x94\x09\x07\x4a\x08\xd0\x30\x02\x08\x7b\xb1\x08\x65\x9c\x84\x47\xfc\xc5\x8b\x01\xe8\x0e\xfe\xca\xed\xcd\x67\xef\x31\x51\x54\xda\xb8\x10\xe8\x3f\x3f\x49\x1a\x7c\x05\x00\x00\xff\xff\x67\x47\xd8\x55\x3e\x03\x00\x00" func runtimeSyntaxJsonYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJsonYaml, "runtime/syntax/json.yaml", ) } func runtimeSyntaxJsonYaml() (*asset, error) { bytes, err := runtimeSyntaxJsonYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/json.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJsonnetHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe2\x8a\xd1\xcb\x2a\xce\xcf\xcb\x4b\x2d\x51\xe1\xe2\x02\x04\x00\x00\xff\xff\x8a\x33\x16\xa7\x0d\x00\x00\x00" func runtimeSyntaxJsonnetHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJsonnetHdr, "runtime/syntax/jsonnet.hdr", ) } func runtimeSyntaxJsonnetHdr() (*asset, error) { bytes, err := runtimeSyntaxJsonnetHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/jsonnet.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJsonnetYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x56\xfd\x6e\xdb\x46\x12\xff\x5f\x4f\xb1\xa7\xf8\xce\x92\x1c\x49\x09\x90\x3b\x5c\x74\x1f\x39\x5f\x6d\x23\x6e\x13\x24\xa8\x93\xd8\xad\xa8\x14\x4b\x72\x28\x6e\xbc\x9c\xa5\x77\x86\x95\x94\x4c\xde\xbd\x58\x92\x92\x25\xd9\x40\x9b\x00\x0d\x61\x8b\x33\xb3\xbb\xbf\xf9\x1e\x6e\x66\x2c\xa0\x2e\x60\xa2\x3e\x90\x43\x04\xee\x74\x52\x60\x48\x78\xd2\x51\x4a\xa9\xdb\xe5\x6e\x14\x8d\xda\x2d\x07\xdd\x4e\xe7\x81\xba\x28\x21\x99\xa8\x9c\xb9\xa4\xc9\x78\xdc\x2e\x8d\x9c\x9f\x8f\x3d\x64\x63\x2a\x21\x19\xe5\x5c\xd8\x4e\xc7\x57\x16\xa8\x81\x7b\xa0\xe2\xca\x58\x1e\x1a\x54\x2e\xfe\x00\x09\x53\x2b\x3e\x3b\xbf\x7a\x79\x3a\x51\x07\x6a\xe1\xf0\x90\x55\xa1\x39\xc9\xeb\xa5\xa1\x4a\x1c\x12\x6b\xe4\xda\x84\xb8\x47\x60\x33\x89\xa2\x03\xa1\xaa\x04\xdf\x8f\xa2\xb8\xbb\x86\x76\xce\x82\xc6\xcd\x01\xda\x03\x18\x85\x0d\x2d\x0a\x56\xd6\x0a\xfb\x0a\x24\xd3\x96\x60\x1b\x86\x73\x50\x61\x7f\xaa\x7d\xaa\xac\x89\xbd\xf6\xab\x16\xc9\xa4\x80\x6c\x32\x03\xbe\x81\x21\x4e\xa3\x68\xd4\x83\x25\xbf\xd3\x5e\x38\x37\x74\x66\x2c\x08\xaf\x4a\x10\x0b\x38\xe7\x5c\x1a\x37\x9f\x6b\x6a\xa9\x33\x03\x36\xa5\x5b\xf1\xb1\xb5\x3b\x2b\x81\x2f\x7d\x85\x20\x85\x2e\x2f\x0d\xe7\x3f\xc0\x4a\x74\x4c\x42\x66\x8e\x52\xe8\xa5\x14\x06\xa5\x74\x0b\x81\x65\x29\xd6\xcd\xc3\xdb\x21\x20\x4b\xa1\x91\x0d\x91\x96\xcc\x3a\xe7\x25\x01\x63\x85\x6e\x3c\x0b\x19\x94\xc4\x91\xb0\x46\xd1\x81\xd1\x81\xd3\x81\x2d\x5c\x2a\x9a\x08\x3c\x9f\xde\x54\xda\x0a\xbb\x0b\xf6\x06\xe7\x92\xb8\x14\x4a\x67\x90\x25\xc9\xb5\x17\xaa\x62\x62\x2f\x99\xc1\xf4\xa2\x21\x89\xb5\x67\x0a\x16\x0a\x60\xda\x10\x54\x5a\xc3\xcd\xef\x0b\x53\x04\x92\xfd\x8f\x50\x5a\x9d\x80\x68\x4a\x8c\x79\x5b\x96\xe0\x1b\xf2\x85\x5b\x40\x40\x09\xda\xbe\xcb\xb5\x27\xc9\x9c\x2f\x34\x0b\x50\xa2\x4b\x68\xcc\x38\x71\xd6\x86\xa5\x6d\xd9\xeb\x15\xe7\x0e\xa5\xd4\x9e\xe0\x1c\xb9\x21\x5e\x25\xac\x6d\x43\x3e\x87\x65\x43\x7c\x4f\x0e\x05\x30\x78\xf2\xf6\xcd\xd9\x3f\x25\x85\x0d\x59\x68\x34\x19\x10\x9f\xa3\xd9\xd0\x2d\xee\x2e\xfb\x2e\x68\x5f\x8b\x02\xe0\xe9\x72\xc3\xfe\xa4\x0b\x7b\xe2\x92\x1d\xfe\x82\x3d\xe8\x62\x23\xba\x2a\x6c\x38\x54\x58\x29\xf4\x35\x1c\x7b\xaf\x57\x92\xb8\x0a\xb9\x8e\x64\x48\xf1\x3a\xcd\xe7\x98\xc2\x52\x32\x63\x19\xfc\x4b\x5d\xb6\x94\x64\xce\xa6\xb6\xfe\xf5\xe2\x35\xce\x41\x3e\x38\x83\x62\x0d\x02\x49\x66\x35\x33\x60\x0d\x4b\x42\xce\xb3\x54\x68\x6e\x84\x80\xc3\xff\x39\x06\x04\x02\x7e\x8b\xc6\x61\x20\x4e\x4c\x96\x85\xf7\x4b\x28\x62\xf0\x12\x6b\x82\x7f\x3c\x69\x5f\x27\x75\x74\xfe\xbf\x62\xa0\x1d\x89\x14\xe9\xdf\xa5\x00\x3f\x87\xd7\xa1\x29\x85\xbd\x4e\x76\xfa\xa5\xc2\x9b\xca\x31\xa4\x6d\x47\xab\x6b\x58\xad\x3b\x2f\x34\xc2\x44\x75\xa7\xbf\xe8\xe1\xc7\xe3\xe1\xcf\xb3\x35\xf1\x68\xf8\x74\x36\x88\x22\x1a\x4c\xd6\x20\xb7\x67\x15\x41\xa9\xbd\x66\xe7\x5b\x10\x62\xcd\x50\x40\x3d\x00\x36\xfb\xaf\x61\xb5\x70\x3e\xa5\x7b\xf6\x84\xf6\x6e\x4a\x5a\xc0\x12\x08\x78\xef\x42\x20\xbd\x64\x15\x26\x1c\x42\x61\x32\x31\x45\x19\xe2\xd5\xbc\x42\x3d\x87\xa8\xba\x24\xb4\x80\x36\x36\x94\x65\xc2\xc2\x39\xe0\xb6\xab\xae\x84\xda\xb2\x8d\xda\x55\x11\x3b\x3b\x5a\x8b\x27\xaa\xdb\x9b\x8e\xfe\xf5\xf0\x68\x20\xff\xf9\x4b\x14\xfd\x75\x26\xff\x96\xff\xca\x58\x86\xf2\xb7\xfe\x1a\xa2\xd4\x1e\x90\x73\x20\xd8\x03\x89\xbd\x4e\xae\x81\xa9\x06\xe9\xf5\x3f\x7d\x9e\x49\x14\x4d\x25\x8a\x66\x9b\xb3\x58\x85\xb4\xdd\x19\x6b\x8d\xb8\xf5\xfc\x91\xf4\xa6\x8f\x87\x4f\x67\xd3\x3a\xc6\xfd\x7e\x2f\x8a\x46\x35\x7d\xd4\x7f\xd6\x9b\xc2\xe9\x6c\x1a\x45\x47\xc3\xd9\xb3\xb5\xac\xf6\xae\xc5\x4f\x5d\x15\x5b\x18\xb6\xe9\x6c\x5a\x73\x5f\x59\x23\x6d\xa6\x79\x78\xea\x31\x10\x74\x77\xbb\x1b\x19\x60\xba\x27\xa1\x6b\x53\xd6\x06\x46\xd1\xb6\x78\xeb\xcb\xb0\x7e\xb6\x55\x95\x90\x18\x6d\xc3\x70\x68\xcf\x56\xc1\x6a\x3d\xcc\x8e\x87\x67\xb3\x4f\x4f\x3e\x4b\x90\x4d\xe3\x0c\x3d\x1f\x46\xdd\x71\xe0\x66\x1b\x67\xc8\xe0\xfc\x6b\x9d\x39\xdc\xf7\xe5\xf0\x5e\x57\x0e\xbf\x8d\x27\xbb\x69\xf9\x15\x7c\xac\xd9\x14\x5f\xe8\xd2\xff\xbe\x49\x82\xb6\xcf\x86\xe7\xde\x5c\x7c\xad\x07\x7f\x7e\x56\x0e\x37\x31\x8f\xad\x4b\xae\xff\xa0\x81\xeb\xdb\xcb\x96\xe0\x4d\x6e\x48\x19\x0a\x57\x99\x9b\xca\x30\x28\x6f\xe6\x39\x8f\x76\x76\x80\x0a\x06\x28\xd2\x2b\x52\xe1\xea\x30\xe9\x6c\x2d\xc7\x30\x37\x88\x06\xe7\x6a\x61\x38\x57\x22\xf2\x50\x65\xce\x5a\xb7\x80\x54\xc5\x2b\xe5\xca\x30\xc8\xb4\x55\x8b\xdc\x30\x50\xa9\x13\x50\x1a\x53\xa5\x15\xc2\x62\x18\x3e\x0f\xfb\xca\x10\x96\xac\xd0\xe1\x30\xb6\x1a\xaf\x55\xd8\xa2\x8a\x8a\x58\xc5\xa0\x4a\x0f\x99\x59\x42\xda\x28\x23\x57\x40\xbd\xf3\x23\x78\xa7\x9a\x7b\xcc\x16\xd8\x96\xc6\xcb\x51\x0d\xdd\x04\x2b\xdc\x02\x94\xe6\xfa\xfe\x94\x19\x4f\xac\xc2\xa5\x01\x6e\x2a\x40\x6e\xd4\x71\xae\x59\xa5\xae\x9d\x7c\x0d\x1a\x3a\x6e\x9c\x6d\x74\x5f\x3e\xac\xdd\x30\xac\x0c\x29\x8d\xaa\x1e\xde\xca\x64\x75\x84\x1a\x94\x00\x50\x1f\x4b\x1c\xb2\x36\xb8\x05\x56\x5b\x7e\x5f\x68\xb6\x43\x27\x22\xa3\xed\x50\x5f\x86\xd8\x40\xaa\xd8\x35\xd7\x4e\xf5\xbe\x17\xd1\x51\x5f\x39\xdc\x72\x65\x2f\x70\x3a\x63\xf0\x01\x69\x37\xc8\xa8\x16\xb7\x60\xa1\x24\xd5\xfb\xe8\xf1\x68\x70\xd0\xb9\x3b\x2e\x23\x69\xfe\xd4\xe0\x60\xbf\xac\xdf\xab\xc1\x66\x79\xbf\x96\xd5\x74\xb6\x2e\xd1\xa2\xb2\x6c\xea\x54\xab\xc4\x15\xe1\xe3\xb7\x29\xd4\x9a\xbb\xdb\x41\xe3\x28\x1a\xdc\x19\x02\xd1\x60\xfc\x3b\x0d\xc3\x2e\x75\xe1\xab\xf4\xe6\xd5\xc9\x2b\xb9\xba\xba\x92\xba\xdc\xfb\x93\x67\xfb\xb3\xf6\x4b\x6c\x79\x20\xbd\xf1\xb8\xbf\x6f\xcd\xc1\xd7\x9b\xf2\x5b\x00\x00\x00\xff\xff\x22\x3e\xa1\x0e\xc9\x0c\x00\x00" func runtimeSyntaxJsonnetYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJsonnetYaml, "runtime/syntax/jsonnet.yaml", ) } func runtimeSyntaxJsonnetYaml() (*asset, error) { bytes, err := runtimeSyntaxJsonnetYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/jsonnet.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJuliaHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x2a\xcd\xc9\x4c\xe4\x8a\xd1\xcb\xca\x51\xe1\x8a\x53\x56\xd4\xd3\xd2\xd7\x48\xcd\x2b\x53\xd0\xd6\xb4\x07\xcb\x68\x28\xd4\xa8\x68\x72\x01\x02\x00\x00\xff\xff\x6f\x4a\x9c\x08\x25\x00\x00\x00" func runtimeSyntaxJuliaHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJuliaHdr, "runtime/syntax/julia.hdr", ) } func runtimeSyntaxJuliaHdr() (*asset, error) { bytes, err := runtimeSyntaxJuliaHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/julia.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxJuliaYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x94\x6f\x6f\xda\x3a\x14\xc6\xdf\xf3\x29\x7c\x03\xf7\x36\x01\x85\xc2\xdd\xd4\xaa\xd1\x58\xd7\x37\x93\xf6\xa6\x1f\x60\x49\x40\x76\x72\x02\x6e\x1d\x9b\xd9\x27\x6d\x59\x4f\xf7\xd9\xa7\x98\x7f\x05\xba\x49\x9b\x90\x0c\x7e\x7c\xce\xcf\xcf\xf1\x39\xa2\x92\x0a\x70\xb5\x84\x84\xdd\x35\x4a\xf2\x4e\xa7\x04\x84\x02\x93\x0e\x63\x8c\xb5\x87\x9a\xd7\x90\xb0\x20\xcb\x86\x77\xaa\x17\x78\x79\x01\xbc\x04\x9b\xb0\x60\xda\xfd\x67\xd8\x3f\x0f\x41\x3f\xb0\x41\x74\xed\x01\x21\xa3\x5e\x14\x74\x3a\xb6\x51\xe0\x92\x8e\x8f\xef\x32\xd1\x48\x85\xb1\xd4\xcc\x88\x3b\x28\xd0\x79\x39\x66\x85\xd1\x0e\xb9\xc6\xa1\x30\x46\xf9\x4b\x44\x88\xb6\x01\xaa\xb8\x72\x10\x65\x99\x08\x8e\x22\x37\x41\xda\xe0\x42\xea\x39\xd5\xd2\x39\xa9\xe7\xfb\xc8\x83\xcb\x38\xa2\x95\xa2\x41\x38\xbe\x2f\x61\xc1\x6c\x96\xde\xc4\x5f\x79\xfc\x7d\x14\x5f\xcd\xf2\xc1\x6c\xb6\xcf\x2f\xa1\x92\x5a\xa2\x34\x7a\x9b\x27\x4b\xd0\x28\x2b\xe9\x8b\xde\xe4\xcd\xf2\xd7\x80\x7e\x9a\x26\x6e\xc9\x0b\x48\xf2\xbc\x9f\x86\xf9\x9e\x76\x0f\xab\x47\x63\xcb\x2d\xca\x21\x47\xa8\x61\x57\x89\xe0\x16\x6a\x53\x36\x0a\x48\xc0\x5c\x6a\x12\x16\xf8\x3d\x15\x1c\x8b\x05\x79\xbf\xed\x8a\x52\x37\x40\xa5\x21\x50\x0e\xfc\x22\x2b\x02\x5d\x12\x3c\x2d\x8d\x45\xaa\xa4\xe6\x4a\xad\xa8\x32\x96\xaa\x46\x17\xad\x79\x9a\x2b\x23\xb8\x22\x59\x91\xac\x7d\x94\x02\x24\x65\x0a\xae\xa8\xe6\x85\x35\xb4\xb9\xf7\x5b\x63\x10\xc8\x02\x36\x56\x93\x43\xdb\x14\x48\x68\x57\xd4\xb4\x4f\x4b\x8f\x0b\xa9\x0e\x5a\x71\x5c\x01\x17\x0e\x2d\x2f\x30\xcb\xdc\xa0\x9d\x24\x5a\x5a\x59\x4b\x94\x0f\xb0\x53\xea\x06\xb9\x50\x7e\xbf\xe6\x1f\x36\xac\x84\xc2\x58\x8e\xc6\x9e\xbe\xf7\xd0\x3b\x4d\x58\xf0\xe9\xa0\x5d\xfb\x5c\xb3\x84\x83\x54\xb7\xaa\x85\x51\xc3\xad\xdc\xf6\x2b\x1e\xf4\xcf\x69\xf2\xef\x87\x8f\xff\xfd\x98\xe6\xd4\x5a\x96\x9a\xa4\xe3\xf4\xb8\x00\x0b\x87\x56\x96\xdc\x82\xc6\x05\x38\x38\x02\x0a\xcb\x8b\x7b\x40\x97\xb0\x20\x4c\xc3\xe8\xf9\xa5\x25\xa5\x94\x65\x79\xb4\xcf\xd6\x4d\x2d\xc0\x9e\x4c\xf7\x5a\xde\x3c\x57\x3a\x8a\xaf\xf2\x41\x38\x5b\x7f\x47\x7d\x1a\x3d\xb5\x3f\x79\x5c\xdd\xc4\x9f\xb7\x07\xdb\x5d\x7b\x2c\xd2\xd1\x78\xad\x8f\xd7\x82\x49\x47\xf1\xe5\x26\xf2\xd2\x4b\x5f\x74\x15\x8e\x2f\xe8\xdd\xff\x74\xf1\x3e\xba\xa6\x5b\x7e\xfb\x6a\xbb\x2e\xf0\xd8\x93\x43\x2b\xf5\xbc\xf5\x14\x84\x59\x96\x65\x43\x4a\xa7\x59\x90\x47\xfd\x2c\xa0\xb3\x9d\x72\x96\x47\xcf\xe3\x97\xb3\x5f\xa6\x6f\x2a\x67\xed\x50\x58\x3f\x10\xfe\x13\xec\x74\xd0\xe5\x1b\xea\xfa\xcf\x81\xa5\xf9\x1f\x70\xbd\x3d\xca\x82\xde\x29\xfc\xb7\xe0\xda\x8f\xea\x09\xb0\x9b\x4e\x27\x39\x75\x4f\x68\xbd\xbf\x82\x4d\x8e\x31\x93\xee\x5b\x9c\x9f\x01\x00\x00\xff\xff\x2a\xdd\x6b\xb0\x6d\x05\x00\x00" func runtimeSyntaxJuliaYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxJuliaYaml, "runtime/syntax/julia.yaml", ) } func runtimeSyntaxJuliaYaml() (*asset, error) { bytes, err := runtimeSyntaxJuliaYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/julia.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxKeymapHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4e\xad\xcc\x4d\x2c\xe0\x8a\xd1\xd3\xc8\xae\xc9\x4e\xad\xd4\xb4\xcf\x4d\x2c\x50\xa9\x89\xc8\xcd\x4f\x01\x31\xb8\xb8\x00\x01\x00\x00\xff\xff\x2e\xbb\x4e\x47\x20\x00\x00\x00" func runtimeSyntaxKeymapHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxKeymapHdr, "runtime/syntax/keymap.hdr", ) } func runtimeSyntaxKeymapHdr() (*asset, error) { bytes, err := runtimeSyntaxKeymapHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/keymap.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxKeymapYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x90\xd1\x6a\x33\x21\x10\x85\xef\x7d\x0a\x7f\x09\x24\xe1\x27\x4b\x6f\xbb\x50\x7a\xd1\x97\x28\xc4\x14\x66\x75\xd2\x2c\xeb\xa8\xe8\xa4\xb0\xe0\xc3\x97\x5d\x69\xbb\xdd\x50\xe8\x4d\xe7\x66\x64\xf4\x9c\xf3\x39\xe7\xde\x21\x8f\x11\x5b\x39\xe0\x48\x10\x85\xb0\xc8\x68\xb8\x15\x52\x4a\x39\xdd\x7a\x20\x6c\xa5\xd2\xba\xd9\x0d\x65\xc0\x71\xff\x48\x10\x37\xe5\x99\x82\x9d\x0e\x4a\x88\x74\x75\x98\xab\xe0\x20\x33\x03\x23\xa1\xe7\x59\xd3\xed\xc0\xda\x62\x1c\x42\x2a\x26\x50\x0c\x19\x27\x0f\x13\xec\xdc\x09\x62\x9e\x7a\x1e\xa9\x24\xa4\xf0\x86\x25\x73\xea\xfd\xeb\x5e\xeb\x4e\xfd\xe0\x68\x82\xe7\x14\x5c\x01\xc7\x25\x5f\xfa\x33\x2f\x1f\x9b\xe0\x33\x83\xe7\xc6\x5f\xa9\xc3\x54\x25\xc7\xbb\xc3\xfd\xe9\xff\xd2\x32\xa2\xe9\xc1\xb5\x52\x3d\xdc\x08\x2b\x40\xfd\xce\x54\x99\x21\xcd\xd1\x4a\x7d\xce\xd0\xdb\xd5\x24\x0f\x7d\x9c\xc3\xb4\x6e\xbe\xa6\x8b\xcd\x7c\xd4\x32\xa9\x52\x3c\x5d\x20\x7d\x97\xfe\x82\x66\xbb\x86\xd9\xfe\x21\x0b\xcd\xdb\xbf\x61\x78\xf9\xb7\x86\xd8\xac\xe3\xe4\xf1\x24\xc4\x7b\x00\x00\x00\xff\xff\x2a\x3b\x25\xf2\x64\x02\x00\x00" func runtimeSyntaxKeymapYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxKeymapYaml, "runtime/syntax/keymap.yaml", ) } func runtimeSyntaxKeymapYaml() (*asset, error) { bytes, err := runtimeSyntaxKeymapYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/keymap.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxKickstartHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xce\x4c\xce\x2e\x2e\x49\x2c\x2a\xe1\x8a\xd1\xcb\x2e\x56\xa9\x89\xd1\x83\x8b\xa8\x70\x71\x01\x02\x00\x00\xff\xff\xde\xfc\x28\xd1\x1e\x00\x00\x00" func runtimeSyntaxKickstartHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxKickstartHdr, "runtime/syntax/kickstart.hdr", ) } func runtimeSyntaxKickstartHdr() (*asset, error) { bytes, err := runtimeSyntaxKickstartHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/kickstart.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxKickstartYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x91\xe1\x6e\x9b\x30\x10\xc7\x3f\x97\xa7\xb0\x58\x26\x41\x90\xa3\x7d\x1d\xd2\xba\xf6\x35\x1a\x12\xe9\x30\x17\xb0\x30\x36\x3a\x1f\x49\xdb\xdd\xc3\x4f\x66\x45\x6b\xa5\x7c\xe1\xa4\xbb\xdf\x5f\xdc\xfd\x7c\xb1\x0e\xf9\x6d\xc6\x5a\x8d\xd6\x8c\x91\x81\x38\xcb\x3a\x64\x34\x5c\xab\x4c\x29\xa5\x12\xe1\x61\xc2\x5a\xe5\x4d\x73\x18\xe3\x4e\x52\xd9\xe0\x5d\x9e\x65\xb4\x38\x8c\xf5\x0a\x6b\x15\x67\x34\x16\x5c\xad\xf2\xef\x47\xd0\xef\xa7\x2a\xdf\x06\x0c\x8c\x13\x7a\xae\x55\x7e\x3e\x1e\xeb\x38\x83\xc1\xfa\x74\xda\x17\xd6\x47\x06\xe7\xc4\x74\x14\x26\x61\x7c\x65\xe9\x09\xe6\xc1\x1a\x70\x72\x0d\xae\xa7\xb0\xcc\xe2\x42\x7f\x0d\x4e\x08\xdb\x10\x58\xd8\x4e\xf8\x1e\x3c\x8a\x03\xdf\xcb\x88\x6f\x6d\x00\xea\x04\x16\x1e\x4c\xf0\x17\xdb\xcb\xc5\x52\xe4\x95\xa5\x10\x78\xbe\xc9\x12\x91\x52\x17\x6f\xe9\x67\x11\x9d\xf5\xcb\xab\x10\xce\x41\x66\x20\x5e\x3f\x96\x6d\xf0\x62\x1c\x02\xad\xbd\x94\x77\x01\x3a\xa4\x72\xbb\xc3\x84\xb4\xee\x7a\x86\xd6\x45\x32\x23\x93\x25\x0a\xe4\x6c\x64\x69\x21\xe2\x42\x4e\x16\x36\x65\xf1\x4b\x9a\xe6\xb1\xbc\x27\xa0\x69\x76\x05\xa1\x43\x88\x78\x45\x5a\x53\x40\x66\x28\x9b\xe6\x71\xc3\x5b\xb2\xfd\xc0\xad\x03\x33\x26\x63\x4f\xc7\x67\xfd\x92\x84\x7e\x54\x7d\xda\x7f\x25\x09\xbb\xc4\xe9\xa7\xa4\xfd\x59\xbf\xfc\xd0\x3f\xf7\xfa\xbf\xfe\x6d\x7c\x7f\x6a\xc2\xf4\xb1\x59\x71\x96\x4f\x8f\x53\x7e\x2b\x8e\xe7\x3f\xa7\xc3\xbe\xfc\xbd\xdb\x58\xeb\x3b\xf4\xac\xcd\x00\x74\xb8\x0d\x96\xf1\x1f\xac\xf2\x4f\xb9\xea\x1e\x5d\xab\xfc\xa1\x52\x95\xa8\xea\xa1\xca\xb3\xbf\x01\x00\x00\xff\xff\x96\xbc\x1a\x8d\x7a\x02\x00\x00" func runtimeSyntaxKickstartYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxKickstartYaml, "runtime/syntax/kickstart.yaml", ) } func runtimeSyntaxKickstartYaml() (*asset, error) { bytes, err := runtimeSyntaxKickstartYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/kickstart.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxKotlinHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xce\x2f\xc9\xc9\xcc\xe3\x8a\xd1\xcb\x2e\x29\xb6\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\x0a\x47\xba\x0c\x10\x00\x00\x00" func runtimeSyntaxKotlinHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxKotlinHdr, "runtime/syntax/kotlin.hdr", ) } func runtimeSyntaxKotlinHdr() (*asset, error) { bytes, err := runtimeSyntaxKotlinHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/kotlin.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxKotlinYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x54\x5d\x6f\xe3\x36\x10\x7c\xf7\xaf\xe0\xe9\xfa\x61\x27\x8d\x7d\xaf\x55\x3f\xd2\x26\xb9\x03\x0e\xbd\x6b\x1e\x12\x03\x01\xc2\x14\x58\x51\x2b\x9b\x35\xb5\x14\xc8\x95\x13\xa1\xdb\xff\x5e\x50\x92\xdd\xc4\xf5\xb5\x40\x71\x06\x4c\x5b\xdc\xe5\xec\xec\xec\x50\x95\x75\xc8\x5d\x83\xb9\xda\x78\x76\x96\x26\x93\x12\x19\x0d\xe7\x13\xa5\x94\x4a\x51\x82\x1a\x73\x95\x69\x3d\xdf\x70\x3c\xff\x22\x9b\x4c\x42\xeb\x30\x0e\x09\xaa\x5f\x5f\xab\xeb\x06\x03\xb0\x0f\xb1\x7f\x3e\x53\xb1\xab\x0b\xef\xe6\x7e\xdc\xce\xd5\xf4\x7e\x9e\x7f\xf7\xcd\xe9\x89\xfc\xf0\xea\x5c\xeb\x2f\x1f\xe4\x7b\xf9\x51\x16\x72\x26\x5f\xcd\x06\xa0\x3d\xd4\x0d\x03\x63\x8d\xc4\x51\xfd\x82\xdd\xa3\x0f\xe5\x1e\x74\x17\xc9\x95\x2e\xa6\x10\xa5\xe8\xc4\x38\x88\x51\x8c\xa7\xc8\xa1\x35\xec\x83\x18\x5f\x37\x40\xd6\xd3\xb0\x2b\x55\x4b\x62\xeb\xc6\x07\x16\x4b\x62\xa9\xb2\x4f\x62\x89\x31\x54\x60\x50\x2c\x39\x4b\x28\x36\x8a\x6f\x59\x76\x7c\xa5\x01\xb3\x81\x15\x4a\x40\x6e\x03\x49\x6c\x63\x83\x54\x4a\x6c\x1b\x0c\xc2\x6b\x1b\xe5\x71\x8d\x24\x5b\x70\xb2\x85\x30\xd3\xc5\x21\xc5\x79\x13\x12\x18\x5b\x8c\x3d\xdb\x15\xb2\x44\xe4\x63\x99\xc6\x13\x07\xef\xfa\xb4\x22\x20\x6c\x12\x71\xb6\xd4\xa2\xa0\x8b\x28\xa5\x17\x5b\x09\x87\x4e\x0c\xb0\x59\x4b\x65\x09\x9c\xeb\xa4\xf2\x41\x1e\xd7\xd6\xe1\x51\xd0\xa4\xcb\xa0\x53\x11\x39\x80\x61\x01\x22\xcf\xc0\x49\x99\x12\x18\x04\xa9\xad\x07\xb0\xd4\x37\x49\x44\x70\x58\x1e\x03\xab\xb1\x2e\x30\xf4\x68\x7e\x8b\x21\xd8\x12\xc5\x01\xa3\x25\x9b\x44\xb5\x47\xdb\x02\x63\x70\xa4\xd0\xcb\x9d\xea\x34\xc1\x6e\x81\x51\x9a\xe0\x93\xc9\xb0\x94\xa6\x2d\x9c\x35\x47\x05\x84\x00\x35\xf2\x58\xd7\x04\x1f\xe3\x38\x2c\xf2\xe3\x9f\x80\xb6\xb2\x58\xa6\x11\x40\x58\xed\x40\x46\x1f\xbd\x7d\x6a\x02\xc6\x68\x3d\x29\xa0\x52\x25\x93\xef\x8c\x34\x18\x5e\x17\xd3\xb2\x23\xa8\xad\x11\x5f\xfc\x8e\x86\x85\xd7\xc1\x3f\x4a\x8a\x82\xb3\x10\x67\xba\x50\x93\x11\xed\x23\x32\x1c\xd1\x85\x21\x57\xfa\xa7\xa9\x2e\xd2\x4d\x91\x12\x1d\xae\x52\x7f\x95\x45\x57\x4a\x9a\xf9\x68\x83\x4e\x02\x1a\xb4\x5b\x0c\xc9\x05\xe9\xdb\xb7\x27\xc3\x9a\x98\x8f\x75\x2e\x93\x67\x81\x78\xac\x65\xc6\xc7\x9e\x2d\x87\x16\xa5\x82\xe4\x09\x6a\x9d\x9b\x1d\xe4\xcc\xa9\x1d\xc6\x34\xbd\x7f\x73\xf6\xed\xc3\xe9\x6c\xf2\xe2\x56\xf9\x00\x2b\x54\xb7\x07\x32\xcc\xe3\x10\xe8\x0b\x5c\x74\x8c\xb2\xec\xd7\xcb\x35\x04\xb9\xf2\x6d\xe1\x50\xde\x39\x0f\x2c\xef\x89\x65\x99\x96\x0f\x9e\x56\xb2\xec\xd7\x9b\x75\xba\x56\xcb\xe1\xe7\xc2\x7b\x87\x40\xb2\x4c\xae\xf8\xd5\xf3\xda\xd2\xe1\x4c\x2e\xbd\x73\x68\x92\x05\x5f\x70\x30\x7f\x6f\xf7\x3c\x7e\x0e\x01\xba\xbd\x28\x3d\xfb\x60\x69\x75\xd8\x6f\xec\x77\xf3\xdd\xfb\x23\x0d\x26\x24\xa5\xb2\xfd\x0e\x52\xf9\xe2\x39\x6e\x6c\x93\x2b\xad\xe7\xfb\x9d\xe7\xef\xb2\xf1\xf3\xbc\x42\x83\xc6\x82\x4b\x62\xe4\x6a\xaa\xf5\x1b\xd1\x5a\x6b\xd1\x9a\x45\x6b\x12\xad\x83\x68\x9d\x89\xd6\x5f\xcf\x3e\x05\xd1\x92\x35\xbe\x4c\xfa\xea\x56\xff\x71\x7f\x9f\x3f\x95\x76\x65\x39\x7f\x78\x38\xfd\x73\x37\xf4\x9b\x35\x16\x40\x2b\xf5\xc1\x12\xee\x9b\xac\x7b\x8b\xc5\x21\x94\xab\xdf\xa6\xaf\x5f\xcd\xe6\x27\xcf\xd5\x4c\xe9\xea\x72\x48\x3c\x38\x96\xae\x47\xae\xb2\xc5\x62\x7e\x92\x3d\x3f\x72\xe1\xbc\xd9\x7c\xe2\x4c\x91\x62\xff\x50\x33\x5b\x68\x7d\x72\xa0\x68\xa6\xf5\xc9\x22\xfb\x77\x0d\xd9\x97\x3e\x57\xd9\xf4\xf6\xfa\xea\x5a\xee\xee\xee\xe4\xdd\xfb\xbb\x8f\x6f\x67\xf9\xf9\xee\xdc\xc8\xe8\xca\x9b\xff\xcb\xea\xb3\x13\x1b\x29\xdd\xfa\xd2\x4f\xfe\x33\xf9\xaf\x00\x00\x00\xff\xff\xe9\x14\xd7\x09\x3a\x07\x00\x00" func runtimeSyntaxKotlinYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxKotlinYaml, "runtime/syntax/kotlin.yaml", ) } func runtimeSyntaxKotlinYaml() (*asset, error) { bytes, err := runtimeSyntaxKotlinYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/kotlin.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxLedgerHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x49\x4d\x49\x4f\x2d\xe2\xd2\x88\xab\x89\xd1\xab\xd1\xd7\xd4\x80\xf0\x6b\x72\x52\xd2\x8b\x6a\x92\x52\x13\xf3\x92\xf3\x4b\xf3\x4a\x6a\x92\xf2\x92\x4b\x34\x55\xb8\xb8\x00\x01\x00\x00\xff\xff\x53\x35\x53\x93\x2e\x00\x00\x00" func runtimeSyntaxLedgerHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxLedgerHdr, "runtime/syntax/ledger.hdr", ) } func runtimeSyntaxLedgerHdr() (*asset, error) { bytes, err := runtimeSyntaxLedgerHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ledger.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxLedgerYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x90\xd1\x4a\xc3\x30\x14\x86\xef\xfb\x14\x67\xc5\x8b\xa4\x23\x9b\x88\x37\x46\x46\xf1\x35\x6c\x32\x49\xd3\xb3\x51\x68\xd3\x92\x9c\x09\xd3\xb8\x67\x97\xac\x8e\x75\x20\x78\xe1\x5d\x7e\xfe\x7c\xdf\xe1\x9c\x5d\xdb\x21\x1d\x47\x94\xd0\x61\xb3\x47\x9f\x65\x0d\x12\x5a\x92\x90\x01\x00\xa4\xda\x99\x1e\x25\xe4\x6c\x1b\x95\x5a\xc5\x35\x67\xd3\xcf\xd8\x35\x7b\x1f\x6b\x34\xce\x0e\x07\x47\xb1\x76\x96\xf8\x5d\x9e\x65\xfe\xd0\x61\x90\x67\x5c\x40\x18\xd1\xb6\xa6\x93\x90\x6f\x59\x75\x2f\x9e\xf4\xe7\xe3\x17\x5b\x47\xc1\xa7\xf0\x70\x1b\x62\xb5\x39\x69\x0e\xab\x22\xff\xc1\xed\xe0\x02\x19\x47\x89\xff\x1b\xbf\x50\x81\x0c\x61\x8f\x13\x76\x9a\xe9\xda\x06\x1d\xb5\xbb\x16\xfd\xea\xdd\xf8\xd4\x6e\x7e\x6d\xcf\xe3\x2a\x19\x46\x63\x51\x6a\xbd\x64\x8b\x79\xe2\xa5\x52\xac\xac\x5e\xc4\xab\x11\x1f\xa0\x97\x4c\x5e\xdf\xbc\x50\x8a\x97\xff\x32\xbe\x29\x25\x66\xd2\x29\xde\x7a\xc3\xb1\xaf\x87\x74\xd4\xaa\x58\xe8\xeb\xad\xfa\xcb\xce\x33\x77\xf1\x9c\x16\xfc\x0e\x00\x00\xff\xff\x6c\xff\x51\x0c\xe7\x01\x00\x00" func runtimeSyntaxLedgerYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxLedgerYaml, "runtime/syntax/ledger.yaml", ) } func runtimeSyntaxLedgerYaml() (*asset, error) { bytes, err := runtimeSyntaxLedgerYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ledger.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxLfeHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x49\x4b\xe5\xca\x49\x4b\x55\xa9\x89\xd1\x03\x51\x5c\x5c\x80\x00\x00\x00\xff\xff\x33\x09\x01\x19\x11\x00\x00\x00" func runtimeSyntaxLfeHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxLfeHdr, "runtime/syntax/lfe.hdr", ) } func runtimeSyntaxLfeHdr() (*asset, error) { bytes, err := runtimeSyntaxLfeHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/lfe.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxLfeYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xed\x6e\x82\x30\x14\x86\x7f\xcb\x55\x9c\x34\x26\x82\x4d\x99\x7f\xed\xd4\x65\xd9\x5d\x8c\x53\xb7\x02\x87\x49\x06\x85\x94\x92\xe9\xd2\x8b\x5f\x00\xdd\x97\xfe\x7a\xfb\xf1\x9c\x27\x6f\x4e\x51\x56\xe4\x4e\x2d\x49\xa8\x0a\x0a\x82\x9c\x1c\x65\x4e\x42\x00\x00\x30\xfc\x19\x5d\x93\x04\x56\x15\x34\xf7\x88\xf1\x90\x2c\x08\x6c\x5f\x51\x27\x47\x48\x40\x77\xaa\xd3\xa6\x8a\x53\xab\xb3\x77\x72\x9d\x04\x86\x18\x7a\xc4\x88\x9d\x81\xc9\xcf\x72\x2a\x7a\xe3\x73\x2a\x4a\x43\xa2\x3b\x19\xa7\x8f\xe7\xdb\x10\xb5\xce\x6c\x33\x1e\x9a\xbc\xaf\xc8\xd3\xb1\x6d\xac\xbb\x28\xb2\xc6\x74\x4e\x1b\x37\xca\x21\x79\x14\xcf\x5a\x7c\xaa\x73\xae\xc4\xfa\x45\x28\x8e\x08\xec\x6f\xa5\xa6\x25\xab\x5d\x63\xa7\x4a\x61\x82\x28\xf8\xf2\x6e\xb3\x53\x7e\xb3\xf5\xbb\x6d\xe4\x17\xff\xfd\xb1\xe9\xeb\x94\xa6\x81\x34\x59\x89\xf5\xa0\x4d\xaf\xa8\xce\xd9\xd2\xbc\x8d\x14\xb2\x10\x11\x31\xf6\xc9\x1e\x99\x8a\x96\xc3\xcb\x77\x8d\x96\xb2\x52\x57\x12\x58\xb2\xf0\xaf\xea\x46\x6d\x44\xa1\xf8\xb5\x7e\x9a\x7b\x3a\xe8\xa9\x09\x62\xfc\xf0\x03\xd5\x35\x8d\x8b\x08\xf7\x3e\x49\x64\xd7\xea\x8c\xa4\x52\xd1\x7d\xbc\xbc\x30\xa5\xc9\xc9\x38\x91\x1d\xb4\x8d\x3f\x0e\xa5\xa3\x09\x02\xf6\x8b\xe7\xf3\x1b\xb4\x04\x36\xe3\xc0\x3d\xf0\x19\x67\xc1\x57\x00\x00\x00\xff\xff\x83\x15\xa2\x2c\x1c\x02\x00\x00" func runtimeSyntaxLfeYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxLfeYaml, "runtime/syntax/lfe.yaml", ) } func runtimeSyntaxLfeYaml() (*asset, error) { bytes, err := runtimeSyntaxLfeYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/lfe.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxLilypondHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\xa9\x2c\xc8\xcf\x4b\xe1\x8a\xd1\xcb\xa9\x54\xa9\x89\xd1\xcb\x84\x50\x39\x39\x95\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x45\xdd\x2b\xe6\x1e\x00\x00\x00" func runtimeSyntaxLilypondHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxLilypondHdr, "runtime/syntax/lilypond.hdr", ) } func runtimeSyntaxLilypondHdr() (*asset, error) { bytes, err := runtimeSyntaxLilypondHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/lilypond.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxLilypondYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x57\x71\x4f\x1c\xb9\x0e\xff\x9f\x4f\xb1\x0f\xb5\x7a\xf0\xde\x03\xa9\x7d\x55\x55\xa1\xd3\x21\x16\x5a\x7a\x6a\xa1\xa8\xa0\xfe\x71\xcc\x36\xf2\x64\xbc\x33\x11\x99\x64\xea\x64\x80\xa5\xe9\x77\x3f\x39\xd9\x65\x33\xb3\x7b\xba\x95\x0c\xf1\xcf\x9e\xc4\xb1\x1d\x3b\x99\x2b\x8d\x7e\xd1\xe1\xd1\x44\x2b\xbd\xe8\xac\xa9\x76\x76\x2a\xf4\x28\xfd\xd1\xce\x64\x32\x99\xb0\xdc\x40\x8b\x47\x93\xdd\xa2\x38\xd4\x8b\x17\xa1\x28\x0e\xd5\xf2\xbf\xd6\x8b\x17\xbb\x3b\x3b\xd4\x6b\x74\x49\xfd\x60\x22\xad\x71\x1e\x8c\x3f\x34\x7d\x5b\x22\xc5\xef\xaa\xff\xee\x2e\xa5\xaa\x42\xe3\xd5\x5c\x2d\x05\xe5\x9e\xf3\x30\x9f\x07\xd7\x81\x54\xa6\x0e\x4e\xd5\x06\x7c\x4f\x18\xc8\xf6\x5e\x19\x0c\xc6\x7a\x74\xa1\x01\x53\x69\xa4\x20\x2d\x11\x4a\x8f\x55\x28\x11\x5a\x17\x80\x3a\xac\x6b\x65\x5d\xf8\x66\xb5\x07\x81\xa6\x26\xb8\x47\x0a\xdf\xac\x92\x18\xbe\x21\x79\x25\x41\x0b\xd0\xaa\x36\x99\x14\x18\x36\x20\xb4\xaa\xe3\x72\x9b\xa2\xe5\x04\x4b\xee\x3a\x5a\x79\xf3\x80\x70\xb7\x56\xbd\xe9\x3b\x8d\x3e\xe3\x49\x69\x2d\x5c\x07\xc6\x20\x65\xb0\x6a\x95\xa9\x85\x27\x30\x4e\x83\xb7\x11\x41\xf1\xbc\x55\xd1\x21\xcd\x2d\xb5\xb8\x21\xc8\xa6\x18\x6a\xe5\x22\x7c\xf4\x5b\xd6\x64\x34\xe3\xda\xce\xe6\x13\x40\x29\xbc\x42\x31\xb7\x5a\xdb\x87\x4c\x0f\x4a\x11\xe3\x21\xdc\xa2\x2d\xad\x1e\x4a\x38\x12\xa2\x41\xa8\xdc\x00\x4f\x8e\xba\x81\x32\xf9\xe8\x7a\xe1\x3c\xb6\x3c\x0d\x79\x51\xa1\x56\xad\xf2\xb9\x65\xd7\x2c\xcd\x38\x30\x4f\x20\x52\xaa\xfc\x1d\x3c\x0a\xde\xf5\x56\x0b\x13\xba\xde\x63\xe2\xa5\xd5\x1a\xa5\x67\xff\x0f\x35\xcf\xc9\xf6\x5d\x58\x9a\xbc\xf4\x5e\x49\x1c\xde\xb9\xa5\x52\x55\x99\x7a\x07\x46\x94\x40\xc2\xf9\xbe\xdc\x02\x0f\x91\x55\x42\x0e\x60\x39\x5c\x5f\xf7\x94\x1b\xca\x6c\x26\x04\xd7\x08\xc2\x0e\x21\x0b\xe0\x35\x76\x40\x10\xb7\xa1\x95\x41\x51\xb3\xf5\x99\x58\x92\xea\xbc\xa0\x3c\x96\x4b\x6c\xcc\x4b\xab\xfb\x36\x77\xa6\xb4\x84\xe1\x6b\xb3\xf0\x4d\xab\xe4\x86\x78\x25\x48\x8e\xfa\x8a\x2e\x9b\x31\x72\xec\x60\xe5\x94\xcd\xbf\x49\xc6\xfb\x3c\x4b\x97\x18\xc8\x3b\x63\x1f\x34\x56\x75\x26\xbb\xe2\x54\x9f\x93\x6d\x85\x41\x55\x37\xa5\xcd\xdc\x71\xa5\xbc\x6c\xb0\x12\x3e\x1e\xad\x21\x2c\xdc\x8f\x9e\x9d\x95\xa1\x60\x38\xcd\x2b\xd0\x99\x7f\x73\x74\xab\xea\x28\xbd\xa2\x28\xed\xf7\xaa\x21\x70\xec\x74\x37\x88\xd1\x15\x7a\xea\xa5\x54\x29\xf3\x57\xdc\xf2\x13\x24\x89\xc6\x6f\x44\xf0\x8a\x8f\x83\xb4\x6d\xc9\xe1\xcb\x51\x34\xbe\x41\xa7\x5c\x0e\x76\x48\x1b\x91\xf8\xd2\xfb\xae\xf7\xa2\x23\xdb\x21\xf9\x45\x26\xf0\x1e\xee\x61\xb3\x04\x7c\x31\x98\x4c\xba\xec\xb5\x4e\xa6\x5e\xf2\x09\x76\xe3\x7c\x8c\xe8\xda\x5f\x91\xe5\x8a\x3f\xd2\x18\x9d\xfc\x67\x2c\x65\xe4\x00\xbf\x84\x16\x8b\x22\x0e\x3f\x22\x54\xe1\x12\x1f\xc4\x5c\x99\x1a\x69\xb0\xf0\x45\xaf\xbd\x12\x2d\x82\xe3\x0c\xa0\x41\x72\x5d\xa8\x4a\x09\x69\x8d\x27\xab\xc5\xbc\x37\xd2\x73\x8e\xad\xad\xbc\x40\x4f\xd6\xd8\x16\x45\x0b\x94\xd5\xe4\x0b\x34\xae\x27\xd0\x5b\x2a\xfb\x4a\x94\x7c\xb1\xe2\x92\x8f\x2e\x06\x93\x7c\x5e\x90\x92\x2e\xfd\xcb\xd6\x4c\xfc\x5a\x6b\xb5\x42\x49\x20\xef\xf2\x46\xf0\x99\x13\x9c\x46\x8e\xf9\x0c\xca\x39\x7c\x12\xf7\xaa\xa4\x3c\x4e\x9f\x14\xde\x83\xd9\x62\x6f\x12\x24\x6b\xd3\x38\xd9\xfa\x09\x17\x99\x51\xcc\xad\x3f\x41\xec\x38\x9f\xef\x51\x78\x5b\xa3\x6f\xf2\x85\xfe\x30\xce\x53\xdf\x72\x76\xba\x87\x78\x80\xb6\x89\x86\x91\xff\xb8\xe8\x1a\xcc\xb2\xf0\x9c\x6c\x29\xba\x1f\x39\x80\xb5\x25\x05\xe6\x86\xdb\x5b\xac\x31\xca\x2e\x8d\xde\x2e\x4b\x9b\x38\x27\x30\xd5\xf3\x50\x6e\x49\xcb\x04\x8f\x58\xee\xfa\x63\x0c\x7a\x6f\xc7\x02\x6d\x4b\xd0\xe1\x5c\x2b\xe7\xc0\x54\x59\x35\xfe\x40\xe8\x4b\x0b\x54\x0d\xa1\x29\x43\x2e\x7c\x48\xb5\x3f\x06\x2e\x75\x83\xb5\x96\xb5\x3e\x76\xc0\x0c\x61\x4f\xaa\xa7\x1c\xda\x4c\xf2\x35\x34\x3e\xd1\x1f\x54\xdd\x13\x56\xa2\x04\xe7\x44\x67\x9d\xf2\x83\x32\x3a\x10\x8f\xd1\x29\x38\x17\xde\x3f\x7a\x34\x55\x1e\xe2\xf7\x9d\x72\xd8\x66\xd7\xa0\xb3\x85\x81\x96\x73\x79\x39\xc8\x12\x67\x85\x8c\x75\xc7\xf5\xf0\x8c\xfa\x36\xf6\x7e\xb7\x05\xcb\xe7\xa3\xbe\x4d\x71\xe7\x51\x0a\xed\x99\xed\x4b\x1d\x95\xb6\x16\xc5\x33\xeb\xdd\x80\xdb\xf0\xd1\x19\xde\x9b\x5e\xeb\x70\x86\x73\xe8\xb5\x8f\x0d\x77\x78\xac\x4e\x7b\xe7\xad\xcb\x79\x14\x52\xe3\x7c\x80\x24\xbb\x4e\x97\xe5\xc4\xf3\x79\xcd\x2c\x3f\xb5\x46\xf6\xc4\x95\x58\x34\xa0\xa8\x53\x99\x01\xa7\x9b\xfd\xed\x54\xf7\x8e\xaf\x34\x1b\x15\xf7\x74\xb8\x6c\x63\x89\x1b\x17\xb6\x56\xdb\x31\x3c\x3c\x65\x11\xe3\xa2\xe9\x78\xa8\x28\x39\x6f\x4a\x08\xbe\x89\xed\x67\x10\x90\x69\x4c\xcc\x51\x94\xa6\x68\xaa\x9c\x83\x36\xdb\xe0\x74\x70\x38\x22\xb7\xa5\x6f\x4f\x81\x36\x2e\x62\xd3\xfc\x82\x73\xf2\xa8\xdc\xf8\xea\x71\xb2\x79\xf8\x4e\x36\xae\x40\x27\x52\xc6\x7b\x7f\xde\x81\xe3\xc5\x63\xbf\x28\xca\xd5\xcb\xc0\x79\xf0\xc8\x25\xe8\x68\xb2\x7b\x7b\x20\xbe\xcf\x8e\x8b\xa2\x28\x6e\x0f\x4e\x0e\xfe\x84\x83\x27\x31\x7b\x7e\x42\x74\x84\x1d\x59\xb9\x7c\x3f\xec\xed\xd5\xca\x29\x17\x6a\x26\x74\x18\xff\x86\x3a\xcc\x23\x3a\x67\x8a\xe8\x9c\x29\x60\x44\x91\x29\xa2\xc8\x14\xaa\x88\x56\x4c\x11\xad\x98\x82\x8c\xa8\x64\x8a\xa8\x64\x0a\x65\x44\x4b\xa6\x88\x96\x4c\x01\x22\x0a\x4c\x11\x05\xa6\xfd\xdb\xff\xfd\x7b\xf6\x9f\xdb\xe3\x7f\xcd\x8e\xf7\x83\x0b\x14\xbe\x86\x1f\xfb\x7b\xaf\x5e\xbf\x0b\x6f\xdf\x84\xff\xbf\x0e\xaf\xde\x86\x77\xe1\x4d\x78\x1d\x5e\x05\xde\x6a\x49\x78\x8f\x71\xa4\xad\xa9\x21\x8e\x5a\x78\x54\x2d\xec\x1f\xef\xdd\x7e\x2f\xe2\xef\x61\x16\x44\x28\x8a\x72\xff\xd9\x6d\x1d\x4a\x05\x9a\x9d\xb6\xb7\xff\xf3\xd7\x6f\xbf\xcf\x42\x51\xdc\x86\xa2\x98\xed\x8e\x1f\x64\xce\x73\x1d\x4a\xef\x34\xfe\xc5\x3b\x3a\xbb\x71\x77\xf7\x19\x43\x53\x8d\x10\x77\xa7\xba\xe8\xeb\xa2\x38\x5c\xa3\xd9\x93\x6f\xf5\xcb\x57\x4a\x46\x9d\x36\x40\xc3\x4f\x59\xa7\x8d\x41\xde\xb0\xe2\x65\x51\xfc\x1c\xdb\xf1\xb2\x28\x7e\x8d\xd7\x9c\xdc\xce\xfe\x71\xaa\xf1\x3c\x2f\xb6\x4d\xb2\xf3\x57\x00\x00\x00\xff\xff\x94\x50\x40\x16\xfb\x0e\x00\x00" func runtimeSyntaxLilypondYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxLilypondYaml, "runtime/syntax/lilypond.yaml", ) } func runtimeSyntaxLilypondYaml() (*asset, error) { bytes, err := runtimeSyntaxLilypondYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/lilypond.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxLispHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\x2c\x2e\xe0\xd2\x48\xcd\x4d\x4c\x2e\xae\xa9\xca\xcc\x49\xd5\x54\xa9\x89\xd1\xd3\x48\xcd\xa9\xc9\xc9\xb4\x2f\x2e\xa8\x29\x4e\xce\xad\x29\x2e\xd6\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\x62\x95\xa0\x9d\x29\x00\x00\x00" func runtimeSyntaxLispHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxLispHdr, "runtime/syntax/lisp.hdr", ) } func runtimeSyntaxLispHdr() (*asset, error) { bytes, err := runtimeSyntaxLispHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/lisp.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxLispYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x90\x5d\x8b\xe3\x20\x14\x86\xaf\x9b\x5f\x21\x52\x68\x52\x31\xdb\xdb\xba\xfd\x60\xd9\xbf\xb0\x57\x9b\x63\x07\x63\x4f\xa7\x82\x5a\x89\x96\xa1\xc5\x1f\x3f\x24\xe9\x17\xcc\xcc\x95\xe0\xfb\x3c\xef\xd1\x73\x30\x16\xd3\x25\xa0\x20\xd6\xc4\x50\x14\x7b\x4c\xa8\x93\x20\x05\x21\x84\xf4\xa1\x57\x0e\x05\xa1\x25\x3a\xa5\x63\xbe\x1a\x8b\xd5\x34\x03\xd4\x25\xda\x6c\xcd\x36\x86\x1c\xb5\xcb\x31\x56\x53\x5a\x14\xdd\xd9\x62\x14\x83\xcb\xc9\x1e\x0f\xea\x6c\x93\x20\x14\xa0\x6c\x14\xbf\x72\xc9\xe8\x2d\x8b\x17\xd7\x9e\xec\x18\x95\x0d\x00\x67\xf3\x5f\xab\x8d\xcc\xab\x75\xde\xac\xab\x3c\xbb\x73\xfa\xe4\x63\x52\x3e\xd5\xfe\xec\x5a\xec\x06\xa1\x6d\x16\x7c\x29\x59\xbb\x79\x94\x05\xd4\x46\x8d\x6d\xad\x37\x16\xa0\xbd\x47\xa1\xc3\xd0\x9d\xf4\xcd\x4b\xff\xe4\xd3\x7a\x54\xc7\xd4\x19\xff\x3e\x20\x40\x4b\x00\x80\x3a\x37\x3b\xa0\xb2\x9a\xf7\x37\x5f\xf9\x71\xdc\xdf\xa3\xea\xdf\x33\x6b\xfe\xf0\xff\x8a\x5f\xe5\xed\x5c\xf0\xe5\xdb\xcb\x47\x7f\xb0\x86\x29\xdb\x27\xe4\x1c\xfa\x7e\x53\xe5\x2e\x37\x8d\x88\x41\x69\x14\x52\x56\xbf\xeb\xf9\x9d\x31\x7e\x8f\x3e\x71\x7d\x54\x5d\xfd\x71\x34\x09\x47\x88\xd0\x17\x9e\x4d\xbf\xa1\x05\xa1\x13\x46\x58\x26\x6c\xc2\x68\xf1\x19\x00\x00\xff\xff\x43\x3b\x48\x95\xf0\x01\x00\x00" func runtimeSyntaxLispYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxLispYaml, "runtime/syntax/lisp.yaml", ) } func runtimeSyntaxLispYaml() (*asset, error) { bytes, err := runtimeSyntaxLispYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/lisp.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxLuaHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x29\x4d\xe4\x8a\xd1\xcb\x29\x4d\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\x9f\x87\x18\x07\x0c\x00\x00\x00" func runtimeSyntaxLuaHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxLuaHdr, "runtime/syntax/lua.hdr", ) } func runtimeSyntaxLuaHdr() (*asset, error) { bytes, err := runtimeSyntaxLuaHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/lua.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxLuaYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x56\x6f\x6f\x14\x37\x13\x7f\x9f\x4f\xe1\xe7\x20\x22\x01\x2e\xf0\xc0\x8b\xb6\x27\x42\x55\xd1\x50\xf1\x02\xa2\xb6\x08\x55\xca\x5e\x91\x77\x77\x76\xd7\x8d\xd7\x76\xc6\xe3\xdc\xa5\x0c\xfd\xec\xd5\x78\xef\x92\x4b\xca\xd2\x86\x20\x38\x25\xfe\x33\xb6\x67\x7e\x33\x9e\xf9\x79\x1b\x63\x81\xce\x02\xcc\x94\x4d\x7a\x6b\xab\x06\x82\x8a\x66\x5b\x4a\x29\x25\x4b\x4e\xf7\x30\x53\x93\xa2\xd8\xb3\x49\xdf\x9e\x6c\x6d\x61\xb2\x10\x87\xf5\xa9\x8a\xa4\x09\x7a\x70\x94\xb7\x94\x3b\xb5\x67\x70\x35\x2f\x3a\x63\x81\x4b\x04\x7d\xcc\x08\x01\x34\x71\x72\x64\x2c\x9b\x86\xc1\x46\x30\x0d\x53\x07\x2e\x8f\xb9\xf1\xc8\xc6\x71\x93\x5c\x45\xc6\x3b\xb6\xbe\xd2\x96\x11\x28\xa1\xdb\x2d\x8a\x72\x32\x62\xcb\x79\x62\xed\x6a\xf6\xf8\xb1\x5d\x35\x94\xa9\xe5\x48\x68\x5c\xcb\xbd\xa6\x8e\x49\x97\x16\xd8\x78\xae\x3c\xfa\x44\xc6\x01\xfb\xc8\x89\x9a\x6f\xb9\x34\xf4\xf8\x91\x68\x2b\x8a\xbd\x31\x85\x6f\x0f\x5e\xbd\xe1\xb7\x3f\xf1\xdb\x37\x07\xbf\xfc\xfa\xe2\xf0\x15\xeb\x18\x01\x89\x2b\x6f\x2d\x54\xd4\x6a\x2c\x75\x0b\x5c\x7b\x89\x1e\x03\xa2\x47\x6e\x81\x1a\x70\xa7\xd2\xf7\x40\x7a\x85\x20\x68\x83\x91\xad\xd7\x75\x6e\xf2\xfe\xde\xd7\xc9\x02\x3b\x58\x12\x0f\xeb\xa1\xd2\xd6\x72\x40\xe3\x88\x51\x2f\xe0\x24\x49\x74\xf4\xa2\x85\x3c\xb7\xe0\xa4\x8b\x32\x83\x93\x64\x10\x38\x82\x00\xe1\xb8\x32\x1a\x37\x8d\x92\x77\xa9\x2f\x01\x99\xfc\x2a\x26\x72\xf7\x9c\x5c\xd0\xd5\x31\x2f\xb3\xb1\xdd\xa2\x88\x77\x8b\x62\x67\x1d\x01\x53\x83\x23\xd3\x18\xc0\x99\x9a\x18\x5f\x14\x7b\x12\x87\xca\x7a\xb9\x3c\x9b\x62\xc7\xc6\x85\x44\x6c\x8d\x83\xc8\x3e\x80\x63\x9f\x48\x24\x21\x4f\x10\x74\xcd\xd4\x87\xec\x60\x36\xb7\x40\x43\xb0\x79\x6b\x97\x4c\xc8\x2d\xad\x8c\xe8\x32\xb2\xae\x7c\x64\x1d\x8d\x63\x4d\xda\x3d\xca\x2d\x57\x60\x2c\x57\x3e\x76\xd2\x70\x0d\x2d\xc3\x32\x70\x63\xbd\x47\x6e\x7a\x5f\x73\x83\x22\xe8\x52\x0b\x6c\x6b\x19\x5a\xdf\xfe\xff\xa1\xb4\xdc\xeb\xa5\xfc\x1b\x47\xd0\x02\x72\x6f\x9c\xfc\x9f\x4f\x7d\xdd\x70\x30\x1c\xfc\x82\x51\xd7\x8c\xda\xd5\xbe\x5f\x75\x11\xa0\xe6\x68\x5c\xc7\xf1\x04\x89\x05\x09\xf9\xf5\xc9\x21\x92\x96\x46\x1d\xf3\xf1\x22\x76\xd5\x31\xd7\x9a\x80\x6b\xd3\x34\x64\x7a\x60\x58\x42\x95\x48\x7a\x43\x92\x28\x72\x75\x08\xbd\x3f\x05\xc6\x5c\x85\x72\x91\xb9\x36\x80\xf3\x01\xea\x83\x88\x47\xad\xc9\x8d\xea\x16\xd6\x26\xbd\x6b\x4c\xcb\x55\x90\x12\x90\x74\x83\x21\xeb\xac\x29\x39\xcb\x02\x42\x4e\xc5\x08\x20\x09\x17\x41\x63\xd5\x01\xc6\xd5\x48\xf6\x8c\x9a\x1a\x52\x69\x65\xa9\x3c\x23\xe0\xaa\xd3\xc8\x75\xea\x03\x37\xc6\xd5\x52\xe3\xbd\x26\x6e\x7b\x4d\x55\xc7\x6d\x4c\x25\x4b\xe2\x5a\xbf\x90\x88\x67\x61\x4e\x40\x69\xa2\xf9\x53\x5c\x0e\x8c\x70\x0a\x18\x81\x65\xf7\x2a\x41\x53\x08\x80\xa3\x30\x72\x8a\x5f\xf8\x5b\x69\x62\xe3\x72\x71\xf6\x7a\xe9\x38\xc7\x32\xab\x59\xc5\x35\x7a\xa4\x95\xe6\x51\x9d\xc2\x0b\x6b\x95\xe2\x93\x34\x41\x13\x01\x3a\xae\x7c\x0d\x31\xb7\x41\x92\x20\xbb\xe4\x9b\x26\xc2\x78\x0a\x9c\x73\xce\x5a\x27\x82\x64\x81\x89\x67\x06\x6c\x9d\x4b\x14\x21\xa6\x1e\x18\x93\x73\x52\x9f\xc2\x3f\x29\xf2\x02\x75\xe0\xbc\x69\x54\x77\xa6\xba\x95\xde\x81\xf6\x36\x78\xa7\xf3\xfe\x58\x7a\xe3\x1a\x2f\xfd\xc0\xb2\x97\x08\xa9\x05\x42\x68\x4d\x24\x3c\x93\x71\x0a\xa7\xda\xa6\x2c\x4e\x11\x70\x98\x6c\x90\x4a\xd6\xb8\xce\xc9\xcb\x2c\x13\x2f\x4e\xc7\xcd\xd3\x84\xba\x82\x72\xb8\xc8\x2c\x31\xf5\x7a\xf4\x87\x37\x6e\xd4\xb3\xcc\xcb\x6b\x4a\xc0\xd8\x99\x86\xb8\x14\xee\x2f\xe5\x11\x28\x3d\x72\x49\x10\x89\xcb\xa5\x47\x86\xa5\x98\x11\x3a\x0c\x56\x57\xc0\x16\xbd\x50\x38\xdb\xe1\x1c\xae\xa6\x83\x9a\x51\x93\x45\x31\xbb\xca\x72\x03\xbf\x65\x36\x8b\x00\xd9\xf7\xd3\x32\x35\x03\x9b\xf1\xd7\x4b\x7b\xc1\x19\xc1\x36\xac\xb1\xdd\xdc\x54\x79\x17\x49\x9f\x3f\x5c\x8d\x96\xd7\xd6\x19\xcb\x84\x09\xc6\xde\xcc\x9d\xe1\x19\xcf\x5c\xbd\x7e\x50\x8c\xab\x6c\xaa\x61\x97\xb7\x4f\x78\xfb\x7f\xbc\xfd\x33\x6f\x23\x6f\x2f\x3f\x64\x6b\x6f\x78\x5e\x56\x26\x8f\x1e\x4e\xbf\x9b\xdf\xbb\x64\xea\xac\x2f\xbd\xdd\x2b\x51\x57\xc7\x40\x71\xa6\x26\x47\x3b\xbb\xef\xde\x17\xc5\x51\x51\xcc\xe7\x97\x77\x0d\x68\xee\xf2\x83\x07\xfc\x80\xb7\xb9\x28\xee\xf1\x94\x8b\xe2\x77\x7e\xca\x4f\xf7\xf9\x09\x3f\xd9\xe7\xbf\xf6\x79\x9f\x8f\x8a\x62\x6f\xfe\xee\xd1\xfd\xc7\xef\xf9\xd6\xee\x64\xeb\x2a\xa2\x81\x9c\x86\x2f\x16\xf9\x45\xd2\x98\x63\x32\x99\x9c\xcb\xc0\xd5\x57\x24\xf1\xd8\x84\xec\xc5\xf9\xa7\x80\xfc\x36\x3e\x7e\xd6\xbf\x4d\x4b\x01\x2a\xa3\xed\xb3\x4e\xe3\xc5\xd1\xff\x0a\xe7\xce\x55\x34\x77\xbe\x22\x98\x7c\x1f\x47\xff\x88\x4f\x31\x2f\x8a\xf9\xcd\x00\xdc\x52\x31\x85\xe0\x91\x54\x63\x30\x92\x6a\x60\xa1\x2c\xb8\x96\xba\xa8\x7c\xa3\x26\xd6\xbb\x56\xad\xd3\x63\xa2\x60\x19\xac\xa9\x0c\xd9\xb3\xad\x5b\xe7\x62\x25\x9b\x00\x15\x75\xda\x49\x43\x6a\x61\xac\x55\xad\x39\x05\x95\xb3\x5c\x05\x1f\x0d\x99\x53\x88\xd7\xf1\x78\xff\xc3\x2e\xef\xdf\xd8\xe7\x6b\x40\x18\xc3\xf0\x65\x41\x8c\xa2\xf8\xc2\x30\xf6\xef\x8d\x02\x91\xa5\xcf\x02\x65\xb5\xb6\x92\x1f\x3d\x9c\x7e\x33\xbf\x68\x58\x64\x4b\xa1\x31\x3d\x6d\x7e\x98\x3e\x9f\x6f\x0c\xf3\xda\x91\x2e\xa1\x71\x18\xe7\xbc\x23\xd3\x2a\x0b\x9f\x4d\x73\xf7\x72\xdd\x0d\xb2\xdd\x4d\xf7\x7b\xa1\xdb\xbd\x52\xbe\x03\x3f\xe4\xfc\x34\xff\x7d\x72\x0d\x92\xaf\xbd\xb0\xe7\xeb\xc3\x1f\x0f\xf9\xd5\xe1\xeb\x03\x7e\xfe\xe2\xb7\x97\x07\xbb\xb3\xef\x2f\x55\xe0\xa5\x5a\xbb\xaf\xa2\xee\x41\xe9\xa8\x16\x86\x3a\xd5\x27\x4b\x46\x5e\x3c\x35\x5c\x51\xbc\x2e\xf6\x4f\xaf\xa6\x8f\xa2\xbf\x26\x88\x1b\xd4\xd3\x67\x85\x71\x93\x8a\xfa\xbc\x40\x6e\x58\x53\xff\x92\x5a\xd4\x99\xa8\x3a\x1d\x15\x79\xd5\x7a\xa5\x1b\x02\x54\x19\xd5\x1a\xa3\xf2\x57\x05\xb5\x87\xa8\x9c\x27\xb5\xf0\x78\x7c\xc5\xa3\x99\x1a\x71\xe6\xaa\x07\xb7\x6f\x80\xfb\xef\x00\x00\x00\xff\xff\xf4\x79\x58\x2d\x03\x11\x00\x00" func runtimeSyntaxLuaYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxLuaYaml, "runtime/syntax/lua.yaml", ) } func runtimeSyntaxLuaYaml() (*asset, error) { bytes, err := runtimeSyntaxLuaYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/lua.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMailHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4d\xcc\xcc\xe1\xd2\xd0\xd3\xd2\xcf\x2d\x2d\x29\xd1\xd5\xd3\xaa\x89\xd1\x4b\xcd\xcd\xd1\x54\xe1\x8a\x73\x2b\xca\xcf\x55\xd0\xd3\x52\x88\x49\xd1\xb6\x82\x62\x10\x9b\x0b\x10\x00\x00\xff\xff\xac\x1f\x13\x8d\x32\x00\x00\x00" func runtimeSyntaxMailHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMailHdr, "runtime/syntax/mail.hdr", ) } func runtimeSyntaxMailHdr() (*asset, error) { bytes, err := runtimeSyntaxMailHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/mail.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMailYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x90\xcf\x4b\xc3\x30\x14\xc7\xef\xfd\x2b\x42\xd9\x61\x3f\x58\xbd\x07\xd9\x26\x82\x28\x78\x10\xa6\xa7\xbe\x0e\xb2\xe4\xcd\x45\x92\xb4\x24\xaf\x82\xd0\x3f\x5e\xd2\xae\x71\x6e\x1e\xcc\xa1\xf4\xfd\xfa\xbe\xcf\xfb\x1e\xb4\x41\xfa\x6a\x90\x33\x2b\xb4\xc9\x32\x85\x84\x92\x78\xc6\x18\x63\xb1\xe6\x84\x45\xce\xf2\x69\x31\xbf\xb1\x2d\xd1\xb2\x98\x77\x00\x05\x5a\x33\x9b\xe4\x7d\xd3\x11\x85\x42\xcf\x59\xbe\x7b\xf0\xb5\x65\xc5\x9c\x01\xa8\x05\x4f\x9f\x3e\xcc\xb3\xcc\xb7\x06\xc3\xa0\xbb\x64\xc3\xc6\x34\x92\x9f\xd2\x5a\xa1\x23\x7d\xd0\x83\x5e\xb9\x2b\x79\x68\x84\x44\x5e\x55\x0b\x3e\xf6\x34\x1e\x1b\x5f\xcb\xd8\xf0\xac\x03\x2d\xa7\x4f\xaa\xbb\xf3\xf2\xa8\x3f\xb1\xdb\xb6\xfb\x20\xbd\xde\x63\xf7\xe6\x42\xfa\x7f\xa9\x03\x75\x8f\x68\x9a\x59\x12\x91\xb5\x0b\x24\x1c\x45\x95\xe9\x6b\xdd\x45\x8e\xeb\x6a\x11\xc8\x6b\xf7\x3e\x40\xc7\x17\x48\xf8\x7e\x66\xdb\xee\x3f\xa2\x4d\x23\x7a\x7c\xe8\x14\x67\xf9\xe4\x27\x31\x5c\xcc\x52\x7c\x29\xde\xa0\xd4\xc2\xdc\x1f\x45\xbc\x16\x00\xa0\x18\x01\x02\x09\x42\x8b\x3d\xdf\xed\xba\xdc\x6d\xce\x8c\xd8\xfc\xb2\x65\xb5\x1e\x67\x14\x1e\x44\x6b\xe8\x0f\x58\x00\x07\xe0\x2e\x41\xcf\xd1\x4f\xa4\x65\x95\x0c\xb0\xfd\xf6\x6b\xad\xd5\x7f\x2e\x2e\xab\xec\x3b\x00\x00\xff\xff\xb9\x78\x17\xdc\x57\x02\x00\x00" func runtimeSyntaxMailYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMailYaml, "runtime/syntax/mail.yaml", ) } func runtimeSyntaxMailYaml() (*asset, error) { bytes, err := runtimeSyntaxMailYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/mail.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMake_headersGo = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\xd1\x6a\xdc\x3a\x10\x7d\xd6\x7c\xc5\x5c\xc1\xbd\x91\xc9\x5e\xa5\x09\xf4\x25\xb0\x85\x92\x10\xf2\x14\x4a\xb6\xa5\x94\x4d\x48\x54\x5b\xb6\x45\x6c\x69\x19\x69\xb7\x09\x61\xff\xbd\x8c\xbc\x4e\x76\x37\x81\xf6\xc9\xb6\xe6\xcc\x99\x73\x66\x46\x5e\x98\xf2\xc1\x34\x16\x7b\xe3\x3c\x80\xeb\x17\x81\x12\x2a\x10\xf2\xe7\x53\xb2\x51\x82\x90\x75\x9f\xf8\xe1\xc2\x91\x0b\xcb\xe4\x3a\xfe\x08\x39\x12\x13\x39\xdf\xe4\xd7\xe4\x7a\x2b\x01\xc4\x93\xe9\x3b\x94\x4d\x58\x3c\x34\xda\xf9\x23\xfe\xd4\xab\x13\x09\x05\x40\x7a\x5a\x58\xbc\xb4\xa6\xb2\xf4\x83\x51\x31\xd1\xb2\x4c\xf8\x0c\xe2\xc2\x75\xf6\x2b\x47\x07\x42\xbc\xe7\xb4\x53\x59\xbb\xce\x72\x92\xbc\x07\x71\x6e\x93\x2d\x13\xe2\x56\x96\xb8\xb8\x32\xbd\xbd\x6e\x1e\xf1\x9d\x3c\x6f\xfa\x9c\x27\x86\x82\x8c\xda\x05\xb5\xf9\x9c\x21\xeb\xf1\xa8\xca\x35\xe4\x3d\xac\x77\xc4\xbe\x27\x74\x43\x06\x6f\x34\xc0\x9b\x82\xcc\x56\x2f\x7d\x99\x3b\xac\x0a\xa6\x71\x35\x76\xd6\xab\x10\xf5\x67\x6a\x62\x81\x9f\xf0\x38\x1b\x0a\x51\x9f\xb5\x95\xa3\x31\x32\x3f\xbe\x2d\x40\xac\x41\xb0\xa3\x38\xc1\x3b\x3c\x9d\xe2\x30\x04\x7d\x6d\x4d\x75\xee\x48\x49\x2d\x0b\x10\x75\x20\xbc\x9b\x60\xcd\x00\x32\xbe\xb1\x98\x53\x32\x6b\xcd\xbd\xe0\x40\xad\x59\xac\x2a\x40\xb0\x82\xcd\xf0\xf4\xa5\x89\xb3\x65\x5d\xbb\x47\x95\x81\x13\x94\x9a\xdb\x21\xb3\x52\x21\xca\xe0\x57\x96\xd2\x10\x9c\x9f\xb2\xee\xfc\x5a\xfc\xff\x91\xc5\xb1\xba\xf5\x8b\xc5\x11\x9c\x2b\x0e\x05\x32\xcd\x38\x11\x56\x91\x9f\x87\x63\x15\x10\x2b\x43\xd8\x56\xb4\xb5\x19\x20\x62\x58\x52\x69\x27\x68\x89\xf6\x2c\xf3\x04\xd4\x48\x57\xe4\x56\x32\xe8\x9f\x29\x7a\xd7\x65\xc5\x0b\xe3\x5d\xa9\x2c\xd1\xd0\x3a\x8e\x4e\x31\xef\xe1\x37\xdf\x1b\x8a\xad\xe9\xd4\xc8\xff\x5f\x5b\xd1\x5f\x91\xf8\x32\x54\x56\x0d\xfd\xc9\x39\xa3\xe3\xad\xc8\xc6\xf0\x04\xcb\x2d\x2f\x83\xfd\xcd\xe8\x78\xbe\x64\x4d\xda\xe0\xb9\x09\x6d\x45\x79\x7e\xfa\x3b\xb9\x64\x67\x99\x41\x95\xfa\x65\xd1\x0e\x51\xde\xf8\xf7\x10\xc3\x85\xd0\x2f\xfb\xf7\x27\xe0\xeb\x5a\x6e\x21\xcf\xba\x10\x79\x21\x46\x37\x95\xdd\x77\x53\x8c\x97\xe0\x19\x44\x4c\x86\x12\xfb\xe0\xcb\xae\xaf\xc2\x2f\x5e\xa5\xca\x24\xf3\x76\x33\xf3\x98\xf6\x4d\xc6\x44\x91\x71\xf9\xcf\xa2\x67\x8b\xce\x25\x35\xa4\xcf\x6f\xf9\xec\xf9\xe0\xc6\x1f\xac\x8b\xfd\x95\x00\xd1\x56\xf4\xda\x91\xe9\x46\x99\x62\xba\xf9\x07\x5e\xc2\x1c\x1f\x1b\xb1\x1b\x3f\x1e\xe3\xaf\xfe\x77\x01\x27\x0c\xa8\xfb\xa4\xbf\x90\xf3\xa9\x56\x32\x85\xf0\x80\xff\xae\x6e\xbc\x9c\x0c\x46\x67\xce\x97\x56\x65\xf3\x45\x01\x20\xc8\xa6\x25\x79\x16\x08\x6b\xf8\x1d\x00\x00\xff\xff\x87\x85\x4c\x11\x3f\x05\x00\x00" func runtimeSyntaxMake_headersGoBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMake_headersGo, "runtime/syntax/make_headers.go", ) } func runtimeSyntaxMake_headersGo() (*asset, error) { bytes, err := runtimeSyntaxMake_headersGoBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/make_headers.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMakefileHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4d\xcc\x4e\x4d\xcb\xcc\x49\xe5\xd2\x88\xf6\xcd\x8d\x85\x72\x6a\x62\xf4\x72\x13\xed\xb3\x35\x55\xb8\xe2\x94\x15\xf5\xb4\xf4\x35\x52\xf3\xca\x14\xb4\x35\xed\xa3\x93\xd2\x63\xed\x41\x3a\x34\x14\x6a\x54\x34\xb9\x00\x01\x00\x00\xff\xff\x15\xaf\xd5\xf2\x3c\x00\x00\x00" func runtimeSyntaxMakefileHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMakefileHdr, "runtime/syntax/makefile.hdr", ) } func runtimeSyntaxMakefileHdr() (*asset, error) { bytes, err := runtimeSyntaxMakefileHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/makefile.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMakefileYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x53\xd1\x6e\xdb\x3a\x0c\x7d\xbe\xfe\x0a\x5f\xd7\x6d\xed\xfa\x36\xf7\xdd\x68\x96\x01\x1b\xf6\xb6\x2f\x30\x1d\x40\xb1\xa8\x46\xab\x2c\x79\x94\x92\xb6\x18\xfb\xef\x83\x94\xac\x6d\xb2\x76\xc8\xcb\x04\xc3\xa6\x68\x9d\xa3\xa3\x43\x4a\x69\x83\xe1\x71\xc2\x36\x1f\xc5\x1d\xc6\x59\x96\x49\x0c\x38\x84\x36\xcb\xf3\x3c\x8f\x19\x2b\x46\x6c\xf3\xa2\xea\xbe\x8e\xfd\x7e\x11\x03\xcc\x46\xb1\xb8\xab\xcb\x22\x2d\x5b\xa3\x90\x48\x6d\x5e\x2c\xcf\xfe\x9d\x5d\xfd\x5f\xa1\xdd\xe6\x4d\xbd\xe8\x56\xb7\xfd\x22\x12\x57\x39\x97\x75\x91\x65\xb4\x31\xe8\x77\xcc\xd7\xf9\x44\x38\x91\x1b\xda\xbc\x00\xb8\xa9\xb4\xc2\xef\xac\x95\x44\xc5\x5a\xd9\x14\xdb\x38\x41\xe3\x91\xd1\x4a\xad\x6a\x80\x0f\xc5\x1e\xeb\x83\x08\x38\xa2\x0d\x71\xcf\x0a\x1f\x26\x47\x81\xb5\x1d\xcc\x46\x22\xbb\x2d\x12\x69\x89\x07\x80\xc7\x71\xe5\xcc\xcc\x4d\x48\x22\xb8\x24\xb5\x5b\xb6\xf3\x7f\xfa\xa6\x7d\x7f\x49\xd5\xcd\xff\x3b\xef\x19\xa0\x99\x33\xc0\x62\xce\xed\x9c\x2f\x2e\x18\x20\x3e\xf5\x5b\x5a\x00\x4a\x80\xaa\x12\x2b\x3f\x89\xb0\x66\x21\xe5\x44\xa8\xf4\x43\x8c\xfc\x46\xa5\xc8\x4a\x5e\x09\x9f\x6c\xe5\x41\x18\xc3\x52\x53\xdd\x75\xad\x9f\xc4\x80\x6d\xdf\xff\x81\x17\x89\x1c\x31\x6e\x85\x61\xa5\x4d\x40\xda\x7f\xae\xdd\x26\xb0\xd2\x56\xfa\x40\xda\xde\xb2\xd2\xe4\xc3\xbd\x23\x79\x22\xaf\x32\x62\xeb\x88\x95\x23\x14\xc3\x9a\xb5\x62\x6d\x95\xe3\x6f\x4e\x5b\x36\x62\x47\xc5\xd6\x05\xa9\x89\xdd\xa9\x62\x1d\xe9\x5b\x6d\x79\x12\xc1\x6f\x56\x3e\x30\xa1\x30\xc9\x15\xbf\x46\x63\xd8\xc7\x92\x45\xbd\x13\xef\x9c\x39\x91\x76\x2b\xcc\x06\xf9\x5e\x90\x8d\x27\xbd\xd7\x46\x0e\x82\x24\x27\x89\xf1\x65\xb4\x0f\x29\xf0\x6f\x11\x6a\x89\x36\x68\xa5\x77\xdd\x3a\x7b\xa9\xfe\xc1\x8f\xae\xaa\xcb\x67\xc8\xe0\xac\x0f\xc2\x86\xd9\xce\xdc\x5d\xfb\xc6\xe1\x83\xa0\x24\xac\x28\x9e\x73\x68\xe5\x51\xc6\xdf\xe9\x29\xa9\x07\x98\xbd\x64\x5f\xdd\x84\x5f\xe3\xf5\x4e\x13\x0e\x5a\x98\x4f\x6b\x41\x87\xd0\x13\xd4\x5c\x1e\x8b\xb9\xfc\x6b\x5a\x0e\x3c\x03\x28\x9b\x0a\xe0\x47\xb7\x7c\xca\xfb\x06\xe0\x89\x01\xaa\x6e\x59\xa7\x49\x5d\xbf\x87\xe9\x3e\x2e\x6f\xae\x16\xe7\xdc\xc4\x7b\x16\x0b\xbc\x4f\x34\xd7\x7d\xf7\xf9\x4b\x0f\xf0\x2e\x12\xa0\xe4\x24\x67\xf1\xe2\xcd\x98\x7a\xe5\x37\x4f\xce\x8e\x3d\x29\x8f\x4f\x9f\x77\x7d\x96\xfd\x0c\x00\x00\xff\xff\x85\xaa\x15\xc9\x0e\x05\x00\x00" func runtimeSyntaxMakefileYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMakefileYaml, "runtime/syntax/makefile.yaml", ) } func runtimeSyntaxMakefileYaml() (*asset, error) { bytes, err := runtimeSyntaxMakefileYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/makefile.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxManHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4d\xcc\xe3\x8a\xd1\x8b\x36\xd4\xb5\x8c\xad\xb0\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\x03\x9c\x45\x64\x10\x00\x00\x00" func runtimeSyntaxManHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxManHdr, "runtime/syntax/man.hdr", ) } func runtimeSyntaxManHdr() (*asset, error) { bytes, err := runtimeSyntaxManHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/man.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxManYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\xcc\x3f\x6b\x84\x30\x18\x80\xf1\x3d\x9f\xe2\x25\x38\x34\x05\x85\x8e\xcd\x22\x88\x85\xba\x85\xe8\x66\x1c\xb4\xbe\xfe\x81\x68\x4b\x1a\xf1\x84\xf7\xc3\x1f\x77\x7a\x83\x38\x3f\x3f\x9e\x6e\xb4\xe8\xb7\x3f\x94\x30\xd5\x33\x63\x2d\x7a\xfc\xf1\x12\x18\x00\xc0\xa3\xcd\xf5\x84\x12\xb8\x31\x51\xf9\x11\x7e\x56\xb7\x38\xe0\x8c\xb9\xc5\xe2\xbf\x7c\x9a\x10\x7a\x87\x38\xef\xe4\x2d\xa7\x42\x7c\x47\xef\x01\x3f\x5a\xe3\xc6\x7e\xf0\x17\x41\xc6\x44\x85\x3a\x23\x87\xed\x41\x12\x1d\x53\x56\x2a\x5d\xc5\xe2\xb2\x6a\xec\x82\x17\x46\x4a\x89\x33\x5b\x87\xd1\xef\xce\x98\xae\x4c\x32\xa5\xab\x17\xd8\xd0\xda\xdf\xf5\x78\x34\x8e\xd2\x9c\x74\x4e\xfa\x8b\x54\x2a\x38\xbb\x07\x00\x00\xff\xff\x92\x65\x68\x09\x0f\x01\x00\x00" func runtimeSyntaxManYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxManYaml, "runtime/syntax/man.yaml", ) } func runtimeSyntaxManYaml() (*asset, error) { bytes, err := runtimeSyntaxManYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/man.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMarkdownHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4d\x2c\xca\x4e\xc9\x2f\xcf\xe3\x8a\xd1\xd3\xc8\x4d\xa9\xc9\xcd\x06\xe3\xbc\x1a\x98\xb8\xa6\x0a\x17\x17\x20\x00\x00\xff\xff\x3f\xa3\x50\xd9\x24\x00\x00\x00" func runtimeSyntaxMarkdownHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMarkdownHdr, "runtime/syntax/markdown.hdr", ) } func runtimeSyntaxMarkdownHdr() (*asset, error) { bytes, err := runtimeSyntaxMarkdownHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/markdown.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMarkdownYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x93\x4f\x6f\x9c\x30\x10\xc5\xef\x7c\x8a\x29\xd9\x83\x31\x65\xd3\xaa\x52\xa5\x22\x6d\x7a\xa8\xaa\x9e\x7a\x69\x73\xf3\x18\x96\x80\xb3\x58\x0b\x86\xda\x46\xfd\x13\x67\x3f\x7b\x65\x60\x23\xd8\x44\x55\x0f\xbb\x88\x99\x79\xbf\x79\x3c\xf0\xbd\x6c\x84\xfd\xdd\x8b\x14\xda\x42\x1f\xab\xee\xa7\x0a\x82\x4a\x58\x51\xda\x34\x00\x00\xf0\x7d\x55\xb4\x22\x85\x10\x71\x4b\xda\xca\xb5\xc7\xf1\xa7\xdc\x59\x10\x6d\xc2\x20\xd0\x43\x23\xcc\x24\xb9\x82\xdb\xe2\xae\x11\x06\xc8\x17\x69\xeb\xe1\x0e\xc4\x2f\x2b\x94\x91\x9d\x8a\xc6\x7e\x02\xd3\xc2\x70\x4b\x19\xa4\x1c\xd1\xf9\xcb\x96\x86\xc1\xd8\xf6\x80\x1f\x43\x67\x85\x99\xa7\x8d\x2d\xac\x68\x85\xb2\x29\x40\x98\xdd\xac\x06\x3f\xb7\x7d\x5d\x18\x69\xd6\x60\x92\x39\xc6\x52\xd3\x17\xa5\x48\x39\x8f\x48\xce\x32\xe0\x2c\xcb\x39\xcd\x1d\x22\x9d\xee\x28\xa7\x88\x34\x5a\xc0\xbe\x5b\xdd\xa9\x03\x88\xff\x63\x2e\xa0\x23\xf5\x02\x7c\xc1\x36\x56\xcb\xa3\x48\x6c\xad\xbb\xe1\x50\xff\x13\x7d\x3a\x4d\x9c\x13\xa7\xa7\xd3\x02\x51\x77\x5a\xfe\xe9\x94\x2d\x1a\x18\xd3\x3e\xc7\xd3\x8b\x52\x16\x4d\x0a\x61\x46\x92\x24\x89\xdd\x6e\xb7\x8b\x5d\x9e\xe7\xf1\xec\x0a\x91\xc6\x11\xa2\xa1\x9b\x25\x4c\x14\x55\x23\xd5\x73\x0a\x84\xd9\xd5\xc3\xdb\xd7\xef\x1f\x57\x39\x37\xd2\xd8\xf3\xa8\xac\x84\xb2\xf2\x5e\x0a\x9d\x82\x1f\x5f\x78\xa7\xcc\x2f\x4b\x38\xb8\x75\xf5\x4d\xf2\x81\xc7\x88\x5b\x58\x20\x5b\x69\xca\x99\xd8\x6b\xd1\xeb\xae\x1c\x71\x04\x91\x10\xf6\xa9\xfc\xa6\xb9\x63\xb7\x96\xb3\xaf\x2d\x8f\x10\x23\x87\xb8\x7d\x78\xf7\xe8\x2e\xc2\x42\x4c\x10\x13\xb2\x59\x15\xa3\x95\x73\x75\x3c\x3b\x2f\x3b\x65\x6c\xe1\x3f\xa4\x10\x91\xb1\x8c\x7b\x53\x3c\x7c\xb1\x4b\x58\xc6\x19\x77\xf3\x1c\x45\xe4\x91\xff\x43\x24\x2c\x8b\xbc\x6e\xb9\x44\xb6\xc5\xe1\x29\xca\x41\x55\x42\xfb\x6c\xab\x14\xc2\x57\x13\x80\x8d\x04\xb2\x50\xbb\x85\x83\x25\x6a\xd0\xcd\x8b\xa0\xda\xda\xde\x7c\x4c\xaf\xaf\x59\x06\xd1\x0d\x8f\x67\xc9\xea\xfd\xef\xf7\xfb\xcd\xb3\xfa\x4c\x06\x7f\x8e\xb4\x7f\xb8\x7d\xf8\x54\x12\xaa\x5a\x17\xa6\x63\x0c\x8c\x07\x7f\x03\x00\x00\xff\xff\x34\x33\xd2\x49\x19\x04\x00\x00" func runtimeSyntaxMarkdownYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMarkdownYaml, "runtime/syntax/markdown.yaml", ) } func runtimeSyntaxMarkdownYaml() (*asset, error) { bytes, err := runtimeSyntaxMarkdownYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/markdown.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMcHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4d\xe6\x8a\xd1\xcb\x4d\x56\xe1\xe2\x02\x04\x00\x00\xff\xff\x23\xa5\x21\x87\x0a\x00\x00\x00" func runtimeSyntaxMcHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMcHdr, "runtime/syntax/mc.hdr", ) } func runtimeSyntaxMcHdr() (*asset, error) { bytes, err := runtimeSyntaxMcHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/mc.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMcYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x8e\xcf\x4a\xc4\x30\x10\x87\xef\x79\x8a\x21\xbb\xa0\x1e\xdc\x07\xe8\xad\xd0\x08\x01\xdb\x2c\x6d\x15\xc4\xf5\x4f\x48\xa6\x4b\xa0\x99\x95\x66\x14\x84\x3c\xbc\xb4\x0b\x2b\xe8\x82\x38\x97\x61\x7e\xf3\xcd\xc7\xac\x20\x21\xf9\x68\xc3\x08\xee\x40\x43\xd8\xc3\x10\x46\x4c\x42\xcc\x8d\x3f\xdf\xb0\x80\xe8\x84\xf0\xc8\xe8\xb8\x10\x00\xb0\x00\x64\x23\x16\x20\x77\xbb\x4d\x74\x6b\x29\xc4\xf4\x3e\x62\x3a\xae\xaf\x21\xb1\x65\x8c\x48\x5c\x80\x7c\xbe\xf4\xe1\x03\x27\xce\xf7\xaa\xed\xb4\x69\x74\x95\x4d\xd7\x3f\x6c\x55\xae\x4c\x5d\xea\x26\xdf\xa8\xb2\xbf\x6b\x55\xf6\x38\x04\xc2\x2b\x79\xd6\x51\x95\xaa\x36\xcd\x8b\xd9\xf6\xda\x34\x5d\xae\x4b\x7d\xab\xda\x13\xeb\x0e\x71\x21\x97\x71\xae\xc4\x76\x9a\x0f\x57\xf2\x14\x21\xf9\x02\xe4\xfa\x3b\x38\x7e\x0c\x8f\x4f\x7f\x49\x3c\x8d\xff\xd2\x50\x62\x4b\xbc\x49\x3c\x05\xda\xff\xd6\xbd\xfe\x94\x5d\x9c\x93\x89\xaf\x00\x00\x00\xff\xff\xaa\xc9\x8d\xf2\x98\x01\x00\x00" func runtimeSyntaxMcYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMcYaml, "runtime/syntax/mc.yaml", ) } func runtimeSyntaxMcYaml() (*asset, error) { bytes, err := runtimeSyntaxMcYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/mc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMicroHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xcd\x4c\x2e\xca\xe7\x8a\xd1\xd3\x00\x33\x34\x55\xb8\xb8\x00\x01\x00\x00\xff\xff\xbd\x2c\x66\xf3\x12\x00\x00\x00" func runtimeSyntaxMicroHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMicroHdr, "runtime/syntax/micro.hdr", ) } func runtimeSyntaxMicroHdr() (*asset, error) { bytes, err := runtimeSyntaxMicroHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/micro.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMicroYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\x31\x6f\xdb\x30\x10\x85\x77\xfd\x0a\x42\xc9\x20\xc1\x90\x91\x8e\x15\x10\x18\x41\x9b\x00\x1d\xda\x0c\xcd\x50\xa0\xcc\x70\xa2\x4e\x32\x61\x8a\x14\x8e\xa7\xc4\x46\xd9\xff\x5e\x50\x72\x63\xab\x6e\x6c\x6d\x3e\x7e\x8f\xf7\xee\xd1\xd7\x68\x83\xbc\xeb\xb1\x14\x9d\x56\xe4\x92\xa4\x46\x46\xc5\x65\x22\x84\x10\xf1\xd0\x42\x87\xa5\x48\xa5\x5c\x66\x23\x91\x5f\xa7\x49\x42\x83\x41\x3f\x31\x85\xf0\x0c\x8c\x1d\x5a\x1e\xb1\x2a\xf3\x3b\xcb\xb0\x0d\xca\x19\x47\x59\x61\xb4\xdd\xe4\xab\x5c\xca\x2a\x7d\x8f\x67\x20\xbe\x0d\x68\xeb\xdb\x03\x76\x25\xbe\xeb\xae\x37\x28\x9c\xc5\x78\x07\x92\xdf\xcb\x75\x8d\x96\x75\xa3\x91\xf6\xfa\x1a\x1b\x18\x0c\x07\x3b\x74\x15\x52\x78\xbb\x3e\x0c\xb6\x46\x8a\xda\x3a\x20\x91\xa3\xc0\xae\x76\xe3\xf9\xe0\x63\x39\x68\x1b\xef\x2a\xd4\x1a\x28\xa8\x81\xbc\x23\x29\xc7\x66\x93\x79\x29\x0b\xe5\xcc\xd0\xd9\xa0\x5b\xeb\x08\x43\xad\x5f\x74\x8d\x14\x18\xaa\x0a\x68\x66\x16\x7b\x20\x60\x3c\x72\xe7\x05\x3b\xb1\x41\xec\x45\xaa\x5c\x1c\x65\x9b\x0a\xc2\x16\xb7\x42\x19\x04\xfb\xde\x34\xbe\x47\xa5\xc1\x64\x9f\xd6\x40\xf3\xdc\x4e\xd0\x4c\x0d\x44\x68\x59\xca\x22\x5f\x45\xdb\x52\x16\x53\x08\x67\x65\xed\xc0\x8c\x71\xb8\x4c\xdb\xc6\xed\xa3\x79\x05\xb2\xda\xb6\xf9\xaf\x0f\xbf\xcf\x8a\x95\xeb\x62\xb6\x99\x94\xcb\x8a\x74\xbb\xe6\x0b\x1e\xfd\xae\xab\x9c\x89\x78\x56\x11\xa8\x0d\xb2\x0f\xae\x47\x02\x8e\xef\x01\x6d\x7e\x41\x7f\x28\x8c\x77\x28\x03\xde\x87\x0e\x14\xb9\xf0\x02\x74\x49\xad\x9c\xf5\x0c\x93\xdd\xac\x72\x7b\x23\x4c\x03\x86\x06\x8c\xc7\x71\xdc\xd5\xdb\x3f\x67\x8a\x3e\x26\x1f\x3c\x93\xb6\x6d\xc4\x07\x32\xf9\x6a\x02\xcf\xf6\xea\x09\x7b\x72\x2a\x4a\xfc\x1a\x2b\xb0\xed\x05\x41\x5c\xbb\x48\x6f\x70\xf7\xea\xa8\x9e\xd3\x7f\x9d\x2f\x27\x6f\x7b\x49\x58\x87\xbb\x70\xb3\xcd\x17\x3f\x6f\x8a\x8f\xcf\x8b\xf1\x77\xbe\xb8\x24\xbb\xd9\x46\x5c\x40\xd1\x88\xbb\xe2\xe1\x79\xce\x8f\xcf\x39\xad\x72\xfc\xc6\x65\x2c\x45\x7a\x95\xbe\x95\xd0\xd6\xa5\x48\xaf\x0f\x85\xa3\xed\x9f\xbe\x42\xc4\xcd\x2a\x45\x9a\x3d\x7c\xf9\xf1\xf5\x3e\x3c\x3d\x7e\x7e\x0c\xdf\x1e\x9f\xee\xf3\x72\x75\xe2\x6c\x4a\xf6\xb4\xa3\x4c\xff\x6d\x79\x5c\xf1\x1b\xdd\x8f\xd3\x48\xb9\x3c\xe3\x64\xde\xe9\xf0\x9e\x73\xe9\xff\x72\xba\x1a\x33\xba\x2b\x1e\x62\x4e\xcf\x8b\x34\xf9\x13\x00\x00\xff\xff\x39\xf1\xae\x51\x1a\x05\x00\x00" func runtimeSyntaxMicroYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMicroYaml, "runtime/syntax/micro.yaml", ) } func runtimeSyntaxMicroYaml() (*asset, error) { bytes, err := runtimeSyntaxMicroYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/micro.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMpdconfHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x2d\x48\xe1\xca\x2d\x48\x89\xd1\x4b\xce\xcf\x4b\x53\xe1\xe2\x02\x04\x00\x00\xff\xff\x86\x04\x46\xc3\x10\x00\x00\x00" func runtimeSyntaxMpdconfHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMpdconfHdr, "runtime/syntax/mpdconf.hdr", ) } func runtimeSyntaxMpdconfHdr() (*asset, error) { bytes, err := runtimeSyntaxMpdconfHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/mpdconf.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxMpdconfYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8f\x41\x8e\xdc\x20\x10\x45\xd7\xe3\x53\x20\x32\x52\x1b\x5b\xe3\x03\xb0\xc9\x41\x5c\xb6\x85\xa1\xc6\x8d\x62\x03\x82\x42\x51\x6b\x2a\x77\x8f\xdc\x49\x27\x1d\x29\xb3\x04\xde\x7f\xff\xf3\xee\x77\xa4\x5b\x42\x2d\x8e\xe4\x9a\xc6\x21\xa1\x25\x2d\x1a\x21\x84\x38\xdf\x82\x39\x50\x0b\x79\x24\x07\x30\xd8\x18\xde\x5f\x65\xd3\xe4\xba\x63\xd1\x77\xe6\x4d\x14\x32\x84\x07\x06\xd2\x42\x02\xac\x6d\x2d\x98\x79\xcb\xb1\x26\x5e\x7d\x70\x0b\xc5\xc5\x38\x97\xb1\x14\xbe\xc6\x42\x9c\x62\x26\x4e\x7b\xdd\x7c\xe0\xd3\xce\x67\xbd\x02\x58\xe5\x27\xc2\xf6\xa8\xc5\x5b\x4e\xbb\xb9\xed\xbe\x90\x5a\x9c\xcf\x68\x29\xe6\x1b\xb7\x6e\xe5\x3d\x6e\x7c\x8f\x70\xf2\x8e\x0b\x79\xfb\x0d\xb3\x5a\xce\xf1\xff\x58\x13\x5a\x6f\x76\x2d\xe4\xdc\xfa\x90\x2a\xb1\xa9\xce\xc7\x25\x56\x3a\x0f\x0e\x6d\x74\x98\xd5\x38\xea\x92\x8c\x45\x3d\x4d\x1d\xc0\x07\x03\xfc\x78\x18\x6c\x0c\x85\x4c\xa0\xa1\x50\xf6\x61\x3b\xd7\xc9\x16\x00\x60\xe0\x71\x06\x39\xa9\x0e\x24\x5f\xfe\xdc\x5c\x26\xd5\x5d\xfe\x66\x8f\xdf\x3f\x6a\x67\x7e\xea\x50\x5f\xda\x71\xfe\x98\x86\x4e\x7d\x7d\x7d\xb0\x3e\x38\x0c\xf4\x66\xaf\x26\x0f\xdf\xaf\x9e\xf0\x17\x2c\xe4\x53\xae\xff\x1f\xad\x85\x7c\xe9\x45\xcf\xa2\x7f\xe9\x65\xf3\x33\x00\x00\xff\xff\x32\x59\x3a\x12\xda\x01\x00\x00" func runtimeSyntaxMpdconfYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxMpdconfYaml, "runtime/syntax/mpdconf.yaml", ) } func runtimeSyntaxMpdconfYaml() (*asset, error) { bytes, err := runtimeSyntaxMpdconfYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/mpdconf.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxNanorcHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4b\xcc\xcb\x2f\x4a\xe6\x8a\xd1\xb3\x87\xb0\x54\xb8\xb8\x00\x01\x00\x00\xff\xff\x9f\xc7\x64\x9d\x13\x00\x00\x00" func runtimeSyntaxNanorcHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxNanorcHdr, "runtime/syntax/nanorc.hdr", ) } func runtimeSyntaxNanorcHdr() (*asset, error) { bytes, err := runtimeSyntaxNanorcHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/nanorc.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxNanorcYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x93\x5f\x6e\xe3\x38\x0c\xc6\xdf\x73\x0a\x23\xdb\x07\xbb\xbb\x9b\x03\x04\xd8\xcd\x41\xaa\x16\xd0\x1f\xda\x16\x22\x93\x2a\x45\xc5\xcd\x80\x87\x1f\xd8\x49\x3b\xe9\xb4\x53\xcc\x3c\x29\x91\x7f\x24\x3f\x91\x1f\xfb\x98\x40\xce\x19\xf6\x0d\x5a\x24\xf6\x9b\x4d\x00\x01\x2f\xfb\x66\xd3\x34\x4d\xb3\x7c\x46\x3b\xc1\xbe\xd9\x1a\xb3\x3b\x5c\x98\xbb\xed\x66\xc3\x35\x41\xd9\xaf\xcc\xbf\x4d\x80\xde\xd6\x24\xfb\x66\xdb\x1e\x62\xf7\xf4\xf0\xb0\x2f\xd9\x7a\xd8\x3f\x3e\xde\xb7\x6d\xc5\xee\x50\x40\x34\xa2\x4f\x35\x80\x96\x33\x8a\x7d\xd1\x78\xf0\x94\x88\xbb\xdd\xfd\xdd\xf6\x9a\xe6\xa2\xe3\x93\x1c\x4b\x78\xc5\x02\xd2\xdd\x5c\xff\xdd\xda\x2a\x14\x31\x00\x8a\x3a\xeb\x8f\x35\x5f\x8f\x10\x79\xfd\x35\x5b\x0e\x45\x1d\xa5\x20\xf0\x22\xea\xd8\xfa\x23\x48\x51\x6f\x0b\x14\xc0\x12\x25\x9e\x40\x3d\x61\x11\xf5\x55\xb4\x8f\x29\xe9\x18\x8b\x10\x9f\x13\x0d\x3a\x59\xf1\xe3\x5b\xd4\x44\x0c\x6b\x6d\x9d\xa8\x16\xd0\xa9\x26\x89\xae\xf6\x3d\xb0\x22\x79\xc2\x13\xb0\x28\x52\x4f\x29\xd1\xac\x48\x23\xa4\xac\x48\x08\x73\x8a\x08\x45\x91\x66\xb6\x59\x29\x03\x5b\x89\x38\x2c\x32\x33\x43\x01\x3e\x81\xe6\x8a\x5e\x3a\x63\xfe\xd7\xdf\x7a\xfa\x73\x8d\xfe\xe8\x92\xc5\xa3\x3e\x57\x12\x28\xc2\xca\xe0\x22\x86\x00\x09\x04\xae\x7f\x8e\x70\xce\x36\x28\xc3\x00\x2f\x59\xcb\x64\x59\x46\x9a\x40\xcb\x44\x24\xa3\x96\x0c\x29\x01\x6b\xa9\x25\x03\x06\x15\xeb\x4a\xfc\x06\xeb\x29\xb4\x56\x2b\x2a\x30\xe5\xc5\x06\x5a\x31\x90\x9e\x22\xcc\x3a\x8f\x51\xae\xbd\x98\x89\x83\xa3\x8a\xa1\x74\xc6\xb8\xd7\x49\x66\x86\xcc\xe4\xbf\x1e\xe6\xcf\x8e\x18\xc1\x06\xe0\xdb\x34\xeb\x68\x2c\xca\xce\x11\xa5\x9d\x70\x7d\xb5\xc7\x92\xe4\xd7\x60\x6f\x53\x79\x23\x2f\xcd\xbb\x61\xe3\x62\x98\xd8\x47\xe0\x4f\xe5\xc5\xee\x62\xcc\x77\x97\x8e\xe3\x30\x4a\x77\x68\xd7\x97\xab\x4b\xd6\x1f\x95\x21\xa8\x4b\x15\x74\x60\x00\xd4\x33\xac\x73\x9f\xec\x00\x28\x56\xfd\xd9\x62\x77\x68\xff\xf9\xd3\x90\xee\x70\xa3\xb5\x64\xf0\xd1\xa6\x2f\x85\x1a\xe3\xd4\x18\xd7\x16\xb1\x2c\x0a\x18\xba\xff\x3e\xb4\xa5\x08\x47\x1c\x96\x25\xde\xb6\xc6\x18\xb3\xd3\x87\x27\xb3\x7d\xec\xee\xcd\xf6\x07\x3b\x4d\x80\xcb\x0e\xbf\x2b\xf3\xd7\xcd\x7e\x5e\x91\xdd\xa5\x1b\x1f\xc8\x0b\xfa\x3d\x00\x00\xff\xff\xa1\x3c\x8d\x21\x51\x04\x00\x00" func runtimeSyntaxNanorcYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxNanorcYaml, "runtime/syntax/nanorc.yaml", ) } func runtimeSyntaxNanorcYaml() (*asset, error) { bytes, err := runtimeSyntaxNanorcYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/nanorc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxNginxHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4b\xcf\xcc\xab\xe0\x02\x93\x7a\x5a\x31\x7a\xc9\xf9\x79\x69\x2a\x35\x31\x7a\x60\x01\x15\xae\x38\x8d\xe2\xd4\xa2\xb2\xd4\xa2\x9a\xd2\x82\xe2\x92\xa2\xd4\xc4\x5c\xcd\xe8\x44\xdd\x2a\x85\x58\xad\x98\x6a\x15\x2e\x40\x00\x00\x00\xff\xff\xa8\x3b\x93\xb7\x3b\x00\x00\x00" func runtimeSyntaxNginxHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxNginxHdr, "runtime/syntax/nginx.hdr", ) } func runtimeSyntaxNginxHdr() (*asset, error) { bytes, err := runtimeSyntaxNginxHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/nginx.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxNginxYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x58\xdd\x8e\xeb\x28\x12\xbe\x9e\x7e\x0a\x2b\xdb\xd2\xe9\x1f\x75\x6b\xa5\x9d\x9b\xcd\x5c\xac\xf6\x35\xb6\x93\x83\x08\x94\x63\x26\x18\x38\x14\x4e\xc7\x7d\x78\xf8\x55\x01\xb6\xb1\x3b\x91\x92\x54\x7d\xc5\x6f\xfd\xdb\xad\xd2\x10\x46\x07\xfb\xc6\x9c\x95\xb9\x3d\x3c\x48\x08\x20\xc2\xbe\x79\x68\x9a\xa6\x21\xa9\xe1\x3d\xec\x9b\x5d\x12\xbf\xbf\x1c\x0e\xef\xc2\x9a\xf6\x31\x1e\x0e\xef\x09\x7a\xdc\xa5\x91\x1d\x70\x09\x7e\xdf\xec\x7e\x3e\x21\xf8\x2b\xf8\x38\x38\x0c\x1e\x78\xff\xfc\xc1\xdf\xbe\x9a\xe3\xcb\xe1\xf0\xfb\x71\xf7\xf0\xe0\x07\x0d\xb8\x4f\x73\xde\x1a\xe7\xc1\x79\x2b\xf6\xcd\xee\x70\x38\x3d\xc1\x15\x4c\xc0\x58\xe6\x77\x21\xb8\xa8\xad\xe0\x41\x59\x53\xad\xf6\xb1\x47\xc7\x05\xec\x8f\x69\xc9\x5d\x59\x09\x03\x0f\xd0\x83\x09\xfb\x66\xf7\xf4\x33\x2e\xa3\x7e\xff\x75\x7c\x7e\xe2\x42\x00\x22\xd3\xf6\x1c\xb9\x94\x8c\xb7\x01\x3c\x3b\x59\x39\x26\xf6\x04\xad\xf5\xb0\xf0\xf9\x2e\x44\x2a\xda\x9b\x91\x7e\x30\x72\x65\x23\xd7\x8a\x63\xe4\x5a\xdb\xcf\xc8\x8d\x50\x60\x02\x3b\x79\xfb\x89\x34\x7c\xcd\xb3\x2b\xd7\x03\x44\x3e\x84\x8e\x9d\x38\x2a\x51\x91\x6c\xa0\x01\xa4\x5c\x02\xad\x32\x12\x6e\x0b\xc5\xe0\xc6\x45\x60\xa8\xbe\x2a\x31\x23\x4d\xe8\xa0\x7a\x88\x27\x0f\xfc\x12\x45\xc7\x3d\x42\x98\xfe\x59\xcf\xdd\x4c\xe7\x03\x8b\x6e\x30\x17\x90\x2c\x78\x6e\xb0\x05\xcf\xc0\x08\x2b\x95\x39\x47\xa1\xf3\x49\xad\x1c\xd9\x69\x68\x49\x96\x76\xab\x71\x65\xd2\x01\x99\x35\x7a\xdc\x0a\x50\x99\xb3\x86\x32\x75\x25\x0c\xd0\x3b\xe6\x78\xe8\xd6\xa8\xea\xc1\x0e\x61\xc2\xb2\x7e\xef\xed\x5c\x24\x9b\xf1\x3d\xbf\xe5\x75\xf2\x50\x6b\x0c\x88\x64\x18\x67\xad\x2e\xa0\x07\x1e\x80\xb5\x83\xd6\xcc\x0d\x21\x1f\x41\x72\xe8\xad\x89\x92\x5f\x59\x76\x80\x44\xf6\x10\x3a\x2b\x31\x4a\x68\xf9\xa0\xb3\xb2\xa2\x04\x33\x46\xa9\x7c\x5a\x78\x26\x18\xd7\xea\x6c\xc8\xab\xa2\x54\xc8\x4f\x1a\x18\x8e\xbd\x56\xe6\x82\x11\x7a\x17\x46\x76\x56\x6d\x04\x73\x8d\xe0\xbd\xf5\xc9\xbf\x32\xe5\xf8\x19\x22\xdc\x9c\xf2\x80\xb1\xe5\x18\xc4\x59\xad\x2e\xbc\xc6\xea\x31\x38\xd9\x04\xd7\x23\x05\x17\xdd\x86\x63\xa7\xd1\x71\xc4\x0d\x78\x81\x71\x83\x68\x2b\x2e\x77\xa0\x59\xcf\x6b\x51\xaf\x0c\x39\xe8\x76\xd9\xa4\xd2\x35\x34\x20\x30\x0c\x5c\x6f\x8f\x75\xe5\x5a\xc9\x05\xcb\x06\xfb\xb6\x5b\xa7\x24\x4c\xb1\x36\x61\xea\x6c\x28\x14\x8b\xe1\xf9\xc9\xfa\xb0\x95\xe5\x19\xcb\xe9\x72\xf4\x2c\x5c\x00\x2f\xc0\x05\x96\x0c\xb1\x0c\xbb\x00\xb8\x74\x94\x19\x21\xb7\x4a\xfe\x9a\xfc\x7c\xa5\x6b\x03\xb7\xc0\xa6\x94\xb3\xa0\x76\x63\x04\xc7\x7d\x25\x5e\x99\x82\x98\xed\xe5\x3c\x70\xf9\x4d\x0b\x08\xe6\x0e\xe8\xb4\xca\x4e\xcc\x94\x69\xed\x82\x07\xeb\x61\xcd\x4d\xae\x3d\x81\xcb\x8d\x3e\xbd\x0a\x9b\x7b\x2d\xe1\xd9\xea\x6b\x3c\x83\xa5\xaf\x72\x4c\xa8\x30\x4e\xa4\x1d\x4c\xf0\x63\x3c\x7f\x29\x97\x7e\x66\x17\x4d\x8c\xb0\xbd\x63\x1a\xae\xa0\x33\x5f\xe2\x22\x33\x94\xb2\xd9\x15\x3c\x52\xc6\x4e\x08\xf9\x92\x06\x73\x0e\x5d\xe6\x9d\xb7\x37\x05\x32\x33\x94\xb3\x95\xc8\x74\x4e\x59\x89\xbc\x72\x3f\x46\xd5\x46\xd5\xb2\xde\x4a\xd5\x2a\x90\x94\x71\x04\xc4\xe2\x01\xca\x24\x07\x9b\x3d\x41\xf5\xfc\x0c\x74\xe7\x00\x7e\xc5\x4c\x19\x6a\x85\xfd\xed\xe0\xcc\x7e\x0d\x5c\xd3\x9d\x57\x12\xec\xb8\x77\x60\xd6\x60\xca\x9e\x8e\x7b\x30\x62\x8c\xca\x08\x3d\x48\x88\xd9\xe7\x92\xaf\x19\xae\x23\x5d\x9d\x63\x17\xc9\xc7\xb8\x56\x57\x58\xa8\x59\x41\x0b\xe2\xe1\xd7\x00\x18\xb0\x82\x26\xfb\x6b\xee\xcf\xb3\xf7\xaf\xd2\x24\x46\xad\x7a\x15\xb2\x07\x2f\x24\xa5\x9c\x62\x8e\x0a\xfc\xb2\x06\x0a\x0f\x37\x0a\x86\xc2\x78\x1e\xa0\x22\x73\x1d\x9c\x00\xf8\xb5\x50\xdf\x96\x25\xac\x5a\xb5\x90\xe6\x0c\x5e\x99\x33\x13\xda\x62\xcd\xa7\x32\xb5\x66\xd3\xed\x14\x06\x30\x4b\x4d\xa7\x4d\x5a\xeb\x7b\x1e\x12\x69\x6c\x60\xad\x1d\x8c\x4c\x1c\x0e\xa7\xa2\xa8\x48\xa5\xad\xe7\x59\xc7\xec\x34\x88\x0b\x94\xea\x38\x83\x14\xca\x05\x41\x32\x1a\x35\x15\x14\x14\x84\x7b\x6e\xce\x80\xb1\x87\x3e\x05\xaf\x5c\xa5\xe1\x05\xdd\x66\xa9\x45\xb2\x4e\x06\x0b\x9e\xe2\x7d\x61\x57\xd1\xbd\xc0\xab\xf8\xee\x81\xec\x8b\x9a\x63\x47\x47\x52\x86\x49\xd0\x10\x80\x49\x70\xa1\x8b\xbd\x95\xe0\xcd\xdc\x51\xac\xd9\xd2\x50\xf4\xee\x4f\xfa\xae\x6f\xe1\xfe\xcc\x45\xb2\xc6\x50\x51\xce\x96\xa9\xe0\x27\xc6\x43\xeb\x01\xbb\x68\x1d\x94\xda\x9e\xb3\xd9\x86\x9f\x12\xe7\x16\x9e\xcb\xc2\x56\x90\xb3\x7d\x42\x93\x45\xeb\x95\x83\xea\xd5\x17\xb0\xdc\xd2\x31\x6a\x25\x31\xda\x2b\x78\x4f\xb9\x7f\x6a\x61\x9c\xf0\xc0\xfe\x56\x21\x3a\xf0\x3a\xfd\x50\xe0\x53\x9f\x98\x19\xf2\x03\xe5\x21\x33\x69\x82\x92\xd1\x59\x1f\xa8\x17\xf1\x90\xab\x75\x74\x16\x83\xb3\x06\x98\x1d\x82\x1b\x42\xa4\x54\xb3\x6e\x6f\x6a\x84\xb4\x52\xf3\x38\x73\xdb\xfa\x9b\xf1\x7c\xa1\x8a\x9e\x6a\x6f\x0d\x51\xe5\xad\xf9\x54\x77\xb7\xc0\xec\x0c\xb5\x60\x56\x6e\x0d\xa6\x44\x5d\x03\x4b\xbd\xad\xd1\xac\xff\x82\x6c\xbc\x78\x42\xed\x45\x01\x93\xb6\xe7\xca\xac\xb1\x6a\x8f\xba\x1e\x17\xa4\xce\xe7\x19\xba\x57\xa0\x57\x92\x29\x29\x17\x70\x5b\x8e\x33\x7c\xa7\xf4\x66\xc1\x3a\xd6\x0a\x66\x57\xda\xaf\xb4\x5e\x17\xd9\x8c\xac\x82\x70\x82\x26\x07\x49\xec\x2a\x1e\x27\x28\xac\x57\x41\x24\x3f\x43\xba\x36\xf3\x30\xe0\xb4\x75\x2e\xbf\x15\x3d\x15\xdf\x0c\xdd\x2d\xbd\x95\x28\xe9\xda\x73\x23\x6d\x5f\xba\x96\x74\x5c\x4e\x7b\x13\xa9\x19\x15\x92\x7c\x10\x0f\x62\xf0\x48\xb5\x61\x69\x28\x31\x96\x8c\x58\x35\xbe\x1e\x52\xc3\xaf\x7a\x90\x76\x08\x6c\x69\x8e\x49\x62\xf5\x35\x2d\x95\x89\xf9\xd6\x1e\xc2\xe0\x69\x40\x3a\x66\xf4\xd6\x86\x88\x3c\x28\x6c\xc7\xe9\x9f\x71\x33\x46\xa4\x33\x00\xa3\x7e\x97\x21\x08\x0f\x21\x26\xed\x69\xfb\xc9\x0b\x39\x2d\x49\x4c\x7a\x9e\x99\x88\x64\xe2\xf4\x04\x32\x3d\xcf\xad\xfe\x52\x2a\xa8\xe9\x55\x28\xd7\xe9\xe2\x7b\xd6\xff\x2e\x9d\xd3\x7f\x11\x05\x7b\x01\x43\x0f\x92\xb4\x14\x15\xaf\xac\xda\xd6\xdb\x3e\xa2\x1d\xbc\x58\x72\x4f\xee\xb4\xb2\x3b\x63\x44\x54\xf4\x65\x48\xcf\xbd\xb3\xcf\x12\x92\xfb\x13\x44\x4d\x5f\x26\xc0\x07\xd5\x2a\x41\xf5\x74\xc3\xa7\x24\x90\x30\xe5\x3a\x48\xb3\xf5\x14\x2e\xdf\xa6\xf9\xbc\x9c\xec\x72\x27\x49\x34\xd0\x53\x75\x16\x3b\x0f\x29\x77\xe5\x4b\xd5\xeb\x39\x6f\x83\x15\x56\x67\x6e\x72\xd5\x1c\x25\x35\x32\x9b\x07\x35\xc5\xb1\x6a\xc7\x72\x94\x1a\xc9\xb5\x07\x87\xd3\xd4\x42\x2d\x24\xb3\xd4\x76\x55\x7c\x56\x43\x10\x8e\x19\x2b\x41\xf3\xb1\xd0\x6e\xc0\x2e\xd2\x6e\x9e\x25\x77\x1b\x92\x0b\x06\x3f\xa6\x78\xc0\x58\xe6\xd1\xef\x77\x83\x56\xf0\x6c\xc9\xc1\x50\x16\x11\xd6\x03\x92\x6b\x4c\x59\x65\x30\xca\xa8\xa0\xb8\x56\x5f\x20\xa9\x53\x54\xe9\xa9\xec\x93\xfb\xe5\x15\x41\xa4\xa7\xeb\xf4\xa3\x64\xf9\x9b\x52\x5f\xe1\xa6\x07\xb3\xc2\x26\x5f\x2c\xb4\xfb\x97\x9b\x49\x0a\xd7\x42\x93\x0d\x94\x80\x98\x1b\xcf\x64\x17\x3a\xce\x74\x80\x3b\x97\xda\x88\xe6\x8b\x7d\x5a\x7f\x49\x1d\x8a\xb2\x9e\x3a\xd0\x99\x4f\x1d\x0b\xe0\x04\xf8\xa9\x9f\xf3\xb0\x81\x8c\x4d\x91\x46\x20\x75\x57\x39\x66\xac\x1f\xe3\xad\x27\xf7\x09\x2a\x28\xc0\x78\x43\x1d\x18\x86\x51\x03\x76\x00\x21\xf3\x49\xd3\xcf\x4f\xd5\x3b\x94\xf8\xf8\x3c\xbd\x42\x11\xd6\x60\xe0\x26\xbc\x9f\xac\xd5\xef\xc1\x0f\x50\xde\xcb\x58\xf3\x7c\x38\x9c\xee\x0f\x6b\xb9\xc6\x79\x5c\xdb\xd6\x03\x95\xa4\xc3\xb4\x2a\xbd\x16\x3a\x1c\x1e\x3f\xfe\xfb\xf6\x3f\xfe\xf6\x75\x2c\xff\xff\x7c\xfb\x37\x3b\xbe\xcc\xef\x6f\xc6\xfe\x64\xf5\xbe\xd9\x7d\xbc\x1c\xb7\x3b\xbd\x61\xa0\x7a\x4d\xab\xec\x9e\x0e\x87\xc3\xe1\x3d\x7e\xfc\x3c\xec\x8e\xcf\x2f\x87\x5d\xfc\x31\x23\x3f\x8e\xcf\x2f\x3f\xbe\x9d\xb2\xcc\x4d\x30\x7d\x30\x70\x1f\xf6\xcd\xee\x47\x79\x71\x45\x1f\x30\x92\x90\xbf\x2a\x28\xbf\xa6\x6a\x3e\x8e\x0f\xf3\x82\xfd\xbd\xd7\x4b\xc7\xe7\x7f\x3c\x7d\xfc\xfc\x7d\x7c\x7f\x79\xfe\xcf\xe3\x7c\x73\x43\x57\x7f\xa3\x1c\xf3\xfe\xd9\xa9\x00\x79\x70\xb3\xab\xe6\xbd\xde\x1b\xbd\x6f\x76\x7f\xbc\x36\xaf\xb1\x79\xfd\xe3\x75\xf7\xf0\xff\x00\x00\x00\xff\xff\xa1\x09\x81\xbe\x9c\x13\x00\x00" func runtimeSyntaxNginxYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxNginxYaml, "runtime/syntax/nginx.yaml", ) } func runtimeSyntaxNginxYaml() (*asset, error) { bytes, err := runtimeSyntaxNginxYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/nginx.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxNimHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xcb\xcc\xe5\x8a\xd1\xcb\xcb\xcc\x2d\xb6\x57\xa9\xc9\xcb\xcc\xd5\x4b\x4e\x4b\xe7\xe2\x02\x04\x00\x00\xff\xff\x67\xcb\xff\x4d\x16\x00\x00\x00" func runtimeSyntaxNimHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxNimHdr, "runtime/syntax/nim.hdr", ) } func runtimeSyntaxNimHdr() (*asset, error) { bytes, err := runtimeSyntaxNimHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/nim.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxNimYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x56\x7b\x6f\x1c\x35\x10\xff\x3f\x9f\xe2\xb8\x16\x72\x97\x90\xa3\x49\xab\x50\x8e\x47\x28\x6d\x82\x2a\x01\x95\x48\x91\x22\xd6\xdb\x32\x6b\xcf\xde\xba\xf1\x63\xf1\x23\xc9\xb5\x53\x3e\x3b\x1a\xef\xde\x25\xa0\x22\x1a\x29\x63\xcf\x63\x6d\xcf\x6f\x7e\x33\xba\x56\x1b\x4c\xeb\x1e\x97\x13\xa7\xed\xce\x8e\xc2\x84\x32\x2d\x27\x3b\x93\xc9\x64\xc2\x3e\x07\x16\x97\x93\xa9\x10\x0b\xa7\x6d\x3c\xb9\x4f\x4e\xdb\x85\x6c\x57\xd3\x9d\x9d\x90\x0d\xc6\x65\x89\x3c\x98\xf4\x01\xfb\xe0\xe5\x72\x32\xad\x84\x78\x27\x04\xd5\x42\x34\x33\x48\xde\x92\xd1\x89\xe2\xda\x92\x56\xe8\x12\x49\x30\x86\xcc\x15\x98\x8c\x14\xb5\x42\x6c\x5b\x94\x89\x9c\xbf\xa3\xf4\x10\xc0\xd2\x0a\x1d\x06\x2d\x07\xc5\x7a\x95\x0d\x12\x3f\x95\x0c\x26\xba\x82\x40\xd2\xbb\x98\x28\x60\xcc\x26\x11\xdf\x4e\x16\x53\xe7\x15\xe9\x84\x01\x92\x2f\x11\x57\x18\x12\x06\xb2\x20\x83\xa7\x84\xb6\x37\x90\x90\x5a\x8d\x46\x11\xba\x6c\x87\x5d\xeb\x03\x9f\x68\xa0\x41\x43\xee\xb2\x82\x83\xb7\x4f\x0e\x7e\xaf\xf7\x09\x8c\x86\x48\xce\x97\x75\x2e\x44\x53\x09\xf1\x9e\xd3\x9b\x8e\x89\xc7\x04\x09\x2d\xba\x54\x50\x6a\x66\xa0\x54\x20\x70\x8a\x20\x12\x44\x4b\x0c\x81\x96\xd4\x68\xa7\xa8\x31\x5e\x5e\x52\x13\x10\x2e\x49\x42\x44\x16\x89\x1f\x29\xb1\x4f\x63\x3a\xd2\xbb\xa4\x5d\xc6\x3b\x6f\x57\xd8\xb2\xd4\x51\x42\x50\xbc\x26\xed\x64\x22\xa5\xaf\x48\x79\x42\xa3\x5b\x42\x13\x91\xd0\x0d\x29\x11\xde\x94\x03\xf1\xa6\xf7\x21\x51\xab\x1d\x18\xb3\xe6\x1c\xa9\x0d\xde\x52\x9b\x9d\xdc\xa0\x4b\xba\x25\x6d\x4b\x9c\x76\xa4\x9d\x34\x59\x21\x69\x97\x30\xb4\x20\x91\x74\x24\x1d\x9d\x4f\xb7\x98\x32\xfa\x03\x9a\x23\xda\x56\xdf\x68\xc7\x05\x22\xa7\x0d\x71\xac\xf3\x49\x3b\xf2\xcd\x1b\x2e\xa6\x6f\xc9\x07\xf2\x79\x2c\x51\x9f\x02\x05\xd0\x11\x29\x60\x4b\x01\x53\x0e\x8e\x62\x67\x28\x76\x81\x18\x4c\x2d\x6f\xcb\x94\xc2\x9a\x52\xee\x37\x85\xcf\x51\xbb\x55\x29\xfd\x75\x87\x8e\xae\x3b\x6d\x90\xae\x75\xea\x8a\xe0\x2b\x6e\x7c\xa0\x35\x57\x94\x4b\xf5\x5f\x25\x52\xd8\x07\x94\x90\x50\x91\xf3\xe7\x5a\xe1\xe9\x40\xbb\x52\x80\x90\x25\x67\xa9\x70\xbb\xf5\x57\x18\x82\x56\x58\xde\x3f\xf0\xce\xf6\xda\xe0\x4b\x6d\x91\x9c\xff\x75\x48\x01\xe4\x5a\x1a\x2d\x07\xb4\x29\x76\x60\x8c\xbf\xa6\x3e\x07\x64\x1a\xfc\xe2\xcf\x13\xc8\xcb\xb3\x00\x16\x09\x43\xe0\x52\x40\x02\x43\xd7\x10\x1c\x27\xd5\x69\x97\xc8\x68\x87\x45\x40\x38\x97\xe0\x4e\x9d\x2a\x77\xe5\x84\xea\x47\x9f\x3c\x65\x17\xbc\x31\xa4\xad\x45\xa5\x19\x1f\xd9\xa1\xbc\x8c\xd4\xf8\xec\x54\x7c\x3a\x28\xfc\xdc\xd6\xf8\xeb\x51\x75\xda\x8c\x3b\x88\x11\x03\x03\xec\x5d\xdc\xdc\x1b\xcb\xc5\x91\x7c\x9f\xb4\xd5\x6f\x8b\x93\x7a\x48\x09\x83\x8b\xa5\x57\x99\x86\xd4\xe7\xd8\x51\xef\x7b\x5a\x19\xdf\x80\xa1\x3e\xc0\xca\x02\x13\x0c\x83\x66\x64\xc1\x50\xa3\x53\xd4\x6f\x91\xae\xbc\x81\xc4\x85\x71\xfe\x19\x4a\x43\x1d\x82\xc2\xc0\xd4\xf2\xb6\x37\x98\xf0\xbc\x00\xbb\x41\x91\xf3\xbd\xa4\x1e\x62\x7c\x5a\xe4\x4f\x84\x56\xa7\x91\x93\x72\xb3\xf6\xfd\xb8\xf3\xcd\x1b\x49\xd2\x2b\x5c\xa1\x2b\xc7\x6b\xc7\x2c\x3b\x4f\x96\x09\x9c\x14\xb6\x8c\x61\x4c\x61\xdc\x5d\x41\x80\xb0\x8a\x63\x2f\x48\xc2\x1b\x4e\x8d\x9a\xb5\xf4\xfd\x9a\x9a\x35\x93\x30\xbb\x21\x6b\x79\x89\x8a\xb2\x2b\xa0\xa2\x22\xb5\x76\x46\x37\x24\x15\x5f\x93\xba\x80\xa0\x68\x25\x23\xb4\x38\x6a\xcc\x85\x55\xe6\x9e\xe4\xbe\x8e\x77\x79\xf1\x0f\xfa\xad\x6d\xe3\xcd\xc2\xf7\x43\x03\xf1\x88\xfc\x56\x88\x7d\x21\x0e\x84\xd8\xfb\xe2\x9b\xef\xbe\x17\xe2\xfe\x5f\x9f\x7d\x2a\x04\x7d\x22\xc4\x89\x10\xaf\x84\x58\x2c\x85\x10\xa2\xde\xdf\x1e\xd1\xa3\xd4\x60\x0a\x7f\xdf\x09\xb1\x20\x21\x16\x42\xbc\x27\x21\xaa\xad\x56\x93\x10\xb3\xad\x36\xa7\xaf\xe9\x73\xfa\xe3\xc3\x2d\xb0\x10\x62\xb1\xf1\x0c\xc3\xbf\xf4\x05\x53\x50\xb2\xd0\x2e\x3d\x66\x71\x78\xcc\xf2\xe1\x11\xcb\xe3\x47\x94\xd9\x97\x8b\x33\x0f\xde\x3c\xb8\xf3\xe0\x6f\x8d\x87\x34\xc8\x87\x47\xc3\x7a\xfc\x88\x1a\xef\x0d\xc9\x0e\xc2\x30\x9b\x62\x0a\xcc\x77\x39\xae\x10\x02\xac\xc9\xf7\xe8\x86\x5d\xc4\x3f\xb7\x35\x1b\x3a\x7f\x1c\x23\x91\x87\xbe\xd7\x8a\x20\x27\x4f\x32\x76\x3c\xb2\x02\xb8\x15\x96\xb1\xf3\x92\xb2\xe3\x54\x54\x99\x14\x0a\xa3\xbc\x5b\x82\x31\xc9\xdd\x4a\x3f\xaf\x67\x8f\xe9\xf0\x98\x1e\x1e\xd1\xf1\xa3\xf9\x89\x10\x0d\xed\x56\xf9\xb7\x0f\x59\xdb\xb3\x7a\x56\x0c\x74\x78\xf4\x78\x63\x54\xcf\xea\x3b\xe7\x96\x89\x01\x2e\x2d\x5c\xb6\x0d\x86\x01\xc7\xea\xc1\xc1\x57\xf5\xfe\xff\x45\x3d\xa8\x6e\x2e\x6a\x0e\x7d\x72\x70\x06\x07\x6d\xd9\xbe\x1e\xf7\x1f\xf1\xb1\x97\x4f\xf9\x93\x2f\x8b\x78\xfd\x31\x5f\x34\x3f\xd4\xd5\x83\x43\xfe\xff\x88\xf0\xf2\x9a\x7a\xc6\x7c\x3a\x99\x0f\xca\xfe\xfc\xa4\xc2\xd3\xba\x62\xe2\x96\xd7\xd6\xa3\xfd\x43\x67\x0d\xd5\xe5\xb3\xa6\x33\xa6\xf2\x82\xaa\x57\x62\x5a\xcf\xf7\xc4\x94\x76\xb7\x96\xdd\x7a\xbe\xb7\x7b\xfb\xad\x1d\x09\x5a\x55\xcb\xd8\x83\xc4\x65\x5d\xef\xdd\x5b\xec\xdd\xff\x77\x44\x51\xf9\x2f\x26\x08\x03\xa3\xef\x09\x51\x4d\xb7\x76\x74\xaa\x58\x6b\x21\xee\xdd\x5a\x87\xdf\x2b\x93\xaa\xde\xd9\xb0\xc2\x2b\xbf\x9c\x4c\x67\x2f\x5f\x3c\x7b\x41\x67\xcf\x2f\x7e\x3e\xa5\x8b\x8b\x8b\xf9\xf2\x64\xba\xf3\x77\x00\x00\x00\xff\xff\x10\x81\x77\x65\x17\x09\x00\x00" func runtimeSyntaxNimYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxNimYaml, "runtime/syntax/nim.yaml", ) } func runtimeSyntaxNimYaml() (*asset, error) { bytes, err := runtimeSyntaxNimYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/nim.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxObjcHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4f\xca\x4a\x4d\x2e\xc9\x2c\x4b\xd5\x4d\xe6\x8a\xd1\xd3\xc8\xad\xc9\xcd\xad\xc9\xd0\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\x6c\x8c\xff\xf1\x19\x00\x00\x00" func runtimeSyntaxObjcHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxObjcHdr, "runtime/syntax/objc.hdr", ) } func runtimeSyntaxObjcHdr() (*asset, error) { bytes, err := runtimeSyntaxObjcHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/objc.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxObjcYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x55\x6f\x6f\xdb\xb6\x13\x7e\x9f\x4f\xe1\x9f\x9a\xdf\x2a\xba\xb3\xd3\xfd\x41\xb1\x7a\x5d\x9c\xb4\x4b\x86\x02\x69\x32\x2c\x2d\x90\x55\x74\x05\x8a\x3c\xd9\x5c\x28\x52\x23\x8f\x49\x9d\x5d\xbf\xfb\x40\xd9\x4e\xec\xe6\xcf\x0a\x0c\x98\x5e\x58\xe2\xe9\xb9\xbb\x47\x77\xcf\x9d\x6b\x6d\x00\xe7\x2d\x8c\x7a\xae\xfa\x03\x24\xea\x0b\x18\xc8\xad\x2d\x05\x08\x12\x47\x5b\xbd\x5e\xaf\x97\x20\x56\x34\x30\xea\x65\x9c\x0f\xf3\x86\x9a\x86\x66\x6c\x3b\xdb\xda\xf2\xd1\x40\x58\x80\x06\xbd\x45\x94\x8c\xf3\x2a\xaf\x8d\x13\x48\xca\xc5\xca\x00\xbd\xfa\xe5\xb0\x3b\x6a\x45\x95\x73\x86\x5e\x9e\x9c\x1c\xd1\x4b\xe7\x0c\x08\x4b\x72\x26\x3c\x69\x8b\x14\x66\xce\x23\x19\x67\xa7\x14\xf4\x15\xb8\x9a\xc0\xc6\x86\x2e\x9c\x56\x14\x50\xa0\x96\x24\x9d\x0d\x48\x01\x7d\x94\x48\xd1\x6a\x67\x29\xe5\x54\x50\x13\x7c\x44\xf0\x96\xf2\x68\xd9\x38\xe8\xa9\x05\x45\xda\x1a\x6d\x81\x5e\x19\x11\x02\x9d\x1e\x1c\xd1\xeb\x37\xbf\xd2\xf1\x69\xfe\x8e\x8d\x5f\x5b\x84\x29\x78\xc6\x79\x95\xdd\x26\x9f\x87\x71\x62\xc0\x28\xcf\x63\x39\x66\x63\x6d\x31\xff\x81\xbe\x79\x46\xdf\x7d\x4b\xcf\xbe\xa7\x16\x3d\x63\xac\xc4\x3b\x9d\x8b\xfd\xc1\xfb\xc9\xe2\xa7\x18\x09\x63\x63\x33\x9a\x4c\xfa\xf7\x42\xc5\xe0\xea\xe9\xe0\x79\x39\xe9\xdf\x13\x4e\xe9\xd0\x0a\x94\xb3\xb2\x10\x83\xab\xfd\xc1\xfb\x0d\xf0\x12\x9d\x8a\x03\x0d\x58\x1c\xf5\xb2\xbc\x2c\x05\xa2\xd7\x55\x44\x28\xcb\xa2\x18\x85\x56\x48\x58\x50\xc8\x39\xcf\x8b\x0f\x2c\x3d\x32\xce\x19\x95\x65\x2e\xcc\xa2\x54\x22\x34\x54\x45\x6d\x50\x5b\x9a\x69\xa5\xc0\xae\xaa\xd7\x0a\x79\x0e\x8a\x3c\x04\xf4\x5a\x22\x85\xa4\x90\x65\xdd\x5d\x4d\x97\x20\xce\x59\x59\x52\x59\x46\x1b\x03\x28\x2a\x8f\x9d\xb5\xd1\x18\x2a\x8f\xa3\x31\x22\xb5\xbf\x2c\x2b\xe3\xe4\x79\xba\x2f\x52\x0c\xfb\x2c\xbb\x83\x7b\x2a\xbd\xec\x9a\x95\xb4\xd6\x11\x27\x84\xa6\x35\x02\x81\xda\x58\x19\x2d\xa9\xf5\x2e\xc9\x12\x14\xb5\x5e\x5f\xa4\x17\x89\x48\xc2\x13\xce\x74\xa0\xda\x6b\xb0\x8a\x2e\xb4\xc7\x28\x0c\xc5\xa0\xed\x94\x9a\x88\x1d\x91\x0b\x67\x04\x6a\x03\xe4\x61\xaa\x03\x82\x27\xf8\xd8\x1a\x2d\x35\xae\x0b\xe1\x73\x4a\xb5\xf3\xa4\x6b\xba\x9c\x25\x4f\xe5\x08\x4c\x00\x92\x22\x00\x29\xa8\x45\x34\x48\xe1\x52\xa3\x9c\x3d\x14\x03\xfd\x9c\x70\xe6\xdd\x25\xc9\xd4\x4d\x72\x2d\x78\x81\xce\x93\x85\x4b\x52\x60\x00\xe1\x21\xf7\xa9\x43\x97\xc4\x8f\xda\x46\xa0\xca\x83\x38\x27\x0f\x18\xbd\x7d\xc8\xcb\x3a\x2b\xd0\x35\x5a\xd2\xf2\xe6\x41\x28\x67\xcd\xbc\x7b\xb8\xf4\x1a\x21\xcd\x52\x1a\xb8\xd4\x46\x12\x21\x0d\xce\x7d\x11\xf7\x72\xb0\xd2\x29\xa0\x54\x5f\x6d\x11\x7c\x9d\x1a\xa4\x9b\xd6\x74\x10\xd1\xc9\x62\xd1\xbf\x00\x06\x64\xfa\xbc\xd4\x2e\x27\x9d\xa1\x30\xb7\x72\xe6\x9d\xd5\x57\xa0\x28\x55\x63\x51\x87\x5a\x5b\x61\xcc\x3c\xe1\x5a\xf0\x38\x27\xd7\xa6\x30\xc2\x90\x87\x3f\xa3\xf6\x69\x8a\x9b\x36\xed\x05\x11\xd1\x79\x30\x20\x02\xb4\xce\x19\x76\xad\xfe\xd6\x43\xeb\x9d\x1c\xf5\xb2\x0f\xeb\x72\x7f\xb4\x7e\xc8\x15\xd4\x49\xcc\xda\x4a\x13\x15\xac\x62\xe6\xd1\x92\xae\xed\x98\x75\x0b\xc4\x2a\x5d\x13\x98\x5c\xd7\x14\x80\x75\x2d\x17\xde\x26\xfd\x80\xf7\xdd\xb7\x88\x69\x23\xd8\xb0\xbf\x9d\xdd\x4a\x5d\x96\xc5\xcd\x70\x96\x37\x93\xd9\x82\xd4\xc2\x7c\xce\xad\x78\x44\x7b\x93\x0d\x7e\x4b\x42\x4b\x7e\x6c\x03\xcc\x33\x7a\x31\x19\xf6\x39\xdf\x19\x17\xbb\xc4\xb3\x0d\xcf\xed\xbb\xb7\x40\x31\x1c\xfd\xf8\xf5\x93\x3e\xfd\xf4\x3f\xce\xff\xcf\x79\xc1\xf9\x64\x42\x2f\x68\x97\x76\x68\x40\x5f\xdd\x14\xaf\x5b\xa8\xc2\xe2\xd0\xc6\xa6\x02\x9f\x5c\x93\x72\x06\x63\x36\x2e\x9e\x0e\x9e\x4f\x9e\x70\x5e\x11\xe7\x15\xe7\xab\xe3\x70\xc3\xfe\xf4\x63\x3a\xee\x0f\x0e\x3b\xcb\xf5\x54\xaf\xc2\xa6\x78\x7b\x9c\x17\x39\xe7\x9c\x0f\xa9\xf8\x90\x78\xb0\x3e\xe7\x13\xda\xe3\xfc\xaf\x35\xf3\xa7\xce\xfc\x29\x99\xf3\x35\x33\xeb\xcc\xec\xae\xc0\x9c\x57\x2f\x16\xc8\x04\xdc\xed\x80\xbb\x6b\xda\xdd\x84\xe6\x56\x1b\x3a\x7e\x77\x74\x44\xbf\x1f\x9c\xd2\xf1\x09\xbd\xfd\xed\xdd\x01\xa1\x8f\x40\x87\xfb\x47\xa7\x07\x54\x8b\x34\xd6\x01\x4c\xcd\xee\x0d\x72\xbe\x5a\xe9\x9b\x1b\xfd\xba\x88\x69\x45\xda\xe9\xa8\x97\x3d\x1e\x3e\xbe\x5d\xe2\xe5\xdb\xce\x9c\xae\x80\xc2\x77\x83\xc5\xb3\xec\xda\x08\x56\xa5\x5c\x6b\x96\x70\xae\xdb\x2e\x3d\xe7\xc3\x1b\xeb\xda\xff\xee\xea\x5a\x4f\xb5\xd0\xdd\xab\x99\xf0\x37\xae\x5f\xca\xe7\xbf\xa6\xd3\x74\xa2\xbd\x45\x63\x67\xe7\x73\x1a\xdb\xff\x90\x0f\x9d\x72\x49\x71\x6f\x4f\x7e\x3e\xa1\xb3\xb3\x33\x3a\x7c\x7d\xf6\xe6\x80\x8d\xc6\x5f\x90\x8c\xf3\xfe\xad\xaf\xe6\xfd\x9d\x7f\x91\xf1\xef\x00\x00\x00\xff\xff\x7d\xdf\x5a\xbd\x57\x09\x00\x00" func runtimeSyntaxObjcYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxObjcYaml, "runtime/syntax/objc.yaml", ) } func runtimeSyntaxObjcYaml() (*asset, error) { bytes, err := runtimeSyntaxObjcYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/objc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxOcamlHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4f\x4e\xcc\xcd\xe1\x8a\xd1\xcb\xcd\xc9\xb4\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\x01\xe7\x74\xed\x0f\x00\x00\x00" func runtimeSyntaxOcamlHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxOcamlHdr, "runtime/syntax/ocaml.hdr", ) } func runtimeSyntaxOcamlHdr() (*asset, error) { bytes, err := runtimeSyntaxOcamlHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ocaml.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxOcamlYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x93\xcd\x6e\xdb\x3a\x10\x85\xf7\x7e\x0a\xc2\xf7\x5e\xe4\x07\x57\x69\x90\x16\x68\xe3\x4d\x11\x14\xe8\x1b\x74\x53\xd3\x28\x46\xe4\x28\x9a\x96\x1a\x0a\xe4\xc8\x76\x92\xf1\xbb\x17\x92\xa3\x54\xce\x1f\xda\x75\xbd\x31\x79\x34\x73\xce\xf0\x23\x58\x51\x40\xb9\x69\x71\x61\xa2\x83\x26\xcc\x66\x1e\x05\x9d\x2c\x66\xc6\x18\xd3\x7f\x64\x68\x70\x61\xe6\xd6\x9e\x35\x81\x3e\xfe\x3b\x9f\xcd\x52\x17\x30\xef\x0b\x0a\x43\x1e\x59\xa8\x22\x4c\x43\x51\xb9\xbc\x2a\xbe\xae\x96\xe7\xc5\x25\x14\xb7\xdf\x56\x77\x17\xff\xef\xac\x2d\xe7\x43\xb1\x31\xff\x78\x74\x01\x12\x08\x45\xce\xf7\x06\x59\x40\xb0\x41\x96\x7d\xff\x71\x40\xd1\x35\x04\x6d\x50\xea\xe8\x95\x58\x81\xbd\x26\x74\xda\x26\x5a\x83\xa0\xae\x29\x49\x07\x41\x5d\xe4\x2c\x09\x88\xe5\x64\x9a\x91\x25\x75\x4e\xba\x84\x86\x04\x9b\x31\x66\x7f\xc6\x21\xa1\x5f\x6a\x6c\x91\xd5\x05\xc8\x59\x9b\xe8\xbb\x80\x8a\x5b\x87\x6d\x3f\x99\xe2\x56\x30\x31\x84\x03\xdb\x16\xa4\x57\x5f\x1a\xbb\xea\x58\xab\x8e\xdd\x60\x30\x2c\x62\xd2\x06\xc4\xd5\x2a\xe9\x46\x37\x24\xf5\xb3\x76\x45\x13\xfd\x80\xef\x25\x63\xc8\xba\xa9\x91\x35\x56\x43\xbf\x19\x0d\x5c\x64\x4f\xaf\x81\xa4\x4a\xa5\x6f\xc4\x90\xf1\x20\xba\x0c\xd1\x3d\x83\xa5\xc4\x6b\x62\x45\xf6\x1a\xcb\xef\xe8\x44\xf7\x20\x35\xd3\xb5\x56\x31\xe9\xa6\xa6\x80\xea\xa3\xfa\xc8\xa8\xd2\xff\x6f\x58\xe2\x81\xf5\x70\x25\xc0\x82\xa3\xff\x28\x9c\x95\x31\x86\x91\x7f\xea\x50\x2b\x78\x3c\xd6\xfe\x1a\xf2\x9b\xe1\x52\x1e\x0c\x72\x8b\x8e\x60\x6c\x25\x76\xa1\xf3\xa8\xc4\x35\x26\x12\x25\x26\x21\x08\x74\x8b\xe9\xc0\x0b\xb7\x6d\x32\x4f\xc8\x1e\x58\x31\x6e\x34\x61\xa5\x4d\x27\x50\x06\xd4\x00\xb7\x37\xda\x27\x27\xd1\x04\x34\x1d\x6e\x72\x8c\x2c\x89\xf8\x7a\x71\x9f\x63\x7a\xe8\xa9\x07\x7e\x34\x7f\x90\x90\xfd\xa1\x90\x7f\x50\x3b\x84\x5a\x7b\xf6\x4b\x9d\xbc\xa2\xf1\x37\xcd\xd9\xcf\xfa\xa9\x86\xfe\x5d\xfd\x37\xe9\x7b\xb5\xb0\xcf\x58\x42\x59\x71\x92\xf5\x91\xb5\x76\x10\x56\x7f\xd0\x7c\xbc\x3c\x2f\xde\xaf\xee\xde\xee\x74\xbb\xbc\x2a\x3e\x43\x51\x9d\x17\x97\xab\xbb\x8b\x9d\x76\xd3\xfd\xbb\x9d\x7e\x99\xee\x3f\xec\x4e\x7e\x1b\x95\x9d\x3f\x66\x35\x55\xfe\x36\x58\xcd\xf0\x62\x9f\x42\xb2\xc7\xd6\x9e\x3e\x01\x65\x4f\xad\x3d\x79\x8c\xc5\x2c\x57\xb3\x9f\x01\x00\x00\xff\xff\xe2\xce\x5b\x59\xc7\x05\x00\x00" func runtimeSyntaxOcamlYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxOcamlYaml, "runtime/syntax/ocaml.yaml", ) } func runtimeSyntaxOcamlYaml() (*asset, error) { bytes, err := runtimeSyntaxOcamlYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ocaml.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxOctaveHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4f\x2e\x49\x2c\x4b\xe5\x8a\xd1\xcb\x55\xe1\xe2\x02\x04\x00\x00\xff\xff\x7f\x6b\xa8\x5f\x0d\x00\x00\x00" func runtimeSyntaxOctaveHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxOctaveHdr, "runtime/syntax/octave.hdr", ) } func runtimeSyntaxOctaveHdr() (*asset, error) { bytes, err := runtimeSyntaxOctaveHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/octave.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxOctaveYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x56\xdf\x6f\xdb\x36\x10\x7e\xd7\x5f\x71\x93\x9b\x25\x6e\x26\x29\xed\x0a\x6c\x13\xd6\x15\x5d\xb6\x00\x79\x68\x02\xac\x1b\x10\x20\xf2\x02\x8a\x3a\x59\x44\x28\x52\x20\x4f\x51\xbc\xd0\xfb\xdb\x07\x4a\xb2\x13\xbb\x9d\x9b\x6c\xd8\x80\xea\x45\xe4\xfd\xf8\x3e\xf2\xbb\xf3\x59\x13\xf8\x05\x4b\x34\xa8\x38\xda\x60\x02\x15\x51\x63\xd3\x24\x99\x0b\xaa\xda\x3c\xe6\xba\x4e\xfe\x58\x60\x21\x0a\xc1\x92\x5a\x70\xa3\x93\x5c\xea\x3c\xa9\x99\x25\x34\x89\x69\x15\x89\x1a\x13\xbb\x50\xc4\x6e\x93\xb9\x8e\x17\xac\x96\x1f\x87\xb9\x11\x75\x64\xb9\x11\x0d\xd9\x44\x73\x62\x37\x18\x7b\x53\xb4\x01\x38\x02\xdd\xfb\x83\x49\x30\x81\x5f\xcf\x7f\x3a\x0f\x26\x20\x14\x97\x6d\x81\xa0\x95\x5c\x80\x42\x2c\xb0\x00\xdd\xa0\x61\xa4\x8d\x3f\x7b\x1c\xc7\x50\x89\x79\x25\xc5\xbc\x22\xa1\xe6\xc1\x04\xf2\x56\x48\x8a\x84\x82\xb2\x55\x9c\x84\x56\x1b\x01\x6f\xfc\x49\x57\x7b\xc0\xc6\x26\x8d\x48\x10\x90\x78\x0c\xcc\xae\x73\x2c\x74\x15\x2a\x28\xb5\x94\xba\xc3\x02\xf2\x05\x1c\x4c\x83\x09\x74\x15\x23\x60\x06\xc1\x5e\x8b\x06\x98\x2a\x00\x8d\xd1\x06\x4a\x81\xb2\xb0\x20\x14\x58\x32\x42\xcd\xad\xe7\xa9\x5b\x49\x42\x0a\x85\xc0\x75\x5d\xa3\x22\x0b\x4a\x13\x74\xda\x5c\xfb\xa3\x06\xa5\x90\x48\x8b\x06\x53\x18\x2e\x1f\x04\x05\x12\x72\x4a\x03\x00\x00\xef\x55\xac\xc6\x14\xc2\x2c\x8b\xeb\x67\x61\x10\x98\x56\xa2\x1d\xbc\x13\x78\x4f\x8c\x70\x40\x5d\x49\xdf\x75\x5d\x3c\x57\x6d\xac\xcd\x3c\xb1\xba\xa4\x8e\x19\x1c\x85\x4d\x0a\xcd\x93\x9b\x57\xf1\x51\x7c\x94\xdc\x67\xc6\x15\xd5\xb2\xc7\x8b\xc0\xae\xac\x3d\x61\x7e\xb0\x92\xc2\xa1\x2a\xd6\x6b\x83\xd4\x9a\xde\xe4\xe6\x52\xe7\x4c\xba\x06\x8d\x15\x96\x50\xd1\x34\xcb\xf2\xf0\x6f\xc0\x44\xe9\x50\x5a\x1c\x5f\x3e\x5f\x94\xce\x76\x82\x78\xe5\x38\xb3\xe8\x34\x55\x68\x3a\x31\xf8\x06\xc7\x2e\xbc\xae\x12\xb2\x0f\x1d\x16\x85\x76\xbe\x2d\xa5\x2b\xb5\xe9\xcf\xab\x8d\x6b\x98\x19\x77\xe3\x2a\x37\xc8\xae\x1d\xd7\x8a\x84\x6a\x71\x17\x7a\xab\x3a\xa1\x8a\xab\xc6\x68\x5f\x0e\xb7\xb9\xbd\xe2\x12\x99\x6a\x1b\x8f\x7c\xb5\x15\x49\x66\xe1\x38\xf3\x97\xf2\x4e\x32\x8b\xab\x7e\x37\x70\x8d\x75\x3b\x5f\xb7\xef\x48\xbe\xa8\x73\x2d\xe3\x55\x57\xa7\x10\x5e\x46\x87\xc9\xf3\xd7\xdf\xff\xf0\xc5\x9f\x7b\x5f\xba\xdf\x67\x2e\x7d\xbd\x4e\xfe\xd1\x30\x7e\x8d\xb4\x95\x9b\x8f\xd6\x14\xc2\x83\x2c\xbb\x73\x59\xb6\x9c\x86\xbb\x42\x0e\x5c\x96\x4d\x77\x87\x5c\xba\x2c\x9b\x4d\xd7\xc4\xc7\xba\xae\xd9\x26\x6d\x0a\xe1\x57\x6b\xff\x59\x5b\xe7\x68\x9e\xd8\x8a\x2f\x92\x77\x8c\x2a\xac\x19\x09\xce\x64\x74\xac\x95\x25\xb6\xd5\x96\x7c\x34\xc6\xaa\x67\x18\x2b\x74\x79\x14\x7d\x37\x3b\x74\x47\xb7\x7e\xc1\xa2\xf2\x6d\x74\x32\x7b\xee\x65\x76\xfb\xf1\x7e\xb8\x33\xb5\x11\x0e\xdd\xa9\x3b\x55\xa5\x3b\x63\x67\x0e\x1b\xeb\x0c\x32\x59\xb3\xdb\xe1\x2d\x54\x8f\x73\x2f\xb9\xd6\xbe\xe0\xdb\x98\xb9\xee\x15\xf0\x88\x64\x5a\x74\x25\x93\x16\x37\x0a\xfd\x7e\x98\x04\x4f\x95\x64\x4c\xfb\xa8\x06\xc3\x70\x19\x26\x80\x7f\x2c\x31\xd3\x37\x6d\x18\xae\x6d\xa8\x8a\x2d\x8b\x9f\x55\xfd\x51\xb3\x2c\xbe\xb7\x3e\x18\x26\xab\xe7\x21\x53\x83\x5c\x30\x79\x5c\x31\xaf\xdb\x5e\xf8\xb8\x38\x4f\x71\xc9\xf2\x52\x19\xba\xd9\xcf\xb2\xac\x37\xcc\x9e\x90\xec\x0b\xfb\xcd\xec\xee\xeb\xa5\xbb\xbd\x7c\x1b\x9d\xb0\xa8\xf4\x85\xbe\x7b\xb9\x74\xed\xc3\xfd\xab\xa5\xfb\xed\xe1\xfe\xdb\xe5\xaa\x53\x1f\x21\xd6\xfe\xb6\x56\xfb\xff\x48\xaa\x7e\xf0\xa7\x10\xc6\xf1\xe1\x23\x2f\xf8\xf9\xa8\x38\xfc\xde\x9f\xfa\xdf\xf2\x32\x7e\x91\xac\xf2\x36\xdb\xb7\xb7\x7d\x58\x89\xbd\xed\x4a\x3c\xfb\x84\xe6\xa4\x0b\xed\xc7\x93\xff\x3a\x70\x17\x17\x17\xee\xe4\xf4\xe2\xdd\xcf\xd3\xf4\x4d\xf8\x29\xaa\xc9\xff\x47\xb5\x77\xb7\xcd\xb5\xb7\xfc\xef\xee\xf5\x01\xd9\xe4\x5f\x90\xfd\x15\x00\x00\xff\xff\xc0\x0a\x9c\xc0\x1a\x0a\x00\x00" func runtimeSyntaxOctaveYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxOctaveYaml, "runtime/syntax/octave.yaml", ) } func runtimeSyntaxOctaveYaml() (*asset, error) { bytes, err := runtimeSyntaxOctaveYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/octave.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPascalHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x48\x2c\x4e\x4e\xcc\xe1\x8a\xd1\x2b\x48\x2c\x56\xe1\xe2\x02\x04\x00\x00\xff\xff\x90\x29\x8f\x39\x0f\x00\x00\x00" func runtimeSyntaxPascalHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPascalHdr, "runtime/syntax/pascal.hdr", ) } func runtimeSyntaxPascalHdr() (*asset, error) { bytes, err := runtimeSyntaxPascalHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/pascal.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPascalYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x54\x6d\x8b\x23\x37\x0c\xfe\x9e\x5f\x11\xd2\x85\x26\xb7\xcd\x5e\x0b\xa5\xd0\x7c\x09\xa5\xd0\x3f\x91\x49\x41\x63\x6b\x32\xea\x7a\xec\x41\x92\xf3\xd2\xd5\xfd\xf7\x62\xcf\xde\xbe\x24\xd0\x3d\x2e\x84\xb1\x2c\xcb\xf2\xf3\x3c\xb2\xdc\x51\x40\xbd\x8c\xb8\x99\x8f\x20\x0e\xc2\x6c\xe6\x51\xd1\xe9\x66\x36\x9f\xcf\xe7\x65\x35\xc2\x80\x9b\xf9\xa2\x69\x1e\x46\x90\xbb\xc5\x6c\xc6\x39\xa0\x4c\xeb\xeb\xf9\xb4\x77\xd1\x34\xed\x72\x4b\x9b\xa5\x28\x53\x3c\x18\x44\xa1\x67\xf3\x44\x1e\x9f\x4d\xe9\x13\xeb\xb3\xed\x7a\xe0\x1a\x56\x8d\x12\x54\x8d\x36\xa5\x80\x10\xad\xbd\x28\x4e\xf1\x14\xd5\x4e\x89\xbd\xc9\x00\x21\x94\x59\x48\xf1\x50\x3d\x0e\xd8\x53\x84\x50\x3d\x65\x85\xa2\xe2\x01\xb9\x8c\xbf\xfd\x6a\x42\xf1\x10\xd0\x5c\x66\xc6\xe8\x2e\xe6\x53\x6e\x03\x1a\x9e\x15\xa3\x47\xbf\x5a\x35\x4d\xbb\x78\xa6\x21\x0a\x8a\x03\x46\x7d\xc3\x05\xa2\x37\x90\xc1\x80\x19\x2e\xd6\xe2\x81\xa2\xb5\x8c\xf0\x68\x0e\x04\xcd\xa5\x28\x3a\x7d\x39\x3b\x4d\x5c\x6c\xa5\x98\xd1\x2a\xe3\xc9\xe7\xe9\x68\x3e\x99\x4f\xa7\xa8\xc9\x30\x08\x1a\x46\x6f\x45\x58\xeb\x12\x5b\x97\xa3\x53\x4a\xd1\x0e\x49\x93\x51\x67\x34\x8c\xa1\x22\x81\xea\xa6\xf2\x0f\x14\xb1\x92\xe3\x0e\x1c\x5a\x80\x16\x83\x0d\xc9\x5b\x4c\x6a\xa9\xfd\x07\x9d\x5a\xea\x2c\x45\x4b\x23\x32\x94\x73\x13\xdb\x08\xee\x11\xbd\x8d\x9c\x1c\xfa\xcc\x58\xac\x03\xc3\x60\x8c\xae\xc8\xc7\x38\x22\xa8\x31\x4a\xca\xec\x5e\x8a\x84\x6a\xd2\x07\x93\x9e\x4d\x7b\x8c\xa6\xc9\x4a\x91\x2d\x47\x52\xcb\x51\x29\x58\x16\x14\x3b\x96\xba\xf5\x85\xc7\x89\xb4\xb7\x73\xe2\x8f\x15\x15\x73\x01\x44\xcc\x93\x8c\xa9\x48\x71\x76\x38\xaa\xe1\x99\xca\x67\x2c\xd7\xc3\xba\x52\x52\xfa\x77\xa2\x5f\x27\xe1\x62\x14\x7b\x64\x52\xf4\x46\x91\x94\x5e\x03\x48\x2c\x50\xcb\xc0\x17\x8b\x78\xaa\x12\x64\x2d\x4c\x47\x64\xbd\x18\x03\x09\x9a\x60\xe8\x4c\x7b\x46\xf0\x05\xb5\xf2\xe5\x63\xa8\xad\xa4\x90\x15\x0d\x5a\x51\x06\xa7\x06\x81\x40\x0c\x44\x70\x68\x03\xb2\x39\x8f\x2e\x98\x1b\xc7\x3a\x7a\xec\x20\x87\xaf\x2c\xea\x25\xe3\x72\x35\xbb\xc4\x27\x60\x6f\x07\x8c\xc8\xe4\x8c\xa2\xc7\xb3\x85\xe4\x20\x58\xe9\x2c\x8b\x49\x14\xdc\x63\xc7\x65\x92\x82\xef\x46\xe7\x20\x04\x4b\x47\x64\x26\x8f\x36\xf5\xa5\x8d\x4c\x47\xd0\x5a\xc4\xd2\x9f\xa5\xb0\xb9\x0d\xe4\xa6\x41\x7a\x2c\x05\x85\xf2\x39\x90\x28\xb2\x31\x52\x54\x4e\x3e\x3b\x34\x81\x0e\x6b\x56\x49\x9d\x76\x21\x81\x9a\x8c\xe8\xaa\x8e\x68\xa2\xbe\x2e\x1e\x89\x35\x43\xb0\x53\x51\xfa\x9d\x42\xf5\x96\xc3\x3b\x81\x3a\x28\x77\x59\x39\xa3\x45\x0a\xef\xf5\x9c\x52\x4f\x4f\x44\xf9\x89\x02\x97\xbd\x20\xc3\xe2\xc5\x89\xd1\x6f\xe6\x0b\x8c\xfe\xd5\x35\xbd\x2c\xf3\xdd\xfe\xea\xd8\x87\x98\x87\x16\xb9\x9e\x7e\xb7\xfb\x79\xfd\xfb\x1f\xeb\xbf\x60\xdd\xed\xef\xaf\xf1\xbd\x0d\x6c\x77\xf7\xeb\xfd\xb6\x44\xef\xef\x97\xbb\x87\xaf\xe6\x6a\x5b\xe0\xe3\x9b\xc5\xd5\xf6\x26\xcd\xd4\x0b\xb7\x04\x7e\xa8\x3b\x9e\x7e\xf9\xe9\xcb\x35\x8f\xbb\x1b\x16\x2f\xf3\xeb\xdc\x93\x3a\x7f\xf6\x30\xe1\x6c\x9a\x87\x6f\x3e\xff\xc7\xeb\x63\xdf\x38\xe4\x91\xc6\xf7\x09\x5f\xc1\x7c\x07\x96\x91\xb1\xbc\x1c\xb7\x18\x9e\x9a\xe6\xee\x1a\xc6\x97\xff\xab\xe1\x50\x5b\xeb\x26\xcf\xe7\xcf\x1f\x6b\xf8\x71\x96\xa6\x59\x36\xcd\xa7\xeb\x4c\x4d\xf3\xa9\x69\x56\xdf\x91\x6e\xf9\xb4\x5a\x6e\x37\xbb\xbf\xef\xf6\xab\x6f\xe2\x38\xfb\x2f\x00\x00\xff\xff\x99\x9e\xdd\x36\x40\x07\x00\x00" func runtimeSyntaxPascalYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPascalYaml, "runtime/syntax/pascal.yaml", ) } func runtimeSyntaxPascalYaml() (*asset, error) { bytes, err := runtimeSyntaxPascalYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/pascal.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPatchHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x48\x2c\x49\xce\xe0\x8a\xd1\xd3\x00\x33\x6a\x52\x32\xd3\xd2\x34\x55\xb8\xb8\x00\x01\x00\x00\xff\xff\x44\x40\x08\x3d\x17\x00\x00\x00" func runtimeSyntaxPatchHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPatchHdr, "runtime/syntax/patch.hdr", ) } func runtimeSyntaxPatchHdr() (*asset, error) { bytes, err := runtimeSyntaxPatchHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/patch.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPatchYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\xce\x4d\x0a\xc3\x20\x10\x86\xe1\xbd\xa7\x18\xa4\x8b\xfe\x60\x0e\xe0\x2a\x07\x91\x80\x89\xa3\x11\x8c\x0d\x76\x42\x09\xf4\xf0\x65\x92\x16\x43\xc0\xd5\xfb\x7c\xa2\x3e\x26\xa4\x75\x46\x0d\xb3\xa5\x61\x14\xc2\x21\xe1\x40\x1a\x04\x00\x00\x6b\xb6\x13\x6a\x90\xc6\x34\xd7\x6d\xf2\x71\xd1\xfb\xdb\x45\x0a\x51\x96\x84\x2f\xbd\x0d\x15\xf4\x25\x86\x91\x42\x41\xcc\x1a\x64\x67\xcc\xa3\xb9\xcb\x9f\x1d\xeb\x7e\xaa\xed\xf7\xfa\xb4\xf0\x23\x1d\x9c\xa1\xa0\xe3\xae\x6a\xff\x17\xa5\xce\xdb\x15\x53\x7a\xbe\x19\xdb\xb6\xda\x64\x03\x66\xb2\x9c\xf9\xe7\x0c\xdf\x00\x00\x00\xff\xff\xef\xe3\x40\xbb\xf5\x00\x00\x00" func runtimeSyntaxPatchYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPatchYaml, "runtime/syntax/patch.yaml", ) } func runtimeSyntaxPatchYaml() (*asset, error) { bytes, err := runtimeSyntaxPatchYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/patch.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPegHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x48\x4d\xe7\x8a\xd1\xcb\xb1\x2f\x48\x4d\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\x9a\xf4\x66\x7f\x0e\x00\x00\x00" func runtimeSyntaxPegHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPegHdr, "runtime/syntax/peg.hdr", ) } func runtimeSyntaxPegHdr() (*asset, error) { bytes, err := runtimeSyntaxPegHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/peg.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPegYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\x41\x6b\xc2\x30\x18\x86\xcf\xf6\x57\x7c\x0b\x6e\x6a\x43\x32\xaf\x06\x67\x19\xec\xee\x65\xa7\xe5\x4b\x47\xac\x9f\x1a\x68\xd3\xd2\xc6\x0d\x47\x7e\xfc\xa8\x53\x27\xe8\x29\x90\x3c\xef\x93\xf7\xdd\xb8\x92\xc2\xa1\x21\x05\x0d\x6d\x93\x64\x4d\x81\x8a\xa0\x20\x01\x00\xe8\xdf\xbc\xad\x48\x01\x43\x94\x65\xd6\xd0\x76\xc8\x92\xa4\xdd\x97\xd4\xa9\x23\x21\xc0\xad\xc9\x07\xb7\x71\xd4\x2a\x60\xb9\xd6\xaa\x6b\x6c\x41\xca\x98\x54\xbf\x8a\x0f\x2b\x7e\xcc\xe9\x9c\x8a\xd9\xa7\x49\xaf\x81\xb9\x60\x27\x49\x51\xfb\x2e\x58\x1f\xa4\xdf\x57\xab\xa3\x09\x31\xd7\x5c\x98\x4c\x4f\xc5\xcc\xf0\x33\xd7\x1d\xaa\x55\x5d\xca\xba\xa1\xd6\x86\xba\xe7\xb4\xe0\x69\x96\x3f\x3f\x3c\x99\x28\x16\x71\x2e\xe2\xcb\x82\xdd\x34\x93\x5f\xb6\x67\x1f\xef\x36\xba\xb8\x1b\x2a\x9c\x2d\x8f\x7f\x6b\x9d\x1b\x93\x22\x9a\x9b\x82\x5d\x68\x9d\xdf\xf6\x10\x1b\x23\x22\xca\xa8\x73\x64\x66\x92\x22\x8b\xa3\xcb\xcd\xc8\x4c\xd2\xd1\x7f\xb6\xaa\xc8\x07\x05\x6c\x9c\xc7\xab\xfd\x13\x44\x81\x28\x64\x3a\x3c\x93\xa1\x5e\xd7\x0a\xd8\xfb\xf2\x6d\xa9\xb2\xcb\x0c\xdf\xef\x10\xc5\xce\xb6\xf2\x7b\xe7\x02\xfd\xe5\x81\x5d\xa9\xf8\xf0\x0e\xad\x80\x0d\x38\xf0\x08\x7c\xc0\x59\xf2\x1b\x00\x00\xff\xff\x2d\xa9\x92\x64\xe8\x01\x00\x00" func runtimeSyntaxPegYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPegYaml, "runtime/syntax/peg.yaml", ) } func runtimeSyntaxPegYaml() (*asset, error) { bytes, err := runtimeSyntaxPegYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/peg.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPerlHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x48\x2d\xca\xe1\x8a\xd1\x2b\x88\xce\xc9\x8d\x55\xe1\x8a\x53\x56\xd4\xd3\xd2\xd7\x48\xcd\x2b\x53\xd0\xd6\xb4\x07\xc9\x69\x28\xd4\xa8\x68\x72\x01\x02\x00\x00\xff\xff\xdb\x1c\x3f\x2e\x26\x00\x00\x00" func runtimeSyntaxPerlHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPerlHdr, "runtime/syntax/perl.hdr", ) } func runtimeSyntaxPerlHdr() (*asset, error) { bytes, err := runtimeSyntaxPerlHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/perl.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPerlYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x54\x5d\x6f\xe3\x36\x10\x7c\xcf\xaf\x50\x7d\x29\x8e\xbc\xf6\x1c\xa0\x8f\xe9\xa5\xee\x3f\x68\x81\x16\xe8\x43\x94\x00\x14\xb9\x92\x59\xf3\xcb\xe4\xca\x8e\xd0\xe9\x7f\x2f\x48\x25\x0e\x90\x1c\xee\xa1\x06\x2c\x50\xdc\xdd\xd9\xd9\x19\x8a\xa3\x75\xc4\x4b\xa2\xdb\x2e\x51\x76\x57\x57\x86\x98\x34\xdf\x76\x57\x5d\xd7\x75\x35\x18\x94\xa7\xdb\x6e\xd3\xf7\xdb\x74\xef\xfc\xc3\xf5\xa6\x45\xf6\xa4\x0c\xe5\xdb\x6e\xf3\xf8\xe1\xbb\xed\xa7\x1b\x41\xe1\xd4\xfd\x20\x77\x15\x43\x74\xb8\x96\x9b\xab\xab\x3c\x3b\x2a\xb7\x2d\xfb\x73\xb7\xb6\xd8\xf4\xfd\x20\x94\xd6\x94\x18\xca\xa9\xec\xa1\x58\x85\x9f\x30\xd8\x20\x0c\x7c\x34\x24\xa1\x85\x72\x8e\x32\xf6\xc2\xd8\x5c\xf7\x10\x13\xe2\x39\x20\xc7\xc8\x12\x2e\x16\xaa\x11\xb9\x43\x0c\x81\x34\x23\x16\xe4\x25\xb1\x84\x11\x83\x17\xba\x26\x20\x26\x0a\x12\x34\xda\x40\x06\xe4\x88\x09\x96\x10\x31\xfb\x24\x41\x42\xe9\x3d\xe2\x88\x93\x72\x78\x12\xa4\x61\x0b\x17\x58\x46\x92\x12\xa3\xd0\x81\x1d\xea\xe4\x11\x2e\xea\x03\x62\x3e\x48\xd9\xf7\x03\x2a\xfb\x89\x58\x68\xb8\x38\xd9\x80\x44\x94\xab\x3c\x48\x53\x4e\x48\xc9\x1a\xa4\x6c\x63\xb6\xbc\x20\x9d\x83\xf2\x10\xfb\x58\x18\x81\x18\x29\x47\x8e\x28\x94\x4f\x72\x58\xd6\xa2\xf3\x6c\x0d\xa6\x3c\x59\xf3\x9a\x27\x87\x45\x19\x93\xd7\xf4\x61\x09\xb3\x1f\x28\xb7\xb2\x61\x49\x31\xb3\x84\xb8\x9f\xca\x03\x31\x28\x18\x29\xd2\x19\x53\xc6\xd7\x9a\x50\x60\x4c\xc4\x25\xea\x83\x68\xed\x62\x95\x68\xf2\x6c\x3d\x61\xaa\x69\x53\xa6\x84\x3d\x3d\xc1\x06\xd3\x9e\x0c\x1b\x35\x3b\xfc\x1d\x6d\xb8\xcc\x7b\xa0\xa5\xe0\x60\x9d\x83\x53\x85\xe1\x28\x4c\xbc\x87\xb3\xe1\x00\x67\x0b\x53\xa8\x1a\x29\x27\x2a\xae\xdc\x55\x61\xe0\x0a\x2b\x86\x87\x3f\x34\x07\xcb\x24\x2a\xea\x44\x8c\x12\x0c\xb2\x3e\x49\x04\x7a\x62\xc4\x6a\x5e\xa2\xf0\x62\x67\x36\x48\x4a\x1f\x90\x6c\x22\xa4\x98\xaa\x98\x81\xc7\x1d\xd2\x5c\xf6\x38\xe2\x78\xc4\xf1\x09\x59\x55\x10\x12\xca\xb4\x03\x52\x99\xc8\x1d\xf4\x09\x26\xa2\x0d\x7a\x9c\x6d\x26\x14\x62\xf0\x9c\x03\x4e\x94\x0b\xe1\x6c\x83\xa9\x6d\x90\xd7\x69\xb3\xaf\xc5\x05\x45\xd7\x73\x88\x42\x74\x58\x69\x5c\x06\x2f\x24\x5c\x3d\x5e\xbe\x92\xf7\x95\xbd\x8f\x09\xc1\x80\x9b\xdb\x7c\x71\xba\x69\xdc\xd4\x2d\x7b\x3b\x32\xca\xde\x5f\x06\xce\xa4\x0c\xce\xd9\x32\xd5\xe8\xcc\xa6\x1e\xe4\x62\x03\x8a\x23\x4a\xa8\x95\xc4\x22\xa9\x26\x40\x89\x99\x51\x92\xb3\x42\x13\x2a\xdc\x3a\x3f\xca\xb1\xee\xb7\xb9\x9b\xb2\x85\x67\xb3\xa0\xcc\x43\xe1\x8c\xb2\xf8\x66\x46\x59\x8a\xd0\xca\xb9\xb5\x25\x93\x7f\x69\xcb\xe4\xdc\xb3\xc2\xcd\x7b\xce\x62\xa9\xeb\x3c\x07\xad\x98\x30\x7b\x55\x0e\x97\xa9\xe7\x20\x0c\x8d\xab\xbf\xcd\x8c\x36\x93\xc4\xdc\x6a\x4f\xca\xcd\x54\x70\x22\x8d\xb3\xb2\x2c\x92\x35\x72\x87\xb3\x0a\xac\x72\x56\x0b\xce\x2a\x87\xe7\xbe\x7d\x3f\x6c\x9e\xbf\xfd\x4a\x9a\x3c\x05\x7e\xbe\x00\x74\x0c\x6c\xc3\x4c\x20\x57\xda\xc3\x8e\xd5\xbc\x31\xe6\xfa\xa7\xfa\x71\xda\x11\x73\x70\x54\x0a\xe6\xc0\xd6\xe1\xbc\xb7\x8e\x40\x47\x04\x82\x63\x4c\xf5\x20\x62\x22\x68\x9f\xf0\x04\xdf\xd4\xc0\x5c\xa8\x71\x56\x35\xa0\x02\x6c\x51\x2b\x8d\x17\x1e\x89\xb4\x55\xae\xb1\xf8\xdc\xf7\xbf\x5c\xf8\x2d\x7e\x88\x75\x5b\xfc\x88\xbe\xdf\xca\x4b\x81\x35\x14\xd8\x8e\x96\xf2\x7a\x8d\xd5\x5f\x61\x95\xeb\x20\xf7\x7d\x7f\xfd\xeb\xf7\x0f\x9b\x4b\x80\x82\x69\xc8\x7f\xbd\x6e\xad\x37\x60\x77\xff\xf0\x02\xa8\x63\x28\xac\x02\x6f\x0b\x67\x1b\xa6\x9a\xbf\xe9\x7b\xb1\xfd\xd4\xf7\xb2\xdf\xe0\x78\xdc\xf5\x3d\xea\x1b\xd6\xf5\x3f\x75\xfd\xef\xba\xbe\xa9\xeb\x9b\x17\xce\x86\x46\x35\xbb\x46\xa4\xf8\x87\x9b\xed\xa7\x4b\x24\x65\x4a\x39\xea\xf7\x8c\xc5\x63\x15\xa8\xbb\xeb\x02\x9d\xe5\x5b\xde\x3f\x7f\x93\xb5\x6f\xee\xbd\x43\xfc\xf0\x16\xe5\xfa\xff\xa0\x3c\xde\xbd\x85\x79\xbc\xd3\x33\x7f\x03\xea\xd5\x97\xad\x57\x3a\xc7\xf7\x98\x5f\xbe\x74\x1f\xff\xf8\xf3\xb7\xdf\x3f\xbe\x85\xae\x9b\x5f\x43\xfe\x2f\x00\x00\xff\xff\xec\x33\x9f\xea\x07\x07\x00\x00" func runtimeSyntaxPerlYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPerlYaml, "runtime/syntax/perl.yaml", ) } func runtimeSyntaxPerlYaml() (*asset, error) { bytes, err := runtimeSyntaxPerlYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/perl.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPerl6Hdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x48\x2d\xca\x31\xe3\xd2\x88\xd1\x2b\x30\x53\xa9\x89\xd1\x2b\xc8\x81\x50\xb9\x66\x2a\x9a\x5c\x5c\x80\x00\x00\x00\xff\xff\x67\xf0\x75\x09\x1d\x00\x00\x00" func runtimeSyntaxPerl6HdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPerl6Hdr, "runtime/syntax/perl6.hdr", ) } func runtimeSyntaxPerl6Hdr() (*asset, error) { bytes, err := runtimeSyntaxPerl6HdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/perl6.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPerl6Yaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x54\x4d\x8b\x1c\x37\x13\xbe\xcf\xaf\x68\xe6\xf5\x0b\xea\x05\x8f\x21\x07\x1f\x36\x0e\x1b\x42\x72\x08\x18\x42\x08\x21\x07\xf7\x06\x34\x52\x75\xb7\x32\xfa\x1a\x55\xf5\xf4\x36\x3c\x3f\x3e\x48\x33\x6b\x3b\xbb\x21\x0b\xab\x1e\x54\xaa\x7a\x3e\xaa\xa4\xd1\x79\x92\x2d\xd3\x7d\x97\xa9\xf8\xf7\xbb\x9d\x25\x21\x23\xf7\xdd\xae\xeb\xba\xae\x46\xa3\x0e\x74\xdf\xed\xd5\x30\x1c\xf2\xfb\x37\xa8\x1f\x7f\xfb\x86\xf7\x6f\xfa\xfd\x6e\x57\x16\x4f\x7c\xdf\x12\xde\x76\xd7\x62\xfb\x61\x38\x2a\x6d\x0c\x65\x81\xf6\xba\x04\x68\xd1\xf1\x1b\x1c\x5d\x54\x16\x21\x59\xea\x61\x94\xf6\x9e\x0a\x66\x65\x5d\xa9\x7b\x48\x19\x69\x8d\x28\x29\x49\x0f\x9f\x98\x6a\xa4\x7f\x40\x8a\x91\x8c\x20\x31\xca\x96\xa5\x87\x55\xc7\xa0\x4c\x3d\x80\x94\x29\xf6\xa0\xd1\x45\xb2\x20\x4f\x42\x70\x84\x84\x25\xe4\x1e\xa4\xb4\x99\x91\x46\x5c\xb4\xc7\x93\x22\x03\xc7\xc2\x70\x82\xdc\xf7\x18\x95\x89\xe2\x51\x25\x26\xf8\x64\x4e\x48\xe5\xd4\x63\x22\x51\x06\x3e\x4d\x2e\x22\x13\x95\xaa\x1f\x79\x2a\x19\x39\x3b\x8b\x5c\x5c\x2a\x4e\x36\xe4\x35\xea\x00\x35\x27\x16\x44\x12\xe4\x92\x24\x81\xa9\x5c\xfa\xe3\x76\x4d\x5a\x17\x67\x31\x95\xc9\xd9\x2f\xe7\xfa\xe3\xa6\xad\x2d\xd7\xe3\xc7\x2d\x2e\xe1\x48\xa5\xa5\x1d\xb7\x9c\x8a\xf4\x50\x9f\x26\x7e\x24\x01\x45\xdb\xab\xbc\x62\x2a\xf8\x37\x10\x8a\x52\xb9\x72\x32\x27\xd5\xe0\x52\xb5\x66\x0a\xe2\x02\x61\xaa\xc7\xa6\x42\x19\x33\x3d\xc1\x45\xdb\x56\x81\x4b\x46\x3c\xfe\x4a\x2e\xe2\x44\x1b\xe3\xe4\xbc\x87\xd7\x2c\xf0\x14\x27\x99\xe1\x5d\x3c\xc1\x3b\x16\x8a\xd5\x13\xed\x55\xad\xd7\x3f\x54\x43\xe0\x59\xb4\x20\x20\x9c\x5a\xc7\x78\x52\xb5\xda\x44\x02\x8e\x16\xc5\x5c\x7a\x44\x7a\x12\xa4\xda\xac\x4c\xf1\xb9\x7d\xc5\x22\x6b\x73\x42\x76\x99\x90\x53\xae\x26\x46\x19\x1f\x90\x17\x9e\x71\xc6\xf9\x8c\xf3\x13\x8a\xae\x45\x48\x69\xdb\x06\xa2\x32\xe9\x1f\x60\x2e\xb0\x09\x4d\xe0\x79\x71\x85\xc0\x24\x90\xa5\x44\x5c\xa8\x30\x61\x75\xd1\x56\x18\x94\xab\xca\x12\x6a\x32\x83\x4d\x9d\x3b\x30\xd1\xa9\x2d\x6d\x97\x94\xaf\x83\x14\x2a\xed\x50\x79\x87\x94\x11\x2d\xa4\xf5\x57\x3e\xf7\xb6\xb9\xda\xfc\xe4\xd9\x8d\x02\x9e\xc3\x67\xa9\x85\xb4\xc5\x5a\x9c\x50\x8d\x2e\x62\xeb\xc8\xb2\x8b\x60\x4f\x94\x51\x33\x49\x54\xd6\x4d\x3a\xa7\x22\xe0\xec\x9d\x32\x84\x5a\xee\xaa\x1c\x7c\xae\xfb\x4d\x71\xf3\x94\x65\xb1\x1b\x78\x39\xb2\x14\xf0\x16\x5a\x1b\x78\x63\x65\xb4\xf7\x57\x48\xa1\xf0\x0c\x2b\xe4\xfd\xcd\xdb\xd6\x6d\x29\xd8\x20\x65\x89\x46\x0b\x61\x09\x9a\x4f\x58\xa2\xb2\x34\x5e\xfb\xd9\xcc\x6f\x4a\x7a\x2c\x2d\xe3\xa2\xfd\x42\x8c\x0b\x19\xac\xda\x89\xca\xce\xf6\x0f\x58\x75\x14\x5d\x8a\xde\xb0\xea\x12\x6f\x68\xc3\x70\xdc\xdf\xee\x76\xa5\x4a\x81\xa2\xdc\x2e\xb8\x49\x51\x5c\x5c\x08\xe4\xb9\x2d\x6e\xac\xcd\x1a\x53\xa9\xff\x54\x2f\x9f\x1b\xb1\x44\x4f\xcc\x58\xa2\x38\x8f\x75\x76\x9e\x40\x67\x44\x82\x17\x4c\x75\xf0\x30\x11\x4c\xc8\x78\x42\x68\x1e\x60\x61\x6a\x9c\x75\x0d\xe8\x08\xc7\xfa\x1f\x34\x32\x19\xa7\xfd\x8d\xc4\xac\x19\x8e\x61\xbc\x66\x46\x49\xb5\x9c\xbb\x50\xc4\x3a\x53\xc4\x0f\xbf\xff\xfc\xf1\x47\x84\xc5\x8b\x43\xa1\x3a\x36\x8c\x40\x32\x27\x5b\x81\x9e\x7f\xf9\xa5\x64\xb0\x6e\xe0\x5f\x03\x39\x4b\x51\xdc\xe8\xa8\x5c\x5f\xb7\xfa\xc7\xa2\x4b\xd5\xff\xe9\xcd\xf7\xff\x7f\xdc\x7f\xde\xa6\x68\xeb\x23\xd9\x61\x18\x86\xe1\x0f\xbc\xed\xbf\x84\xae\xcf\x63\xf7\xe9\x71\x77\x2b\x6b\x52\x64\xd1\x51\x0e\x2c\xc5\xc5\xa9\xea\xd8\x1f\xee\x86\x3d\xce\xe7\x61\xc0\xe1\x6e\x18\xf0\xcc\xc0\xd2\xa8\x17\xdf\xf0\x38\x3c\xbe\x3b\xdc\xbd\x7b\x8e\xe4\x42\xb9\x24\xf3\x9a\x98\xfa\xb3\xda\xd7\x7d\xd7\x45\x5a\xfb\x97\x04\xbf\xfd\x4f\x5a\xe1\xd6\xdb\xff\x1d\xee\x5e\x5b\x70\x08\xda\x94\xf4\x1a\xef\xc3\x87\x9f\x7e\xf9\xed\xd7\x8f\x2f\x91\x5e\x6c\x7e\x85\xf6\x77\x00\x00\x00\xff\xff\xd5\xbb\xe9\xc6\x73\x06\x00\x00" func runtimeSyntaxPerl6YamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPerl6Yaml, "runtime/syntax/perl6.yaml", ) } func runtimeSyntaxPerl6Yaml() (*asset, error) { bytes, err := runtimeSyntaxPerl6YamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/perl6.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPhpHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xc8\x28\xe0\x8a\xd1\x2b\xc8\x28\x88\x36\x32\x36\x31\x2d\xae\x8b\xb5\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\x60\x80\x05\xfb\x15\x00\x00\x00" func runtimeSyntaxPhpHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPhpHdr, "runtime/syntax/php.hdr", ) } func runtimeSyntaxPhpHdr() (*asset, error) { bytes, err := runtimeSyntaxPhpHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/php.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPhpYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x56\x6f\x93\xdb\xb6\xf1\x7e\xfd\xbb\x4f\xa1\x53\x32\xfe\x01\x77\x96\x2e\xfd\xe7\x99\xc8\xd1\x69\x3c\xa9\xf3\xca\xd3\x76\xda\xe4\x45\x43\xd0\x1e\x10\x5c\x92\xa8\x40\x80\x06\x96\xba\x53\xf2\xa4\x9f\xbd\x03\x4a\x77\x27\x5b\xe7\x56\xc3\xa1\x30\x8b\x05\x76\x9f\xdd\x67\x77\xd9\x58\x47\xbc\x1f\x68\x35\x1b\xba\xe1\xe2\xa2\x26\x26\xc3\xab\x8b\xd9\x6c\x36\xcb\x5b\x5e\xf7\xb4\x9a\xcd\x95\x5a\x0e\xdd\x50\xfc\xfe\x0f\x7f\xfc\x53\xfa\x77\xb9\xf9\x7a\x7e\x71\x11\x47\x47\xe9\xa0\xb8\x98\xa5\x7d\x5f\x05\xb7\x0c\x03\x45\xcd\x21\xae\x66\xf3\xef\x70\x3b\x3f\x6e\x52\x8c\x07\x51\xf1\xfe\xb2\x5c\x5e\x6d\x1e\x37\x8e\xa7\x58\xb7\xab\xd9\x5c\x6c\xac\xfc\xae\xb8\x29\x37\x42\x8b\xaa\x8a\x30\x31\xf8\x7d\x8f\xba\x8e\x94\x12\x86\xc1\x11\x23\x92\x46\x64\x6b\x1c\x21\xd9\x9a\x30\xd6\x36\xc8\x0d\x2a\xa1\x13\x89\x26\x78\x96\x1b\xd4\xc2\x22\x48\xd8\x16\x2e\x98\xed\xc7\x31\x30\x21\xca\x0d\x8c\x16\x7e\xa7\x13\x06\xb6\xc1\x4b\x18\xf2\x4c\x11\xc6\x32\xc1\x04\x51\x13\x1c\x5c\x1b\xc3\x38\x48\xd4\x42\xb3\x16\xce\xa6\xe9\x3e\x90\x03\xb1\xb6\x2e\xa1\xf1\xb0\xda\x85\x16\x36\xc2\x81\x25\xa8\x17\x15\xd5\x72\x83\xc6\x92\xab\x13\x31\x1a\xdb\x0a\xa3\x27\x23\x18\x23\x49\x64\xb7\xd0\x84\xd8\x43\x58\xb9\x69\xa2\xee\x09\xd3\x3b\x6b\x77\xc5\xef\x16\xaf\x4a\x74\x11\x16\xb6\x6f\x61\xbd\x18\x46\x46\x92\xd8\x56\x35\xb6\xb4\x6f\xc9\xc3\xe9\x8a\x1c\x1c\xb5\xe4\x6b\x38\x2b\xfc\x56\x6e\xd0\x6b\x61\x3d\x06\xc4\xad\x44\x4f\x7e\x14\x96\xa9\xcf\x72\x62\xa1\x41\x51\xc2\xeb\x1d\x7c\x10\x07\x5b\x48\x26\xda\x81\x25\x82\x70\x18\x58\x4c\x48\x31\x45\x62\xe4\x61\x64\x89\x41\xe8\xa8\x7b\x58\xc3\x63\x24\xe4\x27\xb4\x39\xf4\x72\x83\x8f\x88\x62\x00\x63\xac\xf6\x12\x49\x70\xb4\x5b\x92\x1b\x24\xdd\x0f\x48\x24\xcc\x04\xd6\x91\x61\x89\xd4\x6b\xe7\x90\xc2\x18\x0d\x21\x0d\xda\x23\x71\x0c\xbe\x45\x1a\x45\x85\x01\x7d\xaf\xe3\x5e\x82\xe9\x9e\x75\xce\x26\xdb\x9e\xc0\x51\x9b\x2d\x46\xe1\xe4\x06\x3b\x1d\xb1\xb3\x35\x05\xdc\x55\x51\x8a\xd9\xf2\x0a\xb7\xf2\x59\xce\x2c\xe9\x9e\xc9\xd7\x54\x7f\x42\x9e\x2a\xd4\x7b\xd4\x76\x87\x8e\x7b\x87\x8e\x74\x2d\x28\xa7\xbf\x09\x21\xe7\x9b\x2d\x3b\x02\xeb\x2a\xbf\x8f\xca\xe8\x04\xe9\x9c\xc4\x38\x69\xc9\x67\xac\x0e\x91\x86\x18\xcc\x27\x96\x0e\x11\x45\xe2\xbd\xa3\xe7\x1c\x1d\xc8\x58\xed\x56\xb3\xf9\x8b\xe2\xfd\xeb\xa2\x58\xa5\x41\x1b\x5a\x95\x65\x79\xf5\xfa\x53\x30\xab\xd9\xbc\x58\xad\xcb\x07\xa1\xad\xc9\xb3\x6d\x2c\xe5\x9a\x11\xda\x31\xaa\xd6\x04\x17\x22\x3a\xb2\x6d\xc7\xe8\x22\x35\x0f\xa4\x08\xbe\xad\x29\x19\xe4\x3a\x45\xf0\xc6\x59\xb3\x45\xf0\x4d\x30\x63\x42\xf0\x2e\xe8\x1a\xc1\xf7\x61\x4c\x14\x76\x14\x91\xec\x2f\x0f\x79\x89\xe6\xe0\x3b\x58\xc7\x96\x18\xb9\x0b\x60\xa7\xdd\x48\xb8\xb3\x35\x77\x72\xfd\xe0\x91\x09\x3e\xb1\xf6\xbc\xf4\x63\x5f\x1d\xdc\xda\x58\xf9\x55\xf1\xcd\xe2\xdb\x37\x8b\x1f\xca\x5f\x5f\xbd\x7c\xf5\xdb\x99\x6e\xe2\x68\x7d\xbb\x1c\x63\xc6\x27\x1a\x1e\x44\xa6\x52\xc7\xc7\x45\x6b\x19\xa6\x8b\xa1\x27\xb9\xba\xb9\x29\xde\xcf\xfe\xaf\xbc\x7e\xba\xa3\xef\xc9\x73\x6e\x19\x97\x8b\xc5\xf2\x7a\xb3\x58\x3c\x86\xb5\xa6\x46\x8f\x6e\xda\x53\x6a\x23\x86\x6e\xc0\x5a\xaa\xf9\x8c\x7c\xbd\x56\x73\xa5\x9e\x12\xf0\x14\xc7\xa5\x71\x3a\xa5\xec\x46\xa1\x17\xbf\xbc\x59\xfc\xfc\xcd\xe2\xdb\x0f\x8b\xf2\x5a\x2a\x25\x1e\xb4\x0f\x3d\x70\xae\x54\x25\x74\x8c\x7a\x8f\x2a\x04\x27\x48\xfb\xa9\x75\x38\x37\x31\x26\x2f\xaa\xcc\xd5\xc6\x05\xcd\xb0\x9e\x05\xb5\x13\xbd\x2c\x53\x9c\x54\x42\xf5\x2f\x32\xb9\x53\x1d\x6b\xa0\xb7\xf7\x54\xe3\x10\x0c\xec\x82\xad\xa5\x52\xd5\x7f\x71\xf1\xe8\xa1\x52\x4a\x95\xd7\xab\xd5\xb3\xa4\xc8\x4e\x16\x6f\x16\x3f\x97\x27\x70\x26\x34\xcf\x5c\x3c\xa1\x7e\xd2\x29\x5e\x43\xa9\x04\xa5\x24\x5e\x96\xa7\xd8\x97\x5b\xda\xdf\x85\x58\x1f\xaf\x6f\x5d\xa8\xb4\x43\x63\xbd\x76\x18\xc6\xca\x59\x83\x21\xda\x9d\x66\xc2\x10\x43\x1e\x12\x13\x2c\xcd\xd6\x60\xca\x79\xae\xdc\x53\x17\xf2\x1e\x1d\xd3\x38\x45\xb5\x4a\xb9\xce\x19\x46\xb3\xe9\x30\xe1\x45\x4d\xc6\xe9\x48\xa8\x03\xc8\x25\x12\xb6\x91\x1b\x90\xaf\xc5\xc3\x46\x13\xa2\x20\x6d\xba\x1c\xe2\x06\xe9\xce\xe6\xb3\x77\x9d\x75\xb9\xb3\x66\xe7\xdc\xfe\x49\x07\xcd\xe8\x0f\xcd\xc8\x36\x39\x39\x14\x1b\x6d\x68\xaa\x8d\xa9\xf8\x1e\xce\x73\xd4\x96\xc1\x71\x7f\xbc\xe9\x4b\x81\x53\xaa\xf2\x74\xa7\x54\xba\x3e\x21\xce\x21\x33\xf2\xbc\xcc\x27\x90\x09\xda\xd7\xa8\x22\xe9\x2d\x8c\x4e\x04\xe3\x82\xcf\x13\xc6\xb3\xf5\x23\xe1\x48\x5f\xd4\x96\xf2\x34\x21\xd3\x05\x50\x3f\xf0\x1e\xb4\xd3\x0e\x74\x6f\x19\x87\xbe\x96\xd0\x06\x0e\x08\x11\xd6\x1b\x37\xd6\x24\x3e\x04\x6f\x72\xdf\xb5\xfd\xe0\xa6\xc8\x26\xd8\xa9\xd8\x0c\x85\x66\x5a\x92\xae\xf3\x2a\xe5\xd1\x92\xc7\x17\x3c\xdd\xe5\xb4\xf9\x4c\x48\x1e\xa3\x47\xa4\x8f\xa3\x8d\x4f\x77\x8d\x3e\xeb\x8e\x89\xc0\x5d\x0c\x77\xb8\x0f\x11\xfb\x3c\xcb\x44\x86\xdd\xc4\xd0\xcb\xd3\xf0\x3c\x56\x77\xae\x8e\x23\x66\x8e\x23\xa1\xd1\x2e\x11\xfc\xe8\x1c\x7e\xfc\xfb\x4f\x6f\xf1\xc3\x9b\x77\xff\x78\x8b\xbf\xfc\xf4\xee\xdd\x73\xc7\x33\xcf\x33\x0d\xd7\x47\x32\x0a\xdc\xe0\x1a\x0b\x28\x75\x05\xa5\x8a\xf2\xcb\x8d\x27\xf7\x9c\x2f\x74\x4a\xa5\xbe\xe6\xce\x26\x0c\x3a\x92\x67\x24\x72\x0d\x8e\xb2\xc5\xad\x9c\x7f\xf1\x4b\x45\xac\x6f\xb1\x5e\xaf\x71\xb9\x5e\x63\xfa\xc3\x8b\x17\x50\x2a\x3f\x58\xad\xb0\xc6\xe2\x16\x4a\x5d\xca\x67\x8a\x76\xa7\x1f\x2c\x9f\xf2\x63\xf1\xe1\x94\x1f\x67\xf6\x8a\x8c\x37\x17\x60\xc6\xac\xd4\x23\x6a\x2c\xf1\x12\xaf\xcf\xb1\x1f\x7a\xc7\xe1\x4b\x2b\xff\x12\xeb\x38\x15\xd5\x7c\xfe\x28\x23\x5f\x7f\x26\x49\x5b\x3b\x4c\x09\x52\x6a\xf9\x24\x3d\xf9\x68\x7b\xf8\x9d\x5a\x3a\x70\xf9\xfb\x4e\xc7\xe3\xd1\x42\x57\x8d\x8f\xbc\xfb\x7f\xa5\xd4\x24\x28\x3f\xc3\x55\xe5\xd1\x4d\x9c\x0e\x61\x28\xa0\x54\x09\xa5\x7e\x85\x52\xbf\xa1\x10\xb2\x94\xe7\x3d\x5d\xbc\xc7\xc9\x34\x94\x37\x37\xcb\xab\xff\xa9\xf4\xd5\xb9\xce\x59\x3c\x6e\x94\xba\x3a\x8b\x88\xba\xba\xf9\x1c\xfd\xac\x28\x2f\xce\xc6\xfa\xc9\x30\xd9\x9c\x0f\xfd\xd3\xb1\x72\x72\xe6\xf2\xcf\x7f\xfd\xfe\xc7\x7f\xfe\xed\xed\xf2\x3a\x6f\xff\x27\x00\x00\xff\xff\xcf\x34\x8d\x86\x4a\x0b\x00\x00" func runtimeSyntaxPhpYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPhpYaml, "runtime/syntax/php.yaml", ) } func runtimeSyntaxPhpYaml() (*asset, error) { bytes, err := runtimeSyntaxPhpYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/php.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPkgConfigHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x48\xe6\x8a\xd1\x2b\x48\x56\xe1\xe2\x02\x04\x00\x00\xff\xff\x48\xfc\x01\xcd\x0a\x00\x00\x00" func runtimeSyntaxPkgConfigHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPkgConfigHdr, "runtime/syntax/pkg-config.hdr", ) } func runtimeSyntaxPkgConfigHdr() (*asset, error) { bytes, err := runtimeSyntaxPkgConfigHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/pkg-config.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPkgConfigYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\x4d\x4b\x03\x31\x10\x86\xcf\xcd\xaf\x18\xc2\x1e\xba\x2e\xbb\x78\x35\x20\x22\xf5\x58\x3c\x14\xf4\xe0\x66\x2d\x69\x3a\x6b\x07\x76\x37\x71\x92\x56\xaa\xf1\xbf\x4b\xaa\xf6\xd4\xdb\x03\xcf\xfb\xce\x47\x4f\x03\xc6\xa3\x47\x05\xde\x0a\xb1\xc5\x88\x36\x2a\x10\x00\x00\x59\x4d\x66\x44\x05\x52\xeb\xc6\xdb\x42\x0a\xc1\xfb\x01\x83\x3a\xe9\x1a\x3c\xa3\x67\x67\x15\xc8\xd7\xf9\xa3\x19\x31\x3d\x60\xb0\x4c\x3e\x92\x9b\xd2\xd3\x6a\x99\x9e\x91\x43\xe6\x85\x9b\xfa\x81\x6c\x0c\x69\xd1\x0f\xe6\x2d\x94\x4a\x5e\x18\xb1\xc2\xf7\x3d\x31\x86\xb4\xa4\x4d\x28\xe7\x79\x27\xd3\xc1\x44\x2c\xef\xce\xf9\x70\x1c\x37\x6e\x68\x9c\x47\x36\xd1\xb1\x02\x79\xfb\xaf\x68\x8b\x53\xa4\x9e\x90\x9b\x83\xe1\xd3\xd1\x85\xd6\x5f\xed\x7d\xfd\x62\xea\xcf\x75\xf7\x07\xd7\xf5\xcd\xba\xbb\xd2\xfa\xfb\xdc\x9b\x72\xb1\xb6\x3b\xc3\xcd\xc7\x8e\x22\x06\x6f\x6c\x7e\xba\x6d\xd5\x2f\x76\x5d\x55\x5c\x48\x2b\x90\xb3\x0a\xaa\x04\xd5\xac\x92\xe2\x27\x00\x00\xff\xff\x0d\x58\x66\xca\x49\x01\x00\x00" func runtimeSyntaxPkgConfigYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPkgConfigYaml, "runtime/syntax/pkg-config.yaml", ) } func runtimeSyntaxPkgConfigYaml() (*asset, error) { bytes, err := runtimeSyntaxPkgConfigYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/pkg-config.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPoHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xc8\xe7\x8a\xd1\x2b\xc8\x2f\xb1\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\x5e\x5b\xa5\x67\x0c\x00\x00\x00" func runtimeSyntaxPoHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPoHdr, "runtime/syntax/po.hdr", ) } func runtimeSyntaxPoHdr() (*asset, error) { bytes, err := runtimeSyntaxPoHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/po.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPoYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xce\x4b\x6a\xc4\x30\x0c\x06\xe0\xf5\xf8\x14\x42\x2d\x4c\x1e\x8c\x0f\xe0\xcd\x1c\x24\x4a\xc0\xe3\xa8\x19\x43\xec\x18\x5b\xa5\x94\xfa\xf0\x25\x99\xbe\x16\xdd\x4a\xdf\x2f\xfd\x2f\x7e\x65\x79\x4f\x6c\x20\x6d\x4a\xcd\x2c\xec\xc4\x80\x02\x00\xd8\x57\xd1\x06\x36\x80\x44\x3a\x6d\x72\x7d\x46\xa5\xf2\xeb\xca\xc5\x1c\xe0\x02\x29\x73\xca\x9b\x3b\xc4\xad\x09\x65\xf1\x73\x0d\x65\x29\x92\x5b\xa2\x1b\x7e\x29\xb7\xc5\x22\x36\x8a\x2e\x92\x7d\x5c\x76\x8d\x0d\x11\x91\xae\xc3\x44\x38\xb6\x1d\x61\x3d\xff\x4c\xce\x63\xdb\x9d\xbf\xb3\x25\xb1\xf3\x76\x3d\x3e\x10\xe9\xeb\xef\xcd\x10\x38\x8a\x01\x6c\xa6\x3a\x0c\xa6\x24\xeb\xd8\x8c\x63\xfb\xd4\x0c\xd3\xc7\xa8\xbb\x76\x6f\xfb\xb0\x3e\xce\x1c\xe5\xe2\xee\x36\xeb\xb7\xbb\x17\x7e\x60\xc0\x3f\xb9\xfe\x3f\x6d\x00\x4f\x3d\xf4\x15\xfa\x53\x8f\xea\x33\x00\x00\xff\xff\x13\x06\x8b\x95\x2b\x01\x00\x00" func runtimeSyntaxPoYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPoYaml, "runtime/syntax/po.yaml", ) } func runtimeSyntaxPoYaml() (*asset, error) { bytes, err := runtimeSyntaxPoYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/po.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPonyHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xc8\xcf\xab\xe4\x8a\xd1\x03\x51\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x70\xe0\x62\x39\x0e\x00\x00\x00" func runtimeSyntaxPonyHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPonyHdr, "runtime/syntax/pony.hdr", ) } func runtimeSyntaxPonyHdr() (*asset, error) { bytes, err := runtimeSyntaxPonyHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/pony.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPonyYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x94\xcd\x72\x9b\x3e\x14\xc5\xf7\x3c\x05\x61\xfe\x1f\x40\x8a\xed\xae\x3a\x61\xfc\x31\x99\x69\xbb\xcd\xa6\xab\x20\xe2\x11\x70\x89\xd5\x82\xc4\x48\x17\x3b\xee\x9c\x87\xef\x80\x53\xbb\x69\x13\x0a\x0b\x24\x9d\x9f\x74\xc4\x11\x97\x5a\x35\xc4\xc7\x8e\x52\xbf\x33\xfa\xe8\x79\x15\x31\x95\x9c\xfa\x9e\xef\xfb\xfe\x20\x6a\xd9\x52\xea\x07\x42\xcc\x06\xe0\x9f\xc0\xf3\x6c\xdf\x90\x4b\x47\x20\xf1\x1d\x4b\xa6\x96\x34\x8f\x4c\x11\x0e\x6b\x41\x69\x26\x5b\xcb\x92\xc0\x56\x2a\x46\x67\x55\xab\x58\xed\x09\x65\x23\x9d\x83\x63\xdb\x97\x0c\x59\xb2\xb1\x91\x10\x45\xf0\xc6\x62\xa5\x69\x3b\xd5\x90\xdd\x2a\xcd\x56\x69\xa7\xca\x29\xba\x77\x34\x25\xef\xa5\x45\x43\x0c\x6a\x0b\xaa\xa6\x40\x4d\x07\x14\x84\xba\xd7\x53\x94\x72\x06\x6c\x35\x2c\xd5\xd8\xcb\x06\x85\x79\x02\xcb\x47\x94\x46\xbb\xbe\x9d\xdc\x49\x61\x49\x7e\x1b\x40\x56\xba\x27\x58\xe2\xde\x6a\x90\xb5\xd3\x69\xa8\x1a\xbc\x23\x0d\x6a\x1c\xa9\x7a\x7c\x80\x74\x85\x56\x72\xb9\xc3\x61\x47\x76\xc8\xfb\x88\x83\xe2\x1d\xa4\x83\xa5\xd2\xec\xc9\xc2\x14\x5f\xa9\x64\x34\xb2\x2d\x2a\x39\x08\x95\x7a\x24\xc7\xa6\x86\xaa\x2b\xaa\xa7\x2c\x0f\x3b\xd5\x10\x2a\x03\x4b\x1d\x49\x46\xaf\x59\x35\xa8\x8d\x85\x7a\x33\x9c\x50\x88\x0d\x56\xeb\xe8\x0d\x0d\x10\xe2\x3f\x08\xf1\x0e\x42\x3c\x5c\xa0\x63\x5b\x98\x66\x66\x3a\xb2\x92\x8d\x3d\xa1\x09\x84\xb8\x86\x10\x31\xe6\x10\xe2\x0a\xff\x62\xb9\xc4\x7a\x3d\x35\x69\xb5\xc2\xd5\x0a\xcb\x15\xd6\x2b\x2c\xf1\xfa\x26\x4e\xa7\x07\xe5\x34\x43\x1b\x86\xd4\x15\x8c\xc5\xd3\xcb\xf4\x4f\x45\x31\xc2\xdb\x38\xbb\x4d\xee\xf3\x6c\x2b\x93\xef\xb7\xc9\xfd\x22\xb9\x11\xe2\xff\x3c\xfe\x95\x1e\x4e\x9d\xe5\xa5\x0a\x76\xca\xbd\x26\xcf\x0a\x63\x9a\x9f\x8c\xed\x09\xb5\x6c\x5e\x7e\xb5\x67\x52\xf7\x6d\x41\xf6\x99\x0d\x17\x45\xb6\x48\xde\x6f\xf3\x38\x42\xb8\x30\xd9\x22\xf9\xf0\xdc\x7e\xca\x16\xc9\x8d\x4c\xea\xdb\xe4\xf3\x69\x64\xe8\x6f\xf3\xeb\x50\x88\xd9\x73\x33\xda\x84\x21\xe1\x53\x14\x0a\x31\xe4\x99\x44\x9b\xb3\x10\xbd\x6a\xed\x86\x62\x7b\x1c\xac\x83\x71\xce\x0c\xd9\x83\x08\xf2\x28\x16\xc1\x85\x6d\xc7\x34\xc7\xee\x70\x39\x96\x76\x7c\xfb\xf1\x1e\xf9\x38\x38\xab\xa4\xab\xb3\x76\x19\x3d\xfd\x48\xfc\x2c\xf7\x7e\x5b\xd5\x0f\xc2\x07\x64\x59\xea\x3a\x59\x52\x9a\xe7\xd1\x7c\x3e\x8b\xff\x6a\x3d\x17\xe2\x4f\x4b\x11\xcf\x27\x0c\xd9\x54\x26\xf5\x83\x2f\x77\x1f\xef\xd2\x4d\xe0\xfd\x08\x00\x00\xff\xff\xea\x67\x0e\xde\x0d\x05\x00\x00" func runtimeSyntaxPonyYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPonyYaml, "runtime/syntax/pony.yaml", ) } func runtimeSyntaxPonyYaml() (*asset, error) { bytes, err := runtimeSyntaxPonyYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/pony.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPovHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xc8\x2f\xe3\x8a\xd1\xd3\x28\xc8\x2f\xab\x09\xf0\x0f\xab\x29\xc8\x2f\x2b\x4a\xac\x04\x31\x83\x1c\x23\x35\x55\xb8\xb8\x00\x01\x00\x00\xff\xff\x4e\x1a\x2e\x88\x20\x00\x00\x00" func runtimeSyntaxPovHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPovHdr, "runtime/syntax/pov.hdr", ) } func runtimeSyntaxPovHdr() (*asset, error) { bytes, err := runtimeSyntaxPovHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/pov.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPovYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x52\xdb\x8e\xd3\x30\x10\x7d\xcf\x57\x84\xb2\x42\x6d\x25\xda\xf7\x70\x91\xf8\x02\x10\x0f\x48\xa8\x53\xca\xc4\x99\xa4\x06\xc7\x63\x8d\x27\xd5\x46\x0c\xff\x8e\x9c\xad\xb4\x65\xa5\x5d\x3f\x1d\x4f\xce\x65\x72\x92\xde\x07\xd2\x39\x51\x53\x27\xbe\x54\x55\x47\x4a\x4e\x9b\xba\xaa\xeb\xba\x2e\xcf\x22\x8e\xd4\xd4\x2b\x80\xdd\x3a\xf1\xc5\xbe\x7c\xfe\x66\x89\x2f\x82\x73\x81\x5f\x3f\x7d\xdf\xdc\xad\xaa\x4a\xa6\x40\xb9\x59\x34\x6f\xeb\x24\x94\x84\x5d\x53\xaf\x7e\x1c\x0e\x4d\x4e\xe8\xa8\x39\x1e\xb7\xaf\x6f\x2f\xeb\x8e\x5c\x40\xa1\xcd\xea\x2a\xca\x8a\x4a\x23\x45\x5d\xb2\xda\x75\x4e\x67\x12\x32\x37\x07\x1f\x3b\x12\x53\xc1\x98\x03\x2a\xd9\x88\x2a\xfe\xde\x84\x8b\xc2\xb2\xc3\x40\x1b\x80\xf6\x39\x23\x16\x3d\xf3\x20\x98\xce\xde\x59\x60\x87\xea\x39\xda\x94\x4c\xfc\x70\x56\xeb\xbc\x90\x5b\x46\x2e\xf8\x94\xa8\x3b\xb5\xf3\x4b\x76\x3d\x0f\xa7\x52\x97\x15\xc0\x7d\x9f\x49\x17\x88\x41\x4d\x86\xd6\x3a\x9f\x15\xa3\xa3\x87\x85\x7b\x96\xf1\xd6\xcd\x77\x14\xd5\xf7\x9e\xa4\xb4\x53\xfc\x94\xee\x75\x12\x7a\x96\x54\x38\xa1\x6c\x7a\xca\x3c\x89\x23\x6b\xd1\xfd\x1e\x84\xa7\xd8\xbd\xa8\xe9\x79\x30\x6e\x7f\x91\x53\x73\x38\x92\xe0\x7f\x2f\x35\x8f\x2d\x87\x1d\x27\x12\x54\x2e\x92\x35\xc0\x1f\x03\xf8\x6b\x00\x6b\x03\xd8\x18\xc0\x3b\x03\x38\x1a\xc0\xc1\x7e\x1a\x00\x80\x01\xdc\xd9\x7b\xfb\x68\xaf\xec\x83\xbd\x31\x00\x7b\xfc\x78\x89\x9c\xc7\x70\x8d\x9e\x62\xa9\xb3\xec\x98\x2c\x4f\xed\x02\x6e\xd3\x1d\x8f\xd7\x42\xf7\xfb\xdd\xf6\xe9\x74\xb9\x96\x93\x15\x65\x21\x01\x5c\x49\xe5\x50\xec\x96\x98\xed\xfe\x71\xf6\xf0\xf7\xd5\x87\x63\x55\xfd\x0b\x00\x00\xff\xff\x47\x8d\xbf\x93\xce\x02\x00\x00" func runtimeSyntaxPovYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPovYaml, "runtime/syntax/pov.yaml", ) } func runtimeSyntaxPovYaml() (*asset, error) { bytes, err := runtimeSyntaxPovYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/pov.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPrivoxyActionHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x28\xca\x2c\xcb\xaf\xa8\xd4\x4d\x4c\x2e\xc9\xcc\xcf\xe3\x8a\xd1\x83\x30\x54\xb8\xb8\x00\x01\x00\x00\xff\xff\xfe\x61\x30\x6f\x1a\x00\x00\x00" func runtimeSyntaxPrivoxyActionHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPrivoxyActionHdr, "runtime/syntax/privoxy-action.hdr", ) } func runtimeSyntaxPrivoxyActionHdr() (*asset, error) { bytes, err := runtimeSyntaxPrivoxyActionHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/privoxy-action.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPrivoxyActionYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x54\x41\x6e\xdb\x30\x10\x3c\xc7\xaf\x20\xd4\x1c\x9c\x0a\xeb\x07\xe8\x92\x43\x9f\x61\x39\x00\x43\xae\xa4\x45\x28\xae\xb0\x5c\xd9\x31\xc2\xfe\xbd\xa0\x6d\x39\x49\x6b\x14\xe8\xa5\xa7\xdc\x8c\xe1\xec\x78\x67\x76\xa0\x8e\x02\xea\x71\xc2\xc6\x4c\x42\x7b\x7e\x3d\x82\x75\x4a\x1c\x57\x2b\x8f\x8a\x4e\x1b\xb3\x32\xc6\x98\x42\x8b\x76\xc4\xc6\x54\x6d\xbb\x39\x53\xee\xab\xd5\x4a\xe6\x80\xa9\x39\x51\xc0\x38\x8e\x49\x6d\xd4\xcd\x33\x73\xd8\x74\x36\xa4\xc2\xdf\xbe\x6d\x9b\x34\x59\x87\xcd\x6e\xd7\xb6\xf0\x1c\xd8\xbd\xac\xb7\x57\xec\xed\xe7\x2e\xdf\x3f\x54\x37\x25\x54\xe6\x3f\x15\xea\x7f\x51\x58\x96\x80\xb5\xf5\x1e\x06\xb4\x1e\x25\xbb\xc1\xc6\x1e\xe1\x15\x3a\x96\x83\x15\x8f\xbe\xfc\xca\x2e\x10\x46\xbd\x90\xa0\xa3\xa0\xf8\x3b\xa8\xb6\xef\x0b\xc8\x51\x0b\x5a\x82\x03\xde\xa3\x1c\x84\x14\xb3\x93\x39\xba\x01\x3e\x8d\x2c\x20\x75\x10\x39\x22\x8c\x56\xdd\x70\x05\xa3\xe3\x91\x62\x0f\x8e\xf9\x85\x30\x2d\x38\xcf\xda\xf3\x0d\x3c\xa1\xec\x51\x16\x65\x8f\x36\xd2\x68\x15\xa1\xa7\x2e\x65\xcf\x87\xd8\x8b\xf5\x08\x83\xea\x04\x7b\x94\x44\x1c\x73\x67\x93\x82\xa0\x27\x41\xa7\x29\x5f\x6c\x75\x2c\x0e\x41\xf1\x55\x61\x64\x8f\xf9\x92\xc4\xc9\x8c\x90\xc7\x3c\xd8\xe8\x03\x82\x4d\x80\xe3\xa4\x47\xf0\xec\xe6\x11\xa3\x7e\x78\xa0\xd1\xf6\x98\x07\xf2\x08\xd6\x39\x9c\x14\x82\x8d\xfd\x7c\x05\x97\x94\x3c\xa5\x89\x13\x95\xca\x9c\x1f\x3a\xe1\x71\x31\x71\x02\xa8\x2b\x5b\x50\x47\xe8\x21\x51\x74\x17\x01\xc1\x0e\x45\x16\xd2\x9c\x50\xc0\xf6\x65\x87\x40\x23\x69\xd1\x8f\xe8\x34\x5f\x0f\x00\xa1\x78\x5d\x94\xf2\x24\xb8\x2f\xff\xef\x78\x9c\x04\xd3\x29\x8d\x25\x88\xfc\x29\xca\xe5\xd8\x9f\xc1\xcb\xb1\xd3\x79\x74\xb9\x05\x70\x0c\xc7\x9c\x50\xcf\xfe\xcf\x7d\x46\xf9\x7b\x83\xdb\xb6\xfe\x2a\xe0\x57\x01\xff\x6f\x01\xd3\x84\x8e\x6c\xf8\x31\x58\x39\x55\xb0\x6d\x37\x8f\xef\xa4\xb1\x84\xd9\x98\x6a\xfd\x94\xdf\x3f\xa5\xbb\x87\x6f\xeb\xed\xd3\xdb\x6e\xf3\xfd\xe1\xf1\x7e\xe1\x52\xf4\x27\x17\x83\x95\xcd\x61\x20\xc5\x33\xd9\x54\x1f\xe6\xea\x5b\xec\xc6\x54\x77\xb5\xa9\xb3\xa9\xef\xea\x6a\xf5\x2b\x00\x00\xff\xff\x10\xd4\x24\x50\x6a\x06\x00\x00" func runtimeSyntaxPrivoxyActionYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPrivoxyActionYaml, "runtime/syntax/privoxy-action.yaml", ) } func runtimeSyntaxPrivoxyActionYaml() (*asset, error) { bytes, err := runtimeSyntaxPrivoxyActionYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/privoxy-action.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPrivoxyConfigHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x28\xca\x2c\xcb\xaf\xa8\xd4\x4d\xce\xcf\x4b\xcb\x4c\xe7\x82\x72\xf5\x21\x5c\x15\x2e\x2e\x40\x00\x00\x00\xff\xff\x25\x83\xf6\xe6\x20\x00\x00\x00" func runtimeSyntaxPrivoxyConfigHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPrivoxyConfigHdr, "runtime/syntax/privoxy-config.hdr", ) } func runtimeSyntaxPrivoxyConfigHdr() (*asset, error) { bytes, err := runtimeSyntaxPrivoxyConfigHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/privoxy-config.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPrivoxyConfigYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x52\xcb\x6e\xe4\x38\x0c\x3c\xa7\xbf\x42\xf0\xe6\x90\x6c\x83\xd9\xcb\xee\xc5\x97\xfd\x90\x20\x01\xd4\x52\xd9\x16\x42\x3d\x86\xa2\x3b\x69\x8c\x3e\x7e\x20\xa7\x9d\x64\x82\xb9\xe8\x41\x16\xc9\x62\x91\x53\x60\xe8\xa5\x60\x34\x45\xc2\x39\xbf\x5d\xc8\xe5\x34\x85\xf9\x70\xf0\x50\x38\x1d\xcd\xc1\x18\x63\x3a\x2c\xd9\x88\xd1\x0c\x57\xdc\x3f\xef\xb8\xdb\xe1\x70\x90\x95\x51\xc7\x0d\x47\xa6\xaa\x55\x44\x24\x1d\xcd\x70\x67\x9d\x43\x51\x0a\x49\x21\xfd\x05\x4f\x82\x1f\x2b\xaa\xd6\x66\x9d\x86\x9c\x6a\xcf\xdc\xac\x8f\x21\x91\xf5\x5e\x50\x6b\xb3\xcc\xf9\x95\xdc\x1c\x76\x30\x39\x59\x93\x5b\x42\x9a\xdb\x69\x9d\x26\x08\x71\x88\x41\x9b\xcb\xb1\xf4\x88\x90\x13\x31\xce\xe0\xd6\x49\xf9\x20\xfd\x4e\xd8\x0a\x50\x5d\xac\xf4\x48\x8f\xd3\xda\xcf\xc9\xae\xac\x54\x21\x67\x08\x69\x88\xc8\xab\x36\x8f\x74\xa1\xce\xb6\xd6\x86\x64\x4f\x0c\xfa\x92\x7c\x37\xc1\x07\xa5\x2b\xef\xdd\x26\x88\x59\x41\x8b\x6a\x21\xcd\xf3\xcc\xf8\xe6\xf9\x30\x4e\x59\x1c\xe8\xc4\xd9\xbd\xd4\x36\x05\x56\xc8\xd6\xfc\x94\xe5\xd5\x8a\xdf\x6f\x78\xba\xb2\x27\x81\x4a\x40\xdd\x3d\x54\x7b\xe8\xbf\xdf\xbe\xf6\xf7\xff\x7f\x6d\xb1\xc9\x33\xc8\x56\x42\x2c\x7a\x21\x9f\x5d\xcf\xb4\x4a\xaa\x94\x5f\xda\x92\xab\xf6\x51\xb6\x17\xa0\x90\xe5\x70\xc6\x87\x0c\x1c\xaa\xe2\x73\x10\x9c\xe7\x2e\x26\xe7\x79\x23\x1a\xed\x1b\x39\x0e\x48\x4a\x9f\xfa\xd6\x56\x20\x71\xd3\x65\x53\xaf\x48\x5f\xa2\x90\xa6\x4c\xab\x70\xab\x21\xcd\x0c\xd2\x45\x60\x3d\x7c\xeb\x1c\xa1\x1f\x05\x6b\xe1\xa0\xc4\x56\x66\xd0\x94\x25\xd6\xa6\x88\x85\x7b\xd5\xab\x6e\x9a\x19\x62\x15\x54\x42\x01\x87\xd4\x47\xa9\xb2\x56\xdd\x28\x6d\xaf\xcf\x6a\x6b\x85\x50\xb4\x69\xb5\x7c\xff\xf8\x38\xd6\x62\x1d\xc6\xa7\xa7\xe1\xba\x9b\x2e\xc7\x7d\x33\x9f\xdb\x17\xff\xfd\x5f\x77\x8f\xcf\x3f\x9f\x1e\xfe\xbe\xff\xff\x76\xc7\x86\xe4\xb7\x46\x17\x2b\x0f\xaf\x4b\x50\xbc\x83\xcd\xf0\x25\xee\xf8\x27\xf4\x68\x86\x9b\xa3\x39\x36\x73\xbc\x39\x0e\x87\x5f\x01\x00\x00\xff\xff\xcd\xb0\x1c\xf1\x60\x03\x00\x00" func runtimeSyntaxPrivoxyConfigYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPrivoxyConfigYaml, "runtime/syntax/privoxy-config.yaml", ) } func runtimeSyntaxPrivoxyConfigYaml() (*asset, error) { bytes, err := runtimeSyntaxPrivoxyConfigYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/privoxy-config.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPrivoxyFilterHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x28\xca\x2c\xcb\xaf\xa8\xd4\x4d\xcb\xcc\x29\x49\x2d\xe2\x8a\xd1\x83\x30\x54\xb8\xb8\x00\x01\x00\x00\xff\xff\x80\x7f\x47\x23\x1a\x00\x00\x00" func runtimeSyntaxPrivoxyFilterHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPrivoxyFilterHdr, "runtime/syntax/privoxy-filter.hdr", ) } func runtimeSyntaxPrivoxyFilterHdr() (*asset, error) { bytes, err := runtimeSyntaxPrivoxyFilterHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/privoxy-filter.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPrivoxyFilterYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\xd0\xcb\x6a\xc3\x30\x10\x05\xd0\x75\xf4\x15\x83\x9a\x85\x5d\x21\x7f\x80\x36\x21\xa4\x6a\x1a\x08\x5d\xb8\xa6\x1b\x3f\x40\x38\x63\x2c\xb0\x15\x23\x4d\x1f\x69\xfd\xf1\x25\x71\xfa\x24\xdb\x6e\x87\x33\x5c\xee\x6d\x6c\x87\x74\x18\x50\xc1\xe0\xed\xf3\xfe\xf5\x20\x1b\xdb\x11\x7a\xc6\x76\x48\x58\x93\x02\x06\x00\x70\x64\xce\xf4\xa8\x80\x17\x45\x32\x91\x39\x67\xcc\x3f\x75\x18\xd4\x89\x48\x08\x64\x08\x7b\x74\xa4\x80\x57\xd1\xed\x66\x9b\xe9\x74\x5c\x6d\x37\xfa\x3e\x93\x77\x7a\x79\xa3\x53\x79\xf1\x98\x2d\xd7\x6b\x9d\x8e\x0f\x3a\x7d\xd4\xe9\x1f\xf9\xfb\x38\xc9\x58\x41\x6e\xe4\x9b\x2c\x05\x3f\x27\xdb\x1d\x3a\xb2\x8d\x45\xff\xef\xd1\x9f\x91\xf5\xde\x05\x32\x8e\x92\x30\x60\x6d\x4d\xb7\x6a\x8d\x3f\xad\x53\x14\xc9\xe2\x1b\xf5\xe7\x3d\xa2\x6a\xcc\x73\x15\x06\x53\xa3\x2a\xcb\xf8\x2a\xca\xab\xf7\x32\xb9\x8e\x17\xf3\xaf\x0e\xee\x58\x42\xd6\xad\xf1\xc9\x4b\x6b\x09\x27\x0c\xfc\xc7\x9f\xb8\xa4\x15\xf0\x99\x00\x31\x82\x98\x09\xce\x3e\x02\x00\x00\xff\xff\x80\x28\x92\xe2\xd1\x01\x00\x00" func runtimeSyntaxPrivoxyFilterYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPrivoxyFilterYaml, "runtime/syntax/privoxy-filter.yaml", ) } func runtimeSyntaxPrivoxyFilterYaml() (*asset, error) { bytes, err := runtimeSyntaxPrivoxyFilterYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/privoxy-filter.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxProtoHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x28\xca\x2f\xc9\xe7\xd2\x88\xd1\xd3\x00\xb3\x34\x55\x54\x34\xb9\xb8\x00\x01\x00\x00\xff\xff\xb6\x32\x61\x16\x15\x00\x00\x00" func runtimeSyntaxProtoHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxProtoHdr, "runtime/syntax/proto.hdr", ) } func runtimeSyntaxProtoHdr() (*asset, error) { bytes, err := runtimeSyntaxProtoHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/proto.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxProtoYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x92\xcf\x6e\x9c\x3c\x14\xc5\xf7\xf3\x14\x16\x1a\x69\x20\xf9\x60\x48\xf2\x29\x6d\xd8\x44\x55\xdb\x48\x5d\x54\xd9\x74\x31\x2a\x17\x55\x06\xee\xa4\xd6\x80\xed\xda\x97\x6a\x46\xb9\x79\xf7\x0a\xc8\x1f\x44\x54\x35\x1a\xaf\xe0\xfa\xd8\xbf\xa3\x73\xbc\x55\x0d\xd2\xc1\x62\x26\xac\x33\x64\x16\x8b\x1a\x09\x2b\xca\x16\x42\x08\xd1\x6f\x6a\xd9\x62\x26\x82\x10\x20\x09\x07\x49\xb4\x5c\x46\xc1\x62\xe1\xba\x06\xfd\x28\x8b\x85\xaa\x51\x93\xda\x2a\x74\x99\x08\x00\xca\xfc\x43\xfc\xfd\x47\x91\xa7\xf1\xd5\xf0\x71\x0a\x50\x06\x8f\xd2\x11\xd6\x8b\x42\xa5\x29\x7c\xcf\x67\x97\x7c\x71\xce\x97\xff\x47\x11\x7b\x72\x4a\xdf\x71\x79\x20\xf4\xec\xd0\xa2\x24\xac\xb9\x34\xa6\x61\x87\xbf\x3a\xe5\xb0\xe6\x56\x5a\x36\x96\x94\xd1\xb2\x61\xa3\xd1\x6c\xb9\xd3\xca\xe8\x09\xc2\x93\x24\x6c\x51\xd3\x13\xa7\xb5\xc6\x11\x7b\x74\xbf\x55\x85\x8c\xba\x6b\xd9\x1f\x34\xc9\x3d\x5b\x59\xed\xe4\x1d\x3e\xde\xc8\x2d\x7a\xdf\xff\x3a\x5b\xb1\x43\xea\x9c\xf6\x8c\x7b\x42\xed\x95\xd1\x9e\xc9\x44\x13\x4c\x65\xb4\x27\x39\x50\x56\x00\x00\x61\x98\xa7\xf1\x45\x71\x9d\xa7\xf1\xbb\xe2\xfe\xec\xbf\xf3\x87\x28\x5a\xfd\x4d\xbc\x1f\xc3\xb9\x91\xf1\x76\xd4\x3e\x2b\xfd\xa1\x2d\x4d\x93\x94\x4e\x56\x3b\x24\x9f\x89\x20\x0f\xa3\xfb\x87\x82\x01\x72\x06\x28\xe6\x37\x26\xba\x6b\xcb\x21\xf8\xb0\x4f\x3e\x8d\xaf\x86\xbc\x19\xa0\x4c\xa7\x94\x7e\xd8\x17\x37\x3b\x3d\x66\x3e\x16\xd9\x2f\x4f\xd2\x0d\xc1\x05\xc1\xf3\x0c\x75\x3d\x9b\xf8\x9d\xb2\x43\xba\x00\xc9\xcb\x74\xf2\x26\x9e\xd6\x94\x64\xb1\x52\xb2\xf9\xf8\x53\xba\x97\xa3\x6f\xb5\xb3\x9a\xbb\x59\x1d\x65\xc6\x3a\xb4\xce\x54\x99\x08\x92\xe4\x34\x38\xce\x69\x3b\x3c\xad\x57\x0e\xd7\xeb\xb9\xc5\xe5\x3f\xcc\x90\xa9\x4d\x5f\xdb\xb7\xdb\x4f\xb7\xbc\xd9\x6c\xf8\xe6\xcb\xe6\xeb\xe7\x28\xbb\x7e\x03\x0c\xe0\xe4\x55\x3f\x70\xb2\x3e\x9e\xf8\x27\x00\x00\xff\xff\x63\xdb\x6f\x09\x09\x04\x00\x00" func runtimeSyntaxProtoYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxProtoYaml, "runtime/syntax/proto.yaml", ) } func runtimeSyntaxProtoYaml() (*asset, error) { bytes, err := runtimeSyntaxProtoYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/proto.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPuppetHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x28\x2d\x28\x48\x2d\xe1\x8a\xd1\x2b\x28\x50\xe1\xe2\x02\x04\x00\x00\xff\xff\x49\xdf\x66\x23\x0e\x00\x00\x00" func runtimeSyntaxPuppetHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPuppetHdr, "runtime/syntax/puppet.hdr", ) } func runtimeSyntaxPuppetHdr() (*asset, error) { bytes, err := runtimeSyntaxPuppetHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/puppet.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPuppetYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\xd1\x6e\xe3\x36\x10\x7c\xf7\x57\x28\x3a\x05\x91\x64\xd8\xb9\x97\x3e\x9c\xd0\x26\x39\xa0\x2d\xd0\x87\xe2\x50\xa0\x40\x83\x23\x29\x87\xa6\x56\x16\x61\x89\x54\x48\x2a\xb1\x9d\x4d\xbf\xbd\xa0\x2c\xdb\xb2\x83\x03\x1a\x04\x32\x39\x33\xdc\x19\x5a\xeb\x2d\x65\x0d\x6e\xdb\x42\x16\xb4\x5d\xdb\x82\x9b\x4c\x0a\x70\x20\x5c\x16\x4c\x82\x20\x08\x3c\xad\x78\x03\x59\x10\x52\x3a\x6f\xdb\x28\x9c\x4c\x4c\x57\x83\xcd\x7a\x7a\x16\x14\x50\xf2\xae\x76\x59\x10\xe6\x84\x64\xb6\xe5\x02\x32\xc6\x62\xc2\x67\x3b\xe6\x1f\x9f\x67\x5f\x16\x6c\x9a\x84\x83\x5c\x16\xa0\x9c\x2c\x25\x98\xf9\x0b\x37\x7d\xd5\xc8\xcb\xb2\xa3\x38\x63\xd3\x83\x78\x9f\x2b\xa4\x74\x19\xf3\x6e\x05\xdc\xa2\xd0\x4d\xdb\x39\x30\x28\x8c\x56\x08\x1b\x10\xe8\x13\xf6\x8f\x65\x27\xd6\xe0\x70\x65\x74\xd7\x62\xa5\xad\x43\xa9\x1c\x98\x92\x0b\xc0\xf5\x4f\xb5\x5e\x49\x85\x0d\x17\xbc\x73\x95\x36\x72\xc7\x9d\xd4\x1e\x90\x35\xaf\x25\xb7\xfd\xaa\x96\xd6\x61\x23\x36\xd8\xe8\x4e\x39\x54\x7c\x25\xb5\x5d\x08\xdd\x34\x5c\x15\xa7\xad\x72\x5c\xb8\x8b\xed\xde\x76\xc0\x7a\xf7\xd1\xba\x80\x16\x54\x01\x4a\x6c\xc7\x28\x58\xc1\xeb\x7d\x8c\x31\xba\x71\x52\x95\x7a\x0c\x9d\xd5\xb6\x60\x5e\xa4\x80\x8b\xed\x47\x87\x81\xf8\x68\x72\x20\xce\x7d\x06\xf4\xcc\xca\xc9\x06\x5a\x30\x52\x17\xa8\xb4\x93\xe5\x16\x5b\x2e\xd6\x7c\x05\x68\xc0\xea\xce\x08\xb0\x68\x74\xff\x3e\xac\xa8\xa0\xe8\x6a\x38\x2e\x8a\x85\xe3\x76\x8d\x16\xea\xa5\xd6\x35\x70\xe5\x97\x8d\xde\x6b\x86\x2b\x58\x5b\x2d\x0e\xaf\x03\x8a\xc5\x1a\xb6\x1e\xea\x3f\x9c\x77\x71\xb2\xd8\x62\x67\xc1\xe0\x4b\xcd\x15\x6e\xbb\xc6\x40\xab\x71\x57\x5a\xdc\x69\x05\xb8\x6b\xb5\xae\x91\x2b\x51\x69\x93\x50\xba\x3c\xf4\x8d\x75\xdc\x41\x03\xca\x0d\xcd\x23\x6a\x6e\x2d\x16\x50\x4a\x05\x28\x4b\x84\xda\x02\x76\xaa\x80\x12\xa5\xaa\xc0\x48\x67\xcf\x8e\x6f\x9b\xa5\xae\xb3\x20\x8c\x7f\xc1\x19\xfe\x8b\x77\x3f\xee\xde\x98\xd2\x08\x1f\xf0\xe1\x21\xb9\xa7\x74\x49\xbe\xce\xbe\xb3\x29\xf9\x3c\xfb\xf2\x75\xf6\x7d\xe1\x7f\x01\xe9\xc7\x9a\x24\xe8\xff\x18\xe6\x49\x76\x90\xb2\xe9\xc8\x5e\x68\x65\x1d\xef\xc3\xdf\xc6\x24\xbf\x65\x18\x53\x4a\xe9\x6d\x92\xa4\xb7\x44\xea\x66\xc3\x52\xbc\x36\x94\xbe\xc5\x24\x7f\x1f\xc8\xf7\x24\x49\x29\x7d\x1f\xe8\xcb\x4a\x73\xeb\x8c\x54\xab\x2c\x08\x9f\x48\xfe\xc4\xd2\x27\xbc\xde\x50\xfa\xe6\x8f\xfb\x53\x3f\x96\xd3\x30\x26\x39\x0d\x07\x13\x1a\x7a\x97\x10\xaf\xc9\x5f\xff\xb0\xfb\x51\x81\x23\x12\x93\x3c\xf1\x48\x32\x20\x3f\x93\xfc\x8e\xa5\x77\x47\x9e\x90\x9c\x79\x9e\x1d\x91\x88\xe4\x91\x47\xa2\x23\x92\x93\x3c\xf7\x48\x3e\x20\x57\x24\xbf\x62\xe9\xd5\xf1\x8b\x6c\x41\x48\x5e\xef\x27\xc7\xff\xba\xc4\x4d\x4c\xf2\x9b\xe1\x0a\x37\x49\x92\xde\xe0\x35\x79\x7e\x65\xe7\xf9\x7b\x60\x1c\xff\xf9\x95\x9d\xd2\xf7\xec\x38\x7c\x0f\x8c\xb3\xf7\xc0\x38\xfa\xf3\x2b\xbb\x48\xee\xc7\xc8\xbe\x27\x3f\x91\xfc\x8d\xcd\xd3\x08\x3f\x45\x17\xe4\x7c\x69\xe4\xaa\xea\x35\x27\xd1\x49\xe5\x74\xa1\x7d\x0f\x3d\x3e\x3e\xe2\xdf\xdf\x7e\xfd\x86\xbf\xff\xf1\xf8\xe7\x6f\x48\xe9\xfd\xfe\xff\xd4\xa8\x7e\x16\xb8\x99\xa8\xb8\x99\xbf\x56\xd2\xc1\x7e\x30\x07\xe1\x68\x46\x4f\xa3\x70\xf2\x5f\x00\x00\x00\xff\xff\x70\xcf\x41\x80\xfe\x05\x00\x00" func runtimeSyntaxPuppetYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPuppetYaml, "runtime/syntax/puppet.yaml", ) } func runtimeSyntaxPuppetYaml() (*asset, error) { bytes, err := runtimeSyntaxPuppetYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/puppet.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPython2Hdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xa8\x2c\xc9\xc8\xcf\x33\xe2\x8a\xd1\x2b\xa8\x34\x52\xe1\x8a\x53\x56\xd4\xd3\xd2\xd7\x48\xcd\x2b\x53\xd0\xd6\xb4\x87\x4a\xaa\x70\x01\x02\x00\x00\xff\xff\x4b\xc8\xc6\xf0\x26\x00\x00\x00" func runtimeSyntaxPython2HdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPython2Hdr, "runtime/syntax/python2.hdr", ) } func runtimeSyntaxPython2Hdr() (*asset, error) { bytes, err := runtimeSyntaxPython2HdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/python2.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPython2Yaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x55\x4d\x93\x23\x35\x0c\xbd\xe7\x57\xf4\x66\x17\x76\x66\x97\x64\xa9\xbd\x11\xbe\x96\xa2\x8a\x23\x27\x4e\xa4\x43\x97\xdb\x56\xa7\xcd\xf8\xab\x64\x75\x92\x1e\xc4\x7f\xa7\x6c\x77\x27\x99\xec\x4c\xc1\x85\x9a\x9a\xe8\x45\xb1\xe5\xa7\x27\x59\xee\xb4\x01\x1a\x03\x6c\xaa\x30\x52\xef\xdd\xc7\xc5\x42\x01\x81\xa4\xcd\xa2\xaa\xaa\x2a\xfd\xec\x84\x85\x4d\xb5\xac\xeb\x75\x18\x3f\xbe\x59\x66\x7f\x0f\x42\x01\x6e\xaa\xe5\x1f\xaf\x5f\xad\xdf\x7d\xb8\x03\x77\xa8\xde\xdf\xff\x38\xc5\x78\xb3\x5c\x2c\x70\x30\x10\x37\x8b\xbc\xfa\x75\xd5\x0e\xda\xd0\x4a\xbb\xca\xb7\x7f\x82\xa4\x98\xdd\xab\x4a\x7a\x17\x49\x38\xca\xe1\xdb\xbb\x5f\xbd\x03\x8e\x60\x3a\xfe\x0d\x07\xe0\x5f\x84\x89\x70\x5f\xd7\x6d\x39\xf3\x49\x1c\x41\x84\xba\x1d\x08\x5e\x08\xd5\x34\xad\x88\x10\x9b\x86\x9b\x26\x6f\xd2\x2e\x63\x69\x44\x2c\x5e\x05\xed\xb0\x2f\x48\x4b\x2a\xc0\xcb\x6c\x53\xd6\x19\x58\xb0\x2d\x60\x9c\x30\xf5\x5e\x15\x9c\x24\xc9\x20\x91\x6d\x9a\x17\x38\x76\x83\x93\xa4\xbd\x9b\x29\x6a\x05\x8e\x74\xa7\xb3\x70\x89\xa4\x68\x23\x8b\x10\xcc\xc8\x52\x18\x23\x5a\x03\x2c\x7b\x64\x69\x03\x4b\x6f\x83\x36\xc0\x0a\x4c\x4a\x95\x95\x4e\xff\x07\xeb\x15\xc3\x41\x18\x86\x13\xc8\xfc\x91\xb8\x72\xa7\x0d\x01\x72\xe7\xd1\x0a\xe2\x3d\x50\xde\xb3\x37\xbe\x15\x26\x72\x2f\x62\xfe\xde\x8b\xd8\x73\x0f\x26\x70\x0f\x27\xd6\x8a\xb5\x0b\x03\xb1\x76\x04\xe8\x58\x47\x9d\x15\x94\xc0\x3a\xc6\xa1\xcd\x4a\xb1\x01\xc7\xc6\xcb\x14\xc6\x8a\x13\x5b\xed\xd8\xc1\x89\xd8\x4b\x62\x1f\xc0\xb1\x47\xc5\xc1\x1f\x19\x85\xdb\x03\xa3\x38\x36\x25\x2a\x82\x1a\x24\x30\x82\xf1\x42\x31\x42\x40\x46\x3f\x38\xc5\x71\x62\x37\x38\x9d\x92\x3d\x08\x8c\xfc\xa8\x03\x37\x8d\xb6\xc1\x23\xdd\xca\x19\x03\x48\x2d\x4c\x55\xf4\xaf\x92\xf4\x2f\x0a\xda\x34\xa2\x2d\x15\x12\x4a\x15\xeb\x8a\x4d\x02\x17\x60\x43\xb1\x1e\x50\xc2\x04\x6d\x30\x70\x9a\xb0\x93\x82\x66\x48\x42\xbb\xb9\x5b\xcc\x6c\x13\xfb\x19\x6b\x02\x7b\xd3\x43\x60\xa2\xd1\x53\x64\xa5\x0f\xb3\xb5\xbe\x10\xe9\x8c\x9f\xe2\x4f\x65\x9a\xf1\x39\xd4\x1e\xe8\x12\x21\xd5\xac\x80\x89\xa0\x76\x9a\x26\x30\xdb\xc3\x6c\x01\x8b\xcb\x40\x69\x76\xe3\x5d\xe9\x70\x13\x7b\xdd\x95\xdf\x66\x1e\x76\x28\x09\x39\x28\x4b\x9c\x77\x8f\x80\x3e\x63\x3f\xe5\xe2\x0b\xb9\xe0\xe3\x64\x8f\xd9\xe2\x2c\x2e\xce\xea\xe2\xac\x2a\xce\x19\xe3\x55\xca\x08\x01\xa6\x9c\x53\x1f\x14\x70\x45\x09\xcf\x0b\x67\x52\x38\x9d\x8c\xe7\x23\xf1\x6a\xf9\x35\x1c\xda\x02\x4e\xd3\x8e\x78\x25\x6a\xbc\x12\x35\x5e\x8b\x1a\xe7\x05\xd3\xee\xbc\xf9\x69\xd7\xa5\x99\x38\xb7\x59\x99\x8f\xb9\xc1\xf2\x50\x21\xd4\x6e\xcf\xad\xf7\x86\xdb\xa1\xeb\x00\xb9\x1d\x09\x04\xa2\x18\x33\x8a\x9c\xef\x4e\x69\x58\x9e\xba\x8b\x53\x87\x30\xb8\xc1\x02\x0a\xca\x57\x16\x38\x37\x03\x77\xe8\x1f\xc1\x45\xc8\x57\x91\x8d\x8e\xc4\xa9\x72\x6c\x45\x60\x0b\xd6\xe3\x78\xd0\x70\xe4\x32\x3a\x39\xa0\x0f\x80\x34\x32\xc2\x01\x30\x42\xbe\x51\x9c\x93\xe3\x48\x82\xb4\x9c\x0e\x8e\x84\x1c\x87\x00\xc8\x34\x04\x03\x9c\xd2\xc8\xb7\xce\x2b\xe0\x53\xbe\xaf\x4f\x73\x56\xd0\xa5\xee\x7a\x69\x62\x29\xe8\xaa\xad\x58\x3d\xfe\xb4\xfa\xbd\xf9\x7a\xf5\xcd\xee\xfd\x65\xe7\x03\x8c\x47\x8f\x6a\xde\x96\x68\x80\x85\xf3\x30\x16\x4e\xb1\x88\x2c\x62\x04\x24\x6e\x11\xc4\x43\x91\x88\xd3\x1d\xd3\x6e\x48\x73\xae\x4b\xb3\x8e\xc1\xe8\x8e\xc1\x44\x60\x38\x49\x08\xc4\x9d\x76\xc2\x98\x31\xcd\xb6\x24\x94\x9d\xa6\x1a\xeb\x8e\xcb\xbc\x60\x9d\x66\x17\x1b\x61\x5b\x25\xd8\x79\x62\x8f\x1c\x52\xf0\x80\x49\x4f\x14\x3a\xa6\x39\x44\x03\x3a\x26\x1c\xf9\xd8\x27\xe9\x8f\x9a\x7a\x1e\x35\x18\x75\x2b\x82\xf4\x28\xc8\xe3\x9c\x4c\x8b\x7a\xdf\xd3\x1e\x01\xdc\xa6\x5a\x7e\x5a\xbf\xdb\xde\xed\x2e\xcb\x53\x2d\xae\x57\xc7\xd1\xb6\xde\xac\x67\xf7\xa6\x5a\xde\x6d\xd7\x9b\x6f\xbf\x7a\xff\x8e\xbf\x7f\x55\xd7\x5f\x7c\xda\xf1\x77\xfc\x03\x7f\xe0\x15\x7f\x79\x7f\x09\x13\x04\x82\xa3\x1e\x22\xdc\x04\x6a\x51\xc8\x07\xa0\x98\x03\xdd\xdd\xff\xf5\xf7\x8e\xeb\x7a\xcb\x75\xbd\xbb\xda\xed\x86\xfc\x4c\xdd\xbc\x84\xeb\xe2\x2e\x35\xd8\xe6\x8a\xe5\x4c\x6f\x97\x95\x7e\xde\x4c\xd1\xaa\x54\x3d\xcc\x95\xcb\x7f\xcb\xb3\x1f\x9c\x7a\xc6\x5b\xde\xf9\x6a\xbb\xbb\xc4\xb5\xb9\xf4\x9f\xc5\x7b\xfb\xf6\xed\x6d\xb0\x27\xae\x67\x22\xfd\x2b\xc3\xcf\xd9\x5d\x3c\xf1\x41\x87\x9c\x7c\x5d\xaf\x6f\x4f\x39\x7f\xbd\x3d\xa9\x3c\x36\x3f\xf7\x02\x2f\x5b\xff\x2b\x9d\xcf\xd3\xfb\x3f\xc9\xbc\xa0\xf2\xeb\x5b\x12\x6f\x9e\x55\xf8\x9f\x00\x00\x00\xff\xff\x69\x10\xa7\x9c\xf8\x09\x00\x00" func runtimeSyntaxPython2YamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPython2Yaml, "runtime/syntax/python2.yaml", ) } func runtimeSyntaxPython2Yaml() (*asset, error) { bytes, err := runtimeSyntaxPython2YamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/python2.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPython3Hdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xa8\x2c\xc9\xc8\xcf\xe3\x8a\xd1\x2b\xa8\xd4\x30\xd6\xb4\x57\xe1\x8a\x53\x56\xd4\xd3\xd2\xd7\x48\xcd\x2b\x53\xd0\xd6\xb4\x87\x48\x43\x64\x00\x01\x00\x00\xff\xff\x44\xb1\x1b\x97\x2b\x00\x00\x00" func runtimeSyntaxPython3HdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPython3Hdr, "runtime/syntax/python3.hdr", ) } func runtimeSyntaxPython3Hdr() (*asset, error) { bytes, err := runtimeSyntaxPython3HdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/python3.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxPython3Yaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x56\x7f\x53\xdb\x46\x13\xfe\x9f\x4f\x21\x4c\xde\x17\x1b\x5e\x9c\xbc\x93\xe9\x74\xea\xfe\x20\x14\x4c\x9a\x49\x03\x09\xd0\x4e\xa7\x88\x68\x4e\xa7\x95\xb5\xe5\x74\xa7\xd9\x3b\x19\x9b\x6e\xfb\xd9\x3b\x77\x27\x63\x10\x21\xed\x3f\x1d\x60\x6e\xbd\xd6\x3e\xfb\xec\xb3\x7b\x2b\x4a\x54\xe0\x96\x0d\x4c\x92\x66\xe9\x2a\xa3\x37\x36\x0a\x70\x20\xdd\x64\x23\x49\x92\xc4\x7f\xab\x45\x0d\x93\x64\x90\xa6\xe3\x66\x39\x7c\x39\xda\x7f\x36\x08\x5f\x55\x20\x0a\xa0\x49\x32\xf8\xb8\xb5\x39\xde\x79\x3e\x04\x3d\x4f\x76\x47\xfb\x11\xa5\x7b\x6e\x83\x5a\x05\x36\x42\x6d\x25\x79\x8b\xca\xed\xa1\x4e\x4c\xfe\x1b\x48\x67\x83\x7b\x2f\x91\x46\x5b\x27\xb4\x0b\x39\xf2\xe1\x54\x29\x6c\x2c\x5a\x3e\x31\x1a\xd8\x82\x2a\x59\x2a\xcb\x17\xd4\x02\x1f\x0b\x65\x61\x94\xa6\x79\xa4\xf0\x00\x54\x38\x47\x98\xb7\x0e\x9e\xc0\xcd\xb2\x5c\x58\xb0\x59\xc6\x59\x16\x82\x50\x07\x5b\x2a\x61\xa3\xb7\x80\xbc\x9d\x45\x0b\xa5\x8b\x86\x91\xe1\xf4\x3a\x04\xa3\x86\x3a\x07\xb2\x9d\xed\x2a\x53\x44\xdb\x8b\x14\x0c\x4f\x38\xcb\x9e\xe0\x58\xb6\x5a\x3a\x34\x7a\x45\x11\x0b\xd0\x0e\x4b\x0c\x3a\x7a\x92\x22\xb7\x2c\x94\x62\xa1\x97\x2c\xac\x44\xe4\x1c\x35\xe7\xc6\x28\xce\x09\xc4\x75\x63\x50\x3b\xce\x97\x0e\x04\x91\x58\x06\xcb\xb2\x14\x4a\x89\x5c\x01\xcb\x8a\x38\xd4\x13\xa9\xb1\x34\x75\x83\xde\x6f\xea\x46\xc1\x82\x0b\x50\x5e\x26\x2e\xd0\xff\xcd\x6b\x53\x30\xcc\x85\x62\x58\x80\xe4\xd2\x50\x2d\x1c\xcf\xc0\x85\x67\x66\xca\xe4\x42\x59\xae\x84\x0d\x9f\x2b\x61\x2b\xae\x40\x35\x5c\xc1\x82\xb1\x60\xd4\x4d\xeb\x18\x2d\x06\x99\x25\x30\x5a\xdb\xe6\x21\x3d\xa3\x03\x62\x05\x9a\x95\x91\x1e\xa4\x16\x0b\xae\x51\xb3\x86\x85\x63\x6d\x74\x70\xb3\x91\x8e\x4d\x03\x9a\x0d\x15\xdc\x98\x1b\x6e\xc8\x97\x47\xd0\x10\x93\x69\x75\xc1\xb6\x23\x63\x0d\x39\x28\xd8\xb6\x35\xcf\x05\x59\xce\x32\xac\x1b\x43\xae\xaf\xb4\x6d\x40\xa2\x50\x49\xac\x3f\xf1\x5d\x79\x4a\xeb\x2c\x8b\x6a\x17\x05\x0b\x5d\x04\x0d\x59\xd6\x0d\x4b\x03\x24\xd7\x92\x49\xa3\xa5\x70\xfe\x70\x02\xb5\x5d\x4b\x08\x0a\x1d\xd4\xfe\xb4\x0a\x25\x78\x83\xfd\xdc\xac\x84\x2d\x70\xce\xa5\x32\xf7\x15\x05\x17\x42\x66\xe0\x62\x48\x27\xe9\x82\xd1\xb3\x40\x4f\x03\xbb\x7c\x58\x2a\x63\xc8\x63\xa0\xb2\x15\x96\x8e\xb1\x16\xae\x6e\x15\xa3\x07\xc7\x60\x69\x74\xec\x05\x43\x3d\x07\x0a\x07\xa3\x21\x46\x2f\x25\x52\x17\x66\xdb\x3c\xb6\x03\x1d\xb5\x10\x10\x17\x66\xd5\x1c\x3d\xe3\x0e\xde\xa3\x7a\x50\x0d\xb3\xbb\x2e\xdd\x02\x99\xd8\x24\xe2\xc6\xd8\xd0\x22\xf2\x54\xc9\x53\x25\xaf\x16\x75\xd5\x06\xaa\x04\x0d\x88\x55\xff\x3a\x5c\x0a\xdf\x7a\x64\x32\xc4\x14\x20\x3a\x6a\x77\x47\x9b\x33\x79\x4e\x77\xdd\xee\x84\xb2\x2b\xa1\xac\x77\xb6\x39\x2f\x0c\x8d\xb2\xec\x41\xc7\xfd\xee\x5a\xb5\x38\xee\xb1\x70\x91\xe2\x95\xe9\xdf\x93\xde\xd5\x08\x57\xc2\xb7\x0c\x74\x5b\x03\x09\x07\x5c\xa2\xf2\x5a\xc5\xc6\x95\x64\x6e\x41\x5b\x88\x2a\x2b\xb4\x8e\x6b\xd1\x70\x0d\xb5\xa1\xe5\x1c\xe1\x86\xe3\x26\xe3\x86\x4c\x03\xe4\x96\x5e\x98\x19\x30\xc1\x1c\xc8\x42\x18\x5f\x5e\x55\x20\x1c\xca\x2e\x77\x2c\xa7\x01\x62\xd7\x36\x0a\xd8\xf3\xe6\x5b\x6c\x1e\xce\x72\x01\xa5\xef\xf0\x53\xeb\xa2\x80\x32\xb9\x14\x7b\xb7\x07\x7b\xbf\x66\x2f\xf6\xbe\xba\xda\x5d\x47\x5e\xc3\xf2\xc6\x50\xb1\x0a\xf3\xb9\xa1\x86\xbb\x4d\xe8\x9b\x27\x2c\x0b\x6b\xfd\xd4\x08\xbb\xd4\x92\xc5\x8d\x40\x17\x77\x4c\x94\x29\x4c\x3c\xea\xd6\x0f\x76\x19\x86\x1b\x14\x96\x0c\xca\x02\xc3\x42\x42\xe3\xb8\x44\x2d\x94\x5a\xfa\xc5\xe1\xa5\xaa\xbb\x95\xc1\x58\x72\xbc\x9d\x8c\x9a\xd1\xb2\x12\x75\x5e\x88\xf5\xb5\xd7\x26\x4e\x94\xcf\x42\x02\xad\x17\xcc\xb5\xa4\xd9\xd1\x92\x6f\x2a\xbf\xb0\x6e\xd0\x55\xbc\x44\x50\x45\x5f\x13\x69\x48\x38\x43\xab\xda\x72\xc2\x59\xe5\x66\x04\xa0\x27\xc9\xe0\xd5\x78\xe7\x72\x78\xb5\x7e\xdc\x77\xe5\xfe\xd3\x76\x59\xe7\x46\x8d\x57\xee\x49\x32\x18\x5e\xfe\xf9\x71\x3c\xf9\xfa\x7f\xbb\x3b\xfc\xed\x66\x9a\xfe\xe7\xd5\x15\x7f\xc3\xdf\xf1\x73\xde\xe3\xff\x8e\xd6\x40\x8d\x20\xd0\xae\x02\x0b\x3d\xa8\x9c\x84\xbc\x06\x67\x03\xd4\x70\xf4\xfb\x1f\x57\x9c\xa6\x97\x9c\xa6\x57\xf7\xa2\x75\x1b\x5e\x1a\xbd\xf7\xd2\x38\xba\x63\x53\x2e\x7d\x0b\x87\xd9\x7e\x38\x47\x3b\xc3\x34\x1d\x0f\x7b\xbe\xd1\xfe\x68\x7f\x08\x8f\x9c\x5e\x9f\xa8\x0c\xd6\x42\x7d\x2e\xc7\x8b\x3c\xc4\xfd\xff\x6a\xb4\x1b\x82\xba\x97\x13\xea\xcf\x06\x99\x98\xec\xcb\x7b\x51\x5b\x89\x91\xee\xb3\x41\x8b\x8e\xa1\xd8\x2b\x57\x71\x5b\x49\x05\x8b\x8d\x7e\x94\x75\x84\x7a\x36\xe9\xa4\x4a\xfc\xac\x52\x98\xd3\xf0\x33\xb8\xf3\x83\x2e\x3e\xe1\x8d\xff\x5e\x24\x97\x57\x6b\xdc\x3a\x0c\xfa\x23\xbc\xed\xed\xed\x3e\xd8\x03\xd7\x27\x90\xfe\x96\x61\x1f\x70\x98\x0e\xf8\xd9\x68\xed\xb5\xd7\xd8\x04\x3d\xd2\x74\xdc\xcf\x74\xf7\xb1\x9f\x2d\xbe\xc0\x0e\x2b\x41\xeb\xd0\x7f\x4a\xe9\x51\x89\xc3\xed\x7f\x99\xd0\x13\x6a\x6f\xf5\x89\x3c\x7b\xa4\x74\xb2\x95\x1c\xbc\x3d\x48\x0e\x4d\x01\x89\x13\x33\x9b\x0c\xdf\x4f\xdf\x27\x2f\xbf\x78\x31\xea\x31\x71\xa6\x30\xbe\x94\x8b\xd3\xa3\x53\x3e\x7e\xf3\xcb\xbb\x29\xff\x70\x70\xf8\x96\xbf\xff\xe9\x35\x9f\x9c\x5e\x4c\xf9\xf8\xe0\x03\xbf\x3b\x99\xbe\x3b\x3d\x79\x73\xc8\x67\xd3\x0f\x7c\x76\x3c\xe5\x37\x47\xd3\x03\x7e\x7f\x7a\x76\xc1\x69\xba\x1f\x7f\x79\x73\x73\x93\x5f\xff\x78\x7a\x7e\xce\xe7\xd3\x29\x7b\xbc\x43\x3e\xbf\x38\xb8\xe0\xb3\x9f\x8f\xf8\xf0\x6c\x7a\x34\x9a\xec\x0f\x36\xfe\x0a\x00\x00\xff\xff\xd2\x5b\x6f\x4d\x11\x0b\x00\x00" func runtimeSyntaxPython3YamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxPython3Yaml, "runtime/syntax/python3.yaml", ) } func runtimeSyntaxPython3Yaml() (*asset, error) { bytes, err := runtimeSyntaxPython3YamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/python3.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xe2\x8a\xd1\xd3\x28\xaa\x09\xd2\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\x9b\x58\x03\x2f\x0c\x00\x00\x00" func runtimeSyntaxRHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRHdr, "runtime/syntax/r.hdr", ) } func runtimeSyntaxRHdr() (*asset, error) { bytes, err := runtimeSyntaxRHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/r.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x91\x6f\x6b\xdb\x40\x0c\xc6\xdf\xfb\x53\xdc\xbc\x6c\x8d\xd7\xd9\xeb\xdb\x79\xff\x08\x5d\x02\x85\xcc\x85\x2e\x85\x40\xd5\x85\xb3\x23\x37\x47\xed\xb3\xa7\x93\x69\x02\xfa\xf0\xe3\x6e\x5d\x52\xb2\xc1\xf6\x66\x07\x06\xe9\x91\xc4\xef\x91\x55\x9b\x06\x79\xd7\x63\xae\x28\x8a\xd6\xc8\x58\x71\x1e\x29\xa5\x94\x2f\x58\xdd\x62\xae\x62\x80\x6c\x4c\x72\x95\x8c\xe2\x28\xa2\xa1\x41\x97\x47\xa1\x25\x55\x8e\x35\x63\x8b\x96\x43\x57\x39\x6e\x4c\x49\x9a\x76\x42\xf8\x7d\x30\x84\x52\x12\xea\x7b\xc1\xc6\xa1\xd4\x1d\x49\x3d\xd8\x8a\x4d\x67\xc5\xd4\x62\xea\x20\x1b\x2b\x16\xb7\x2c\x1e\xe5\xc4\x3d\x18\xae\x36\x42\xd8\xa3\x66\xe9\xc9\x58\x16\xa6\x9d\xff\xce\xb5\xaf\x18\xb7\xb8\xba\x9e\x0a\x21\x0f\x64\xe5\x61\x63\x1a\x4c\x00\xca\xf8\xd1\x4f\xd5\x59\xc7\x7a\x6f\x67\x21\xa1\x7b\x26\xb3\xc9\xfc\xeb\x54\x8a\xeb\xf9\x5c\x2e\x6c\x2d\x85\x2e\xa4\x98\x48\x31\x59\x19\xcb\x78\x87\xb4\xf2\x31\xa1\x6e\x42\x50\x75\x6d\xdf\xe0\xf6\x67\xbc\xd1\xa4\x2b\x46\x5a\xfd\x89\x93\xd9\xa1\x2d\x91\x72\x15\x8f\x01\xca\x9b\xb3\xf4\xed\xed\x29\x40\x29\x00\xe5\xd9\xd6\xa7\x93\x74\xa6\xd3\x3a\x88\xc9\xaf\x61\xb7\x6b\xcb\xae\xc9\xba\x1e\x49\x73\x17\x86\x6f\xb2\xfc\xdd\xeb\xd3\x57\xf2\xe1\x19\xc0\x8b\x5b\x79\x2f\x1f\xe5\x8d\xa4\xf2\x52\x00\xbe\x09\xc0\x28\x89\x55\xb4\x47\xb7\xe1\x87\x87\xd4\x3f\xc7\x9a\xfc\xc2\xcf\xe3\xbd\x84\x76\x9d\xab\x78\x74\x10\x1e\xaf\xa6\x9e\xbc\x54\x71\xb7\xee\x3c\x7c\x71\xf9\xf9\x52\x96\xcb\xa5\xcc\x2e\x96\x5f\xa6\x49\xfe\x29\x8e\x8e\xd7\x74\x4c\xc6\xde\xfd\xce\x84\xf8\x18\xfa\x54\x71\xf7\xa6\x0f\x97\x00\xc8\xfe\xe2\xe5\x40\xea\xb1\x32\xba\x39\xdf\x68\x3a\x8c\xfe\xab\x9d\x93\x63\x37\x27\xff\xc3\xcc\x8f\x00\x00\x00\xff\xff\x74\xc8\xc8\xba\x33\x03\x00\x00" func runtimeSyntaxRYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRYaml, "runtime/syntax/r.yaml", ) } func runtimeSyntaxRYaml() (*asset, error) { bytes, err := runtimeSyntaxRYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/r.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRestHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x2a\x2e\xe1\x8a\xd1\x2b\x4a\x2d\x2e\x51\xa9\x89\xd1\x2b\x2a\x2e\x51\xe1\xe2\x02\x04\x00\x00\xff\xff\xb3\x85\x03\xda\x14\x00\x00\x00" func runtimeSyntaxRestHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRestHdr, "runtime/syntax/reST.hdr", ) } func runtimeSyntaxRestHdr() (*asset, error) { bytes, err := runtimeSyntaxRestHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/reST.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRestYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x90\x4d\x6a\xc3\x30\x10\x46\xf7\x3a\xc5\x20\x7b\x25\xd7\x82\x76\x39\xe0\x93\x64\xe2\x1f\x9c\x49\x11\x38\x8a\xd1\x4c\x17\xa5\xed\xdd\x8b\x6a\x9b\x16\x2a\x82\xb4\xf8\x78\xef\x6d\xa4\x6b\x58\x58\xdf\x57\x46\x48\xa2\xc6\x5c\x58\x79\x56\x34\x00\x00\x59\xc5\xe9\xc6\x08\x96\xc8\x27\x16\xad\x3f\xf3\x10\xad\xad\x31\xe9\x6d\x61\xd9\xc2\x16\x44\x27\xe5\x1b\x47\xfd\x69\x1d\x91\x3b\xf5\xee\xdc\x6c\xd3\xee\xd1\x9a\x78\x4d\xf7\x19\xc1\x22\x1e\x6c\xbe\x47\xd1\x29\xaa\x17\x4d\x21\xbe\x22\xd8\xf1\xd4\x8f\xe7\x66\x1c\x3e\x9e\x9f\x5e\xbe\x1e\x64\x7b\x37\x1e\x49\xb8\x70\xd4\x70\x0d\x9c\x10\x6c\x4f\xe4\x89\x3c\x78\x57\x97\xfd\x30\xfc\x75\xdb\x07\xd8\xbe\xaa\xaa\xe6\x1f\xdc\x1e\x41\xe4\x7e\x95\xac\x3c\x87\x69\xc9\xb6\xeb\xba\x22\x6f\xdb\xb6\xc8\x89\xf6\x5b\xb6\x36\x9f\xac\xbe\x03\x00\x00\xff\xff\x66\xfb\x63\xc1\x98\x01\x00\x00" func runtimeSyntaxRestYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRestYaml, "runtime/syntax/reST.yaml", ) } func runtimeSyntaxRestYaml() (*asset, error) { bytes, err := runtimeSyntaxRestYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/reST.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRenpyHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x4a\xcd\x2b\xa8\xe4\x8a\xd1\x2b\x2a\xa8\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\xb8\x46\x2f\x78\x0e\x00\x00\x00" func runtimeSyntaxRenpyHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRenpyHdr, "runtime/syntax/renpy.hdr", ) } func runtimeSyntaxRenpyHdr() (*asset, error) { bytes, err := runtimeSyntaxRenpyHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/renpy.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRenpyYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\xb1\x72\xdc\x3c\x0c\x84\x7b\x3d\x05\xc7\xbf\x0b\x5f\x61\x3f\xc0\x75\x7f\x9f\x2a\x71\x79\x0d\x44\xad\x4e\x88\x21\x90\x01\xc1\x39\xcb\x83\x87\xcf\x9c\x94\x38\x99\x49\x85\xe1\xec\x0e\xb9\x1f\x17\x33\x0b\x7c\xab\x38\x27\x83\xd6\x6d\x18\x26\x38\xb2\x9f\x87\x94\x52\xba\x8b\x4a\x2b\xce\xe9\xe1\x72\x79\xb1\xba\x3d\x3e\x0c\x83\x75\x41\x3b\xf4\xff\xd2\xb7\x6c\x5c\x3d\x09\xe9\xb5\xd3\x15\xe9\x0d\xdb\xad\xd8\xd4\x5e\x76\xfd\x39\x35\x27\xc7\x0a\xf5\xfd\x8a\xf1\xa9\x6e\xbe\x14\x0d\x56\xf6\x00\x99\x6c\x31\x61\x66\xc5\x7d\x50\x17\x0f\xa1\x11\x12\x99\x44\xe2\x7b\x5f\x6b\xf0\x4a\x57\x84\xd0\x06\xc3\x74\x1c\x5a\x36\x40\xa3\xf9\x26\x08\x37\xd2\x36\x17\x5b\x63\x85\xf6\x68\x4b\xb9\xc5\xc2\xd3\xdd\x05\x45\x90\xc7\x8d\x7d\x89\x8f\x62\x13\x2c\x46\x2c\xac\x53\x54\xea\x0d\x51\x85\xb6\x68\x5e\x6a\xcc\x34\xa1\x74\xdf\x27\x6b\xfc\xe8\xe8\x38\x5d\x2e\xe3\xc3\x2f\xca\xff\x5f\xbf\xfc\x43\x76\x7c\xda\x0e\x65\xa8\x20\x8f\x51\x4a\x7e\x8b\xbc\x14\xce\x88\x4a\x46\x22\x90\x78\x7a\x8f\x2d\x4e\x4f\xb5\xb4\x28\xf3\xdc\xe0\x41\x9a\x97\x62\x41\xc2\x57\x8d\x0c\x75\x58\x38\x0b\xe2\xa3\x94\xf5\x14\xce\x2b\x42\x58\x41\x16\xa0\x76\x0f\x44\x52\x17\x8a\xd6\xc7\xca\xef\x90\x3f\xc9\x9e\x13\x4f\x50\xe7\x99\x61\x47\x96\x0a\x6b\xdc\x1c\xea\x7f\x99\x5a\x45\x66\x92\xdd\xf1\x98\x7e\x43\xbd\xd2\x98\xf2\x42\x46\xd9\x61\x2d\x91\x21\x69\xf1\x44\x22\xe5\x86\x29\xb1\xa6\xaf\xf7\x8d\x48\x6d\xaf\xf8\x93\x1b\x66\xe5\x78\xcc\x3f\x43\x68\x96\x3e\xe1\x9c\x8e\x76\x87\x9f\x01\x00\x00\xff\xff\x38\x17\x3e\x93\x54\x02\x00\x00" func runtimeSyntaxRenpyYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRenpyYaml, "runtime/syntax/renpy.yaml", ) } func runtimeSyntaxRenpyYaml() (*asset, error) { bytes, err := runtimeSyntaxRenpyYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/renpy.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRpmspecHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x2a\xc8\x2d\x2e\x48\x4d\xe6\x8a\xd1\x03\x51\x2a\x35\x31\x7a\x50\x11\x15\x2e\x2e\x40\x00\x00\x00\xff\xff\xd9\xd5\x93\x8f\x1c\x00\x00\x00" func runtimeSyntaxRpmspecHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRpmspecHdr, "runtime/syntax/rpmspec.hdr", ) } func runtimeSyntaxRpmspecHdr() (*asset, error) { bytes, err := runtimeSyntaxRpmspecHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/rpmspec.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRpmspecYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x55\xdf\x6f\xdb\x36\x10\x7e\xae\xff\x0a\x41\x73\x11\xc9\x81\x0d\x03\x71\xdd\x44\x0f\x0b\xd2\x25\x18\x0a\x64\x71\x60\x37\x7d\x98\xe9\x18\x34\x75\x96\x89\x50\x24\xcb\xa3\xbc\x64\xbd\xfd\xef\x03\x25\xff\xc8\x1a\x7b\x03\x16\x20\x77\x1f\xc9\xef\x3e\xde\x91\x47\x79\x29\x15\xf8\x17\x0b\x59\xe4\x6c\x89\x16\x44\xab\x95\x83\x07\xe1\xb3\xa8\x15\x45\x51\x14\xd6\x35\x2f\x21\x8b\x62\xc6\x7a\x81\xd0\x26\xc6\x7a\x1b\x72\x3b\x6e\xb5\x5c\xa5\x00\xb3\x9a\xdc\x8d\xac\x03\xeb\x8c\xa8\xd9\x8b\xe4\xb3\x30\x9a\x6e\x9e\x85\xaa\x50\xae\x61\x84\x0d\xce\x61\x84\x69\x16\x1f\x8c\xf8\x54\x49\x95\x5f\x39\xb1\xa2\x1d\x92\x21\x9b\xca\x01\xee\x95\x6a\xc2\x46\x2b\xe0\x63\x6a\xbf\x18\xbd\x54\x52\x78\xa4\xd1\x02\x8d\x02\x0f\x48\xf7\xce\xac\x65\x0e\x48\x63\xf8\x56\x49\xf7\x0a\x30\x96\xf4\x3a\x8c\xa5\x74\xa3\x57\x5c\x0b\x40\x9a\x54\x45\x01\xe8\xb1\x49\x66\xaf\x56\x0f\x5f\xc5\x0b\x53\x96\xa0\xf3\x20\x0e\x63\xf8\x46\x93\xca\x5a\x05\x25\x68\x7f\xb4\xd0\x1b\x6b\xc4\x8a\x26\xe0\x24\x57\x74\x67\xd0\x54\x4e\x00\xdd\x19\xcb\xfd\xf1\x7a\xae\x2a\x6f\x82\x7e\xf0\xa1\x0e\xda\x4c\x04\x7c\xfc\x0c\xec\x8b\x93\xc5\xca\xd3\xad\x14\xa0\x11\x68\x52\x95\x25\x77\x2f\x5b\xbf\x2b\xfb\x5a\xa2\x77\x72\x51\x79\x69\x34\x7d\x05\x9d\x1b\x47\xf7\x5c\x3c\xf1\x02\x1c\xfd\xea\x4c\x65\x69\x52\xa7\x39\xed\x77\x2f\x66\x1d\xba\x0f\xa9\x6e\x70\x73\x22\xc6\xf8\x70\x04\x4b\xf9\x7c\x2c\x9b\x3b\x5e\x02\x7d\x05\x87\x61\x8f\x31\x28\xe0\x08\xf4\xe0\x14\x3d\x8c\x6f\xdf\xc6\xd4\xc3\xf0\x87\x9e\x3b\x9f\x45\xf1\x63\xd2\x64\xd0\xec\x9d\xc6\x3b\x02\xe8\x3c\x8b\xe2\x6c\x3f\xd1\x74\x65\x34\x9d\xb5\xde\xe4\x91\xc8\xb3\xf3\x21\xc9\x41\x30\x1f\x82\x19\x9e\x0f\x89\xfb\x95\x32\x9a\x24\x1f\x0e\x88\x2b\xbb\xe2\x8d\x85\xf5\x87\x1d\x18\x36\xc8\x0a\xbe\x85\xb0\xde\x83\x8f\x84\x96\x3b\xd1\xd8\xf5\x45\xe3\x87\x03\xee\xca\xf5\x99\xa2\xe0\x06\x8b\xc6\xa9\x92\xa4\x45\x2a\xa5\x45\x50\x64\xad\xa8\xff\x25\x82\x93\x80\x01\xdb\x3d\x1c\x0e\xa8\x1c\x9e\x3f\xd5\xa6\x94\xda\xd3\xa4\x90\xe4\x70\xd8\xef\xf7\x49\x9e\x7d\xec\x13\x9e\x5d\xf4\x9f\x6b\x4b\xda\x70\xb7\x3b\x94\x7f\x16\xbc\x0c\x2b\x24\x97\x7a\xe3\x0d\x86\x81\xc1\x1d\x59\x18\x8d\x9e\x6b\xdf\x0b\x2d\xa0\x8b\x70\x5b\x71\xc2\x18\x63\x3d\x9a\x3e\xb2\x78\x96\x76\x58\x4c\x27\xbb\x99\x93\x59\xda\x39\xd9\xc6\xa2\xe7\xbe\x6e\xf6\x2c\x8a\xdf\x27\x72\x49\xa0\x10\x08\x74\x2e\x97\x94\xc3\x52\x6a\xa0\x42\x99\x05\x57\x54\xe9\x66\x9c\x1e\x0c\x9d\x5f\x26\xd3\xab\xee\xef\x73\xde\xfd\x73\xde\xef\x5e\xcc\x67\x9d\x03\xbc\x37\x2d\xf1\x9e\xb1\xef\x3f\xf6\x01\x63\x7f\xfd\x4b\x27\xfc\x87\xd8\x7c\xfe\x7f\xe5\x02\xb3\x9d\x8c\xef\x7f\x9b\x7f\x7a\xf8\x7c\x7b\x3d\x1f\x8f\x46\x5f\x52\xc6\x7e\xde\x55\x61\x41\x48\xae\x42\x1f\xbf\x4f\x16\xe1\xc5\xb4\x49\xac\xb8\x2e\x40\x99\x82\xc4\x0a\xc4\x53\x9b\x84\x02\xae\xdb\x94\x03\x0a\x27\x6d\x78\x8b\xe9\xc1\xf8\xf0\x61\x46\x92\xe1\xda\x94\x6a\x93\x6d\x1e\x2a\x85\x5b\x6f\x1f\x8e\xb0\xae\x5e\xae\x74\xb0\xde\x71\x8d\x64\x0d\xfa\xda\x84\x49\x83\xbe\x9e\x3d\x1c\xed\x9d\x2c\xc2\x87\x60\xe3\xa5\xde\xa2\x4d\xf8\x66\x54\x69\x5a\x83\x93\xcb\x97\x26\xfd\x57\x0d\x56\x6e\xce\x28\x79\xa4\xe9\x34\x43\xcb\x05\x64\xb3\x59\xfa\x53\x32\x7d\xfc\x3e\xeb\x75\xd2\xcb\xf6\x8f\xcd\x18\x36\x66\xac\xd3\xeb\xec\x56\xa4\xce\x41\xfb\xae\x58\x71\xd7\xfb\x23\xfc\x32\x34\x32\x51\xfc\x4a\xf1\xf4\x10\x3b\x8b\xe2\x77\xa7\xd1\x29\x45\xa7\xef\x4e\xb7\xcb\xde\xe4\x26\x8b\xe2\x2f\xa3\xeb\x51\x76\x19\xb7\xfe\x0e\x00\x00\xff\xff\x1f\xe9\xab\x07\x0a\x07\x00\x00" func runtimeSyntaxRpmspecYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRpmspecYaml, "runtime/syntax/rpmspec.yaml", ) } func runtimeSyntaxRpmspecYaml() (*asset, error) { bytes, err := runtimeSyntaxRpmspecYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/rpmspec.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRubyHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x2a\x4d\xaa\xe4\x8a\xd1\xd3\x28\x4a\xaa\x29\x4a\xcc\x4e\xad\x49\x4f\xcd\x2d\x2e\x48\x4d\xd6\x54\xa9\x89\xd3\x70\x4f\xcd\x4d\xcb\xcc\x49\xad\x49\xce\xcf\x4b\xcb\x4c\xd7\x2b\x2a\xad\x09\x4a\xcc\x4e\x05\x0b\x39\x27\x16\x80\xe9\xb0\xc4\xf4\xa2\xc4\xbc\x12\x30\xdb\xbd\x34\xb1\x28\x05\xcc\x72\x2c\x80\xc8\xba\x25\x16\x43\xa4\x02\x72\x4a\xd3\x33\xf3\x20\xcc\x7c\xb0\x1a\x4d\x15\xae\x38\x65\x45\x3d\x2d\x7d\x8d\xd4\xbc\x32\x05\x6d\x4d\x7b\x90\x43\x34\x14\x6a\x54\x34\xb9\x00\x01\x00\x00\xff\xff\xa6\xd8\x44\x07\x93\x00\x00\x00" func runtimeSyntaxRubyHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRubyHdr, "runtime/syntax/ruby.hdr", ) } func runtimeSyntaxRubyHdr() (*asset, error) { bytes, err := runtimeSyntaxRubyHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ruby.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRubyYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x56\x51\x53\xa3\x48\x17\x7d\xfe\xfc\x15\x88\xf1\x13\x92\x0a\x71\x1e\x97\x72\x45\x67\x27\x5a\x56\xb9\xba\xeb\x38\xbb\xd6\x74\x37\x4c\x03\x37\x91\x92\x34\xd8\xdd\x8c\x64\xbd\xee\x6f\xdf\x6a\x82\x31\x92\x68\xcd\xcb\xbe\x2c\xa5\x40\xce\xb9\xf4\x39\x7d\xfb\xde\x86\x49\x96\x83\x9e\x97\xe0\x5b\xb2\x8a\xe7\x5b\x5b\x29\x68\x48\xb4\x6f\x6d\x59\x96\x65\x19\x52\xf0\x19\xf8\x96\x4d\xa9\xe7\xc8\x18\x25\xbf\x03\x9c\xc2\x4c\x95\x90\xb8\x3d\x0c\x9d\x53\x98\x99\x28\x4c\x0a\x31\xc9\xa6\x9e\xac\xf0\x8a\xdf\x41\x03\xfd\xc2\xcb\xe6\xfa\x07\x9f\x4a\x2e\x74\x73\x7f\x5a\x71\x99\x36\x77\xc7\xe5\x82\x3d\xe1\x6a\x41\xfd\x96\x57\xd3\x4c\x2c\x6e\x8b\x26\xc6\xed\xd9\x8d\x8d\x5b\xe0\x29\x48\xdf\xb2\xc3\x9d\x6d\xaf\x3f\x72\x40\x7c\xb7\x06\x6e\x60\x0c\x3b\x16\xf6\x5c\x7b\x6b\x4b\x56\x39\x28\xbf\x89\x1e\x5a\x49\x31\x9b\x81\xd0\x5e\x2c\xb3\xe9\xad\x5e\xa0\xe6\x50\x9a\x4b\xed\x5b\xf6\xce\x8e\xbd\xc4\x40\xa4\xbe\x65\xf7\x5e\x80\x95\x91\x9e\x8f\xa1\xa5\x8b\xb4\xf0\x2d\xdb\xb9\xb9\xb9\xc1\xeb\xcb\x4f\x97\x78\x72\x76\xf3\xeb\x18\x3f\x7e\x39\x45\x4a\x83\xc5\x9f\x6b\xbf\x96\xdf\xa0\xfb\x2f\xc9\xb6\xba\x4a\x73\x0d\x8d\xb2\x59\xae\xd8\xf9\x38\x3e\x3d\xbb\xc0\xf1\xc5\x27\xe4\x79\xc6\x15\x72\x91\x62\x0c\xd3\x4c\x60\x2c\x81\xdf\x61\xc2\x15\x60\x92\x73\xa5\x30\x85\x89\xf9\xcf\x04\xa4\x94\x06\x98\x16\x08\xb9\x02\x73\xca\x26\x08\x22\x45\x10\xaa\x92\x80\x93\x42\x62\x36\xc1\x4c\xe0\xac\x48\xab\x1c\x50\x40\xad\x51\x64\x39\x8a\x42\x63\x21\xb1\x94\xd9\x77\xae\x01\x4b\x59\x98\x3a\x82\x14\xcb\x2a\xce\xb3\x04\x25\xa4\x05\x4a\x50\x49\x05\x28\x41\xcb\xb9\x39\x57\x52\xa0\x82\x7c\x82\xaa\x2a\x41\xa2\xbe\x05\x81\x95\x30\x66\x2a\x91\x83\x52\x58\x09\x9d\xe5\xf8\x60\xf0\x87\x5b\x53\x19\xf3\x0c\xf2\xd4\xa5\x34\x7e\x49\xb6\x50\x9a\x37\x73\x76\x28\xed\xe1\x11\x1e\x1d\xb9\x01\xa5\x31\x39\x1e\x7e\x65\x03\xb2\x3f\xfc\xe9\x78\xf8\x35\xe2\xc3\xbf\x58\xbf\xfb\x8c\x27\xaa\x59\xdc\x14\x96\x13\x64\x66\xd0\xfd\xda\xc4\xf3\xe1\x84\xb5\xd7\x88\xf5\x37\x68\xad\x3f\x17\x93\xfd\x0f\x8c\xec\x7f\xf8\xc1\x78\x33\x7a\x23\x11\xb1\xbe\x43\xf6\xbc\xbd\xf6\xc7\xc0\x0d\x1c\x20\x94\x0e\x59\xb0\x04\x96\xe3\xed\x58\x57\x55\x3c\xb7\xec\xcf\xf3\x59\x5c\xe4\x6a\x53\x02\xb2\xc0\x75\x88\xf5\x3f\x86\xa1\xeb\x3f\xcf\x9c\x0d\x36\x67\xcb\x54\x48\x14\x9d\x9c\x9d\x8f\xa3\x08\xa3\xe8\xfc\xec\x62\x1c\x45\x6f\x64\x76\xe4\x90\x70\xc4\xd0\xa1\x94\xd2\x91\xeb\xf6\x47\x24\x2b\x66\x35\xeb\xe3\xae\xa4\xf4\xd1\x21\xe1\x53\x4b\x3e\xb9\x6e\x9f\xd2\xa7\x96\x5e\x56\xe6\x32\x11\x4a\xcb\x4c\x4c\xd7\x3b\x63\xaf\xdb\x19\x2b\x80\xba\xcb\xca\xc6\x2f\xa5\x5e\xb7\x5f\x2c\xc2\x7e\x58\x83\xda\x5d\x91\x55\xe4\x3d\x95\x4e\x57\xaa\x66\x01\xbc\x58\xf2\xe4\x0e\x74\x87\x7e\xd5\xef\x94\x3e\xda\x6b\x6c\xab\x4d\x9f\xd6\xa9\x0d\x72\x2f\xb2\x29\x4c\x78\x95\x9b\x71\xbd\x37\x33\xeb\x41\x0d\xc9\xfa\xd4\xbf\x75\x67\xfe\xed\xbf\x36\x71\xdf\xb2\x77\xc9\xef\x7f\xb2\x80\xd2\x47\x53\x8e\xa6\x0a\xf1\x19\x71\x48\xe8\x1a\xc4\x6d\x91\x03\x12\x1e\xb2\xfe\xe1\x92\x27\x24\x64\x86\x67\x4b\xa4\x47\xc2\x9e\x41\x7a\x4b\x24\x24\x61\x68\x90\xb0\x45\xb6\x49\xb8\xcd\xfa\xdb\x6b\xad\xbe\x62\xe7\xfe\x81\xbd\x76\xd3\x00\xab\x66\xee\x1f\xd8\x8b\x97\x86\x5d\xb5\xd2\x00\xab\x4e\x1a\x60\xd5\xc8\xfd\x03\x7b\xdf\xc7\xa2\x1e\x8c\x99\xba\xe3\xa5\xee\x58\xa9\x57\x9c\xd4\x1d\x23\x75\xc7\x47\xdd\xb1\x51\xbf\xe9\x22\x2e\x8a\xbc\xdd\x6b\xb4\xac\x00\x27\xdc\xbc\x56\xcc\xfb\xe2\xfa\xea\xcb\x18\x4f\x8e\xcf\x3f\x8f\xf1\xe2\xec\x7c\x75\xdf\x69\xab\xac\x28\x41\x72\x5d\x98\x5d\x93\x0c\x07\xa3\xfe\xcf\x07\x87\xdb\x7f\xef\xfe\x1f\x43\x86\x94\xc6\x7e\x27\x7a\x59\x93\x96\xed\x10\xc7\x7d\x7c\x32\x51\x04\x29\x65\xee\x9a\xa9\x19\x4f\x64\xb1\xde\x24\x07\x07\xc3\x60\x2f\x18\x5f\x5e\xef\x05\xdd\x76\x09\xc7\x97\xd7\xef\x6c\x3d\xa5\x84\x52\x16\x89\xa7\x6e\x21\xe6\xcd\xe2\x9b\x0f\x95\x41\xd0\x7e\x9c\xfc\x13\x00\x00\xff\xff\xb4\x51\xbb\x47\x63\x09\x00\x00" func runtimeSyntaxRubyYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRubyYaml, "runtime/syntax/ruby.yaml", ) } func runtimeSyntaxRubyYaml() (*asset, error) { bytes, err := runtimeSyntaxRubyYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/ruby.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRustHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x2a\x2d\x2e\xe1\x8a\xd1\x2b\x2a\x56\xe1\xe2\x02\x04\x00\x00\xff\xff\xcf\x23\x15\x1b\x0c\x00\x00\x00" func runtimeSyntaxRustHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRustHdr, "runtime/syntax/rust.hdr", ) } func runtimeSyntaxRustHdr() (*asset, error) { bytes, err := runtimeSyntaxRustHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/rust.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxRustYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x53\x41\x6f\xf3\x36\x0c\xbd\xe7\x57\xe8\x73\xbe\x43\xd2\x20\x49\xd7\x16\xc5\xea\xcb\xb0\x75\x1d\xb0\xc3\x56\x60\xeb\x21\x58\x1c\x14\xb2\x4d\x35\x44\x65\xc9\xa0\xa8\xa4\x29\xf8\xe3\x07\x39\x49\xd3\x26\x05\x3a\x60\x3e\xd0\x12\x25\xf2\x3d\x3e\x8a\x06\x2d\xf0\xa6\x85\x5c\x51\x0c\xdc\xeb\xd5\xc0\x50\x71\xde\x53\x4a\xa9\x74\xe6\x74\x03\xb9\xca\x8a\x62\x42\xe1\x7b\xd6\xeb\x51\xb4\x10\xb6\xc7\x7d\x65\xa2\xab\x18\xbd\x53\x35\x18\x74\x98\x96\xdd\xc9\x58\x61\x0d\x8e\xd1\x20\x50\xae\x32\xe3\xd4\x5c\x8f\x5f\xcf\xc7\x37\x8f\x8b\x51\xd6\xdd\x48\xd1\x7f\x41\x00\x5a\x41\xad\xd6\x9e\xea\xb0\x0b\x0c\xac\x19\x1a\x70\xdc\x81\x96\x03\x5d\x06\x26\x5d\xb1\x68\x8b\x4f\xce\x1b\xd1\x41\x4a\xa8\x7c\x03\x52\xfa\x17\x29\x09\xf4\xb3\x54\xde\x05\x4e\x96\xd1\x45\x90\x8a\x34\x83\xd4\x5e\xea\x8d\x13\xb0\x01\x04\x5c\x6c\x04\x5e\x18\xc8\x89\xd1\xc9\x63\xd0\x69\x2b\xc6\x89\xf1\x24\x68\x04\x9b\xd6\x0a\x3a\xb1\xc0\x62\xbd\x6f\xa5\xd1\x15\x79\x69\x34\x57\x4b\x69\x7c\x2d\x8d\x5f\x81\x34\x91\xc5\x1b\x13\x80\xbd\x11\xbf\x02\x22\xac\x41\x5a\xc2\x95\xb4\xb1\x94\x36\x12\x08\x81\x11\x02\x8e\xe4\x24\xe0\x2b\x78\x23\xa9\x26\xac\x24\x80\x4d\x6b\x8a\x15\x4b\x88\x2d\x90\x30\x45\x10\x26\x8d\x2c\xa9\x07\x9d\xf1\x46\xa2\x0b\xda\x40\xfa\xe1\x2b\xd4\x12\x03\xc8\x0a\x89\xa3\xb6\xb2\x5e\x02\x81\xac\x97\x68\x41\x36\x08\xb6\x1e\x16\x45\x79\x90\xb4\x23\xfd\x26\x65\x0b\x15\x6a\x9b\xab\x2c\xa9\xff\xb8\x18\x7d\x3b\x5c\xbc\x4d\x8a\x69\xc7\xfb\xbb\xd5\x6e\xbf\x55\x7d\xfe\xf3\xf8\x9f\x45\x32\x8f\xe7\xe3\x9b\xc5\xe8\x03\xc4\x9f\xb1\x29\x81\x8e\xe3\x26\xae\x73\xef\xc2\x4f\xa3\x7e\xf1\xde\x82\x76\x9f\xc3\x0d\x3a\x1d\xba\xbe\x7c\x2c\xe7\x21\x49\x13\xa6\x77\x2e\x36\x61\xfa\x77\xa7\x5c\x98\x3e\x6c\x5a\x08\x53\xe0\x6a\xb2\x4b\xb6\x7d\xbe\x6f\xbc\x47\xa9\xda\x3d\xf7\xb3\xb4\x39\x72\x7d\x24\x16\xd1\x32\xba\x2e\x49\x50\xbc\xd4\x9c\x9e\x20\xb1\x5a\x23\x2f\x95\xf5\x6b\xa0\x4a\x07\x38\xc5\x1a\x94\xde\xdb\xd4\x4e\xc1\xd4\x26\x89\x9d\x1d\x0c\x50\xe2\x70\xf0\xa3\xfc\x70\x2d\x97\x17\x72\x7d\x35\x1c\x8a\xb9\xbc\x10\x73\x7d\xb5\x2d\xed\x58\xb7\xc0\x84\xee\x29\xdf\xf1\x51\x5b\xf0\x84\x90\x65\x6f\x3e\x70\xf5\x91\x27\x3c\x63\xdb\xd1\x28\x8a\xc9\xc1\xfb\x6e\x36\xf7\xdf\x7b\xa4\xed\x73\xb8\x5d\x6a\x3a\x84\xfe\x57\x3a\xd4\x1f\x7d\xc6\xa8\x3f\x3a\x46\x57\xf3\xc5\x21\x69\xd3\x0d\xf2\x49\xb2\xe9\xf4\x38\xd3\xf7\x2f\x8a\x60\x5f\xfb\x5c\x65\x83\x87\xfb\x5f\xef\x65\x36\x9b\xc9\x6f\xbf\xcf\xfe\xb8\x1b\xe6\x3f\x65\x5f\x83\x15\xc5\xd9\x09\xf1\xe2\x6c\xfa\xbf\x11\xf7\xe3\x75\x82\xd8\xff\x56\x14\xf3\x53\xc8\xc5\xa7\x52\xfd\x1b\x00\x00\xff\xff\x73\x64\x84\x65\x80\x05\x00\x00" func runtimeSyntaxRustYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxRustYaml, "runtime/syntax/rust.yaml", ) } func runtimeSyntaxRustYaml() (*asset, error) { bytes, err := runtimeSyntaxRustYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/rust.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSageHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x4e\x4c\x4f\xe5\x8a\xd1\x03\x51\x2a\x5c\x71\xca\x8a\x7a\x5a\xfa\x1a\xa9\x79\x65\x0a\xda\x9a\xf6\x20\x31\x0d\x85\x1a\x15\x4d\x2e\x40\x00\x00\x00\xff\xff\x75\xb3\xc8\xfd\x25\x00\x00\x00" func runtimeSyntaxSageHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSageHdr, "runtime/syntax/sage.hdr", ) } func runtimeSyntaxSageHdr() (*asset, error) { bytes, err := runtimeSyntaxSageHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/sage.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSageYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x55\x4d\x73\xe3\x36\x0c\xbd\xfb\x57\x68\xbd\xdb\xc6\x49\x6a\x6f\xaf\x75\xbf\xb6\xd3\x99\x1e\x7b\xea\xa9\x96\xab\xa1\x44\xc8\x42\x43\x91\x1c\x10\xf2\x47\x8a\xfe\xf7\x0e\x49\xc9\x76\xbc\xc9\xb4\x97\x4e\x26\xc6\x13\x05\x80\x0f\x8f\x20\xd4\xa2\x01\x3e\x79\x58\x17\x41\xed\x60\x36\xd3\xc0\xd0\xf0\x7a\x56\x14\x45\x11\xdf\x59\xd5\xc3\xba\x98\x97\xe5\x2a\xbe\xff\x30\x4f\x2f\x3a\x50\x1a\x68\x5d\xcc\xff\x78\xff\x6e\xf5\xf0\x71\x01\x76\x5f\x3c\xde\xff\x18\x3d\x16\x85\x7c\xb8\x9f\xcf\x66\x34\x18\x08\xeb\x59\x72\x7f\x5f\xd4\x03\x1a\x5e\xa2\x2d\x5c\xfd\x27\x34\x1c\xd2\xf2\xb2\x68\x9c\x0d\xac\x2c\xa7\x0d\xea\xc5\xaf\xce\x82\x04\x30\xad\xfc\x46\x03\xc8\x2f\xca\x04\xb8\x2f\xcb\x3a\x6f\xfa\x22\x8f\x62\x26\xac\x07\x86\x37\x52\x55\x55\xad\x02\x84\xaa\x92\xaa\x4a\x41\x68\x13\x6e\x8c\x0a\x79\x55\x43\x3d\xec\x32\xc2\x86\x33\x70\x4d\xb2\xb1\xee\x04\x7a\xe8\x6b\xa0\x30\x62\xee\x9c\xce\x38\x8a\x92\x40\x24\x5b\x55\x6f\x70\x6c\x07\xdb\x30\x3a\x3b\x51\x44\x0d\x96\xb1\xc5\xa4\x5c\x24\xa9\xea\x20\xca\x7b\x73\x92\x46\x19\xa3\x6a\x03\xd2\x74\x24\x4d\xef\xa5\x71\xbd\x47\x03\xa2\xc1\xc4\x52\x45\x63\xfc\xdf\xf7\x4e\x0b\xec\x95\x11\x38\x42\x93\x7e\x22\x57\x69\xd1\x30\x90\xb4\x8e\x7a\xc5\xb2\x03\x4e\x31\x3b\xe3\x6a\x65\x82\x74\x2a\xa4\xe7\x4e\x85\x4e\x3a\x30\x5e\x3a\x38\x0a\x6a\x41\xeb\x07\x16\xb4\x0c\x64\x05\x03\x26\x05\x1b\x10\x0c\x61\xa8\x93\x52\x62\xc0\x8a\x71\x4d\x4c\xd3\xab\xa3\xf4\x68\xc5\xc2\x91\xc5\x35\x2c\xce\x83\x15\x47\x5a\xbc\x3b\x08\x29\xbb\x03\x21\x75\xa8\x72\x56\x02\x3d\x34\x20\x04\xc6\x29\x2d\x04\x9e\x84\xdc\x60\xb5\x84\x91\xdd\x60\x31\x16\xbb\x57\x14\xe4\x19\xbd\x54\x15\xf6\xde\x11\xdf\xca\x19\x3c\x34\xa8\x4c\x91\xf5\x2f\xa2\xf4\x6f\x0a\x5a\x55\xaa\xce\x27\xa4\xb4\xce\xd6\x66\x1b\x05\xce\xa0\xf7\xd9\x3a\xa0\x06\x46\xd8\x7b\x03\xc7\x11\xdb\x46\xf1\x04\x59\xa1\x9d\xba\xc5\x4c\x36\xb2\x9f\x30\x32\xf4\x37\x3d\x04\x26\x18\x1c\x33\x6b\xdc\x4f\xb6\x77\x99\x48\x6b\xdc\x98\x7f\x3c\xa6\x09\x9f\x53\xed\x80\x2f\x19\xe2\x99\x65\x30\x12\x44\x8b\x3c\x82\xc9\xee\x27\x0b\x94\x97\x0c\xe4\x66\x37\xce\xe6\x0e\x37\xa1\xc3\x36\xbf\x9b\x78\xf4\x43\x2e\xc8\x42\x76\xb1\xce\x3e\x03\xb9\x84\xdd\x58\x8b\xcb\xe4\xbc\x0b\xa3\x3d\x24\x4b\x93\xb8\x34\xa9\x4b\x93\xaa\x34\x55\x4c\x57\x25\x13\x78\x18\x6b\x8e\x7d\x90\xc1\x15\x25\x3a\x3b\x4e\xa4\x68\xdc\x99\xce\x5b\xd2\x95\xfb\x35\x1c\xea\x0c\x8e\x63\x44\xb8\x12\x35\x5c\x89\x1a\xae\x45\x0d\x93\xc3\x18\x9d\x82\x5f\x76\x5d\x1c\x89\x53\x9b\xe5\xf1\x98\x1a\x2c\x0d\x15\x26\xb4\x3b\xa9\x9d\x33\x52\x0f\x6d\x0b\x24\xf5\x89\x41\x11\xa9\x53\x42\x41\xd2\xdd\xc9\x0d\x2b\x63\x77\x49\xec\x10\x01\x3b\xf4\x40\x8a\xd3\x95\x05\x49\xcd\x20\x2d\xb9\x67\xb0\x01\xd2\x55\x14\x83\x81\x25\x9e\x9c\xf4\xca\x4b\x0f\xbd\xa3\xd3\x1e\xe1\x20\x79\x74\x8a\x27\xe7\x81\xf8\x24\x04\x7b\xa0\x00\xe9\x46\x49\x2a\x4e\x02\x2b\xc6\x66\xdc\x38\x30\x49\x18\x3c\x90\xf0\xe0\x0d\x48\x2c\x23\xdd\x3a\xa7\x41\x8e\xe9\xbe\xbe\xac\x59\x43\x1b\xbb\xeb\xad\x89\xa5\xa1\x2d\x36\x6a\xf9\xfc\xd3\xf2\xf7\xea\xeb\xe5\x37\xdb\xc7\x4b\xe4\x13\x9c\x0e\x8e\xf4\x14\x16\x69\x40\x0f\xe7\x61\xac\xac\x16\x15\x44\x85\x00\xc4\x52\x13\xa8\xa7\x2c\x91\xc4\x3b\x86\x76\x88\x73\xae\x8d\xb3\x4e\xc0\x60\x2b\x60\x02\x08\x1c\x1b\xf0\x2c\x2d\x5a\x65\xcc\x29\xce\xb6\x28\x54\x3f\x4e\x35\xc1\x56\xf2\xbc\x10\x8c\xb3\x4b\x8c\xea\x6b\xad\xc4\x3a\x16\x47\xe2\x63\x72\x4f\x51\x4f\x52\x18\xe2\x1c\xe2\x81\xac\x30\x9d\xe4\xd0\x45\xe9\x0f\xc8\x9d\x9c\x10\x8c\xbe\x15\xa1\x71\xa4\xd8\xd1\x54\x4c\x4d\xb8\xeb\x78\x47\x00\x76\x5d\xcc\x3f\xad\x1e\x36\x8b\xed\xc5\x3d\x9e\xc5\xb5\xf7\x75\xe9\x8b\xcd\x6a\xfd\xed\x57\x8f\x0f\xf2\xfd\xbb\xb2\xfc\xe2\xd3\x56\xbe\x93\x1f\xe4\xa3\x2c\xe5\xcb\xfb\x4b\x02\xaf\x08\x2c\x77\x10\xe0\xf5\x14\x8b\xfb\xbf\xfe\xde\x4a\x59\x6e\xa4\x2c\xb7\x57\x71\x76\x48\x9f\xa6\x9b\xaf\xdf\x2a\x2f\x67\xdd\x37\xe9\x94\x52\x75\x67\xb7\x3e\x25\x1e\xb3\x14\x71\x2f\x4a\xa7\x94\xfe\xe6\xe7\x75\xb0\xfa\x95\xd5\xfc\x4d\x2f\x36\xdb\x7f\xcd\x77\x77\x77\x77\x9b\xec\xc5\xd2\x2b\x99\xc6\x02\xf2\xed\x7a\x8d\xe1\xe7\xec\x2e\x2b\xe1\x09\x7d\x2a\xba\x2c\x57\xb7\xbb\x9c\x1f\x6f\x77\xca\x1f\x96\x9f\x3b\x45\x97\xd0\xff\x4a\xe7\xf3\xf2\xfe\x4f\x32\x6f\xa8\xfc\xfe\x96\xc4\x87\x57\x15\xfe\x27\x00\x00\xff\xff\x04\x12\xa4\x8d\xe3\x09\x00\x00" func runtimeSyntaxSageYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSageYaml, "runtime/syntax/sage.yaml", ) } func runtimeSyntaxSageYaml() (*asset, error) { bytes, err := runtimeSyntaxSageYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/sage.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxScalaHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x4e\x4e\xcc\x49\xe4\x8a\xd1\x03\xd3\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\xbc\xd0\x81\xd5\x10\x00\x00\x00" func runtimeSyntaxScalaHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxScalaHdr, "runtime/syntax/scala.hdr", ) } func runtimeSyntaxScalaHdr() (*asset, error) { bytes, err := runtimeSyntaxScalaHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/scala.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxScalaYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x52\x41\x8e\xdb\x30\x0c\xbc\xfb\x15\x46\xb0\x87\x76\x81\x6e\xee\xb9\xf6\x19\x75\x0f\xb4\x4c\xc7\x6c\x18\xc9\xa0\x68\xa7\x5e\xcc\xe3\x0b\xd9\xc1\x2e\x92\xb4\x8b\xb6\xc9\x41\x30\x45\xce\x0c\x67\xd4\x8b\xb2\x2f\x23\x1f\xea\x1c\x48\xa9\xaa\x3a\x76\x0e\x7e\xa8\xea\xba\xae\xcb\x65\xa4\x33\x1f\xea\x5d\xd3\xbc\xac\x0d\x4f\xbb\xaa\xb2\x49\x39\x6f\x1d\x5f\xea\x6d\x78\xd7\x34\xed\xa7\x36\x25\x65\x8a\x68\x17\x67\x84\x81\x0c\x5d\x9a\x5a\x65\xf4\x9a\xc8\x21\xd1\xa1\x29\x1e\x11\xf9\x82\x3c\x24\x73\xf8\x20\x19\x6e\x14\xb3\x70\x74\xcc\x49\xba\xcf\x4d\xd3\xee\xae\xd8\xd9\xc9\xf9\xcc\xd1\xaf\x04\x67\xf2\x30\x60\x26\xc5\x4c\x86\xd6\x98\x4e\x08\x94\x19\x61\xbd\x08\x29\xba\xc4\x89\xd1\x71\x4f\x93\x3a\xba\x04\xd6\xcc\xe8\x25\x92\xea\x82\x3e\x19\xa4\x87\xb1\x4f\x16\x91\x2f\x52\xa6\x7c\xb0\x74\x81\xdb\x82\xcb\x20\xca\x1f\xf1\x77\xdc\x23\xb5\x3f\x38\xf8\x46\xeb\x46\xe2\x50\x7a\x5d\x20\xe7\x51\x25\x88\x83\xda\xec\x46\xa5\x43\x29\x67\xf0\x4f\xe7\xd8\x65\x5c\xc4\x87\x4d\xc7\xda\xba\xa2\x66\xa4\x99\xcd\xa4\xe3\x52\x2b\x7e\x48\xcc\x4e\x31\x70\xea\x8b\x5b\x6c\x3d\x05\x46\x24\x97\x99\x31\x52\x38\xd1\x91\x31\x9a\xcc\xe4\xe5\x4c\x25\x29\xee\x30\x4e\xad\x4a\x40\x51\xbb\x1e\x26\xc1\xfb\x11\x79\x1a\xd9\x90\x97\x18\x06\x4b\x51\x5e\xb9\xdb\x76\xcd\x98\x93\x92\x8b\x32\x32\x93\xf2\x8d\xe5\x21\xad\x12\xfc\xa5\xc0\xc4\xe3\x96\x72\xf9\x65\x27\x5b\x7d\x58\xff\xbb\xb7\x3a\xc7\xee\x37\xd5\xed\x89\xd4\xdf\xbe\xff\x3d\xec\x23\xe4\x7b\x25\x9f\x64\x5c\x33\x68\x9a\x97\x7b\x92\xb7\xcf\x7b\xa6\x91\x83\x90\x7e\x1d\xc8\x6e\x47\xdf\x7b\xae\xb1\xba\x4d\x8c\x9e\xca\x4b\x89\x93\xea\xad\x1d\xe7\x35\xff\x07\xbd\xfb\xfd\xbd\xde\xa7\x8f\xb6\xff\x13\x4a\xd3\x3c\x3f\xec\xdd\x3c\xef\xff\x13\xea\x1f\xd0\xaa\x5f\x01\x00\x00\xff\xff\x0b\x88\x79\xb1\xf9\x03\x00\x00" func runtimeSyntaxScalaYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxScalaYaml, "runtime/syntax/scala.yaml", ) } func runtimeSyntaxScalaYaml() (*asset, error) { bytes, err := runtimeSyntaxScalaYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/scala.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSedHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x4e\x4d\xe1\x8a\xd1\x2b\x4e\x4d\x51\xe1\x8a\x53\x56\xd4\xd3\x4a\xca\xcc\xd3\xd7\x48\xcd\x2b\x53\xd0\xd6\xb4\x2f\x4e\x4d\xd1\x50\xa8\x51\xd1\xe4\x02\x04\x00\x00\xff\xff\x68\x89\x4c\x43\x25\x00\x00\x00" func runtimeSyntaxSedHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSedHdr, "runtime/syntax/sed.hdr", ) } func runtimeSyntaxSedHdr() (*asset, error) { bytes, err := runtimeSyntaxSedHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/sed.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSedYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xcc\xc1\x4e\x84\x30\x10\x80\xe1\xf3\xf6\x29\xc6\x2e\x07\xa0\x52\xbd\xda\x0b\x07\x1f\x83\x96\xa4\xb4\x63\x68\x42\x0b\xa1\xb3\x9a\xcd\xe2\xbb\x9b\x65\x35\x9a\xb8\xa7\x49\x66\xbe\x7f\xde\xc2\x84\x74\x5e\x50\x41\x46\xcf\x98\x47\x42\x47\x0a\x18\x00\xc0\xf5\x96\x6c\x44\x05\x5c\x6b\x99\xd1\x17\x7c\xdf\x8f\x68\x3d\xae\x0a\x78\x7f\x7c\x90\xf5\x10\xd2\x53\x89\xe9\x1d\x44\xd5\x66\xf4\x25\x6c\x45\xc5\x19\x5b\x4f\x13\x66\xb5\xfb\x06\xf2\x39\x0e\xf3\x24\xe7\x05\x57\x4b\xf3\x35\xed\xb6\xbe\x90\xb5\x30\xfc\x5b\xb8\x39\x65\xb2\x89\x64\x3a\xc5\x61\x7f\xae\xf5\xa5\x7b\x6e\x5e\x8c\x78\x6c\xf7\x59\x6b\xfd\xf9\x4f\xe7\x05\x5d\xb0\xd3\xeb\x68\x6f\x89\xd6\xf2\xd7\xc4\x88\x89\x14\xf0\xb2\xdf\xba\x4e\xe5\xc5\x3a\x54\xc6\x54\xc7\xb2\xeb\x2f\x46\xd6\x55\x5b\xfc\xd8\x90\x3c\x26\x6a\xdc\x68\x57\xf9\x31\x06\xc2\x1b\x06\xfe\xa7\x13\xf7\xb4\x02\x7e\x10\x20\x36\x10\x07\xc1\xd9\x57\x00\x00\x00\xff\xff\xc4\xf3\x36\xcd\x4d\x01\x00\x00" func runtimeSyntaxSedYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSedYaml, "runtime/syntax/sed.yaml", ) } func runtimeSyntaxSedYaml() (*asset, error) { bytes, err := runtimeSyntaxSedYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/sed.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxShHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x24\x88\xc1\xae\xc2\x20\x14\x44\xf7\xfd\x8a\xbe\xbc\x2e\x40\xe3\xf5\x13\x1a\x8d\x89\x31\x75\xd1\x8d\x3b\xa2\xa1\x08\x85\x40\x69\xc3\xb5\xae\xee\xc7\x1b\xe8\x62\xe6\xcc\x1c\xb4\x3a\x84\x8a\x09\x40\xdb\x90\x80\x41\xa2\x25\x01\xb9\xf3\x4c\xaa\xe0\x25\x83\x93\xa8\x71\x3b\x66\x8d\xea\xe3\xe6\x88\xb4\xa4\xd9\xb8\xa0\x8b\x3e\x18\x25\x80\x7a\x3f\x16\xb3\xf8\x71\xf2\xa0\xe6\x68\x28\xa9\x8d\x7d\x77\x3d\x3f\x6e\xf7\x0b\x81\x1e\x56\x17\xde\xa2\xa1\x53\xdf\x15\xc5\xab\xe7\xff\x1f\xec\x8e\x4c\xc7\x6f\xbd\xe7\x2d\x1b\x24\x6f\x59\xce\xe4\x79\x8b\x96\xd5\xd4\xf0\xea\x17\x00\x00\xff\xff\x2e\xc0\x3f\xcf\xab\x00\x00\x00" func runtimeSyntaxShHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxShHdr, "runtime/syntax/sh.hdr", ) } func runtimeSyntaxShHdr() (*asset, error) { bytes, err := runtimeSyntaxShHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/sh.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxShYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x54\x7f\x8f\x53\xb7\x12\xfd\x7f\x3f\xc5\x25\xbb\x7a\x24\xf0\x92\x07\x3c\x40\xef\xa5\x3f\x52\x0a\x6d\x85\x68\x0b\x52\x5b\x69\xd5\xf5\x42\x1d\x7b\x6e\xae\x7b\xfd\xe3\x62\xcf\xdd\xec\xc2\xe1\xbb\x57\xe3\x2c\xbb\x28\x45\xb4\x6a\x14\x7b\xae\x67\x34\x33\x67\xc6\xc7\xd3\x3a\x4f\x7c\x31\xd0\xb2\x29\x1d\x79\x7f\x70\x60\x89\xc9\xf0\xf2\xa0\x69\x9a\x46\x8c\x51\x07\x5a\x36\x93\xa9\x52\x8b\xd2\x1d\x41\xa9\xc5\x5a\x97\x4e\xa4\x08\xf9\xce\xa6\x8a\x57\xda\x3b\x5d\xa8\xec\x0e\xed\x18\x0d\xbb\x14\x0b\x86\x9c\x24\x4e\x55\xcf\x5b\xa3\xd4\x02\x2f\xfa\x4d\x55\x0d\xfd\x26\xf4\x0b\x93\x62\x8b\x6c\x76\xf2\xc5\xb3\xef\xbe\xfe\xe5\xe9\xf7\x4f\xb0\xa0\xf5\xe8\xbc\x55\xea\x08\x8f\x5e\x3c\xab\xba\xd9\xa4\xa2\xea\x48\x5b\xca\xcb\x66\xf2\xf2\xf0\xc6\xe2\xd6\x7f\xa6\x14\xcf\x9a\xdb\xb3\xd5\x74\xad\x67\xab\xa9\xac\xd0\xcf\x56\xa5\x9b\x36\x38\x9a\x4d\x0e\x0e\xf2\xe8\xa9\xec\xea\x39\x6c\x7e\x1c\xc3\x9a\x72\xa9\xa7\x79\x63\x52\x2c\xac\x23\x2f\x62\x55\x2f\x9b\x89\x52\xeb\x93\x3b\xf3\xff\x9f\xde\x56\x6a\xbd\xcb\x26\x5e\x8f\x53\xb4\x4e\xaa\xd1\xbe\x34\x3a\x5a\x71\xe4\x9c\x7c\xd3\xfa\xb4\xbd\x8c\x55\x58\x33\x05\x8a\xbc\x8b\x32\x35\xba\x10\x6c\x82\x4d\x91\x40\xde\xb5\x20\x5f\x08\x54\xb4\x01\x9d\x3b\x46\xeb\xd0\xa6\x8c\xf7\x8d\x82\x6b\xe1\x22\x7c\x32\xda\x23\x93\xb6\xc8\xc4\x63\x8e\x28\xe4\xc9\x30\x4a\xe7\x5a\x06\x77\x14\xc1\x2e\x10\xc6\xc8\xce\x63\xdb\x39\x4f\xb3\x2b\xb0\xf3\xa6\x0c\x64\x9c\xf6\xbb\x1b\x7b\x0b\xa5\xde\x41\xa9\x29\x94\x9a\x41\xa9\xcf\xa0\xd4\x29\x94\x3a\xc1\x6f\x50\x4a\x29\x48\x77\x3f\xc7\x97\xb8\x81\x2f\xf0\x2f\x28\x85\xd9\x75\xd1\x3f\x09\x1f\x1a\x93\x42\xd0\xd1\xbe\xef\xd8\x8e\x2a\xbb\x02\x2d\xc8\x74\x09\x74\x3e\xa4\xcc\xf0\xc4\x28\xc4\x18\x83\x2e\x3d\xc6\x58\x88\x67\x7b\x4d\x0c\x21\xc5\xc6\xbb\x38\x9e\x7f\x22\xec\x74\x03\xb7\x99\xad\xf4\xb6\xaf\x8c\x81\x95\xad\x75\xd1\x42\xa9\xed\xdb\x3b\xff\xbe\xff\x6e\x93\x69\x40\xef\xbc\xaf\x9b\xf6\xfe\xca\xe2\xa9\x14\x04\xdd\x0b\xb3\xc4\x5e\xc8\xa2\x74\x60\x9d\xf7\xa1\x64\x1a\xd9\xf9\xf2\x09\x1c\x6b\x5d\xe8\xe1\x7d\xc1\x50\x9f\x00\x8c\x66\x98\xce\xa4\x08\xd3\x6d\xf2\x00\xd3\x85\x64\x61\xba\xb4\x15\x4d\x4e\x89\x61\xfa\x32\x06\x48\x48\x98\x01\xa6\x0c\xde\x31\xcc\xc8\xb0\x9a\x09\xd6\xc2\xb6\xb0\x2e\xcb\x32\xc9\xa7\x5c\xe4\xab\x06\xb7\x23\x28\x9e\x49\x2b\x75\xb4\x22\x32\x5a\x6d\x58\xe8\xa1\x85\x35\x6d\x60\xb4\xc9\x5b\x08\xf7\xd1\xa5\xc2\xce\x42\xfe\xc2\x5f\xef\xf1\x7b\x12\xea\xb8\xd8\xc3\x0b\x85\x36\x35\xa8\x2f\x08\xf6\x81\x40\x0a\xbd\xa4\x0d\x7d\xeb\xda\x84\xd0\xc7\x64\x11\x7a\xa6\x30\x20\x9c\x21\x3a\x43\x88\x1e\x31\x75\xe3\x80\x38\xe4\x64\x10\xc7\x20\x29\x93\xc5\xa0\x0b\x13\x06\xcd\x9d\xe9\x7a\x0c\x2e\xf6\x17\x18\x32\x86\xec\x22\x0b\xe4\xfa\xd1\x62\xe0\x73\x0c\x5b\x5b\x89\x5b\x71\x64\xd2\x5e\xbc\x90\x03\x72\x90\xf4\x79\x8c\xd2\xbd\x42\xaf\x31\x2d\x9d\xbe\x8b\xd2\xe9\x7b\xf7\xee\x57\xf1\xe0\xa1\x88\xff\xfe\xaf\x9e\x1e\xdc\xbd\x37\x13\xd4\xa5\xcb\xf5\xfe\xc6\x16\xc5\x13\x0d\x28\xc2\xb3\x5d\x57\xe5\xb5\xa1\xb0\x5d\x8b\x91\xf9\x02\xd5\xe1\x22\x1a\xb0\x96\xe5\x3c\x98\x08\x4c\x85\x77\xcf\x45\xb6\x34\x32\x38\x8d\xa6\x03\x67\x70\x1e\x49\xb6\x68\xe4\x72\xb8\xc6\x96\x40\x63\xed\xdd\x18\x2f\xef\x62\x8c\xee\x35\xc6\x58\x6b\x1a\x0b\xe5\x82\x33\x29\x66\x6b\xb0\xed\x92\x2c\x1d\x1c\x2e\xa8\xec\x13\xec\x6a\x60\x34\xad\xd7\x9b\xf2\x91\x21\x31\x9f\x9f\xe8\xf9\x9b\xf9\xe9\xed\xc9\x47\x27\x48\x53\xcd\x62\xbd\x34\x3b\x4b\x91\x5d\xeb\x2e\xe7\xd4\x91\x52\x6f\x57\x32\xab\x1e\xcd\x7f\xd5\xf3\x37\xaf\x6e\x7c\x75\x78\x74\x6b\x35\x97\xc9\xf5\x6e\x35\xf9\x47\x3e\xfb\x53\xb1\x70\x76\x71\xb3\xbc\xac\xaa\x11\x80\xb9\x82\x9b\x4c\xae\x74\x14\xed\x9e\xa6\xf4\x6e\xa8\xd9\x94\x5a\x5c\x6b\x3f\x98\xc2\xef\x7f\x1f\x66\xda\x4d\xad\xc7\x9d\xce\xd7\xae\x7f\x17\xce\xcd\x7d\x34\x37\xf7\xd3\x36\x27\xa7\xd7\xd1\x42\x6d\xf1\x9f\xa2\x4c\x5f\x42\xa9\x32\x3b\xdc\x0f\x76\xf4\x17\x35\x70\xb2\x49\xdc\x7f\x7e\xfe\xe4\x39\x8e\x8f\x8f\xf1\xed\xd3\xe3\x1f\xbe\x99\x2d\xa5\x9f\x7f\x04\x00\x00\xff\xff\x66\x4a\xed\xb7\x5d\x07\x00\x00" func runtimeSyntaxShYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxShYaml, "runtime/syntax/sh.yaml", ) } func runtimeSyntaxShYaml() (*asset, error) { bytes, err := runtimeSyntaxShYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/sh.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSlsHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x4e\xcc\x29\xe1\x8a\xd1\x2b\xce\x29\x56\xe1\xe2\x02\x04\x00\x00\xff\xff\x9d\x7c\x74\x9b\x0d\x00\x00\x00" func runtimeSyntaxSlsHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSlsHdr, "runtime/syntax/sls.hdr", ) } func runtimeSyntaxSlsHdr() (*asset, error) { bytes, err := runtimeSyntaxSlsHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/sls.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSlsYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8f\xdd\x6a\xc3\x30\x0c\x85\xef\xf3\x14\xc6\x2b\xb4\x0d\xd4\xdd\xed\xfc\x00\x7b\x82\xdd\xd5\xc9\x70\x62\xa5\x18\x1c\x39\x58\xca\x60\xa0\x87\x1f\x4e\xd7\xc2\x28\xbb\x11\xe2\x3b\x47\x3f\x67\x8a\x09\xf8\x7b\x01\xab\xc8\x27\x6e\x9a\x00\x0c\x23\x5b\xd5\x28\xa5\x54\x15\xd1\xcf\x60\x95\x76\xce\x50\xa2\x9d\x6e\x9a\xb2\x26\x20\xbb\xe9\x27\x15\x03\x20\xc7\x29\x42\x31\x5f\xbe\x58\xa5\xfb\x4b\xaf\x4e\x9d\x69\xed\x4e\xff\x67\x31\xad\xbd\x6b\x01\x26\xbf\x26\xb6\x4a\xd7\xeb\x0f\x3c\x66\x24\xf6\xc8\x06\xd7\x79\x80\x3a\x73\x6e\x2f\xaf\xa7\xb7\xee\xdc\x3e\x59\x86\x9c\xd3\xf6\xdf\x70\xf8\x28\x2b\xc8\xbb\x4f\x04\x47\xe7\x86\x27\x27\x71\x89\x78\xad\x5e\x7d\x70\xce\x39\x23\x97\xde\xe9\xee\xd8\x3a\x2d\xfb\x07\xd9\x77\xc7\x76\x7f\x9f\xa5\x05\xc6\xe8\xef\xfb\xaf\xc5\x47\x94\xad\x92\x8c\x79\x5e\xf2\x8a\x41\x96\xb1\xc0\x0d\x7e\x6e\x6d\x8a\xc4\xb2\xc4\x94\x7c\xf9\xfb\xc6\x3c\x03\xd6\xa8\xfd\x8b\x79\xc4\x20\xf6\x0c\xbf\xbc\x9e\x88\x93\x40\xda\x0a\x81\xe4\x22\x98\x59\x3c\x06\x01\x0c\x95\x62\xb8\xad\xfc\x09\x00\x00\xff\xff\x06\xf6\xfb\xa9\xb6\x01\x00\x00" func runtimeSyntaxSlsYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSlsYaml, "runtime/syntax/sls.yaml", ) } func runtimeSyntaxSlsYaml() (*asset, error) { bytes, err := runtimeSyntaxSlsYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/sls.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSolidityHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xce\xcf\xc9\x4c\xc9\x2c\xa9\xe4\x8a\xd1\x2b\xce\xcf\x51\xe1\xe2\x02\x04\x00\x00\xff\xff\xdd\x6d\x43\x99\x11\x00\x00\x00" func runtimeSyntaxSolidityHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSolidityHdr, "runtime/syntax/solidity.hdr", ) } func runtimeSyntaxSolidityHdr() (*asset, error) { bytes, err := runtimeSyntaxSolidityHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/solidity.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSolidityYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x54\xc1\x8e\xe3\x36\x0c\xbd\xe7\x2b\xdc\x74\xdb\x9d\x64\x90\x99\x69\x8b\x2e\xd0\xa0\xed\x60\xd1\xa2\xd7\xbd\xf4\xd4\x38\x28\x68\x89\x8e\x89\xc8\x92\x41\xd2\xc9\x78\x41\xf4\xdb\x0b\xd9\x99\x9d\x34\xd9\xce\x6d\x73\x88\x28\xf9\x91\xef\x49\x4f\x54\x4d\x01\x75\xe8\x70\x5d\x48\x0a\xe4\x49\x87\xd9\xcc\xa3\xa2\xd3\xf5\xac\x28\x8a\x22\x7f\x8f\xd0\xe2\xba\x98\x97\xe5\x9d\xa4\xf0\x66\x3e\x9b\x71\x1f\x50\xa6\xef\xab\xa2\x63\xec\x38\xb9\x11\x50\xdd\xb8\x14\x95\xc1\xa9\x05\xaa\x18\x78\xb0\x8e\x61\xd7\xc2\xa2\x2c\xab\xf9\x29\xc1\xa5\x28\x0a\x51\xef\x62\xdf\x56\xc8\x53\xe2\x66\xb5\x7d\xbc\xd9\x3c\xac\x7e\xda\xde\xda\xc3\x53\x0e\x60\x55\xbf\x5f\xfd\xb1\xbd\x3d\x4f\x25\x8f\x51\xa9\xa6\x31\x6b\x03\xab\x8f\xef\x57\x7f\x6d\x37\x7f\x4f\x41\x4e\x5e\x6e\x36\x6b\xe9\xc0\xe1\x7a\xbb\x5d\x3e\x67\x89\x82\x62\x8b\x51\x4f\x1a\x41\x04\xdb\x2a\x0c\x56\x31\xc2\xde\xb2\x64\x8a\x3d\x9a\x4f\x56\x27\xb6\xba\x8f\x4e\x29\x45\xa3\xda\x30\x08\x5a\xc4\xa3\x31\x6a\xcf\xf1\x34\x88\x1d\x1b\x0a\x78\xae\x4c\x3a\x74\x04\xe1\xc4\x90\x8f\x0a\xa3\x37\x6d\x38\x1d\x47\x58\xf1\x75\xd1\xc2\x1e\x0b\xe9\x19\x0b\x6d\x70\x28\x80\xb1\x38\x20\x0f\xc5\x81\x84\xaa\x80\xa7\x42\xd9\x8c\xbb\x3d\x0e\xc7\xc4\xfe\x59\x6f\x4c\x71\x68\x53\x2f\xf6\x7c\x74\x46\xd1\xe3\x13\x7a\xeb\x60\x80\x2a\xa0\x75\x7d\x15\xc8\x59\xc7\x74\x00\x45\xc3\x27\x45\x8e\x10\x8c\xe2\x14\x7c\xee\xfc\x4f\xd5\xab\x90\xdc\x3e\x2b\x9e\xa2\x06\xa4\x31\x97\x28\x56\x20\x68\x9e\xea\x9a\x5c\x1f\x74\xb0\x1d\x48\xa0\x96\xd4\x26\xdb\x4c\xa9\x45\x51\x68\xbb\xc5\xe2\xd1\x5a\xd9\x8d\x25\x3c\x28\x64\xa4\xe5\xed\x23\xdb\x01\x42\x8f\x19\x10\xd3\xd1\xf4\x69\xc4\xec\x40\x3a\x26\x87\x96\x98\x76\x14\x17\x8b\xc7\x57\xd4\xed\xd1\x39\xd8\x7f\xff\xe3\x3b\x93\x06\x7e\xc8\x7f\x39\x66\xea\xb0\xf5\xdf\xbd\x7b\x30\x74\x8c\x2e\x1d\x90\x0d\xbc\x6f\x93\xb7\xb6\x0f\x79\xd0\x86\xc4\xa4\xef\x90\x4d\x30\xd4\x1e\x45\xb9\x77\x6a\x65\x79\x57\x41\x80\xe8\xf0\x15\x52\xe5\x1e\xad\x86\x20\xaf\x81\x8e\x48\x26\x1f\xa1\x4a\x56\x53\x8c\x38\x18\x6a\x33\xb2\xb9\x14\xbd\x58\x4b\xb1\x57\x14\x6b\x52\xcf\x62\x1e\x06\xb1\x23\xe2\x5e\x6c\x40\x60\x39\xaf\x3b\xb5\xdf\xe4\xb4\xf7\x8c\x22\x56\xa5\x14\xac\x85\xae\xa3\xb8\x33\x51\xce\xc3\x01\x38\xdb\x79\x53\x96\x7e\xb9\xb0\xfe\x25\xac\x06\xc5\x53\x58\xd3\x13\xfa\x67\xc4\xd9\xe4\x9c\x0e\x99\x13\x3f\xf3\x55\x32\x75\x2b\xd4\x8a\x6c\x2e\x5b\xee\x40\x5d\x63\x1e\x6b\xe8\x83\xe6\xbd\x8d\xd7\xc8\x28\x06\x8a\x38\x5d\xa8\x1a\x1c\x5a\x40\xb5\x76\xc4\xc6\x3e\x04\x4b\xb5\x75\x3d\xa3\x31\x86\xe4\x40\xc7\x5b\x99\x1b\x8f\x9c\xc9\x91\x32\x4c\x79\xb0\xbc\xd7\xf1\x2f\xd5\x76\x20\x3c\x9e\x0b\x4b\x1d\x32\xe8\xa8\x6d\xb3\xba\xbd\x5f\xfe\xf2\xf3\xaf\x5f\xfd\xf3\xcd\xe3\xfa\x5b\xdb\xbe\x58\xd0\x8e\x7d\x3c\x4e\xf3\x4f\x14\x38\x1b\x72\x7f\x3f\xff\xb4\x86\x31\x37\xce\x9b\x97\x85\xe9\xb9\x2a\x36\xdb\x8b\x2a\xc5\x75\x99\xb2\x5c\x5e\x16\x2a\xcb\xe5\xfd\xff\xd7\xd2\xe4\xd3\xba\x98\xff\xf9\xe1\xf7\x0f\xeb\xc7\xab\x17\x6e\xb2\xee\x33\x44\xe5\xfc\x8a\xe6\x6c\x45\xf6\xd4\x8d\xcc\x65\x79\x77\x49\xfd\x69\x7a\x49\x35\x3d\x40\xbf\x35\xc0\xff\x4d\xbd\x96\x73\xa5\xe6\xed\xa5\x98\xb7\x5f\x40\xcb\xec\xdf\x00\x00\x00\xff\xff\x28\x8c\x3d\xc3\x6b\x06\x00\x00" func runtimeSyntaxSolidityYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSolidityYaml, "runtime/syntax/solidity.yaml", ) } func runtimeSyntaxSolidityYaml() (*asset, error) { bytes, err := runtimeSyntaxSolidityYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/solidity.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSqlHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x2e\xcc\xe1\x8a\xd1\x2b\x2e\xcc\x51\xa9\x29\x2e\xcc\xc9\x2c\x49\x2d\x4a\x56\xe1\xe2\x02\x04\x00\x00\xff\xff\xd0\xdf\xe8\xd2\x16\x00\x00\x00" func runtimeSyntaxSqlHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSqlHdr, "runtime/syntax/sql.hdr", ) } func runtimeSyntaxSqlHdr() (*asset, error) { bytes, err := runtimeSyntaxSqlHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/sql.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSqlYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x55\xdb\x6e\xe3\x36\x10\x7d\xde\x7c\x85\x61\x2c\xb0\xb9\x20\x41\x5f\xeb\x97\x05\x2d\x8e\x64\x36\x14\xa9\xf2\xe2\xcb\x46\xe9\xae\x62\xb3\xb5\x00\xdf\x62\xc9\xdd\x2d\x70\x3e\xbe\xa0\x72\xd9\x3c\xa4\xd5\x83\x34\x87\xc3\x33\x87\x9a\xe1\x60\xf4\x67\xbd\x09\xed\x3f\x87\x30\x1a\x34\x8f\x9b\xb3\xb3\x55\x68\xc3\xb2\x1d\x0d\xce\x06\x83\xc1\x20\xee\xed\xaa\x6d\x18\x0d\x86\x65\x79\xd3\x3c\x6e\x3e\xa2\x79\xdc\xd4\x6d\x38\x2e\x3f\x0e\xcf\xce\x8e\xa7\x4d\x68\x46\x1d\xf3\x7a\xd0\xb4\x55\x1b\xb6\x61\xd7\x8e\x06\xc3\xf3\xcf\xf5\x45\x59\x3e\x9c\x33\x29\xc1\x6c\x02\x66\xc1\xa4\x23\x03\xa6\x38\x18\xe7\x60\xde\xe9\xaf\x42\x25\x86\x72\x52\x2e\x72\x87\xff\x23\x33\x26\x37\x23\x52\x18\x0b\xc5\xcc\x02\x63\xed\x26\x18\x47\xab\x25\x31\xd5\x17\x9d\x4c\x98\xca\x08\xc9\x84\x92\x5b\x24\x5a\xfa\x5c\xd9\x67\x8b\xc4\x68\x6b\x91\x18\x62\x8e\xfa\x74\x38\x73\x6c\xcc\x2c\x59\xbc\xa0\x0e\x80\x93\x64\x0b\xe2\xe0\x64\x13\x23\xc6\xd4\x01\x70\x61\x9d\x50\x89\x8b\xdb\xe4\x08\xdc\xe8\x02\x9c\x52\xe6\x65\x6f\xbe\xa4\x12\xa9\x2d\x71\x90\x4d\x58\x11\xed\x5c\x58\x67\x41\xf3\x42\x32\xd1\x9b\x70\x2a\x48\x72\x8b\xce\x20\x95\xde\x4e\x90\x6a\x13\x1f\x12\x99\x42\xea\x55\xe2\x84\x56\x48\x8d\xce\xfb\xb4\x32\xa3\x7d\x81\xcc\x30\xe5\x30\x61\x53\xa1\xb2\xbe\x08\x91\x29\x6d\x08\x42\x71\x9a\x43\xa8\x54\xc8\xb8\xb0\x64\x1c\x84\x52\x64\x20\x94\xd3\x10\x9c\x94\x13\xa9\x20\x0e\xa1\x20\x2c\x44\xda\x27\xfc\x9b\x16\x0a\xb7\xb4\xb0\xb8\x15\x52\x46\xd4\x17\x21\x89\x71\xa1\x32\x48\x71\x4b\x90\x22\x17\x0e\x52\x28\xb2\x90\x9a\x71\x48\x9d\x30\x19\xdf\xb7\x90\x7a\xf6\xb5\x30\x42\x1b\xe1\x16\x90\x94\x3a\x48\xa6\x32\xcf\xb2\xde\xa6\xc8\x35\x17\xe9\x02\x8a\x39\x6f\x98\x84\xd2\x0e\xca\x4b\x09\x45\x73\x37\x65\xb2\x2f\x5c\x17\x4e\xe4\xe2\x0b\x21\x02\xad\x9e\x0d\x93\x72\x01\x6d\x38\x19\x68\xef\xba\x0a\xea\x0e\x46\x47\xef\xf5\x17\x46\x27\xc4\xbd\x21\xbc\x20\x26\x51\x18\x91\x33\xd3\x5b\x31\x43\x8c\xc3\x50\x4a\x86\x54\x42\x16\x86\x32\x9a\x17\x30\xa4\x58\x4e\x30\x54\x48\x96\x44\xeb\xbc\x51\x30\x34\xd5\xb7\x04\xd3\x95\xd7\x88\x6c\xd2\xdb\xd8\x76\xa2\x67\xb0\xba\x13\xb3\x8e\x39\x6f\x61\x9d\x61\x31\xf4\x6b\x77\xbd\x96\x24\x25\x0e\x96\x62\xf1\xa2\xe9\x53\x74\x6c\x2c\xc9\xc2\x91\xc9\x85\x62\x8e\x38\x9c\x46\x94\x94\xf1\xe2\x9d\xf1\x2a\x61\x8e\xd0\xd1\xe0\x28\x2f\xb4\x89\x23\xc4\x19\x91\x65\x64\x22\xc1\x3a\xe2\x7d\xa7\x78\x25\x7e\xf7\x04\xaf\xba\x6e\xf1\x96\xe0\x6d\xd4\xf7\x05\x8f\xea\x53\x26\x3d\x59\x4c\x99\x11\x4f\x9f\x33\x15\x34\xeb\xd3\x9c\x09\x37\xc1\xcc\x08\x47\x98\x4d\xc8\x10\xbe\x90\xd1\x69\xec\x6c\xb7\x28\x08\x73\x6d\xde\x2a\x3c\x4d\xe8\xd7\xe0\x29\x33\xc9\x84\x19\x38\xa1\x16\x42\x39\x38\x9a\x3b\x74\xdf\x62\x73\x26\x65\x74\xe5\xc4\x85\xcf\x23\x7a\x7e\x28\x26\x3c\x16\x59\x5c\xa6\x52\x33\x07\xae\x7d\x2c\x0b\xa7\x44\xe4\x4c\x76\xf1\x4e\xe4\x84\xf8\xb2\x8e\xe5\x45\x87\xb0\x20\x66\xe0\x95\x15\x99\x22\x8e\xd7\x73\xc7\x52\x8f\x3b\xd0\x1d\xde\xad\x9e\xce\x7c\x03\xbb\x2d\xa9\x55\xd6\xf9\x22\xe8\x3c\xa4\x7c\xde\x8d\xef\x97\x91\x3e\x65\xe6\x09\xbd\xcd\xf9\x70\x0c\x87\xe3\x7e\xf9\x9a\xf6\x4d\xcc\x7c\x55\xb5\xd5\x43\xd5\x84\x06\xab\xd3\xf6\x80\xb0\x5c\xef\x11\x7e\xd4\x2d\xc2\x8f\xc3\xa6\xaa\x77\x58\x87\x6a\x15\x8e\xe7\xcd\xc5\x67\xac\xc3\xe6\xd0\x2b\x58\x6f\x0f\xfb\x63\x8b\x7a\xb7\xaa\x97\xa1\xc1\x76\xbf\x0a\xd8\x9d\x36\x9b\xbf\xab\xcd\x29\x60\x7f\x6a\x0f\xa7\x16\x87\xe3\x7e\x7b\x68\xf1\x78\xaa\x5b\x1c\x43\xb5\xea\x55\x6d\x96\xeb\xb0\xad\xd0\x84\x43\x75\xac\xda\xfd\x11\xcd\x7a\xff\x1d\x6d\xf5\xb0\x09\x0d\xda\x7a\x1b\xf6\xa7\x16\xdf\xeb\x55\xbb\x7e\x2b\xb5\xdc\xef\x9a\xb6\xda\xb5\x37\x0f\xfb\xfd\xa6\xfb\xe9\x3e\x9c\xc7\xa9\x90\xa6\xef\xb2\x76\xa7\xed\x43\x38\x3e\xf3\xee\x7e\xb9\xfe\xf5\xfe\xea\x5d\x5e\xd3\x1e\xeb\xdd\x5f\x91\x37\x3c\x2f\xcb\xb2\xbc\xc1\xdd\x1f\xe5\xf0\xfe\xe2\xb2\x1c\xe2\xd3\xab\xe7\xd3\xfd\xc5\xe5\xa7\xff\x8e\xfd\xf6\x33\xb4\x2c\xcb\x6f\xf7\x17\x97\xdf\x7e\x92\xb7\xcf\xcd\x5d\x96\xd7\x65\x79\x7d\x73\xf9\xf1\x65\xab\xde\xad\xc2\xae\xbd\x5e\xae\xab\xe3\xcd\xf7\x75\xdd\x86\xe6\x50\x2d\x63\x27\xdf\xdd\x8d\x9e\xe0\xfd\xfd\xd5\x7b\xec\xd1\x60\xf8\xe1\x6a\x70\x85\xc1\xd5\x87\xab\xe1\xd9\xbf\x01\x00\x00\xff\xff\xfc\x6c\xf1\x96\xa5\x08\x00\x00" func runtimeSyntaxSqlYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSqlYaml, "runtime/syntax/sql.yaml", ) } func runtimeSyntaxSqlYaml() (*asset, error) { bytes, err := runtimeSyntaxSqlYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/sql.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxStataHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x2e\x49\x2c\x49\xe4\x8a\xd1\x4b\xb4\x4f\xc9\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\x52\x06\x9e\xcb\x0f\x00\x00\x00" func runtimeSyntaxStataHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxStataHdr, "runtime/syntax/stata.hdr", ) } func runtimeSyntaxStataHdr() (*asset, error) { bytes, err := runtimeSyntaxStataHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/stata.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxStataYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\xbc\x5b\xaf\x24\x37\x92\x1f\xfe\xae\x4f\xd1\xdb\xff\xf9\x7b\xa5\x99\x95\xd4\xe7\xe8\xd2\x3d\xc2\x6a\x05\xb8\xbd\xc2\xae\xb1\xc6\xbe\xf8\x61\x00\x95\x36\xcd\x24\x23\x33\xa9\xe2\xed\x90\xcc\xcc\xaa\x9e\x98\xf9\xec\x46\x44\x90\x59\x75\x4e\xb7\x31\x06\x0c\xbf\xb8\xd1\x8c\xdf\x2f\x78\xbf\x25\x19\x64\x66\x9d\xc9\x3a\xa8\xd7\x04\x3f\xbc\x2a\x55\x55\xf5\xd9\x67\x06\x2a\xe8\xfa\xc3\x67\xaf\x5e\xbd\x7a\x45\x81\x41\x79\xf8\xe1\xd5\xeb\xd3\xe9\x2b\xf5\x93\x89\xbf\x7b\xfd\xd9\x67\x79\x75\x50\x24\xc2\x97\xaf\x74\x0c\xa5\xaa\x50\xbf\x2a\x35\xdb\x30\x8b\x37\xfd\x2b\x55\xe5\xfa\xc3\xab\xd7\xff\xe3\xf4\xfa\xf5\xe1\x09\xc1\x50\x5e\xaf\xff\xfe\xe6\x75\x97\x5b\xff\xf7\xe5\x2b\x6b\x20\x54\x3b\x59\xc8\x5f\x79\xa5\x73\x7c\x1e\xfe\x2c\xfb\xd7\x1f\x05\x49\x21\x7f\xff\x71\x80\x14\xf5\xea\x97\x5f\xff\x56\x69\xd4\xdc\xdf\x9d\x4e\xfb\x1f\x5e\xbf\x88\x79\x6b\x6d\x02\x6d\x95\x7b\xbf\xa8\xcc\xb1\x4f\xa7\xaf\x5e\x7f\xf6\xbf\xdb\x25\x9f\xea\x91\xff\x77\x3b\xe4\xff\x7b\xf5\x9f\x57\xeb\xea\x97\x36\xbc\x9a\xd6\xa0\xab\x8d\xa1\x7c\xf6\xb2\x9c\x5b\x7b\x5e\x9f\x4e\xe3\xe7\x83\x56\xce\x41\x46\x35\x8e\x19\x36\x54\x63\x41\xa5\xa3\x88\x05\x55\xb1\x81\xc5\x82\xaa\xaa\xc0\xe2\x91\xe5\x82\x6a\xad\x51\x47\x03\x38\x42\x55\x06\x02\x8e\x36\x44\x6f\x95\x3b\x48\x3a\x58\x55\x56\xbc\xb3\xa7\xf0\x38\x19\x1c\xaf\x15\x62\x36\x90\x51\xa3\x56\xab\x5e\xae\x0d\x28\x2b\x61\x9c\xea\xbd\x59\x7c\x41\x0d\xd6\xa1\x5e\x54\x46\xbd\xd8\x47\x16\x1c\x6f\xb1\x8f\x12\x8b\x23\x2d\xd1\x41\x39\x5f\x89\x24\xd4\xce\x26\x7c\xef\xa2\x3e\xa3\x76\x71\x76\x71\xc6\xf7\xde\x5c\x29\xe2\xfb\x38\x69\x12\x06\x75\x74\xf0\x14\x56\x3f\x12\x73\xaa\xc6\xec\xa2\x56\x0e\x0e\x75\x83\x5c\x6c\x0c\xa4\x87\x29\x03\x24\x95\xa9\xa4\xe8\x7a\xa2\x12\x27\xd4\x91\x79\xa0\xfc\x72\x46\xea\x3f\xee\x3e\xa3\x2a\xa0\x51\x57\x34\x50\xd1\xcc\xca\x7b\x95\x8c\xba\xb1\x67\xfc\x72\xf0\x3b\x46\x9c\x6a\x6c\xac\x9a\x59\xbc\xd1\xa1\xa2\xb1\x1c\x8e\x26\x4e\x23\x89\xf7\x24\x16\x12\x9e\xc4\x13\x89\x9d\xc4\x15\x4d\x24\x72\x45\xb3\x86\x00\xb5\xa6\x1c\x47\x04\x04\x87\x90\x8a\x89\xeb\xe8\x80\xd8\xe4\xa2\xaa\x08\x97\x44\x2e\x06\x9a\x2b\xca\xdd\x73\xea\xec\x3b\x95\xfb\xfc\x67\xfc\x99\xbc\x69\xe9\x82\x8b\x2d\xb5\x30\xcd\xa0\xcc\x41\x20\xe7\x98\x59\xdb\xb3\xad\x80\x52\xce\xe4\x22\xf9\xfa\xba\x5b\x53\x17\xfc\x99\x73\xe3\x16\x51\x7e\xd2\xf4\x06\x1c\xb4\x28\xa3\xbc\xca\x06\x17\xe5\xa6\x2b\xa8\x7c\x10\x77\xc5\x45\x95\x01\x52\x8e\x09\x97\x05\x97\xe5\x3d\x52\x77\x2d\x34\xb6\x4b\x5c\x73\xc1\xe5\x9a\x20\xcf\x10\x3d\xd4\x6c\xf5\x0b\x35\xe1\xbf\xa2\xa5\xf9\x2b\x92\x4b\xb3\xb3\x5a\x4b\xb1\x2a\xdc\x18\x55\xeb\x50\x24\x52\x30\x70\x09\xb1\xa2\x0d\xce\x16\x82\xac\xc2\x0c\x68\x03\xf1\x8d\xdc\xf1\x38\xdc\xf1\x96\x76\x6b\x13\xfe\x60\x87\x3f\x4d\xee\x86\x87\x5f\x9b\xbc\x36\x6c\xf7\x83\x68\xc3\x76\x3f\x56\xcf\xd5\x9e\xf6\x67\x16\x5d\x6b\x3d\x7b\xb0\xee\xdf\x7a\xa0\x91\xc3\xf7\xd6\x0f\x77\x4a\x0f\x75\x2a\x39\xa5\xe1\x8e\x1e\x21\x71\xb6\xa5\x5a\x7d\xcf\xef\xc3\xb8\x83\xc2\x7d\xef\x84\x97\xdd\x13\x7a\x3f\x84\xfb\x8e\x08\x3f\x8b\x3c\xf4\xa3\xde\x6d\x5d\x21\x26\xb9\xd7\x1e\x27\x45\x5b\x4a\x0c\x77\xb4\x87\x94\xab\x27\xe0\xf8\x47\xf4\xba\x9e\xe1\xda\xbb\x77\x07\x3b\xae\xce\xdd\xd1\xb4\x3c\x53\x7a\xaa\xe6\x21\x6a\x06\x5e\x14\x6d\x29\x57\xdf\xe6\xdc\x7f\xc5\xde\x5b\x0d\x69\x3e\xdd\xf7\x9a\x0b\xe8\xc2\x6d\xf5\x73\x61\x52\xba\xc6\x4c\xdd\xe3\x82\x3c\xea\x2e\xd8\xe3\x09\x61\x7e\x9b\x99\x2e\xd8\xdd\x96\x45\xe5\x2a\xda\x7d\x21\xc1\xb7\xce\x11\xad\x75\x54\x27\xe2\x79\x9f\x38\xce\xe4\x1e\xde\xe0\x31\x8a\x9d\xb4\xe0\xdb\x70\xca\x58\x7a\x55\xbd\x2d\xc5\x86\x99\x68\xb6\x17\x82\x35\xd8\x29\x66\x8f\x5e\x91\x7a\xa1\xa5\x9e\xb0\xad\x37\x5e\x5d\x64\x1d\xf0\xea\x42\xcf\x8b\x57\x17\x17\x29\xbd\xb9\x62\x5b\xa0\x8f\x2c\x6d\x20\x27\x19\xd8\xd0\x33\xb0\xa1\x65\x60\x03\x67\x60\x83\x64\x60\xc3\x5a\xa1\xa0\xf7\xe8\xfd\x7b\xf4\xd1\xa0\xa7\x85\xc0\xc7\x50\x17\x91\xee\x8a\x3e\x83\x33\x76\x42\x5f\xe2\x24\x4b\x04\xb1\x23\x6d\x89\x53\x01\x5a\xcb\x0b\x86\xbe\xb3\xdd\x66\x6b\xb8\xed\x6d\xcf\x67\xad\x4c\xd9\xd0\x37\xa6\xdb\xc4\x0d\x3f\x63\xe0\x75\xb2\x4d\xdc\x36\x6b\xdb\x48\xdc\xc6\x21\xa4\x96\x45\xa2\x14\x29\x54\xe4\xff\x1c\x24\xf3\x33\xac\xce\x79\x55\x31\xb9\x35\x2b\x87\x7d\x6a\x37\x4c\x78\x3f\xc1\x9f\xa8\xdd\x4f\xab\xca\x15\x72\x47\x77\xc5\x8c\x99\x4b\xcf\x47\x83\x72\x5b\x8a\x32\x17\x9e\x81\xbc\x64\x06\x67\x98\xe1\xe2\x05\xb2\x40\xc1\xd6\x77\x19\x92\x53\x57\xcc\x50\xd7\x1c\x30\xdf\x2f\x44\x59\xe6\x6b\x7e\xb1\xee\xe6\xdb\x72\x92\xfb\xd3\x90\x8f\x49\x96\x6f\x3d\x9c\x5b\xcf\xe4\xb8\x06\x83\x39\xee\x6d\x7f\xce\x71\xbf\xdb\x80\x49\x6b\xbe\xb4\x01\xe7\xde\x19\xb9\x62\xee\xb3\xaf\x13\x9a\x22\xb9\x3f\xcc\xf9\xf6\x28\x17\x2c\x5a\x39\x95\xb1\x8f\x77\xb1\x73\x40\xb2\x78\xd8\xe0\x29\x9e\x2c\xa3\x52\xdb\xa4\x2b\x54\x1f\xb8\x60\x79\xca\x15\x4b\xc1\x52\xde\x63\xa9\x59\xab\x4a\x60\xd6\x44\x10\x27\xee\x41\x31\x47\x09\x6a\xb6\x9e\xd5\x4e\x5c\x27\x47\x90\x83\x40\xb0\xa6\x04\x99\xf5\xb8\x0b\xa1\x4d\x4d\x98\x57\x55\x2f\xec\x15\x0b\xa7\xed\x08\x64\x9e\x00\x17\x14\xe9\xf8\x80\x65\x1d\x6d\x28\x35\x0b\xd9\x63\x36\xc4\xc4\xc3\x63\xd9\x01\x12\x56\x24\x53\x8e\x6d\xb8\xfa\x1e\xab\x41\x9e\x64\x75\xc1\x6a\x03\x56\x8f\x35\xd2\xf3\x56\xb0\x3e\x61\xcd\x34\x4e\x35\x37\x7b\x43\xe6\xe1\x6d\x91\xac\x3b\xd6\xdd\xd6\xc5\x06\x5c\xd9\x38\x5b\x4d\x6b\xd0\x6a\x5a\xb1\xab\x2d\xc6\xd2\x42\xb1\xda\xe2\xa0\xd2\x74\x5c\xa9\xdb\xa2\x4f\x2a\x03\xf3\x12\x73\x3d\xc3\xf5\xde\x1f\x2e\xf7\x21\x4d\x9b\xac\x60\x8d\xa2\xe6\xe8\x99\x70\x79\xdc\xe5\x9b\x72\xd6\x90\x81\xb4\xf6\xd2\x39\x78\xaa\x4c\xb2\x9d\x17\x61\xd2\xd7\xeb\xd1\xd9\x9c\xab\xad\x4e\xea\xc3\x03\xb3\x1e\x63\xb5\x1e\x83\x45\x4c\x66\xa7\xfd\x20\x51\x69\x1c\xd6\x3e\x20\x4c\xe4\xa1\x39\x68\x9e\xee\xb8\xba\xf1\x1e\x5b\xc6\x8f\xeb\x14\xa0\x68\x95\x5a\x15\xe2\x02\xbd\xb1\x3c\xae\x44\x79\x34\x3b\xd1\x71\x6d\xed\x94\xf1\xde\x40\x93\x63\x3b\x71\x07\x38\xb3\x70\x57\xec\xf3\xbe\x21\x8d\xf4\xed\x09\x38\xd8\x33\x6f\x1e\xe4\xfb\x3d\x6d\xa7\xc5\x84\x4b\x27\x31\x66\x50\xe7\x66\x25\xb3\x31\xd6\x0c\xb1\xeb\x82\x57\x8f\x57\x8a\x7b\x7d\xc2\xeb\xfe\xc5\xe9\x34\xbe\x7e\x79\x2e\xd1\xd1\x7b\x15\x4c\x3f\x96\xd0\x49\x18\x3c\x84\xfa\xe2\x54\x62\x27\x04\x57\x80\xc5\xe9\x54\xfe\x60\x27\xb4\x01\xa7\x98\x41\xe9\x85\x90\xdc\xc6\x42\x89\x74\x0d\xd6\x8e\x70\x90\x82\xe3\x15\xc7\x2b\x01\x4d\x28\x7c\x5a\x2d\x54\x77\x25\x44\x35\xc6\xb5\xa2\xd2\xa8\xf4\xf0\x16\x95\x4e\x39\xb9\x58\x0f\x42\x7e\xe6\xb7\xb5\x54\x54\x26\x92\x4b\xaa\x2e\x84\x6b\x62\xdb\x5e\xb9\xb4\x28\x54\x1e\x54\x28\x48\xe7\xa3\x10\xc9\x6d\x2c\x94\xc8\x01\xa8\x95\x8d\x57\xa0\xd5\x8b\xb9\x81\x09\x95\x9c\x80\x54\x42\x95\xd8\x01\x8b\x20\xd2\xa0\xca\x7a\x61\x31\x98\x2c\xd8\x32\x23\x9a\x18\x9c\x47\x95\x61\x66\xc1\x5e\x73\x41\x95\xad\x57\x22\x25\x21\x91\x9e\x92\x78\x42\x55\x50\x15\x4f\x4f\xb1\xad\x37\xd6\x23\x1d\xba\x9b\xee\x14\x3f\x5d\x86\xc1\xb8\xf9\xce\x8b\x32\xa2\x9c\x0a\xb0\xc8\x22\x2b\xaa\x4d\xfa\x71\xeb\xbd\xc8\xa4\x74\x1c\xde\xe2\xa8\xcb\x19\xf6\x37\x38\xce\xd1\x4c\x19\xae\x74\x3c\xa4\x76\x8c\x36\xbd\xa1\x62\x47\xcb\x39\x8c\x36\xa5\xa6\xe6\x03\x13\x03\x57\x7d\xb4\x15\x4a\x07\x4b\x18\xf7\x8a\xa3\x18\x27\xa3\x07\x5f\xe8\x59\x1d\x23\x65\x15\x63\x2d\xca\x27\x21\x35\xab\x3b\x36\xbc\xc3\x31\x5e\x74\x1c\x5c\xc3\x24\x78\x69\x30\x7c\xdf\x49\xc2\xb1\x17\x9d\x91\x9f\x05\x1c\xb3\x05\xe2\x91\xdc\xce\xa2\x88\x04\x1c\x33\x85\x64\xee\xd6\xb1\xe0\xc8\x4d\xa7\x5a\xb8\x61\x6f\x04\x3a\x72\xd0\x13\x77\x42\x8b\x5f\x55\x65\x4f\xc2\x77\x84\x5c\x69\xa9\xf1\x5b\xd4\x0a\x75\x1f\x57\x4d\x83\xaa\x55\xeb\x35\xad\x3c\xfb\x05\x3a\xb9\x92\x1c\xde\x75\xe4\x68\xc4\x7a\x3a\xe2\xe4\xc7\x2e\xc7\xdf\x80\x2f\x0e\x48\xa9\x2c\x56\x91\xb9\x01\x20\x6d\x79\x5a\xa3\xa6\x15\xbf\x36\xa0\xda\x68\x8b\xda\xa0\x86\x50\xe2\x58\x86\xaa\x68\xd7\xd4\x64\x15\x10\x4e\xfd\xf4\x6e\x2c\x49\xd0\x67\xe3\x66\x3a\x18\x16\xd1\x68\xf4\xbc\xe2\x2b\x0b\xe9\x13\xf6\x5d\x5c\xba\x8b\x43\x5b\x98\x5e\xc0\x25\xa4\xa2\xac\x45\xed\x50\x3b\x9a\x80\x2c\xd7\x6a\x49\xa7\x25\x49\x3b\x0a\xb4\x85\x45\xa5\xf3\x3f\xdf\x01\xb0\xa0\x59\xc4\x98\x18\xac\xc8\xa1\xec\x42\x6a\x83\x1e\x8d\x27\xb9\x10\x41\xd7\xa3\xb6\x0c\x03\x6c\x5c\x62\xa1\xa2\x54\xce\xea\x8a\xda\xad\x85\x76\xba\x86\x83\x07\x55\xd6\x4c\xcd\x68\x1e\xa5\xf2\x05\x85\x28\x35\x03\x3c\x53\x68\xb0\x44\xe5\x51\xf4\x86\x4b\x0a\x99\x1c\xb0\x98\x45\x52\xcd\x18\xa9\x46\xa1\xb0\x7f\x34\x30\xc6\x78\x96\x0b\x8c\x54\xbe\xed\x84\xaf\x34\x62\xf6\xab\xab\x43\x18\xef\x95\x1d\xfb\x6e\x4c\x98\x81\xfa\x33\x86\x89\x85\x15\x99\x1b\x78\xc2\x0c\x81\x80\x63\x51\xe7\x46\xde\x80\x04\x54\x47\x7b\x90\x70\x63\x1c\xb9\xda\xb0\x02\x93\xac\x34\xf9\xa4\x2b\x0b\xd9\x9e\x89\x95\xb8\x66\x4d\x51\x28\xd7\xac\xfb\xa5\x4a\xce\x8f\x46\x55\xc5\x6c\x50\xa1\x5a\x61\x67\x1f\x85\x14\x2f\x51\x41\xa4\x6b\xa0\x3a\xd6\x83\x48\x8c\x39\x2b\x6a\xcf\x4a\x2e\xa0\x6c\xa8\xf4\xc4\xcb\x53\x4e\x92\xba\x35\x5e\x46\xc5\x9d\x77\x59\xd4\x07\x02\x1e\xed\xb6\x4f\xdc\xb6\x09\x4d\xf5\xcc\x50\x59\xac\x22\x73\x83\x80\x3a\x47\xea\x55\xfa\xaf\xb3\xa5\x07\x4b\x70\xe0\x91\x2d\x16\xa9\x23\xea\x40\x13\xb6\x16\xca\xa4\x96\x3a\x7c\x27\x40\x5d\x5c\x6b\x24\x58\x7d\x49\x22\xa9\xc4\xd5\xaf\x0e\xf5\xca\x4f\x05\x49\xf6\xa3\x67\xc0\x20\xf5\x53\xb1\x73\xc7\x70\x10\x75\x63\xf5\x8e\xae\xf7\x3c\x3f\x53\x80\x6f\xb1\x6a\x9c\xd0\x8c\x68\xf8\xf4\x60\x00\x0d\x68\x72\x91\x85\x11\x49\xbe\xd3\x84\x06\x0a\x39\xcd\x22\x8b\xb4\x0d\xc6\x8e\x14\xb7\x59\xc9\x66\x92\x4c\xa7\xd9\x15\x34\xd3\xca\xd7\x91\xc6\xa2\xb1\xc3\x8c\xb4\x5a\x18\xcb\xcb\x67\x41\x63\xd9\x69\x95\x0d\x61\x62\x31\xd0\x73\xc5\x44\xc0\x89\x54\x0d\xae\x84\xd5\x06\x5d\xd1\x44\x34\x11\xc8\x19\x16\x56\x24\x05\x54\x1e\xcd\x86\xc3\x5b\x34\x6d\x89\x37\x59\xed\x64\xf1\xa1\xc9\x31\xa1\x29\x68\xca\x20\x5d\x5c\xaa\xa1\x8d\xc5\xac\xc9\x59\xad\xc8\x5c\x36\x2b\x9d\xaa\x14\x9a\x9d\x17\x56\x73\x35\x17\x04\x04\x83\x54\x12\x97\x03\x33\x04\x04\xbb\xd1\x73\x0a\x9e\xf6\x7f\xda\xe3\xc9\x2f\x68\x72\x91\x85\x11\x09\x08\x4f\x08\x99\xe6\x1e\x70\x02\x7a\xce\xdd\x24\x98\x04\xca\xce\xb8\x40\xed\x38\xcc\x2d\x4a\xe3\x43\x59\x6e\x6a\x3a\xa8\xbd\x8b\x65\x9f\xc7\xb2\x1c\x8b\x33\xac\xab\xc8\xdc\x20\x20\x64\xe2\x39\xa2\x5c\xec\xd1\xce\x0b\xa5\x0e\x7a\xe2\x0b\xc0\xc6\xd9\x60\x65\xea\xac\x3e\xf3\x36\x40\x1a\x5c\x92\xa2\xe6\x96\x3a\x2c\xd1\x09\xa9\x47\xe8\x1a\x0e\x4f\xa1\xf1\x8c\xb2\x43\xb1\x1c\x0c\x4c\x6a\x75\x5d\x2b\xab\xf7\x8d\x6e\x1a\x86\x18\xdc\x15\x79\xff\x6f\xdb\x08\x14\x84\x1a\x4d\xdc\x91\x67\x2e\xd4\xe8\xcd\x15\xe1\x82\x70\xb1\xe4\xf8\xae\x93\x6b\xc3\xa0\x1d\x4e\x4a\x93\xab\x2c\xa2\xc8\xdc\xa0\x6d\x95\x4d\x49\x07\xd1\x6a\xc8\x91\x2c\x58\xd3\xbd\x44\x6d\x1a\x2d\xde\x93\x56\xa5\xc9\x81\x56\xd7\x95\x42\x59\x9b\xb3\x4a\x0b\x4e\x46\xd1\xf3\x22\xa0\x3b\xe6\x83\xd8\x1b\x1b\xef\x28\x10\x2f\x6a\x6b\xc0\xea\x5a\x00\xa7\x85\x96\x8b\x48\x16\x24\xdf\xc3\x6a\x17\xc9\x97\x76\x60\x12\x93\x75\xb4\x2d\x4d\xd6\x39\x32\xa7\x6d\x30\xc3\xe2\xd2\xd0\xc2\x83\x39\x88\xad\x0d\x86\xb7\x38\x91\xe2\x70\x72\x96\x5c\x61\x51\xc9\xb8\xfe\x6e\x78\x83\x7c\xd0\x26\xa1\x44\x56\x9c\x52\x06\x63\xa9\x23\xb3\xd2\xc3\xc3\x77\xdf\x0a\x51\xe6\x37\x21\x7a\x39\x37\x12\x2f\x42\x8c\x49\x8d\x50\xee\x4c\x36\x41\xaa\x24\xa1\x5f\x1b\x49\x2d\x66\x7a\x6a\xd8\x22\xee\x73\x2b\xef\x12\x19\xe9\x41\x23\xe4\xc7\xba\x13\x6a\x0b\xd1\xe8\xae\x42\x32\x0d\x5c\x26\x53\xe8\x22\xb8\x04\xc1\x24\x50\x43\xc7\x47\x26\x95\xcc\xbc\xa9\x46\x36\xfd\xa7\x1a\x59\xd0\xc4\x9a\x6a\xdc\xd9\x73\xc6\x59\xf9\xfe\x18\x76\x9a\x3a\xb3\x37\x4f\xdb\x2e\xb8\x45\x0e\xe6\xb1\x91\xe6\x4d\x4f\x36\x13\x7a\xb4\x67\x63\x87\x05\x2e\x6a\x8e\x81\x79\x49\xf1\x0c\x05\x67\x40\x6a\xe6\x0c\x81\x09\x64\x91\xaa\x41\xed\xc8\xa1\x59\x85\x33\x61\xa9\x86\x60\xa3\x13\x0b\xce\x50\x6b\x3c\x53\x1e\x0e\x67\xa7\x0c\x1d\x45\x1a\x0e\x6f\x71\x76\xd6\x0f\xee\xcd\x43\x27\x8f\x9d\x7c\xd3\xc9\xb7\x9d\x7c\xd7\xc9\xf7\x9d\x1c\xc9\xdf\x75\xf2\xc7\x46\x1e\xde\x74\xd2\x73\x7e\xe8\x39\x4f\x82\x7e\x15\x0c\xfb\x43\x27\x8f\x9d\xb4\xb2\x93\xc0\xd6\x22\x6c\x2d\x7c\x6b\xc1\x5b\xab\xd9\xd6\x2a\xb6\xb5\x7a\x6d\x54\x2d\x4f\x6e\xf8\x9e\x65\x62\x49\x9d\xed\x3c\x4f\x87\xd9\x45\x72\x23\x0b\x25\x92\x3a\x87\x0d\x43\x81\xe1\x5d\x27\x09\x67\x39\xf9\xcd\x61\xcc\xc0\xf5\x27\x32\x37\x18\xbe\xeb\x24\xe1\x1c\x3d\x1f\x63\x08\x81\x0b\x24\x92\x5b\x08\xe4\xfa\xe1\x20\x3c\xe4\xd1\xa7\x63\x1a\xdd\x38\xad\xd3\x87\x9a\x0e\x6a\xef\x62\xd9\xe7\xb1\x68\x9e\xa5\xc5\xc4\x4a\x40\xcb\x02\x41\x26\x4b\x6c\x4e\x19\xa6\x42\x10\x47\x4b\xf5\x68\x5b\x5e\x43\x6a\x65\xc6\x39\xbf\xc5\x39\x0f\x6c\xa3\x11\xae\x39\x03\xa5\xcd\x83\x19\x59\xf6\xe5\x88\xb8\xcd\x0c\x59\xed\x1d\x87\x76\x4f\xc8\x6a\x4c\x84\xbc\x11\x36\xdc\x2c\xec\x31\xd5\xc2\xfa\x45\xcc\xfe\x1b\x7d\x14\x9e\xe8\xc8\x3e\xe7\xa1\xd5\x3a\x0f\x4f\x45\x2f\xe0\x39\xe6\xd3\x0a\x99\x73\xe7\xc5\x8e\x91\x37\x1f\x66\xbd\x64\x5e\x1f\x09\xa1\x36\xb8\x65\x20\xfb\xcf\x9c\x87\x35\x98\xc8\x58\x48\xa5\x95\x99\x25\xb5\x1e\x46\x45\x0d\x03\xcb\x4f\x9b\xe0\xf0\xf6\x60\xd4\x4f\x34\x0b\xc6\xeb\x41\x28\xb4\xf0\xaa\x6a\xc3\x14\x3b\xaf\xd7\x04\xc4\x39\xe3\x1e\xc0\x1b\xcb\xcc\xd7\x12\xf3\x1e\xa3\xc1\x05\x17\x65\xac\xdf\x22\x2e\x7c\xac\x5f\xd4\x5a\xbc\x0a\xb8\xa8\x0d\x32\x2e\x80\x74\x10\xa2\xf5\x82\x90\x17\x0c\x21\x81\x91\xe7\x18\x93\xdc\x42\xf8\x9e\x6e\x01\x87\x7c\x6e\x5a\xd8\x94\x58\xa0\xca\x61\x5a\x48\x12\xe4\x78\x95\x4f\xd3\x0b\x5c\xcc\xea\x13\x2e\xd6\xd9\x0a\xb8\xd0\x82\x4f\x62\x78\xcb\x10\xd9\x72\x5e\xe4\xa1\x58\xdc\x8a\x8b\x3c\x06\x4b\xac\x54\x10\x49\x47\x96\xdd\xd2\xa6\xd4\xc2\x85\x16\xe0\xdb\x0c\xab\xcd\x1f\x59\x0c\xd3\xc4\x98\xd0\xda\x82\x56\xf6\x46\xeb\xb9\x02\x36\xb0\xd1\x6d\x83\x76\xab\x21\x9c\xc8\x59\x16\x4e\x24\xfb\xda\x0b\xda\x90\xc8\xad\x2c\x28\x65\x21\xb7\x00\x30\x4f\x2c\x40\xa4\x6e\x40\x21\x15\x66\x96\x81\x64\x16\x85\x1e\xd5\xb7\x9d\x24\x26\xf3\xe3\xc0\x6f\x80\x6a\x9e\xef\xc9\x23\xda\x14\xf9\x20\x61\xf9\xbc\x6e\x33\xda\x3c\x91\x1b\x74\x06\xf6\xcf\x93\x47\x9b\x2d\xda\x32\x94\xed\xda\x80\x6c\x75\x5b\xac\x41\xdb\xec\x47\xbb\x51\x1f\x0d\x0f\x34\x1a\x8d\x1f\xcc\xd6\x83\x50\x6d\xd8\x6c\x64\x39\x4c\x31\xd6\x10\xa9\x94\xad\xde\x52\xd7\x9e\xb8\xb6\xb4\xb5\x25\xfd\x4d\xe9\xf3\x39\xd8\x09\x98\x09\xb9\x87\xe1\xfb\x4e\xde\xe1\x6f\x67\x9e\x92\xbf\x45\x4b\x33\xfa\xac\x9c\xca\x5e\x3d\xe0\x59\x25\x72\xc3\x37\x24\x3d\xd0\x46\x78\x56\x29\x29\x92\xb4\xf9\x9e\x0d\x84\x62\xeb\xf5\x20\xc3\x5b\x3c\x03\x24\x3c\x17\x4f\xce\xe6\x10\x37\x3c\x57\xb5\xe2\x79\x57\x8e\xec\x08\x87\x4e\xa1\x53\x23\x39\x60\xe1\x44\xf2\xf1\xb5\x6d\x47\x0e\x36\x70\xa5\x41\x9c\x98\x64\x35\x03\x3a\x32\x4b\x48\x0c\x09\x9d\x45\x67\x83\x8e\x9e\x00\x48\x9c\x79\x16\x71\x29\x34\x77\x9d\x8b\x87\x71\x7c\xc7\x69\xa1\x3c\xd4\x74\x50\x7b\x17\xcb\x3e\x8f\x65\x25\x16\xdf\x16\x30\x29\x43\xf3\x69\xa5\xb4\x77\x66\x9d\xd1\x5a\xee\xe8\x00\x41\x03\x23\x84\x52\xf2\x25\x32\xa5\x3c\xde\xc7\x31\x1e\xb1\x8f\xba\xde\x29\x5c\x8d\x43\x4f\x37\x6e\xef\x23\xda\x17\x11\xa9\xc2\x41\x2e\xda\x5c\x54\xc6\x86\x99\x4d\x22\x17\x35\x39\xc5\xc2\xf5\xd7\x7e\x56\x5e\xf0\x71\x5d\x5f\xbe\xfe\xa3\xda\xf2\xf3\x2e\x5b\x9f\x58\xc4\x7d\x1b\x94\xcb\x90\x42\xc8\x86\x86\x8b\x01\x76\x75\x45\x17\xe3\x79\x8a\x99\x71\xa5\x68\x3b\x94\xd2\x60\x78\x8b\xae\x9b\x8a\x2e\x03\x19\xc7\xe8\x32\xd5\x2b\x47\x4d\x81\x59\xc6\xb0\xa0\x2b\x10\x9a\x24\x7f\xc6\x0b\x3a\xa9\x81\xac\xe0\x02\x14\x5a\xb3\x55\x61\x46\xb7\xa1\xdb\xf2\xa3\x34\xb6\x91\xe1\x2d\x7a\xf4\x0a\xbd\xd2\xe4\x32\x8b\x88\x5e\x9d\x41\x87\x82\xb4\x86\x7a\xb9\xb7\xf5\xf7\x17\xb7\x4d\x49\x8d\x70\xad\xbc\x0a\xb4\xd4\x79\x95\xcf\x2c\x6c\x60\x88\x6b\x65\x6c\x57\x58\x9e\x53\xd7\x41\xab\x94\x98\xc8\x6d\x2f\xb1\xb4\xd6\x21\x0b\xcd\x2d\x54\xb1\x18\xe4\x02\x8b\xe9\xb1\xbb\x8a\x46\x3b\x28\x33\xaf\xea\xf3\x20\xaf\x2a\xef\x72\x5d\xa1\x5d\x4c\x38\xf8\x98\xaf\x8d\x3b\x3b\x36\x16\x6f\xb1\xdb\x8e\xc9\x7c\x5f\xac\x5e\x98\xca\xd3\xe8\x55\xd5\x89\x86\xc4\xab\xca\xcf\x91\x57\xb5\xc7\xce\xf2\xba\xf7\xee\xa5\x6f\xb6\x97\x81\xd7\x60\xb9\x23\xa6\x3a\xd5\x6c\xcf\xe8\xb5\x26\x67\xd1\x9b\x37\x03\x7a\xf3\xc0\xc2\xc0\xb8\xce\xc4\x1e\x59\x1c\x6a\x21\xd7\x7b\xde\xd0\xe3\xe5\x4d\xe1\xcb\xa7\x99\x58\x7b\x51\x5c\xbc\x04\x97\x05\x92\xca\x06\xbd\xb9\x92\x39\xce\x30\xa1\x87\xc1\x00\xf9\x92\x91\x2b\x5b\x93\x07\x63\x59\x91\xfe\x68\xd7\xc2\x1e\x9e\x92\xca\xd4\x59\x34\x2c\x90\x67\x16\x80\x7e\x4a\xe8\xa7\x0b\x7a\xde\x34\xfd\x12\x0d\xd5\xcb\x86\x91\xdf\x49\x7a\x7b\x01\x43\xbb\x41\x27\x64\x6c\xa8\xec\xd1\x9f\xdb\xed\xb7\x3f\x93\x31\xe4\xcf\x5c\xcb\x73\x49\xbc\x2c\x79\x87\xde\x0d\xdf\x91\x50\xe6\xb7\x42\x38\x2e\xcb\xc2\x44\x0f\x86\x81\x76\x6c\x26\x32\x09\xdc\xa0\x43\x25\xe0\xee\x11\x32\x71\x4c\x78\x23\x72\x18\xa7\xb9\x34\xaa\xaf\x9a\x26\x1d\x73\x43\x2d\x20\x66\x19\x1e\x44\xde\x62\x3f\x70\xd9\x8d\xde\x12\x3e\x1c\x09\x1f\x45\xde\x85\x8d\xd3\xfc\xa6\x91\x7c\x10\xc9\x78\x5c\xde\x3c\x35\xb2\xb4\xa0\xa5\xc7\xc9\xad\x0a\xba\x13\x33\xa5\x37\x8d\xe4\x83\x48\x3e\xe6\x88\x23\xb5\x84\xae\xcf\x9d\xb8\xa9\xc1\xad\x29\xc4\x7b\x5b\xdc\x74\x57\x61\x37\x1d\xad\x71\x53\x4f\x2e\x69\x42\xcf\x2f\xe4\x56\x87\x6c\xd6\x1b\xb9\x65\x2e\x5a\xcf\xfe\xd0\x9e\x6e\xea\xad\x3c\x56\x7b\x89\xac\x84\x7c\x64\x74\x31\x1c\xe9\xd8\xb9\xbd\x1b\x66\x78\x0a\x3c\xc8\x73\x56\xe6\x4d\x23\x89\x4b\x5a\x7a\x91\x8b\x04\xf0\xdd\x88\x77\x83\x0d\xb6\x0a\x6e\x04\xb4\x6e\x7b\x37\xf0\x67\x16\x6e\xf0\x8e\xd7\x9f\x46\x86\x77\x4c\xa3\x01\x9e\x77\x61\xe4\x8c\x62\xe2\x18\x5c\x47\x5e\x1c\xbd\x6b\x56\xb4\x77\x43\x36\x73\xe6\x62\x32\xa4\xc8\x35\x2b\x03\xd7\xb4\xe8\x98\x85\x90\x0d\x47\xa4\x82\x5e\x82\x7d\x5a\xd9\xb7\xdd\xdd\x78\x07\x9b\xa2\xc2\xa6\x01\xbd\xf3\xaa\x8e\x6c\xef\x30\x15\xc2\xd5\xa5\x7d\xc6\xb7\x8f\x47\x64\x03\xb9\xeb\x94\xb6\xa1\x78\xc7\xe7\x02\xef\x24\xdd\x06\x9a\x49\x70\xb4\x82\x50\xd5\xb8\x3e\x71\x23\x07\xd8\x5f\x63\xdd\xbd\xb4\xba\xbd\x9f\xf2\x3c\x12\x0c\xb4\xf2\x6c\xed\xaa\xd2\x6f\xed\x96\xcd\xb3\x5d\xc5\xb2\x2d\x3b\x01\xe5\x14\x27\x67\x37\xfe\xe8\xa3\xdd\xbd\xf5\xd3\x9c\x60\xd9\x31\x40\x61\xe3\x31\x40\xc5\x00\x3b\x5c\x45\x0e\x6f\x1b\x26\xc2\x82\xc1\x61\x70\xe4\xe9\x86\x3f\xb2\xa0\x00\xd7\x04\xfb\x93\xf1\xc2\x92\x3d\xe1\x92\x1e\x1b\x70\x28\x11\xd5\xb1\xfb\x7c\xd3\x80\xf5\x39\xfa\x6f\x1a\x74\xfd\xdb\x06\xac\xf3\xc4\x09\x64\x97\x7c\xd3\x80\xbd\x5d\x9c\xbf\x6d\xc0\x7a\x9c\x87\x6c\x18\x39\x7a\x1b\x0d\x21\x74\xfc\x11\xc6\x2f\x2c\x02\xef\xde\x18\x22\x86\x28\xaf\xc1\x42\xb4\xe4\x0a\x0b\xa1\xd6\x35\xb8\x22\x0f\x30\x89\x22\x92\x37\x89\x90\x6a\x86\x60\x30\xac\x5e\xb6\x1c\x22\xb4\xd3\x44\x33\x6a\x8c\xce\x0c\x74\xea\x89\x2e\x92\x9b\x59\x58\x91\xd4\xfb\x51\xea\x19\x7b\x3d\x63\x7b\x4b\x13\x03\xc6\x00\xe4\x76\x16\x0a\x9b\x3d\x12\xd3\xa0\xa3\x0b\x5e\x88\x4f\x84\xc6\x4e\x13\x21\x3d\x52\x31\x0d\xa5\x66\x8c\x89\x5d\x64\x31\x8a\xe4\xf2\x78\x52\x35\xa0\xf2\xda\xbc\x6b\x48\x1e\xb5\x0c\x70\xd1\x6e\x2d\x76\x03\x94\xed\x3e\xe6\xba\x50\xdd\x73\x5d\xf8\xea\x29\xae\x48\xcf\x69\x5c\xeb\xc4\xc2\x8a\x74\x0d\x80\xb0\xb0\x58\x44\x42\x83\x03\x2b\xc6\x8d\xcd\x90\xa4\x34\xb9\xe1\x2d\x26\xc5\x1f\x57\xa0\x6c\x67\x2c\x07\x63\x4b\xb1\x1e\x13\xdf\x0c\x26\xad\xc8\x0d\xef\x58\xf6\xbb\xf1\x74\xbc\x3f\x4c\xfc\x02\xf1\x76\xa5\x49\x94\x3f\x36\x92\xb7\x7c\xa9\xbf\xe5\x4b\x7a\xb1\x2c\x98\xc7\x9c\x31\x69\x7e\xc3\x97\x20\x54\xbb\x7a\x4c\x20\x2f\x56\x1a\x52\x34\xc8\x9e\xce\x76\x0d\xa9\x0a\x90\x4b\x0c\xca\x61\x82\x1a\x07\x6a\xc8\xf9\x78\x4b\x95\xce\xf2\xb2\x24\x9d\xe1\x69\xb5\x1b\xe1\x45\x79\xda\x40\x0f\x46\x79\x9e\xcb\xa2\x12\xf9\xf1\x55\xb0\x00\xf9\x3b\x4c\x2e\x22\x2f\x6d\xc9\xad\xb3\x0d\x98\xf8\x02\x9f\x25\x45\x88\xb6\xcc\x71\x92\x8f\xa5\xe8\x99\x16\x52\xf6\xf6\xf9\xd4\x90\x5e\x7e\x58\xd5\x3b\x28\x16\x11\x72\xa7\x4a\x8c\x47\x8b\x08\xbf\x12\x48\x09\x72\xa6\x64\x19\x53\x56\xb6\x88\x1c\xa0\xe3\x63\x23\x09\xbb\xd9\xdb\x30\x38\x62\x05\xf2\x46\x71\x6d\xa0\x80\x88\x3c\xf5\x64\xc2\xb5\x69\xf6\xec\x15\xfd\xb1\xbe\x91\x81\x36\x54\xeb\x81\x59\xdc\x20\xf3\xc0\xe6\xa8\xf3\x5a\xe8\x69\xbb\xd1\x5b\xd2\xee\xc1\xc9\xf9\x63\x5d\x22\x33\x0b\xa1\x59\x35\xf0\xc8\x1f\xd7\x92\x88\x99\xdf\x0c\x27\xb1\xcc\x05\x2c\xa6\x5d\xa6\xc1\x6e\xf0\x09\x0b\x3e\x8d\x57\x72\x05\x9f\x68\xa6\x3c\xc9\x4c\x79\x6a\xc7\xb9\xa7\xe3\x76\xf1\x89\x47\xe5\xa9\x8d\xca\xd3\x13\x8f\x98\x00\xe9\xb4\xa8\x92\x18\xb4\x40\x12\x28\x3b\x3e\xad\xf8\xb4\x2a\xa3\x97\x33\xa1\xbc\x5d\xee\x84\x52\xae\xa4\xf2\x47\x6f\xb4\xab\xc9\x57\xb9\x74\x28\xa1\x0d\x24\xab\x6a\x23\x66\x99\xd2\xb9\x4f\xe9\xac\xe3\x84\x19\xf8\xa6\x3e\x83\xa6\xe3\xe3\xdd\x37\x70\xe4\xbe\x61\x31\x24\x02\xb3\x93\xe4\x0f\xe2\x32\x88\x1c\xd2\xa3\x90\xd2\x40\x62\xf2\x9b\xd4\x86\xad\xeb\x49\xb3\x1b\x07\x7b\x45\x32\x90\x53\x2c\x3c\x36\x5b\x3c\x43\x48\x93\xbd\x60\x86\x04\x9c\xa6\x7d\x2d\x07\x7c\x15\x96\x41\x66\x7e\x86\x52\x23\xd7\xa0\xf2\x77\x78\xf2\x31\xde\xf1\x49\x9e\xc7\xec\xc9\x08\xcd\x71\xdc\x14\x81\xe6\x05\xaf\x21\xb5\xba\xb1\x77\xc4\x26\x7a\x12\x08\x6d\x6d\x20\xfe\x33\xed\xeb\x39\xca\x3d\x7a\x43\x49\x5b\xd5\xd8\x80\x75\xb9\xf0\xc9\x6d\x45\xce\xc7\x92\x9c\x39\x5d\x55\x2c\x84\x56\x68\x40\xcb\x4b\xe6\x1e\x96\x11\xce\x2b\xe6\x35\x90\xe3\xf9\x95\xb7\x49\x8a\x15\xa4\x62\xb6\xd4\x7c\x52\xf3\x29\x0a\x8b\x9a\x80\xbf\x6d\x93\x33\x17\x41\xb1\x58\xd4\x86\x7c\xc8\x21\x61\x32\x94\xd5\xd5\xc2\x0a\xb5\xa8\x68\x2c\x5a\xf1\xe7\x7f\xf2\x0d\xe0\xf1\x25\xa0\x56\xfc\x89\x5a\xd1\x7e\xe0\x35\xa7\xe8\x48\x8e\x2f\x56\x18\x13\x03\x6f\x3f\x4c\x2a\x41\x46\xb1\x90\x58\x72\x15\x0f\x36\xf0\x11\xa2\x68\xda\x32\x59\xb6\xe0\xc6\x5a\xb0\xe1\x16\x0b\x58\x2c\x80\xed\xb2\xac\xd0\xc1\x82\x7a\xac\x40\x82\x46\x72\x1e\xf9\x9b\x45\x46\xea\x03\xc8\x05\x2a\x36\xd7\x5f\x94\x15\x2c\x53\x56\x41\x5b\x85\x65\x41\xda\x44\xca\x02\x8e\x05\xcb\x9d\x9f\x81\x4e\x28\x1b\x3b\x87\x8f\x3e\xc2\x20\x4f\x3e\xd1\x13\x91\x3a\x5a\xbf\x3a\x91\x9c\xc8\xaf\x7c\x0d\xd6\xc9\xf0\x0e\x8b\x5c\xbe\x14\x07\x90\xb0\xc8\x84\x10\x18\xcc\x63\x67\x09\x8b\x8f\xb1\x2e\x58\x82\x4a\x25\xa9\x80\x25\x62\xa1\x8e\xa4\x39\x5e\x12\xa8\x4c\xe7\xf1\x92\xec\xb9\xf5\x58\x67\x54\xaa\x70\xf2\xa4\x93\xd5\x70\x61\x52\x51\xbe\x9d\x29\x6d\xc1\x28\xf4\x64\x14\x7e\x34\x8a\x3c\x1b\xa5\x3d\x1c\x85\xc6\xbf\x62\xa9\x83\x66\xb9\x68\x91\xa6\xc1\x40\x3d\xc6\x6f\xe3\x59\x96\x2b\x13\x36\x60\x4a\x1d\x52\x8e\x3e\x12\xe1\x1e\xaf\x43\x59\xe2\xce\xe8\x93\x63\x5c\x47\x4b\x39\x29\x7d\x46\x7e\x6f\x3d\x5e\x3b\x52\xef\x54\xbe\xd9\x2c\x55\x5b\x16\xd4\x9c\xaa\xe3\x45\x64\x5b\x26\x84\x4f\xf9\x20\x74\xda\x14\x9e\x1a\xd2\xfc\x23\x72\xf6\x1d\x25\xa7\x9e\x7e\xcd\x5b\x03\xe8\xc8\x11\x0c\x50\x63\x80\x52\x41\xda\x2d\x57\x85\x2f\x85\x79\x3b\xa3\x52\x66\xfe\x1e\xd5\x52\xe1\xbf\x45\x4b\xdc\x53\xff\x78\xea\x93\xb4\xc8\x60\x34\xc2\x39\xa6\x45\xc6\xbb\x11\xf1\xe3\x0d\xa9\x54\x99\xb2\x0c\xec\x2f\x05\xb5\x95\x9c\x88\xf4\x21\x55\xa9\x70\x84\xa6\xcb\x70\xf2\xa9\xa1\xd4\x1a\xb5\x16\x20\xbf\x4d\x65\xea\xcf\x1d\xec\x88\x65\xc5\xb2\x72\xe1\x24\xa9\x77\x29\x01\x19\x04\x24\x94\xc8\xdc\xc0\x76\xfc\x70\x10\xc0\xb2\x86\xa9\x7d\x70\xbb\x72\xe5\xd6\xbc\x49\xdf\xad\x79\xe3\xdc\x68\xf5\x24\x41\x3d\xbf\xd1\x92\x55\xb6\x2b\x39\xb6\xa1\x84\x70\xc2\xed\x3a\x70\x4d\x04\xa9\x31\xc2\x24\xc5\x30\x43\xc3\x7e\x86\x20\x65\x01\x65\x0e\x42\x75\x60\xca\xd7\xf9\x47\x0c\xb9\xc2\x6f\xea\x71\x37\xcd\xca\x76\xe3\x77\xd7\x74\x5d\xad\x8d\xfb\x7b\xe5\xbe\xf4\x78\x1f\x10\x0f\x83\x82\xb4\x6e\xfa\x34\xed\x3e\xa8\x6f\x68\xa2\x95\x75\xec\xd8\x9a\x7c\x11\xd9\x35\x89\xc7\xb3\x8e\x81\x06\x69\xbb\xf2\x1c\xdb\xae\xed\x75\x59\xd9\xae\xfd\x25\x46\xa3\x6c\xfc\x94\xed\xda\xee\xe6\x0f\x26\xb9\xf2\x2d\x3c\x93\xad\x85\x3a\xcd\x32\xb6\xa6\xb5\x45\x67\xbb\xf6\x4b\xb9\x1b\x95\xf2\xf9\x66\x88\x90\x4e\x15\x0d\x25\xc5\x51\xa3\xd8\x82\xe2\x11\x14\x7b\xad\xba\xdd\xcf\xb4\x72\xcb\xa8\xc3\x3a\x4a\x25\xbb\x15\x49\xf4\x88\x4e\xac\x93\xd4\x51\xe2\x8b\x6d\x42\x44\xca\x3f\xc6\xa9\x5b\x12\x65\xbb\x16\x99\x44\xb4\xcc\xbf\xed\x84\xdb\x43\xbb\xb1\x80\x04\xd4\x36\x15\x6b\xac\xb4\xc5\xed\x58\x76\x8a\xb8\xcb\xb7\x63\x65\xe7\x05\x67\x97\xe7\x7e\xb7\xee\x8c\x65\xe7\x19\xd4\xb0\x62\xd9\xe3\x41\x52\xa6\x3a\xef\xd2\xc4\xbd\x37\x66\x97\xc5\x76\xaf\x4d\x95\x07\x52\x7e\xf3\x72\x65\x62\x49\xca\x7a\x21\x48\x75\xbb\x86\xaa\x2e\x58\xae\xe5\xb8\xc1\x24\x4e\xab\xcd\xb5\xd0\x39\xa5\x7c\xc8\x11\x68\x0b\xae\x0a\xa9\x55\x55\x8d\x0f\x24\x1e\x49\x0c\x91\xfc\x47\xc3\xc2\x8a\x2c\x0d\x12\x21\xfb\x39\x20\xc9\x77\x76\x0d\x87\xb7\xc4\xf8\x59\xac\x6a\x5c\x59\x38\x91\xaa\x41\xed\x08\xc8\xff\x3d\x7f\x78\xc8\x84\x8d\x32\x22\xb4\x14\xf0\x87\xf1\xd4\xbb\x24\x82\x63\xe0\xcb\x3f\x22\xa5\x1a\xac\x50\xb3\xd2\x4b\xcc\x56\x23\xad\x82\x83\xad\x8c\x19\x2b\xd5\x35\x8e\xe4\x2c\x4a\xb7\xf5\x37\x34\x82\x65\x47\x79\x1f\xcf\xd2\x36\xf8\xd0\x11\xb0\xc6\xf6\xcd\x94\x8c\x6b\xcd\x2a\x14\xa9\x72\x63\xd4\x3f\x44\xc9\xb8\xac\x19\x54\xa5\x8d\x83\x09\xad\x5f\x42\x60\x46\xfe\x9a\xbd\xe6\x30\x0e\xfc\x1d\x1f\x33\x7e\x24\xaa\xfc\x90\x82\x36\xea\x9a\xd7\xa0\x25\xf9\x1a\xb4\x24\x27\x42\xc9\x4b\xfb\x3c\x99\x97\xeb\x5a\x78\xe3\xa8\x85\x6f\x39\x05\x06\xb8\x60\x2d\xcd\x62\x25\xc2\x5d\x57\x72\x8b\x22\xc9\x9a\x05\x50\xcb\x1a\x68\xa0\xa5\x57\xc5\x02\xaa\x6b\xe5\x0f\x45\x08\x77\x45\x1d\xb5\xb6\xdf\x43\xf1\x4f\x0e\x54\x06\x3a\x35\xd6\x3d\x92\xa3\x93\xbd\xc0\x30\x4c\x89\x6c\xd7\x66\x12\x1d\x9e\xed\xc7\xb0\x03\x2d\x3b\xdd\xf3\x78\x91\xf9\xcc\xd7\xa6\x68\xc3\x47\x19\x88\x6f\x79\xe9\x7d\xbc\xeb\xba\xcf\xc1\x7d\xa2\x02\x74\xca\x99\xe1\x79\xf9\x49\xdb\x97\xd1\x9e\x3e\x91\xb4\x59\xa4\x1f\xc5\x3d\x36\xae\xfb\x4c\xcf\xc5\x1f\xf1\xae\x58\xaf\x09\xf9\xa5\x33\x89\x38\xe1\x8a\xdc\xd1\x24\xf8\xb7\xbe\x44\xb4\x37\xd8\xbe\x65\x5f\x0b\xae\xfc\x5b\x04\x90\xab\x18\x1a\x32\xda\xf7\xfc\x99\x3f\x0f\x0d\x74\xf4\x93\x7d\x70\x53\x79\x54\xc5\x6a\x22\xf2\x81\xd3\xa6\xe8\xb0\x1f\x66\xe0\x24\x36\x4f\x0d\x06\x65\x4c\xa7\x5a\x6e\x37\xbb\x26\xaf\x49\xbb\x26\x8f\x6d\xd3\x8e\xa5\xa1\xeb\x36\x1f\x94\xd6\xcd\xc6\xe5\xe3\xb8\xa6\x3c\xcb\x3c\x3e\xd3\xda\xb1\xaa\x69\xd4\x39\x8d\x1e\x85\xf2\x95\x13\xa1\x97\x36\xf3\xd9\x74\x53\xb9\x44\x6e\x63\x39\x22\x0a\x1b\xf6\x7b\xfe\x48\xca\x4e\xe1\x1a\xfa\xcf\x30\x86\x09\x36\xc3\xc4\x9f\xd3\x62\x99\x25\x91\x94\x18\xf4\x7d\x17\x80\x96\x72\x05\x25\x5c\x6a\x20\x28\x3e\x6c\x86\x6f\xa0\x7b\x65\x20\xdb\x40\xb5\x86\x5c\x58\x58\x91\x11\xfb\x2f\x96\x37\x0b\x3b\x8b\xf6\x39\xed\x66\x27\xdc\x76\x57\x70\xef\x1f\x74\xee\x30\x1e\x5d\xbd\xc3\x58\xe4\x67\x23\x23\xcd\x02\x5a\xcd\xf9\xb5\x32\x91\xc7\x4e\xee\xf0\x0d\x93\xfe\xa2\xf2\x8e\x93\xf1\x7c\xa7\xaa\x67\xca\xb3\xc0\x74\x50\x7b\x97\x85\x7d\x9e\x85\xbd\xcf\xc2\xbe\xc8\xc2\x4a\x16\x2b\xad\x9c\xf2\x83\x95\x21\xbd\xfc\xc5\xcb\xa0\x0f\x56\x3a\x5b\xa0\xe2\xbe\xe0\xce\x87\xaf\x7d\xb1\x28\x6f\xbe\xf6\xc5\x3a\x16\x80\xbb\x75\x9a\x96\x18\xc2\x78\x89\x01\x77\xcb\xce\xb0\x88\x22\x77\x02\xb8\x80\xc6\x9d\x0f\x47\x63\xc7\xe1\x6d\x63\x4f\x78\x91\xcb\x86\x4b\xbf\x6c\xb8\xf0\x65\x09\x4b\xd2\x2c\x5e\xec\xf0\x3d\x5e\xbc\xa3\x13\xab\x00\x10\xd2\x20\x5c\x52\x24\x59\x16\x72\x4c\xc0\x89\x74\x78\xa9\x83\xb5\x85\xa0\x32\x28\x32\x11\x09\x62\x30\x78\xa9\xa3\x0d\xac\xf3\x57\xef\x02\xcf\xd8\xf0\xee\x8e\x9b\xc7\x3b\x25\xa9\x23\x21\x5f\x07\x83\xa8\xa1\x0a\x72\xed\x2b\x7f\x87\x7d\xe1\xc3\xc4\xa5\xf2\xa7\x71\x1c\x7a\x7c\x24\x77\xa9\x33\x80\xc8\x01\xf8\x42\xa5\x71\xde\x83\x85\x7b\x75\x06\x4b\x8b\x8c\xa8\xa9\x63\x8f\xee\x8a\x48\x0e\x59\xd4\x5a\x1a\x90\x99\x78\xa9\x8b\x94\xb8\x54\x75\x75\x91\xf2\xa0\x51\xbb\x54\xdb\x6a\xd2\x0c\xc7\x4e\xb8\xb9\x8d\x72\x6b\x0f\x43\xfa\x52\xed\x96\x86\x87\x86\x1c\xb4\x49\x4a\xde\xab\x04\x68\x3b\xbb\x54\x31\x88\x1a\x72\x8e\xc7\xa9\xb6\xd3\x49\xda\xd1\x0c\x6b\x75\xa7\xb4\x7e\xe4\x57\x86\x1d\x8f\xee\x10\x8d\xc2\xc3\x38\x4c\x20\xe8\x26\x46\xa9\x4c\xb3\xdb\x55\x8b\x44\x4a\x86\x56\x5a\xd2\x34\x4b\x18\x44\x8f\x3c\x23\xba\x01\x7a\x30\xa9\xe8\x61\xda\xab\x23\x32\xa9\xb7\xdc\x32\x57\xb0\x99\x79\x9d\x70\x73\x1b\x95\x6c\x84\xb7\x66\xa5\x22\xd5\x4e\x45\xaa\x9d\x0a\xad\xba\x07\xe1\xd4\x99\xf7\x8e\x4b\xcd\x9a\x45\xe3\xcb\x42\xd0\x0b\x97\xc6\x52\xeb\x46\x68\x64\xea\xc4\xbb\x46\x5a\xcd\xa5\x0f\x84\xf0\x2c\xca\xd0\x6a\x43\x4b\xfc\xa5\x96\x69\xe0\xe7\x84\xb1\x5a\x62\xab\xc7\x4b\x25\xab\xf2\xc2\x76\xc6\x1b\xc2\xd6\xcc\x7a\xb4\xb2\xdb\x64\x97\xca\xa6\x14\x5e\x2f\x78\xbd\xd0\x3a\x3a\x0c\x23\x6d\x15\x67\x90\x6f\xdc\x9a\xa7\xca\xa0\x9e\x79\x8c\x2a\x3f\xd3\x4d\xac\xcf\xf5\x1c\xe5\xda\xe2\xde\xf3\x30\x51\xee\x3d\xad\xca\x39\xee\xcf\xbd\x78\x6f\x2e\xcf\xfc\xe4\xe3\x91\x67\x5e\x49\x7f\x9c\x34\xe9\xf1\x53\x9e\x5a\xa5\x72\xf5\x2f\x3c\x9b\xd5\xf1\xd2\x37\xbd\x6c\x7c\xfe\xa8\xf5\xf9\x65\xf3\xc9\xe3\x79\xf6\x59\xab\xf4\x91\xc7\xcb\x3a\x64\x1d\x43\x00\x5d\xc1\x3c\xf7\xfe\xa8\xe7\xf2\xa7\xea\x9a\x3f\xae\xea\x27\x7c\x0e\x13\x8a\x7d\x3f\xa8\x34\x14\xfc\x60\xc3\xc8\x62\x70\x6e\x12\x92\x98\x24\x72\xcd\x33\x0d\xa2\x71\x48\x1d\x74\x1d\xbe\x23\x5c\x74\x47\x23\xc4\x96\x8e\x8d\x94\x25\x36\xe2\x13\x93\x51\x15\x60\xa2\xe3\x85\x91\x8e\xc8\x84\x20\x1f\x90\x7e\xe0\x5b\x19\x26\x64\x40\x12\xda\xcc\xf0\x5b\xb4\xa2\x53\x7d\x69\xbd\x48\xf8\xa1\xb2\x63\x26\xb9\xd0\x01\x91\x31\x39\x2b\x64\xf5\x8c\x35\xb6\x4a\x6f\x2a\x5f\x99\xf0\xbe\xfe\xdd\xed\x47\x9b\x77\x7f\x71\x26\xac\x7e\x04\xf9\x63\x33\xe3\x2f\x7f\xf8\xf2\xd7\x9f\x3e\xff\xe5\xcd\x97\x7f\xfc\xf5\x0f\x9f\x9f\x4e\x5f\x09\xfb\xe2\x27\x3c\x38\xb1\x2f\x3e\xff\x05\xfe\xf9\x57\x8e\xdb\x23\xfc\x62\x7f\xfd\xe9\x2e\xf3\x72\xf5\x63\x74\x5f\x45\xbe\xd6\x8c\x94\xf9\x97\xf8\xe3\x8f\xf8\x8f\x3f\xe2\x3f\xfd\x88\xff\x88\xff\x84\xff\x09\xff\xee\xc7\xff\x75\xe4\xd3\xe9\xf7\x78\x3a\x51\x59\xff\x81\x5f\xe3\xdf\xe1\x5f\xf1\x47\xfc\xeb\xcb\xf8\x63\x56\xfa\x0c\xb5\xfc\xf0\xea\xf5\x2f\xa7\xd3\x9f\x4f\xa7\xbf\x9c\x4e\x9f\x9f\x4e\x5f\x9c\x4e\xbf\x9c\x4e\xbf\xfe\x7a\xfc\x19\xa1\xbb\x3f\x8e\xf3\xea\xf5\xff\xff\xe5\x4f\xa7\x93\xf9\xf3\xc3\x3f\x3c\xfe\x85\xda\xd7\xf9\x17\x3f\xfd\x32\x4f\xf0\xab\xfe\xe9\xf5\x27\x13\x7d\xfe\xf8\x70\xc1\x87\xef\xff\x05\x1f\xbe\xff\x37\x7c\xf7\x2f\xf8\xee\xdf\xbe\xf8\x74\xc4\x2f\x7f\xfa\xbc\xea\xfe\xbb\xeb\x9d\x7f\x6e\xfd\xc4\xbf\xbd\xbe\x62\x9d\xbf\xf8\xea\xcf\x6f\xfe\xe1\x9b\xc7\xbf\x7c\x3a\xe9\x2f\x5f\xfe\xf5\xd7\x56\xb7\x6f\xff\x52\x3e\x51\xfb\x17\x7f\x42\xe8\xcf\x0f\x9f\xce\xeb\xe5\xdf\x35\xfa\xc4\xdf\x33\xfa\xe8\xef\x18\xdd\xfe\x7e\xd1\x31\x39\xfc\xf3\xdf\xed\xf6\x5c\xbe\xfe\xfa\xeb\x9f\x5e\x66\xf4\xbb\xbf\xf1\x37\x97\x6a\x34\x54\xed\xcf\xff\xfb\xbf\xff\x97\x7f\xc7\x3f\xfd\xe9\x4f\xf8\xf3\xbf\xfe\xe9\xbf\xfd\xf3\x17\x3f\xfc\xf4\xfa\x6f\x17\x77\x3a\xfd\xfe\xa3\xbf\xf1\x74\xfa\xfd\xd7\xff\xf7\x4a\xfc\x8f\xd3\xa9\xfc\xfe\x13\xa5\xfe\x1f\x34\xf2\x7f\x06\x00\x00\xff\xff\x59\x2d\x62\xda\x1b\x4c\x00\x00" func runtimeSyntaxStataYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxStataYaml, "runtime/syntax/stata.yaml", ) } func runtimeSyntaxStataYaml() (*asset, error) { bytes, err := runtimeSyntaxStataYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/stata.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSvelteHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x2e\x4b\xcd\x29\x49\xe5\x8a\xd1\x83\x30\x54\xb8\xb8\x00\x01\x00\x00\xff\xff\x8a\xe7\xc3\xca\x12\x00\x00\x00" func runtimeSyntaxSvelteHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSvelteHdr, "runtime/syntax/svelte.hdr", ) } func runtimeSyntaxSvelteHdr() (*asset, error) { bytes, err := runtimeSyntaxSvelteHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/svelte.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSvelteYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x90\x4d\x0a\x83\x30\x10\x85\xf7\x39\xc5\x30\xb8\x2a\x68\x57\xdd\x84\xfe\x5c\x24\x14\x42\x32\xb6\x96\x31\x88\x19\x05\x6f\x5f\x52\xb1\xb4\x55\xd0\x45\x67\x97\xbc\xc9\xfb\x3e\x52\x56\x4c\x32\x34\xa4\x21\xf6\xc4\x42\x4a\x79\x12\x72\xa2\x15\x00\x40\x4a\x83\xad\x49\x03\x1a\x53\x8c\x1b\x19\x2a\xd5\x76\x4c\x71\x5c\xc9\xc1\x53\x69\x3b\x16\x0d\xaf\x73\x9a\x28\xb6\x15\x0d\x78\x8c\xae\xad\x1a\x39\xe3\x3b\xa1\xe0\xd3\xfd\x7e\x16\x7c\x34\x4e\x93\x43\x15\x1c\x77\x3e\xd1\x1f\xb6\xb7\xe3\x1b\x54\x5b\xb1\xc0\x36\xdc\x4e\x06\x25\x1a\xfc\x83\x42\xfa\xa5\x49\xe1\xdb\x60\x41\x40\x06\xa6\x62\x77\x59\xc2\xce\xa3\x15\xb0\x8b\x71\x95\x78\xfd\x05\x65\x9b\xeb\xef\x52\xf3\x01\x9f\x01\x00\x00\xff\xff\x53\xbc\x95\x8b\x08\x02\x00\x00" func runtimeSyntaxSvelteYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSvelteYaml, "runtime/syntax/svelte.yaml", ) } func runtimeSyntaxSvelteYaml() (*asset, error) { bytes, err := runtimeSyntaxSvelteYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/svelte.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSwiftHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x2e\xcf\x4c\x2b\xe1\x8a\xd1\x03\xd3\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\xd0\x4d\x97\xd4\x10\x00\x00\x00" func runtimeSyntaxSwiftHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSwiftHdr, "runtime/syntax/swift.hdr", ) } func runtimeSyntaxSwiftHdr() (*asset, error) { bytes, err := runtimeSyntaxSwiftHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/swift.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSwiftYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x37\x79\x53\x1b\xcb\xf1\xff\xf3\x29\xd6\xf8\xf7\x4b\x00\xc7\xe2\x1d\x29\x57\xb2\x39\x1c\x10\x90\x52\x85\xc3\x65\xc0\x76\x85\xe5\xa9\x46\x33\xbd\x52\xdb\xb3\x33\xe3\x39\x10\x72\x3a\xdf\x3d\xd5\xb3\xbb\x20\x09\x30\xa9\xd4\x53\x95\x76\x76\x7a\xfa\x3e\xa6\x7b\x6b\xd4\x10\x17\x0e\xca\x22\xcc\xb1\x8e\x1b\x1b\x0a\x22\xc8\x58\x6e\x14\x45\x51\xf0\xa1\x11\x0d\x94\xc5\x66\x55\x0d\x32\xc2\xff\x6d\x6e\x6c\xf8\xa4\x21\x94\x1b\x45\xc6\x79\x59\xbc\x13\x31\x82\x37\x21\x6f\x5f\x17\x2d\xb7\x6a\xb2\x35\xde\xae\x26\x19\xd6\xe1\x9d\x39\xf0\x22\x5a\xdf\x23\x86\x45\x33\xb1\x7a\x60\x3b\x70\x59\x6c\x5d\x0d\xca\x3f\xfd\xee\xd5\x0e\xfd\xe5\xc5\xdb\xaa\xfa\xff\x6b\xfa\x33\xfd\x95\x76\xe9\x35\xfd\x66\x7b\x99\xcf\x01\x48\x2d\xbc\x88\x68\x4d\xf1\x0f\x58\xcc\xad\x57\x77\x2c\xa3\x88\xd0\x80\x89\x03\x75\x8f\x94\x95\x11\x21\x58\x89\x22\x82\x62\xfd\x48\x6a\x11\x02\x29\x40\x83\x91\xc0\xa4\x86\xe0\x36\x82\x09\x68\x0d\xb1\xd5\xce\xe3\x8d\x88\x40\x75\x32\x92\xb0\x71\xd6\x47\x62\xdc\xde\xa4\xef\x89\x42\x63\x13\x63\xb3\x53\x84\x26\x0d\x91\xac\x03\x43\xbd\xa1\xd4\x33\x77\xde\x46\x2b\xad\x26\x97\x26\x1a\x25\x31\xcb\xbc\xf8\x24\x23\x85\x34\x09\xd2\xa3\x8b\xc4\x1a\x0b\x8d\x22\xd0\x8d\xf0\x6b\x4e\x3d\xef\xd5\x08\x4f\xfa\x22\x2b\x35\xf1\x20\xbe\x90\x14\x01\x48\x5a\x13\xd1\x24\x20\x05\xb5\x48\x3a\xf2\x0a\x9e\x94\x25\xd0\x01\xa8\x16\x5a\xc7\x99\xb7\x69\x3a\xa3\xda\x7a\x9a\x26\xe1\xd5\x23\x76\xb7\xb6\xd6\xec\x96\x9a\x3c\x38\x10\x91\x3c\xc4\xe4\x0d\x85\x39\x46\x39\xa3\xf9\x0c\x3c\xd0\x7c\x86\x1a\xd6\xb4\xfe\xd2\xaa\x3a\xf0\x10\xc0\xdf\x80\x7a\xe0\xd3\xfe\x60\x25\x76\x78\x83\x71\xc1\xea\xdf\x80\x41\x30\x12\x48\x2d\x8c\x68\x50\x92\x42\x75\x0e\x91\x6a\x64\x87\x4f\x81\xbd\x5f\xe3\x2d\xa1\x51\xe8\x41\x46\xd2\xe2\xdb\x82\x34\xd4\x91\x9a\xc4\x4e\x36\xd3\xc7\x02\xb9\x22\xd4\x58\x03\x64\xac\xe9\x09\xc8\xde\x80\xf7\xa8\x80\x9c\x0d\x91\xb9\x3b\x0f\x12\x54\xd6\xc3\x79\x60\xc8\xbb\x3e\xa0\x1e\xbe\x26\xf4\xf0\x98\xdb\x56\xa5\x78\x9c\xce\x22\x05\x88\x74\xc1\x69\x99\x8c\x9d\x1b\x50\x34\xe7\x60\xcd\x51\xeb\x73\x88\x6b\xae\x3b\xbc\x75\x1e\x02\x27\x6a\x21\x8c\xca\xd5\xf6\xa0\xf2\x44\xa0\x3d\xb3\x20\x29\x38\x0a\x18\x38\x2c\x33\x6f\xe7\x81\x42\x72\xe0\x29\x80\xae\x29\x43\xa8\x83\x47\xbf\x58\x11\xb3\xac\xef\x24\xa1\x8e\x63\xec\xca\x68\x12\x48\xa8\x1b\xc1\x46\x0b\x8d\x53\x63\xeb\x7e\xfd\x20\x74\x02\x12\x66\xf1\x77\x30\x5d\xa2\x8b\x10\xc0\xc7\x6e\x41\x6b\x8e\x04\xea\xe4\x81\x26\x1e\xd5\x14\x8e\xbc\x6d\xce\x26\x9f\x41\x46\xbc\x81\xe1\x63\xae\x5a\x11\xfd\x18\xd1\xa5\x91\xd6\x28\x64\xde\x42\x77\x6c\x2f\xec\xfd\xf9\x23\xa0\x55\x12\xae\x05\x81\x26\x3c\x2b\x5d\xda\x64\x22\xe5\xe7\xa1\x6e\x0b\xae\xdd\x1d\x83\x50\x68\xa6\xff\x04\x6f\xf9\x42\x99\xa4\xe9\x3b\x8f\x26\x2e\xbd\x6a\x43\x0a\x43\xcc\x3e\x53\xde\xba\x23\xf4\x21\xe6\xb7\x63\xc1\x2f\xa9\x71\x04\x46\x5a\x05\xfb\x18\xc3\x5e\xf8\xc8\x45\xfc\xac\x42\x7c\x69\xb1\x9b\x81\xe0\x6b\x12\x9a\x6a\x11\x85\x3e\xf4\xde\x7a\xbe\xc0\x22\xf0\x62\x14\x17\xc3\x7e\xf6\x81\xba\x77\x41\x4e\xb5\x29\xc4\x0f\xe2\x18\x43\xcc\x55\x22\x21\x10\x9a\x2e\x4c\xe7\xd6\x3f\x7a\xd1\xad\xc8\xc7\xd0\xf1\x5d\xf1\xf7\x1d\xf4\x03\xf8\x89\x88\xd8\xac\x9d\x5e\x1a\xfc\x9a\x40\x2f\xde\xf3\x95\xc3\xa5\xa3\x1e\x05\x9e\x5a\x73\x36\xf9\xfc\x7c\x4e\x7c\xb6\x68\x48\xc3\x2d\x4a\x3b\xf5\xc2\xcd\x50\x0a\x3d\xb4\x8d\x13\x1e\xa8\x11\x8e\x1a\x71\xcb\xff\x2e\x62\xd4\xa0\xe1\x7f\xbf\xcd\x1e\x44\x39\xe4\x28\x70\x75\x6b\xe1\x02\x39\xe1\x63\xce\x0e\xae\x73\xbc\x7d\x56\x05\xbe\x05\xfa\x84\xa2\xe5\x4d\x9f\xec\x2e\xa7\x83\xeb\x32\xe1\x6b\x42\xf9\x85\x1d\x4c\x1e\x84\x3a\x46\x03\xe4\x41\x25\xc9\x4b\xad\x41\x3e\xef\x78\x0f\xb9\xb5\x38\x0f\x91\x35\x7f\xe1\xe1\x06\x7c\x00\xf2\x36\x19\x75\xe9\x2e\xec\x1e\xd7\x63\x36\x30\xe0\x37\xb0\x75\xb7\xb4\xf5\x19\x58\x74\x70\x1a\x23\xb7\x1b\x1f\xc3\x47\x8c\x33\x6e\x39\xa8\xe0\x59\xd1\x2d\x1a\x73\xec\x5e\x3a\x9e\x73\xe1\x28\xda\xf3\xe8\xf9\x9e\x8c\x5e\x98\xc0\xd9\x4c\xc9\x28\xf0\x10\x22\x36\x22\xc2\x30\x17\x50\x32\x41\xd4\xb0\xa7\x14\xdf\x61\x67\x75\xb7\xdf\xc7\x6c\xca\xb3\xf2\x5b\xec\x03\x3b\x37\x92\x63\xd6\x6e\x2f\xcd\xdc\x0b\xd7\x6d\xde\xb7\x4e\xa4\x39\xc6\xd9\x21\x77\x74\x05\xea\x18\x6b\x88\xd8\x40\x06\xb6\xd9\xb8\x17\xdf\xe9\x14\xb8\x66\x33\xf0\x32\xd3\xbe\xb3\xd9\xb1\xcf\x6a\xf1\x80\xa2\xcf\xf1\x25\x5e\x27\x29\x8a\x89\xee\x11\x9e\x3c\x08\xbf\x86\xf8\x96\x49\x57\xcc\xdf\xd0\x31\x87\xae\x59\x9c\x40\x14\x0f\xb8\x35\x10\x45\x59\x54\x7f\xe3\xeb\x3c\x45\x2b\xb5\x0d\x9c\xa7\xe2\x46\xa0\x66\xdd\xba\x0e\x9b\x13\x1a\x6e\x79\xf4\x01\x45\xa3\xfd\x3d\x99\x21\xa3\xfd\x03\x08\x38\x35\x19\x73\xb4\x7f\x96\x22\x0f\x38\xa3\xfd\x91\x09\x0e\x64\x36\xae\xed\xbe\x8f\x19\xb2\x24\x3a\xb7\x64\x63\xbb\x89\xc1\x58\x08\x52\xb8\xdc\x71\xed\xe4\xb3\xa4\xd3\xf3\x3d\xe7\x34\xca\x3c\x56\x9d\x08\x34\x74\x7a\x3e\xb4\x6e\xc1\x19\x76\x7a\x7e\x22\x8c\x98\x82\xa2\x8c\xda\x35\xdf\xae\x2d\x3f\x23\xb6\xef\xcc\x14\x21\xb4\xca\xce\x85\x37\xe3\x64\x52\x00\x35\xf6\x10\x78\x20\xba\x1c\xad\x09\x6f\x99\xb6\x4e\x75\x1e\x9c\xb7\x12\x42\xb0\xbe\x93\xd4\x81\xca\xe2\x97\xab\xab\x32\x38\x21\xa1\xbc\xbe\xde\x79\xb9\xbc\xd9\x52\x50\x73\xb1\xe7\x11\x8b\x1f\x58\x13\x18\xc5\xf3\x53\xcd\x0d\x19\x64\xb4\x4b\xb1\xef\x38\x0e\x0e\xb8\x8b\x8c\x14\x47\xa3\x46\xf0\xed\x5c\x3d\x1e\x9e\x1d\x5f\x9e\x9c\x8e\xc7\x34\x1e\x1f\x8d\x8e\x0f\xdb\x97\xcb\xd3\xe1\xc5\xe8\xac\x85\x1e\x8f\x4e\x0f\xc7\xe3\xff\x82\xdd\x77\x14\x96\x56\xa7\xa6\x9d\x86\xf3\x18\x9c\xa3\xaf\xd1\xc0\x52\x7e\x0d\xad\xe1\xc6\x16\x3b\x31\xb2\xdb\x66\x35\xa3\x4f\x79\x98\x0c\x40\x06\xf5\xf6\x1a\xca\xc0\xa4\x66\x02\x79\xe8\xff\xe1\xf5\x1f\xaf\x5f\x6d\xaf\x0e\xb5\xd6\x8b\x29\x14\x17\x6b\xc3\xcd\x20\xb4\x07\x99\xff\xd6\xe5\xf6\xdb\x91\x89\x5b\x7f\xa0\x1f\xdf\xd0\xcf\x3f\xd1\x9b\xdf\x6f\xdf\x1b\xfc\x00\x7b\x64\x38\xac\x26\x52\x77\x4b\xed\x63\xa4\x7d\x6b\x35\x0d\x67\xc2\x0b\xc9\x45\x7a\x60\x13\xe7\xc3\x99\xeb\x66\x83\x23\x6d\x45\xa4\xf7\xc2\x4c\xe1\x3b\x8c\xf7\xcc\xa2\xad\xfe\xb5\x39\x6d\x68\x35\x07\x15\xed\xca\x87\xd1\x40\xde\x83\x5b\x72\xef\xc5\x82\x0e\x30\x83\x84\x5f\x50\x37\xf1\xf5\x5c\xd6\xe7\xbb\x81\xcc\x90\x4c\x3b\x6c\x0d\x60\x0b\x68\x78\x69\xb8\x2a\x41\xb5\xbb\xf3\x19\xdf\xf3\x77\xc0\x6e\xcb\xf6\xdf\xc1\xf2\xe6\xd8\x9a\xe9\x3d\xa8\xdd\xf1\xf3\x21\xbc\x85\x7c\x44\x05\xad\x04\x7e\xfe\xf8\xa6\x5d\x7f\xfe\x89\x86\xad\xb7\x86\xad\x13\x97\x2c\x68\xfd\xbd\x1e\xfd\x90\xa1\xed\x57\x26\xff\x72\x2f\x2a\x8b\x6a\xf3\x0e\x02\x46\xad\xec\xc3\x17\x74\x65\x51\x55\x83\x3b\x48\xff\x19\xba\xf4\x5b\x96\xe0\x40\xa2\xd0\xac\x5e\x59\x6c\x55\xd5\x0f\x54\x55\x55\x45\x55\x15\xa9\xaa\x0c\x55\x95\xa7\xaa\xda\xa4\xaa\xfa\xed\xf6\x53\x2c\xda\x3e\x6b\x75\xff\x69\x57\x55\x5b\x57\x57\x65\x1e\x34\xb8\x42\xaa\x27\x09\x93\x41\x6e\x80\x4c\x92\xaa\x7f\x5d\x5d\x95\xb7\x0a\xa7\x18\xcb\xeb\xeb\x57\xff\xbe\xf3\xcb\x0c\x26\xc2\x4c\x0b\x1e\x01\xee\xbc\xd3\xe4\xeb\x2a\xb4\x47\x65\xf1\xcb\xd6\xcb\x17\xdb\x83\x9d\x9e\xe4\xc0\xca\x62\xd8\xe2\xac\x51\x28\xbe\x7c\xb6\x76\x77\x77\x19\x7b\x29\x09\x99\xf9\x13\x24\x5c\xc9\x65\xb1\xb9\xbb\x3b\xd8\xd9\x5c\x26\xd9\xd7\x56\x7e\x79\x82\x66\xc2\x67\x0f\x82\xb6\xb9\x5b\x55\x3b\x6b\x81\xdb\xac\xaa\x9d\xdd\xcd\xef\x87\x2a\x5a\x65\xcb\x62\x73\xeb\xe2\xec\xe0\x8c\x3e\x7d\xfa\x44\x47\xa3\x4f\x27\x87\xdb\xe5\xdb\x9e\x6e\xc9\xec\xff\x51\xab\x5f\x5d\xb1\x4e\xa5\x0b\xab\xec\xc6\xb3\xc8\xff\x09\x00\x00\xff\xff\x39\x00\x1b\xee\x5c\x11\x00\x00" func runtimeSyntaxSwiftYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSwiftYaml, "runtime/syntax/swift.yaml", ) } func runtimeSyntaxSwiftYaml() (*asset, error) { bytes, err := runtimeSyntaxSwiftYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/swift.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSyntax_checkerGo = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x91\x4f\x8b\xdb\x30\x14\xc4\xcf\xd2\xa7\x78\x11\x2c\xc8\xe0\xca\xe4\xba\x90\x5e\x76\x5b\x7a\x5a\x96\xf6\x5a\x08\xaa\xad\x67\x3f\x56\x96\x8c\xfe\x40\xd3\x92\xef\x5e\x24\xa7\x26\x69\x73\x28\x14\x8c\xc1\xe3\xd1\xcc\x6f\xec\x45\xf7\x6f\x7a\x34\x30\x6b\x72\x9c\xd3\xbc\xf8\x90\x40\x72\x26\x70\x4e\x82\x33\x41\xbe\x23\x9f\x13\xd9\xf2\x10\x53\x20\x37\x46\xc1\x39\x13\x23\xa5\x29\x7f\x53\xbd\x9f\xbb\x1f\x27\x33\xd0\x40\xba\x9b\x68\x9c\x2c\x8d\x53\x12\xbc\xe1\x1c\xb3\xeb\x6b\xae\x6c\xe0\x27\x67\x48\xd6\xc4\x16\x8e\xf0\x78\x80\x35\x52\x7d\x36\x7a\x78\xa6\x20\x85\x12\x0d\xe7\x6c\xd2\xc3\x87\x10\xca\x7b\xd4\x36\x1a\xce\xd0\x07\x38\xb6\x80\x45\x0a\xda\x8d\x06\x6a\x48\x49\x63\x84\x70\xc1\x51\x9f\x74\xfc\x92\x11\xe9\xbb\x44\xf5\xa2\x67\x23\x9b\x16\x84\x3a\xe9\xd9\x8a\xda\xcc\x18\xb9\x25\xa7\xbf\xbb\x3f\x92\x35\xdb\x99\xa6\x18\xbb\x0e\xe7\xa4\x5e\x03\xb9\x64\x9d\x14\x4f\x93\xe9\xdf\xc8\x8d\xb5\x17\xde\xbd\x07\xd1\xc2\x8d\xbf\xe8\x2d\x98\x95\x7a\x9b\xaf\x5e\x75\x88\xa6\xa6\xd7\xe6\x6a\x25\xac\xbe\xdd\x01\x1c\xd9\x15\xeb\xf7\xe2\x03\xa4\x90\x4d\x55\xb6\x7a\x94\xe2\xc9\x67\x3b\x80\xf3\x09\x96\x92\xb7\x41\x3c\xc4\xc7\xaf\xee\x4f\x12\x76\x0d\x6e\x42\x58\xc5\xde\xbb\x44\x6e\xcd\x3e\x97\xdb\xb1\xd2\xee\xef\xe0\x3e\x1b\x94\xeb\x1c\x47\xf6\x8a\x78\xff\x3f\xc8\x75\xfe\x0a\x9e\x63\xf9\x90\x77\x4a\x1f\x62\xf3\x0f\x7b\xf6\xf7\x07\x9d\x79\xb9\x08\x61\x77\x01\x2b\x94\x37\xff\xf0\xc5\x03\xc5\x98\x4d\x04\xf4\xd9\x0d\x3b\xd1\x94\x23\x67\xfe\x2b\x00\x00\xff\xff\xb6\x23\x71\x5f\xfa\x02\x00\x00" func runtimeSyntaxSyntax_checkerGoBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSyntax_checkerGo, "runtime/syntax/syntax_checker.go", ) } func runtimeSyntaxSyntax_checkerGo() (*asset, error) { bytes, err := runtimeSyntaxSyntax_checkerGoBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/syntax_checker.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSyntax_converterGo = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x58\x5d\x6f\xdb\xb8\x12\x7d\x96\x7e\xc5\x5c\x5e\x14\x90\x6a\x55\x46\x93\xf4\x25\xf7\x1a\xc1\xc5\xc5\x16\xed\x02\xdd\x2d\xe2\xdd\xa7\xc8\x68\x18\x8b\x96\xb9\x95\x28\x81\xa4\xd2\x04\xd9\xfc\xf7\xc5\x0c\x29\xc9\xdf\xb1\xbb\xc5\xbe\xd8\xe6\x90\x33\x3c\x73\x38\x87\x1f\x6e\xf8\xfc\x2b\x2f\x04\x54\x5c\xaa\x30\x94\x55\x53\x6b\x0b\x51\x18\xb0\x45\x65\x59\x18\x30\x59\x8f\x65\xdd\x5a\x59\x62\xa3\x36\xf8\xa9\x45\x21\x1e\x1a\xfc\x65\xac\x96\xaa\x30\x2c\x8c\xc3\xd0\x3e\x36\x02\xa6\x52\x15\xa5\xb8\x6e\x4b\x01\xc6\xea\x76\x6e\xe1\x29\x0c\xe6\x75\x59\x6b\x70\x63\xc3\x80\xbc\xbb\xd6\xb3\xf7\xfb\xd4\x96\x56\x1e\x74\x33\x96\x6b\xdb\xb7\x84\xca\x01\x56\x82\x8c\xc7\xf0\x73\x2d\x15\x45\xb0\xfc\xab\x30\xc0\xc1\x3c\x2a\xcb\x1f\x40\xa3\x2d\xfa\xb6\x94\xf3\x25\xcc\xb9\x82\x3b\x01\x15\xce\xd6\x94\x02\xb4\x28\xda\x92\x6b\x10\x0f\x8d\x16\xc6\xc8\x5a\x99\x18\x63\x71\x95\xc3\x1f\xb5\x54\x06\xa4\x05\xa9\x6c\x0d\xb5\xda\x35\x1a\xee\x1e\xe1\xd7\x6b\xa9\x0a\x10\xf7\x42\x3f\xda\x25\xfe\xb4\x75\x21\xec\x52\xe8\x70\xd1\xaa\x79\x0f\x2b\xd2\x3e\x3b\xa9\x8a\xd8\x7f\x63\x96\xa6\x29\xa5\x85\xcb\x89\x37\x99\x74\x8a\x06\x1a\x9d\xc0\x2d\x03\x76\x1b\x87\x01\x62\x11\xf9\xea\x28\x0c\x1b\x91\x6f\x02\xec\x4f\x16\x23\xaf\xb6\xd5\x0a\xdc\x50\xe4\x84\xa6\x6f\xb8\x36\xe2\xbd\x2c\x45\x64\xc5\x83\x4d\x60\x21\x4b\xa1\x78\x35\x20\x89\xd0\x82\x6b\x90\x78\xc2\x12\x58\x0a\x9e\x8b\x8e\xf9\x84\x08\x34\x70\x33\x93\xca\x0a\xbd\xe0\x73\xf1\xf4\x1c\x23\xf2\x52\x2a\x61\xb6\x91\xbb\x79\x58\xa6\x58\x1c\x86\xc1\x78\x0c\xd7\xb4\xe0\x8b\x5a\x13\x18\x4c\xdb\xaf\x8c\xb1\xdc\x8a\x4a\x28\x6b\xc2\xc0\x99\x3e\x23\x5a\x8d\x31\x5d\x8d\xa5\x9f\x5a\x63\xff\x5f\x57\x0d\x26\x70\xeb\xdd\x58\x94\xbe\xbe\x8a\x59\x66\x46\xf8\x2b\x66\x23\x64\x68\xe7\x3c\x7d\x22\xc3\x3c\xce\x74\x78\x1e\xef\xe6\xa2\xdf\xee\xcf\xc2\x72\x95\x73\x9d\xaf\x16\x9a\x09\x03\xfc\x3a\x1c\xdf\x15\x36\x65\x91\x99\x51\x74\x75\x99\x45\x51\x3a\xba\x8a\xaf\x32\x6c\xc7\x57\xfd\xc4\x07\xd9\x73\xcb\xf2\x4d\xda\x25\x90\x36\x26\x2c\x4d\x53\x06\x42\xe5\xee\x97\x43\x32\xc5\xae\x9f\x54\xfe\xf7\x10\xf9\x09\x08\x57\x66\x46\x34\xc7\xc0\x0e\x82\xc3\x62\xf8\xa5\xad\x12\xfa\x41\xd3\x70\x55\x08\x70\x35\xf2\x14\x06\x54\x2d\x30\xd4\xca\x6f\x5a\x56\xd3\x86\xcf\x45\x84\x1d\x71\x18\x04\x72\xe1\x7c\x27\x13\x60\x8c\x5c\x82\x79\xad\xac\x54\xad\x08\x83\xe0\xd9\x8d\xe8\xdc\x3f\x70\xf3\x59\x8b\x85\x7c\x20\xf7\x04\xd8\xbf\x59\x7c\xb2\x8f\x23\xb2\x73\x74\xad\x4f\xdc\xce\x97\xbe\xac\x57\x4a\x32\x7d\x2f\x55\x3e\x6d\xef\x2a\xec\x8e\x6e\x66\x77\x8f\xd6\x23\x47\xe8\x84\x5d\xa8\x68\x2d\x44\x8c\x99\x9c\xbb\xd8\x41\x27\xb2\x9e\x81\xf5\xb1\x37\x6f\x67\x14\xc7\x83\x80\xc9\xb0\x6d\xec\x1c\x7e\x36\x73\xf3\x3e\x83\x28\x8d\xe8\xe6\xa8\x6c\xfa\x59\x4b\x65\x4b\x15\x75\x32\x4f\x86\x85\x61\xd3\x0d\xd5\x81\x34\xa0\x6a\x0b\xf7\xbc\x94\xf9\x25\xb0\x51\xb7\x12\x6b\x24\x12\x8b\x2f\x31\xe9\x14\xd3\x31\x39\x1e\xc3\x87\x0d\xe5\xa1\xd9\x0d\x5a\x21\x78\x55\x8b\xc7\x11\xbc\x16\x82\x08\x3e\xf3\xc9\x7b\xcd\x6e\x13\xb7\xe6\x82\x3c\x9f\x4e\xdc\x66\x32\x27\x11\x17\x12\x1f\xd3\x41\xb3\x09\xdc\xb5\x16\xcf\x95\x79\xdd\x96\x39\x1e\x47\xfd\x46\x42\xc7\x1d\xd7\xf6\x8d\x50\xb9\x63\x7c\xd8\x4c\x52\x4a\x61\xea\x92\xa2\x09\x7b\xb2\xa7\x3b\x36\x22\xdf\x45\xbe\x60\x97\x4e\x89\x54\xe6\x9e\x63\xd2\xe8\x10\xfd\x30\xfd\xf7\x5c\xc3\xfa\x71\xec\x6c\xb4\x97\x4c\xed\xa6\x79\x51\xf2\xc2\xac\xd8\x3a\x79\xf8\xf8\xb4\x70\x17\x9e\xfc\xf1\x18\x3e\x52\x37\xb2\x7a\x81\x50\x15\xe1\x6d\x71\xbb\x32\x8d\x98\xcb\x85\x14\x39\x98\xba\x12\xc0\xf3\x5c\x5a\x59\x2b\x5e\xfa\x29\x6c\x8d\xe3\x3c\xf3\x08\x6f\x90\x97\x9f\xab\x57\x96\x73\xd8\xee\x3f\xf3\xfd\x72\xe1\x63\xfe\x6b\xd8\x7f\x82\xa0\x4f\x70\x02\x2c\xba\x62\x30\xf2\x83\x46\xc0\x62\x6c\x6d\xc9\xb4\x0b\x7b\xee\x0b\x6d\xbd\xd2\x56\xe3\x1d\xe1\xba\x52\xa9\xbb\x28\x3c\xdf\x45\xe1\x79\x02\xaa\xde\x66\xea\x9b\xd0\x02\x0a\x79\x2f\xd4\x51\x6c\x1d\x83\x73\xe7\x26\xb4\x86\x05\x45\x72\x8e\x55\x4d\xeb\xaa\x05\xda\x38\x34\xba\xbe\x2b\x45\x75\x94\xf4\x3e\x2a\x12\xd9\xa0\xbd\x43\x72\xc3\x4f\x77\x2a\x4e\x80\x37\x8d\x50\x39\x5d\xa3\x4c\xb2\x72\x2d\x7d\xa2\xcc\x93\xbe\x72\x9f\x31\xd0\xc0\xf1\xf6\x91\x79\x58\x77\x4e\xab\x9b\xc2\xdb\xd4\xd8\x46\xc4\xef\xd3\xda\xfa\x05\xd8\xd9\x68\xee\xde\x32\x1e\xc3\xef\x46\x40\x45\xd7\x57\xe3\x17\xfe\xee\x11\x72\xb1\xe0\x6d\x69\xf7\x29\xf1\xdd\xae\xa5\x7b\x37\x88\xb0\xd1\xf5\xbd\xcc\xf7\x69\xf0\xa8\x72\x72\xd8\xb7\xfb\xcf\x7d\x3f\xe6\xb1\xdd\x7b\x31\x8b\x5f\x50\xc0\xfe\x4d\xc4\x41\xcf\x65\x4e\x45\xe8\x53\xf8\xb1\xe0\xcf\x0e\x82\x3f\x9f\x1d\x21\x8e\x0b\x14\xc7\xbb\x7f\x4c\x1c\xe3\xb1\xbb\x35\xde\x50\xca\xb3\x7d\x9b\x1a\x8b\xf0\xd3\xa5\x8d\xb6\xf4\xf5\x15\x59\x30\x51\x1a\xb3\x5f\x68\xfd\x3b\xae\xd3\x19\x45\x49\xd0\xd5\x29\x2d\x24\x28\xee\xad\xd2\x3f\x52\x0a\xa1\x84\xe6\xd6\xbd\x53\xbe\xef\x3d\x32\x3c\xa8\xea\xd6\x36\x2d\xbd\xa8\x18\x0b\xfb\xe6\x68\x02\x48\xe7\xb4\x41\x3e\x17\x11\xeb\x66\xb9\x84\x57\x26\x53\x99\x62\xee\x69\x84\xa6\x78\xaf\x53\x2e\xac\x98\xdb\x4b\xc8\x14\x00\xf4\x4f\xa9\x4b\xc8\xd8\x2b\x93\x31\x0a\xd2\x5d\x91\xae\x45\x53\xe2\xed\x76\xab\xed\x73\x62\x59\xc6\xe8\x93\xbe\xdf\xbc\x8d\xb1\xc1\xbc\x89\x39\x13\xde\xad\xe5\xa2\x4b\x7f\x38\x97\xf6\xa0\x43\x4c\x6e\xec\x49\x88\x9c\xcb\xb1\x88\x68\xf9\x06\x00\x2c\x53\xb4\x1c\x97\x99\x62\xfe\x25\xf0\x25\x01\x3d\x3c\x00\xdc\x62\x3d\x0d\xb7\x99\x04\xea\xaf\xd4\x9d\x46\xc3\xae\x1c\xff\x07\xad\x24\x92\x03\xc9\xbd\x81\x57\x66\x2d\x35\x8c\x97\xf6\x85\x76\x38\x4d\x1a\x4b\xbb\xfe\xd1\xa9\x6e\x9c\x0b\x2b\xc8\xfb\x32\x3f\x01\xf8\x06\xe2\xf8\x05\x1f\xa0\xff\x37\xb8\xb6\x27\x2d\x26\xc5\xf7\x9a\x3b\x36\xcb\x97\x50\x08\x95\x9f\x8e\x41\xa8\xfc\xc7\x21\x70\x25\x06\x37\x33\x52\xea\xd6\x3e\x02\xce\xbd\xdf\x4e\x2a\x2e\x55\x44\xc7\xb4\x3f\x33\x6a\x93\xfe\x4f\x17\x26\x86\xff\xfa\xf7\xc2\xea\xce\xca\xf0\xba\xa4\x0b\x43\x71\xfd\xc6\x44\xc1\x73\x6e\x79\x02\x5f\x70\xc9\xdd\x3f\x60\xe9\xb5\xe0\x39\xed\x51\x3e\xa0\x3b\x22\xfa\x60\xd1\xda\x3e\x36\xfc\xf3\xe2\x8f\x06\x8c\x17\x27\xb0\xe2\x1b\xc7\xe1\x73\xf8\x57\x00\x00\x00\xff\xff\x09\x67\x45\x7d\x81\x13\x00\x00" func runtimeSyntaxSyntax_converterGoBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSyntax_converterGo, "runtime/syntax/syntax_converter.go", ) } func runtimeSyntaxSyntax_converterGo() (*asset, error) { bytes, err := runtimeSyntaxSyntax_converterGoBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/syntax_converter.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSystemdHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xae\x2c\x2e\x49\xcd\x4d\xe1\x8a\xd1\xd3\x28\x4e\x2d\x2a\xcb\x4c\x4e\xad\x29\xce\x4f\xce\x4e\x2d\xa9\x29\xc9\xcc\x4d\x2d\xd2\x54\xe1\x8a\x8b\x89\x0e\xcd\xcb\x2c\x89\x89\x55\xe1\x02\x04\x00\x00\xff\xff\x60\xa0\xcf\x35\x2d\x00\x00\x00" func runtimeSyntaxSystemdHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSystemdHdr, "runtime/syntax/systemd.hdr", ) } func runtimeSyntaxSystemdHdr() (*asset, error) { bytes, err := runtimeSyntaxSystemdHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/systemd.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxSystemdYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x58\x4d\x93\xe3\x28\x12\x3d\x4f\xff\x8a\x8a\xda\x3e\x74\x6f\xc7\xf4\x71\x0f\x15\xb1\xbb\x21\x4b\xb2\x8b\x29\xeb\x63\x84\x5c\x35\xb5\xed\x1e\x05\x96\xd2\x36\x6b\x0c\x1a\x40\xae\xf2\x2c\x3f\x7e\x03\xf4\xed\xe9\x8b\x9d\xef\x81\x00\x41\xe6\xcb\x14\x7b\xca\x40\x5f\x6b\x78\xb8\x53\x57\xa5\xe1\x5c\x7d\xf8\x50\x81\x86\x52\x3f\x7c\xb8\xbb\xbb\xbb\xb3\xcd\x9c\x9c\xe1\xe1\xee\x7e\xbb\xfd\xfa\x49\x81\xbc\xd0\x12\x8c\x12\xe5\x09\xb4\xd1\xf4\x0c\xf2\xf3\xc7\x7b\xd7\xf5\x08\xa4\x02\xf9\x70\x77\xff\xfb\x76\xfb\x6d\xc3\xa9\xde\x6e\xbf\x7f\xbc\xff\xf0\x41\x36\x0c\x54\x3b\xda\xcf\x77\x4a\x13\x0d\x67\xe0\xda\xf6\xfb\xe4\x95\x25\xd4\xda\x78\x7b\x0d\xd2\x78\x8c\x12\x65\x3c\xc6\xc4\x1b\x52\x82\x11\x0d\xc6\x63\x4a\x18\x2f\xc6\xa8\xf0\x93\x75\x92\x99\xc2\xdb\x04\x28\x2f\xd6\xc9\x0a\xc5\x1b\x14\xf4\x18\x87\x18\xa3\x24\x36\x0b\x52\x9e\x98\x38\x98\x05\xec\x85\x04\xb3\xa0\xbc\x42\xe9\xe5\x1f\x09\x67\x57\x07\x54\x2e\xdc\x7f\x2e\x02\x70\xaf\xb1\x60\xa2\x3c\xa1\x24\x03\x52\x2d\x08\xaf\xde\x68\xa5\x8f\x3d\xf9\x02\xf4\x70\xd4\x03\x92\x54\xc3\xd8\xa7\x58\x24\x49\x5e\xa0\xc0\x2c\xa4\x20\x55\x49\x94\x36\x8b\xcd\xaa\xc8\xc2\x34\xc9\xf2\x62\x93\xad\xcd\xa2\x51\x31\x39\x83\xf1\x49\x4d\x76\x94\x51\x4d\x41\x8d\xe0\xba\x10\x0d\xaf\x28\x3f\x60\xd0\xc6\x7f\xf4\x30\x46\xd8\x94\xb4\x3e\x82\x34\x25\x23\x4a\x99\xc2\x8f\x82\x35\x8a\x43\xe3\x27\x41\x58\x2c\xd1\xba\xb7\x36\xb1\xdf\x5a\xae\xb5\xf0\x93\x28\x32\xbe\x38\xd7\x12\x94\x32\xbe\xe0\x15\xd5\x54\x70\xcf\x4f\xc5\x1b\xc8\x91\x18\xa7\x1e\xb9\x80\x4a\x28\xb5\x90\xd7\x58\xe8\xf0\x5c\x4f\x9b\x96\x94\x01\x52\xe1\x3b\x94\x8d\x26\x3b\x06\xf3\x96\xbf\xf6\x7f\x14\x4a\x8f\xe8\x09\x24\x07\xe6\x8b\xf3\x99\xf0\x6a\x4d\xf9\xe4\xf1\xb8\x61\x6c\x44\x29\xd1\xc7\xf0\x9d\x2a\xad\x7e\xc4\xad\x98\xd8\xcd\x79\xa4\x86\x35\xdf\x36\x44\xa2\xe1\x3a\x15\x94\xeb\xdb\x16\x7b\xbc\xee\xfc\x6e\x1b\xf0\xf5\xbc\x13\x8c\x96\x6b\xca\x4f\x63\x1b\x86\xb2\x91\xb3\x7d\x7a\xa6\x52\x37\x84\xd1\x3f\x89\x45\x96\xdf\x33\x5a\xb6\x6b\xd6\x52\xb0\x95\x14\x4d\x3d\x03\x9e\xd6\x92\xee\x9a\x76\xca\x81\x8d\x44\x45\xf7\xd7\x19\x95\x82\x54\x54\x69\xe0\xda\x94\x2d\xcd\x40\x0e\x03\xb7\x76\x1a\x16\xb1\x17\x85\xc6\x4f\x37\xde\x7e\x4f\xb9\x5b\x5b\xba\xc1\xe5\x11\xaa\x86\x51\x7e\x48\xed\x4b\xdc\x72\x92\x0a\xf9\x97\x9e\x19\x28\xd0\x09\x5f\x0a\x79\x72\x0d\x47\x22\xad\x5b\x4a\xa2\x8e\xfe\xf1\x39\x6f\x2d\x7c\x04\xc6\x4c\x51\xf8\x9b\x0c\x27\x99\xa9\x60\xd7\x1c\x4c\x00\x7b\xd2\x30\x3d\x5d\x58\x47\x05\x50\x03\xaf\x80\x97\xd6\xc3\x3b\x6e\x4d\xcf\x54\x7b\x78\x06\xfd\x24\x0b\xe7\x44\xba\x99\xe1\xc0\xcb\xbd\x19\xb1\xc4\xe8\x3f\xf3\x47\xd6\x89\xff\x34\x1f\x35\x0a\x23\x4b\xce\x39\xbc\xfa\x75\x13\x6e\xe6\x8f\xc6\xc8\xbf\x21\x12\x17\x55\x33\x2a\xcd\x12\x7f\xc6\x64\x78\x3e\x5d\x96\xa7\x19\x4a\x6e\xa8\x1c\x45\xf3\x71\x30\x5a\xa5\x61\x1c\xa0\x78\x35\xa7\x73\x6f\x5c\x29\xd6\x84\x57\x44\x56\xa1\x94\x42\xde\x92\x49\xa3\xeb\x46\x9b\x00\x54\x29\x69\xed\xbc\xae\x95\x2c\x27\x8f\x9d\x1d\x00\xbf\x9a\x21\x1e\x22\x51\x81\xf9\x6b\x44\x07\xa2\x6c\xac\xde\xb6\xae\x1b\x34\xe7\xda\xb7\xda\x08\xf6\x18\xeb\xab\x09\xf9\x85\x4a\xc1\x6d\x8f\xa9\x6d\x83\xdc\x84\x59\x16\x27\x06\x2e\xc0\x75\x61\x95\x5e\x34\xda\x14\xe1\x6f\xa1\xb1\xb2\x90\x01\x13\xa4\x72\x26\xd6\x44\xea\xd1\x4a\xad\x14\x8c\x48\x42\x07\x44\x3d\x18\x93\x2e\xa2\xb6\x3d\xf6\x94\xd9\x14\xb0\x4c\xe2\xdc\xfd\x14\x91\x97\xb6\xc6\x26\x46\xce\x16\xf2\x8d\xc8\x2a\x17\xbe\xe0\x4a\x30\x18\x89\xa7\x48\x1d\x46\x84\xaf\xca\x66\x80\xa5\x04\xb0\x4a\x6f\xf6\x12\xfe\x30\x4b\x55\x9e\x52\xa2\x54\x2c\xcc\x5e\x69\xb2\x33\xc5\x0a\x05\xa6\x8d\xda\x55\x03\x4a\x45\x84\xf2\x14\x05\xe6\x91\xf0\x8a\xc1\x23\xdd\x81\xe4\x44\xc3\x13\x5c\x3b\x6a\x4d\x2b\xfc\x46\x75\x79\xec\xb0\x13\xd7\xb1\x19\x37\xca\xc6\x80\x25\x8e\x44\x1d\xcd\x74\x04\x74\xe0\x42\x02\xe2\x47\xba\xa3\x1a\x2a\xf3\x98\x44\xa1\xcb\x10\xc5\x63\x82\x73\x17\xd8\xc8\x4f\xe2\x36\xc4\x51\x60\x50\xc5\xc0\x2b\xdd\x69\x8d\x26\x86\xd2\xa0\xa0\x58\xa3\x27\xdb\xa7\x88\x92\x20\x5c\x0f\x46\xb1\xcc\x92\xa8\xb0\xd1\xb3\xf0\x70\x68\xda\x09\x13\xde\x27\xd1\x1e\x63\x4e\x6a\x75\x14\xba\x23\xac\x8f\xa2\x34\x34\x88\x93\xb2\x04\xa5\xe8\x8e\x41\xef\x3e\x36\x92\xbb\x15\x07\xc0\xc8\x35\x22\xef\x76\x05\x56\x7a\x0c\x4a\x46\x39\xf1\x5d\xaa\x9a\x32\x83\xec\xa0\x34\x4f\xb0\xfd\xcd\xd7\xe6\x17\xb1\xcb\x5b\xff\xb1\xa3\xfc\x22\x28\x9f\xca\xc8\x13\x40\xed\x31\x7a\x01\xf3\x14\xbe\xda\xb3\x6e\xff\x8a\x3c\x59\xad\xd6\xa1\x79\xa2\x8c\x85\xef\x25\x6b\x2a\xd8\x28\xd7\x9f\x32\xe6\x9c\xdd\x1a\x36\xb7\x8f\x34\xa6\x07\x4e\x98\x33\x2d\x99\x4a\x61\xdf\x0c\x94\x19\xce\xef\xf6\x34\x7a\xa1\x1a\x15\x6a\x90\xa6\x51\x93\x26\x62\x34\x51\xa1\x99\xfc\xcc\x75\x67\x14\x9c\xa9\xd2\x4c\x24\x66\xd0\x96\xa9\xa8\x4c\xd5\xe4\x56\x46\x26\xfa\xc1\x28\x3f\x15\x75\xbf\xcf\x17\xc2\x1a\x58\xbb\x14\x12\x10\x4d\x0e\x92\x9c\x4d\x0b\x97\x68\x99\x74\x66\x04\x4a\x91\x03\xfc\xda\x40\x03\x1d\x15\x83\xb6\x03\x75\x08\xc3\x1f\x0d\x70\x4d\x09\x4b\x89\xab\xec\x3a\xba\x86\x92\x12\xd6\x23\x2d\xc1\x8e\x2e\x0e\xbe\x60\x42\x5a\x63\x0d\x17\x60\xce\x10\x65\xab\x30\x6b\x71\xc8\x89\x3c\x80\x36\xac\x39\x29\x53\x44\x9e\xff\x88\xe2\xd0\xd6\x4a\x11\x39\xc1\x98\xbe\x23\x22\x4f\x26\x22\xef\xbe\xe0\x1c\x9c\x93\x2b\x0b\xad\xf2\x58\x2f\x89\xc8\xbb\x1b\xbc\x8f\xf7\x1e\xbb\x70\xef\x01\xd6\x56\xcb\x06\xd4\xc6\x7e\x44\xde\x33\xb0\x19\xb5\x8b\x9b\x08\xce\x42\x5e\xdd\x06\x76\x36\x16\x7b\xdd\xe1\x10\x63\x6f\x15\xf6\xff\x6e\x95\x93\xbd\x8a\xc8\x7b\x07\xd5\x9c\x6f\x6d\x4c\xff\x04\x53\x14\x51\x12\x27\x79\x12\x23\xbf\xb0\x47\x87\x73\x2f\x4a\x8d\xab\x46\x96\x8c\x1c\x94\x71\x81\x1d\x7b\x8d\x16\xcf\xb9\x32\xb1\xad\x3b\x63\xc1\x5d\x5d\x49\xf9\xc1\xc4\x22\x86\xb7\x54\xd2\x0b\x65\x60\xe7\x89\x85\xa6\xfb\xab\xe7\x62\xd2\x24\xdc\xc6\xff\xc5\xed\x48\xc2\x17\x42\xe8\xd6\xf2\x09\x03\x9b\x28\x4c\xc2\x97\x84\xb2\x46\xc2\x68\xf5\x71\x9f\x70\x27\xc0\x4d\xdd\x3e\x62\x2b\xf2\xe9\x60\x16\xdb\xd8\x1f\x98\x24\xc2\xa5\x90\xe0\x55\xff\x6d\x94\x36\x49\xdd\x1e\x89\x68\x33\x51\xea\x45\xae\x9c\x4d\x89\xd4\xc9\xde\x58\x35\xf5\x25\x54\xad\xcf\x28\x87\x87\xba\xc9\x16\x57\xfe\x91\xf0\x03\x54\x66\x52\xe0\xdd\xd4\x75\x16\xba\x82\x88\xda\x6e\x20\xcf\x54\x29\x3b\xa3\x5b\xb4\x2b\xd9\x0b\x2b\xc9\x29\x0a\x5c\x32\x4a\x69\xdd\xee\x77\x2f\xbd\xb7\x91\x9c\x66\x61\x9e\xbf\x8e\xa2\xda\xe1\xd6\xee\xa3\xc5\xc6\x59\x86\xf2\x57\xcb\x5c\x88\x86\x18\xf4\x9b\xad\x85\x3a\x98\x9f\x6b\x93\x4a\x51\x93\x03\xd1\xa0\xda\x14\x97\x0b\x53\x2b\x65\x32\xa2\xc1\xf9\xcc\xa2\x91\x4a\x8f\x10\x71\x0d\xf2\x42\x98\xb1\x55\xa6\x5d\xf6\x54\x43\x87\xca\x73\x4a\x16\x45\x16\x7a\x6b\xeb\x2a\x13\x7f\xc9\xa0\x04\x7a\x81\x45\xb3\xdf\x83\x34\x19\xec\x1b\x05\x11\xe1\x0d\x61\x6d\x76\x9d\x33\xa2\x36\x12\xec\x94\x76\x81\xc3\x82\xab\xa5\x14\x67\x93\xc1\x99\x50\xee\x3e\xa9\xc2\x77\x6a\x9f\xfc\xa3\xa1\x12\xaa\xc5\xb5\x37\xd5\x60\x38\x2f\x55\x4b\x21\x07\x26\xb9\x80\x94\xb4\x72\x25\xbf\xe3\x94\xad\x9b\x07\x6b\xde\x6c\xbf\x06\xe1\x39\x77\xd6\xac\x32\xcc\x40\x75\xab\x56\x5d\x0d\x60\x8b\x08\xbb\x1c\xac\x89\x6e\x86\x0e\xd6\xef\x32\x21\xf4\xa8\x0a\x33\x34\xba\x42\xd6\x70\x5b\x81\xd8\x54\x61\x53\x7b\x8f\x7b\xbd\xb0\x7e\x31\x52\x1b\x35\xa0\x17\xa2\xcb\x63\x25\x0e\x76\x22\x45\xce\x35\x03\x65\x54\x49\x18\x14\xef\xdd\xff\xd5\x60\x20\xcc\x38\xe7\x85\x05\xd5\xca\x14\x38\x5c\xa3\x78\xf3\x5b\xe1\x27\x71\x1e\xfe\x96\x1b\x0c\xbc\xea\x0e\xc6\x9a\x18\xad\x9e\xd0\x7a\x6d\x70\xf7\x2d\x8c\x8f\xe2\xad\x7b\x2d\x7c\x6c\x74\x25\xde\xf8\x6c\x5a\xbb\x38\x7c\x26\xe5\x69\x4d\x76\xc0\x26\x26\x4a\x11\x9f\xc1\xa4\xd1\x06\xbb\x2f\x6b\x97\xdf\x5a\x53\x19\x2c\x1a\x59\x82\x8d\x17\x53\xe0\x64\x93\xf9\xe1\x8f\x3c\x08\xd7\x8c\x76\xcf\xcd\x2a\xcb\x1e\x21\x6e\xe3\xf8\xa6\xc0\x74\x3b\xdc\xe6\xc0\xb6\xe4\x18\x89\xd6\xcf\x47\x3c\x38\xba\xfd\x84\xa7\x65\xc1\xdb\xa9\x44\xfd\x72\x04\xbe\xe1\x1c\xa0\x82\xca\x12\x92\x1c\xc0\x28\x2d\x29\x3f\x14\xa0\x4a\x52\x83\xe1\x82\x83\x91\x50\x33\x52\x02\x6e\x9c\xb4\x4d\x9c\x01\x37\x75\xcd\xdc\xa5\x00\x91\x57\x57\x95\x29\x83\x37\xe9\xf0\x29\x3d\x56\x57\xb7\x31\xdf\x2a\xfe\x92\x94\xed\x87\x2d\x7e\xc5\xeb\x64\x55\x2c\x3d\x1f\xad\x6d\x90\xb7\xcd\xc8\xa9\xd4\x9e\xda\xe3\x6b\x3b\xa0\x20\x8c\x73\xb4\x44\x61\xd6\x75\x69\xd3\xd8\xc4\x4e\x25\xec\xe9\x7b\xdf\xdf\xea\x10\x76\xb7\x23\x3e\x61\x6c\xd9\xd6\xaa\xf8\x15\xe7\x61\x14\x14\xde\x1a\x79\xd8\x14\x3d\xf4\x57\x59\xb2\x49\x47\x9c\xbc\xc4\x61\x56\x6c\xec\x08\x1d\x93\x85\x5e\xf0\x3a\x76\xe8\x2f\x2f\x06\x62\x13\xa3\x7c\x82\xb0\x7d\xdc\x52\x3d\xf3\xe2\xc5\x39\xee\xd6\x33\x04\x44\x0b\xa7\xf1\x30\x30\x36\x1c\xf0\x55\x3d\x77\xe5\x78\xa7\x84\xb9\x9f\xfa\x82\x1f\x40\xb9\x63\xcf\xfd\xf4\x45\x92\xda\x49\x7c\x5f\xea\x4f\x4a\xb6\xde\xec\x63\x76\xc0\xa2\xee\xa1\xc4\x8c\x94\xa7\xd8\x41\x49\xb8\xaa\x89\xb4\xdf\x14\x45\x9e\x79\x31\xb6\x47\x69\xb4\x53\xbf\x3c\x7f\x75\x9e\x9c\xe7\xaf\x4e\x36\xac\xf1\xfc\x48\xf8\xa1\xa9\x9d\x99\x07\x54\x11\xc6\x6c\x39\x01\x26\xbf\xd6\x60\xdc\xe6\x6d\x22\xa2\x4e\xc6\xe6\x2c\x63\x2b\x3b\xb3\xd1\xe7\x7a\x72\xb0\xcf\x61\xe6\x36\xb1\xfb\xb7\x79\xfc\x85\x70\xed\x54\xcf\x1a\xca\x4c\x43\xf2\xe5\x48\xb4\x79\x39\x82\x04\xf3\x22\xa4\xcd\xc2\x83\xe4\x7c\xfe\xe7\x7d\x77\x53\x55\x4b\xa8\xa5\x28\xdb\xfb\xac\xaf\x94\xbb\x0a\x74\xbb\xfd\x57\xdf\xae\xdc\xe5\xc1\xc3\xdd\xfd\xf0\x84\x6a\xab\xa5\xee\x06\xec\x93\x5b\x2c\xe2\x4a\x13\xc6\x46\xb1\x68\x2f\xce\xdc\x8e\x7d\xde\x6e\xbf\xf7\xcf\xd2\xe1\x5d\xbe\xba\xfb\x1f\x77\xdf\xf6\x31\xf2\x50\x9c\xa2\xa0\xef\x54\x0a\x3b\x1a\xd7\x5f\x77\xc2\xcd\xbc\xdd\xee\x3e\x69\xd9\x80\xd9\x13\xa6\xe0\xf3\x76\xbb\x1b\x7b\x9e\xbb\x4b\xb6\x4f\xbf\x9b\x6f\xdf\x1e\x54\x4d\x4a\x78\xf8\xfe\xfd\xf3\xdf\x3e\x7d\xfb\xfd\x7f\xdf\xbf\xfe\xfd\xf3\xbf\x3f\x0e\x53\xdb\x8f\x77\xfd\x73\x79\x24\xf2\xeb\xdb\x91\x6a\x68\x3b\xdf\xdd\x4f\x9e\xfb\xf2\xa3\xde\x0f\x77\xf7\x3f\x7d\xb9\xfb\x62\xee\xbe\xfc\xf4\xe5\xfe\xc3\xff\x03\x00\x00\xff\xff\xa4\x35\xde\xe0\x49\x14\x00\x00" func runtimeSyntaxSystemdYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxSystemdYaml, "runtime/syntax/systemd.yaml", ) } func runtimeSyntaxSystemdYaml() (*asset, error) { bytes, err := runtimeSyntaxSystemdYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/systemd.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxTclHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x49\xce\xe1\x8a\xd1\x2b\x49\xce\x51\xe1\x8a\x53\x56\xd4\xd3\xd2\xd7\x48\xcd\x2b\x53\xd0\xd6\xb4\x2f\x49\xce\x29\xce\xd0\x50\xa8\x51\xd1\xe4\x02\x04\x00\x00\xff\xff\x9b\x33\xdc\x22\x24\x00\x00\x00" func runtimeSyntaxTclHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxTclHdr, "runtime/syntax/tcl.hdr", ) } func runtimeSyntaxTclHdr() (*asset, error) { bytes, err := runtimeSyntaxTclHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/tcl.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxTclYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x55\xd1\x96\xdb\x26\x10\x7d\xdf\xaf\x50\x9c\x3d\x8d\xbd\x7b\xd6\xed\x6b\x9d\xb6\xdb\xbe\xf7\x0b\xba\x6c\x5c\x84\x46\x12\xf5\x08\xe8\x30\xb2\xad\x66\xf2\xef\x3d\x83\x64\xaf\x73\x4e\x9b\x07\xc1\x1d\x04\x03\x5c\x2e\x97\xd6\x23\xf0\x94\x60\x57\xb1\xc3\xbb\xbb\x06\x18\x1c\xef\xee\xaa\xaa\xaa\xf4\x57\xb0\x03\xec\xaa\x95\x31\x5b\x76\x78\xbf\x2a\xed\x3d\xd8\x06\x68\x57\xad\x3e\xbd\x7f\xb7\x7d\xf8\x7e\x0d\xe1\x58\x3d\x6e\x9e\xd9\x61\xee\xd7\x95\xdc\x6f\x56\x77\x77\x34\x22\xe4\x39\xcd\x53\x95\xd9\x32\x0c\x10\xb8\x64\xaa\xd7\xb6\x65\x20\xb1\x29\x41\x68\xc4\x12\xd9\x49\xec\xc8\x71\x0f\x67\x70\xf1\x30\x63\x3f\xa4\x48\x3c\x63\x8c\xb6\x79\x43\x7b\x1f\x1a\x38\xcf\xf1\xdf\xa3\x45\xdf\x4e\x52\xfb\x60\x69\x92\x9a\xc0\x1e\xc4\xd9\x0c\xe2\x2c\xbb\x5e\x5c\x23\x0e\xa3\x3b\x68\xa9\x8d\x31\x38\xcb\x5a\xb1\x0f\x23\x08\x60\x9e\x0b\xdf\x0a\x04\x17\x1b\x1f\x3a\x81\xd8\x0a\x10\x45\x12\x38\x5a\x14\x5d\x94\xc0\xd9\xb3\xc0\x39\x91\xb4\xb5\xe6\x83\x46\x5a\x17\x43\xeb\xbb\x91\x40\x61\x9a\x44\xe9\x2a\x05\x1c\x21\xb0\xb4\x38\xe6\x5e\xda\x48\xfa\x81\x75\x05\x0f\x96\xa5\x03\xce\xd2\x61\xac\x4b\x61\x51\x7a\x9f\x39\xd2\x24\xbe\x15\x1f\x1c\x89\x0f\x6d\x14\x1f\x18\x28\xc9\x5f\xd1\x07\xc1\x85\x2a\x9c\x77\x8e\x3e\x64\x20\x16\xf4\x99\x05\x11\x42\xc7\xbd\x14\x8e\x90\x6c\xe8\x40\x90\x20\xa1\x75\x20\x98\xc1\x92\xeb\xb5\x66\xc1\xac\x84\xea\x81\xe6\xa4\x3f\x63\x82\x20\xc9\xba\x83\xed\x40\x92\x6f\x24\x8d\x9c\x25\x9d\x1a\x21\xb0\x5a\x74\x70\x4e\x5a\xe5\xb1\x16\x2a\x4a\x10\x02\x1e\x29\x48\x76\x36\x48\x06\x38\x88\x26\xce\x4a\x88\x56\x23\x39\x90\x9c\xd0\xb3\x64\x26\xe5\x32\x8f\x75\x66\xc9\x27\xaf\x87\xc1\x0e\x7f\x8f\x9d\x30\x20\x0a\xfb\x01\x84\x49\xd7\x31\x86\x43\x88\xa7\x20\x63\xd0\x64\x63\x6a\x2c\x83\x8c\x09\xe1\x08\x28\x63\x3a\x5a\x92\xa3\x25\x6f\x6b\x04\x39\x9e\xac\x67\x39\xf5\x1e\x61\x63\x4c\xbd\xfa\x3f\x81\xa9\xa6\x2a\x1b\xa6\x21\x12\xcc\x0a\xab\x9a\x18\x60\xa1\x63\x6e\x80\xb3\xcf\x9c\x97\xa0\x03\x5e\x50\x21\xe8\x82\xe1\xcc\x80\x25\xf3\xd2\x92\xaf\xfd\xb2\xff\xe7\x92\x3a\xb3\x25\xfe\x2a\xb7\x2e\xc8\x67\xf6\xee\x92\xa9\x6c\xee\x5b\x4b\x9e\x09\xab\xea\x49\x27\x2c\x27\xba\xb4\xb8\x38\x24\x4b\x70\x09\x41\x25\x7f\x09\x5a\x4f\xf9\xc2\x75\x35\x8b\xe3\x12\xe4\x0b\x42\xfb\xd6\xe5\xeb\xcc\x83\x4d\x6f\x50\x0f\x68\x09\x66\x11\x5d\x02\x48\x60\xf9\x26\x2a\xc2\x5a\x42\x8e\x6f\x08\xe3\x09\xe8\x2d\x64\xcf\x78\xd3\x6f\x4c\xe9\xe6\x2f\xf9\xe1\x16\x23\xb4\x7c\x1b\x93\xef\xfa\x6b\xc3\xc9\xe3\x75\xbf\xa7\x48\x8d\x5e\x84\x9b\xb0\x70\xff\x4d\x2d\xa0\xa5\xe1\xc6\x3d\xd2\xa1\x93\x7a\x39\x2c\x35\x89\xd9\x18\x2c\x97\x6b\xe9\x2c\x97\x6b\xe1\x5c\x44\x54\x1d\xba\x8b\x65\xcc\xbc\xbb\xbe\xa3\x24\xae\x1f\x62\x23\xae\x57\xd5\xba\x9e\x62\x64\x71\x33\xfb\x6e\x61\xd8\x0d\xcd\x2c\x6e\x17\x87\xc1\x86\x06\x63\x4c\xe2\x66\x62\x5d\xb9\x14\x24\x8e\xe3\x41\xa7\x52\xf7\x95\x66\x4c\x02\xae\x8f\xc5\x6e\x50\x5a\x17\x18\xa5\x2d\xd6\xd5\x46\x3a\x48\xab\xdb\x92\x96\x69\xd4\xe5\x80\xb4\x63\x28\x3f\xfb\x98\x79\x3f\x1b\x46\x53\x8c\xe3\x2c\x07\x98\xb0\x01\x2c\xb5\xca\x5a\xeb\x03\x4c\xb9\x00\xd5\xef\x41\x19\x45\x9b\xb3\xef\x82\xa0\x9a\xa1\x55\x93\x81\x21\xf1\x24\x58\x78\x40\x1f\x0e\x82\xb3\x2a\x94\x35\xf4\xf5\xe2\x3d\xba\x11\x3c\x5a\x52\x52\xb4\x4e\x4b\x9c\xd4\xed\x06\x7b\x96\xc1\x07\x09\xde\xa9\xa5\x24\x90\x44\xb1\xf8\x22\xd9\xd0\xc4\xa1\x38\x4b\xe3\x49\x54\x47\xbe\x6c\x44\xad\x44\x97\x00\x67\x2e\xb8\xf4\x56\xb0\x48\x12\x10\x1c\x4b\x06\x3a\x02\xed\xad\x73\x90\xae\x91\x23\x28\x19\x7c\x17\xf4\x4a\x20\x40\x92\x3c\x05\x27\x79\xca\x0c\x83\xfa\xcd\x79\xdf\xfa\xd0\xf8\xe0\x79\x89\x94\xcb\x82\x8a\x16\x38\x34\xe7\x3c\xc7\xf3\xf0\x19\xde\x0c\x2f\x7e\xa3\x66\x95\xd5\xad\x42\x56\x6f\x63\x9a\xf6\xe5\x69\x18\x07\x9b\x0f\xa2\x5d\x6e\x05\xe8\x1b\x08\xec\x5b\x0f\xb4\x75\xca\xf2\xae\x5a\x25\x8a\xee\xe5\x65\x57\x7c\x77\xf7\xfa\x2a\x6b\x63\x3e\x8b\x31\x5f\x36\x57\xd1\x4e\x43\x1d\x71\x1b\x13\x90\xe5\xa8\x6f\xeb\xda\x98\xb5\x18\xb3\x11\x63\x3e\xca\x9f\x62\x8c\x31\x62\xcc\xbd\xfc\x24\xbf\xc8\x3b\xf9\x59\xbe\x13\x63\xe4\x3a\xde\xc5\x90\xd9\x06\xde\x86\x71\xa8\xcb\xdb\x6c\x4c\xfd\xf2\xc3\xd3\x8f\xaf\x8f\x6b\x63\xb6\x33\xda\x3c\xdf\xac\xf2\x3a\x62\xbe\x4b\x3a\x42\xe7\x34\x66\x2b\x2f\x9f\xcc\xea\x75\xf3\x60\x56\xf2\xe1\xda\xf2\xe1\x75\xf3\xf0\xe1\x3f\x76\x78\xb4\xf3\x64\xf7\xc6\x7c\x7e\xd6\x69\x7e\x7b\xfa\x63\xff\xee\xd7\xf7\xf7\x0f\xcf\x4f\xaf\x8f\xc6\x7c\x79\x7e\x9b\x70\x58\x6e\xe5\xfa\x93\x7c\xdc\xdc\xd0\xf1\xf0\x7e\xfb\x70\x4d\x1d\x34\xf7\x93\xeb\x2d\x6d\x4f\xbd\xe7\xf9\xad\xda\x55\xab\x9b\xfe\x8f\xf7\xab\xbb\x7f\x03\x00\x00\xff\xff\x1e\x2f\x55\x8f\xb7\x08\x00\x00" func runtimeSyntaxTclYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxTclYaml, "runtime/syntax/tcl.yaml", ) } func runtimeSyntaxTclYaml() (*asset, error) { bytes, err := runtimeSyntaxTclYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/tcl.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxTexHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x49\xad\xe0\x8a\xd1\x2b\x49\xad\x50\xa9\x89\xd1\x4b\xca\x4c\x02\x51\xc9\x39\xc5\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x46\x27\xf3\x19\x1a\x00\x00\x00" func runtimeSyntaxTexHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxTexHdr, "runtime/syntax/tex.hdr", ) } func runtimeSyntaxTexHdr() (*asset, error) { bytes, err := runtimeSyntaxTexHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/tex.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxTexYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x92\x6f\x8f\x9b\x30\x0c\xc6\xdf\xf3\x29\x2c\xda\x9b\x5a\x9d\x40\x7b\x3b\x34\xad\xdb\xd7\x58\xcc\xa6\xfc\x31\x77\xd1\x48\x40\xc4\x9d\xba\x23\xfd\xee\x13\x81\x2b\xb7\x55\x48\xc7\x1b\xe0\xb1\xf3\x8b\xfd\xd8\x8d\x6d\x89\xff\xf4\x54\x01\xd3\x25\xcb\x0c\x31\x69\xae\x20\x03\x00\x98\x62\x5e\x3a\xaa\x20\x47\x2c\x99\x2e\xfb\x88\x58\x2a\xab\xd2\x5b\xb7\x61\x9f\x67\xd9\x70\x6e\x29\x54\x29\x7f\x07\xba\x6b\xbb\xc1\xbe\x10\xf0\x33\x81\x35\xe4\xd9\x36\x96\x86\x00\x5d\x03\xe3\xe7\x55\xf8\x72\x05\xe9\x0d\x88\xb7\x52\x9d\x18\xc5\x9b\x63\x33\x75\x7a\x02\xcb\x81\x53\x19\x63\x7e\x13\xc9\x9b\x24\x5d\x57\x69\x2e\x06\xc4\xfb\x58\xe2\x9e\x55\x6f\xb1\x76\xe0\xcf\x4e\xd1\x10\x16\xb2\xee\x7c\x60\xe9\xb9\x9c\xe5\x74\x58\x89\x8f\xc5\xa7\xfa\xf1\x80\x58\xce\x5f\xc7\xd3\x41\x88\x2a\xf4\x52\x53\x55\xd7\x87\x9e\xa3\x73\x51\xbb\x68\x7d\xa4\x4b\x24\x17\x55\x1f\x7b\x1d\x8d\x89\x5a\x47\x6f\xa2\xd7\x31\xf4\xc7\xe3\x09\x51\xe5\xcb\xad\x2d\x31\xa8\x41\xea\x5f\xc4\x01\x9e\xe5\xef\xd9\x5a\x43\x8d\x3c\xb7\x3c\xfb\x0d\xf2\x49\x5a\xbf\xd4\xb5\x44\x2a\xc8\xc5\x78\x45\x14\x88\xf5\xd2\x53\x01\xa1\x27\x6d\x65\x3b\xc5\x3e\x20\xde\x9a\xdd\x81\x93\x7a\xe8\x5e\x3b\x0b\x2c\x99\x1c\xf9\xd9\x23\xc4\xaf\x27\x21\x8b\x97\x6f\xc5\xf7\x9f\xf5\x63\xbe\x91\xf3\x90\xdf\x16\xc0\x4d\xf2\xea\x52\xfa\xbd\x37\x5f\xfc\x48\x05\x3c\xfc\x3f\x81\xfd\xf6\x2c\x37\x59\x13\x49\xd1\x93\xf5\x88\xe3\x92\xf4\xcf\x52\xbc\xce\x16\x91\xbc\xd9\xc8\x59\x2f\xfb\x1b\x00\x00\xff\xff\xd5\xe7\xc0\x26\x11\x03\x00\x00" func runtimeSyntaxTexYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxTexYaml, "runtime/syntax/tex.yaml", ) } func runtimeSyntaxTexYaml() (*asset, error) { bytes, err := runtimeSyntaxTexYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/tex.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxTomlHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xc9\xcf\xcd\xe1\x8a\xd1\x03\x53\x5c\x80\x00\x00\x00\xff\xff\xbb\x01\x2b\x6e\x0d\x00\x00\x00" func runtimeSyntaxTomlHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxTomlHdr, "runtime/syntax/toml.hdr", ) } func runtimeSyntaxTomlHdr() (*asset, error) { bytes, err := runtimeSyntaxTomlHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/toml.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxTomlYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x54\x6d\x6f\x9b\x30\x10\xfe\x9e\x5f\x71\x72\x26\x01\x4d\x40\xec\x4d\xdb\x90\xa6\x68\x7d\x93\xfa\x61\xea\xa4\x75\x52\x54\x1b\x55\x26\x36\xd4\x2a\xd8\x11\x36\x5a\xbb\xd0\xff\x3e\xd9\xe4\x85\xd0\xb5\xcd\xf7\xf1\x01\x8e\xbb\x7b\x1e\x3f\x77\xc7\x91\x8b\x92\x9b\x87\x25\x4f\xc0\xa8\xaa\x1c\x8d\x18\x37\x7c\x61\x92\x11\x00\x80\x8d\x49\x5a\xf1\x04\x10\x21\x91\x8d\xa3\xd1\xa8\x6e\x4a\xae\xbb\xf8\x18\x7e\x34\x72\x61\x1a\x6a\x84\x92\xce\x13\x82\x7e\xa8\x32\x55\x26\xe0\xe1\xaf\x53\x12\xa5\xde\x9e\x3b\xca\x6a\xba\xb8\xe3\x46\xdb\xf8\x8a\x60\x92\x3e\xae\x33\xc6\xf0\xd3\xd4\x42\x16\x7a\x9d\xbf\x50\x52\x1b\x2a\x4d\xa4\x9d\xbb\x3b\xcf\x5e\xda\xd0\xda\x24\xe0\x21\x84\xbc\xad\x93\x4b\x96\x80\x47\xd0\xea\xfd\xf4\xe3\xe3\xce\xad\xef\xc4\xd2\xfa\x49\xb4\xf3\xf5\xe4\x6f\xae\xfe\x69\x4b\xbe\x10\xb4\x3c\xb9\xa5\xb5\x03\x36\x18\x27\xf7\x4c\x14\xc2\x24\x69\xba\xfa\xd0\xe3\x7e\x05\xf8\x6b\x0f\xf8\xf9\x70\x20\xce\x8c\xcc\x6b\x44\xc8\xb6\x75\xaf\xb7\x62\xd8\x08\xf4\xbf\xb5\x00\x79\x9e\x87\xf6\x9b\x80\x3c\xf7\x31\xa0\x41\xd5\x80\xd3\x83\x39\x9f\x30\x3e\x47\x36\x86\x0b\x69\x78\xc1\xeb\x21\xb5\x6c\xaa\x8c\xdb\xa2\xf0\x24\x4c\x67\x3e\x61\x93\x9b\xe0\x88\xb0\x09\xc9\x9e\x54\xb6\x4d\xf5\xe3\x7b\xbf\xdf\x39\x0b\xd9\x7b\x6f\x63\xe5\xe3\x38\xfc\x94\xda\x80\x7d\x4e\xda\x38\xf3\x71\xfc\xb6\x4b\xb5\xcf\x60\xb3\x54\xe7\xa5\xa2\xe6\x60\x55\xd1\xce\x7e\x5e\xdf\x00\xe4\xf7\x51\xc1\x0c\x9f\xf1\x74\x90\xf1\x42\xa9\x64\xd2\x86\x81\x2f\x64\xde\x4a\x2a\xb7\xa2\x8f\x69\xcd\xe1\x8e\x3f\x4c\xed\x4d\x77\xf3\x10\xb2\x80\xdf\xc2\xdc\x02\x05\xd7\x08\x50\x35\x30\xaa\x6f\xc1\xe6\xd2\x2a\x13\x45\xa3\x1a\xdd\xa5\x74\xfc\x1a\xa8\x64\x2e\x6c\x77\x60\xc9\xd9\x5a\x86\x60\x5c\x1a\x91\x0b\xa7\x80\x64\xf8\x5b\x78\x4d\xc3\x3f\x37\xe9\xda\x88\xc3\x2f\x37\x61\x7a\xb4\x99\xd0\x18\x8e\x95\x2a\x39\x95\x8e\x4d\xc8\x7c\x0a\x92\x4a\x77\x8e\x6a\x0c\x68\x51\xc8\x61\x79\x99\x52\x65\x64\xea\x86\x3b\x7e\x6b\xfc\x63\xdc\x2e\x29\xa7\xa5\xee\xb2\x9c\xf5\xd2\x57\x41\xb2\x6d\x9b\x76\xd2\x4e\xa9\xe1\x4e\xd7\x95\xa8\xf8\x00\x6a\x31\x6c\x12\x12\xb6\x7a\xf7\xd8\xdd\x7d\x7c\x05\xa9\xb3\x92\xde\xdd\x27\x91\x1b\x9c\x6f\xa7\xd6\xf3\xb7\xd7\xc1\x2c\x98\x0d\x05\x39\xd6\x67\x18\x36\xaa\x4e\x54\x55\x71\x69\x76\x7f\x72\xf7\xfa\x74\xbf\xc6\xc3\xfd\x7a\x33\xdc\xaf\xc1\x0f\xc3\x28\xa6\x12\x40\xfe\xd5\xe5\xe9\x65\x3b\x9f\xcf\xdb\xf3\x8b\xf9\xf7\xb3\x20\x99\xa1\xd1\xdf\x00\x00\x00\xff\xff\x21\x07\x4b\xf9\xc6\x06\x00\x00" func runtimeSyntaxTomlYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxTomlYaml, "runtime/syntax/toml.yaml", ) } func runtimeSyntaxTomlYaml() (*asset, error) { bytes, err := runtimeSyntaxTomlYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/toml.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxTwigHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x29\xcf\x4c\xe7\x8a\xd1\x03\x51\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\xc7\x44\xfe\x5f\x0e\x00\x00\x00" func runtimeSyntaxTwigHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxTwigHdr, "runtime/syntax/twig.hdr", ) } func runtimeSyntaxTwigHdr() (*asset, error) { bytes, err := runtimeSyntaxTwigHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/twig.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxTwigYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x94\xdb\x6e\xf3\x36\x0c\xc7\xef\xf3\x14\x9e\xbb\x6e\xc9\xba\x64\xc5\xee\x96\x1d\x8a\x61\xc0\x5e\x22\x0a\x02\x5a\xa2\x1d\x35\x3a\x81\xa2\x93\x7a\x65\xdf\x7d\x70\x0e\x5f\x4f\x0e\xbe\xa2\xc0\x77\x17\xdd\x18\xd6\x9f\xa2\x7f\xa2\xc9\x7f\x6d\x1d\x72\x97\x70\x5e\xf0\xce\x36\xa3\x91\x41\x46\xcd\xf3\x51\x51\x14\x45\xaf\x05\xf0\x38\x2f\x4a\xa5\x66\xbd\xfe\x7d\x39\x1a\x51\xeb\x30\x1f\x02\xa6\x85\x0d\xda\xb5\xa6\x8f\x58\xb3\x77\xe5\x71\x37\x77\xbe\x8a\x6e\xc6\xd0\x1c\xe2\xfa\x95\x19\x88\xf7\x99\x1e\x95\x7a\x5c\x2c\xe6\x39\x81\xc6\xf9\x72\x59\x7e\x09\xc1\x60\xe6\x45\xf9\x42\x52\xea\x49\xa9\xa7\xe7\x80\x17\x9f\x3e\xad\x69\x61\x0d\x06\xb6\xb5\x45\xda\x67\xaf\xc6\x50\x65\xa9\x80\xf5\x5a\x34\x24\xcb\xe0\xec\x7f\x28\x3a\x86\x2d\x12\x0b\x06\x1d\x8d\x0d\x8d\x18\x60\x1c\xaf\x7c\x34\xb6\xee\x26\x77\x62\xb0\x86\xd6\xb1\x60\xd6\x90\x50\x6a\x4b\x99\xa5\x8e\xe4\x81\xe5\x3e\xda\x20\xf7\x39\x86\xd5\xfe\x34\xca\x06\xbb\x2c\x0e\x32\x8b\xc3\xd0\xf0\x5a\x5c\xdc\x21\x89\x47\x6a\x50\x82\xfb\xb5\x22\x09\xad\xaf\x90\x56\xc7\x0c\x04\x3b\x21\x4c\x0e\x34\x0a\xe1\x16\x29\xa3\x50\x6c\x83\x91\xec\xac\x46\xc9\x91\x58\x72\x72\x96\x25\x33\xd9\xc4\xd0\x64\x61\xcb\x0e\x85\xc9\x7a\x69\x53\x42\x92\x96\xdc\x91\x60\xa2\x54\x55\x9e\xad\xc3\x4c\x3b\xc8\xf9\x54\x0d\x66\xb2\x55\xcb\x28\x95\x8b\x7a\xd3\x17\x22\x33\x04\x16\xdd\x69\x87\xfb\x32\x88\x69\x7d\x92\xe3\xaf\x14\x0f\x0f\xe2\x6d\x90\x04\x84\xa1\x47\x0f\x26\xfa\xfe\xd1\xf4\x9c\x2d\x69\x14\x46\x9f\x1c\x30\xae\x6a\x8a\x7e\xd5\x13\x87\x66\x08\xa9\x6f\xac\xd9\x06\xbb\x5d\x24\x73\xc2\x09\x46\x20\x3f\x53\x18\xac\x6d\x40\x23\xc6\x6e\x6d\xb6\x95\xc3\xaa\x13\xf4\x89\x3b\xc1\x2d\x06\xa9\xc1\x65\x14\x1b\xc4\x66\xb1\x8c\x04\x95\x43\x09\x91\x25\xb4\xce\x49\x34\x46\x22\x49\x06\x8f\x63\xc8\x93\x3b\x61\x6a\x51\x76\x96\xd7\x43\x34\xc7\xae\x8c\x09\x09\x38\xf6\xdd\xb2\x98\xcd\x7f\xff\xf9\xe6\xa7\x3b\xf9\xf3\x3b\xa5\xae\x97\xf2\x87\xfc\x25\xbf\xc8\x54\x7e\x38\x73\xb4\x22\xd0\x1b\xe4\xbe\xb4\x8b\xf1\xe4\xf1\x69\x29\x4a\x2d\x44\xa9\xe5\xdb\xf8\xd3\xf5\x66\x87\x36\x38\xdc\x7d\x71\x3b\xfd\x6d\x79\xa3\x54\x25\x4a\x55\xb7\x0f\xfd\xeb\xdf\xd3\x7f\x61\x5a\xef\x37\xcf\xa6\x38\x94\xf7\x75\xd7\xbf\x1a\xa8\xb2\x7c\xa7\x1d\x26\x69\x48\xc9\x1b\x9b\xf6\x38\x4a\xbd\x17\x07\xe6\x6b\x08\x28\xa1\xb6\xe0\xfe\x59\x03\x1d\x33\xcd\x3e\x0d\xff\xe3\x39\xf6\x01\xe1\x5b\xa2\x7f\xd5\xb3\xae\x3f\xe6\x58\xd7\x17\xbf\xba\xf8\xd5\xc5\xaf\x2e\x7e\xf5\x79\xf4\x8f\xd9\x95\x8e\xde\x63\xe0\x41\xaf\xba\x7a\x6b\x50\x57\x03\xae\x54\x2c\x96\xa3\xff\x03\x00\x00\xff\xff\xea\x2f\x44\xaf\xfd\x09\x00\x00" func runtimeSyntaxTwigYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxTwigYaml, "runtime/syntax/twig.yaml", ) } func runtimeSyntaxTwigYaml() (*asset, error) { bytes, err := runtimeSyntaxTwigYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/twig.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxTypescriptHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xa9\x2c\x48\x2d\x4e\x2e\xca\x2c\x28\xe1\x8a\xd1\x2b\x29\xae\xb0\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\xae\x62\xd2\x95\x14\x00\x00\x00" func runtimeSyntaxTypescriptHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxTypescriptHdr, "runtime/syntax/typescript.hdr", ) } func runtimeSyntaxTypescriptHdr() (*asset, error) { bytes, err := runtimeSyntaxTypescriptHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/typescript.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxTypescriptYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x54\xc1\x6e\xe3\x36\x10\xbd\xfb\x2b\x54\x63\xdb\xd8\x32\x14\xa7\xa7\x22\x42\x5b\x21\xed\x26\xa7\x36\x29\xba\xed\xa5\x24\xb3\xa0\xa8\x91\xcd\x86\x22\x55\x72\x18\xdb\xc5\xa0\xdf\x5e\x50\x72\x36\x59\x3b\x9b\xcd\x65\x7d\x18\x92\x63\xbe\xf7\x46\x0f\xc3\x69\xb5\x01\xdc\xf5\x50\x66\x29\x06\xe5\x75\x8f\x93\x49\x03\x08\x0a\xcb\x49\x96\x65\x59\xba\x61\x65\x07\x65\x36\xe5\xfc\x14\xc3\xb6\x7a\x33\x9d\x4c\x7c\x34\x10\xc6\x0b\x45\xa6\x9c\x0d\x28\x2d\x9e\xda\xd8\xd5\xe0\x87\x9b\x35\x2b\x16\xa2\x9a\xb1\x6f\x8b\x73\xc1\xce\x8a\x73\x91\xd3\x19\x3b\x2b\xbe\x4b\xeb\x36\x25\x64\xd1\x5e\x14\x57\x62\x31\x9f\xb1\xf8\xa7\x60\xe6\x17\x51\x51\x8a\xe9\x54\xcd\x2b\xce\xeb\xe9\x2b\xe8\x13\xf3\x82\xf3\xd3\xbd\xc4\xb8\x3c\x9c\x13\xf7\x25\xfc\xd6\x0b\xb6\x28\x44\xb5\x4f\x55\xac\xbd\x4a\x62\xaf\x66\x3f\xa6\x38\x60\xd0\x0d\x58\xd4\xad\x1e\xc0\xec\xa2\xf8\x4b\x16\xff\xbe\x17\xfb\xcd\x59\x71\xfe\x5e\xe4\x8c\x95\xa1\x97\x0a\x4a\x21\x72\x36\x13\x0f\xc8\x80\x12\xa1\x03\x8b\xa3\xea\x4c\xd6\x01\xbd\x54\x48\x32\x90\x0c\x3b\xab\x48\x6e\xa4\x46\xaa\x3d\xc8\x3b\x52\x32\x00\x29\x89\x6a\x4d\xca\xc8\x10\x68\x28\x7d\x8c\x3e\x2a\x74\x3e\xed\x51\xdb\x08\xf3\x27\xf6\x1d\x8a\x34\x50\xc7\xd5\x0a\x3c\x35\xa0\x8c\xf4\x40\x0d\xb4\x32\x1a\xa4\x06\x0c\x20\x50\xe3\x08\x4c\x00\x02\x1b\x3b\x82\x6d\xef\x3c\x12\x6c\x11\x6c\x13\xa8\xd5\x56\x1a\xb3\xa3\xd6\x79\x6a\xbd\xeb\x5e\xd2\x69\xa3\x55\xa8\x9d\xa5\x15\x20\xe9\x96\x74\xd7\x9b\xe1\xff\x90\xb6\x89\x55\x5b\xd2\x83\xf9\x0a\x5c\x4b\xda\x22\xf8\x56\x2a\x20\x1d\xc8\x00\x52\xe7\x9a\x68\x80\x52\xf3\x0d\xe6\xbd\x24\x66\x61\x43\xae\xa5\x5e\xaa\x3b\xb9\x02\xea\xbd\xbe\x97\x98\x56\x97\x3a\x19\x1a\xea\x63\x6d\xb4\x22\x0f\xff\x44\xed\x81\x3c\x60\xf4\x96\x02\x20\x25\x2a\xad\x28\xc4\x1e\x3c\x85\x8d\x46\xb5\x7e\x49\x09\xd7\x3a\x10\xae\xbd\xdb\x10\xfa\x1d\xa5\x67\x33\x04\xd7\xd2\xbd\xf4\x74\xef\x74\x43\x9b\xb5\x36\x40\x1b\x8d\x6b\xda\x69\x30\xcd\xfc\x99\x6e\x7e\x70\x49\x26\xaf\xd1\x47\x20\x1b\x8d\xa1\x68\x1b\x68\xb5\x85\x86\xae\xe5\xf5\x53\xdc\xf8\x4a\x07\xcc\x85\xf7\x72\x47\x3f\x39\x67\x40\x5a\x7a\x9b\x3e\xf4\xd2\xc6\x0e\xbc\x4c\x3d\x70\xe9\xbd\xf3\x74\xf5\xe0\xfe\xaf\x12\xd7\x9f\xe0\xb9\x1e\x3a\x9e\x6e\xea\xbf\x41\x21\xfd\x0e\xab\xcb\x6d\x4f\xef\xd0\x6b\xbb\xa2\x77\xbb\xae\x76\xe6\x13\x40\x69\x77\x54\xef\xe5\x2d\xdc\x83\xa7\xf1\xf1\x50\x18\xc1\xe1\x08\xfc\xd4\x45\x56\x2c\x96\xf9\x0f\xdf\xff\xf8\xd5\x7f\x5f\x57\xe5\x37\x24\x9e\x71\x66\xc9\x6e\x73\x31\x63\xb7\x4b\x41\x33\xce\x39\x5f\xce\xe7\x39\xbb\x4d\x3b\xb1\x64\x2b\xdd\x89\xfc\x59\x3b\x39\x1f\x46\xcc\x10\xaa\x31\x52\xca\x7e\x34\x70\x86\x0c\xab\x5b\xeb\xf1\x84\x4f\x39\xaf\x06\xda\x47\xbe\x6e\x28\x73\x38\xa6\x5f\x40\xe9\x87\x92\x96\xd3\x0f\x39\xb0\x4d\x99\x4d\xdf\x3c\x26\xc6\x71\x98\x31\xf1\x59\x16\xce\xf3\x43\x1e\xce\xf3\xe5\x21\xd5\x87\xe3\xde\x7b\xd7\xb8\x32\x9b\xfe\x71\xf3\xf6\xa6\x3c\x9e\x5c\xa3\xeb\xc7\x62\x7c\x7a\x24\xf5\x24\x13\xee\x74\xbf\x77\xed\xf4\x33\xf2\x8f\x4a\x3d\x28\x2d\xcd\xcf\x6b\xe9\x3f\x86\xbe\xa2\x9a\x93\xc3\x62\x4e\xbe\x50\x2d\x93\xff\x03\x00\x00\xff\xff\x53\x46\x30\xcd\xd5\x06\x00\x00" func runtimeSyntaxTypescriptYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxTypescriptYaml, "runtime/syntax/typescript.yaml", ) } func runtimeSyntaxTypescriptYaml() (*asset, error) { bytes, err := runtimeSyntaxTypescriptYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/typescript.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxVHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xe3\xe2\xe2\x02\x04\x00\x00\xff\xff\x1e\xa4\xbd\x78\x04\x00\x00\x00" func runtimeSyntaxVHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxVHdr, "runtime/syntax/v.hdr", ) } func runtimeSyntaxVHdr() (*asset, error) { bytes, err := runtimeSyntaxVHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/v.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxVYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x56\xdf\x93\xdb\x34\x10\x7e\xcf\x5f\x61\xc2\xf5\x12\xdf\x11\x5f\x69\x3b\xa5\x78\x28\x4c\x29\xdc\x0c\x0f\xd0\x97\x32\x73\x33\xd9\xb4\x95\xad\xd5\x45\xc4\x96\x3c\xfa\x71\xb9\x70\x1b\xfe\x76\x46\xb6\x13\xe4\x84\x69\x0a\xbc\x71\x2f\x8a\x76\xbf\xdd\x4f\xfb\x49\xbb\x67\x21\x2b\x74\x9b\x06\xf3\xe4\x6e\x34\xe2\xe8\xb0\x74\xf9\x68\x64\x7c\x85\x36\x1f\x25\x49\x92\x7c\x9e\xbc\xd6\x8a\x4b\x27\xb5\x62\x95\x4d\x98\xe2\x49\xa9\x95\x33\xba\x4a\x44\xa5\xd7\x2d\x66\x96\xac\x70\xb3\xd6\x86\xdb\x3c\x19\x03\x14\x53\x59\x37\xda\x38\xba\xd5\xc4\x51\xa0\x49\x01\x8a\x71\x8f\xb4\x0d\x96\x92\x55\x3d\x50\x1b\x2a\x0c\xb2\x15\x85\x9c\x52\x79\xa4\x9a\xb9\x72\x49\x25\xb3\x48\xb7\xda\x69\x32\xe8\xbc\x51\xa4\xb4\xc2\x38\x8d\xf0\xaa\x0c\x67\xea\xf3\x08\x15\x3b\x6b\x26\xd5\xfb\x23\x44\x6b\x06\x98\x02\xa4\xe9\x0e\xa9\x9b\xbe\xb0\x1e\x15\x68\x08\x8d\xd1\x06\x60\xba\x47\x59\xc7\x1c\xd6\xa8\xdc\xae\x3c\x41\x58\x59\x24\xa1\x4d\x77\xde\x98\x9c\x59\x8b\x66\x87\xec\x36\x83\xfa\x37\x75\xa1\xab\x4c\x37\x68\x98\xd3\xa6\xc7\xcd\x67\x97\x57\x17\x2f\xbf\xf9\xf6\xb3\x3f\x1e\x9d\xd3\xbb\xc5\xe9\x80\xfc\xe5\x69\x0c\x00\x01\x50\x7a\x1a\x76\x0e\x70\xde\xa5\xeb\x81\xa5\xae\x1b\x59\xe1\x7b\x29\xf6\x98\x33\x29\x08\xe0\x2c\xd4\x1d\x33\x6b\x8b\x3b\xed\x6a\x56\x52\xcd\x4a\x6d\xa9\x92\xca\xdf\xd3\x5a\x2a\xae\xd7\x96\x84\x41\x2c\x2c\x27\xdd\xa0\x0a\xab\x42\x17\x16\x6e\xd8\xad\x56\xa2\xda\xd0\x6f\x96\x98\xe2\x46\x4b\x4e\x56\x57\xcc\x48\x4b\x4b\x26\x57\x3e\x3a\x52\x78\x87\x6f\x37\x0d\xda\x41\x25\x79\x32\x9e\x7e\x41\x00\xd9\xfe\xa6\x8a\xee\x2d\xb7\xe7\x29\xb4\xae\xe2\xa3\xfe\x1e\xf9\xca\x25\x33\x54\x6c\xdc\xa0\x16\x19\x01\xa4\x72\x24\xa7\x2f\xe8\xcb\xe7\xf4\xfc\x59\x4a\xbe\xfb\xf9\xf4\x49\xd8\x0d\xde\x61\x14\x23\xa6\xc7\xfe\x26\xf2\x7b\xa9\x5c\xe3\x0c\x05\xf2\xb0\x06\xfe\xb0\xde\x69\xc9\x1b\x37\xe8\x12\x16\x85\x31\x63\xd8\x66\x70\xdb\x91\xd3\x3a\x23\xd5\x2d\xf9\x6e\x1d\x34\x41\x84\xaa\x59\x13\xbb\x82\x27\xeb\x5b\xb6\x47\x34\xbe\xa0\xda\x3b\xb2\xce\xf8\xd2\x11\x2a\x5f\x93\x54\x0e\x8d\x60\x25\x52\xad\xb9\xaf\x90\x42\x5c\xe8\x54\x3b\x78\xd1\xad\x81\x29\x97\x05\xc1\xfb\x74\xce\x78\x24\xc1\xf6\x8f\x65\x7f\x89\xdf\x1b\x56\xae\xd0\x0d\xef\x31\x2b\x7a\x6b\xb8\x50\x80\x07\x02\xd8\xa6\xe3\x8f\x41\xa6\x14\x77\xf1\xdf\x42\xe6\x04\xb0\x48\x23\xea\x5f\x7c\x5d\xa0\xe9\x46\x58\x27\x97\x3d\xac\x40\xb5\x90\x5d\x4f\x3e\x9e\x7d\xbd\xb8\xa4\xc7\xf7\xe1\x07\x9b\x89\x57\xb3\xeb\xc5\x45\x28\x87\x26\xd9\x24\x6a\x95\x3e\xb6\x4b\x99\xf7\x74\x49\x18\x1a\xdd\x18\x18\x8f\xf7\x36\x54\xfc\xc0\x62\x57\xb2\x69\xf9\x00\xb2\xbf\xac\xd1\xfc\xdd\xfd\xc5\x4c\xdd\x08\x7d\xbd\x64\xe1\xa8\x8f\xa2\xb8\x8f\x02\x03\xc7\x9c\x15\x42\x19\x77\x37\x01\x80\xd6\xb0\xf8\x07\xc1\x41\x91\xaf\x16\x0f\x4f\xb7\x74\x3f\x7f\x35\xbb\x66\x33\x11\x14\x7a\x78\xb2\x25\x1f\xef\x9f\x6d\xe9\xd7\x78\xff\x62\x9b\x7e\xba\x5a\x93\x43\xb1\x26\xff\x4a\xab\x76\x84\xe7\xc9\x38\xcb\x2e\x3f\xb1\xc0\xff\x97\x8c\x1f\x0e\x65\xfc\x70\x28\x58\x32\x5f\x44\xd3\xbe\xfd\xe7\x76\x94\xe5\xea\xea\x30\xcd\xd9\x09\xdd\x9d\xe6\x3a\xb4\xdf\xdb\x37\x3f\xbc\xa1\x9b\x9b\x1b\xba\xfe\xe9\xe6\xe7\x1f\xd3\xfc\xbb\xf1\x69\x32\x80\x8b\xa3\x4e\x81\x8b\xab\xff\xcc\xb8\xfb\x10\xc8\x98\x73\x46\x16\xde\xe1\x31\xf9\x3b\x80\xf9\x31\xf9\xe2\x54\xb9\x2b\xa5\xd7\xbb\x0f\x0c\x8e\x8d\xc1\x92\x39\xe4\x24\x55\x25\x55\x37\x2e\x39\x0a\x92\xa2\x1f\x82\x7f\x06\x00\x00\xff\xff\xf1\x4c\x25\x6d\x6d\x09\x00\x00" func runtimeSyntaxVYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxVYaml, "runtime/syntax/v.yaml", ) } func runtimeSyntaxVYaml() (*asset, error) { bytes, err := runtimeSyntaxVYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/v.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxValaHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x4b\xcc\x49\xe4\x8a\xd1\x03\x51\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x3d\x64\xff\x75\x0e\x00\x00\x00" func runtimeSyntaxValaHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxValaHdr, "runtime/syntax/vala.hdr", ) } func runtimeSyntaxValaHdr() (*asset, error) { bytes, err := runtimeSyntaxValaHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/vala.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxValaYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x53\x5d\x4f\xdb\x30\x14\x7d\x26\xbf\xc2\x8b\xd8\x68\x13\x25\x65\x1f\x42\x23\xda\x88\x26\xed\x9d\x97\x3d\x2d\x0e\xc8\x71\x6e\x1a\x0b\xd7\xae\xec\xeb\x76\xa0\xab\xfd\xf6\xc9\x6d\x0a\x85\x21\xfc\x94\xd8\xe7\x1c\x9f\x7b\x7d\xee\xa0\x34\xe0\xfd\x1a\x2a\xb6\x11\x5a\x24\x49\x0f\x08\x12\x2b\x96\x30\xc6\x58\x3c\x34\x62\x05\x15\x4b\x39\x2f\x23\xe0\x34\x4d\x12\x17\x34\xf8\x6a\x07\x28\xd8\x9e\x9b\x72\xde\xcd\x06\x6d\x05\x52\x6f\x43\xa7\x81\x3a\x6b\x35\x85\x5a\x8e\xc2\x51\xa8\x95\xc1\xd9\x57\xfa\x78\x41\x9f\x3f\xd1\xc5\x97\x79\x4d\xa1\xf6\xa3\x75\x48\xa1\xd6\xd6\x2c\x69\x63\x55\x4f\xbe\xf6\xea\x01\x6e\x91\x82\x51\x91\x37\xe7\xbc\x4b\xa7\x6b\x54\x0f\x06\xd5\xa0\xc0\x95\x52\x0b\xef\x2b\x96\x36\x3f\x8a\xdf\xa2\x78\xb8\x6d\xa7\x8f\xf3\xe2\xf2\xb6\xcd\x9a\xa6\xf2\x6b\x21\xa1\x6a\xdb\xac\x99\xcd\xdb\x83\x80\x47\x81\xb0\x02\x83\x07\xb3\xd6\x91\x1a\x68\x3b\x2a\x0d\xd4\x5b\x02\xed\x81\xa4\xf0\x40\x3d\x0c\x22\x68\x24\xbf\x55\x28\x47\x42\x77\x4f\x38\x3a\xbb\x25\x29\x50\x8e\xc7\xa6\x5e\x6a\x2a\xa3\x95\x01\x8a\x2d\xe9\x61\x20\x8f\x2e\x48\x24\x30\x61\x15\x4b\xb2\x86\xe0\x0f\x82\x33\x14\x79\x4a\x92\xb4\xc6\xe3\x5b\x7a\x76\x0d\x4e\xa0\x75\x64\x60\x4b\x3d\x68\x40\x20\x07\x18\x9c\x21\x13\xb4\x7e\x8b\xba\x6b\x12\xd9\x0d\x38\xa7\x7a\xa0\xb5\x53\x1b\x81\x40\xeb\xd0\x69\x25\xc9\xab\xa5\x11\x9a\x70\x54\x9e\xb6\x20\xee\x9e\x29\xad\x41\x2a\xa1\x27\x9d\xa5\x45\x4b\x9d\x03\x71\x17\xed\xa2\x32\x01\x8e\xc1\xbb\x12\x84\xc1\x32\x3e\xf7\x44\x41\x17\x80\x06\xa1\xfd\xeb\x48\x13\x56\x1d\xb8\x09\xdb\x9c\x17\x97\x6d\xfe\xec\xfa\xfb\x55\x67\x75\x79\x28\x3d\xbe\x33\xe7\x45\xbe\xc8\xbe\x7f\xbb\xaa\xab\x77\x7f\xdf\x7f\xa0\x96\x8a\xab\xff\x64\x3d\x3a\x65\x96\x51\x36\x9d\x71\xce\x79\x49\xcd\x0d\x4f\xdb\x79\xc6\x53\x3a\x7b\xdc\x39\x6b\xe7\xd9\xd9\x13\x77\x35\x75\x6c\x76\x43\x47\xb9\x99\x2f\x16\x65\xf6\x12\xb4\xfb\x8d\xcb\xa3\x70\x91\xb3\xe0\x7c\x02\xc5\x05\xa6\xdf\x95\x94\x2d\x9e\xf6\xf6\x73\xc2\x9a\x36\x39\xcc\x8a\xed\x6d\xc5\xd2\x5f\xd7\x3f\xaf\xab\xfa\x31\xd9\x26\x46\xbb\x88\x81\x2f\xb7\xa3\x42\xd8\xdb\x60\xe9\x91\xa3\xfc\xf4\x15\x74\xc5\xd2\x93\x9c\xe5\xc4\xf2\x93\x3c\x4d\xfe\x05\x00\x00\xff\xff\xa8\xac\xa2\x52\xc8\x03\x00\x00" func runtimeSyntaxValaYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxValaYaml, "runtime/syntax/vala.yaml", ) } func runtimeSyntaxValaYaml() (*asset, error) { bytes, err := runtimeSyntaxValaYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/vala.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxVerilogHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x4b\x2d\xca\xcc\xc9\x4f\xe7\x8a\xd1\xd3\x28\xab\x29\xcb\xa8\x29\x2e\xab\x29\x2e\xcb\xd0\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\x87\x7c\x4d\x6e\x1a\x00\x00\x00" func runtimeSyntaxVerilogHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxVerilogHdr, "runtime/syntax/verilog.hdr", ) } func runtimeSyntaxVerilogHdr() (*asset, error) { bytes, err := runtimeSyntaxVerilogHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/verilog.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxVerilogYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x56\x4d\x6f\x1b\x39\x0f\xbe\xe7\x57\x0c\xd2\x00\x6f\x92\x22\xae\x7d\x6c\x2e\x45\xf1\xee\x16\xd8\xc3\xa2\x87\x5d\x2c\x82\xc6\x81\x21\x4b\x9c\x19\xae\x35\xd2\x94\xa2\xfc\x11\xf0\xc7\x2f\x28\x8d\x93\xf4\x63\xdd\x62\x0d\x98\xe4\x8c\x24\x3e\xd4\x23\x92\xa3\x16\x3d\xf0\x61\x84\xdb\x66\x0b\x84\x3e\x76\x67\x67\x0e\x18\x2c\xdf\x9e\x35\x4d\xd3\xe8\x70\x30\x03\xdc\x36\xe7\xcb\xe5\xec\x72\x2b\xdb\x5e\xd2\x56\xd2\xb6\xbf\xba\x38\x3f\x3b\xa3\xec\x21\xd5\x99\x37\xcd\x48\x30\x52\xb4\x65\xea\xfa\x72\x88\x2e\x7b\x90\xd1\xd8\x8d\xe9\x40\x46\x8a\x1d\x99\x41\x20\xb8\x69\x04\x82\x3b\x0e\xaa\x59\xc7\xaf\x96\xcb\xf5\xf9\xe4\x4f\xc3\x9a\x6d\xe0\xb0\x8b\xe4\x26\xa7\x6c\xd2\x46\x30\x30\x50\x6b\x2c\x88\xf5\x26\x25\x5d\x5d\xde\x43\x70\xcf\x43\x10\x5c\x19\x7d\x76\xf8\xaa\x59\x67\xf4\x8c\xa1\x69\x73\xb0\x8c\x31\xa4\xc6\xe3\x06\x9a\x0b\x87\x69\xf4\xe6\x30\xc1\xa6\x11\x2c\x1a\x5f\x10\x2f\xee\xe7\x37\x6f\xdf\xdf\x7c\x32\x37\x8f\xab\x87\xd7\xe7\x67\x93\xa3\xbf\x2a\x55\xcd\x14\x5c\x3a\xae\x64\xc3\x30\x40\xe0\x29\x5a\xe3\x77\xe6\x90\xc4\x04\x27\x26\x25\xec\x82\x98\xcc\x71\x30\x8c\x56\xd6\xd0\x61\x90\x75\x6e\xf5\x8f\xed\xbc\xaa\x85\x58\x93\xa0\x88\x7d\x91\x8f\x62\xc1\x7b\xb1\x43\x4c\x62\x63\x68\xb1\x7b\xc9\xd0\xd7\x80\x0e\x26\x1c\x07\xad\xc9\x9e\x55\x8f\x46\x69\x77\x50\xdf\x63\x32\x6b\xe5\xde\x29\xeb\x3e\x15\x9e\x0a\x57\xa6\xda\x15\x43\xad\x23\x49\x6a\x77\x10\x80\x0c\xc3\x29\xec\x72\x86\x38\x20\xe3\xb6\x78\x2a\x34\xb6\x87\x7a\x3a\x05\x73\x0b\x81\xa5\x8d\xa4\x7f\x0b\x2a\x61\x0b\xe5\x69\x23\x4f\x68\x3f\x03\xd5\x41\xd8\x1a\x92\x1e\xbb\xfe\x71\x5e\xd5\x42\xb0\x15\x6c\xf5\x1f\x62\x00\xc1\x60\x1d\x92\x2a\x9f\x9d\x3e\x22\xa3\xf1\x82\x61\xcc\x2c\x18\x12\x9b\x60\x41\xfe\x8e\x18\x4e\x01\x79\x43\x1d\x88\xc7\xb5\xc7\xc4\xaa\xc9\xd0\x41\x7c\xb4\xc6\x57\x5a\x07\x63\x29\x4e\xf9\x3c\x80\xc3\x3c\x48\xd0\xe3\x0e\xd0\x15\x8a\x83\x9e\x5b\x88\x24\x21\xa6\x3e\xee\xac\xa2\x7a\x0f\xee\x14\x68\x88\x2c\x21\xb2\xe6\x44\x51\x0b\x09\xd9\x7b\x89\x24\x31\xb3\x86\x5f\xa0\x81\x81\x64\x54\xf7\x63\x4c\x05\xeb\x99\xfd\x31\x7b\x3f\x2f\x72\x51\xa4\x8b\xbb\x50\x8c\x3c\x9e\x02\x1e\xb3\x4f\x90\xf8\xe0\x61\x15\x43\x3d\xad\x2f\x5e\xd5\xbe\x20\x54\x92\x91\xc0\x78\xc6\x01\x84\xa0\x13\x02\x0f\x9a\x40\x04\x23\x18\x16\x2a\xdb\xa6\x12\x1d\x31\x99\x93\x1c\x97\x09\xba\xd9\xc9\x58\x48\xb2\xc6\x1b\x02\x27\x5f\x50\x26\x69\x30\xde\xcb\x31\xad\x54\xd7\x33\x48\x4c\x31\x74\xf3\x49\x2f\x24\xe5\x71\xf4\x87\xf9\x29\xcc\x3a\x65\x21\x35\x31\xcb\x36\x14\x5c\x8e\xa1\x1c\x23\x61\x42\x7d\xc0\x62\xe9\xb9\x32\x61\x24\x95\xba\xeb\x9c\x40\xf2\x0e\xe9\x64\xae\x6e\xc1\x72\xd4\xcd\xec\x0c\xb2\xec\xd4\xc9\x0e\xcc\x66\x5e\xe4\x42\x76\x3d\x7a\x90\x5d\x24\xd9\x6b\x9a\xec\x23\x55\x67\x53\xa3\xf9\xe3\x90\x18\x86\x9f\x6e\x37\x68\x92\xd4\xa6\xb3\xb2\x71\x58\x1f\xed\xb6\x3d\x5a\xde\xb0\xed\xb5\x19\x01\xb1\xaa\x3c\x80\xac\x41\x2b\x51\xd6\x18\x9c\x8a\x54\x44\x6c\x65\x4d\x60\x36\xa7\xb6\x66\x7b\x13\x9c\xd7\x2e\x1c\xed\x06\x43\xa7\x0d\x2a\x71\x95\x64\x30\x14\x93\x61\x5f\x35\x86\x0c\x62\xa3\x56\x7c\x91\x1d\xc5\x3c\x56\x73\x8c\x65\x32\xc5\x94\xb4\x43\xb1\xb8\xf8\x83\x4e\xf3\x04\xa9\xcd\xa9\x38\xaa\x9f\x90\x11\x88\x4b\xcb\x49\xf0\x39\x43\x28\xdf\x81\x3c\x9c\x74\xb6\x1f\x35\xa9\x61\x3f\x46\x52\xc5\xba\xb8\x68\x0a\xd2\x62\x30\x5e\x5a\xa4\xc4\xab\xa1\x50\xa7\x54\x99\xaa\x37\xda\x3d\x04\xbb\x10\x09\x56\x85\x38\xf4\x1e\x3a\xe3\xa7\x87\x41\x3d\x9e\x82\xc6\x90\xb0\xf4\x26\x06\x4a\x1a\x84\x3a\x5c\x99\x70\xa8\x46\xe9\x63\xa5\xd7\x88\x8f\xa1\x53\x8a\x4a\x0c\x90\x64\x88\xae\x84\x1b\x60\x77\xb2\xa0\x8d\xdd\x80\xd3\xc6\x10\x09\xf9\x20\x4f\x04\x8d\x14\xb5\x94\x75\x2c\x13\x08\x69\x56\xaa\xb0\x55\x96\x52\x36\x2f\x48\x24\x68\x85\x80\x33\x9d\xac\xe4\xa7\xe9\x29\xfa\x2d\x88\x0e\xa3\xd5\xb2\xcc\x96\xb5\x2a\x81\x84\x4d\xd7\x81\x13\xee\x31\x09\xf7\x14\x73\xd7\xc7\xcc\xa5\x02\x47\x02\x8b\x09\xe3\x49\x08\x9d\x98\x03\xb2\xe8\xdd\xa0\x08\x07\xad\xe4\xa0\x5f\x8e\x1c\xf0\x73\x06\xd9\x22\x71\x36\xbe\xd4\xdb\x2a\x92\x03\x92\x1d\x7a\x67\x0d\x39\xd9\x21\xf7\x45\x1c\xdb\xfe\x54\x66\xea\x28\xfd\xfb\xad\x43\xa9\xd7\x53\xea\x80\xc4\xc7\x0e\xad\x68\xd5\x6b\x1b\x90\x1c\xf4\xbb\xaa\xdd\xa9\x2a\x0c\xba\x1f\xfd\x3a\xa5\x3e\x12\xeb\xca\x62\x68\xbb\x2c\x3d\x53\xb6\x11\x9d\x92\xa2\xd9\xbb\x46\x96\xf5\xe1\xf8\xb1\x9b\x82\x29\xf5\x63\x02\x1f\x03\x3a\x3e\xcf\x42\x1e\xd6\x40\x35\x26\xbd\x97\x3c\xbc\x7e\xc1\xd4\x77\x67\xfd\xef\x3e\xe5\x87\x77\xf7\x6e\x1d\xfb\x07\x5d\xb1\x7f\xbc\xfb\x64\x6e\xda\xf7\x37\x1f\x5e\xac\x7d\xd5\xcc\x4c\x72\xed\xe5\x6c\x36\xbb\x6a\x0c\x75\x59\xf9\x6e\xd2\x21\xb0\xd9\x7f\xe7\x4a\x34\xbb\xbc\x5c\x2e\xaf\xaf\xe4\xf2\xbe\xde\x8b\x1e\x26\x3d\xbf\x79\xbb\x7a\xb8\xbe\xba\x9a\xf6\xf1\x22\xa2\xba\xd9\x7a\x4b\xd4\x5f\x62\x43\xe5\x40\xcf\xcf\x9f\xde\x41\x70\x5f\xbd\x49\x1b\x1c\x0b\xe0\x72\x39\x7b\x7e\xfb\xe2\xc2\x79\xfc\xbd\x44\xaa\x71\xfe\xbf\x37\xf4\xbc\xf4\x29\x9c\xa1\x24\xd2\x37\x61\xbc\x79\xf3\x75\x18\x17\x3f\xc0\xe3\xe8\xe2\x6d\x73\x7e\xf9\xe7\xc7\x5f\x3e\xca\xdd\xdd\x9d\x7c\xf8\xed\xee\xf7\x5f\xaf\x6e\xdf\xfd\x04\xd8\x72\x79\xfd\xcd\xae\x97\xd7\x6f\xfe\x3b\xe2\x3f\x01\x00\x00\xff\xff\x7e\xc0\x6f\x53\xc1\x0b\x00\x00" func runtimeSyntaxVerilogYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxVerilogYaml, "runtime/syntax/verilog.yaml", ) } func runtimeSyntaxVerilogYaml() (*asset, error) { bytes, err := runtimeSyntaxVerilogYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/verilog.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxVhdlHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xcb\x48\xc9\xe1\x8a\xd1\x03\x51\xf6\x2a\x5c\x5c\x80\x00\x00\x00\xff\xff\x5e\x20\xa0\x34\x0f\x00\x00\x00" func runtimeSyntaxVhdlHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxVhdlHdr, "runtime/syntax/vhdl.hdr", ) } func runtimeSyntaxVhdlHdr() (*asset, error) { bytes, err := runtimeSyntaxVhdlHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/vhdl.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxVhdlYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x56\xdd\x8e\xdb\x46\x0f\xbd\xf7\x53\x18\xc6\x87\x2f\x52\x16\x72\x93\xcb\x1a\x6d\x85\xdc\xf4\x21\x6a\xb9\x06\x25\x51\x12\x9b\x11\x47\xe0\x70\xfc\x13\xf0\xe1\x8b\x91\xd7\x86\x1d\x64\xd7\x6d\x6f\x76\x2d\x0c\x79\xf8\x77\xe6\x70\x3a\x72\xa8\xe7\x09\x37\xcb\xc3\xd0\xba\xc5\xa2\x45\xc5\x46\x37\xcb\xc5\x72\xb9\x5c\xa6\x43\x86\x11\x37\xcb\x55\x55\xad\x93\x41\xf9\xbf\xd5\x62\x21\xd1\x61\xd8\xcc\x16\xc5\xf2\xe2\xbc\xca\x28\xaf\xaa\x3a\x0b\x2a\xc4\xbd\x11\x2b\xf6\x28\xc6\xa0\x51\xc0\xd9\xe4\x03\x29\x1d\xd0\xb2\xc8\x79\x19\xa8\x67\x6c\x2d\x68\xbb\x8f\xa5\xf3\x3d\x35\xd9\xfe\x80\x8d\x7a\xc9\x4b\xab\x49\xef\xbf\xbc\x77\x08\x6c\xb1\x3c\x7d\xfa\xfc\xad\x34\x10\x81\xb3\x09\x70\x8f\x29\xde\xea\x35\x09\x6a\x91\x95\x3a\x42\x49\xa9\x94\x94\x3b\xaa\x05\xe4\xbc\xdd\x6e\xc2\x04\x0d\x6e\x76\xbb\x97\x2d\x14\xdf\xbe\x14\x7f\xec\x3f\x15\x3f\xef\x5e\xde\x74\x8c\x01\xdf\x70\xaa\xaa\xf5\x3b\x7e\x8d\x1f\x27\xcf\xc8\xfa\xef\x43\x66\x20\xcd\x40\xa9\xed\x51\xd0\x1a\xcf\x1d\xf5\x51\x40\xc9\x73\xfe\x26\xda\xfd\x81\xef\xfe\x43\xd0\xf4\xad\x67\x9b\xa0\xf9\x0a\x3d\xfe\xb3\x40\x14\xde\xc4\x43\x6e\xef\x2d\xb3\xc7\xa2\x5e\x83\xdd\x9a\x64\x93\xf8\x06\x43\xb8\x86\xb7\x1e\x19\x05\xf4\x31\x8f\xbc\xfc\x61\x2d\x41\x41\x71\x44\xd6\xd7\xd0\x89\x77\x50\x07\x83\x66\x86\x84\x4e\x51\x0c\x1c\x41\x30\x70\xce\x80\x5b\x7b\x48\x06\x42\x40\x51\x03\x55\xa1\x3a\xea\x03\x91\x7e\x84\x5d\x63\x4f\x6c\xb5\xf3\xcd\x57\xab\x7d\x7b\xb6\x3a\x76\x1d\x8a\xd5\x31\x58\x03\x01\xef\xca\x7a\x18\x5e\xfa\x0a\x0a\xac\xcf\x02\xb4\x14\x1a\xcf\x8c\x8d\x5a\xeb\x8f\xac\xde\xd0\x05\x4c\x7f\xa8\x33\xe4\xf6\xda\x3e\x3c\xd1\x53\xac\x74\x65\xad\xf3\x62\x5d\xe4\x66\xce\xe2\xda\xda\xcb\x0f\x6a\xac\x8f\x20\x2d\xb6\xcf\x90\xa8\x33\x1a\xa7\xd4\x30\x62\x23\x46\x51\x02\x67\xc4\x3e\xaa\x51\x78\xe6\xed\xa0\x46\x67\xaf\xd7\xd0\x1c\xf1\x3c\x66\x47\x8a\x49\x0f\x9c\xf7\x93\x8d\x30\xd9\xe8\x9f\xe6\xc1\x69\x80\x8c\x47\x63\x3c\xa9\xb1\x17\x63\xaf\xc6\xd1\x39\xf3\x9d\x79\x36\x3f\x21\x9b\x17\xf3\x3a\xa0\x04\xf3\xf1\x69\x93\xae\xac\x9b\xbc\x68\xd2\x26\x4d\xe3\x6b\x2f\xa4\x6c\x53\xc5\x37\x7a\x46\x79\x4a\x8f\x59\x8c\x4c\xb0\xf1\xd2\x9a\x60\x4f\x21\xf1\x4f\xf0\xaf\x34\x4f\xc1\xd1\x04\xe7\x38\x82\x1a\x85\x4d\xbc\x33\xf1\xf2\x0c\x35\xa0\x4b\xfe\x01\x0f\x28\x69\xf6\x61\x00\x49\x9a\x49\x3d\x83\xb3\xe0\xc0\x82\x73\x16\x04\x2c\x88\xb3\x10\xeb\xa4\xc3\xcf\x40\x75\x40\x36\xf5\xa6\x02\x1c\xe6\xa4\x92\x97\x45\x86\xae\xc3\x46\xb1\xb5\xc8\xa4\xc1\x22\x2b\x39\x8b\xe1\x29\xe0\x01\x84\xa0\x76\x68\x47\x20\xb5\x63\x82\x3f\x0e\x89\x81\x47\xd2\xc1\x4e\x69\x58\xa7\xf7\x6b\xfd\x90\xd5\xe9\x0a\x39\xec\xd4\x84\xfa\x41\x6d\xa0\x7e\x30\xe7\x8f\x69\x30\x76\x48\xc5\xc6\xa6\xb1\x29\x55\x9f\xac\x7c\x77\xb1\xf3\x89\x9e\x69\x88\x99\x83\xa0\xfb\xbc\x3c\x80\x8b\x98\xbf\x1d\x27\x93\xd4\xcb\x80\xfb\xbc\xbc\x8c\xcc\x21\xf7\x3a\x18\x84\x06\xb9\x4d\x5b\x0b\x0f\xe9\x0e\x07\x4d\x15\xbd\x03\x14\x68\x9c\x1c\xda\x04\x3a\x18\xcd\x37\xbc\xc1\x7c\x9f\xf6\xe4\xbb\x03\xd5\x76\x3f\x82\x36\x83\x65\x42\x21\x85\xeb\xc0\x39\xe2\x3e\xdf\x63\xdb\xa3\x51\xd8\x9f\x9e\xb4\x5b\xfd\x3e\x8b\x7c\xdd\x9e\x97\x7f\xd7\x4d\x7b\x5d\x90\x41\xdb\xeb\x4e\xbd\x2e\xd1\x07\xd4\xf3\x58\x7b\xb7\xf6\x53\x92\x04\x3f\x8b\x77\x55\xbd\x58\x61\x55\xf5\xd1\x7e\xb2\xff\xdb\x2f\xf6\x9b\xfd\x6a\x55\xb5\xb6\xcd\xad\x05\x57\x1d\x5b\x73\x1c\xeb\x9b\xe2\x7f\xc8\xb6\x9f\x8a\xcf\x3b\x8b\x76\xb2\x6f\x76\x34\x67\x83\x15\xf9\x07\xdb\xd6\xfe\xb4\x2b\xab\xd5\x7c\x0c\x45\xf7\xa5\xf8\xfd\x7b\xa3\x97\x6a\xf5\x3e\x76\x55\xd5\xdb\xcb\xca\xdd\xef\x5e\x32\xdc\x56\x55\xb1\x2b\xb7\xf3\x16\xc8\xcb\x6c\x59\x6e\xbb\x89\xe3\xb8\x2b\x43\x5e\xde\x15\x77\xc3\x4a\xaf\x86\x7b\xda\x4b\xc4\xd4\xed\x47\x3e\x5f\xad\xef\xa5\xc6\x6b\xa2\xb2\xf0\xcc\x06\x91\x24\xa3\x40\xee\x3b\x11\xb8\x85\xb9\x3c\x76\xd2\xe3\x68\xb5\xfd\xb3\x5a\xed\x3e\xde\x97\x35\xbe\xce\xae\x28\xd6\x1f\x57\x8b\xbf\x03\x00\x00\xff\xff\x82\x03\x0d\x07\x67\x09\x00\x00" func runtimeSyntaxVhdlYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxVhdlYaml, "runtime/syntax/vhdl.yaml", ) } func runtimeSyntaxVhdlYaml() (*asset, error) { bytes, err := runtimeSyntaxVhdlYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/vhdl.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxViHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xcb\xe4\xd2\x88\xab\xd1\xaf\x89\xd1\xd3\xd4\x48\xad\xa8\x29\xcb\xcc\xd5\x2c\x4a\x56\xa9\x89\xd1\x2b\xcb\xcc\xe5\xe2\x02\x04\x00\x00\xff\xff\x51\x57\x94\xb1\x1e\x00\x00\x00" func runtimeSyntaxViHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxViHdr, "runtime/syntax/vi.hdr", ) } func runtimeSyntaxViHdr() (*asset, error) { bytes, err := runtimeSyntaxViHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/vi.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxViYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x90\xc1\x6a\xe3\x30\x10\x86\xef\x7e\x0a\xad\x09\x1b\x3b\x8b\xb3\xb9\xc6\xb0\x98\xa5\x6f\x51\x49\x0d\xb2\x3c\x6e\x45\xa5\xb1\x91\x64\xe3\x96\x79\xf8\x12\x27\x4d\x82\x21\x90\x4b\xe7\x24\xfd\xd2\x3f\xf3\xcd\xdf\x1a\x0b\xf1\xa3\x87\x92\x8d\x26\x49\x1a\x88\xa0\x63\x99\x30\xc6\xd8\xf1\x05\x95\x83\x92\xa5\xd9\x0b\xfd\x25\x21\xb6\x79\x06\x13\x8d\xc6\xe5\x5e\xaf\x8e\xf7\xd1\xb8\x34\x49\xfc\x60\x21\x9c\x3c\x05\x33\x0d\x60\x34\xad\x01\x5f\xb2\x94\xff\x2f\x9e\x55\xf1\x79\x90\xe7\xc3\xae\xd8\x1f\xe4\x86\xf3\x32\xf4\x4a\x43\x29\xe5\x86\x67\xb9\x4c\xcf\xd6\x10\x55\x04\x07\x18\x4b\x96\x0a\x51\x67\x1c\xc7\x29\x74\xc6\x6a\x59\x65\xd8\x79\xa0\x01\xf3\xca\xa9\x9e\x38\x8e\x76\x92\x48\xdc\xe8\x4e\x56\xd8\x11\xd7\xc6\x76\xe3\x24\xf9\xe0\x24\x85\x6a\x40\x97\x0b\x51\xdf\xeb\x1b\xb0\xf3\x84\x03\x12\x3a\x0a\x10\xc9\xb4\x04\xd8\x98\x96\x2c\x44\x1a\xd0\x42\xbc\xe7\xe6\xbf\x7e\xff\xbb\xe0\xea\x0e\x43\x54\x18\xb7\x38\xb8\x7a\x5e\x57\x88\x9a\xef\x8a\xbd\xfc\x33\xdb\x97\xdf\x42\xf4\x06\x5f\x4f\x39\x1d\x2b\x44\xe5\x67\xa4\x34\xbd\x68\x80\xcd\x42\x09\xef\xa6\x9f\x5b\x0b\xb1\xbd\xaa\x37\x91\x7f\xd7\xed\xa4\x1e\xb4\x51\xf6\xe9\x4d\xf9\xab\xf5\x51\x9c\xf5\x92\x66\xfd\x93\x30\x6e\x4e\xf6\x81\x4c\x56\xcb\x79\x8c\xcb\x8b\x92\x24\x5f\x01\x00\x00\xff\xff\xe2\x27\x2e\x17\xc7\x02\x00\x00" func runtimeSyntaxViYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxViYaml, "runtime/syntax/vi.yaml", ) } func runtimeSyntaxViYaml() (*asset, error) { bytes, err := runtimeSyntaxViYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/vi.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxVueHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\x2b\x4d\xe5\x8a\xd1\x2b\x2b\x4d\x55\xe1\xe2\x02\x04\x00\x00\xff\xff\xd2\x94\xf3\xc5\x0c\x00\x00\x00" func runtimeSyntaxVueHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxVueHdr, "runtime/syntax/vue.hdr", ) } func runtimeSyntaxVueHdr() (*asset, error) { bytes, err := runtimeSyntaxVueHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/vue.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxVueYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x57\x5f\x93\xdb\xb8\x0d\x7f\xee\x7e\x0a\xc5\xe9\xf4\xa4\xa4\x74\xda\x97\xcc\xd4\x97\xdc\xa6\x7f\x5f\xdb\x87\x4e\x67\x3a\xb6\x33\x03\x91\xb0\xcc\x98\x22\x79\x24\xa4\xcd\x5e\xd1\xef\xde\x01\x25\xad\xd7\xbb\x9b\x5c\xb6\xe7\x19\x8b\x00\xc1\x3f\x00\x08\xfe\x00\x1e\xac\x43\xba\x8d\xb8\xa9\xc6\x01\xaf\xae\x0c\x12\x6a\xda\x5c\x55\x55\x55\x89\xc8\x43\x8f\x9b\x6a\xb5\xdb\xad\xc7\x01\x7f\xbd\xba\xba\x4a\x83\xc3\x3c\xc9\x55\x65\xf0\x00\x83\x9b\x87\xcb\x2f\x13\x24\xda\x54\xab\x77\x84\x7d\x74\x40\xb8\x7e\x75\xfd\xc3\xea\x4e\x8c\xde\x88\xf0\xcd\xd3\x52\x67\x7b\x4b\xaa\x4b\x61\x88\x9b\x2a\xdf\xf6\x6d\x70\x6b\x82\xee\x4e\x7e\x6f\xeb\xe5\xa7\x2a\x4c\x29\x24\x59\x74\xfb\xf1\xc5\xfe\x72\xbd\x69\xc0\x79\xa1\x4d\xb5\xaa\xaf\x6d\xf3\x6e\xfb\x66\x7f\x5d\x03\x43\xdd\xb6\x89\x8d\x49\x98\x33\x27\x04\x4e\x64\xb5\x43\xce\xd6\x20\x0f\xc6\x86\x86\x5b\x6e\x6b\xc8\xc8\xa6\xb6\x1c\x1a\x76\x41\x9f\x7e\x1c\x02\x21\x27\x1e\x88\x82\x6f\x58\x43\xed\x47\xc8\x1c\xc9\x16\x16\x3d\x61\x62\x6d\x09\x59\x87\xda\x20\x3b\x76\xc5\xa2\x86\x4d\x0d\x04\x0c\x04\xce\x66\x62\xc3\xe8\x18\x09\xac\xcb\x7c\xf0\x6c\xc1\x85\x8e\x1d\x53\xc3\xd8\x33\xf6\x2d\x1a\x3e\x58\x74\x26\x23\xf1\xc1\x76\xb5\x86\xb2\x05\x0f\x09\x1b\x3e\x84\xd4\xb3\x3d\x24\xe8\x91\x8f\xdb\xdf\xab\xb7\x7b\x3e\x26\xb6\x6c\xfb\x8e\xad\xaf\xe3\x40\x9c\x1b\x3e\xb5\x86\x4f\x78\xdb\xa1\x67\x07\x2d\x3a\x76\xd8\xa1\x37\xec\x2c\x3b\xeb\x4f\xdc\x43\x6d\x3d\x47\x4e\xa7\x86\x7b\xf4\x43\xf9\x58\xc2\x9e\x7b\xa4\x1a\x18\x53\xc3\x1e\x46\xf6\x21\xeb\x64\x23\x71\xa8\xdb\x4f\xa8\x89\x1d\x47\xaa\x8b\x55\x5c\xac\x1e\x28\x0e\xd4\x70\xe4\x08\x09\x7a\x8e\x56\xd3\x90\x90\x63\xf9\x87\xae\x38\xf8\x47\x4e\x75\x64\xe2\xa1\xbd\x6d\x38\x73\x86\x3e\x72\xc6\x5a\x17\xa3\x1c\x6a\x6a\x38\x8f\x1d\xe7\x1e\x9c\xe3\x1c\x86\xa4\x91\x73\x04\xcf\x99\x52\xf0\x1d\xe7\xa1\x6e\x39\x72\xdf\x43\xba\x6d\x98\xf0\x33\x81\x9c\x19\xd9\x1e\x99\x12\xe8\x13\x0f\x3c\x38\x1e\x21\xf1\x68\x0d\x06\xbe\x69\x53\x53\x57\xeb\x57\xcd\x57\x63\x62\x8d\x9f\x09\xbd\x41\x73\x11\x1c\x6d\x30\xb7\x6c\xec\xc8\x47\xea\x1d\x1f\x11\x4c\x8d\xa9\xb9\xe6\x43\x08\x72\xbc\x64\xc9\x21\x13\xb4\xf2\x9d\x07\xf3\xb1\x46\x30\xcd\x35\xa7\x32\xaa\x39\xef\x5d\x7d\xe1\xf7\x40\xa7\x98\x30\xa6\xa0\x2f\xf4\x98\xfd\x9e\xe9\xd6\xe1\x97\x8d\x89\xa8\x2d\xb8\x4d\xb5\xfa\xcd\xf6\xe3\xf7\xdb\xed\x26\x47\xd0\xb8\xd9\xef\xf7\xaf\xbe\xbf\x1c\xfb\x60\xa2\x35\xe8\xc9\x1e\x2c\xca\xfd\xa9\xc1\x11\xb7\x9d\x0e\x2e\x24\xd6\x0e\x72\xe6\x23\xda\xee\x48\x7c\x4c\x78\x60\x6b\x96\x18\x0a\xbe\x33\x98\x35\x0b\x32\x70\xf0\xb5\x76\x56\x9f\xf8\x10\xf4\x90\xd9\x05\x30\xdc\x87\x21\x63\x18\x25\x7a\xa2\x03\x8d\xc7\xe0\x0c\x26\xce\xf6\xa7\xe5\x44\x93\x9e\x4c\x62\x82\xd4\x21\xb1\xe0\x0f\x8f\xe0\x06\xe4\x1b\x6b\xe8\xd8\xbc\x7f\xfa\xc0\x36\xd5\x6a\xbb\x79\xbf\x7f\x28\xd4\xc1\x67\x02\x4f\xeb\x4c\xc9\x7a\xb9\xe6\xbb\xd5\xf6\xe3\x6e\xb5\x7f\xb5\x5b\x7d\x71\xac\x1f\xfa\x76\x32\xfc\xda\x36\x2f\xb7\xbf\x53\x7f\xf8\xa3\xfa\xdb\xfe\x3f\x6f\x7f\xfb\xf6\xbf\xab\xab\xaf\x41\xc8\x3b\x7e\x74\x02\x0f\x14\x58\x0f\x49\x54\xad\x0f\x14\xeb\xdc\x5c\xf3\x91\x66\xa2\xb3\xc4\xfa\x98\x42\x8f\xcd\xe6\xcd\x9b\xed\xc7\xea\x57\xfb\xd7\x8f\xd7\xea\x7b\xf4\x05\x43\x5f\x28\xb5\x7e\x7d\xad\xd4\x83\xfd\x5e\xde\x8f\x95\x77\x2f\xfe\xf2\xf7\x3f\xff\xf3\xdf\xff\xf8\xeb\xfa\xf5\xe3\xc8\x98\xd7\x5a\xb7\x02\x5c\x97\xc0\x59\xdd\x07\xeb\x17\xbb\x9d\xda\xed\xd4\xea\xd1\x88\x09\xaf\x27\xe9\x0f\x8f\xc5\x13\x20\x57\xdb\xfd\xa5\xc3\x5e\x56\x7f\x0a\x81\x32\x25\x88\xcf\xbd\x77\x0a\x1c\x26\xe2\x56\x81\x44\x75\x21\x46\x20\x48\xdc\xaa\x16\x4c\x87\xdc\x2a\xab\x83\x17\x36\x21\x18\x9d\x86\xbe\x15\xa6\xa0\xf1\x94\x3a\xce\x2c\x85\xe0\xda\x69\x6e\xe9\xe0\x56\x69\x70\xe8\x4d\xe9\xd3\x90\x8c\x12\x1c\x59\x68\xeb\x05\x37\x27\x66\x6a\x24\x90\x9d\xca\x4e\x12\xc2\xb9\x43\xc8\xe0\x1c\xc4\x2c\xbd\x26\x85\x68\xc2\x8d\xbf\x47\xaa\x82\xa1\xf7\x78\x63\x05\x92\x64\xd3\x09\xd8\x5b\x25\x00\xae\xf4\x11\xf5\xa9\x0d\x9f\xef\xf4\xbe\xe8\x5d\x78\x03\x84\xd1\xea\x53\x99\x5f\x7a\x24\x2f\x2f\xf4\xc5\xd4\xc5\x82\xc2\x24\x30\x36\x9c\x19\xb2\xbe\x5b\xb8\x8c\x6e\x72\xee\xc4\x45\xeb\xef\x1c\x54\x7a\x08\xba\x7c\x47\x2f\x48\x3b\xf1\x77\xdd\xb6\x3f\x6b\x65\xfb\x4e\x39\xf8\xe9\x76\x22\xe5\x2b\x8a\xdc\xe9\xf6\x69\xe8\xdb\x20\x28\xbe\x48\x8a\x07\x3d\x81\xf5\x65\x7a\x0a\x37\x93\x4f\xb9\x55\x25\x31\x49\x93\xcf\xf3\xcf\xcc\xe2\xd9\x1e\x8d\x15\x8d\xfa\x60\x40\x66\x49\x96\x2a\xdf\x65\xc0\x42\xde\x3f\x1e\xe9\x9b\xcf\x5b\xc8\xd9\x1a\x0f\xe3\x14\x23\x13\xa1\xda\x04\xde\x9c\x59\x0a\x5d\x57\xbc\x3d\xf3\xd3\x4e\x82\x6e\x0e\xc4\xde\x08\x9d\xf5\x50\x92\xd8\x7d\x66\x1e\x17\x43\x94\xa1\x42\x2d\x79\xf0\x4c\xaa\x69\x5f\x29\x37\x66\xea\x84\x0e\x25\x70\x6f\x12\xc4\x88\xf7\xbb\x84\x8c\xd6\x4f\xfe\x9a\x12\xcf\xdc\x2a\x27\xb5\xc6\xc2\x64\xdb\xc7\x45\x96\xa7\x46\xbe\x92\x24\x5b\x45\x01\x32\x95\x36\x38\xb2\xb1\xd9\xed\xda\x87\x88\x71\x99\x12\x46\x48\x16\x3c\xcd\xf9\x2e\x1f\xc3\x0d\xe7\x23\x98\x70\xc3\xe5\x12\x82\xb3\x9d\x57\xc7\xb9\x1d\xa7\x04\x21\x7e\xe5\x0f\x79\x68\x7b\x4b\x4c\xd0\x49\x4d\xa2\x24\xb7\x48\x2b\xc8\x6f\x80\x60\x71\xeb\x44\x4f\x49\x40\xf6\x2a\x61\x91\x82\xcb\x13\x87\x9f\x23\x08\x46\x4c\xdc\x94\x7f\x0a\x69\x6c\x16\x73\x8d\xe4\x60\xeb\x0d\x7e\xe6\x8d\x95\xc2\x6b\x94\x68\x00\x7d\x92\x60\xf1\xa6\x6c\x59\x12\x4a\xa1\xe6\x74\xf6\x41\xee\xb3\xf5\x9d\x2a\xf0\x77\x66\xa5\x32\xd2\xb2\xb5\xa4\x7b\x4c\xfc\x21\x61\x46\x7a\x56\x2a\x7a\x59\xfd\x6b\xc0\x67\x42\x9e\x0e\x7d\x0c\x1e\xc5\xcb\x09\x7c\xb6\x25\x94\xce\xe4\x7c\x09\x4e\x88\x51\x81\xb3\x23\x72\x76\x81\xbe\xe1\xe8\xa6\x50\x1f\x55\xa9\x60\x46\x55\x0e\x6f\x54\xf6\xc0\xa3\x42\x97\x71\x6e\xa6\x0e\x39\xb2\x51\x05\xcf\xa3\x12\x77\xf2\x28\x17\x0b\xcb\x34\x17\x64\x11\xa9\xe4\x46\xa5\x5d\x80\x53\x19\xa8\x51\x0a\x4b\x2e\x85\x41\xe6\x0f\xa5\x04\x78\xbe\xa7\x54\x0a\x03\x61\x7a\xa6\xc3\xa6\x49\x13\x50\xcc\xf4\x68\xf1\xe6\xe7\x5d\x42\x61\x36\xe8\x59\x9a\x5e\x3d\x78\xea\x54\x8f\xdf\x3a\x53\x95\xf6\xc4\x33\xe7\x91\xe0\xff\x7a\xe1\x58\xaf\xdd\x60\xe4\x15\xf6\x09\x46\x98\xd6\x5c\x7d\xb3\x5a\xdb\x6a\xff\xda\x81\xef\xde\xd7\xbb\x15\xe5\xdd\x8a\xbf\xa3\xfc\x5d\xf3\x2d\xca\xfe\x8c\x32\x52\xb4\x2d\xca\x54\x4b\x71\xf9\xb5\x27\x61\x29\xf9\x9e\x7e\x0f\x3e\x21\xfa\x85\xae\xd2\x39\xaf\xae\xe6\xc3\xbb\xfa\x5f\x00\x00\x00\xff\xff\xd0\x30\xa2\x8f\xe4\x0e\x00\x00" func runtimeSyntaxVueYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxVueYaml, "runtime/syntax/vue.yaml", ) } func runtimeSyntaxVueYaml() (*asset, error) { bytes, err := runtimeSyntaxVueYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/vue.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxXmlHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xc8\xcd\xe1\x8a\xd1\xd3\xa8\xc8\xcd\xa9\x29\x4e\xcf\xcd\xb1\xaf\x29\xca\x4b\xaf\x29\x2e\x4b\xaf\x29\xc8\xc9\x2c\x2e\xd1\x54\xe1\xb2\x89\xb1\xaf\xc8\xcd\xd1\xd3\x8a\xb1\xb7\xe3\x02\x04\x00\x00\xff\xff\xbb\x06\x6b\x95\x2d\x00\x00\x00" func runtimeSyntaxXmlHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxXmlHdr, "runtime/syntax/xml.hdr", ) } func runtimeSyntaxXmlHdr() (*asset, error) { bytes, err := runtimeSyntaxXmlHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/xml.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxXmlYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x8f\x3d\x4f\xc3\x30\x10\x86\x77\xff\x8a\xc3\x42\xe2\x43\x4a\xd8\x23\x20\x43\x61\x86\x81\x05\xf5\x3a\x98\xe4\x9a\x5a\xd8\x8e\x65\x1f\xa8\x95\xf2\xe3\x51\x1a\x28\x34\x71\x90\x18\xf0\x76\xf7\xd8\xcf\xfb\x7a\xad\x0d\xf1\xce\x53\x01\x5b\x6b\x84\xa8\x89\xa9\xe2\x42\x00\x00\xf4\xc8\x29\x4b\x05\x48\xc4\xfc\x7c\x6b\x4d\x17\x1b\x6b\xca\x2e\xb8\xa6\x8b\xef\x4d\xe7\x8d\x8e\x7c\x71\x2a\xf7\xb7\x37\xa4\x6a\x0a\x05\xc8\x6b\xc4\x72\x6b\x4d\x7e\x89\x58\xde\x4a\x21\xc2\x9b\xa1\x38\x18\x33\xf0\x81\x7c\x68\xab\x61\xec\x4f\x64\x15\xb8\x7f\x75\x72\xf7\xb0\x78\x7a\x7e\xbc\x97\x07\x44\xae\x2e\x40\x2e\xaf\x56\xbd\xe6\x6b\x39\xd8\x60\xb9\x12\x9f\xc6\xaa\xb5\x96\x1c\xa7\x8c\x59\x36\x96\x65\xd9\x6f\xaa\xb8\xb3\x2f\xad\xc9\x59\x35\x09\x1b\x62\x59\x8e\x75\xfd\x6e\x22\x3c\x8c\x83\x54\xd7\xe4\x58\xaf\x35\x85\x63\xf2\x53\x0e\x72\x82\x86\x80\x9b\x29\xf8\x6e\x7d\x9c\x53\xb5\x2e\xb2\x72\x9c\x47\x0e\xda\x35\xf3\x61\x28\xe7\xd2\x52\x24\xbe\x6a\xbf\xff\x29\x62\x3e\x57\x66\xb2\x1e\x37\xf2\x54\x69\x65\x16\x1b\x15\xd2\xaa\x3f\xb4\x3f\x9b\x2b\x9f\x00\xff\xd6\xfd\x23\x00\x00\xff\xff\x74\xfd\x70\x36\x35\x03\x00\x00" func runtimeSyntaxXmlYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxXmlYaml, "runtime/syntax/xml.yaml", ) } func runtimeSyntaxXmlYaml() (*asset, error) { bytes, err := runtimeSyntaxXmlYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/xml.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxXresourcesHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\x28\x4a\x2d\xce\x2f\x2d\x4a\x4e\x2d\xe6\x8a\xd0\x48\x49\x4d\x4b\x2c\xcd\x29\x29\xae\x81\x0b\x6a\xaa\x70\x71\x01\x02\x00\x00\xff\xff\x1b\x8e\xfc\x39\x23\x00\x00\x00" func runtimeSyntaxXresourcesHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxXresourcesHdr, "runtime/syntax/xresources.hdr", ) } func runtimeSyntaxXresourcesHdr() (*asset, error) { bytes, err := runtimeSyntaxXresourcesHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/xresources.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxXresourcesYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xcf\xdd\x4a\xc3\x30\x18\xc6\xf1\xe3\xe5\x2a\x5e\xc3\x0e\xda\x86\x15\x4f\x7d\x41\xbc\x0d\x21\xcd\x20\xcd\xde\xb2\x40\x3e\x4a\x3e\xd4\x61\x2f\x5e\x6a\xdd\x98\xe8\xf9\xef\xf9\xc3\x33\x59\x47\xe5\x32\x13\xc2\x47\xa2\x1c\x6b\x32\x94\x19\x3b\x51\x21\x53\x10\x18\x00\xc0\x4a\x82\xf6\x84\xc0\x5f\x9b\x13\x4d\xba\xba\x92\x97\x9b\x6e\xf7\x9c\xb1\x54\x1d\x65\xfc\xe6\x07\xc8\x33\x19\xab\x1d\x02\x3f\x4a\x89\xda\x85\xea\x51\x29\x31\x0c\x1d\xff\x11\xf6\x44\xa1\xd8\xc9\x52\xea\xdf\x74\x42\xe0\xc3\xd0\xfd\xa6\x78\xa5\x26\x86\x5c\x74\x28\x7d\xa8\x7e\xa4\xcd\x8e\xf2\xf1\xf0\xb4\xaa\xf1\xaa\xf2\xc5\x8f\xd1\xf5\x71\xa6\xa4\x4b\x5c\x95\xec\xf0\x59\xfd\x89\x8c\x31\xba\x2d\xd1\x94\x54\x69\x99\xb4\xcb\xd4\xde\x85\x4c\xf4\x9e\x42\x41\xe0\xcd\x71\x91\x12\xf3\xac\x0d\xa1\x52\xed\x43\x23\x8f\x9f\xaa\xef\xda\x97\xfd\xed\x45\x58\x6f\x1c\xcc\x59\xa7\xfe\xfd\x6c\x0b\x6d\x18\xf8\xdd\x4e\xfc\xa7\x11\xf8\x4e\x80\x58\x40\xec\x04\x67\x5f\x01\x00\x00\xff\xff\x03\xc7\xb0\x2d\x83\x01\x00\x00" func runtimeSyntaxXresourcesYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxXresourcesYaml, "runtime/syntax/xresources.yaml", ) } func runtimeSyntaxXresourcesYaml() (*asset, error) { bytes, err := runtimeSyntaxXresourcesYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/xresources.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxYamlHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\x4c\xcc\xcd\xe1\x8a\xd1\xab\x4c\xb4\xcf\xcd\x51\xe1\x52\x8d\x74\xf4\xf5\xe1\x02\x04\x00\x00\xff\xff\xc3\x03\xef\xb8\x14\x00\x00\x00" func runtimeSyntaxYamlHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxYamlHdr, "runtime/syntax/yaml.hdr", ) } func runtimeSyntaxYamlHdr() (*asset, error) { bytes, err := runtimeSyntaxYamlHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/yaml.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxYamlYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x91\x41\x8f\xd3\x30\x10\x85\xef\xfe\x15\x5e\xb3\x4b\x93\xad\x1c\x71\xc5\x07\x50\x85\x5a\x2e\x4b\x2b\xb1\xe5\x50\x32\x89\xe4\xb6\x13\xd6\xc2\x71\x42\xec\x0a\x05\xcd\x8f\x47\x4e\x28\x0d\x5d\x2e\x48\x58\x95\x55\xbd\x89\xdf\x7c\x7a\xaf\x32\x16\x43\xdf\xa2\xe2\xbd\xae\x2d\x63\x47\x0c\x78\x08\x8a\x71\xce\x79\x9c\x39\x5d\xa3\xe2\x02\x20\xeb\xf5\xdb\xda\xde\x8a\x61\xf2\x84\xfa\x88\x9d\xe2\xe2\x6e\xb7\xf8\xf0\x20\x18\xeb\x4e\x16\xfd\xf8\x4a\xf2\xd1\x4f\x24\x25\xf1\xf4\xe6\x26\xd9\x1b\xa7\xbb\x9e\xf6\x4d\x63\xa9\xb2\x8d\x0e\x64\x5c\xa0\x5a\xb7\xe4\x4e\xd6\x52\x13\xff\x79\xfc\x46\x1e\x03\xf9\xd0\xa5\x5c\xfc\xf2\x39\x34\xce\x07\xed\x82\xe2\x11\x60\x9f\xec\x96\x8f\xd4\xa3\xa7\x1d\xf5\xb4\x59\x53\xe3\x68\xfb\xf1\xd3\x92\xb6\xdd\x09\x29\xc4\x6b\xbd\x21\xd7\xd0\x9a\x1c\x6d\x56\x2b\x6a\xaa\x8a\x56\x8b\x87\xc7\x25\xad\xb4\xf5\x48\x55\xbc\x53\x80\xfd\xd9\xdf\x07\x1d\xb0\xc6\xb8\x40\x24\x2a\xcf\x95\x6f\xf5\x01\x55\x51\x10\x40\x4e\x00\x05\x4d\xc5\x79\x4e\x6f\x0a\x2a\x27\xca\xbd\xe4\xe9\xd9\xcb\x1c\xd1\x05\x53\x99\x21\x95\xc9\x37\x39\xc0\xfd\xcb\x22\x5f\xc8\xcf\x5a\xfe\x78\x25\x5f\x17\x73\xf1\x67\x4a\xb9\xcc\x00\xbe\x17\x73\xf5\x37\xaa\x8b\xd8\xe2\xc1\x68\x1b\x93\x48\x4a\x29\x25\x95\x00\xd9\xf8\xa3\x72\x28\x81\xca\xbb\xed\xe2\x7d\x2a\xd8\x55\x78\x99\x0f\x9d\x71\x5f\xc6\x6e\xe2\xf1\x41\x77\xe1\x5c\x0f\x08\xf1\x7b\x80\xee\x18\x9b\x9e\x28\xfe\xab\x69\x87\xf2\x01\xb2\x8b\x3a\xe9\xfa\x7c\xa6\xeb\x46\xd2\x77\x4f\xba\xbb\x3c\xfd\x27\xa6\xd9\x35\xd2\xec\x19\x51\x32\xf8\xa6\x94\xcc\x66\xe9\xff\x01\xab\x87\xc4\x9f\x01\xbd\xb8\x66\xb9\xbd\x5e\xc7\xf3\x82\x31\xf6\x33\x00\x00\xff\xff\xd6\xcd\xd8\x11\x47\x03\x00\x00" func runtimeSyntaxYamlYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxYamlYaml, "runtime/syntax/yaml.yaml", ) } func runtimeSyntaxYamlYaml() (*asset, error) { bytes, err := runtimeSyntaxYamlYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/yaml.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxYumHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\x2c\xcd\xe5\x8a\xd1\x2b\x4a\x2d\xc8\x57\xa9\xa9\x2c\xcd\xd5\xd3\x8a\xd1\x4b\xce\xcf\x4b\x53\xe1\xe2\x02\x04\x00\x00\xff\xff\x60\xc7\x8f\x6f\x1a\x00\x00\x00" func runtimeSyntaxYumHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxYumHdr, "runtime/syntax/yum.hdr", ) } func runtimeSyntaxYumHdr() (*asset, error) { bytes, err := runtimeSyntaxYumHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/yum.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxYumYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\x4d\x4b\xc4\x30\x10\x40\xcf\x9b\x5f\x31\xc4\x1e\xfa\x41\x83\x57\x03\x8b\x07\xcf\x1e\x3d\x48\x92\x42\x4c\xa7\x34\xd0\xa6\x25\x1f\x4a\x31\x3f\x5e\x5a\x57\x5d\x70\x6f\x03\xf3\x1e\x6f\x66\xb0\x13\xc6\x6d\x45\x0e\x5b\x9a\x09\xe9\x31\xa2\x89\x1c\x08\x00\xc0\xbe\x73\x7a\x46\x0e\x54\x4a\xe6\x71\x5d\x8a\xbc\xa5\x99\xd5\x52\x32\xb3\xb8\xa1\xa0\x84\xf8\x34\x61\xe0\x07\xde\x82\xed\xd1\x45\x3b\x58\xf4\x1c\x68\x27\x04\x0f\xab\x36\xc8\x95\xaa\x45\x77\x56\xf5\x99\x5e\x38\xb3\xb8\x10\xb5\x8b\x2c\xac\x68\xac\x9e\x9e\x46\xfd\xcf\x90\x52\xec\x21\x55\xfc\x48\x21\xea\x88\x33\xba\x78\x9c\x53\x94\x1e\x27\xd4\x01\xdf\xd1\x67\xed\xcd\x98\xdf\x74\xc0\x63\x48\xc9\xf6\xf9\xf5\xe5\x59\xdc\xb7\x0f\xaa\xfa\x6b\xce\x17\xb9\xec\xf2\x55\xa8\xba\x2b\x45\xf7\xa9\x58\x5d\x3d\xfe\xa6\xac\xdb\x1f\x69\xcd\xa8\x3d\xfb\x18\x6d\xc4\x6f\x18\xe8\x95\xd7\xdc\xa2\x39\xd0\x53\x03\x4d\x86\xe6\xd4\x50\xf2\x15\x00\x00\xff\xff\x86\x2c\x1d\xe7\x5c\x01\x00\x00" func runtimeSyntaxYumYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxYumYaml, "runtime/syntax/yum.yaml", ) } func runtimeSyntaxYumYaml() (*asset, error) { bytes, err := runtimeSyntaxYumYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/yum.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxZigHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xca\x4c\xe7\x8a\xd1\xab\xca\x4c\x57\xe1\xe2\x02\x04\x00\x00\xff\xff\x11\x2d\x3b\x18\x0c\x00\x00\x00" func runtimeSyntaxZigHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxZigHdr, "runtime/syntax/zig.hdr", ) } func runtimeSyntaxZigHdr() (*asset, error) { bytes, err := runtimeSyntaxZigHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/zig.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxZigYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x55\xdd\x6e\xe3\x36\x13\xbd\xf7\x53\xf0\xd3\xb7\x6d\xec\x1a\xf6\x3a\x69\xb1\x6d\xdd\x9f\x74\xb1\xed\x02\xbd\x28\xb2\x28\xf6\x22\xa8\xe5\x1a\x14\x35\xb2\x89\x50\x43\x61\x38\xb4\x63\x67\xd2\x67\x2f\x28\xcb\x3f\x49\x17\x8b\xa2\x37\xab\x0b\x99\x3c\x9c\x33\x3c\x73\x86\xb4\x2a\xeb\x80\xb7\x0d\x4c\xd5\xce\x2e\x7b\xbd\x12\x18\x0c\x4f\x7b\x4a\x29\x95\x96\x50\xd7\x30\x55\x59\x9e\x8f\x77\x76\xf9\x22\xeb\xf5\x28\x3a\x08\xfb\x75\xa5\xfe\xaf\x7e\x87\x00\xb4\x86\x52\x6d\x3c\x95\xa1\x85\x47\x2a\xb0\x66\xa8\x01\xb9\x65\x16\x7d\xed\xec\x12\x45\x3b\xe7\x37\x3b\x20\x2f\x1a\x4b\xd1\xa1\x16\x1d\xb6\x68\x44\x6f\xb4\x65\x29\x08\xf4\x9d\x18\xed\x9c\xf1\xb8\x16\xa3\xd9\xac\xc4\xf8\xba\x61\x5b\x83\x18\x8f\x81\xd3\x9b\x2d\x46\x90\x12\x2a\x20\x01\x17\x40\x80\xa8\x9b\x11\x79\x12\xb8\x6f\x3c\xb1\xc0\x3d\x03\xa1\x54\x28\x95\x27\xb1\x95\x58\x74\x16\x41\xd0\x6b\x67\x75\x10\xf4\x47\x20\xc4\xd0\x00\x96\xe2\x49\x3c\xb5\x29\x1b\x6d\xee\xa0\x94\x26\x16\x42\x10\x62\x0d\x42\xc0\x91\x50\x9c\xc5\xbb\x00\x86\xad\x47\x39\xd0\xc2\xc6\x26\xa5\x0c\x81\x85\x57\x04\xba\x74\xde\x68\x27\x4c\x5b\x89\x48\xa0\xcd\x4a\x17\x0e\x24\x06\x8b\xcb\xe4\x66\x68\xb4\x01\x59\x6b\x92\xb5\x77\x9a\xad\x03\xd9\xac\xac\x83\x41\x9e\x17\xd9\xd1\xd7\x22\x5a\xc7\x16\x55\x15\xb1\xdd\xef\x68\x6d\x03\xc6\x6a\x37\x55\xd9\x4f\x33\x3d\xda\xbd\x1e\xfd\xb1\x98\x0f\x4f\xb4\x77\x64\x6b\xcb\x76\x0d\xea\xfd\xb6\x81\x03\x69\xdf\xdf\x7d\x2b\x70\x5b\x91\xae\x41\x34\x6e\x13\x9c\x7e\xf7\xce\x15\xde\xbb\xa3\xe1\x0b\x8b\x7c\x9a\x54\xce\x6b\x16\xc0\x58\x4b\xd5\xbf\x7c\x25\x5f\x5e\xc9\xab\xaf\xe4\xf2\xea\x9b\x81\xd8\x60\x77\xc9\xc5\xce\xa1\xc0\x14\x0d\x4b\x9b\x39\x62\xf2\x29\xb6\x01\x6b\x6f\xcb\x53\x81\x4f\x14\x99\x45\xbc\xee\x87\x55\xea\x5a\xda\xd4\x79\x5c\xf6\xd3\x6b\x70\x3d\x10\xb3\x48\xa3\xd2\xc7\xe4\xa0\x59\x7c\x24\x4b\xdf\x4a\x1c\xcc\x26\xa3\x6f\xe7\xc3\x7d\x44\xaf\x73\xe4\xa6\x01\xd2\xec\xe9\x68\xe0\xb6\x2e\xbc\x1b\xfb\x0e\x9e\xaa\x6c\x36\xfa\x9f\xfc\xf0\xdd\x67\xe3\xe1\x9f\x5f\x4c\x3f\xbf\xfe\xfe\xc7\xbf\xe6\x27\xf6\x3b\x4d\x80\xbc\x82\x60\x9f\xf1\x0b\x4a\x87\x84\x43\xe2\xf7\x07\x0f\x8f\x73\xc9\xf3\x99\xe4\xf9\x19\xf7\x4d\x3a\xb3\x1a\xf9\xc0\x34\xdd\xbc\x53\x8c\xd1\x39\x89\x58\x42\x65\x11\x9e\x94\x75\x08\x1c\x63\xac\x0b\xa0\x2e\x7e\x52\xcc\x26\x97\x8b\xf9\x50\x26\x7e\x36\x19\x7d\x9d\x46\xa9\xde\x16\xb9\x9f\xe9\x51\xf5\x7a\xf4\x76\x3f\xff\x60\xae\xd4\xde\x2e\x13\x53\x04\xa9\xb4\x0b\x70\x66\xd5\x59\x68\x60\xb2\xb8\x3c\xdc\x71\x95\xae\x33\xb5\xaa\xb3\xec\x88\x01\x96\xcf\x90\x70\x67\x9b\x76\x83\x3c\x1f\x9f\xd0\x27\x7f\x17\xfb\xe7\x7c\xa7\xfd\x69\x7e\xb3\xd2\xd4\x51\xfb\x33\x24\x4e\x83\x8b\x3c\x9b\xcb\x59\x5d\xf3\x87\xab\x47\x89\x0f\x67\xc0\xf0\x71\xf0\xef\xb5\x5f\x3c\x97\x7e\xf1\x9f\x94\xb7\x57\x65\xaa\xb2\xf1\x78\x98\x7d\xfa\xa2\xf2\xee\x79\x5e\xdb\x8b\x4f\xdd\x95\x94\xf0\x58\x44\xdd\x7e\x09\xfe\x21\xfe\xe5\xcb\x8f\xc8\xfe\xa0\x40\xf6\xa5\x9f\xaa\xac\xff\xfe\xe6\xe7\x1b\xb9\xbd\xbd\x95\xb7\xbf\xde\xfe\xf6\xcb\x60\x7a\x9d\xf5\xfe\x0e\x00\x00\xff\xff\x60\x17\xdb\xef\xc6\x06\x00\x00" func runtimeSyntaxZigYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxZigYaml, "runtime/syntax/zig.yaml", ) } func runtimeSyntaxZigYaml() (*asset, error) { bytes, err := runtimeSyntaxZigYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/zig.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxZscriptHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\x2a\x4e\x2e\xca\x2c\x28\xe1\xd2\xb0\xcf\xd4\x8c\xd1\xab\xd2\x48\xae\x29\x4e\xd6\x54\xe1\xe2\x02\x04\x00\x00\xff\xff\xdb\xfd\x62\x96\x18\x00\x00\x00" func runtimeSyntaxZscriptHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxZscriptHdr, "runtime/syntax/zscript.hdr", ) } func runtimeSyntaxZscriptHdr() (*asset, error) { bytes, err := runtimeSyntaxZscriptHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/zscript.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxZscriptYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x55\x6d\x8f\x1b\x35\x10\xfe\x9e\x5f\x31\xe4\x0a\x97\x17\x25\xd7\x42\x55\x41\x04\x9c\xaa\x96\x93\x2a\x0e\x8a\x74\x05\x9d\xc8\xae\x90\xd7\x9e\x24\xe6\x1c\xdb\x8c\x67\x73\x97\x76\xca\x6f\x47\xde\x6c\x5e\x9a\x6b\x69\xc5\x37\xf6\x83\xd7\xf6\xce\xdb\x33\x7e\x1e\xef\xcc\x3a\xe4\x75\xc4\x09\xbc\x4e\x9a\x6c\xe4\xce\x09\x5c\x86\x90\xd0\xad\xa1\x52\x09\x0d\x04\x0f\xbc\x40\xd0\x69\xa1\x28\x8e\xd7\x6a\xe9\xc0\xe0\xcc\x7a\xcb\x36\xf8\xce\x09\xf4\xce\x6d\x3f\x1b\xe1\x0a\x69\xcd\x0b\xeb\xe7\x50\xa1\x56\x75\x42\xf8\xfd\xaa\x09\x09\x36\xf9\x53\x06\xad\x12\x42\x42\x9f\x2c\xdb\x15\x76\x3a\x06\x19\x35\x4f\x3a\x00\x00\xb9\x0c\xaf\x96\x38\x81\x6e\x8e\x57\x14\xe3\xd7\x3d\x2d\x49\xf7\x1f\x74\x3b\x1d\xaa\x1d\xa6\x49\xa7\x31\x3c\xd9\x05\x0d\xde\xad\x61\xa1\x12\x04\x8f\x10\x09\x23\x05\x8d\x29\x05\x02\x63\x09\x75\xce\x01\xca\x1b\x50\x40\xf8\x57\x6d\x09\x0d\xa0\x9f\x5b\x8f\xb0\x42\x4a\x36\x78\x30\xa8\x9d\x22\xd5\xe0\xc8\xb1\x47\xdb\x30\x6d\x15\x27\xd6\x6b\x57\x1b\xec\xbe\xf7\x6b\x1b\xa5\xbb\xad\xeb\x8a\x15\x23\x38\x55\xa1\x4b\xd0\xeb\xce\x03\x87\x2e\xdc\x06\x32\x10\x56\x48\x64\x8d\x41\x0f\xd5\x1a\xd2\xc6\x2e\xcc\xad\x86\x8c\x0c\x2a\x74\xe1\xb6\xdf\xe6\x48\xeb\x65\x15\xdc\x98\xd5\xbc\x4d\x33\x55\xa3\xd7\x0f\x47\xdf\x8c\xcb\xe1\xa4\xfb\x21\x9b\x9c\x0b\x5a\xc3\x72\x38\x2d\x8a\x61\x9e\x0c\x76\xa5\x3d\x73\x2a\x25\x4c\xad\xbb\x35\xe8\xd9\xce\x2c\xd2\x58\xe7\x0f\x6d\x90\x66\x0e\xc3\x36\xcc\x1f\xe5\x10\x06\xbd\xde\xa4\xbf\xdb\x19\x97\xc3\xfe\xf9\x2e\xe4\x45\xed\x75\x6e\x5c\x82\x5e\x88\xe8\x21\x2a\x42\x7f\x8c\x74\x53\x67\x45\x4a\xdf\x20\xa7\x2d\xda\x0d\x37\x22\x92\x03\xc2\x39\xde\x81\x8a\x8d\x37\xbb\x35\x98\x80\x0d\x57\x52\x1d\x63\x20\x86\x18\x52\x73\x90\x2e\x84\x1b\xb5\x40\x65\xfa\xf7\x40\x6c\xfb\x54\x14\xe3\x72\xb0\xaf\x7e\x0a\xe5\x60\xda\x2b\x87\xbb\x8a\x7f\x53\x64\x55\xe5\x10\x32\xdd\xb7\xbd\xd8\x50\xbf\xe5\x5c\xd5\x53\x9a\x03\x49\xa8\xfe\x44\xcd\xb2\xc2\xbc\xfa\xb2\x7d\x7f\x25\x99\x9f\x92\x98\xac\x9f\x8b\x0e\x2e\x90\xa4\x50\x7b\x23\xab\x60\x8d\x98\x50\x57\x0e\xa5\x0a\xc1\x89\xf5\x2c\x33\x17\x54\x3b\x3e\x79\x2c\xb5\xf5\xfc\x75\x33\x3e\x7a\xd2\xbc\xa4\xd9\xd8\xac\x5f\xe1\x1d\xd7\x84\x2f\x9e\xcb\x55\x24\xcb\x79\xf2\x94\x48\xad\x9b\xc0\x91\x49\xd2\x22\x10\x8b\x6a\xfa\x2d\x0d\x7d\x36\x63\xc3\xb5\x5c\xf7\x0e\xe3\x8f\xb8\xce\x8c\xdb\xa2\x6b\xac\x96\xe8\xf9\x00\x62\x73\xcc\x62\x70\xa6\x6a\xc7\x12\xc9\xae\xb6\xf1\xac\x16\xaf\x72\xb7\x85\x90\x6b\xf2\x62\x67\x82\x2e\xa1\xcc\x02\xc9\xed\xc2\x3a\x14\x13\xc4\x60\x24\xd4\x8a\xd1\x88\xaf\x9d\x13\x42\x65\xb2\x14\x85\xa9\x46\x99\xa9\xec\x90\x98\x6a\xcd\x82\x77\x8c\xde\x88\x76\xa8\x28\xe9\x10\x51\x56\x8a\x14\xcd\xa5\xb6\x12\x5d\x06\x68\x89\x6b\xe5\xb6\xef\x8d\xcd\x12\x59\xc9\x2f\x14\x22\x12\xaf\xc5\x7a\x09\x35\x6f\xf0\x26\x69\xf9\x85\x92\xea\x88\x24\x36\x89\x43\x16\x1d\x7c\x62\x21\x8c\x4e\x69\x4c\x12\x29\xe4\x8b\x05\x8d\x24\x74\x33\x51\x55\x62\x52\xb9\x1c\x5f\x2f\x25\xdd\x5a\xd6\x0b\xc9\x77\xd1\x3b\x9d\xbb\x3a\x50\xe5\xcd\x51\x17\x23\x6a\xab\xdc\x41\x0f\xb3\xde\xc4\x85\x10\x25\x71\x88\x52\x11\xaa\x9b\x5c\x05\x5b\xdf\xf4\xc0\xbe\x7b\x2a\x57\x8d\x0e\xd2\xbb\xea\xcd\xf8\x14\x87\x4c\xdf\x69\x51\x8c\x86\x67\x83\xef\xbe\xfd\xfe\x7c\xf2\xd9\xdf\x9f\x7f\x21\xe5\x91\xd2\xb7\x0a\xca\xb6\xbd\xfe\x9b\xb7\xa5\x14\xc5\x54\x8a\xa2\xdc\x2b\x3c\xb7\x40\x79\xde\x26\xd1\xed\x7a\x9c\x09\xd9\x56\xde\xcb\xa5\xef\x4f\x29\x97\x28\x3f\xff\x7a\x79\xd9\xef\x1e\x3b\xf9\x7a\x59\xed\x84\x95\xbd\xa6\xf9\x3e\x99\x66\x7d\x35\x17\x4b\x7f\x78\xde\xe0\xfb\x98\xdb\xc3\xbb\xe9\xd3\xd1\x85\x1a\xcd\x36\x92\xec\x7f\xa2\x57\x35\x7d\x38\x7a\x94\xed\xa7\x17\x97\xe5\xde\xe7\xe4\xdf\x9c\xee\x97\x28\x47\xd9\xe5\x7d\x71\x77\xa7\x9f\x55\x7d\xaf\x79\x1b\xb1\x6f\xfe\x50\xf9\x49\xac\x28\x6b\xa9\xe8\x76\x77\x7b\xe8\xcd\xd1\x4e\xba\xb1\x31\x6f\x15\x45\x31\xde\xef\xb6\x3f\x31\x38\x78\x0e\x33\x6d\x38\xf6\x6c\xa1\xa8\x75\xed\x4d\x2b\xf6\x33\x2a\xe5\x54\x8a\xa2\xe8\xe6\xa1\xe8\x77\x3f\xdd\xbf\xde\x83\x2f\xdf\x3c\x7e\xdb\x42\xfd\x04\x70\xa7\xc7\xd8\x4e\xff\x1f\xd0\xb2\x08\x96\xf9\xb2\xdb\x1f\x63\xb3\xbc\x8f\xf0\xec\xec\x18\xe2\x83\x8f\x80\xe1\x60\x42\x26\xdb\xab\x97\xcf\x5f\xca\xf5\xf5\xb5\x5c\xbc\xb8\xfe\xe9\x87\xfe\xe4\xfc\xa0\xad\x1f\x4a\x56\x14\x83\x7b\x6c\x29\x06\x67\xff\x3d\xe3\x3f\x01\x00\x00\xff\xff\xe6\xa0\xde\xdb\xb3\x09\x00\x00" func runtimeSyntaxZscriptYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxZscriptYaml, "runtime/syntax/zscript.yaml", ) } func runtimeSyntaxZscriptYaml() (*asset, error) { bytes, err := runtimeSyntaxZscriptYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/zscript.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxZshHdr = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\x2a\xce\xe0\xd2\x88\xd1\xab\x2a\xce\x50\xa9\x89\xd1\xb3\xd7\xa8\x2a\xce\x48\xcd\x2b\xab\xa9\x2a\x28\xca\x4f\xcb\xcc\x49\xad\xa9\x2a\xce\x28\x4a\xae\xa9\xca\xc9\x4f\xcf\xcc\x03\x53\xf9\xa5\x25\x9a\x2a\x9a\x5c\x71\xca\x8a\x7a\x5a\xfa\x1a\xa9\x79\x65\x0a\xda\x9a\xf6\x55\xc5\x19\x1a\x0a\x35\x2a\x9a\x5c\x80\x00\x00\x00\xff\xff\xe7\xaa\xc8\xe4\x4f\x00\x00\x00" func runtimeSyntaxZshHdrBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxZshHdr, "runtime/syntax/zsh.hdr", ) } func runtimeSyntaxZshHdr() (*asset, error) { bytes, err := runtimeSyntaxZshHdrBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/zsh.hdr", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _runtimeSyntaxZshYaml = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x55\x5b\x73\xdb\xbc\x11\x7d\xf7\xaf\x60\x64\x4f\x43\xc6\x95\x9b\xa4\x49\xa6\x75\x2f\x6a\x9b\x99\x4e\x1f\x3a\x7d\xe9\x4c\x1f\x62\x38\x2d\x04\x2c\x05\x84\x20\xc0\x60\x17\x96\xa5\x9c\xfc\xf7\x0e\x28\xdf\x3e\x25\x99\xef\xd3\x88\x04\x71\xd9\xb3\x8b\x83\x3d\x8b\xde\x07\x92\xdd\x44\x97\xcd\x9e\xdd\xc9\x89\x25\x21\x23\x97\x27\x4d\xd3\x34\x75\x2a\xea\x91\x2e\x9b\x45\xab\xd4\xc5\x9e\xdd\x19\x94\xba\x58\xb5\x7b\x76\x14\x6f\xb0\x9f\x72\xaa\x6b\xb0\x67\x97\x0d\xf6\x21\x6d\x7c\x9c\x9b\x54\xa4\x3b\xeb\x16\x33\x8a\x23\x6d\x29\x5f\x36\x8b\x8f\xa7\xcf\x2e\x5e\xfc\xa6\xa5\x78\xd3\x9c\x77\xab\x3d\xbb\xb6\x41\x5d\x74\x92\x4b\x20\x3e\xb8\x3c\x3d\x6d\xfe\x55\xc6\x35\x65\x9e\xbb\xcb\xc6\xa4\xc8\xa2\xa3\x5c\xc4\x79\xf8\xb2\x59\x28\xb5\xbe\x7a\xb9\xfc\xfd\xf5\xb9\x52\xeb\xc5\xc9\xbc\x6c\xb6\x7b\x9f\xa2\xf5\xe2\x53\xd4\x81\x1b\x1d\x6d\x35\x95\x9c\x42\xd3\x87\xb4\xbd\x43\x63\xd1\x42\x23\x45\x39\xe0\xb4\x3a\x6c\xf5\x8e\xb1\xce\xa4\x07\xac\x77\x04\xa3\x99\x50\x0d\x7d\x2c\x04\xeb\x39\x6d\x23\x6c\x82\x4d\x91\x40\xc1\xf7\xa0\xc0\x04\x62\x6d\x40\xb7\x5e\xd0\x7b\xf4\x29\xa3\x2f\xd1\x54\xdf\xf0\x3d\x7c\x44\x48\x46\x07\x64\xd2\x16\x99\xa4\xe4\x08\xa6\x40\x46\xc0\xce\xf7\x02\x71\x14\x21\x7e\x24\x94\x28\x3e\x60\xeb\x7c\xa0\xee\x71\x3f\x3f\x0d\xb4\x55\xea\x0b\x94\xfa\x0a\xa5\x5a\x28\xd5\x41\xa9\x3f\x40\xa9\x6b\x28\x75\x85\xff\x41\x29\xa5\xa0\xd4\x19\xfe\x88\x3f\xe3\x19\xfe\x84\x5f\x41\x29\xdc\x91\x7f\xcc\x4c\xd3\x07\xbd\xb9\xe7\x96\x27\x32\x5e\x87\xcb\x66\xb1\xbc\xfa\xa7\xa5\x7e\x93\xcb\xf6\xf6\x7a\x0e\xe3\x9b\x05\x2d\x7d\x46\x24\x6c\x04\x41\xb0\x21\x04\x02\x23\x62\xdf\x1d\x9d\xc2\xdf\x34\xbb\xa5\x8f\x8e\xb2\x17\xb2\x3f\xa0\xbd\x2d\xb1\x5b\xe9\xe0\x35\x63\xed\xa3\x1d\x68\x87\x75\xf1\x41\x7c\x84\xb1\xb0\x64\x82\xce\x04\xba\xd1\x01\x74\x4b\x95\xe9\x29\x65\xc1\xa7\xb4\x66\x04\x12\x4c\x69\xb2\x98\x0a\x3b\x0b\x26\x01\xa7\x92\x0d\xa1\x66\x71\xed\x96\x51\xf3\x80\x12\x99\xa4\x7b\xd8\xcc\x1c\xdc\x87\x7f\xff\x63\x39\xef\xa9\xf7\xe6\x2e\xb4\x43\xea\x1f\x92\xc1\xda\xe5\x9e\xdd\xd2\xa5\x34\x40\x17\x49\x21\x69\x0b\xe3\xac\xcf\x30\x69\x9c\x7c\xf4\x02\xeb\x33\xa3\xb5\x9e\x41\xb1\xd3\xeb\x40\x20\xe3\x92\x18\xd0\x58\x82\x16\xc2\x94\x7d\x14\x4c\x39\x8d\x93\xb4\xd5\xa4\x5b\x61\xde\x2f\x93\xa4\x49\xb0\xaf\x7a\x19\x93\x9d\xc1\xf7\x2c\xbb\x40\xd8\x3a\x8a\x86\x8e\xa9\x7c\x9f\xc6\x31\xc5\x26\xf8\x58\x6e\x1b\x93\xc6\x51\x47\xcb\x3f\x62\x74\x03\xbf\xe9\x56\x7a\x3b\xa0\xf7\xd1\x42\xa9\xed\x97\x97\xbf\x7e\xf3\x75\x93\x69\xc2\xe0\x43\x98\x5f\x3a\x84\x87\x99\x40\xcc\x18\xf5\x40\x98\xe6\x79\x26\x0b\xd1\xf9\xdb\x20\x32\x15\xf1\x81\x7f\x2e\x82\xb5\x66\x7a\xf7\x06\xb5\xa9\x35\x03\x46\x0b\x8c\x33\x29\xc2\xb8\x4d\x9e\x60\xdc\x98\x2a\x9b\x55\x50\xc6\xe5\x94\x04\x66\xe0\x32\x56\x6a\x47\x98\x09\x86\xa7\xe0\x05\xa6\x08\x6c\x25\xd2\x5a\xd8\xbe\xf2\x5d\x1f\x93\x42\xca\x5c\xbf\x66\x70\x5b\x66\xda\x51\xab\x10\xdd\x4e\x3a\xda\xda\x64\xf4\xda\x48\x55\xa3\xae\x22\xed\x47\x41\x9f\x82\x45\xad\x40\x70\x89\xc5\x5b\xd4\x7f\xad\x28\x21\xe0\x53\xaa\x4a\xf5\x71\x40\xa8\x8a\xdd\xcc\xc8\x81\x31\xda\xb7\x35\xae\x71\xa8\xbe\xc7\xa1\xf7\x7d\xc2\x38\xc4\x64\x31\x0e\x42\xe3\x84\xf1\x06\xd1\x1b\x42\x0c\x88\xc9\x95\x09\x71\xca\xc9\x20\x96\xb1\xba\x4c\x16\x93\xe6\x9a\x09\x5a\x9c\x71\x03\x26\x1f\x87\x1d\xa6\x7c\x48\x8d\x1a\xf2\xfc\xd1\x63\x92\x5b\x4c\x5b\x3b\xd7\x89\x39\x8e\x4c\x3a\x54\x2b\xe4\x11\x79\xac\xee\x73\x89\x95\x42\xa6\xcf\x68\xd9\xe9\x57\x60\xa7\x5f\xbf\x7e\x33\x37\x6f\xdf\xd5\xe6\xb7\xbf\x9b\x7b\x6f\x5f\xbd\xee\x6a\xd4\xec\x32\x59\xb0\x2b\x3d\x38\x10\x4d\xe0\xaa\x9c\x03\xb5\xf5\xc8\xc0\x62\xd7\x75\x52\x64\x87\xd9\x60\x17\x0d\x44\xd7\xc7\x07\x08\x11\x84\x58\xe6\xea\x94\x8a\x40\x52\x31\x0e\x92\x21\xb9\x50\x7d\x45\x53\x0f\x47\x66\xd8\x8a\x51\x66\xda\x4a\xbc\x3b\x86\x12\xfd\x67\x94\x38\x6f\xa7\x30\x65\xc6\x4d\xdd\xc7\xd6\x60\xeb\x52\x7d\xf4\xe8\xb1\x23\x3e\xce\xb3\xbf\xdf\x15\xd0\xc6\x52\x5f\x55\xe3\x53\xbc\x4b\x34\x6f\x29\x8a\xef\xfd\xe1\x0e\x51\x8a\xcf\xdb\xfb\x6a\x5b\x3b\x5d\xbd\x0c\xfe\xba\xfc\xf0\xdf\x7a\x21\xf0\xb9\x52\xad\x52\xdd\xa2\x39\x6d\x5a\xdf\x3d\xc1\xff\x8f\xce\xbe\xca\x95\xbf\x87\xaa\xd4\x99\x52\x5f\x56\xf7\x48\xcf\xfe\x72\x7a\xf6\x62\xb5\xac\x80\x5f\x57\x8b\xe6\xf4\x01\xe9\xc9\x75\xc4\x92\x7d\xdc\x5c\xde\x39\x68\xaa\x1c\xf2\x2c\x85\xc5\xe2\x61\x8c\xa2\x3d\x1a\xe1\xc1\x4f\xb3\x3f\xa5\x2e\x1e\x47\x9f\xdc\x7f\xf7\xbf\xa7\x9e\x0e\x45\xf8\xbd\xd3\xf9\xd1\xf4\x97\x86\xf3\xfc\x38\x9a\xe7\xc7\x6e\x9b\xab\xeb\x47\xb4\x71\x16\xf4\x37\x28\xed\x47\x28\xc5\xdd\xe9\x31\xd8\xd9\x77\xc1\xfe\x1f\x00\x00\xff\xff\xa3\x62\x0b\x0e\x52\x08\x00\x00" func runtimeSyntaxZshYamlBytes() ([]byte, error) { return bindataRead( _runtimeSyntaxZshYaml, "runtime/syntax/zsh.yaml", ) } func runtimeSyntaxZshYaml() (*asset, error) { bytes, err := runtimeSyntaxZshYamlBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "runtime/syntax/zsh.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } // Asset loads and returns the asset for the given name. // It returns an error if the asset could not be found or // could not be loaded. func Asset(name string) ([]byte, error) { cannonicalName := strings.Replace(name, "\\", "/", -1) if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) } return a.bytes, nil } return nil, fmt.Errorf("Asset %s not found", name) } // MustAsset is like Asset but panics when Asset would return an error. // It simplifies safe initialization of global variables. func MustAsset(name string) []byte { a, err := Asset(name) if err != nil { panic("asset: Asset(" + name + "): " + err.Error()) } return a } // AssetInfo loads and returns the asset info for the given name. // It returns an error if the asset could not be found or // could not be loaded. func AssetInfo(name string) (os.FileInfo, error) { cannonicalName := strings.Replace(name, "\\", "/", -1) if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) } return a.info, nil } return nil, fmt.Errorf("AssetInfo %s not found", name) } // AssetNames returns the names of the assets. func AssetNames() []string { names := make([]string, 0, len(_bindata)) for name := range _bindata { names = append(names, name) } return names } // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ "runtime/README.md": runtimeReadmeMd, "runtime/colorschemes/atom-dark.micro": runtimeColorschemesAtomDarkMicro, "runtime/colorschemes/bubblegum.micro": runtimeColorschemesBubblegumMicro, "runtime/colorschemes/cmc-16.micro": runtimeColorschemesCmc16Micro, "runtime/colorschemes/cmc-tc.micro": runtimeColorschemesCmcTcMicro, "runtime/colorschemes/darcula.micro": runtimeColorschemesDarculaMicro, "runtime/colorschemes/default.micro": runtimeColorschemesDefaultMicro, "runtime/colorschemes/dracula-tc.micro": runtimeColorschemesDraculaTcMicro, "runtime/colorschemes/dukedark-tc.micro": runtimeColorschemesDukedarkTcMicro, "runtime/colorschemes/dukelight-tc.micro": runtimeColorschemesDukelightTcMicro, "runtime/colorschemes/dukeubuntu-tc.micro": runtimeColorschemesDukeubuntuTcMicro, "runtime/colorschemes/geany.micro": runtimeColorschemesGeanyMicro, "runtime/colorschemes/gotham.micro": runtimeColorschemesGothamMicro, "runtime/colorschemes/gruvbox-tc.micro": runtimeColorschemesGruvboxTcMicro, "runtime/colorschemes/gruvbox.micro": runtimeColorschemesGruvboxMicro, "runtime/colorschemes/material-tc.micro": runtimeColorschemesMaterialTcMicro, "runtime/colorschemes/monokai-dark.micro": runtimeColorschemesMonokaiDarkMicro, "runtime/colorschemes/monokai.micro": runtimeColorschemesMonokaiMicro, "runtime/colorschemes/one-dark.micro": runtimeColorschemesOneDarkMicro, "runtime/colorschemes/railscast.micro": runtimeColorschemesRailscastMicro, "runtime/colorschemes/simple.micro": runtimeColorschemesSimpleMicro, "runtime/colorschemes/solarized-tc.micro": runtimeColorschemesSolarizedTcMicro, "runtime/colorschemes/solarized.micro": runtimeColorschemesSolarizedMicro, "runtime/colorschemes/sunny-day.micro": runtimeColorschemesSunnyDayMicro, "runtime/colorschemes/twilight.micro": runtimeColorschemesTwilightMicro, "runtime/colorschemes/zenburn.micro": runtimeColorschemesZenburnMicro, "runtime/help/colors.md": runtimeHelpColorsMd, "runtime/help/commands.md": runtimeHelpCommandsMd, "runtime/help/copypaste.md": runtimeHelpCopypasteMd, "runtime/help/defaultkeys.md": runtimeHelpDefaultkeysMd, "runtime/help/help.md": runtimeHelpHelpMd, "runtime/help/keybindings.md": runtimeHelpKeybindingsMd, "runtime/help/options.md": runtimeHelpOptionsMd, "runtime/help/plugins.md": runtimeHelpPluginsMd, "runtime/help/tutorial.md": runtimeHelpTutorialMd, "runtime/plugins/autoclose/autoclose.lua": runtimePluginsAutocloseAutocloseLua, "runtime/plugins/comment/comment.lua": runtimePluginsCommentCommentLua, "runtime/plugins/comment/help/comment.md": runtimePluginsCommentHelpCommentMd, "runtime/plugins/diff/diff.lua": runtimePluginsDiffDiffLua, "runtime/plugins/ftoptions/ftoptions.lua": runtimePluginsFtoptionsFtoptionsLua, "runtime/plugins/linter/help/linter.md": runtimePluginsLinterHelpLinterMd, "runtime/plugins/linter/linter.lua": runtimePluginsLinterLinterLua, "runtime/plugins/literate/README.md": runtimePluginsLiterateReadmeMd, "runtime/plugins/literate/literate.lua": runtimePluginsLiterateLiterateLua, "runtime/plugins/status/help/status.md": runtimePluginsStatusHelpStatusMd, "runtime/plugins/status/status.lua": runtimePluginsStatusStatusLua, "runtime/syntax/LICENSE": runtimeSyntaxLicense, "runtime/syntax/PowerShell.hdr": runtimeSyntaxPowershellHdr, "runtime/syntax/PowerShell.yaml": runtimeSyntaxPowershellYaml, "runtime/syntax/README.md": runtimeSyntaxReadmeMd, "runtime/syntax/ada.hdr": runtimeSyntaxAdaHdr, "runtime/syntax/ada.yaml": runtimeSyntaxAdaYaml, "runtime/syntax/apacheconf.hdr": runtimeSyntaxApacheconfHdr, "runtime/syntax/apacheconf.yaml": runtimeSyntaxApacheconfYaml, "runtime/syntax/arduino.hdr": runtimeSyntaxArduinoHdr, "runtime/syntax/arduino.yaml": runtimeSyntaxArduinoYaml, "runtime/syntax/asciidoc.hdr": runtimeSyntaxAsciidocHdr, "runtime/syntax/asciidoc.yaml": runtimeSyntaxAsciidocYaml, "runtime/syntax/asm.hdr": runtimeSyntaxAsmHdr, "runtime/syntax/asm.yaml": runtimeSyntaxAsmYaml, "runtime/syntax/ats.hdr": runtimeSyntaxAtsHdr, "runtime/syntax/ats.yaml": runtimeSyntaxAtsYaml, "runtime/syntax/awk.hdr": runtimeSyntaxAwkHdr, "runtime/syntax/awk.yaml": runtimeSyntaxAwkYaml, "runtime/syntax/bat.hdr": runtimeSyntaxBatHdr, "runtime/syntax/bat.yaml": runtimeSyntaxBatYaml, "runtime/syntax/c.hdr": runtimeSyntaxCHdr, "runtime/syntax/c.yaml": runtimeSyntaxCYaml, "runtime/syntax/caddyfile.hdr": runtimeSyntaxCaddyfileHdr, "runtime/syntax/caddyfile.yaml": runtimeSyntaxCaddyfileYaml, "runtime/syntax/clojure.hdr": runtimeSyntaxClojureHdr, "runtime/syntax/clojure.yaml": runtimeSyntaxClojureYaml, "runtime/syntax/cmake.hdr": runtimeSyntaxCmakeHdr, "runtime/syntax/cmake.yaml": runtimeSyntaxCmakeYaml, "runtime/syntax/coffeescript.hdr": runtimeSyntaxCoffeescriptHdr, "runtime/syntax/coffeescript.yaml": runtimeSyntaxCoffeescriptYaml, "runtime/syntax/colortest.hdr": runtimeSyntaxColortestHdr, "runtime/syntax/colortest.yaml": runtimeSyntaxColortestYaml, "runtime/syntax/conky.hdr": runtimeSyntaxConkyHdr, "runtime/syntax/conky.yaml": runtimeSyntaxConkyYaml, "runtime/syntax/cpp.hdr": runtimeSyntaxCppHdr, "runtime/syntax/cpp.yaml": runtimeSyntaxCppYaml, "runtime/syntax/crontab.hdr": runtimeSyntaxCrontabHdr, "runtime/syntax/crontab.yaml": runtimeSyntaxCrontabYaml, "runtime/syntax/crystal.hdr": runtimeSyntaxCrystalHdr, "runtime/syntax/crystal.yaml": runtimeSyntaxCrystalYaml, "runtime/syntax/csharp.hdr": runtimeSyntaxCsharpHdr, "runtime/syntax/csharp.yaml": runtimeSyntaxCsharpYaml, "runtime/syntax/css.hdr": runtimeSyntaxCssHdr, "runtime/syntax/css.yaml": runtimeSyntaxCssYaml, "runtime/syntax/csx.hdr": runtimeSyntaxCsxHdr, "runtime/syntax/csx.yaml": runtimeSyntaxCsxYaml, "runtime/syntax/cython.hdr": runtimeSyntaxCythonHdr, "runtime/syntax/cython.yaml": runtimeSyntaxCythonYaml, "runtime/syntax/d.hdr": runtimeSyntaxDHdr, "runtime/syntax/d.yaml": runtimeSyntaxDYaml, "runtime/syntax/dart.hdr": runtimeSyntaxDartHdr, "runtime/syntax/dart.yaml": runtimeSyntaxDartYaml, "runtime/syntax/dockerfile.hdr": runtimeSyntaxDockerfileHdr, "runtime/syntax/dockerfile.yaml": runtimeSyntaxDockerfileYaml, "runtime/syntax/dot.hdr": runtimeSyntaxDotHdr, "runtime/syntax/dot.yaml": runtimeSyntaxDotYaml, "runtime/syntax/elixir.hdr": runtimeSyntaxElixirHdr, "runtime/syntax/elixir.yaml": runtimeSyntaxElixirYaml, "runtime/syntax/elm.hdr": runtimeSyntaxElmHdr, "runtime/syntax/elm.yaml": runtimeSyntaxElmYaml, "runtime/syntax/erb.hdr": runtimeSyntaxErbHdr, "runtime/syntax/erb.yaml": runtimeSyntaxErbYaml, "runtime/syntax/erlang.hdr": runtimeSyntaxErlangHdr, "runtime/syntax/erlang.yaml": runtimeSyntaxErlangYaml, "runtime/syntax/fish.hdr": runtimeSyntaxFishHdr, "runtime/syntax/fish.yaml": runtimeSyntaxFishYaml, "runtime/syntax/forth.hdr": runtimeSyntaxForthHdr, "runtime/syntax/forth.yaml": runtimeSyntaxForthYaml, "runtime/syntax/fortran.hdr": runtimeSyntaxFortranHdr, "runtime/syntax/fortran.yaml": runtimeSyntaxFortranYaml, "runtime/syntax/fsharp.hdr": runtimeSyntaxFsharpHdr, "runtime/syntax/fsharp.yaml": runtimeSyntaxFsharpYaml, "runtime/syntax/gdscript.hdr": runtimeSyntaxGdscriptHdr, "runtime/syntax/gdscript.yaml": runtimeSyntaxGdscriptYaml, "runtime/syntax/gemini.hdr": runtimeSyntaxGeminiHdr, "runtime/syntax/gemini.yaml": runtimeSyntaxGeminiYaml, "runtime/syntax/gentoo-ebuild.hdr": runtimeSyntaxGentooEbuildHdr, "runtime/syntax/gentoo-ebuild.yaml": runtimeSyntaxGentooEbuildYaml, "runtime/syntax/gentoo-etc-portage.hdr": runtimeSyntaxGentooEtcPortageHdr, "runtime/syntax/gentoo-etc-portage.yaml": runtimeSyntaxGentooEtcPortageYaml, "runtime/syntax/git-commit.hdr": runtimeSyntaxGitCommitHdr, "runtime/syntax/git-commit.yaml": runtimeSyntaxGitCommitYaml, "runtime/syntax/git-config.hdr": runtimeSyntaxGitConfigHdr, "runtime/syntax/git-config.yaml": runtimeSyntaxGitConfigYaml, "runtime/syntax/git-rebase-todo.hdr": runtimeSyntaxGitRebaseTodoHdr, "runtime/syntax/git-rebase-todo.yaml": runtimeSyntaxGitRebaseTodoYaml, "runtime/syntax/glsl.hdr": runtimeSyntaxGlslHdr, "runtime/syntax/glsl.yaml": runtimeSyntaxGlslYaml, "runtime/syntax/go.hdr": runtimeSyntaxGoHdr, "runtime/syntax/go.yaml": runtimeSyntaxGoYaml, "runtime/syntax/godoc.hdr": runtimeSyntaxGodocHdr, "runtime/syntax/godoc.yaml": runtimeSyntaxGodocYaml, "runtime/syntax/golo.hdr": runtimeSyntaxGoloHdr, "runtime/syntax/golo.yaml": runtimeSyntaxGoloYaml, "runtime/syntax/graphql.hdr": runtimeSyntaxGraphqlHdr, "runtime/syntax/graphql.yaml": runtimeSyntaxGraphqlYaml, "runtime/syntax/groff.hdr": runtimeSyntaxGroffHdr, "runtime/syntax/groff.yaml": runtimeSyntaxGroffYaml, "runtime/syntax/groovy.hdr": runtimeSyntaxGroovyHdr, "runtime/syntax/groovy.yaml": runtimeSyntaxGroovyYaml, "runtime/syntax/haml.hdr": runtimeSyntaxHamlHdr, "runtime/syntax/haml.yaml": runtimeSyntaxHamlYaml, "runtime/syntax/haskell.hdr": runtimeSyntaxHaskellHdr, "runtime/syntax/haskell.yaml": runtimeSyntaxHaskellYaml, "runtime/syntax/html.hdr": runtimeSyntaxHtmlHdr, "runtime/syntax/html.yaml": runtimeSyntaxHtmlYaml, "runtime/syntax/html4.hdr": runtimeSyntaxHtml4Hdr, "runtime/syntax/html4.yaml": runtimeSyntaxHtml4Yaml, "runtime/syntax/html5.hdr": runtimeSyntaxHtml5Hdr, "runtime/syntax/html5.yaml": runtimeSyntaxHtml5Yaml, "runtime/syntax/ini.hdr": runtimeSyntaxIniHdr, "runtime/syntax/ini.yaml": runtimeSyntaxIniYaml, "runtime/syntax/inputrc.hdr": runtimeSyntaxInputrcHdr, "runtime/syntax/inputrc.yaml": runtimeSyntaxInputrcYaml, "runtime/syntax/java.hdr": runtimeSyntaxJavaHdr, "runtime/syntax/java.yaml": runtimeSyntaxJavaYaml, "runtime/syntax/javascript.hdr": runtimeSyntaxJavascriptHdr, "runtime/syntax/javascript.yaml": runtimeSyntaxJavascriptYaml, "runtime/syntax/jinja2.hdr": runtimeSyntaxJinja2Hdr, "runtime/syntax/jinja2.yaml": runtimeSyntaxJinja2Yaml, "runtime/syntax/json.hdr": runtimeSyntaxJsonHdr, "runtime/syntax/json.yaml": runtimeSyntaxJsonYaml, "runtime/syntax/jsonnet.hdr": runtimeSyntaxJsonnetHdr, "runtime/syntax/jsonnet.yaml": runtimeSyntaxJsonnetYaml, "runtime/syntax/julia.hdr": runtimeSyntaxJuliaHdr, "runtime/syntax/julia.yaml": runtimeSyntaxJuliaYaml, "runtime/syntax/keymap.hdr": runtimeSyntaxKeymapHdr, "runtime/syntax/keymap.yaml": runtimeSyntaxKeymapYaml, "runtime/syntax/kickstart.hdr": runtimeSyntaxKickstartHdr, "runtime/syntax/kickstart.yaml": runtimeSyntaxKickstartYaml, "runtime/syntax/kotlin.hdr": runtimeSyntaxKotlinHdr, "runtime/syntax/kotlin.yaml": runtimeSyntaxKotlinYaml, "runtime/syntax/ledger.hdr": runtimeSyntaxLedgerHdr, "runtime/syntax/ledger.yaml": runtimeSyntaxLedgerYaml, "runtime/syntax/lfe.hdr": runtimeSyntaxLfeHdr, "runtime/syntax/lfe.yaml": runtimeSyntaxLfeYaml, "runtime/syntax/lilypond.hdr": runtimeSyntaxLilypondHdr, "runtime/syntax/lilypond.yaml": runtimeSyntaxLilypondYaml, "runtime/syntax/lisp.hdr": runtimeSyntaxLispHdr, "runtime/syntax/lisp.yaml": runtimeSyntaxLispYaml, "runtime/syntax/lua.hdr": runtimeSyntaxLuaHdr, "runtime/syntax/lua.yaml": runtimeSyntaxLuaYaml, "runtime/syntax/mail.hdr": runtimeSyntaxMailHdr, "runtime/syntax/mail.yaml": runtimeSyntaxMailYaml, "runtime/syntax/make_headers.go": runtimeSyntaxMake_headersGo, "runtime/syntax/makefile.hdr": runtimeSyntaxMakefileHdr, "runtime/syntax/makefile.yaml": runtimeSyntaxMakefileYaml, "runtime/syntax/man.hdr": runtimeSyntaxManHdr, "runtime/syntax/man.yaml": runtimeSyntaxManYaml, "runtime/syntax/markdown.hdr": runtimeSyntaxMarkdownHdr, "runtime/syntax/markdown.yaml": runtimeSyntaxMarkdownYaml, "runtime/syntax/mc.hdr": runtimeSyntaxMcHdr, "runtime/syntax/mc.yaml": runtimeSyntaxMcYaml, "runtime/syntax/micro.hdr": runtimeSyntaxMicroHdr, "runtime/syntax/micro.yaml": runtimeSyntaxMicroYaml, "runtime/syntax/mpdconf.hdr": runtimeSyntaxMpdconfHdr, "runtime/syntax/mpdconf.yaml": runtimeSyntaxMpdconfYaml, "runtime/syntax/nanorc.hdr": runtimeSyntaxNanorcHdr, "runtime/syntax/nanorc.yaml": runtimeSyntaxNanorcYaml, "runtime/syntax/nginx.hdr": runtimeSyntaxNginxHdr, "runtime/syntax/nginx.yaml": runtimeSyntaxNginxYaml, "runtime/syntax/nim.hdr": runtimeSyntaxNimHdr, "runtime/syntax/nim.yaml": runtimeSyntaxNimYaml, "runtime/syntax/objc.hdr": runtimeSyntaxObjcHdr, "runtime/syntax/objc.yaml": runtimeSyntaxObjcYaml, "runtime/syntax/ocaml.hdr": runtimeSyntaxOcamlHdr, "runtime/syntax/ocaml.yaml": runtimeSyntaxOcamlYaml, "runtime/syntax/octave.hdr": runtimeSyntaxOctaveHdr, "runtime/syntax/octave.yaml": runtimeSyntaxOctaveYaml, "runtime/syntax/pascal.hdr": runtimeSyntaxPascalHdr, "runtime/syntax/pascal.yaml": runtimeSyntaxPascalYaml, "runtime/syntax/patch.hdr": runtimeSyntaxPatchHdr, "runtime/syntax/patch.yaml": runtimeSyntaxPatchYaml, "runtime/syntax/peg.hdr": runtimeSyntaxPegHdr, "runtime/syntax/peg.yaml": runtimeSyntaxPegYaml, "runtime/syntax/perl.hdr": runtimeSyntaxPerlHdr, "runtime/syntax/perl.yaml": runtimeSyntaxPerlYaml, "runtime/syntax/perl6.hdr": runtimeSyntaxPerl6Hdr, "runtime/syntax/perl6.yaml": runtimeSyntaxPerl6Yaml, "runtime/syntax/php.hdr": runtimeSyntaxPhpHdr, "runtime/syntax/php.yaml": runtimeSyntaxPhpYaml, "runtime/syntax/pkg-config.hdr": runtimeSyntaxPkgConfigHdr, "runtime/syntax/pkg-config.yaml": runtimeSyntaxPkgConfigYaml, "runtime/syntax/po.hdr": runtimeSyntaxPoHdr, "runtime/syntax/po.yaml": runtimeSyntaxPoYaml, "runtime/syntax/pony.hdr": runtimeSyntaxPonyHdr, "runtime/syntax/pony.yaml": runtimeSyntaxPonyYaml, "runtime/syntax/pov.hdr": runtimeSyntaxPovHdr, "runtime/syntax/pov.yaml": runtimeSyntaxPovYaml, "runtime/syntax/privoxy-action.hdr": runtimeSyntaxPrivoxyActionHdr, "runtime/syntax/privoxy-action.yaml": runtimeSyntaxPrivoxyActionYaml, "runtime/syntax/privoxy-config.hdr": runtimeSyntaxPrivoxyConfigHdr, "runtime/syntax/privoxy-config.yaml": runtimeSyntaxPrivoxyConfigYaml, "runtime/syntax/privoxy-filter.hdr": runtimeSyntaxPrivoxyFilterHdr, "runtime/syntax/privoxy-filter.yaml": runtimeSyntaxPrivoxyFilterYaml, "runtime/syntax/proto.hdr": runtimeSyntaxProtoHdr, "runtime/syntax/proto.yaml": runtimeSyntaxProtoYaml, "runtime/syntax/puppet.hdr": runtimeSyntaxPuppetHdr, "runtime/syntax/puppet.yaml": runtimeSyntaxPuppetYaml, "runtime/syntax/python2.hdr": runtimeSyntaxPython2Hdr, "runtime/syntax/python2.yaml": runtimeSyntaxPython2Yaml, "runtime/syntax/python3.hdr": runtimeSyntaxPython3Hdr, "runtime/syntax/python3.yaml": runtimeSyntaxPython3Yaml, "runtime/syntax/r.hdr": runtimeSyntaxRHdr, "runtime/syntax/r.yaml": runtimeSyntaxRYaml, "runtime/syntax/reST.hdr": runtimeSyntaxRestHdr, "runtime/syntax/reST.yaml": runtimeSyntaxRestYaml, "runtime/syntax/renpy.hdr": runtimeSyntaxRenpyHdr, "runtime/syntax/renpy.yaml": runtimeSyntaxRenpyYaml, "runtime/syntax/rpmspec.hdr": runtimeSyntaxRpmspecHdr, "runtime/syntax/rpmspec.yaml": runtimeSyntaxRpmspecYaml, "runtime/syntax/ruby.hdr": runtimeSyntaxRubyHdr, "runtime/syntax/ruby.yaml": runtimeSyntaxRubyYaml, "runtime/syntax/rust.hdr": runtimeSyntaxRustHdr, "runtime/syntax/rust.yaml": runtimeSyntaxRustYaml, "runtime/syntax/sage.hdr": runtimeSyntaxSageHdr, "runtime/syntax/sage.yaml": runtimeSyntaxSageYaml, "runtime/syntax/scala.hdr": runtimeSyntaxScalaHdr, "runtime/syntax/scala.yaml": runtimeSyntaxScalaYaml, "runtime/syntax/sed.hdr": runtimeSyntaxSedHdr, "runtime/syntax/sed.yaml": runtimeSyntaxSedYaml, "runtime/syntax/sh.hdr": runtimeSyntaxShHdr, "runtime/syntax/sh.yaml": runtimeSyntaxShYaml, "runtime/syntax/sls.hdr": runtimeSyntaxSlsHdr, "runtime/syntax/sls.yaml": runtimeSyntaxSlsYaml, "runtime/syntax/solidity.hdr": runtimeSyntaxSolidityHdr, "runtime/syntax/solidity.yaml": runtimeSyntaxSolidityYaml, "runtime/syntax/sql.hdr": runtimeSyntaxSqlHdr, "runtime/syntax/sql.yaml": runtimeSyntaxSqlYaml, "runtime/syntax/stata.hdr": runtimeSyntaxStataHdr, "runtime/syntax/stata.yaml": runtimeSyntaxStataYaml, "runtime/syntax/svelte.hdr": runtimeSyntaxSvelteHdr, "runtime/syntax/svelte.yaml": runtimeSyntaxSvelteYaml, "runtime/syntax/swift.hdr": runtimeSyntaxSwiftHdr, "runtime/syntax/swift.yaml": runtimeSyntaxSwiftYaml, "runtime/syntax/syntax_checker.go": runtimeSyntaxSyntax_checkerGo, "runtime/syntax/syntax_converter.go": runtimeSyntaxSyntax_converterGo, "runtime/syntax/systemd.hdr": runtimeSyntaxSystemdHdr, "runtime/syntax/systemd.yaml": runtimeSyntaxSystemdYaml, "runtime/syntax/tcl.hdr": runtimeSyntaxTclHdr, "runtime/syntax/tcl.yaml": runtimeSyntaxTclYaml, "runtime/syntax/tex.hdr": runtimeSyntaxTexHdr, "runtime/syntax/tex.yaml": runtimeSyntaxTexYaml, "runtime/syntax/toml.hdr": runtimeSyntaxTomlHdr, "runtime/syntax/toml.yaml": runtimeSyntaxTomlYaml, "runtime/syntax/twig.hdr": runtimeSyntaxTwigHdr, "runtime/syntax/twig.yaml": runtimeSyntaxTwigYaml, "runtime/syntax/typescript.hdr": runtimeSyntaxTypescriptHdr, "runtime/syntax/typescript.yaml": runtimeSyntaxTypescriptYaml, "runtime/syntax/v.hdr": runtimeSyntaxVHdr, "runtime/syntax/v.yaml": runtimeSyntaxVYaml, "runtime/syntax/vala.hdr": runtimeSyntaxValaHdr, "runtime/syntax/vala.yaml": runtimeSyntaxValaYaml, "runtime/syntax/verilog.hdr": runtimeSyntaxVerilogHdr, "runtime/syntax/verilog.yaml": runtimeSyntaxVerilogYaml, "runtime/syntax/vhdl.hdr": runtimeSyntaxVhdlHdr, "runtime/syntax/vhdl.yaml": runtimeSyntaxVhdlYaml, "runtime/syntax/vi.hdr": runtimeSyntaxViHdr, "runtime/syntax/vi.yaml": runtimeSyntaxViYaml, "runtime/syntax/vue.hdr": runtimeSyntaxVueHdr, "runtime/syntax/vue.yaml": runtimeSyntaxVueYaml, "runtime/syntax/xml.hdr": runtimeSyntaxXmlHdr, "runtime/syntax/xml.yaml": runtimeSyntaxXmlYaml, "runtime/syntax/xresources.hdr": runtimeSyntaxXresourcesHdr, "runtime/syntax/xresources.yaml": runtimeSyntaxXresourcesYaml, "runtime/syntax/yaml.hdr": runtimeSyntaxYamlHdr, "runtime/syntax/yaml.yaml": runtimeSyntaxYamlYaml, "runtime/syntax/yum.hdr": runtimeSyntaxYumHdr, "runtime/syntax/yum.yaml": runtimeSyntaxYumYaml, "runtime/syntax/zig.hdr": runtimeSyntaxZigHdr, "runtime/syntax/zig.yaml": runtimeSyntaxZigYaml, "runtime/syntax/zscript.hdr": runtimeSyntaxZscriptHdr, "runtime/syntax/zscript.yaml": runtimeSyntaxZscriptYaml, "runtime/syntax/zsh.hdr": runtimeSyntaxZshHdr, "runtime/syntax/zsh.yaml": runtimeSyntaxZshYaml, } // AssetDir returns the file names below a certain // directory embedded in the file by go-bindata. // For example if you run go-bindata on data/... and data contains the // following hierarchy: // data/ // foo.txt // img/ // a.png // b.png // then AssetDir("data") would return []string{"foo.txt", "img"} // AssetDir("data/img") would return []string{"a.png", "b.png"} // AssetDir("foo.txt") and AssetDir("notexist") would return an error // AssetDir("") will return []string{"data"}. func AssetDir(name string) ([]string, error) { node := _bintree if len(name) != 0 { cannonicalName := strings.Replace(name, "\\", "/", -1) pathList := strings.Split(cannonicalName, "/") for _, p := range pathList { node = node.Children[p] if node == nil { return nil, fmt.Errorf("Asset %s not found", name) } } } if node.Func != nil { return nil, fmt.Errorf("Asset %s not found", name) } rv := make([]string, 0, len(node.Children)) for childName := range node.Children { rv = append(rv, childName) } return rv, nil } type bintree struct { Func func() (*asset, error) Children map[string]*bintree } var _bintree = &bintree{nil, map[string]*bintree{ "runtime": &bintree{nil, map[string]*bintree{ "README.md": &bintree{runtimeReadmeMd, map[string]*bintree{}}, "colorschemes": &bintree{nil, map[string]*bintree{ "atom-dark.micro": &bintree{runtimeColorschemesAtomDarkMicro, map[string]*bintree{}}, "bubblegum.micro": &bintree{runtimeColorschemesBubblegumMicro, map[string]*bintree{}}, "cmc-16.micro": &bintree{runtimeColorschemesCmc16Micro, map[string]*bintree{}}, "cmc-tc.micro": &bintree{runtimeColorschemesCmcTcMicro, map[string]*bintree{}}, "darcula.micro": &bintree{runtimeColorschemesDarculaMicro, map[string]*bintree{}}, "default.micro": &bintree{runtimeColorschemesDefaultMicro, map[string]*bintree{}}, "dracula-tc.micro": &bintree{runtimeColorschemesDraculaTcMicro, map[string]*bintree{}}, "dukedark-tc.micro": &bintree{runtimeColorschemesDukedarkTcMicro, map[string]*bintree{}}, "dukelight-tc.micro": &bintree{runtimeColorschemesDukelightTcMicro, map[string]*bintree{}}, "dukeubuntu-tc.micro": &bintree{runtimeColorschemesDukeubuntuTcMicro, map[string]*bintree{}}, "geany.micro": &bintree{runtimeColorschemesGeanyMicro, map[string]*bintree{}}, "gotham.micro": &bintree{runtimeColorschemesGothamMicro, map[string]*bintree{}}, "gruvbox-tc.micro": &bintree{runtimeColorschemesGruvboxTcMicro, map[string]*bintree{}}, "gruvbox.micro": &bintree{runtimeColorschemesGruvboxMicro, map[string]*bintree{}}, "material-tc.micro": &bintree{runtimeColorschemesMaterialTcMicro, map[string]*bintree{}}, "monokai-dark.micro": &bintree{runtimeColorschemesMonokaiDarkMicro, map[string]*bintree{}}, "monokai.micro": &bintree{runtimeColorschemesMonokaiMicro, map[string]*bintree{}}, "one-dark.micro": &bintree{runtimeColorschemesOneDarkMicro, map[string]*bintree{}}, "railscast.micro": &bintree{runtimeColorschemesRailscastMicro, map[string]*bintree{}}, "simple.micro": &bintree{runtimeColorschemesSimpleMicro, map[string]*bintree{}}, "solarized-tc.micro": &bintree{runtimeColorschemesSolarizedTcMicro, map[string]*bintree{}}, "solarized.micro": &bintree{runtimeColorschemesSolarizedMicro, map[string]*bintree{}}, "sunny-day.micro": &bintree{runtimeColorschemesSunnyDayMicro, map[string]*bintree{}}, "twilight.micro": &bintree{runtimeColorschemesTwilightMicro, map[string]*bintree{}}, "zenburn.micro": &bintree{runtimeColorschemesZenburnMicro, map[string]*bintree{}}, }}, "help": &bintree{nil, map[string]*bintree{ "colors.md": &bintree{runtimeHelpColorsMd, map[string]*bintree{}}, "commands.md": &bintree{runtimeHelpCommandsMd, map[string]*bintree{}}, "copypaste.md": &bintree{runtimeHelpCopypasteMd, map[string]*bintree{}}, "defaultkeys.md": &bintree{runtimeHelpDefaultkeysMd, map[string]*bintree{}}, "help.md": &bintree{runtimeHelpHelpMd, map[string]*bintree{}}, "keybindings.md": &bintree{runtimeHelpKeybindingsMd, map[string]*bintree{}}, "options.md": &bintree{runtimeHelpOptionsMd, map[string]*bintree{}}, "plugins.md": &bintree{runtimeHelpPluginsMd, map[string]*bintree{}}, "tutorial.md": &bintree{runtimeHelpTutorialMd, map[string]*bintree{}}, }}, "plugins": &bintree{nil, map[string]*bintree{ "autoclose": &bintree{nil, map[string]*bintree{ "autoclose.lua": &bintree{runtimePluginsAutocloseAutocloseLua, map[string]*bintree{}}, }}, "comment": &bintree{nil, map[string]*bintree{ "comment.lua": &bintree{runtimePluginsCommentCommentLua, map[string]*bintree{}}, "help": &bintree{nil, map[string]*bintree{ "comment.md": &bintree{runtimePluginsCommentHelpCommentMd, map[string]*bintree{}}, }}, }}, "diff": &bintree{nil, map[string]*bintree{ "diff.lua": &bintree{runtimePluginsDiffDiffLua, map[string]*bintree{}}, }}, "ftoptions": &bintree{nil, map[string]*bintree{ "ftoptions.lua": &bintree{runtimePluginsFtoptionsFtoptionsLua, map[string]*bintree{}}, }}, "linter": &bintree{nil, map[string]*bintree{ "help": &bintree{nil, map[string]*bintree{ "linter.md": &bintree{runtimePluginsLinterHelpLinterMd, map[string]*bintree{}}, }}, "linter.lua": &bintree{runtimePluginsLinterLinterLua, map[string]*bintree{}}, }}, "literate": &bintree{nil, map[string]*bintree{ "README.md": &bintree{runtimePluginsLiterateReadmeMd, map[string]*bintree{}}, "literate.lua": &bintree{runtimePluginsLiterateLiterateLua, map[string]*bintree{}}, }}, "status": &bintree{nil, map[string]*bintree{ "help": &bintree{nil, map[string]*bintree{ "status.md": &bintree{runtimePluginsStatusHelpStatusMd, map[string]*bintree{}}, }}, "status.lua": &bintree{runtimePluginsStatusStatusLua, map[string]*bintree{}}, }}, }}, "syntax": &bintree{nil, map[string]*bintree{ "LICENSE": &bintree{runtimeSyntaxLicense, map[string]*bintree{}}, "PowerShell.hdr": &bintree{runtimeSyntaxPowershellHdr, map[string]*bintree{}}, "PowerShell.yaml": &bintree{runtimeSyntaxPowershellYaml, map[string]*bintree{}}, "README.md": &bintree{runtimeSyntaxReadmeMd, map[string]*bintree{}}, "ada.hdr": &bintree{runtimeSyntaxAdaHdr, map[string]*bintree{}}, "ada.yaml": &bintree{runtimeSyntaxAdaYaml, map[string]*bintree{}}, "apacheconf.hdr": &bintree{runtimeSyntaxApacheconfHdr, map[string]*bintree{}}, "apacheconf.yaml": &bintree{runtimeSyntaxApacheconfYaml, map[string]*bintree{}}, "arduino.hdr": &bintree{runtimeSyntaxArduinoHdr, map[string]*bintree{}}, "arduino.yaml": &bintree{runtimeSyntaxArduinoYaml, map[string]*bintree{}}, "asciidoc.hdr": &bintree{runtimeSyntaxAsciidocHdr, map[string]*bintree{}}, "asciidoc.yaml": &bintree{runtimeSyntaxAsciidocYaml, map[string]*bintree{}}, "asm.hdr": &bintree{runtimeSyntaxAsmHdr, map[string]*bintree{}}, "asm.yaml": &bintree{runtimeSyntaxAsmYaml, map[string]*bintree{}}, "ats.hdr": &bintree{runtimeSyntaxAtsHdr, map[string]*bintree{}}, "ats.yaml": &bintree{runtimeSyntaxAtsYaml, map[string]*bintree{}}, "awk.hdr": &bintree{runtimeSyntaxAwkHdr, map[string]*bintree{}}, "awk.yaml": &bintree{runtimeSyntaxAwkYaml, map[string]*bintree{}}, "bat.hdr": &bintree{runtimeSyntaxBatHdr, map[string]*bintree{}}, "bat.yaml": &bintree{runtimeSyntaxBatYaml, map[string]*bintree{}}, "c.hdr": &bintree{runtimeSyntaxCHdr, map[string]*bintree{}}, "c.yaml": &bintree{runtimeSyntaxCYaml, map[string]*bintree{}}, "caddyfile.hdr": &bintree{runtimeSyntaxCaddyfileHdr, map[string]*bintree{}}, "caddyfile.yaml": &bintree{runtimeSyntaxCaddyfileYaml, map[string]*bintree{}}, "clojure.hdr": &bintree{runtimeSyntaxClojureHdr, map[string]*bintree{}}, "clojure.yaml": &bintree{runtimeSyntaxClojureYaml, map[string]*bintree{}}, "cmake.hdr": &bintree{runtimeSyntaxCmakeHdr, map[string]*bintree{}}, "cmake.yaml": &bintree{runtimeSyntaxCmakeYaml, map[string]*bintree{}}, "coffeescript.hdr": &bintree{runtimeSyntaxCoffeescriptHdr, map[string]*bintree{}}, "coffeescript.yaml": &bintree{runtimeSyntaxCoffeescriptYaml, map[string]*bintree{}}, "colortest.hdr": &bintree{runtimeSyntaxColortestHdr, map[string]*bintree{}}, "colortest.yaml": &bintree{runtimeSyntaxColortestYaml, map[string]*bintree{}}, "conky.hdr": &bintree{runtimeSyntaxConkyHdr, map[string]*bintree{}}, "conky.yaml": &bintree{runtimeSyntaxConkyYaml, map[string]*bintree{}}, "cpp.hdr": &bintree{runtimeSyntaxCppHdr, map[string]*bintree{}}, "cpp.yaml": &bintree{runtimeSyntaxCppYaml, map[string]*bintree{}}, "crontab.hdr": &bintree{runtimeSyntaxCrontabHdr, map[string]*bintree{}}, "crontab.yaml": &bintree{runtimeSyntaxCrontabYaml, map[string]*bintree{}}, "crystal.hdr": &bintree{runtimeSyntaxCrystalHdr, map[string]*bintree{}}, "crystal.yaml": &bintree{runtimeSyntaxCrystalYaml, map[string]*bintree{}}, "csharp.hdr": &bintree{runtimeSyntaxCsharpHdr, map[string]*bintree{}}, "csharp.yaml": &bintree{runtimeSyntaxCsharpYaml, map[string]*bintree{}}, "css.hdr": &bintree{runtimeSyntaxCssHdr, map[string]*bintree{}}, "css.yaml": &bintree{runtimeSyntaxCssYaml, map[string]*bintree{}}, "csx.hdr": &bintree{runtimeSyntaxCsxHdr, map[string]*bintree{}}, "csx.yaml": &bintree{runtimeSyntaxCsxYaml, map[string]*bintree{}}, "cython.hdr": &bintree{runtimeSyntaxCythonHdr, map[string]*bintree{}}, "cython.yaml": &bintree{runtimeSyntaxCythonYaml, map[string]*bintree{}}, "d.hdr": &bintree{runtimeSyntaxDHdr, map[string]*bintree{}}, "d.yaml": &bintree{runtimeSyntaxDYaml, map[string]*bintree{}}, "dart.hdr": &bintree{runtimeSyntaxDartHdr, map[string]*bintree{}}, "dart.yaml": &bintree{runtimeSyntaxDartYaml, map[string]*bintree{}}, "dockerfile.hdr": &bintree{runtimeSyntaxDockerfileHdr, map[string]*bintree{}}, "dockerfile.yaml": &bintree{runtimeSyntaxDockerfileYaml, map[string]*bintree{}}, "dot.hdr": &bintree{runtimeSyntaxDotHdr, map[string]*bintree{}}, "dot.yaml": &bintree{runtimeSyntaxDotYaml, map[string]*bintree{}}, "elixir.hdr": &bintree{runtimeSyntaxElixirHdr, map[string]*bintree{}}, "elixir.yaml": &bintree{runtimeSyntaxElixirYaml, map[string]*bintree{}}, "elm.hdr": &bintree{runtimeSyntaxElmHdr, map[string]*bintree{}}, "elm.yaml": &bintree{runtimeSyntaxElmYaml, map[string]*bintree{}}, "erb.hdr": &bintree{runtimeSyntaxErbHdr, map[string]*bintree{}}, "erb.yaml": &bintree{runtimeSyntaxErbYaml, map[string]*bintree{}}, "erlang.hdr": &bintree{runtimeSyntaxErlangHdr, map[string]*bintree{}}, "erlang.yaml": &bintree{runtimeSyntaxErlangYaml, map[string]*bintree{}}, "fish.hdr": &bintree{runtimeSyntaxFishHdr, map[string]*bintree{}}, "fish.yaml": &bintree{runtimeSyntaxFishYaml, map[string]*bintree{}}, "forth.hdr": &bintree{runtimeSyntaxForthHdr, map[string]*bintree{}}, "forth.yaml": &bintree{runtimeSyntaxForthYaml, map[string]*bintree{}}, "fortran.hdr": &bintree{runtimeSyntaxFortranHdr, map[string]*bintree{}}, "fortran.yaml": &bintree{runtimeSyntaxFortranYaml, map[string]*bintree{}}, "fsharp.hdr": &bintree{runtimeSyntaxFsharpHdr, map[string]*bintree{}}, "fsharp.yaml": &bintree{runtimeSyntaxFsharpYaml, map[string]*bintree{}}, "gdscript.hdr": &bintree{runtimeSyntaxGdscriptHdr, map[string]*bintree{}}, "gdscript.yaml": &bintree{runtimeSyntaxGdscriptYaml, map[string]*bintree{}}, "gemini.hdr": &bintree{runtimeSyntaxGeminiHdr, map[string]*bintree{}}, "gemini.yaml": &bintree{runtimeSyntaxGeminiYaml, map[string]*bintree{}}, "gentoo-ebuild.hdr": &bintree{runtimeSyntaxGentooEbuildHdr, map[string]*bintree{}}, "gentoo-ebuild.yaml": &bintree{runtimeSyntaxGentooEbuildYaml, map[string]*bintree{}}, "gentoo-etc-portage.hdr": &bintree{runtimeSyntaxGentooEtcPortageHdr, map[string]*bintree{}}, "gentoo-etc-portage.yaml": &bintree{runtimeSyntaxGentooEtcPortageYaml, map[string]*bintree{}}, "git-commit.hdr": &bintree{runtimeSyntaxGitCommitHdr, map[string]*bintree{}}, "git-commit.yaml": &bintree{runtimeSyntaxGitCommitYaml, map[string]*bintree{}}, "git-config.hdr": &bintree{runtimeSyntaxGitConfigHdr, map[string]*bintree{}}, "git-config.yaml": &bintree{runtimeSyntaxGitConfigYaml, map[string]*bintree{}}, "git-rebase-todo.hdr": &bintree{runtimeSyntaxGitRebaseTodoHdr, map[string]*bintree{}}, "git-rebase-todo.yaml": &bintree{runtimeSyntaxGitRebaseTodoYaml, map[string]*bintree{}}, "glsl.hdr": &bintree{runtimeSyntaxGlslHdr, map[string]*bintree{}}, "glsl.yaml": &bintree{runtimeSyntaxGlslYaml, map[string]*bintree{}}, "go.hdr": &bintree{runtimeSyntaxGoHdr, map[string]*bintree{}}, "go.yaml": &bintree{runtimeSyntaxGoYaml, map[string]*bintree{}}, "godoc.hdr": &bintree{runtimeSyntaxGodocHdr, map[string]*bintree{}}, "godoc.yaml": &bintree{runtimeSyntaxGodocYaml, map[string]*bintree{}}, "golo.hdr": &bintree{runtimeSyntaxGoloHdr, map[string]*bintree{}}, "golo.yaml": &bintree{runtimeSyntaxGoloYaml, map[string]*bintree{}}, "graphql.hdr": &bintree{runtimeSyntaxGraphqlHdr, map[string]*bintree{}}, "graphql.yaml": &bintree{runtimeSyntaxGraphqlYaml, map[string]*bintree{}}, "groff.hdr": &bintree{runtimeSyntaxGroffHdr, map[string]*bintree{}}, "groff.yaml": &bintree{runtimeSyntaxGroffYaml, map[string]*bintree{}}, "groovy.hdr": &bintree{runtimeSyntaxGroovyHdr, map[string]*bintree{}}, "groovy.yaml": &bintree{runtimeSyntaxGroovyYaml, map[string]*bintree{}}, "haml.hdr": &bintree{runtimeSyntaxHamlHdr, map[string]*bintree{}}, "haml.yaml": &bintree{runtimeSyntaxHamlYaml, map[string]*bintree{}}, "haskell.hdr": &bintree{runtimeSyntaxHaskellHdr, map[string]*bintree{}}, "haskell.yaml": &bintree{runtimeSyntaxHaskellYaml, map[string]*bintree{}}, "html.hdr": &bintree{runtimeSyntaxHtmlHdr, map[string]*bintree{}}, "html.yaml": &bintree{runtimeSyntaxHtmlYaml, map[string]*bintree{}}, "html4.hdr": &bintree{runtimeSyntaxHtml4Hdr, map[string]*bintree{}}, "html4.yaml": &bintree{runtimeSyntaxHtml4Yaml, map[string]*bintree{}}, "html5.hdr": &bintree{runtimeSyntaxHtml5Hdr, map[string]*bintree{}}, "html5.yaml": &bintree{runtimeSyntaxHtml5Yaml, map[string]*bintree{}}, "ini.hdr": &bintree{runtimeSyntaxIniHdr, map[string]*bintree{}}, "ini.yaml": &bintree{runtimeSyntaxIniYaml, map[string]*bintree{}}, "inputrc.hdr": &bintree{runtimeSyntaxInputrcHdr, map[string]*bintree{}}, "inputrc.yaml": &bintree{runtimeSyntaxInputrcYaml, map[string]*bintree{}}, "java.hdr": &bintree{runtimeSyntaxJavaHdr, map[string]*bintree{}}, "java.yaml": &bintree{runtimeSyntaxJavaYaml, map[string]*bintree{}}, "javascript.hdr": &bintree{runtimeSyntaxJavascriptHdr, map[string]*bintree{}}, "javascript.yaml": &bintree{runtimeSyntaxJavascriptYaml, map[string]*bintree{}}, "jinja2.hdr": &bintree{runtimeSyntaxJinja2Hdr, map[string]*bintree{}}, "jinja2.yaml": &bintree{runtimeSyntaxJinja2Yaml, map[string]*bintree{}}, "json.hdr": &bintree{runtimeSyntaxJsonHdr, map[string]*bintree{}}, "json.yaml": &bintree{runtimeSyntaxJsonYaml, map[string]*bintree{}}, "jsonnet.hdr": &bintree{runtimeSyntaxJsonnetHdr, map[string]*bintree{}}, "jsonnet.yaml": &bintree{runtimeSyntaxJsonnetYaml, map[string]*bintree{}}, "julia.hdr": &bintree{runtimeSyntaxJuliaHdr, map[string]*bintree{}}, "julia.yaml": &bintree{runtimeSyntaxJuliaYaml, map[string]*bintree{}}, "keymap.hdr": &bintree{runtimeSyntaxKeymapHdr, map[string]*bintree{}}, "keymap.yaml": &bintree{runtimeSyntaxKeymapYaml, map[string]*bintree{}}, "kickstart.hdr": &bintree{runtimeSyntaxKickstartHdr, map[string]*bintree{}}, "kickstart.yaml": &bintree{runtimeSyntaxKickstartYaml, map[string]*bintree{}}, "kotlin.hdr": &bintree{runtimeSyntaxKotlinHdr, map[string]*bintree{}}, "kotlin.yaml": &bintree{runtimeSyntaxKotlinYaml, map[string]*bintree{}}, "ledger.hdr": &bintree{runtimeSyntaxLedgerHdr, map[string]*bintree{}}, "ledger.yaml": &bintree{runtimeSyntaxLedgerYaml, map[string]*bintree{}}, "lfe.hdr": &bintree{runtimeSyntaxLfeHdr, map[string]*bintree{}}, "lfe.yaml": &bintree{runtimeSyntaxLfeYaml, map[string]*bintree{}}, "lilypond.hdr": &bintree{runtimeSyntaxLilypondHdr, map[string]*bintree{}}, "lilypond.yaml": &bintree{runtimeSyntaxLilypondYaml, map[string]*bintree{}}, "lisp.hdr": &bintree{runtimeSyntaxLispHdr, map[string]*bintree{}}, "lisp.yaml": &bintree{runtimeSyntaxLispYaml, map[string]*bintree{}}, "lua.hdr": &bintree{runtimeSyntaxLuaHdr, map[string]*bintree{}}, "lua.yaml": &bintree{runtimeSyntaxLuaYaml, map[string]*bintree{}}, "mail.hdr": &bintree{runtimeSyntaxMailHdr, map[string]*bintree{}}, "mail.yaml": &bintree{runtimeSyntaxMailYaml, map[string]*bintree{}}, "make_headers.go": &bintree{runtimeSyntaxMake_headersGo, map[string]*bintree{}}, "makefile.hdr": &bintree{runtimeSyntaxMakefileHdr, map[string]*bintree{}}, "makefile.yaml": &bintree{runtimeSyntaxMakefileYaml, map[string]*bintree{}}, "man.hdr": &bintree{runtimeSyntaxManHdr, map[string]*bintree{}}, "man.yaml": &bintree{runtimeSyntaxManYaml, map[string]*bintree{}}, "markdown.hdr": &bintree{runtimeSyntaxMarkdownHdr, map[string]*bintree{}}, "markdown.yaml": &bintree{runtimeSyntaxMarkdownYaml, map[string]*bintree{}}, "mc.hdr": &bintree{runtimeSyntaxMcHdr, map[string]*bintree{}}, "mc.yaml": &bintree{runtimeSyntaxMcYaml, map[string]*bintree{}}, "micro.hdr": &bintree{runtimeSyntaxMicroHdr, map[string]*bintree{}}, "micro.yaml": &bintree{runtimeSyntaxMicroYaml, map[string]*bintree{}}, "mpdconf.hdr": &bintree{runtimeSyntaxMpdconfHdr, map[string]*bintree{}}, "mpdconf.yaml": &bintree{runtimeSyntaxMpdconfYaml, map[string]*bintree{}}, "nanorc.hdr": &bintree{runtimeSyntaxNanorcHdr, map[string]*bintree{}}, "nanorc.yaml": &bintree{runtimeSyntaxNanorcYaml, map[string]*bintree{}}, "nginx.hdr": &bintree{runtimeSyntaxNginxHdr, map[string]*bintree{}}, "nginx.yaml": &bintree{runtimeSyntaxNginxYaml, map[string]*bintree{}}, "nim.hdr": &bintree{runtimeSyntaxNimHdr, map[string]*bintree{}}, "nim.yaml": &bintree{runtimeSyntaxNimYaml, map[string]*bintree{}}, "objc.hdr": &bintree{runtimeSyntaxObjcHdr, map[string]*bintree{}}, "objc.yaml": &bintree{runtimeSyntaxObjcYaml, map[string]*bintree{}}, "ocaml.hdr": &bintree{runtimeSyntaxOcamlHdr, map[string]*bintree{}}, "ocaml.yaml": &bintree{runtimeSyntaxOcamlYaml, map[string]*bintree{}}, "octave.hdr": &bintree{runtimeSyntaxOctaveHdr, map[string]*bintree{}}, "octave.yaml": &bintree{runtimeSyntaxOctaveYaml, map[string]*bintree{}}, "pascal.hdr": &bintree{runtimeSyntaxPascalHdr, map[string]*bintree{}}, "pascal.yaml": &bintree{runtimeSyntaxPascalYaml, map[string]*bintree{}}, "patch.hdr": &bintree{runtimeSyntaxPatchHdr, map[string]*bintree{}}, "patch.yaml": &bintree{runtimeSyntaxPatchYaml, map[string]*bintree{}}, "peg.hdr": &bintree{runtimeSyntaxPegHdr, map[string]*bintree{}}, "peg.yaml": &bintree{runtimeSyntaxPegYaml, map[string]*bintree{}}, "perl.hdr": &bintree{runtimeSyntaxPerlHdr, map[string]*bintree{}}, "perl.yaml": &bintree{runtimeSyntaxPerlYaml, map[string]*bintree{}}, "perl6.hdr": &bintree{runtimeSyntaxPerl6Hdr, map[string]*bintree{}}, "perl6.yaml": &bintree{runtimeSyntaxPerl6Yaml, map[string]*bintree{}}, "php.hdr": &bintree{runtimeSyntaxPhpHdr, map[string]*bintree{}}, "php.yaml": &bintree{runtimeSyntaxPhpYaml, map[string]*bintree{}}, "pkg-config.hdr": &bintree{runtimeSyntaxPkgConfigHdr, map[string]*bintree{}}, "pkg-config.yaml": &bintree{runtimeSyntaxPkgConfigYaml, map[string]*bintree{}}, "po.hdr": &bintree{runtimeSyntaxPoHdr, map[string]*bintree{}}, "po.yaml": &bintree{runtimeSyntaxPoYaml, map[string]*bintree{}}, "pony.hdr": &bintree{runtimeSyntaxPonyHdr, map[string]*bintree{}}, "pony.yaml": &bintree{runtimeSyntaxPonyYaml, map[string]*bintree{}}, "pov.hdr": &bintree{runtimeSyntaxPovHdr, map[string]*bintree{}}, "pov.yaml": &bintree{runtimeSyntaxPovYaml, map[string]*bintree{}}, "privoxy-action.hdr": &bintree{runtimeSyntaxPrivoxyActionHdr, map[string]*bintree{}}, "privoxy-action.yaml": &bintree{runtimeSyntaxPrivoxyActionYaml, map[string]*bintree{}}, "privoxy-config.hdr": &bintree{runtimeSyntaxPrivoxyConfigHdr, map[string]*bintree{}}, "privoxy-config.yaml": &bintree{runtimeSyntaxPrivoxyConfigYaml, map[string]*bintree{}}, "privoxy-filter.hdr": &bintree{runtimeSyntaxPrivoxyFilterHdr, map[string]*bintree{}}, "privoxy-filter.yaml": &bintree{runtimeSyntaxPrivoxyFilterYaml, map[string]*bintree{}}, "proto.hdr": &bintree{runtimeSyntaxProtoHdr, map[string]*bintree{}}, "proto.yaml": &bintree{runtimeSyntaxProtoYaml, map[string]*bintree{}}, "puppet.hdr": &bintree{runtimeSyntaxPuppetHdr, map[string]*bintree{}}, "puppet.yaml": &bintree{runtimeSyntaxPuppetYaml, map[string]*bintree{}}, "python2.hdr": &bintree{runtimeSyntaxPython2Hdr, map[string]*bintree{}}, "python2.yaml": &bintree{runtimeSyntaxPython2Yaml, map[string]*bintree{}}, "python3.hdr": &bintree{runtimeSyntaxPython3Hdr, map[string]*bintree{}}, "python3.yaml": &bintree{runtimeSyntaxPython3Yaml, map[string]*bintree{}}, "r.hdr": &bintree{runtimeSyntaxRHdr, map[string]*bintree{}}, "r.yaml": &bintree{runtimeSyntaxRYaml, map[string]*bintree{}}, "reST.hdr": &bintree{runtimeSyntaxRestHdr, map[string]*bintree{}}, "reST.yaml": &bintree{runtimeSyntaxRestYaml, map[string]*bintree{}}, "renpy.hdr": &bintree{runtimeSyntaxRenpyHdr, map[string]*bintree{}}, "renpy.yaml": &bintree{runtimeSyntaxRenpyYaml, map[string]*bintree{}}, "rpmspec.hdr": &bintree{runtimeSyntaxRpmspecHdr, map[string]*bintree{}}, "rpmspec.yaml": &bintree{runtimeSyntaxRpmspecYaml, map[string]*bintree{}}, "ruby.hdr": &bintree{runtimeSyntaxRubyHdr, map[string]*bintree{}}, "ruby.yaml": &bintree{runtimeSyntaxRubyYaml, map[string]*bintree{}}, "rust.hdr": &bintree{runtimeSyntaxRustHdr, map[string]*bintree{}}, "rust.yaml": &bintree{runtimeSyntaxRustYaml, map[string]*bintree{}}, "sage.hdr": &bintree{runtimeSyntaxSageHdr, map[string]*bintree{}}, "sage.yaml": &bintree{runtimeSyntaxSageYaml, map[string]*bintree{}}, "scala.hdr": &bintree{runtimeSyntaxScalaHdr, map[string]*bintree{}}, "scala.yaml": &bintree{runtimeSyntaxScalaYaml, map[string]*bintree{}}, "sed.hdr": &bintree{runtimeSyntaxSedHdr, map[string]*bintree{}}, "sed.yaml": &bintree{runtimeSyntaxSedYaml, map[string]*bintree{}}, "sh.hdr": &bintree{runtimeSyntaxShHdr, map[string]*bintree{}}, "sh.yaml": &bintree{runtimeSyntaxShYaml, map[string]*bintree{}}, "sls.hdr": &bintree{runtimeSyntaxSlsHdr, map[string]*bintree{}}, "sls.yaml": &bintree{runtimeSyntaxSlsYaml, map[string]*bintree{}}, "solidity.hdr": &bintree{runtimeSyntaxSolidityHdr, map[string]*bintree{}}, "solidity.yaml": &bintree{runtimeSyntaxSolidityYaml, map[string]*bintree{}}, "sql.hdr": &bintree{runtimeSyntaxSqlHdr, map[string]*bintree{}}, "sql.yaml": &bintree{runtimeSyntaxSqlYaml, map[string]*bintree{}}, "stata.hdr": &bintree{runtimeSyntaxStataHdr, map[string]*bintree{}}, "stata.yaml": &bintree{runtimeSyntaxStataYaml, map[string]*bintree{}}, "svelte.hdr": &bintree{runtimeSyntaxSvelteHdr, map[string]*bintree{}}, "svelte.yaml": &bintree{runtimeSyntaxSvelteYaml, map[string]*bintree{}}, "swift.hdr": &bintree{runtimeSyntaxSwiftHdr, map[string]*bintree{}}, "swift.yaml": &bintree{runtimeSyntaxSwiftYaml, map[string]*bintree{}}, "syntax_checker.go": &bintree{runtimeSyntaxSyntax_checkerGo, map[string]*bintree{}}, "syntax_converter.go": &bintree{runtimeSyntaxSyntax_converterGo, map[string]*bintree{}}, "systemd.hdr": &bintree{runtimeSyntaxSystemdHdr, map[string]*bintree{}}, "systemd.yaml": &bintree{runtimeSyntaxSystemdYaml, map[string]*bintree{}}, "tcl.hdr": &bintree{runtimeSyntaxTclHdr, map[string]*bintree{}}, "tcl.yaml": &bintree{runtimeSyntaxTclYaml, map[string]*bintree{}}, "tex.hdr": &bintree{runtimeSyntaxTexHdr, map[string]*bintree{}}, "tex.yaml": &bintree{runtimeSyntaxTexYaml, map[string]*bintree{}}, "toml.hdr": &bintree{runtimeSyntaxTomlHdr, map[string]*bintree{}}, "toml.yaml": &bintree{runtimeSyntaxTomlYaml, map[string]*bintree{}}, "twig.hdr": &bintree{runtimeSyntaxTwigHdr, map[string]*bintree{}}, "twig.yaml": &bintree{runtimeSyntaxTwigYaml, map[string]*bintree{}}, "typescript.hdr": &bintree{runtimeSyntaxTypescriptHdr, map[string]*bintree{}}, "typescript.yaml": &bintree{runtimeSyntaxTypescriptYaml, map[string]*bintree{}}, "v.hdr": &bintree{runtimeSyntaxVHdr, map[string]*bintree{}}, "v.yaml": &bintree{runtimeSyntaxVYaml, map[string]*bintree{}}, "vala.hdr": &bintree{runtimeSyntaxValaHdr, map[string]*bintree{}}, "vala.yaml": &bintree{runtimeSyntaxValaYaml, map[string]*bintree{}}, "verilog.hdr": &bintree{runtimeSyntaxVerilogHdr, map[string]*bintree{}}, "verilog.yaml": &bintree{runtimeSyntaxVerilogYaml, map[string]*bintree{}}, "vhdl.hdr": &bintree{runtimeSyntaxVhdlHdr, map[string]*bintree{}}, "vhdl.yaml": &bintree{runtimeSyntaxVhdlYaml, map[string]*bintree{}}, "vi.hdr": &bintree{runtimeSyntaxViHdr, map[string]*bintree{}}, "vi.yaml": &bintree{runtimeSyntaxViYaml, map[string]*bintree{}}, "vue.hdr": &bintree{runtimeSyntaxVueHdr, map[string]*bintree{}}, "vue.yaml": &bintree{runtimeSyntaxVueYaml, map[string]*bintree{}}, "xml.hdr": &bintree{runtimeSyntaxXmlHdr, map[string]*bintree{}}, "xml.yaml": &bintree{runtimeSyntaxXmlYaml, map[string]*bintree{}}, "xresources.hdr": &bintree{runtimeSyntaxXresourcesHdr, map[string]*bintree{}}, "xresources.yaml": &bintree{runtimeSyntaxXresourcesYaml, map[string]*bintree{}}, "yaml.hdr": &bintree{runtimeSyntaxYamlHdr, map[string]*bintree{}}, "yaml.yaml": &bintree{runtimeSyntaxYamlYaml, map[string]*bintree{}}, "yum.hdr": &bintree{runtimeSyntaxYumHdr, map[string]*bintree{}}, "yum.yaml": &bintree{runtimeSyntaxYumYaml, map[string]*bintree{}}, "zig.hdr": &bintree{runtimeSyntaxZigHdr, map[string]*bintree{}}, "zig.yaml": &bintree{runtimeSyntaxZigYaml, map[string]*bintree{}}, "zscript.hdr": &bintree{runtimeSyntaxZscriptHdr, map[string]*bintree{}}, "zscript.yaml": &bintree{runtimeSyntaxZscriptYaml, map[string]*bintree{}}, "zsh.hdr": &bintree{runtimeSyntaxZshHdr, map[string]*bintree{}}, "zsh.yaml": &bintree{runtimeSyntaxZshYaml, map[string]*bintree{}}, }}, }}, }} // RestoreAsset restores an asset under the given directory func RestoreAsset(dir, name string) error { data, err := Asset(name) if err != nil { return err } info, err := AssetInfo(name) if err != nil { return err } err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) if err != nil { return err } err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) if err != nil { return err } err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) if err != nil { return err } return nil } // RestoreAssets restores an asset under the given directory recursively func RestoreAssets(dir, name string) error { children, err := AssetDir(name) // File if err != nil { return RestoreAsset(dir, name) } // Dir for _, child := range children { err = RestoreAssets(dir, filepath.Join(name, child)) if err != nil { return err } } return nil } func _filePath(dir, name string) string { cannonicalName := strings.Replace(name, "\\", "/", -1) return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) } micro-2.0.9/internal/config/settings.go000066400000000000000000000327431405030104300201020ustar00rootroot00000000000000package config import ( "encoding/json" "errors" "fmt" "io/ioutil" "os" "path/filepath" "reflect" "strconv" "strings" "github.com/zyedidia/glob" "github.com/zyedidia/json5" "github.com/zyedidia/micro/v2/internal/util" "golang.org/x/text/encoding/htmlindex" ) type optionValidator func(string, interface{}) error var ( ErrInvalidOption = errors.New("Invalid option") ErrInvalidValue = errors.New("Invalid value") // The options that the user can set GlobalSettings map[string]interface{} // This is the raw parsed json parsedSettings map[string]interface{} settingsParseError bool // ModifiedSettings is a map of settings which should be written to disk // because they have been modified by the user in this session ModifiedSettings map[string]bool ) func init() { ModifiedSettings = make(map[string]bool) parsedSettings = make(map[string]interface{}) } // Options with validators var optionValidators = map[string]optionValidator{ "autosave": validateNonNegativeValue, "clipboard": validateClipboard, "tabsize": validatePositiveValue, "scrollmargin": validateNonNegativeValue, "scrollspeed": validateNonNegativeValue, "colorscheme": validateColorscheme, "colorcolumn": validateNonNegativeValue, "fileformat": validateLineEnding, "encoding": validateEncoding, } func ReadSettings() error { filename := filepath.Join(ConfigDir, "settings.json") if _, e := os.Stat(filename); e == nil { input, err := ioutil.ReadFile(filename) if err != nil { settingsParseError = true return errors.New("Error reading settings.json file: " + err.Error()) } if !strings.HasPrefix(string(input), "null") { // Unmarshal the input into the parsed map err = json5.Unmarshal(input, &parsedSettings) if err != nil { settingsParseError = true return errors.New("Error reading settings.json: " + err.Error()) } // check if autosave is a boolean and convert it to float if so if v, ok := parsedSettings["autosave"]; ok { s, ok := v.(bool) if ok { if s { parsedSettings["autosave"] = 8.0 } else { parsedSettings["autosave"] = 0.0 } } } } } return nil } func verifySetting(option string, value reflect.Type, def reflect.Type) bool { var interfaceArr []interface{} switch option { case "pluginrepos", "pluginchannels": return value.AssignableTo(reflect.TypeOf(interfaceArr)) default: return def.AssignableTo(value) } } // InitGlobalSettings initializes the options map and sets all options to their default values // Must be called after ReadSettings func InitGlobalSettings() error { var err error GlobalSettings = DefaultGlobalSettings() for k, v := range parsedSettings { if !strings.HasPrefix(reflect.TypeOf(v).String(), "map") { if _, ok := GlobalSettings[k]; ok && !verifySetting(k, reflect.TypeOf(v), reflect.TypeOf(GlobalSettings[k])) { err = fmt.Errorf("Global Error: setting '%s' has incorrect type (%s), using default value: %v (%s)", k, reflect.TypeOf(v), GlobalSettings[k], reflect.TypeOf(GlobalSettings[k])) continue } GlobalSettings[k] = v } } return err } // InitLocalSettings scans the json in settings.json and sets the options locally based // on whether the filetype or path matches ft or glob local settings // Must be called after ReadSettings func InitLocalSettings(settings map[string]interface{}, path string) error { var parseError error for k, v := range parsedSettings { if strings.HasPrefix(reflect.TypeOf(v).String(), "map") { if strings.HasPrefix(k, "ft:") { if settings["filetype"].(string) == k[3:] { for k1, v1 := range v.(map[string]interface{}) { if _, ok := settings[k1]; ok && !verifySetting(k1, reflect.TypeOf(v1), reflect.TypeOf(settings[k1])) { parseError = fmt.Errorf("Error: setting '%s' has incorrect type (%s), using default value: %v (%s)", k, reflect.TypeOf(v1), settings[k1], reflect.TypeOf(settings[k1])) continue } settings[k1] = v1 } } } else { g, err := glob.Compile(k) if err != nil { parseError = errors.New("Error with glob setting " + k + ": " + err.Error()) continue } if g.MatchString(path) { for k1, v1 := range v.(map[string]interface{}) { if _, ok := settings[k1]; ok && !verifySetting(k1, reflect.TypeOf(v1), reflect.TypeOf(settings[k1])) { parseError = fmt.Errorf("Error: setting '%s' has incorrect type (%s), using default value: %v (%s)", k, reflect.TypeOf(v1), settings[k1], reflect.TypeOf(settings[k1])) continue } settings[k1] = v1 } } } } } return parseError } // WriteSettings writes the settings to the specified filename as JSON func WriteSettings(filename string) error { if settingsParseError { // Don't write settings if there was a parse error // because this will delete the settings.json if it // is invalid. Instead we should allow the user to fix // it manually. return nil } var err error if _, e := os.Stat(ConfigDir); e == nil { defaults := DefaultGlobalSettings() // remove any options froms parsedSettings that have since been marked as default for k, v := range parsedSettings { if !strings.HasPrefix(reflect.TypeOf(v).String(), "map") { cur, okcur := GlobalSettings[k] if def, ok := defaults[k]; ok && okcur && reflect.DeepEqual(cur, def) { delete(parsedSettings, k) } } } // add any options to parsedSettings that have since been marked as non-default for k, v := range GlobalSettings { if def, ok := defaults[k]; !ok || !reflect.DeepEqual(v, def) { if _, wr := ModifiedSettings[k]; wr { parsedSettings[k] = v } } } txt, _ := json.MarshalIndent(parsedSettings, "", " ") err = ioutil.WriteFile(filename, append(txt, '\n'), 0644) } return err } // OverwriteSettings writes the current settings to settings.json and // resets any user configuration of local settings present in settings.json func OverwriteSettings(filename string) error { settings := make(map[string]interface{}) var err error if _, e := os.Stat(ConfigDir); e == nil { defaults := DefaultGlobalSettings() for k, v := range GlobalSettings { if def, ok := defaults[k]; !ok || !reflect.DeepEqual(v, def) { if _, wr := ModifiedSettings[k]; wr { settings[k] = v } } } txt, _ := json.MarshalIndent(settings, "", " ") err = ioutil.WriteFile(filename, append(txt, '\n'), 0644) } return err } // RegisterCommonOptionPlug creates a new option (called pl.name). This is meant to be called by plugins to add options. func RegisterCommonOptionPlug(pl string, name string, defaultvalue interface{}) error { name = pl + "." + name if _, ok := GlobalSettings[name]; !ok { defaultCommonSettings[name] = defaultvalue GlobalSettings[name] = defaultvalue err := WriteSettings(filepath.Join(ConfigDir, "settings.json")) if err != nil { return errors.New("Error writing settings.json file: " + err.Error()) } } else { defaultCommonSettings[name] = defaultvalue } return nil } // RegisterGlobalOptionPlug creates a new global-only option (named pl.name) func RegisterGlobalOptionPlug(pl string, name string, defaultvalue interface{}) error { return RegisterGlobalOption(pl+"."+name, defaultvalue) } // RegisterGlobalOption creates a new global-only option func RegisterGlobalOption(name string, defaultvalue interface{}) error { if v, ok := GlobalSettings[name]; !ok { DefaultGlobalOnlySettings[name] = defaultvalue GlobalSettings[name] = defaultvalue err := WriteSettings(filepath.Join(ConfigDir, "settings.json")) if err != nil { return errors.New("Error writing settings.json file: " + err.Error()) } } else { DefaultGlobalOnlySettings[name] = v } return nil } // GetGlobalOption returns the global value of the given option func GetGlobalOption(name string) interface{} { return GlobalSettings[name] } var defaultCommonSettings = map[string]interface{}{ "autoindent": true, "autosu": false, "backup": true, "backupdir": "", "basename": false, "colorcolumn": float64(0), "cursorline": true, "diffgutter": false, "encoding": "utf-8", "eofnewline": true, "fastdirty": false, "fileformat": "unix", "filetype": "unknown", "incsearch": true, "ignorecase": true, "indentchar": " ", "keepautoindent": false, "matchbrace": true, "mkparents": false, "permbackup": false, "readonly": false, "rmtrailingws": false, "ruler": true, "relativeruler": false, "savecursor": false, "saveundo": false, "scrollbar": false, "scrollmargin": float64(3), "scrollspeed": float64(2), "smartpaste": true, "softwrap": false, "splitbottom": true, "splitright": true, "statusformatl": "$(filename) $(modified)($(line),$(col)) $(status.paste)| ft:$(opt:filetype) | $(opt:fileformat) | $(opt:encoding)", "statusformatr": "$(bind:ToggleKeyMenu): bindings, $(bind:ToggleHelp): help", "statusline": true, "syntax": true, "tabmovement": false, "tabsize": float64(4), "tabstospaces": false, "useprimary": true, "wordwrap": false, } func GetInfoBarOffset() int { offset := 0 if GetGlobalOption("infobar").(bool) { offset++ } if GetGlobalOption("keymenu").(bool) { offset += 2 } return offset } // DefaultCommonSettings returns the default global settings for micro // Note that colorscheme is a global only option func DefaultCommonSettings() map[string]interface{} { commonsettings := make(map[string]interface{}) for k, v := range defaultCommonSettings { commonsettings[k] = v } return commonsettings } // a list of settings that should only be globally modified and their // default values var DefaultGlobalOnlySettings = map[string]interface{}{ "autosave": float64(0), "clipboard": "external", "colorscheme": "default", "divchars": "|-", "divreverse": true, "infobar": true, "keymenu": false, "mouse": true, "parsecursor": false, "paste": false, "savehistory": true, "sucmd": "sudo", "pluginchannels": []string{"https://raw.githubusercontent.com/micro-editor/plugin-channel/master/channel.json"}, "pluginrepos": []string{}, "xterm": false, } // a list of settings that should never be globally modified var LocalSettings = []string{ "filetype", "readonly", } // DefaultGlobalSettings returns the default global settings for micro // Note that colorscheme is a global only option func DefaultGlobalSettings() map[string]interface{} { globalsettings := make(map[string]interface{}) for k, v := range defaultCommonSettings { globalsettings[k] = v } for k, v := range DefaultGlobalOnlySettings { globalsettings[k] = v } return globalsettings } // DefaultAllSettings returns a map of all settings and their // default values (both common and global settings) func DefaultAllSettings() map[string]interface{} { allsettings := make(map[string]interface{}) for k, v := range defaultCommonSettings { allsettings[k] = v } for k, v := range DefaultGlobalOnlySettings { allsettings[k] = v } return allsettings } // GetNativeValue parses and validates a value for a given option func GetNativeValue(option string, realValue interface{}, value string) (interface{}, error) { var native interface{} kind := reflect.TypeOf(realValue).Kind() if kind == reflect.Bool { b, err := util.ParseBool(value) if err != nil { return nil, ErrInvalidValue } native = b } else if kind == reflect.String { native = value } else if kind == reflect.Float64 { i, err := strconv.Atoi(value) if err != nil { return nil, ErrInvalidValue } native = float64(i) } else { return nil, ErrInvalidValue } if err := OptionIsValid(option, native); err != nil { return nil, err } return native, nil } // OptionIsValid checks if a value is valid for a certain option func OptionIsValid(option string, value interface{}) error { if validator, ok := optionValidators[option]; ok { return validator(option, value) } return nil } // Option validators func validatePositiveValue(option string, value interface{}) error { tabsize, ok := value.(float64) if !ok { return errors.New("Expected numeric type for " + option) } if tabsize < 1 { return errors.New(option + " must be greater than 0") } return nil } func validateNonNegativeValue(option string, value interface{}) error { nativeValue, ok := value.(float64) if !ok { return errors.New("Expected numeric type for " + option) } if nativeValue < 0 { return errors.New(option + " must be non-negative") } return nil } func validateColorscheme(option string, value interface{}) error { colorscheme, ok := value.(string) if !ok { return errors.New("Expected string type for colorscheme") } if !ColorschemeExists(colorscheme) { return errors.New(colorscheme + " is not a valid colorscheme") } return nil } func validateClipboard(option string, value interface{}) error { val, ok := value.(string) if !ok { return errors.New("Expected string type for clipboard") } switch val { case "internal", "external", "terminal": default: return errors.New(option + " must be 'internal', 'external', or 'terminal'") } return nil } func validateLineEnding(option string, value interface{}) error { endingType, ok := value.(string) if !ok { return errors.New("Expected string type for file format") } if endingType != "unix" && endingType != "dos" { return errors.New("File format must be either 'unix' or 'dos'") } return nil } func validateEncoding(option string, value interface{}) error { _, err := htmlindex.Get(value.(string)) return err } micro-2.0.9/internal/display/000077500000000000000000000000001405030104300161025ustar00rootroot00000000000000micro-2.0.9/internal/display/bufwindow.go000066400000000000000000000451241405030104300204430ustar00rootroot00000000000000package display import ( "strconv" runewidth "github.com/mattn/go-runewidth" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/util" "github.com/zyedidia/tcell/v2" ) // The BufWindow provides a way of displaying a certain section // of a buffer type BufWindow struct { *View // Buffer being shown in this window Buf *buffer.Buffer active bool sline *StatusLine bufWidth int bufHeight int gutterOffset int hasMessage bool maxLineNumLength int drawDivider bool } // NewBufWindow creates a new window at a location in the screen with a width and height func NewBufWindow(x, y, width, height int, buf *buffer.Buffer) *BufWindow { w := new(BufWindow) w.View = new(View) w.X, w.Y, w.Width, w.Height = x, y, width, height w.SetBuffer(buf) w.active = true w.sline = NewStatusLine(w) return w } func (w *BufWindow) SetBuffer(b *buffer.Buffer) { w.Buf = b b.OptionCallback = func(option string, nativeValue interface{}) { if option == "softwrap" { if nativeValue.(bool) { w.StartCol = 0 } else { w.StartLine.Row = 0 } w.Relocate() for _, c := range w.Buf.GetCursors() { c.LastVisualX = c.GetVisualX() } } } b.GetVisualX = func(loc buffer.Loc) int { return w.VLocFromLoc(loc).VisualX } } func (w *BufWindow) GetView() *View { return w.View } func (w *BufWindow) SetView(view *View) { w.View = view } func (w *BufWindow) Resize(width, height int) { w.Width, w.Height = width, height w.updateDisplayInfo() w.Relocate() if w.Buf.Settings["softwrap"].(bool) { for _, c := range w.Buf.GetCursors() { c.LastVisualX = c.GetVisualX() } } } func (w *BufWindow) SetActive(b bool) { w.active = b } func (w *BufWindow) IsActive() bool { return w.active } // BufView returns the width, height and x,y location of the actual buffer. // It is not exactly the same as the whole window which also contains gutter, // ruler, scrollbar and statusline. func (w *BufWindow) BufView() View { return View{ X: w.X + w.gutterOffset, Y: w.Y, Width: w.bufWidth, Height: w.bufHeight, StartLine: w.StartLine, StartCol: w.StartCol, } } func (w *BufWindow) updateDisplayInfo() { b := w.Buf w.drawDivider = false if !b.Settings["statusline"].(bool) { _, h := screen.Screen.Size() infoY := h if config.GetGlobalOption("infobar").(bool) { infoY-- } if w.Y+w.Height != infoY { w.drawDivider = true } } w.bufHeight = w.Height if b.Settings["statusline"].(bool) || w.drawDivider { w.bufHeight-- } w.hasMessage = len(b.Messages) > 0 // We need to know the string length of the largest line number // so we can pad appropriately when displaying line numbers w.maxLineNumLength = len(strconv.Itoa(b.LinesNum())) w.gutterOffset = 0 if w.hasMessage { w.gutterOffset += 2 } if b.Settings["diffgutter"].(bool) { w.gutterOffset++ } if b.Settings["ruler"].(bool) { w.gutterOffset += w.maxLineNumLength + 1 } w.bufWidth = w.Width - w.gutterOffset if w.Buf.Settings["scrollbar"].(bool) && w.Buf.LinesNum() > w.Height { w.bufWidth-- } } func (w *BufWindow) getStartInfo(n, lineN int) ([]byte, int, int, *tcell.Style) { tabsize := util.IntOpt(w.Buf.Settings["tabsize"]) width := 0 bloc := buffer.Loc{0, lineN} b := w.Buf.LineBytes(lineN) curStyle := config.DefStyle var s *tcell.Style for len(b) > 0 { r, _, size := util.DecodeCharacter(b) curStyle, found := w.getStyle(curStyle, bloc) if found { s = &curStyle } w := 0 switch r { case '\t': ts := tabsize - (width % tabsize) w = ts default: w = runewidth.RuneWidth(r) } if width+w > n { return b, n - width, bloc.X, s } width += w b = b[size:] bloc.X++ } return b, n - width, bloc.X, s } // Clear resets all cells in this window to the default style func (w *BufWindow) Clear() { for y := 0; y < w.Height; y++ { for x := 0; x < w.Width; x++ { screen.SetContent(w.X+x, w.Y+y, ' ', nil, config.DefStyle) } } } // Relocate moves the view window so that the cursor is in view // This is useful if the user has scrolled far away, and then starts typing // Returns true if the window location is moved func (w *BufWindow) Relocate() bool { b := w.Buf height := w.bufHeight ret := false activeC := w.Buf.GetActiveCursor() scrollmargin := int(b.Settings["scrollmargin"].(float64)) c := w.SLocFromLoc(activeC.Loc) bStart := SLoc{0, 0} bEnd := w.SLocFromLoc(b.End()) if c.LessThan(w.Scroll(w.StartLine, scrollmargin)) && c.GreaterThan(w.Scroll(bStart, scrollmargin-1)) { w.StartLine = w.Scroll(c, -scrollmargin) ret = true } else if c.LessThan(w.StartLine) { w.StartLine = c ret = true } if c.GreaterThan(w.Scroll(w.StartLine, height-1-scrollmargin)) && c.LessThan(w.Scroll(bEnd, -scrollmargin+1)) { w.StartLine = w.Scroll(c, -height+1+scrollmargin) ret = true } else if c.GreaterThan(w.Scroll(bEnd, -scrollmargin)) && c.GreaterThan(w.Scroll(w.StartLine, height-1)) { w.StartLine = w.Scroll(bEnd, -height+1) ret = true } // horizontal relocation (scrolling) if !b.Settings["softwrap"].(bool) { cx := activeC.GetVisualX() rw := runewidth.RuneWidth(activeC.RuneUnder(activeC.X)) if rw == 0 { rw = 1 // tab or newline } if cx < w.StartCol { w.StartCol = cx ret = true } if cx+w.gutterOffset+rw > w.StartCol+w.Width { w.StartCol = cx - w.Width + w.gutterOffset + rw ret = true } } return ret } // LocFromVisual takes a visual location (x and y position) and returns the // position in the buffer corresponding to the visual location // If the requested position does not correspond to a buffer location it returns // the nearest position func (w *BufWindow) LocFromVisual(svloc buffer.Loc) buffer.Loc { vx := svloc.X - w.X - w.gutterOffset if vx < 0 { vx = 0 } vloc := VLoc{ SLoc: w.Scroll(w.StartLine, svloc.Y-w.Y), VisualX: vx + w.StartCol, } return w.LocFromVLoc(vloc) } func (w *BufWindow) drawGutter(vloc *buffer.Loc, bloc *buffer.Loc) { char := ' ' s := config.DefStyle for _, m := range w.Buf.Messages { if m.Start.Y == bloc.Y || m.End.Y == bloc.Y { s = m.Style() char = '>' break } } screen.SetContent(w.X+vloc.X, w.Y+vloc.Y, char, nil, s) vloc.X++ screen.SetContent(w.X+vloc.X, w.Y+vloc.Y, char, nil, s) vloc.X++ } func (w *BufWindow) drawDiffGutter(backgroundStyle tcell.Style, softwrapped bool, vloc *buffer.Loc, bloc *buffer.Loc) { symbol := ' ' styleName := "" switch w.Buf.DiffStatus(bloc.Y) { case buffer.DSAdded: symbol = '\u258C' // Left half block styleName = "diff-added" case buffer.DSModified: symbol = '\u258C' // Left half block styleName = "diff-modified" case buffer.DSDeletedAbove: if !softwrapped { symbol = '\u2594' // Upper one eighth block styleName = "diff-deleted" } } style := backgroundStyle if s, ok := config.Colorscheme[styleName]; ok { foreground, _, _ := s.Decompose() style = style.Foreground(foreground) } screen.SetContent(w.X+vloc.X, w.Y+vloc.Y, symbol, nil, style) vloc.X++ } func (w *BufWindow) drawLineNum(lineNumStyle tcell.Style, softwrapped bool, vloc *buffer.Loc, bloc *buffer.Loc) { cursorLine := w.Buf.GetActiveCursor().Loc.Y var lineInt int if w.Buf.Settings["relativeruler"] == false || cursorLine == bloc.Y { lineInt = bloc.Y + 1 } else { lineInt = bloc.Y - cursorLine } lineNum := strconv.Itoa(util.Abs(lineInt)) // Write the spaces before the line number if necessary for i := 0; i < w.maxLineNumLength-len(lineNum); i++ { screen.SetContent(w.X+vloc.X, w.Y+vloc.Y, ' ', nil, lineNumStyle) vloc.X++ } // Write the actual line number for _, ch := range lineNum { if softwrapped { screen.SetContent(w.X+vloc.X, w.Y+vloc.Y, ' ', nil, lineNumStyle) } else { screen.SetContent(w.X+vloc.X, w.Y+vloc.Y, ch, nil, lineNumStyle) } vloc.X++ } // Write the extra space screen.SetContent(w.X+vloc.X, w.Y+vloc.Y, ' ', nil, lineNumStyle) vloc.X++ } // getStyle returns the highlight style for the given character position // If there is no change to the current highlight style it just returns that func (w *BufWindow) getStyle(style tcell.Style, bloc buffer.Loc) (tcell.Style, bool) { if group, ok := w.Buf.Match(bloc.Y)[bloc.X]; ok { s := config.GetColor(group.String()) return s, true } return style, false } func (w *BufWindow) showCursor(x, y int, main bool) { if w.active { if main { screen.ShowCursor(x, y) } else { screen.ShowFakeCursorMulti(x, y) } } } // displayBuffer draws the buffer being shown in this window on the screen.Screen func (w *BufWindow) displayBuffer() { b := w.Buf if w.Height <= 0 || w.Width <= 0 { return } maxWidth := w.gutterOffset + w.bufWidth if b.ModifiedThisFrame { if b.Settings["diffgutter"].(bool) { b.UpdateDiff(func(synchronous bool) { // If the diff was updated asynchronously, the outer call to // displayBuffer might already be completed and we need to // schedule a redraw in order to display the new diff. // Note that this cannot lead to an infinite recursion // because the modifications were cleared above so there won't // be another call to UpdateDiff when displayBuffer is called // during the redraw. if !synchronous { screen.Redraw() } }) } b.ModifiedThisFrame = false } var matchingBraces []buffer.Loc // bracePairs is defined in buffer.go if b.Settings["matchbrace"].(bool) { for _, bp := range buffer.BracePairs { for _, c := range b.GetCursors() { if c.HasSelection() { continue } curX := c.X curLoc := c.Loc r := c.RuneUnder(curX) rl := c.RuneUnder(curX - 1) if r == bp[0] || r == bp[1] || rl == bp[0] || rl == bp[1] { mb, left, found := b.FindMatchingBrace(bp, curLoc) if found { matchingBraces = append(matchingBraces, mb) if !left { matchingBraces = append(matchingBraces, curLoc) } else { matchingBraces = append(matchingBraces, curLoc.Move(-1, b)) } } } } } } lineNumStyle := config.DefStyle if style, ok := config.Colorscheme["line-number"]; ok { lineNumStyle = style } curNumStyle := config.DefStyle if style, ok := config.Colorscheme["current-line-number"]; ok { if !b.Settings["cursorline"].(bool) { curNumStyle = lineNumStyle } else { curNumStyle = style } } softwrap := b.Settings["softwrap"].(bool) wordwrap := softwrap && b.Settings["wordwrap"].(bool) tabsize := util.IntOpt(b.Settings["tabsize"]) colorcolumn := util.IntOpt(b.Settings["colorcolumn"]) // this represents the current draw position // within the current window vloc := buffer.Loc{X: 0, Y: 0} if softwrap { // the start line may be partially out of the current window vloc.Y = -w.StartLine.Row } // this represents the current draw position in the buffer (char positions) bloc := buffer.Loc{X: -1, Y: w.StartLine.Line} cursors := b.GetCursors() curStyle := config.DefStyle for ; vloc.Y < w.bufHeight; vloc.Y++ { vloc.X = 0 currentLine := false for _, c := range cursors { if bloc.Y == c.Y && w.active { currentLine = true break } } s := lineNumStyle if currentLine { s = curNumStyle } if vloc.Y >= 0 { if w.hasMessage { w.drawGutter(&vloc, &bloc) } if b.Settings["diffgutter"].(bool) { w.drawDiffGutter(s, false, &vloc, &bloc) } if b.Settings["ruler"].(bool) { w.drawLineNum(s, false, &vloc, &bloc) } } else { vloc.X = w.gutterOffset } line, nColsBeforeStart, bslice, startStyle := w.getStartInfo(w.StartCol, bloc.Y) if startStyle != nil { curStyle = *startStyle } bloc.X = bslice draw := func(r rune, combc []rune, style tcell.Style, highlight bool, showcursor bool) { if nColsBeforeStart <= 0 && vloc.Y >= 0 { if highlight { _, origBg, _ := style.Decompose() _, defBg, _ := config.DefStyle.Decompose() // syntax highlighting with non-default background takes precedence // over cursor-line and color-column dontOverrideBackground := origBg != defBg for _, c := range cursors { if c.HasSelection() && (bloc.GreaterEqual(c.CurSelection[0]) && bloc.LessThan(c.CurSelection[1]) || bloc.LessThan(c.CurSelection[0]) && bloc.GreaterEqual(c.CurSelection[1])) { // The current character is selected style = config.DefStyle.Reverse(true) if s, ok := config.Colorscheme["selection"]; ok { style = s } } if b.Settings["cursorline"].(bool) && w.active && !dontOverrideBackground && !c.HasSelection() && c.Y == bloc.Y { if s, ok := config.Colorscheme["cursor-line"]; ok { fg, _, _ := s.Decompose() style = style.Background(fg) } } } for _, m := range b.Messages { if bloc.GreaterEqual(m.Start) && bloc.LessThan(m.End) || bloc.LessThan(m.End) && bloc.GreaterEqual(m.Start) { style = style.Underline(true) break } } if r == '\t' { indentrunes := []rune(b.Settings["indentchar"].(string)) // if empty indentchar settings, use space if len(indentrunes) == 0 { indentrunes = []rune{' '} } r = indentrunes[0] if s, ok := config.Colorscheme["indent-char"]; ok && r != ' ' { fg, _, _ := s.Decompose() style = style.Foreground(fg) } } if s, ok := config.Colorscheme["color-column"]; ok { if colorcolumn != 0 && vloc.X-w.gutterOffset+w.StartCol == colorcolumn && !dontOverrideBackground { fg, _, _ := s.Decompose() style = style.Background(fg) } } for _, mb := range matchingBraces { if mb.X == bloc.X && mb.Y == bloc.Y { style = style.Underline(true) } } } screen.SetContent(w.X+vloc.X, w.Y+vloc.Y, r, combc, style) if showcursor { for _, c := range cursors { if c.X == bloc.X && c.Y == bloc.Y && !c.HasSelection() { w.showCursor(w.X+vloc.X, w.Y+vloc.Y, c.Num == 0) } } } } if nColsBeforeStart <= 0 { vloc.X++ } nColsBeforeStart-- } wrap := func() { vloc.X = 0 if w.hasMessage { w.drawGutter(&vloc, &bloc) } if b.Settings["diffgutter"].(bool) { w.drawDiffGutter(lineNumStyle, true, &vloc, &bloc) } // This will draw an empty line number because the current line is wrapped if b.Settings["ruler"].(bool) { w.drawLineNum(lineNumStyle, true, &vloc, &bloc) } } type glyph struct { r rune combc []rune style tcell.Style width int } var word []glyph if wordwrap { word = make([]glyph, 0, w.bufWidth) } else { word = make([]glyph, 0, 1) } wordwidth := 0 totalwidth := w.StartCol - nColsBeforeStart for len(line) > 0 { r, combc, size := util.DecodeCharacter(line) line = line[size:] loc := buffer.Loc{X: bloc.X + len(word), Y: bloc.Y} curStyle, _ = w.getStyle(curStyle, loc) width := 0 switch r { case '\t': ts := tabsize - (totalwidth % tabsize) width = util.Min(ts, maxWidth-vloc.X) totalwidth += ts default: width = runewidth.RuneWidth(r) totalwidth += width } word = append(word, glyph{r, combc, curStyle, width}) wordwidth += width // Collect a complete word to know its width. // If wordwrap is off, every single character is a complete "word". if wordwrap { if !util.IsWhitespace(r) && len(line) > 0 && wordwidth < w.bufWidth { continue } } // If a word (or just a wide rune) does not fit in the window if vloc.X+wordwidth > maxWidth && vloc.X > w.gutterOffset { for vloc.X < maxWidth { draw(' ', nil, config.DefStyle, false, false) } // We either stop or we wrap to draw the word in the next line if !softwrap { break } else { vloc.Y++ if vloc.Y >= w.bufHeight { break } wrap() } } for _, r := range word { draw(r.r, r.combc, r.style, true, true) // Draw any extra characters either spaces for tabs or @ for incomplete wide runes if r.width > 1 { char := ' ' if r.r != '\t' { char = '@' } for i := 1; i < r.width; i++ { draw(char, nil, r.style, true, false) } } bloc.X++ } word = word[:0] wordwidth = 0 // If we reach the end of the window then we either stop or we wrap for softwrap if vloc.X >= maxWidth { if !softwrap { break } else { vloc.Y++ if vloc.Y >= w.bufHeight { break } wrap() } } } style := config.DefStyle for _, c := range cursors { if b.Settings["cursorline"].(bool) && w.active && !c.HasSelection() && c.Y == bloc.Y { if s, ok := config.Colorscheme["cursor-line"]; ok { fg, _, _ := s.Decompose() style = style.Background(fg) } } } for i := vloc.X; i < maxWidth; i++ { curStyle := style if s, ok := config.Colorscheme["color-column"]; ok { if colorcolumn != 0 && i-w.gutterOffset+w.StartCol == colorcolumn { fg, _, _ := s.Decompose() curStyle = style.Background(fg) } } screen.SetContent(i+w.X, vloc.Y+w.Y, ' ', nil, curStyle) } if vloc.X != maxWidth { // Display newline within a selection draw(' ', nil, config.DefStyle, true, true) } bloc.X = w.StartCol bloc.Y++ if bloc.Y >= b.LinesNum() { break } } } func (w *BufWindow) displayStatusLine() { if w.Buf.Settings["statusline"].(bool) { w.sline.Display() } else if w.drawDivider { divchars := config.GetGlobalOption("divchars").(string) if util.CharacterCountInString(divchars) != 2 { divchars = "|-" } _, _, size := util.DecodeCharacterInString(divchars) divchar, combc, _ := util.DecodeCharacterInString(divchars[size:]) dividerStyle := config.DefStyle if style, ok := config.Colorscheme["divider"]; ok { dividerStyle = style } divreverse := config.GetGlobalOption("divreverse").(bool) if divreverse { dividerStyle = dividerStyle.Reverse(true) } for x := w.X; x < w.X+w.Width; x++ { screen.SetContent(x, w.Y+w.Height-1, divchar, combc, dividerStyle) } } } func (w *BufWindow) displayScrollBar() { if w.Buf.Settings["scrollbar"].(bool) && w.Buf.LinesNum() > w.Height { scrollX := w.X + w.Width - 1 barsize := int(float64(w.Height) / float64(w.Buf.LinesNum()) * float64(w.Height)) if barsize < 1 { barsize = 1 } barstart := w.Y + int(float64(w.StartLine.Line)/float64(w.Buf.LinesNum())*float64(w.Height)) scrollBarStyle := config.DefStyle.Reverse(true) if style, ok := config.Colorscheme["scrollbar"]; ok { scrollBarStyle = style } for y := barstart; y < util.Min(barstart+barsize, w.Y+w.bufHeight); y++ { screen.SetContent(scrollX, y, '|', nil, scrollBarStyle) } } } // Display displays the buffer and the statusline func (w *BufWindow) Display() { w.updateDisplayInfo() w.displayStatusLine() w.displayScrollBar() w.displayBuffer() } micro-2.0.9/internal/display/infowindow.go000066400000000000000000000153521405030104300206220ustar00rootroot00000000000000package display import ( runewidth "github.com/mattn/go-runewidth" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/info" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/util" "github.com/zyedidia/tcell/v2" ) type InfoWindow struct { *info.InfoBuf *View hscroll int } func (i *InfoWindow) errStyle() tcell.Style { errStyle := config.DefStyle. Foreground(tcell.ColorBlack). Background(tcell.ColorMaroon) if _, ok := config.Colorscheme["error-message"]; ok { errStyle = config.Colorscheme["error-message"] } return errStyle } func (i *InfoWindow) defStyle() tcell.Style { defStyle := config.DefStyle if _, ok := config.Colorscheme["message"]; ok { defStyle = config.Colorscheme["message"] } return defStyle } func NewInfoWindow(b *info.InfoBuf) *InfoWindow { iw := new(InfoWindow) iw.InfoBuf = b iw.View = new(View) iw.Width, iw.Y = screen.Screen.Size() iw.Y-- return iw } func (i *InfoWindow) Resize(w, h int) { i.Width = w i.Y = h } func (i *InfoWindow) SetBuffer(b *buffer.Buffer) { i.InfoBuf.Buffer = b } func (i *InfoWindow) Relocate() bool { return false } func (i *InfoWindow) GetView() *View { return i.View } func (i *InfoWindow) SetView(v *View) {} func (i *InfoWindow) SetActive(b bool) {} func (i *InfoWindow) IsActive() bool { return true } func (i *InfoWindow) LocFromVisual(vloc buffer.Loc) buffer.Loc { c := i.Buffer.GetActiveCursor() l := i.Buffer.LineBytes(0) n := util.CharacterCountInString(i.Msg) return buffer.Loc{c.GetCharPosInLine(l, vloc.X-n), 0} } func (i *InfoWindow) BufView() View { return View{ X: 0, Y: i.Y, Width: i.Width, Height: 1, StartLine: SLoc{0, 0}, StartCol: 0, } } func (i *InfoWindow) Scroll(s SLoc, n int) SLoc { return s } func (i *InfoWindow) Diff(s1, s2 SLoc) int { return 0 } func (i *InfoWindow) SLocFromLoc(loc buffer.Loc) SLoc { return SLoc{0, 0} } func (i *InfoWindow) VLocFromLoc(loc buffer.Loc) VLoc { return VLoc{SLoc{0, 0}, loc.X} } func (i *InfoWindow) LocFromVLoc(vloc VLoc) buffer.Loc { return buffer.Loc{vloc.VisualX, 0} } func (i *InfoWindow) Clear() { for x := 0; x < i.Width; x++ { screen.SetContent(x, i.Y, ' ', nil, i.defStyle()) } } func (i *InfoWindow) displayBuffer() { b := i.Buffer line := b.LineBytes(0) activeC := b.GetActiveCursor() blocX := 0 vlocX := util.CharacterCountInString(i.Msg) tabsize := 4 line, nColsBeforeStart, bslice := util.SliceVisualEnd(line, blocX, tabsize) blocX = bslice draw := func(r rune, combc []rune, style tcell.Style) { if nColsBeforeStart <= 0 { bloc := buffer.Loc{X: blocX, Y: 0} if activeC.HasSelection() && (bloc.GreaterEqual(activeC.CurSelection[0]) && bloc.LessThan(activeC.CurSelection[1]) || bloc.LessThan(activeC.CurSelection[0]) && bloc.GreaterEqual(activeC.CurSelection[1])) { // The current character is selected style = i.defStyle().Reverse(true) if s, ok := config.Colorscheme["selection"]; ok { style = s } } rw := runewidth.RuneWidth(r) for j := 0; j < rw; j++ { c := r if j > 0 { c = ' ' combc = nil } screen.SetContent(vlocX, i.Y, c, combc, style) } vlocX++ } nColsBeforeStart-- } totalwidth := blocX - nColsBeforeStart for len(line) > 0 { curVX := vlocX curBX := blocX r, combc, size := util.DecodeCharacter(line) draw(r, combc, i.defStyle()) width := 0 char := ' ' switch r { case '\t': ts := tabsize - (totalwidth % tabsize) width = ts default: width = runewidth.RuneWidth(r) char = '@' } blocX++ line = line[size:] // Draw any extra characters either spaces for tabs or @ for incomplete wide runes if width > 1 { for j := 1; j < width; j++ { draw(char, nil, i.defStyle()) } } if activeC.X == curBX { screen.ShowCursor(curVX, i.Y) } totalwidth += width if vlocX >= i.Width { break } } if activeC.X == blocX { screen.ShowCursor(vlocX, i.Y) } } var keydisplay = []string{"^Q Quit, ^S Save, ^O Open, ^G Help, ^E Command Bar, ^K Cut Line", "^F Find, ^Z Undo, ^Y Redo, ^A Select All, ^D Duplicate Line, ^T New Tab"} func (i *InfoWindow) displayKeyMenu() { // TODO: maybe make this based on the actual keybindings for y := 0; y < len(keydisplay); y++ { for x := 0; x < i.Width; x++ { if x < len(keydisplay[y]) { screen.SetContent(x, i.Y-len(keydisplay)+y, rune(keydisplay[y][x]), nil, i.defStyle()) } else { screen.SetContent(x, i.Y-len(keydisplay)+y, ' ', nil, i.defStyle()) } } } } func (i *InfoWindow) totalSize() int { sum := 0 for _, n := range i.Suggestions { sum += runewidth.StringWidth(n) + 1 } return sum } func (i *InfoWindow) scrollToSuggestion() { x := 0 s := i.totalSize() for j, n := range i.Suggestions { c := util.CharacterCountInString(n) if j == i.CurSuggestion { if x+c >= i.hscroll+i.Width { i.hscroll = util.Clamp(x+c+1-i.Width, 0, s-i.Width) } else if x < i.hscroll { i.hscroll = util.Clamp(x-1, 0, s-i.Width) } break } x += c + 1 } if s-i.Width <= 0 { i.hscroll = 0 } } func (i *InfoWindow) Display() { if i.HasPrompt || config.GlobalSettings["infobar"].(bool) { i.Clear() x := 0 if config.GetGlobalOption("keymenu").(bool) { i.displayKeyMenu() } if !i.HasPrompt && !i.HasMessage && !i.HasError { return } i.Clear() style := i.defStyle() if i.HasError { style = i.errStyle() } display := i.Msg for _, c := range display { screen.SetContent(x, i.Y, c, nil, style) x += runewidth.RuneWidth(c) } if i.HasPrompt { i.displayBuffer() } } if i.HasSuggestions && len(i.Suggestions) > 1 { i.scrollToSuggestion() x := -i.hscroll done := false statusLineStyle := config.DefStyle.Reverse(true) if style, ok := config.Colorscheme["statusline"]; ok { statusLineStyle = style } keymenuOffset := 0 if config.GetGlobalOption("keymenu").(bool) { keymenuOffset = len(keydisplay) } draw := func(r rune, s tcell.Style) { y := i.Y - keymenuOffset - 1 rw := runewidth.RuneWidth(r) for j := 0; j < rw; j++ { c := r if j > 0 { c = ' ' } if x == i.Width-1 && !done { screen.SetContent(i.Width-1, y, '>', nil, s) x++ break } else if x == 0 && i.hscroll > 0 { screen.SetContent(0, y, '<', nil, s) } else if x >= 0 && x < i.Width { screen.SetContent(x, y, c, nil, s) } x++ } } for j, s := range i.Suggestions { style := statusLineStyle if i.CurSuggestion == j { style = style.Reverse(true) } for _, r := range s { draw(r, style) // screen.SetContent(x, i.Y-keymenuOffset-1, r, nil, style) } draw(' ', statusLineStyle) } for x < i.Width { draw(' ', statusLineStyle) } } } micro-2.0.9/internal/display/softwrap.go000066400000000000000000000157451405030104300203120ustar00rootroot00000000000000package display import ( runewidth "github.com/mattn/go-runewidth" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/util" ) // SLoc represents a vertical scrolling location, i.e. a location of a visual line // in the buffer. When softwrap is enabled, a buffer line may be displayed as // multiple visual lines (rows). So SLoc stores a number of a line in the buffer // and a number of a row within this line. type SLoc struct { Line, Row int } // LessThan returns true if s is less b func (s SLoc) LessThan(b SLoc) bool { if s.Line < b.Line { return true } return s.Line == b.Line && s.Row < b.Row } // GreaterThan returns true if s is bigger than b func (s SLoc) GreaterThan(b SLoc) bool { if s.Line > b.Line { return true } return s.Line == b.Line && s.Row > b.Row } // VLoc represents a location in the buffer as a visual location in the // linewrapped buffer. type VLoc struct { SLoc VisualX int } type SoftWrap interface { Scroll(s SLoc, n int) SLoc Diff(s1, s2 SLoc) int SLocFromLoc(loc buffer.Loc) SLoc VLocFromLoc(loc buffer.Loc) VLoc LocFromVLoc(vloc VLoc) buffer.Loc } func (w *BufWindow) getVLocFromLoc(loc buffer.Loc) VLoc { vloc := VLoc{SLoc: SLoc{loc.Y, 0}, VisualX: 0} if loc.X <= 0 { return vloc } if w.bufWidth <= 0 { return vloc } wordwrap := w.Buf.Settings["wordwrap"].(bool) tabsize := util.IntOpt(w.Buf.Settings["tabsize"]) line := w.Buf.LineBytes(loc.Y) x := 0 totalwidth := 0 wordwidth := 0 wordoffset := 0 for len(line) > 0 { r, _, size := util.DecodeCharacter(line) line = line[size:] width := 0 switch r { case '\t': ts := tabsize - (totalwidth % tabsize) width = util.Min(ts, w.bufWidth-vloc.VisualX) totalwidth += ts default: width = runewidth.RuneWidth(r) totalwidth += width } wordwidth += width // Collect a complete word to know its width. // If wordwrap is off, every single character is a complete "word". if wordwrap { if !util.IsWhitespace(r) && len(line) > 0 && wordwidth < w.bufWidth { if x < loc.X { wordoffset += width x++ } continue } } // If a word (or just a wide rune) does not fit in the window if vloc.VisualX+wordwidth > w.bufWidth && vloc.VisualX > 0 { vloc.Row++ vloc.VisualX = 0 } if x == loc.X { vloc.VisualX += wordoffset return vloc } x++ vloc.VisualX += wordwidth wordwidth = 0 wordoffset = 0 if vloc.VisualX >= w.bufWidth { vloc.Row++ vloc.VisualX = 0 } } return vloc } func (w *BufWindow) getLocFromVLoc(svloc VLoc) buffer.Loc { loc := buffer.Loc{X: 0, Y: svloc.Line} if w.bufWidth <= 0 { return loc } wordwrap := w.Buf.Settings["wordwrap"].(bool) tabsize := util.IntOpt(w.Buf.Settings["tabsize"]) line := w.Buf.LineBytes(svloc.Line) vloc := VLoc{SLoc: SLoc{svloc.Line, 0}, VisualX: 0} totalwidth := 0 var widths []int if wordwrap { widths = make([]int, 0, w.bufWidth) } else { widths = make([]int, 0, 1) } wordwidth := 0 for len(line) > 0 { r, _, size := util.DecodeCharacter(line) line = line[size:] width := 0 switch r { case '\t': ts := tabsize - (totalwidth % tabsize) width = util.Min(ts, w.bufWidth-vloc.VisualX) totalwidth += ts default: width = runewidth.RuneWidth(r) totalwidth += width } widths = append(widths, width) wordwidth += width // Collect a complete word to know its width. // If wordwrap is off, every single character is a complete "word". if wordwrap { if !util.IsWhitespace(r) && len(line) > 0 && wordwidth < w.bufWidth { continue } } // If a word (or just a wide rune) does not fit in the window if vloc.VisualX+wordwidth > w.bufWidth && vloc.VisualX > 0 { if vloc.Row == svloc.Row { if wordwrap { // it's a word, not a wide rune loc.X-- } return loc } vloc.Row++ vloc.VisualX = 0 } for i := range widths { vloc.VisualX += widths[i] if vloc.Row == svloc.Row && vloc.VisualX > svloc.VisualX { return loc } loc.X++ } widths = widths[:0] wordwidth = 0 if vloc.VisualX >= w.bufWidth { vloc.Row++ vloc.VisualX = 0 } } return loc } func (w *BufWindow) getRowCount(line int) int { eol := buffer.Loc{X: util.CharacterCount(w.Buf.LineBytes(line)), Y: line} return w.getVLocFromLoc(eol).Row + 1 } func (w *BufWindow) scrollUp(s SLoc, n int) SLoc { for n > 0 { if n <= s.Row { s.Row -= n n = 0 } else if s.Line > 0 { s.Line-- n -= s.Row + 1 s.Row = w.getRowCount(s.Line) - 1 } else { s.Row = 0 break } } return s } func (w *BufWindow) scrollDown(s SLoc, n int) SLoc { for n > 0 { rc := w.getRowCount(s.Line) if n < rc-s.Row { s.Row += n n = 0 } else if s.Line < w.Buf.LinesNum()-1 { s.Line++ n -= rc - s.Row s.Row = 0 } else { s.Row = rc - 1 break } } return s } func (w *BufWindow) scroll(s SLoc, n int) SLoc { if n < 0 { return w.scrollUp(s, -n) } return w.scrollDown(s, n) } func (w *BufWindow) diff(s1, s2 SLoc) int { n := 0 for s1.LessThan(s2) { if s1.Line < s2.Line { n += w.getRowCount(s1.Line) - s1.Row s1.Line++ s1.Row = 0 } else { n += s2.Row - s1.Row s1.Row = s2.Row } } return n } // Scroll returns the location which is n visual lines below the location s // i.e. the result of scrolling n lines down. n can be negative, // which means scrolling up. The returned location is guaranteed to be // within the buffer boundaries. func (w *BufWindow) Scroll(s SLoc, n int) SLoc { if !w.Buf.Settings["softwrap"].(bool) { s.Line += n if s.Line < 0 { s.Line = 0 } if s.Line > w.Buf.LinesNum()-1 { s.Line = w.Buf.LinesNum() - 1 } return s } return w.scroll(s, n) } // Diff returns the difference (the vertical distance) between two SLocs. func (w *BufWindow) Diff(s1, s2 SLoc) int { if !w.Buf.Settings["softwrap"].(bool) { return s2.Line - s1.Line } if s1.GreaterThan(s2) { return -w.diff(s2, s1) } return w.diff(s1, s2) } // SLocFromLoc takes a position in the buffer and returns the location // of the visual line containing this position. func (w *BufWindow) SLocFromLoc(loc buffer.Loc) SLoc { if !w.Buf.Settings["softwrap"].(bool) { return SLoc{loc.Y, 0} } return w.getVLocFromLoc(loc).SLoc } // VLocFromLoc takes a position in the buffer and returns the corresponding // visual location in the linewrapped buffer. func (w *BufWindow) VLocFromLoc(loc buffer.Loc) VLoc { if !w.Buf.Settings["softwrap"].(bool) { tabsize := util.IntOpt(w.Buf.Settings["tabsize"]) visualx := util.StringWidth(w.Buf.LineBytes(loc.Y), loc.X, tabsize) return VLoc{SLoc{loc.Y, 0}, visualx} } return w.getVLocFromLoc(loc) } // LocFromVLoc takes a visual location in the linewrapped buffer and returns // the position in the buffer corresponding to this visual location. func (w *BufWindow) LocFromVLoc(vloc VLoc) buffer.Loc { if !w.Buf.Settings["softwrap"].(bool) { tabsize := util.IntOpt(w.Buf.Settings["tabsize"]) x := util.GetCharPosInLine(w.Buf.LineBytes(vloc.Line), vloc.VisualX, tabsize) return buffer.Loc{x, vloc.Line} } return w.getLocFromVLoc(vloc) } micro-2.0.9/internal/display/statusline.go000066400000000000000000000114561405030104300206330ustar00rootroot00000000000000package display import ( "bytes" "fmt" "regexp" "strconv" "strings" luar "layeh.com/gopher-luar" runewidth "github.com/mattn/go-runewidth" lua "github.com/yuin/gopher-lua" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" ulua "github.com/zyedidia/micro/v2/internal/lua" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/util" ) // StatusLine represents the information line at the bottom // of each window // It gives information such as filename, whether the file has been // modified, filetype, cursor location type StatusLine struct { Info map[string]func(*buffer.Buffer) string win *BufWindow } var statusInfo = map[string]func(*buffer.Buffer) string{ "filename": func(b *buffer.Buffer) string { return b.GetName() }, "line": func(b *buffer.Buffer) string { return strconv.Itoa(b.GetActiveCursor().Y + 1) }, "col": func(b *buffer.Buffer) string { return strconv.Itoa(b.GetActiveCursor().X + 1) }, "modified": func(b *buffer.Buffer) string { if b.Modified() { return "+ " } if b.Type.Readonly { return "[ro] " } return "" }, } func SetStatusInfoFnLua(fn string) { luaFn := strings.Split(fn, ".") if len(luaFn) <= 1 { return } plName, plFn := luaFn[0], luaFn[1] pl := config.FindPlugin(plName) if pl == nil { return } statusInfo[fn] = func(b *buffer.Buffer) string { if pl == nil || !pl.IsEnabled() { return "" } val, err := pl.Call(plFn, luar.New(ulua.L, b)) if err == nil { if v, ok := val.(lua.LString); !ok { screen.TermMessage(plFn, "should return a string") return "" } else { return string(v) } } return "" } } // NewStatusLine returns a statusline bound to a window func NewStatusLine(win *BufWindow) *StatusLine { s := new(StatusLine) s.win = win return s } // FindOpt finds a given option in the current buffer's settings func (s *StatusLine) FindOpt(opt string) interface{} { if val, ok := s.win.Buf.Settings[opt]; ok { return val } return "null" } var formatParser = regexp.MustCompile(`\$\(.+?\)`) // Display draws the statusline to the screen func (s *StatusLine) Display() { // We'll draw the line at the lowest line in the window y := s.win.Height + s.win.Y - 1 winX := s.win.X b := s.win.Buf // autocomplete suggestions (for the buffer, not for the infowindow) if b.HasSuggestions && len(b.Suggestions) > 1 { statusLineStyle := config.DefStyle.Reverse(true) if style, ok := config.Colorscheme["statusline"]; ok { statusLineStyle = style } x := 0 for j, sug := range b.Suggestions { style := statusLineStyle if b.CurSuggestion == j { style = style.Reverse(true) } for _, r := range sug { screen.SetContent(winX+x, y, r, nil, style) x++ if x >= s.win.Width { return } } screen.SetContent(winX+x, y, ' ', nil, statusLineStyle) x++ if x >= s.win.Width { return } } for x < s.win.Width { screen.SetContent(winX+x, y, ' ', nil, statusLineStyle) x++ } return } formatter := func(match []byte) []byte { name := match[2 : len(match)-1] if bytes.HasPrefix(name, []byte("opt")) { option := name[4:] return []byte(fmt.Sprint(s.FindOpt(string(option)))) } else if bytes.HasPrefix(name, []byte("bind")) { binding := string(name[5:]) for k, v := range config.Bindings["buffer"] { if v == binding { return []byte(k) } } return []byte("null") } else { if fn, ok := statusInfo[string(name)]; ok { return []byte(fn(s.win.Buf)) } return []byte{} } } leftText := []byte(s.win.Buf.Settings["statusformatl"].(string)) leftText = formatParser.ReplaceAllFunc(leftText, formatter) rightText := []byte(s.win.Buf.Settings["statusformatr"].(string)) rightText = formatParser.ReplaceAllFunc(rightText, formatter) statusLineStyle := config.DefStyle.Reverse(true) if style, ok := config.Colorscheme["statusline"]; ok { statusLineStyle = style } leftLen := util.StringWidth(leftText, util.CharacterCount(leftText), 1) rightLen := util.StringWidth(rightText, util.CharacterCount(rightText), 1) for x := 0; x < s.win.Width; x++ { if x < leftLen { r, combc, size := util.DecodeCharacter(leftText) leftText = leftText[size:] rw := runewidth.RuneWidth(r) for j := 0; j < rw; j++ { c := r if j > 0 { c = ' ' combc = nil x++ } screen.SetContent(winX+x, y, c, combc, statusLineStyle) } } else if x >= s.win.Width-rightLen && x < rightLen+s.win.Width-rightLen { r, combc, size := util.DecodeCharacter(rightText) rightText = rightText[size:] rw := runewidth.RuneWidth(r) for j := 0; j < rw; j++ { c := r if j > 0 { c = ' ' combc = nil x++ } screen.SetContent(winX+x, y, c, combc, statusLineStyle) } } else { screen.SetContent(winX+x, y, ' ', nil, statusLineStyle) } } } micro-2.0.9/internal/display/tabwindow.go000066400000000000000000000054451405030104300204370ustar00rootroot00000000000000package display import ( runewidth "github.com/mattn/go-runewidth" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/util" ) type TabWindow struct { Names []string active int Y int Width int hscroll int } func NewTabWindow(w int, y int) *TabWindow { tw := new(TabWindow) tw.Width = w tw.Y = y return tw } func (w *TabWindow) Resize(width, height int) { w.Width = width } func (w *TabWindow) LocFromVisual(vloc buffer.Loc) int { x := -w.hscroll for i, n := range w.Names { x++ s := util.CharacterCountInString(n) if vloc.Y == w.Y && vloc.X < x+s { return i } x += s x += 3 if x >= w.Width { break } } return -1 } func (w *TabWindow) Scroll(amt int) { w.hscroll += amt s := w.TotalSize() w.hscroll = util.Clamp(w.hscroll, 0, s-w.Width) if s-w.Width <= 0 { w.hscroll = 0 } } func (w *TabWindow) TotalSize() int { sum := 2 for _, n := range w.Names { sum += runewidth.StringWidth(n) + 4 } return sum - 4 } func (w *TabWindow) Active() int { return w.active } func (w *TabWindow) SetActive(a int) { w.active = a x := 2 s := w.TotalSize() for i, n := range w.Names { c := util.CharacterCountInString(n) if i == a { if x+c >= w.hscroll+w.Width { w.hscroll = util.Clamp(x+c+1-w.Width, 0, s-w.Width) } else if x < w.hscroll { w.hscroll = util.Clamp(x-4, 0, s-w.Width) } break } x += c + 4 } if s-w.Width <= 0 { w.hscroll = 0 } } func (w *TabWindow) Display() { x := -w.hscroll done := false tabBarStyle := config.DefStyle.Reverse(true) if style, ok := config.Colorscheme["tabbar"]; ok { tabBarStyle = style } tabBarActiveStyle := tabBarStyle if style, ok := config.Colorscheme["tabbar.active"]; ok { tabBarActiveStyle = style } draw := func(r rune, n int, active bool) { style := tabBarStyle if active { style = tabBarActiveStyle } for i := 0; i < n; i++ { rw := runewidth.RuneWidth(r) for j := 0; j < rw; j++ { c := r if j > 0 { c = ' ' } if x == w.Width-1 && !done { screen.SetContent(w.Width-1, w.Y, '>', nil, tabBarStyle) x++ break } else if x == 0 && w.hscroll > 0 { screen.SetContent(0, w.Y, '<', nil, tabBarStyle) } else if x >= 0 && x < w.Width { screen.SetContent(x, w.Y, c, nil, style) } x++ } } } for i, n := range w.Names { if i == w.active { draw('[', 1, true) } else { draw(' ', 1, false) } for _, c := range n { draw(c, 1, i == w.active) } if i == len(w.Names)-1 { done = true } if i == w.active { draw(']', 1, true) draw(' ', 2, true) } else { draw(' ', 3, false) } if x >= w.Width { break } } if x < w.Width { draw(' ', w.Width-x, false) } } micro-2.0.9/internal/display/termwindow.go000066400000000000000000000052741405030104300206400ustar00rootroot00000000000000package display import ( "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/shell" "github.com/zyedidia/micro/v2/internal/util" "github.com/zyedidia/tcell/v2" "github.com/zyedidia/terminal" ) type TermWindow struct { *View *shell.Terminal active bool } func NewTermWindow(x, y, w, h int, term *shell.Terminal) *TermWindow { tw := new(TermWindow) tw.View = new(View) tw.Terminal = term tw.X, tw.Y = x, y tw.Resize(w, h) return tw } // Resize informs the terminal of a resize event func (w *TermWindow) Resize(width, height int) { if config.GetGlobalOption("statusline").(bool) { height-- } w.Term.Resize(width, height) w.Width, w.Height = width, height } func (w *TermWindow) SetActive(b bool) { w.active = b } func (w *TermWindow) IsActive() bool { return w.active } func (w *TermWindow) LocFromVisual(vloc buffer.Loc) buffer.Loc { return vloc } func (w *TermWindow) Clear() { for y := 0; y < w.Height; y++ { for x := 0; x < w.Width; x++ { screen.SetContent(w.X+x, w.Y+y, ' ', nil, config.DefStyle) } } } func (w *TermWindow) Relocate() bool { return true } func (w *TermWindow) GetView() *View { return w.View } func (w *TermWindow) SetView(v *View) { w.View = v } // Display displays this terminal in a view func (w *TermWindow) Display() { w.State.Lock() defer w.State.Unlock() var l buffer.Loc for y := 0; y < w.Height; y++ { for x := 0; x < w.Width; x++ { l.X, l.Y = x, y c, f, b := w.State.Cell(x, y) fg, bg := int(f), int(b) if f == terminal.DefaultFG { fg = int(tcell.ColorDefault) } if b == terminal.DefaultBG { bg = int(tcell.ColorDefault) } st := tcell.StyleDefault.Foreground(config.GetColor256(fg)).Background(config.GetColor256(bg)) if l.LessThan(w.Selection[1]) && l.GreaterEqual(w.Selection[0]) || l.LessThan(w.Selection[0]) && l.GreaterEqual(w.Selection[1]) { st = st.Reverse(true) } screen.SetContent(w.X+x, w.Y+y, c, nil, st) } } if config.GetGlobalOption("statusline").(bool) { statusLineStyle := config.DefStyle.Reverse(true) if style, ok := config.Colorscheme["statusline"]; ok { statusLineStyle = style } text := []byte(w.Name()) textLen := util.CharacterCount(text) for x := 0; x < w.Width; x++ { if x < textLen { r, combc, size := util.DecodeCharacter(text) text = text[size:] screen.SetContent(w.X+x, w.Y+w.Height, r, combc, statusLineStyle) } else { screen.SetContent(w.X+x, w.Y+w.Height, ' ', nil, statusLineStyle) } } } if w.State.CursorVisible() && w.active { curx, cury := w.State.Cursor() screen.ShowCursor(curx+w.X, cury+w.Y) } } micro-2.0.9/internal/display/uiwindow.go000066400000000000000000000035601405030104300203020ustar00rootroot00000000000000package display import ( "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/util" "github.com/zyedidia/micro/v2/internal/views" ) type UIWindow struct { root *views.Node } func NewUIWindow(n *views.Node) *UIWindow { uw := new(UIWindow) uw.root = n return uw } func (w *UIWindow) drawNode(n *views.Node) { cs := n.Children() dividerStyle := config.DefStyle if style, ok := config.Colorscheme["divider"]; ok { dividerStyle = style } divchars := config.GetGlobalOption("divchars").(string) if util.CharacterCountInString(divchars) != 2 { divchars = "|-" } divchar, combc, _ := util.DecodeCharacterInString(divchars) divreverse := config.GetGlobalOption("divreverse").(bool) if divreverse { dividerStyle = dividerStyle.Reverse(true) } for i, c := range cs { if c.Kind == views.STVert { if i != len(cs)-1 { for h := 0; h < c.H; h++ { screen.SetContent(c.X+c.W, c.Y+h, divchar, combc, dividerStyle) } } } w.drawNode(c) } } func (w *UIWindow) Display() { w.drawNode(w.root) } func (w *UIWindow) GetMouseSplitNode(vloc buffer.Loc) *views.Node { var mouseLoc func(*views.Node) *views.Node mouseLoc = func(n *views.Node) *views.Node { cs := n.Children() for i, c := range cs { if c.Kind == views.STVert { if i != len(cs)-1 { if vloc.X == c.X+c.W && vloc.Y >= c.Y && vloc.Y < c.Y+c.H { return c } } } else if c.Kind == views.STHoriz { if i != len(cs)-1 { if vloc.Y == c.Y+c.H-1 && vloc.X >= c.X && vloc.X < c.X+c.W { return c } } } } for _, c := range cs { m := mouseLoc(c) if m != nil { return m } } return nil } return mouseLoc(w.root) } func (w *UIWindow) Resize(width, height int) {} func (w *UIWindow) SetActive(b bool) {} micro-2.0.9/internal/display/window.go000066400000000000000000000014061405030104300177410ustar00rootroot00000000000000package display import ( "github.com/zyedidia/micro/v2/internal/buffer" ) type View struct { X, Y int // X,Y location of the view Width, Height int // Width and height of the view // Start line of the view (for vertical scroll) StartLine SLoc // Start column of the view (for horizontal scroll) // note that since the starting column of every line is different if the view // is scrolled, StartCol is a visual index (will be the same for every line) StartCol int } type Window interface { Display() Clear() Relocate() bool GetView() *View SetView(v *View) LocFromVisual(vloc buffer.Loc) buffer.Loc Resize(w, h int) SetActive(b bool) IsActive() bool } type BWindow interface { Window SoftWrap SetBuffer(b *buffer.Buffer) BufView() View } micro-2.0.9/internal/info/000077500000000000000000000000001405030104300153705ustar00rootroot00000000000000micro-2.0.9/internal/info/gutter.go000066400000000000000000000006151405030104300172330ustar00rootroot00000000000000package info // A GutterMessage is a message displayed on the side of the editor type GutterMessage struct { lineNum int msg string kind int } // These are the different types of messages const ( // GutterInfo represents a simple info message GutterInfo = iota // GutterWarning represents a compiler warning GutterWarning // GutterError represents a compiler error GutterError ) micro-2.0.9/internal/info/history.go000066400000000000000000000051441405030104300174240ustar00rootroot00000000000000package info import ( "encoding/gob" "os" "path/filepath" "github.com/zyedidia/micro/v2/internal/config" ) // LoadHistory attempts to load user history from configDir/buffers/history // into the history map // The savehistory option must be on func (i *InfoBuf) LoadHistory() { if config.GetGlobalOption("savehistory").(bool) { file, err := os.Open(filepath.Join(config.ConfigDir, "buffers", "history")) var decodedMap map[string][]string if err == nil { defer file.Close() decoder := gob.NewDecoder(file) err = decoder.Decode(&decodedMap) if err != nil { i.Error("Error loading history:", err) return } } if decodedMap != nil { i.History = decodedMap } else { i.History = make(map[string][]string) } } else { i.History = make(map[string][]string) } } // SaveHistory saves the user's command history to configDir/buffers/history // only if the savehistory option is on func (i *InfoBuf) SaveHistory() { if config.GetGlobalOption("savehistory").(bool) { // Don't save history past 100 for k, v := range i.History { if len(v) > 100 { i.History[k] = v[len(i.History[k])-100:] } } file, err := os.Create(filepath.Join(config.ConfigDir, "buffers", "history")) if err == nil { defer file.Close() encoder := gob.NewEncoder(file) err = encoder.Encode(i.History) if err != nil { i.Error("Error saving history:", err) return } } } } // AddToHistory adds a new item to the history for the prompt type `ptype`. // This function is not used by micro itself. It is useful for plugins // which add their own items to the history, bypassing the infobar command line. func (i *InfoBuf) AddToHistory(ptype string, item string) { if i.HasPrompt && i.PromptType == ptype { return } if _, ok := i.History[ptype]; !ok { i.History[ptype] = []string{item} } else { i.History[ptype] = append(i.History[ptype], item) // avoid duplicates h := i.History[ptype] for j := len(h) - 2; j >= 0; j-- { if h[j] == h[len(h)-1] { i.History[ptype] = append(h[:j], h[j+1:]...) break } } } } // UpHistory fetches the previous item in the history func (i *InfoBuf) UpHistory(history []string) { if i.HistoryNum > 0 && i.HasPrompt && !i.HasYN { i.HistoryNum-- i.Replace(i.Start(), i.End(), history[i.HistoryNum]) i.Buffer.GetActiveCursor().GotoLoc(i.End()) } } // DownHistory fetches the next item in the history func (i *InfoBuf) DownHistory(history []string) { if i.HistoryNum < len(history)-1 && i.HasPrompt && !i.HasYN { i.HistoryNum++ i.Replace(i.Start(), i.End(), history[i.HistoryNum]) i.Buffer.GetActiveCursor().GotoLoc(i.End()) } } micro-2.0.9/internal/info/infobuffer.go000066400000000000000000000110651405030104300200470ustar00rootroot00000000000000package info import ( "fmt" "github.com/zyedidia/micro/v2/internal/buffer" ) // The InfoBuf displays messages and other info at the bottom of the screen. // It is respresented as a buffer and a message with a style. type InfoBuf struct { *buffer.Buffer HasPrompt bool HasMessage bool HasError bool HasYN bool PromptType string Msg string YNResp bool // This map stores the history for all the different kinds of uses Prompt has // It's a map of history type -> history array History map[string][]string HistoryNum int // Is the current message a message from the gutter HasGutter bool PromptCallback func(resp string, canceled bool) EventCallback func(resp string) YNCallback func(yes bool, canceled bool) } // NewBuffer returns a new infobuffer func NewBuffer() *InfoBuf { ib := new(InfoBuf) ib.History = make(map[string][]string) ib.Buffer = buffer.NewBufferFromString("", "", buffer.BTInfo) ib.LoadHistory() return ib } // Close performs any cleanup necessary when shutting down the infobuffer func (i *InfoBuf) Close() { i.SaveHistory() } // Message sends a message to the user func (i *InfoBuf) Message(msg ...interface{}) { // only display a new message if there isn't an active prompt // this is to prevent overwriting an existing prompt to the user if !i.HasPrompt { displayMessage := fmt.Sprint(msg...) // if there is no active prompt then style and display the message as normal i.Msg = displayMessage i.HasMessage, i.HasError = true, false } } // GutterMessage displays a message and marks it as a gutter message func (i *InfoBuf) GutterMessage(msg ...interface{}) { i.Message(msg...) i.HasGutter = true } // ClearGutter clears the info bar and unmarks the message func (i *InfoBuf) ClearGutter() { i.HasGutter = false i.Message("") } // Error sends an error message to the user func (i *InfoBuf) Error(msg ...interface{}) { // only display a new message if there isn't an active prompt // this is to prevent overwriting an existing prompt to the user if !i.HasPrompt { // if there is no active prompt then style and display the message as normal i.Msg = fmt.Sprint(msg...) i.HasMessage, i.HasError = false, true } // TODO: add to log? } // Prompt starts a prompt for the user, it takes a prompt, a possibly partially filled in msg // and callbacks executed when the user executes an event and when the user finishes the prompt // The eventcb passes the current user response as the argument and donecb passes the user's message // and a boolean indicating if the prompt was canceled func (i *InfoBuf) Prompt(prompt string, msg string, ptype string, eventcb func(string), donecb func(string, bool)) { // If we get another prompt mid-prompt we cancel the one getting overwritten if i.HasPrompt { i.DonePrompt(true) } if _, ok := i.History[ptype]; !ok { i.History[ptype] = []string{""} } else { i.History[ptype] = append(i.History[ptype], "") } i.HistoryNum = len(i.History[ptype]) - 1 i.PromptType = ptype i.Msg = prompt i.HasPrompt = true i.HasMessage, i.HasError, i.HasYN = false, false, false i.HasGutter = false i.PromptCallback = donecb i.EventCallback = eventcb i.Buffer.Insert(i.Buffer.Start(), msg) } // YNPrompt creates a yes or no prompt, and the callback returns the yes/no result and whether // the prompt was canceled func (i *InfoBuf) YNPrompt(prompt string, donecb func(bool, bool)) { if i.HasPrompt { i.DonePrompt(true) } i.Msg = prompt i.HasPrompt = true i.HasYN = true i.HasMessage, i.HasError = false, false i.HasGutter = false i.YNCallback = donecb } // DonePrompt finishes the current prompt and indicates whether or not it was canceled func (i *InfoBuf) DonePrompt(canceled bool) { hadYN := i.HasYN i.HasPrompt = false i.HasYN = false i.HasGutter = false if !hadYN { if i.PromptCallback != nil { if canceled { i.Replace(i.Start(), i.End(), "") i.PromptCallback("", true) h := i.History[i.PromptType] i.History[i.PromptType] = h[:len(h)-1] } else { resp := string(i.LineBytes(0)) i.Replace(i.Start(), i.End(), "") i.PromptCallback(resp, false) h := i.History[i.PromptType] h[len(h)-1] = resp // avoid duplicates for j := len(h) - 2; j >= 0; j-- { if h[j] == h[len(h)-1] { i.History[i.PromptType] = append(h[:j], h[j+1:]...) break } } } // i.PromptCallback = nil } } if i.YNCallback != nil && hadYN { i.YNCallback(i.YNResp, canceled) } } // Reset resets the infobuffer's msg and info func (i *InfoBuf) Reset() { i.Msg = "" i.HasPrompt, i.HasMessage, i.HasError = false, false, false i.HasGutter = false } micro-2.0.9/internal/lua/000077500000000000000000000000001405030104300152165ustar00rootroot00000000000000micro-2.0.9/internal/lua/lua.go000066400000000000000000000602741405030104300163370ustar00rootroot00000000000000package lua import ( "archive/zip" "bytes" "errors" "fmt" "io" "io/ioutil" "math" "math/rand" "net" "net/http" "os" "path" "path/filepath" "regexp" "runtime" "strings" "sync" "time" "unicode/utf8" humanize "github.com/dustin/go-humanize" lua "github.com/yuin/gopher-lua" luar "layeh.com/gopher-luar" ) var L *lua.LState var Lock sync.Mutex // LoadFile loads a lua file func LoadFile(module string, file string, data []byte) error { pluginDef := []byte("module(\"" + module + "\", package.seeall)") if fn, err := L.Load(bytes.NewReader(append(pluginDef, data...)), file); err != nil { return err } else { L.Push(fn) return L.PCall(0, lua.MultRet, nil) } } // Import allows a lua plugin to import a package func Import(pkg string) *lua.LTable { switch pkg { case "fmt": return importFmt() case "io": return importIo() case "io/ioutil", "ioutil": return importIoUtil() case "net": return importNet() case "math": return importMath() case "math/rand": return importMathRand() case "os": return importOs() case "runtime": return importRuntime() case "path": return importPath() case "path/filepath", "filepath": return importFilePath() case "strings": return importStrings() case "regexp": return importRegexp() case "errors": return importErrors() case "time": return importTime() case "unicode/utf8", "utf8": return importUtf8() case "humanize": return importHumanize() case "net/http", "http": return importHTTP() case "archive/zip": return importArchiveZip() default: return nil } } func importFmt() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "Errorf", luar.New(L, fmt.Errorf)) L.SetField(pkg, "Fprint", luar.New(L, fmt.Fprint)) L.SetField(pkg, "Fprintf", luar.New(L, fmt.Fprintf)) L.SetField(pkg, "Fprintln", luar.New(L, fmt.Fprintln)) L.SetField(pkg, "Fscan", luar.New(L, fmt.Fscan)) L.SetField(pkg, "Fscanf", luar.New(L, fmt.Fscanf)) L.SetField(pkg, "Fscanln", luar.New(L, fmt.Fscanln)) L.SetField(pkg, "Print", luar.New(L, fmt.Print)) L.SetField(pkg, "Printf", luar.New(L, fmt.Printf)) L.SetField(pkg, "Println", luar.New(L, fmt.Println)) L.SetField(pkg, "Scan", luar.New(L, fmt.Scan)) L.SetField(pkg, "Scanf", luar.New(L, fmt.Scanf)) L.SetField(pkg, "Scanln", luar.New(L, fmt.Scanln)) L.SetField(pkg, "Sprint", luar.New(L, fmt.Sprint)) L.SetField(pkg, "Sprintf", luar.New(L, fmt.Sprintf)) L.SetField(pkg, "Sprintln", luar.New(L, fmt.Sprintln)) L.SetField(pkg, "Sscan", luar.New(L, fmt.Sscan)) L.SetField(pkg, "Sscanf", luar.New(L, fmt.Sscanf)) L.SetField(pkg, "Sscanln", luar.New(L, fmt.Sscanln)) return pkg } func importIo() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "Copy", luar.New(L, io.Copy)) L.SetField(pkg, "CopyN", luar.New(L, io.CopyN)) L.SetField(pkg, "EOF", luar.New(L, io.EOF)) L.SetField(pkg, "ErrClosedPipe", luar.New(L, io.ErrClosedPipe)) L.SetField(pkg, "ErrNoProgress", luar.New(L, io.ErrNoProgress)) L.SetField(pkg, "ErrShortBuffer", luar.New(L, io.ErrShortBuffer)) L.SetField(pkg, "ErrShortWrite", luar.New(L, io.ErrShortWrite)) L.SetField(pkg, "ErrUnexpectedEOF", luar.New(L, io.ErrUnexpectedEOF)) L.SetField(pkg, "LimitReader", luar.New(L, io.LimitReader)) L.SetField(pkg, "MultiReader", luar.New(L, io.MultiReader)) L.SetField(pkg, "MultiWriter", luar.New(L, io.MultiWriter)) L.SetField(pkg, "NewSectionReader", luar.New(L, io.NewSectionReader)) L.SetField(pkg, "Pipe", luar.New(L, io.Pipe)) L.SetField(pkg, "ReadAtLeast", luar.New(L, io.ReadAtLeast)) L.SetField(pkg, "ReadFull", luar.New(L, io.ReadFull)) L.SetField(pkg, "TeeReader", luar.New(L, io.TeeReader)) L.SetField(pkg, "WriteString", luar.New(L, io.WriteString)) return pkg } func importIoUtil() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "ReadAll", luar.New(L, ioutil.ReadAll)) L.SetField(pkg, "ReadDir", luar.New(L, ioutil.ReadDir)) L.SetField(pkg, "ReadFile", luar.New(L, ioutil.ReadFile)) L.SetField(pkg, "WriteFile", luar.New(L, ioutil.WriteFile)) return pkg } func importNet() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "CIDRMask", luar.New(L, net.CIDRMask)) L.SetField(pkg, "Dial", luar.New(L, net.Dial)) L.SetField(pkg, "DialIP", luar.New(L, net.DialIP)) L.SetField(pkg, "DialTCP", luar.New(L, net.DialTCP)) L.SetField(pkg, "DialTimeout", luar.New(L, net.DialTimeout)) L.SetField(pkg, "DialUDP", luar.New(L, net.DialUDP)) L.SetField(pkg, "DialUnix", luar.New(L, net.DialUnix)) L.SetField(pkg, "ErrWriteToConnected", luar.New(L, net.ErrWriteToConnected)) L.SetField(pkg, "FileConn", luar.New(L, net.FileConn)) L.SetField(pkg, "FileListener", luar.New(L, net.FileListener)) L.SetField(pkg, "FilePacketConn", luar.New(L, net.FilePacketConn)) L.SetField(pkg, "FlagBroadcast", luar.New(L, net.FlagBroadcast)) L.SetField(pkg, "FlagLoopback", luar.New(L, net.FlagLoopback)) L.SetField(pkg, "FlagMulticast", luar.New(L, net.FlagMulticast)) L.SetField(pkg, "FlagPointToPoint", luar.New(L, net.FlagPointToPoint)) L.SetField(pkg, "FlagUp", luar.New(L, net.FlagUp)) L.SetField(pkg, "IPv4", luar.New(L, net.IPv4)) L.SetField(pkg, "IPv4Mask", luar.New(L, net.IPv4Mask)) L.SetField(pkg, "IPv4allrouter", luar.New(L, net.IPv4allrouter)) L.SetField(pkg, "IPv4allsys", luar.New(L, net.IPv4allsys)) L.SetField(pkg, "IPv4bcast", luar.New(L, net.IPv4bcast)) L.SetField(pkg, "IPv4len", luar.New(L, net.IPv4len)) L.SetField(pkg, "IPv4zero", luar.New(L, net.IPv4zero)) L.SetField(pkg, "IPv6interfacelocalallnodes", luar.New(L, net.IPv6interfacelocalallnodes)) L.SetField(pkg, "IPv6len", luar.New(L, net.IPv6len)) L.SetField(pkg, "IPv6linklocalallnodes", luar.New(L, net.IPv6linklocalallnodes)) L.SetField(pkg, "IPv6linklocalallrouters", luar.New(L, net.IPv6linklocalallrouters)) L.SetField(pkg, "IPv6loopback", luar.New(L, net.IPv6loopback)) L.SetField(pkg, "IPv6unspecified", luar.New(L, net.IPv6unspecified)) L.SetField(pkg, "IPv6zero", luar.New(L, net.IPv6zero)) L.SetField(pkg, "InterfaceAddrs", luar.New(L, net.InterfaceAddrs)) L.SetField(pkg, "InterfaceByIndex", luar.New(L, net.InterfaceByIndex)) L.SetField(pkg, "InterfaceByName", luar.New(L, net.InterfaceByName)) L.SetField(pkg, "Interfaces", luar.New(L, net.Interfaces)) L.SetField(pkg, "JoinHostPort", luar.New(L, net.JoinHostPort)) L.SetField(pkg, "Listen", luar.New(L, net.Listen)) L.SetField(pkg, "ListenIP", luar.New(L, net.ListenIP)) L.SetField(pkg, "ListenMulticastUDP", luar.New(L, net.ListenMulticastUDP)) L.SetField(pkg, "ListenPacket", luar.New(L, net.ListenPacket)) L.SetField(pkg, "ListenTCP", luar.New(L, net.ListenTCP)) L.SetField(pkg, "ListenUDP", luar.New(L, net.ListenUDP)) L.SetField(pkg, "ListenUnix", luar.New(L, net.ListenUnix)) L.SetField(pkg, "ListenUnixgram", luar.New(L, net.ListenUnixgram)) L.SetField(pkg, "LookupAddr", luar.New(L, net.LookupAddr)) L.SetField(pkg, "LookupCNAME", luar.New(L, net.LookupCNAME)) L.SetField(pkg, "LookupHost", luar.New(L, net.LookupHost)) L.SetField(pkg, "LookupIP", luar.New(L, net.LookupIP)) L.SetField(pkg, "LookupMX", luar.New(L, net.LookupMX)) L.SetField(pkg, "LookupNS", luar.New(L, net.LookupNS)) L.SetField(pkg, "LookupPort", luar.New(L, net.LookupPort)) L.SetField(pkg, "LookupSRV", luar.New(L, net.LookupSRV)) L.SetField(pkg, "LookupTXT", luar.New(L, net.LookupTXT)) L.SetField(pkg, "ParseCIDR", luar.New(L, net.ParseCIDR)) L.SetField(pkg, "ParseIP", luar.New(L, net.ParseIP)) L.SetField(pkg, "ParseMAC", luar.New(L, net.ParseMAC)) L.SetField(pkg, "Pipe", luar.New(L, net.Pipe)) L.SetField(pkg, "ResolveIPAddr", luar.New(L, net.ResolveIPAddr)) L.SetField(pkg, "ResolveTCPAddr", luar.New(L, net.ResolveTCPAddr)) L.SetField(pkg, "ResolveUDPAddr", luar.New(L, net.ResolveUDPAddr)) L.SetField(pkg, "ResolveUnixAddr", luar.New(L, net.ResolveUnixAddr)) L.SetField(pkg, "SplitHostPort", luar.New(L, net.SplitHostPort)) return pkg } func importMath() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "Abs", luar.New(L, math.Abs)) L.SetField(pkg, "Acos", luar.New(L, math.Acos)) L.SetField(pkg, "Acosh", luar.New(L, math.Acosh)) L.SetField(pkg, "Asin", luar.New(L, math.Asin)) L.SetField(pkg, "Asinh", luar.New(L, math.Asinh)) L.SetField(pkg, "Atan", luar.New(L, math.Atan)) L.SetField(pkg, "Atan2", luar.New(L, math.Atan2)) L.SetField(pkg, "Atanh", luar.New(L, math.Atanh)) L.SetField(pkg, "Cbrt", luar.New(L, math.Cbrt)) L.SetField(pkg, "Ceil", luar.New(L, math.Ceil)) L.SetField(pkg, "Copysign", luar.New(L, math.Copysign)) L.SetField(pkg, "Cos", luar.New(L, math.Cos)) L.SetField(pkg, "Cosh", luar.New(L, math.Cosh)) L.SetField(pkg, "Dim", luar.New(L, math.Dim)) L.SetField(pkg, "Erf", luar.New(L, math.Erf)) L.SetField(pkg, "Erfc", luar.New(L, math.Erfc)) L.SetField(pkg, "Exp", luar.New(L, math.Exp)) L.SetField(pkg, "Exp2", luar.New(L, math.Exp2)) L.SetField(pkg, "Expm1", luar.New(L, math.Expm1)) L.SetField(pkg, "Float32bits", luar.New(L, math.Float32bits)) L.SetField(pkg, "Float32frombits", luar.New(L, math.Float32frombits)) L.SetField(pkg, "Float64bits", luar.New(L, math.Float64bits)) L.SetField(pkg, "Float64frombits", luar.New(L, math.Float64frombits)) L.SetField(pkg, "Floor", luar.New(L, math.Floor)) L.SetField(pkg, "Frexp", luar.New(L, math.Frexp)) L.SetField(pkg, "Gamma", luar.New(L, math.Gamma)) L.SetField(pkg, "Hypot", luar.New(L, math.Hypot)) L.SetField(pkg, "Ilogb", luar.New(L, math.Ilogb)) L.SetField(pkg, "Inf", luar.New(L, math.Inf)) L.SetField(pkg, "IsInf", luar.New(L, math.IsInf)) L.SetField(pkg, "IsNaN", luar.New(L, math.IsNaN)) L.SetField(pkg, "J0", luar.New(L, math.J0)) L.SetField(pkg, "J1", luar.New(L, math.J1)) L.SetField(pkg, "Jn", luar.New(L, math.Jn)) L.SetField(pkg, "Ldexp", luar.New(L, math.Ldexp)) L.SetField(pkg, "Lgamma", luar.New(L, math.Lgamma)) L.SetField(pkg, "Log", luar.New(L, math.Log)) L.SetField(pkg, "Log10", luar.New(L, math.Log10)) L.SetField(pkg, "Log1p", luar.New(L, math.Log1p)) L.SetField(pkg, "Log2", luar.New(L, math.Log2)) L.SetField(pkg, "Logb", luar.New(L, math.Logb)) L.SetField(pkg, "Max", luar.New(L, math.Max)) L.SetField(pkg, "Min", luar.New(L, math.Min)) L.SetField(pkg, "Mod", luar.New(L, math.Mod)) L.SetField(pkg, "Modf", luar.New(L, math.Modf)) L.SetField(pkg, "NaN", luar.New(L, math.NaN)) L.SetField(pkg, "Nextafter", luar.New(L, math.Nextafter)) L.SetField(pkg, "Pow", luar.New(L, math.Pow)) L.SetField(pkg, "Pow10", luar.New(L, math.Pow10)) L.SetField(pkg, "Remainder", luar.New(L, math.Remainder)) L.SetField(pkg, "Signbit", luar.New(L, math.Signbit)) L.SetField(pkg, "Sin", luar.New(L, math.Sin)) L.SetField(pkg, "Sincos", luar.New(L, math.Sincos)) L.SetField(pkg, "Sinh", luar.New(L, math.Sinh)) L.SetField(pkg, "Sqrt", luar.New(L, math.Sqrt)) L.SetField(pkg, "Tan", luar.New(L, math.Tan)) L.SetField(pkg, "Tanh", luar.New(L, math.Tanh)) L.SetField(pkg, "Trunc", luar.New(L, math.Trunc)) L.SetField(pkg, "Y0", luar.New(L, math.Y0)) L.SetField(pkg, "Y1", luar.New(L, math.Y1)) L.SetField(pkg, "Yn", luar.New(L, math.Yn)) return pkg } func importMathRand() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "ExpFloat64", luar.New(L, rand.ExpFloat64)) L.SetField(pkg, "Float32", luar.New(L, rand.Float32)) L.SetField(pkg, "Float64", luar.New(L, rand.Float64)) L.SetField(pkg, "Int", luar.New(L, rand.Int)) L.SetField(pkg, "Int31", luar.New(L, rand.Int31)) L.SetField(pkg, "Int31n", luar.New(L, rand.Int31n)) L.SetField(pkg, "Int63", luar.New(L, rand.Int63)) L.SetField(pkg, "Int63n", luar.New(L, rand.Int63n)) L.SetField(pkg, "Intn", luar.New(L, rand.Intn)) L.SetField(pkg, "NormFloat64", luar.New(L, rand.NormFloat64)) L.SetField(pkg, "Perm", luar.New(L, rand.Perm)) L.SetField(pkg, "Seed", luar.New(L, rand.Seed)) L.SetField(pkg, "Uint32", luar.New(L, rand.Uint32)) return pkg } func importOs() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "Args", luar.New(L, os.Args)) L.SetField(pkg, "Chdir", luar.New(L, os.Chdir)) L.SetField(pkg, "Chmod", luar.New(L, os.Chmod)) L.SetField(pkg, "Chown", luar.New(L, os.Chown)) L.SetField(pkg, "Chtimes", luar.New(L, os.Chtimes)) L.SetField(pkg, "Clearenv", luar.New(L, os.Clearenv)) L.SetField(pkg, "Create", luar.New(L, os.Create)) L.SetField(pkg, "DevNull", luar.New(L, os.DevNull)) L.SetField(pkg, "Environ", luar.New(L, os.Environ)) L.SetField(pkg, "ErrExist", luar.New(L, os.ErrExist)) L.SetField(pkg, "ErrInvalid", luar.New(L, os.ErrInvalid)) L.SetField(pkg, "ErrNotExist", luar.New(L, os.ErrNotExist)) L.SetField(pkg, "ErrPermission", luar.New(L, os.ErrPermission)) L.SetField(pkg, "Exit", luar.New(L, os.Exit)) L.SetField(pkg, "Expand", luar.New(L, os.Expand)) L.SetField(pkg, "ExpandEnv", luar.New(L, os.ExpandEnv)) L.SetField(pkg, "FindProcess", luar.New(L, os.FindProcess)) L.SetField(pkg, "Getegid", luar.New(L, os.Getegid)) L.SetField(pkg, "Getenv", luar.New(L, os.Getenv)) L.SetField(pkg, "Geteuid", luar.New(L, os.Geteuid)) L.SetField(pkg, "Getgid", luar.New(L, os.Getgid)) L.SetField(pkg, "Getgroups", luar.New(L, os.Getgroups)) L.SetField(pkg, "Getpagesize", luar.New(L, os.Getpagesize)) L.SetField(pkg, "Getpid", luar.New(L, os.Getpid)) L.SetField(pkg, "Getuid", luar.New(L, os.Getuid)) L.SetField(pkg, "Getwd", luar.New(L, os.Getwd)) L.SetField(pkg, "Hostname", luar.New(L, os.Hostname)) L.SetField(pkg, "Interrupt", luar.New(L, os.Interrupt)) L.SetField(pkg, "IsExist", luar.New(L, os.IsExist)) L.SetField(pkg, "IsNotExist", luar.New(L, os.IsNotExist)) L.SetField(pkg, "IsPathSeparator", luar.New(L, os.IsPathSeparator)) L.SetField(pkg, "IsPermission", luar.New(L, os.IsPermission)) L.SetField(pkg, "Kill", luar.New(L, os.Kill)) L.SetField(pkg, "Lchown", luar.New(L, os.Lchown)) L.SetField(pkg, "Link", luar.New(L, os.Link)) L.SetField(pkg, "Lstat", luar.New(L, os.Lstat)) L.SetField(pkg, "Mkdir", luar.New(L, os.Mkdir)) L.SetField(pkg, "MkdirAll", luar.New(L, os.MkdirAll)) L.SetField(pkg, "ModeAppend", luar.New(L, os.ModeAppend)) L.SetField(pkg, "ModeCharDevice", luar.New(L, os.ModeCharDevice)) L.SetField(pkg, "ModeDevice", luar.New(L, os.ModeDevice)) L.SetField(pkg, "ModeDir", luar.New(L, os.ModeDir)) L.SetField(pkg, "ModeExclusive", luar.New(L, os.ModeExclusive)) L.SetField(pkg, "ModeNamedPipe", luar.New(L, os.ModeNamedPipe)) L.SetField(pkg, "ModePerm", luar.New(L, os.ModePerm)) L.SetField(pkg, "ModeSetgid", luar.New(L, os.ModeSetgid)) L.SetField(pkg, "ModeSetuid", luar.New(L, os.ModeSetuid)) L.SetField(pkg, "ModeSocket", luar.New(L, os.ModeSocket)) L.SetField(pkg, "ModeSticky", luar.New(L, os.ModeSticky)) L.SetField(pkg, "ModeSymlink", luar.New(L, os.ModeSymlink)) L.SetField(pkg, "ModeTemporary", luar.New(L, os.ModeTemporary)) L.SetField(pkg, "ModeType", luar.New(L, os.ModeType)) L.SetField(pkg, "NewFile", luar.New(L, os.NewFile)) L.SetField(pkg, "NewSyscallError", luar.New(L, os.NewSyscallError)) L.SetField(pkg, "O_APPEND", luar.New(L, os.O_APPEND)) L.SetField(pkg, "O_CREATE", luar.New(L, os.O_CREATE)) L.SetField(pkg, "O_EXCL", luar.New(L, os.O_EXCL)) L.SetField(pkg, "O_RDONLY", luar.New(L, os.O_RDONLY)) L.SetField(pkg, "O_RDWR", luar.New(L, os.O_RDWR)) L.SetField(pkg, "O_SYNC", luar.New(L, os.O_SYNC)) L.SetField(pkg, "O_TRUNC", luar.New(L, os.O_TRUNC)) L.SetField(pkg, "O_WRONLY", luar.New(L, os.O_WRONLY)) L.SetField(pkg, "Open", luar.New(L, os.Open)) L.SetField(pkg, "OpenFile", luar.New(L, os.OpenFile)) L.SetField(pkg, "PathListSeparator", luar.New(L, os.PathListSeparator)) L.SetField(pkg, "PathSeparator", luar.New(L, os.PathSeparator)) L.SetField(pkg, "Pipe", luar.New(L, os.Pipe)) L.SetField(pkg, "Readlink", luar.New(L, os.Readlink)) L.SetField(pkg, "Remove", luar.New(L, os.Remove)) L.SetField(pkg, "RemoveAll", luar.New(L, os.RemoveAll)) L.SetField(pkg, "Rename", luar.New(L, os.Rename)) L.SetField(pkg, "SEEK_CUR", luar.New(L, os.SEEK_CUR)) L.SetField(pkg, "SEEK_END", luar.New(L, os.SEEK_END)) L.SetField(pkg, "SEEK_SET", luar.New(L, os.SEEK_SET)) L.SetField(pkg, "SameFile", luar.New(L, os.SameFile)) L.SetField(pkg, "Setenv", luar.New(L, os.Setenv)) L.SetField(pkg, "StartProcess", luar.New(L, os.StartProcess)) L.SetField(pkg, "Stat", luar.New(L, os.Stat)) L.SetField(pkg, "Stderr", luar.New(L, os.Stderr)) L.SetField(pkg, "Stdin", luar.New(L, os.Stdin)) L.SetField(pkg, "Stdout", luar.New(L, os.Stdout)) L.SetField(pkg, "Symlink", luar.New(L, os.Symlink)) L.SetField(pkg, "TempDir", luar.New(L, os.TempDir)) L.SetField(pkg, "Truncate", luar.New(L, os.Truncate)) L.SetField(pkg, "UserHomeDir", luar.New(L, os.UserHomeDir)) return pkg } func importRuntime() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "GC", luar.New(L, runtime.GC)) L.SetField(pkg, "GOARCH", luar.New(L, runtime.GOARCH)) L.SetField(pkg, "GOMAXPROCS", luar.New(L, runtime.GOMAXPROCS)) L.SetField(pkg, "GOOS", luar.New(L, runtime.GOOS)) L.SetField(pkg, "GOROOT", luar.New(L, runtime.GOROOT)) return pkg } func importPath() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "Base", luar.New(L, path.Base)) L.SetField(pkg, "Clean", luar.New(L, path.Clean)) L.SetField(pkg, "Dir", luar.New(L, path.Dir)) L.SetField(pkg, "ErrBadPattern", luar.New(L, path.ErrBadPattern)) L.SetField(pkg, "Ext", luar.New(L, path.Ext)) L.SetField(pkg, "IsAbs", luar.New(L, path.IsAbs)) L.SetField(pkg, "Join", luar.New(L, path.Join)) L.SetField(pkg, "Match", luar.New(L, path.Match)) L.SetField(pkg, "Split", luar.New(L, path.Split)) return pkg } func importFilePath() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "Join", luar.New(L, filepath.Join)) L.SetField(pkg, "Abs", luar.New(L, filepath.Abs)) L.SetField(pkg, "Base", luar.New(L, filepath.Base)) L.SetField(pkg, "Clean", luar.New(L, filepath.Clean)) L.SetField(pkg, "Dir", luar.New(L, filepath.Dir)) L.SetField(pkg, "EvalSymlinks", luar.New(L, filepath.EvalSymlinks)) L.SetField(pkg, "Ext", luar.New(L, filepath.Ext)) L.SetField(pkg, "FromSlash", luar.New(L, filepath.FromSlash)) L.SetField(pkg, "Glob", luar.New(L, filepath.Glob)) L.SetField(pkg, "HasPrefix", luar.New(L, filepath.HasPrefix)) L.SetField(pkg, "IsAbs", luar.New(L, filepath.IsAbs)) L.SetField(pkg, "Join", luar.New(L, filepath.Join)) L.SetField(pkg, "Match", luar.New(L, filepath.Match)) L.SetField(pkg, "Rel", luar.New(L, filepath.Rel)) L.SetField(pkg, "Split", luar.New(L, filepath.Split)) L.SetField(pkg, "SplitList", luar.New(L, filepath.SplitList)) L.SetField(pkg, "ToSlash", luar.New(L, filepath.ToSlash)) L.SetField(pkg, "VolumeName", luar.New(L, filepath.VolumeName)) return pkg } func importStrings() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "Contains", luar.New(L, strings.Contains)) L.SetField(pkg, "ContainsAny", luar.New(L, strings.ContainsAny)) L.SetField(pkg, "ContainsRune", luar.New(L, strings.ContainsRune)) L.SetField(pkg, "Count", luar.New(L, strings.Count)) L.SetField(pkg, "EqualFold", luar.New(L, strings.EqualFold)) L.SetField(pkg, "Fields", luar.New(L, strings.Fields)) L.SetField(pkg, "FieldsFunc", luar.New(L, strings.FieldsFunc)) L.SetField(pkg, "HasPrefix", luar.New(L, strings.HasPrefix)) L.SetField(pkg, "HasSuffix", luar.New(L, strings.HasSuffix)) L.SetField(pkg, "Index", luar.New(L, strings.Index)) L.SetField(pkg, "IndexAny", luar.New(L, strings.IndexAny)) L.SetField(pkg, "IndexByte", luar.New(L, strings.IndexByte)) L.SetField(pkg, "IndexFunc", luar.New(L, strings.IndexFunc)) L.SetField(pkg, "IndexRune", luar.New(L, strings.IndexRune)) L.SetField(pkg, "Join", luar.New(L, strings.Join)) L.SetField(pkg, "LastIndex", luar.New(L, strings.LastIndex)) L.SetField(pkg, "LastIndexAny", luar.New(L, strings.LastIndexAny)) L.SetField(pkg, "LastIndexFunc", luar.New(L, strings.LastIndexFunc)) L.SetField(pkg, "Map", luar.New(L, strings.Map)) L.SetField(pkg, "NewReader", luar.New(L, strings.NewReader)) L.SetField(pkg, "NewReplacer", luar.New(L, strings.NewReplacer)) L.SetField(pkg, "Repeat", luar.New(L, strings.Repeat)) L.SetField(pkg, "Replace", luar.New(L, strings.Replace)) L.SetField(pkg, "Split", luar.New(L, strings.Split)) L.SetField(pkg, "SplitAfter", luar.New(L, strings.SplitAfter)) L.SetField(pkg, "SplitAfterN", luar.New(L, strings.SplitAfterN)) L.SetField(pkg, "SplitN", luar.New(L, strings.SplitN)) L.SetField(pkg, "Title", luar.New(L, strings.Title)) L.SetField(pkg, "ToLower", luar.New(L, strings.ToLower)) L.SetField(pkg, "ToLowerSpecial", luar.New(L, strings.ToLowerSpecial)) L.SetField(pkg, "ToTitle", luar.New(L, strings.ToTitle)) L.SetField(pkg, "ToTitleSpecial", luar.New(L, strings.ToTitleSpecial)) L.SetField(pkg, "ToUpper", luar.New(L, strings.ToUpper)) L.SetField(pkg, "ToUpperSpecial", luar.New(L, strings.ToUpperSpecial)) L.SetField(pkg, "Trim", luar.New(L, strings.Trim)) L.SetField(pkg, "TrimFunc", luar.New(L, strings.TrimFunc)) L.SetField(pkg, "TrimLeft", luar.New(L, strings.TrimLeft)) L.SetField(pkg, "TrimLeftFunc", luar.New(L, strings.TrimLeftFunc)) L.SetField(pkg, "TrimPrefix", luar.New(L, strings.TrimPrefix)) L.SetField(pkg, "TrimRight", luar.New(L, strings.TrimRight)) L.SetField(pkg, "TrimRightFunc", luar.New(L, strings.TrimRightFunc)) L.SetField(pkg, "TrimSpace", luar.New(L, strings.TrimSpace)) L.SetField(pkg, "TrimSuffix", luar.New(L, strings.TrimSuffix)) return pkg } func importRegexp() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "Match", luar.New(L, regexp.Match)) L.SetField(pkg, "MatchReader", luar.New(L, regexp.MatchReader)) L.SetField(pkg, "MatchString", luar.New(L, regexp.MatchString)) L.SetField(pkg, "QuoteMeta", luar.New(L, regexp.QuoteMeta)) L.SetField(pkg, "Compile", luar.New(L, regexp.Compile)) L.SetField(pkg, "CompilePOSIX", luar.New(L, regexp.CompilePOSIX)) L.SetField(pkg, "MustCompile", luar.New(L, regexp.MustCompile)) L.SetField(pkg, "MustCompilePOSIX", luar.New(L, regexp.MustCompilePOSIX)) return pkg } func importErrors() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "New", luar.New(L, errors.New)) return pkg } func importTime() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "After", luar.New(L, time.After)) L.SetField(pkg, "Sleep", luar.New(L, time.Sleep)) L.SetField(pkg, "Tick", luar.New(L, time.Tick)) L.SetField(pkg, "Since", luar.New(L, time.Since)) L.SetField(pkg, "FixedZone", luar.New(L, time.FixedZone)) L.SetField(pkg, "LoadLocation", luar.New(L, time.LoadLocation)) L.SetField(pkg, "NewTicker", luar.New(L, time.NewTicker)) L.SetField(pkg, "Date", luar.New(L, time.Date)) L.SetField(pkg, "Now", luar.New(L, time.Now)) L.SetField(pkg, "Parse", luar.New(L, time.Parse)) L.SetField(pkg, "ParseDuration", luar.New(L, time.ParseDuration)) L.SetField(pkg, "ParseInLocation", luar.New(L, time.ParseInLocation)) L.SetField(pkg, "Unix", luar.New(L, time.Unix)) L.SetField(pkg, "AfterFunc", luar.New(L, time.AfterFunc)) L.SetField(pkg, "NewTimer", luar.New(L, time.NewTimer)) L.SetField(pkg, "Nanosecond", luar.New(L, time.Nanosecond)) L.SetField(pkg, "Microsecond", luar.New(L, time.Microsecond)) L.SetField(pkg, "Millisecond", luar.New(L, time.Millisecond)) L.SetField(pkg, "Second", luar.New(L, time.Second)) L.SetField(pkg, "Minute", luar.New(L, time.Minute)) L.SetField(pkg, "Hour", luar.New(L, time.Hour)) return pkg } func importUtf8() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "DecodeLastRune", luar.New(L, utf8.DecodeLastRune)) L.SetField(pkg, "DecodeLastRuneInString", luar.New(L, utf8.DecodeLastRuneInString)) L.SetField(pkg, "DecodeRune", luar.New(L, utf8.DecodeRune)) L.SetField(pkg, "DecodeRuneInString", luar.New(L, utf8.DecodeRuneInString)) L.SetField(pkg, "EncodeRune", luar.New(L, utf8.EncodeRune)) L.SetField(pkg, "FullRune", luar.New(L, utf8.FullRune)) L.SetField(pkg, "FullRuneInString", luar.New(L, utf8.FullRuneInString)) L.SetField(pkg, "RuneCount", luar.New(L, utf8.RuneCount)) L.SetField(pkg, "RuneCountInString", luar.New(L, utf8.RuneCountInString)) L.SetField(pkg, "RuneLen", luar.New(L, utf8.RuneLen)) L.SetField(pkg, "RuneStart", luar.New(L, utf8.RuneStart)) L.SetField(pkg, "Valid", luar.New(L, utf8.Valid)) L.SetField(pkg, "ValidRune", luar.New(L, utf8.ValidRune)) L.SetField(pkg, "ValidString", luar.New(L, utf8.ValidString)) return pkg } func importHumanize() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "Bytes", luar.New(L, humanize.Bytes)) L.SetField(pkg, "Ordinal", luar.New(L, humanize.Ordinal)) return pkg } func importHTTP() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "Get", luar.New(L, http.Get)) L.SetField(pkg, "Post", luar.New(L, http.Post)) return pkg } func importArchiveZip() *lua.LTable { pkg := L.NewTable() L.SetField(pkg, "OpenReader", luar.New(L, zip.OpenReader)) L.SetField(pkg, "NewReader", luar.New(L, zip.NewReader)) L.SetField(pkg, "NewWriter", luar.New(L, zip.NewWriter)) return pkg } micro-2.0.9/internal/screen/000077500000000000000000000000001405030104300157145ustar00rootroot00000000000000micro-2.0.9/internal/screen/message.go000066400000000000000000000032131405030104300176660ustar00rootroot00000000000000package screen import ( "bufio" "fmt" "os" "strconv" "strings" ) // TermMessage sends a message to the user in the terminal. This usually occurs before // micro has been fully initialized -- ie if there is an error in the syntax highlighting // regular expressions // The function must be called when the Screen is not initialized // This will write the message, and wait for the user // to press and key to continue func TermMessage(msg ...interface{}) { screenb := TempFini() fmt.Println(msg...) fmt.Print("\nPress enter to continue") reader := bufio.NewReader(os.Stdin) reader.ReadString('\n') TempStart(screenb) } // TermPrompt prints a prompt and requests the user for a response // The result is matched against a list of options and the index of // the match is returned // If wait is true, the prompt re-prompts until a valid option is // chosen, otherwise if wait is false, -1 is returned for no match func TermPrompt(prompt string, options []string, wait bool) int { screenb := TempFini() idx := -1 // same behavior as do { ... } while (wait && idx == -1) for ok := true; ok; ok = wait && idx == -1 { reader := bufio.NewReader(os.Stdin) fmt.Print(prompt) resp, _ := reader.ReadString('\n') resp = strings.TrimSpace(resp) for i, opt := range options { if resp == opt { idx = i } } if wait && idx == -1 { fmt.Println("\nInvalid choice.") } } TempStart(screenb) return idx } // TermError sends an error to the user in the terminal. Like TermMessage except formatted // as an error func TermError(filename string, lineNum int, err string) { TermMessage(filename + ", " + strconv.Itoa(lineNum) + ": " + err) } micro-2.0.9/internal/screen/screen.go000066400000000000000000000116511405030104300175260ustar00rootroot00000000000000package screen import ( "errors" "log" "os" "sync" "github.com/zyedidia/micro/v2/internal/config" "github.com/zyedidia/micro/v2/internal/util" "github.com/zyedidia/tcell/v2" ) // Screen is the tcell screen we use to draw to the terminal // Synchronization is used because we poll the screen on a separate // thread and sometimes the screen is shut down by the main thread // (for example on TermMessage) so we don't want to poll a nil/shutdown // screen. TODO: maybe we should worry about polling and drawing at the // same time too. var Screen tcell.Screen // Events is the channel of tcell events var Events chan (tcell.Event) // The lock is necessary since the screen is polled on a separate thread var lock sync.Mutex // drawChan is a channel that will cause the screen to redraw when // written to even if no event user event has occurred var drawChan chan bool // Lock locks the screen lock func Lock() { lock.Lock() } // Unlock unlocks the screen lock func Unlock() { lock.Unlock() } // Redraw schedules a redraw with the draw channel func Redraw() { select { case drawChan <- true: default: // channel is full } } // DrawChan returns the draw channel func DrawChan() chan bool { return drawChan } type screenCell struct { x, y int r rune combc []rune style tcell.Style } var lastCursor screenCell // ShowFakeCursor displays a cursor at the given position by modifying the // style of the given column instead of actually using the terminal cursor // This can be useful in certain terminals such as the windows console where // modifying the cursor location is slow and frequent modifications cause flashing // This keeps track of the most recent fake cursor location and resets it when // a new fake cursor location is specified func ShowFakeCursor(x, y int) { r, combc, style, _ := Screen.GetContent(x, y) Screen.SetContent(lastCursor.x, lastCursor.y, lastCursor.r, lastCursor.combc, lastCursor.style) Screen.SetContent(x, y, r, combc, config.DefStyle.Reverse(true)) lastCursor.x, lastCursor.y = x, y lastCursor.r = r lastCursor.combc = combc lastCursor.style = style } // ShowFakeCursorMulti is the same as ShowFakeCursor except it does not // reset previous locations of the cursor // Fake cursors are also necessary to display multiple cursors func ShowFakeCursorMulti(x, y int) { r, _, _, _ := Screen.GetContent(x, y) Screen.SetContent(x, y, r, nil, config.DefStyle.Reverse(true)) } // ShowCursor puts the cursor at the given location using a fake cursor // if enabled or using the terminal cursor otherwise // By default only the windows console will use a fake cursor func ShowCursor(x, y int) { if util.FakeCursor { ShowFakeCursor(x, y) } else { Screen.ShowCursor(x, y) } } // SetContent sets a cell at a point on the screen and makes sure that it is // synced with the last cursor location func SetContent(x, y int, mainc rune, combc []rune, style tcell.Style) { if !Screen.CanDisplay(mainc, true) { mainc = '�' } Screen.SetContent(x, y, mainc, combc, style) if util.FakeCursor && lastCursor.x == x && lastCursor.y == y { lastCursor.r = mainc lastCursor.style = style lastCursor.combc = combc } } // TempFini shuts the screen down temporarily func TempFini() bool { screenWasNil := Screen == nil if !screenWasNil { Screen.Fini() Lock() Screen = nil } return screenWasNil } // TempStart restarts the screen after it was temporarily disabled func TempStart(screenWasNil bool) { if !screenWasNil { Init() Unlock() } } // Init creates and initializes the tcell screen func Init() error { drawChan = make(chan bool, 8) // Should we enable true color? truecolor := os.Getenv("MICRO_TRUECOLOR") == "1" if !truecolor { os.Setenv("TCELL_TRUECOLOR", "disable") } var oldTerm string modifiedTerm := false setXterm := func() { oldTerm = os.Getenv("TERM") os.Setenv("TERM", "xterm-256color") modifiedTerm = true } if config.GetGlobalOption("xterm").(bool) { setXterm() } // Initilize tcell var err error Screen, err = tcell.NewScreen() if err != nil { log.Println("Warning: during screen initialization:", err) log.Println("Falling back to TERM=xterm-256color") setXterm() Screen, err = tcell.NewScreen() if err != nil { return err } } if err = Screen.Init(); err != nil { return err } Screen.SetPaste(config.GetGlobalOption("paste").(bool)) // restore TERM if modifiedTerm { os.Setenv("TERM", oldTerm) } if config.GetGlobalOption("mouse").(bool) { Screen.EnableMouse() } return nil } // InitSimScreen initializes a simulation screen for testing purposes func InitSimScreen() (tcell.SimulationScreen, error) { drawChan = make(chan bool, 8) // Initilize tcell var err error s := tcell.NewSimulationScreen("") if s == nil { return nil, errors.New("Failed to get a simulation screen") } if err = s.Init(); err != nil { return nil, err } s.SetSize(80, 24) Screen = s if config.GetGlobalOption("mouse").(bool) { Screen.EnableMouse() } return s, nil } micro-2.0.9/internal/shell/000077500000000000000000000000001405030104300155445ustar00rootroot00000000000000micro-2.0.9/internal/shell/job.go000066400000000000000000000053621405030104300166530ustar00rootroot00000000000000package shell import ( "bytes" "io" "os/exec" ) var Jobs chan JobFunction func init() { Jobs = make(chan JobFunction, 100) } // Jobs are the way plugins can run processes in the background // A job is simply a process that gets executed asynchronously // There are callbacks for when the job exits, when the job creates stdout // and when the job creates stderr // These jobs run in a separate goroutine but the lua callbacks need to be // executed in the main thread (where the Lua VM is running) so they are // put into the jobs channel which gets read by the main loop // JobFunction is a representation of a job (this data structure is what is loaded // into the jobs channel) type JobFunction struct { Function func(string, []interface{}) Output string Args []interface{} } // A CallbackFile is the data structure that makes it possible to catch stderr and stdout write events type CallbackFile struct { io.Writer callback func(string, []interface{}) args []interface{} } // Job stores the executing command for the job, and the stdin pipe type Job struct { *exec.Cmd Stdin io.WriteCloser } func (f *CallbackFile) Write(data []byte) (int, error) { // This is either stderr or stdout // In either case we create a new job function callback and put it in the jobs channel jobFunc := JobFunction{f.callback, string(data), f.args} Jobs <- jobFunc return f.Writer.Write(data) } // JobStart starts a shell command in the background with the given callbacks // It returns an *exec.Cmd as the job id func JobStart(cmd string, onStdout, onStderr, onExit func(string, []interface{}), userargs ...interface{}) *Job { return JobSpawn("sh", []string{"-c", cmd}, onStdout, onStderr, onExit, userargs...) } // JobSpawn starts a process with args in the background with the given callbacks // It returns an *exec.Cmd as the job id func JobSpawn(cmdName string, cmdArgs []string, onStdout, onStderr, onExit func(string, []interface{}), userargs ...interface{}) *Job { // Set up everything correctly if the functions have been provided proc := exec.Command(cmdName, cmdArgs...) var outbuf bytes.Buffer if onStdout != nil { proc.Stdout = &CallbackFile{&outbuf, onStdout, userargs} } else { proc.Stdout = &outbuf } if onStderr != nil { proc.Stderr = &CallbackFile{&outbuf, onStderr, userargs} } else { proc.Stderr = &outbuf } stdin, _ := proc.StdinPipe() go func() { // Run the process in the background and create the onExit callback proc.Run() jobFunc := JobFunction{onExit, outbuf.String(), userargs} Jobs <- jobFunc }() return &Job{proc, stdin} } // JobStop kills a job func JobStop(j *Job) { j.Process.Kill() } // JobSend sends the given data into the job's stdin stream func JobSend(j *Job, data string) { j.Stdin.Write([]byte(data)) } micro-2.0.9/internal/shell/shell.go000066400000000000000000000063441405030104300172110ustar00rootroot00000000000000package shell import ( "bytes" "errors" "fmt" "io" "os" "os/exec" "os/signal" "strings" shellquote "github.com/kballard/go-shellquote" "github.com/zyedidia/micro/v2/internal/screen" ) // ExecCommand executes a command using exec // It returns any output/errors func ExecCommand(name string, arg ...string) (string, error) { var err error cmd := exec.Command(name, arg...) outputBytes := &bytes.Buffer{} cmd.Stdout = outputBytes cmd.Stderr = outputBytes err = cmd.Start() if err != nil { return "", err } err = cmd.Wait() // wait for command to finish outstring := outputBytes.String() return outstring, err } // RunCommand executes a shell command and returns the output/error func RunCommand(input string) (string, error) { args, err := shellquote.Split(input) if err != nil { return "", err } if len(args) == 0 { return "", errors.New("No arguments") } inputCmd := args[0] return ExecCommand(inputCmd, args[1:]...) } // RunBackgroundShell runs a shell command in the background // It returns a function which will run the command and returns a string // message result func RunBackgroundShell(input string) (func() string, error) { args, err := shellquote.Split(input) if err != nil { return nil, err } if len(args) == 0 { return nil, errors.New("No arguments") } inputCmd := args[0] return func() string { output, err := RunCommand(input) totalLines := strings.Split(output, "\n") str := output if len(totalLines) < 3 { if err == nil { str = fmt.Sprint(inputCmd, " exited without error") } else { str = fmt.Sprint(inputCmd, " exited with error: ", err, ": ", output) } } return str }, nil } // RunInteractiveShell runs a shellcommand interactively func RunInteractiveShell(input string, wait bool, getOutput bool) (string, error) { args, err := shellquote.Split(input) if err != nil { return "", err } if len(args) == 0 { return "", errors.New("No arguments") } inputCmd := args[0] // Shut down the screen because we're going to interact directly with the shell screenb := screen.TempFini() args = args[1:] // Set up everything for the command outputBytes := &bytes.Buffer{} cmd := exec.Command(inputCmd, args...) cmd.Stdin = os.Stdin if getOutput { cmd.Stdout = io.MultiWriter(os.Stdout, outputBytes) } else { cmd.Stdout = os.Stdout } cmd.Stderr = os.Stderr // This is a trap for Ctrl-C so that it doesn't kill micro // Instead we trap Ctrl-C to kill the program we're running c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) go func() { for range c { cmd.Process.Kill() } }() cmd.Start() err = cmd.Wait() output := outputBytes.String() if wait { // This is just so we don't return right away and let the user press enter to return screen.TermMessage("") } // Start the screen back up screen.TempStart(screenb) return output, err } // UserCommand runs the shell command // The openTerm argument specifies whether a terminal should be opened (for viewing output // or interacting with stdin) // func UserCommand(input string, openTerm bool, waitToFinish bool) string { // if !openTerm { // RunBackgroundShell(input) // return "" // } else { // output, _ := RunInteractiveShell(input, waitToFinish, false) // return output // } // } micro-2.0.9/internal/shell/terminal.go000066400000000000000000000055521405030104300177150ustar00rootroot00000000000000package shell import ( "bytes" "os/exec" "strconv" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/terminal" ) type TermType int type CallbackFunc func(string) const ( TTClose = iota // Should be closed TTRunning // Currently running a command TTDone // Finished running a command ) var CloseTerms chan bool func init() { CloseTerms = make(chan bool) } // A Terminal holds information for the terminal emulator type Terminal struct { State terminal.State Term *terminal.VT title string Status TermType Selection [2]buffer.Loc wait bool getOutput bool output *bytes.Buffer callback CallbackFunc } // HasSelection returns whether this terminal has a valid selection func (t *Terminal) HasSelection() bool { return t.Selection[0] != t.Selection[1] } func (t *Terminal) Name() string { return t.title } // GetSelection returns the selected text func (t *Terminal) GetSelection(width int) string { start := t.Selection[0] end := t.Selection[1] if start.GreaterThan(end) { start, end = end, start } var ret string var l buffer.Loc for y := start.Y; y <= end.Y; y++ { for x := 0; x < width; x++ { l.X, l.Y = x, y if l.GreaterEqual(start) && l.LessThan(end) { c, _, _ := t.State.Cell(x, y) ret += string(c) } } } return ret } // Start begins a new command in this terminal with a given view func (t *Terminal) Start(execCmd []string, getOutput bool, wait bool, callback func(out string, userargs []interface{}), userargs []interface{}) error { if len(execCmd) <= 0 { return nil } cmd := exec.Command(execCmd[0], execCmd[1:]...) t.output = nil if getOutput { t.output = bytes.NewBuffer([]byte{}) } Term, _, err := terminal.Start(&t.State, cmd, t.output) if err != nil { return err } t.Term = Term t.getOutput = getOutput t.Status = TTRunning t.title = execCmd[0] + ":" + strconv.Itoa(cmd.Process.Pid) t.wait = wait t.callback = func(out string) { callback(out, userargs) } go func() { for { err := Term.Parse() if err != nil { Term.Write([]byte("Press enter to close")) screen.Redraw() break } screen.Redraw() } t.Stop() }() return nil } // Stop stops execution of the terminal and sets the Status // to TTDone func (t *Terminal) Stop() { t.Term.File().Close() t.Term.Close() if t.wait { t.Status = TTDone } else { t.Close() CloseTerms <- true } } // Close sets the Status to TTClose indicating that the terminal // is done and should be closed func (t *Terminal) Close() { t.Status = TTClose // call the lua function that the user has given as a callback if t.getOutput { if t.callback != nil { t.callback(t.output.String()) } } } // WriteString writes a given string to this terminal's pty func (t *Terminal) WriteString(str string) { t.Term.File().WriteString(str) } micro-2.0.9/internal/util/000077500000000000000000000000001405030104300154125ustar00rootroot00000000000000micro-2.0.9/internal/util/lua.go000066400000000000000000000015131405030104300165220ustar00rootroot00000000000000package util // LuaRuneAt is a helper function for lua plugins to return the rune // at an index within a string func LuaRuneAt(str string, runeidx int) string { i := 0 for len(str) > 0 { r, _, size := DecodeCharacterInString(str) str = str[size:] if i == runeidx { return string(r) } i++ } return "" } // LuaGetLeadingWhitespace returns the leading whitespace of a string (used by lua plugins) func LuaGetLeadingWhitespace(s string) string { ws := []byte{} for len(s) > 0 { r, _, size := DecodeCharacterInString(s) if r == ' ' || r == '\t' { ws = append(ws, byte(r)) } else { break } s = s[size:] } return string(ws) } // LuaIsWordChar returns true if the first rune in a string is a word character func LuaIsWordChar(s string) bool { r, _, _ := DecodeCharacterInString(s) return IsWordChar(r) } micro-2.0.9/internal/util/profile.go000066400000000000000000000012011405030104300173730ustar00rootroot00000000000000package util import ( "fmt" "log" "runtime" "time" humanize "github.com/dustin/go-humanize" ) // GetMemStats returns a string describing the memory usage and gc time used so far func GetMemStats() string { var memstats runtime.MemStats runtime.ReadMemStats(&memstats) return fmt.Sprintf("Alloc: %s, Sys: %s, GC: %d, PauseTotalNs: %dns", humanize.Bytes(memstats.Alloc), humanize.Bytes(memstats.Sys), memstats.NumGC, memstats.PauseTotalNs) } func Tic(s string) time.Time { log.Println("START:", s) return time.Now() } func Toc(start time.Time) { end := time.Now() log.Println("END: ElapsedTime in seconds:", end.Sub(start)) } micro-2.0.9/internal/util/unicode.go000066400000000000000000000044241405030104300173730ustar00rootroot00000000000000package util import ( "unicode" "unicode/utf8" ) // Unicode is annoying. A "code point" (rune in Go-speak) may need up to // 4 bytes to represent it. In general, a code point will represent a // complete character, but this is not always the case. A character with // accents may be made up of multiple code points (the code point for the // original character, and additional code points for each accent/marking). // The functions below are meant to help deal with these additional "combining" // code points. In underlying operations (search, replace, etc...), micro will // treat a character with combining code points as just the original code point. // For rendering, micro will display the combining characters. It's not perfect // but it's pretty good. var minMark = rune(unicode.Mark.R16[0].Lo) func isMark(r rune) bool { // Fast path if r < minMark { return false } return unicode.In(r, unicode.Mark) } // DecodeCharacter returns the next character from an array of bytes // A character is a rune along with any accompanying combining runes func DecodeCharacter(b []byte) (rune, []rune, int) { r, size := utf8.DecodeRune(b) b = b[size:] c, s := utf8.DecodeRune(b) var combc []rune for isMark(c) { combc = append(combc, c) size += s b = b[s:] c, s = utf8.DecodeRune(b) } return r, combc, size } // DecodeCharacterInString returns the next character from a string // A character is a rune along with any accompanying combining runes func DecodeCharacterInString(str string) (rune, []rune, int) { r, size := utf8.DecodeRuneInString(str) str = str[size:] c, s := utf8.DecodeRuneInString(str) var combc []rune for isMark(c) { combc = append(combc, c) size += s str = str[s:] c, s = utf8.DecodeRuneInString(str) } return r, combc, size } // CharacterCount returns the number of characters in a byte array // Similar to utf8.RuneCount but for unicode characters func CharacterCount(b []byte) int { s := 0 for len(b) > 0 { r, size := utf8.DecodeRune(b) if !isMark(r) { s++ } b = b[size:] } return s } // CharacterCount returns the number of characters in a string // Similar to utf8.RuneCountInString but for unicode characters func CharacterCountInString(str string) int { s := 0 for _, r := range str { if !isMark(r) { s++ } } return s } micro-2.0.9/internal/util/util.go000066400000000000000000000247311405030104300167250ustar00rootroot00000000000000package util import ( "archive/zip" "bytes" "errors" "fmt" "io" "os" "os/user" "path/filepath" "regexp" "runtime" "strconv" "strings" "time" "unicode" "github.com/blang/semver" runewidth "github.com/mattn/go-runewidth" ) var ( // These variables should be set by the linker when compiling // Version is the version number or commit hash Version = "0.0.0-unknown" // Semantic version SemVersion semver.Version // CommitHash is the commit this version was built on CommitHash = "Unknown" // CompileDate is the date this binary was compiled on CompileDate = "Unknown" // Debug logging Debug = "OFF" // FakeCursor is used to disable the terminal cursor and have micro // draw its own (enabled for windows consoles where the cursor is slow) FakeCursor = false // Stdout is a buffer that is written to stdout when micro closes Stdout *bytes.Buffer ) func init() { var err error SemVersion, err = semver.Make(Version) if err != nil { fmt.Println("Invalid version: ", Version, err) } _, wt := os.LookupEnv("WT_SESSION") if runtime.GOOS == "windows" && !wt { FakeCursor = true } Stdout = new(bytes.Buffer) } // SliceEnd returns a byte slice where the index is a rune index // Slices off the start of the slice func SliceEnd(slc []byte, index int) []byte { len := len(slc) i := 0 totalSize := 0 for totalSize < len { if i >= index { return slc[totalSize:] } _, _, size := DecodeCharacter(slc[totalSize:]) totalSize += size i++ } return slc[totalSize:] } // SliceEndStr is the same as SliceEnd but for strings func SliceEndStr(str string, index int) string { len := len(str) i := 0 totalSize := 0 for totalSize < len { if i >= index { return str[totalSize:] } _, _, size := DecodeCharacterInString(str[totalSize:]) totalSize += size i++ } return str[totalSize:] } // SliceStart returns a byte slice where the index is a rune index // Slices off the end of the slice func SliceStart(slc []byte, index int) []byte { len := len(slc) i := 0 totalSize := 0 for totalSize < len { if i >= index { return slc[:totalSize] } _, _, size := DecodeCharacter(slc[totalSize:]) totalSize += size i++ } return slc[:totalSize] } // SliceStartStr is the same as SliceStart but for strings func SliceStartStr(str string, index int) string { len := len(str) i := 0 totalSize := 0 for totalSize < len { if i >= index { return str[:totalSize] } _, _, size := DecodeCharacterInString(str[totalSize:]) totalSize += size i++ } return str[:totalSize] } // SliceVisualEnd will take a byte slice and slice off the start // up to a given visual index. If the index is in the middle of a // rune the number of visual columns into the rune will be returned // It will also return the char pos of the first character of the slice func SliceVisualEnd(b []byte, n, tabsize int) ([]byte, int, int) { width := 0 i := 0 for len(b) > 0 { r, _, size := DecodeCharacter(b) w := 0 switch r { case '\t': ts := tabsize - (width % tabsize) w = ts default: w = runewidth.RuneWidth(r) } if width+w > n { return b, n - width, i } width += w b = b[size:] i++ } return b, n - width, i } // Abs is a simple absolute value function for ints func Abs(n int) int { if n < 0 { return -n } return n } // StringWidth returns the visual width of a byte array indexed from 0 to n (rune index) // with a given tabsize func StringWidth(b []byte, n, tabsize int) int { if n <= 0 { return 0 } i := 0 width := 0 for len(b) > 0 { r, _, size := DecodeCharacter(b) b = b[size:] switch r { case '\t': ts := tabsize - (width % tabsize) width += ts default: width += runewidth.RuneWidth(r) } i++ if i == n { return width } } return width } // Min takes the min of two ints func Min(a, b int) int { if a > b { return b } return a } // Max takes the max of two ints func Max(a, b int) int { if a > b { return a } return b } // FSize gets the size of a file func FSize(f *os.File) int64 { fi, _ := f.Stat() return fi.Size() } // IsWordChar returns whether or not the string is a 'word character' // Word characters are defined as numbers, letters, or '_' func IsWordChar(r rune) bool { return unicode.IsLetter(r) || unicode.IsNumber(r) || r == '_' } // Spaces returns a string with n spaces func Spaces(n int) string { return strings.Repeat(" ", n) } // IsSpaces checks if a given string is only spaces func IsSpaces(str []byte) bool { for _, c := range str { if c != ' ' { return false } } return true } // IsSpacesOrTabs checks if a given string contains only spaces and tabs func IsSpacesOrTabs(str []byte) bool { for _, c := range str { if c != ' ' && c != '\t' { return false } } return true } // IsWhitespace returns true if the given rune is a space, tab, or newline func IsWhitespace(c rune) bool { return unicode.IsSpace(c) } // IsBytesWhitespace returns true if the given bytes are all whitespace func IsBytesWhitespace(b []byte) bool { for _, c := range b { if !IsWhitespace(rune(c)) { return false } } return true } // RunePos returns the rune index of a given byte index // Make sure the byte index is not between code points func RunePos(b []byte, i int) int { return CharacterCount(b[:i]) } // MakeRelative will attempt to make a relative path between path and base func MakeRelative(path, base string) (string, error) { if len(path) > 0 { rel, err := filepath.Rel(base, path) if err != nil { return path, err } return rel, nil } return path, nil } // ReplaceHome takes a path as input and replaces ~ at the start of the path with the user's // home directory. Does nothing if the path does not start with '~'. func ReplaceHome(path string) (string, error) { if !strings.HasPrefix(path, "~") { return path, nil } var userData *user.User var err error homeString := strings.Split(path, "/")[0] if homeString == "~" { userData, err = user.Current() if err != nil { return "", errors.New("Could not find user: " + err.Error()) } } else { userData, err = user.Lookup(homeString[1:]) if err != nil { return "", errors.New("Could not find user: " + err.Error()) } } home := userData.HomeDir return strings.Replace(path, homeString, home, 1), nil } // GetPathAndCursorPosition returns a filename without everything following a `:` // This is used for opening files like util.go:10:5 to specify a line and column // Special cases like Windows Absolute path (C:\myfile.txt:10:5) are handled correctly. func GetPathAndCursorPosition(path string) (string, []string) { re := regexp.MustCompile(`([\s\S]+?)(?::(\d+))(?::(\d+))?`) match := re.FindStringSubmatch(path) // no lines/columns were specified in the path, return just the path with no cursor location if len(match) == 0 { return path, nil } else if match[len(match)-1] != "" { // if the last capture group match isn't empty then both line and column were provided return match[1], match[2:] } // if it was empty, then only a line was provided, so default to column 0 return match[1], []string{match[2], "0"} } // GetModTime returns the last modification time for a given file func GetModTime(path string) (time.Time, error) { info, err := os.Stat(path) if err != nil { return time.Now(), err } return info.ModTime(), nil } // EscapePath replaces every path separator in a given path with a % func EscapePath(path string) string { path = filepath.ToSlash(path) if runtime.GOOS == "windows" { // ':' is not valid in a path name on Windows but is ok on Unix path = strings.ReplaceAll(path, ":", "%") } return strings.ReplaceAll(path, "/", "%") } // GetLeadingWhitespace returns the leading whitespace of the given byte array func GetLeadingWhitespace(b []byte) []byte { ws := []byte{} for len(b) > 0 { r, _, size := DecodeCharacter(b) if r == ' ' || r == '\t' { ws = append(ws, byte(r)) } else { break } b = b[size:] } return ws } // IntOpt turns a float64 setting to an int func IntOpt(opt interface{}) int { return int(opt.(float64)) } // GetCharPosInLine gets the char position of a visual x y // coordinate (this is necessary because tabs are 1 char but // 4 visual spaces) func GetCharPosInLine(b []byte, visualPos int, tabsize int) int { // Scan rune by rune until we exceed the visual width that we are // looking for. Then we can return the character position we have found i := 0 // char pos width := 0 // string visual width for len(b) > 0 { r, _, size := DecodeCharacter(b) b = b[size:] switch r { case '\t': ts := tabsize - (width % tabsize) width += ts default: width += runewidth.RuneWidth(r) } if width >= visualPos { if width == visualPos { i++ } break } i++ } return i } // ParseBool is almost exactly like strconv.ParseBool, except it also accepts 'on' and 'off' // as 'true' and 'false' respectively func ParseBool(str string) (bool, error) { if str == "on" { return true, nil } if str == "off" { return false, nil } return strconv.ParseBool(str) } // Clamp clamps a value between min and max func Clamp(val, min, max int) int { if val < min { val = min } else if val > max { val = max } return val } func IsNonAlphaNumeric(c rune) bool { return !unicode.IsLetter(c) && !unicode.IsNumber(c) && c != '_' } func IsAutocomplete(c rune) bool { return c == '.' || !IsNonAlphaNumeric(c) } func ParseSpecial(s string) string { return strings.ReplaceAll(s, "\\t", "\t") } // String converts a byte array to a string (for lua plugins) func String(s []byte) string { return string(s) } // Unzip unzips a file to given folder func Unzip(src, dest string) error { r, err := zip.OpenReader(src) if err != nil { return err } defer r.Close() os.MkdirAll(dest, 0755) // Closure to address file descriptors issue with all the deferred .Close() methods extractAndWriteFile := func(f *zip.File) error { rc, err := f.Open() if err != nil { return err } defer rc.Close() path := filepath.Join(dest, f.Name) // Check for ZipSlip (Directory traversal) if !strings.HasPrefix(path, filepath.Clean(dest)+string(os.PathSeparator)) { return fmt.Errorf("illegal file path: %s", path) } if f.FileInfo().IsDir() { os.MkdirAll(path, f.Mode()) } else { os.MkdirAll(filepath.Dir(path), f.Mode()) f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) if err != nil { return err } defer f.Close() _, err = io.Copy(f, rc) if err != nil { return err } } return nil } for _, f := range r.File { err := extractAndWriteFile(f) if err != nil { return err } } return nil } micro-2.0.9/internal/util/util_test.go000066400000000000000000000013141405030104300177540ustar00rootroot00000000000000package util import ( "testing" "github.com/stretchr/testify/assert" ) func TestStringWidth(t *testing.T) { bytes := []byte("\tPot să \tmănânc sticlă È™i ea nu mă răneÈ™te.") n := StringWidth(bytes, 23, 4) assert.Equal(t, 26, n) } func TestSliceVisualEnd(t *testing.T) { s := []byte("\thello") slc, n, _ := SliceVisualEnd(s, 2, 4) assert.Equal(t, []byte("\thello"), slc) assert.Equal(t, 2, n) slc, n, _ = SliceVisualEnd(s, 1, 4) assert.Equal(t, []byte("\thello"), slc) assert.Equal(t, 1, n) slc, n, _ = SliceVisualEnd(s, 4, 4) assert.Equal(t, []byte("hello"), slc) assert.Equal(t, 0, n) slc, n, _ = SliceVisualEnd(s, 5, 4) assert.Equal(t, []byte("ello"), slc) assert.Equal(t, 0, n) } micro-2.0.9/internal/views/000077500000000000000000000000001405030104300155725ustar00rootroot00000000000000micro-2.0.9/internal/views/splits.go000066400000000000000000000245621405030104300174500ustar00rootroot00000000000000package views import ( "fmt" "strings" ) type SplitType uint8 const ( STVert = 0 STHoriz = 1 STUndef = 2 ) var idcounter uint64 // NewID returns a new unique id func NewID() uint64 { idcounter++ return idcounter } // A View is a size and location of a split type View struct { X, Y int W, H int } // A Node describes a split in the tree // If a node is a leaf node then it corresponds to a buffer that is being // displayed otherwise it has a number of children of the opposite type // (vertical splits have horizontal children and vice versa) type Node struct { View Kind SplitType parent *Node children []*Node // Nodes can be marked as non resizable if they shouldn't be rescaled // when the terminal window is resized or when a new split is added // Only the splits on the edges of the screen can be marked as non resizable canResize bool // A node may also be marked with proportional scaling. This means that when // the window is resized the split maintains its proportions propScale bool // Defines the proportion of the screen this node should take up if propScale is // on propW, propH float64 // The id is unique for each leaf node and provides a way to keep track of a split // The id cannot be 0 id uint64 } // NewNode returns a new node with the given specifications func NewNode(Kind SplitType, x, y, w, h int, parent *Node, id uint64) *Node { n := new(Node) n.Kind = Kind n.canResize = true n.propScale = true n.X, n.Y, n.W, n.H = x, y, w, h n.children = make([]*Node, 0) n.parent = parent n.id = id if parent != nil { n.propW, n.propH = float64(w)/float64(parent.W), float64(h)/float64(parent.H) } else { n.propW, n.propH = 1, 1 } return n } // NewRoot returns an empty Node with a size and location // The type of the node will be determined by the first action on the node // In other words, a lone split is neither horizontal nor vertical, it only // becomes one or the other after a vsplit or hsplit is made func NewRoot(x, y, w, h int) *Node { n1 := NewNode(STUndef, x, y, w, h, nil, NewID()) return n1 } // IsLeaf returns if this node is a leaf node func (n *Node) IsLeaf() bool { return len(n.children) == 0 } // ID returns this node's id or 0 if it is not viewable func (n *Node) ID() uint64 { if n.IsLeaf() { return n.id } return 0 } // CanResize returns if this node can be resized func (n *Node) CanResize() bool { return n.canResize } // PropScale returns if this node is proportionally scaled func (n *Node) PropScale() bool { return n.propScale } // SetResize sets the resize flag func (n *Node) SetResize(b bool) { n.canResize = b } // SetPropScale sets the propScale flag func (n *Node) SetPropScale(b bool) { n.propScale = b } // Children returns this node's children func (n *Node) Children() []*Node { return n.children } // GetNode returns the node with the given id in the tree of children // that this node has access to or nil if the node with that id cannot be found func (n *Node) GetNode(id uint64) *Node { if n.id == id && n.IsLeaf() { return n } for _, c := range n.children { if c.id == id && c.IsLeaf() { return c } gc := c.GetNode(id) if gc != nil { return gc } } return nil } func (n *Node) vResizeSplit(i int, size int) bool { if i < 0 || i >= len(n.children) { return false } var c1, c2 *Node if i == len(n.children)-1 { c1, c2 = n.children[i-1], n.children[i] } else { c1, c2 = n.children[i], n.children[i+1] } toth := c1.H + c2.H if size >= toth { return false } c2.Y = c1.Y + size c1.Resize(c1.W, size) c2.Resize(c2.W, toth-size) n.markSizes() n.alignSizes(n.W, n.H) return true } func (n *Node) hResizeSplit(i int, size int) bool { if i < 0 || i >= len(n.children) { return false } var c1, c2 *Node if i == len(n.children)-1 { c1, c2 = n.children[i-1], n.children[i] } else { c1, c2 = n.children[i], n.children[i+1] } totw := c1.W + c2.W if size >= totw { return false } c2.X = c1.X + size c1.Resize(size, c1.H) c2.Resize(totw-size, c2.H) n.markSizes() n.alignSizes(n.W, n.H) return true } // ResizeSplit resizes a certain split to a given size func (n *Node) ResizeSplit(size int) bool { if len(n.parent.children) <= 1 { // cannot resize a lone node return false } ind := 0 for i, c := range n.parent.children { if c.id == n.id { ind = i } } if n.parent.Kind == STVert { return n.parent.vResizeSplit(ind, size) } return n.parent.hResizeSplit(ind, size) } // Resize sets this node's size and resizes all children accordlingly func (n *Node) Resize(w, h int) { n.W, n.H = w, h if n.IsLeaf() { return } x, y := n.X, n.Y totw, toth := 0, 0 for _, c := range n.children { cW := int(float64(w) * c.propW) cH := int(float64(h) * c.propH) c.X, c.Y = x, y c.Resize(cW, cH) if n.Kind == STHoriz { x += cW totw += cW } else { y += cH toth += cH } } n.alignSizes(totw, toth) } func (n *Node) alignSizes(totw, toth int) { // Make sure that there are no off-by-one problems with the rounding // of the sizes by making the final split fill the screen if n.Kind == STVert && toth != n.H { last := n.children[len(n.children)-1] last.Resize(last.W, last.H+n.H-toth) } else if n.Kind == STHoriz && totw != n.W { last := n.children[len(n.children)-1] last.Resize(last.W+n.W-totw, last.H) } } // Resets all proportions for children func (n *Node) markSizes() { for _, c := range n.children { c.propW = float64(c.W) / float64(n.W) c.propH = float64(c.H) / float64(n.H) c.markSizes() } } func (n *Node) markResize() { n.markSizes() n.Resize(n.W, n.H) } // vsplits a vertical split and returns the id of the new split func (n *Node) vVSplit(right bool) uint64 { ind := 0 for i, c := range n.parent.children { if c.id == n.id { ind = i } } return n.parent.hVSplit(ind, right) } // hsplits a horizontal split func (n *Node) hHSplit(bottom bool) uint64 { ind := 0 for i, c := range n.parent.children { if c.id == n.id { ind = i } } return n.parent.vHSplit(ind, bottom) } // Returns the size of the non-resizable area and the number of resizable // splits func (n *Node) getResizeInfo(h bool) (int, int) { numr := 0 numnr := 0 nonr := 0 for _, c := range n.children { if !c.CanResize() { if h { nonr += c.H } else { nonr += c.W } numnr++ } else { numr++ } } // if there are no resizable splits make them all resizable if numr == 0 { numr = numnr } return nonr, numr } func (n *Node) applyNewSize(size int, h bool) { a := n.X if h { a = n.Y } for _, c := range n.children { if h { c.Y = a } else { c.X = a } if c.CanResize() { if h { c.Resize(c.W, size) } else { c.Resize(size, c.H) } } if h { a += c.H } else { a += c.H } } n.markResize() } // hsplits a vertical split func (n *Node) vHSplit(i int, right bool) uint64 { if n.IsLeaf() { newid := NewID() hn1 := NewNode(STHoriz, n.X, n.Y, n.W, n.H/2, n, n.id) hn2 := NewNode(STHoriz, n.X, n.Y+hn1.H, n.W, n.H/2, n, newid) if !right { hn1.id, hn2.id = hn2.id, hn1.id } n.children = append(n.children, hn1, hn2) n.markResize() return newid } else { nonrh, numr := n.getResizeInfo(true) // size of resizable area height := (n.H - nonrh) / (numr + 1) newid := NewID() hn := NewNode(STHoriz, n.X, 0, n.W, height, n, newid) // insert the node into the correct slot n.children = append(n.children, nil) inspos := i if right { inspos++ } copy(n.children[inspos+1:], n.children[inspos:]) n.children[inspos] = hn n.applyNewSize(height, true) return newid } } // vsplits a horizontal split func (n *Node) hVSplit(i int, right bool) uint64 { if n.IsLeaf() { newid := NewID() vn1 := NewNode(STVert, n.X, n.Y, n.W/2, n.H, n, n.id) vn2 := NewNode(STVert, n.X+vn1.W, n.Y, n.W/2, n.H, n, newid) if !right { vn1.id, vn2.id = vn2.id, vn1.id } n.children = append(n.children, vn1, vn2) n.markResize() return newid } else { nonrw, numr := n.getResizeInfo(false) width := (n.W - nonrw) / (numr + 1) newid := NewID() vn := NewNode(STVert, 0, n.Y, width, n.H, n, newid) // Inser the node into the correct slot n.children = append(n.children, nil) inspos := i if right { inspos++ } copy(n.children[inspos+1:], n.children[inspos:]) n.children[inspos] = vn n.applyNewSize(width, false) return newid } } // HSplit creates a horizontal split and returns the id of the new split // bottom specifies if the new split should be created on the top or bottom // of the current split func (n *Node) HSplit(bottom bool) uint64 { if !n.IsLeaf() { return 0 } if n.Kind == STUndef { n.Kind = STVert } if n.Kind == STVert { return n.vHSplit(0, bottom) } return n.hHSplit(bottom) } // VSplit creates a vertical split and returns the id of the new split // right specifies if the new split should be created on the right or left // of the current split func (n *Node) VSplit(right bool) uint64 { if !n.IsLeaf() { return 0 } if n.Kind == STUndef { n.Kind = STHoriz } if n.Kind == STVert { return n.vVSplit(right) } return n.hVSplit(0, right) } // unsplits the child of a split func (n *Node) unsplit(i int, h bool) { copy(n.children[i:], n.children[i+1:]) n.children[len(n.children)-1] = nil n.children = n.children[:len(n.children)-1] nonrs, numr := n.getResizeInfo(h) if numr == 0 { // This means that this was the last child // The parent will get cleaned up in the next iteration and // will resolve all sizing issues with its parent return } size := (n.W - nonrs) / numr if h { size = (n.H - nonrs) / numr } n.applyNewSize(size, h) } // Unsplit deletes this split and resizes everything // else accordingly func (n *Node) Unsplit() bool { if !n.IsLeaf() || n.parent == nil { return false } ind := 0 for i, c := range n.parent.children { if c.id == n.id { ind = i } } if n.parent.Kind == STVert { n.parent.unsplit(ind, true) } else { n.parent.unsplit(ind, false) } if n.parent.IsLeaf() { return n.parent.Unsplit() } return true } // String returns the string form of the node and all children (used for debugging) func (n *Node) String() string { var strf func(n *Node, ident int) string strf = func(n *Node, ident int) string { marker := "|" if n.Kind == STHoriz { marker = "-" } str := fmt.Sprint(strings.Repeat("\t", ident), marker, n.View, n.id) if n.IsLeaf() { str += "ðŸ" } str += "\n" for _, c := range n.children { str += strf(c, ident+1) } return str } return strf(n, 0) } micro-2.0.9/internal/views/splits_test.go000066400000000000000000000004001405030104300204700ustar00rootroot00000000000000package views import ( "fmt" "testing" ) func TestHSplit(t *testing.T) { root := NewRoot(0, 0, 80, 80) n1 := root.VSplit(true) root.GetNode(n1).VSplit(true) root.GetNode(root.id).ResizeSplit(7) root.Resize(120, 120) fmt.Println(root.String()) } micro-2.0.9/pkg/000077500000000000000000000000001405030104300134025ustar00rootroot00000000000000micro-2.0.9/pkg/highlight/000077500000000000000000000000001405030104300153515ustar00rootroot00000000000000micro-2.0.9/pkg/highlight/ftdetect.go000066400000000000000000000007761405030104300175140ustar00rootroot00000000000000package highlight import "regexp" // MatchFiletype will use the list of syntax definitions provided and the filename and first line of the file // to determine the filetype of the file // It will return the corresponding syntax definition for the filetype func MatchFiletype(ftdetect [2]*regexp.Regexp, filename string, firstLine []byte) bool { if ftdetect[0] != nil && ftdetect[0].MatchString(filename) { return true } if ftdetect[1] != nil { return ftdetect[1].Match(firstLine) } return false } micro-2.0.9/pkg/highlight/highlighter.go000066400000000000000000000242661405030104300202100ustar00rootroot00000000000000package highlight import ( "regexp" "strings" ) func sliceStart(slc []byte, index int) []byte { len := len(slc) i := 0 totalSize := 0 for totalSize < len { if i >= index { return slc[totalSize:] } _, _, size := DecodeCharacter(slc[totalSize:]) totalSize += size i++ } return slc[totalSize:] } func sliceEnd(slc []byte, index int) []byte { len := len(slc) i := 0 totalSize := 0 for totalSize < len { if i >= index { return slc[:totalSize] } _, _, size := DecodeCharacter(slc[totalSize:]) totalSize += size i++ } return slc[:totalSize] } // RunePos returns the rune index of a given byte index // This could cause problems if the byte index is between code points func runePos(p int, str []byte) int { if p < 0 { return 0 } if p >= len(str) { return CharacterCount(str) } return CharacterCount(str[:p]) } func combineLineMatch(src, dst LineMatch) LineMatch { for k, v := range src { if g, ok := dst[k]; ok { if g == 0 { dst[k] = v } } else { dst[k] = v } } return dst } // A State represents the region at the end of a line type State *region var EmptyDef = Def{nil, &rules{}} // LineStates is an interface for a buffer-like object which can also store the states and matches for every line type LineStates interface { LineBytes(n int) []byte LinesNum() int State(lineN int) State SetState(lineN int, s State) SetMatch(lineN int, m LineMatch) } // A Highlighter contains the information needed to highlight a string type Highlighter struct { lastRegion *region Def *Def } // NewHighlighter returns a new highlighter from the given syntax definition func NewHighlighter(def *Def) *Highlighter { h := new(Highlighter) h.Def = def return h } // LineMatch represents the syntax highlighting matches for one line. Each index where the coloring is changed is marked with that // color's group (represented as one byte) type LineMatch map[int]Group func findIndex(regex *regexp.Regexp, skip *regexp.Regexp, str []byte, canMatchStart, canMatchEnd bool) []int { regexStr := regex.String() if strings.Contains(regexStr, "^") { if !canMatchStart { return nil } } if strings.Contains(regexStr, "$") { if !canMatchEnd { return nil } } var strbytes []byte if skip != nil { strbytes = skip.ReplaceAllFunc(str, func(match []byte) []byte { res := make([]byte, CharacterCount(match)) return res }) } else { strbytes = str } match := regex.FindIndex(strbytes) if match == nil { return nil } // return []int{match.Index, match.Index + match.Length} return []int{runePos(match[0], str), runePos(match[1], str)} } func findAllIndex(regex *regexp.Regexp, str []byte, canMatchStart, canMatchEnd bool) [][]int { regexStr := regex.String() if strings.Contains(regexStr, "^") { if !canMatchStart { return nil } } if strings.Contains(regexStr, "$") { if !canMatchEnd { return nil } } matches := regex.FindAllIndex(str, -1) for i, m := range matches { matches[i][0] = runePos(m[0], str) matches[i][1] = runePos(m[1], str) } return matches } func (h *Highlighter) highlightRegion(highlights LineMatch, start int, canMatchEnd bool, lineNum int, line []byte, curRegion *region, statesOnly bool) LineMatch { lineLen := CharacterCount(line) if start == 0 { if !statesOnly { if _, ok := highlights[0]; !ok { highlights[0] = curRegion.group } } } loc := findIndex(curRegion.end, curRegion.skip, line, start == 0, canMatchEnd) if loc != nil { if !statesOnly { highlights[start+loc[0]] = curRegion.limitGroup } if curRegion.parent == nil { if !statesOnly { highlights[start+loc[1]] = 0 h.highlightRegion(highlights, start, false, lineNum, sliceEnd(line, loc[0]), curRegion, statesOnly) } h.highlightEmptyRegion(highlights, start+loc[1], canMatchEnd, lineNum, sliceStart(line, loc[1]), statesOnly) return highlights } if !statesOnly { highlights[start+loc[1]] = curRegion.parent.group h.highlightRegion(highlights, start, false, lineNum, sliceEnd(line, loc[0]), curRegion, statesOnly) } h.highlightRegion(highlights, start+loc[1], canMatchEnd, lineNum, sliceStart(line, loc[1]), curRegion.parent, statesOnly) return highlights } if lineLen == 0 { if canMatchEnd { h.lastRegion = curRegion } return highlights } firstLoc := []int{lineLen, 0} var firstRegion *region for _, r := range curRegion.rules.regions { loc := findIndex(r.start, nil, line, start == 0, canMatchEnd) if loc != nil { if loc[0] < firstLoc[0] { firstLoc = loc firstRegion = r } } } if firstLoc[0] != lineLen { if !statesOnly { highlights[start+firstLoc[0]] = firstRegion.limitGroup } h.highlightRegion(highlights, start, false, lineNum, sliceEnd(line, firstLoc[0]), curRegion, statesOnly) h.highlightRegion(highlights, start+firstLoc[1], canMatchEnd, lineNum, sliceStart(line, firstLoc[1]), firstRegion, statesOnly) return highlights } if !statesOnly { fullHighlights := make([]Group, lineLen) for i := 0; i < len(fullHighlights); i++ { fullHighlights[i] = curRegion.group } for _, p := range curRegion.rules.patterns { matches := findAllIndex(p.regex, line, start == 0, canMatchEnd) for _, m := range matches { for i := m[0]; i < m[1]; i++ { fullHighlights[i] = p.group } } } for i, h := range fullHighlights { if i == 0 || h != fullHighlights[i-1] { highlights[start+i] = h } } } if canMatchEnd { h.lastRegion = curRegion } return highlights } func (h *Highlighter) highlightEmptyRegion(highlights LineMatch, start int, canMatchEnd bool, lineNum int, line []byte, statesOnly bool) LineMatch { lineLen := CharacterCount(line) if lineLen == 0 { if canMatchEnd { h.lastRegion = nil } return highlights } firstLoc := []int{lineLen, 0} var firstRegion *region for _, r := range h.Def.rules.regions { loc := findIndex(r.start, nil, line, start == 0, canMatchEnd) if loc != nil { if loc[0] < firstLoc[0] { firstLoc = loc firstRegion = r } } } if firstLoc[0] != lineLen { if !statesOnly { highlights[start+firstLoc[0]] = firstRegion.limitGroup } h.highlightEmptyRegion(highlights, start, false, lineNum, sliceEnd(line, firstLoc[0]), statesOnly) h.highlightRegion(highlights, start+firstLoc[1], canMatchEnd, lineNum, sliceStart(line, firstLoc[1]), firstRegion, statesOnly) return highlights } if statesOnly { if canMatchEnd { h.lastRegion = nil } return highlights } fullHighlights := make([]Group, len(line)) for _, p := range h.Def.rules.patterns { matches := findAllIndex(p.regex, line, start == 0, canMatchEnd) for _, m := range matches { for i := m[0]; i < m[1]; i++ { fullHighlights[i] = p.group } } } for i, h := range fullHighlights { if i == 0 || h != fullHighlights[i-1] { // if _, ok := highlights[start+i]; !ok { highlights[start+i] = h // } } } if canMatchEnd { h.lastRegion = nil } return highlights } // HighlightString syntax highlights a string // Use this function for simple syntax highlighting and use the other functions for // more advanced syntax highlighting. They are optimized for quick rehighlighting of the same // text with minor changes made func (h *Highlighter) HighlightString(input string) []LineMatch { lines := strings.Split(input, "\n") var lineMatches []LineMatch for i := 0; i < len(lines); i++ { line := []byte(lines[i]) highlights := make(LineMatch) if i == 0 || h.lastRegion == nil { lineMatches = append(lineMatches, h.highlightEmptyRegion(highlights, 0, true, i, line, false)) } else { lineMatches = append(lineMatches, h.highlightRegion(highlights, 0, true, i, line, h.lastRegion, false)) } } return lineMatches } // HighlightStates correctly sets all states for the buffer func (h *Highlighter) HighlightStates(input LineStates) { for i := 0; i < input.LinesNum(); i++ { line := input.LineBytes(i) // highlights := make(LineMatch) if i == 0 || h.lastRegion == nil { h.highlightEmptyRegion(nil, 0, true, i, line, true) } else { h.highlightRegion(nil, 0, true, i, line, h.lastRegion, true) } curState := h.lastRegion input.SetState(i, curState) } } // HighlightMatches sets the matches for each line from startline to endline // It sets all other matches in the buffer to nil to conserve memory // This assumes that all the states are set correctly func (h *Highlighter) HighlightMatches(input LineStates, startline, endline int) { for i := startline; i <= endline; i++ { if i >= input.LinesNum() { break } line := input.LineBytes(i) highlights := make(LineMatch) var match LineMatch if i == 0 || input.State(i-1) == nil { match = h.highlightEmptyRegion(highlights, 0, true, i, line, false) } else { match = h.highlightRegion(highlights, 0, true, i, line, input.State(i-1), false) } input.SetMatch(i, match) } } // ReHighlightStates will scan down from `startline` and set the appropriate end of line state // for each line until it comes across a line whose state does not change // returns the number of the final line func (h *Highlighter) ReHighlightStates(input LineStates, startline int) int { // lines := input.LineData() h.lastRegion = nil if startline > 0 { h.lastRegion = input.State(startline - 1) } for i := startline; i < input.LinesNum(); i++ { line := input.LineBytes(i) // highlights := make(LineMatch) // var match LineMatch if i == 0 || h.lastRegion == nil { h.highlightEmptyRegion(nil, 0, true, i, line, true) } else { h.highlightRegion(nil, 0, true, i, line, h.lastRegion, true) } curState := h.lastRegion lastState := input.State(i) input.SetState(i, curState) if curState == lastState { return i } } return input.LinesNum() - 1 } // ReHighlightLine will rehighlight the state and match for a single line func (h *Highlighter) ReHighlightLine(input LineStates, lineN int) { line := input.LineBytes(lineN) highlights := make(LineMatch) h.lastRegion = nil if lineN > 0 { h.lastRegion = input.State(lineN - 1) } var match LineMatch if lineN == 0 || h.lastRegion == nil { match = h.highlightEmptyRegion(highlights, 0, true, lineN, line, false) } else { match = h.highlightRegion(highlights, 0, true, lineN, line, h.lastRegion, false) } curState := h.lastRegion input.SetMatch(lineN, match) input.SetState(lineN, curState) } micro-2.0.9/pkg/highlight/parser.go000066400000000000000000000217151405030104300172020ustar00rootroot00000000000000package highlight import ( "bytes" "errors" "fmt" "regexp" "gopkg.in/yaml.v2" ) // A Group represents a syntax group type Group uint8 // Groups contains all of the groups that are defined // You can access them in the map via their string name var Groups map[string]Group var numGroups Group // String returns the group name attached to the specific group func (g Group) String() string { for k, v := range Groups { if v == g { return k } } return "" } // A Def is a full syntax definition for a language // It has a filetype, information about how to detect the filetype based // on filename or header (the first line of the file) // Then it has the rules which define how to highlight the file type Def struct { *Header rules *rules } type Header struct { FileType string FtDetect [2]*regexp.Regexp } type HeaderYaml struct { FileType string `yaml:"filetype"` Detect struct { FNameRgx string `yaml:"filename"` HeaderRgx string `yaml:"header"` } `yaml:"detect"` } type File struct { FileType string yamlSrc map[interface{}]interface{} } // A Pattern is one simple syntax rule // It has a group that the rule belongs to, as well as // the regular expression to match the pattern type pattern struct { group Group regex *regexp.Regexp } // rules defines which patterns and regions can be used to highlight // a filetype type rules struct { regions []*region patterns []*pattern includes []string } // A region is a highlighted region (such as a multiline comment, or a string) // It belongs to a group, and has start and end regular expressions // A region also has rules of its own that only apply when matching inside the // region and also rules from the above region do not match inside this region // Note that a region may contain more regions type region struct { group Group limitGroup Group parent *region start *regexp.Regexp end *regexp.Regexp skip *regexp.Regexp rules *rules } func init() { Groups = make(map[string]Group) } // MakeHeader takes a header (.hdr file) file and parses the header // Header files make parsing more efficient when you only want to compute // on the headers of syntax files // A yaml file might take ~400us to parse while a header file only takes ~20us func MakeHeader(data []byte) (*Header, error) { lines := bytes.Split(data, []byte{'\n'}) if len(lines) < 3 { return nil, errors.New("Header file has incorrect format") } header := new(Header) var err error header.FileType = string(lines[0]) fnameRgx := string(lines[1]) headerRgx := string(lines[2]) if fnameRgx != "" { header.FtDetect[0], err = regexp.Compile(fnameRgx) } if headerRgx != "" { header.FtDetect[1], err = regexp.Compile(headerRgx) } if err != nil { return nil, err } return header, nil } // MakeHeaderYaml takes a yaml spec for a syntax file and parses the // header func MakeHeaderYaml(data []byte) (*Header, error) { var hdrYaml HeaderYaml err := yaml.Unmarshal(data, &hdrYaml) if err != nil { return nil, err } header := new(Header) header.FileType = hdrYaml.FileType if hdrYaml.Detect.FNameRgx != "" { header.FtDetect[0], err = regexp.Compile(hdrYaml.Detect.FNameRgx) } if hdrYaml.Detect.HeaderRgx != "" { header.FtDetect[1], err = regexp.Compile(hdrYaml.Detect.HeaderRgx) } if err != nil { return nil, err } return header, nil } func ParseFile(input []byte) (f *File, err error) { // This is just so if we have an error, we can exit cleanly and return the parse error to the user defer func() { if r := recover(); r != nil { var ok bool err, ok = r.(error) if !ok { err = fmt.Errorf("pkg: %v", r) } } }() var rules map[interface{}]interface{} if err = yaml.Unmarshal(input, &rules); err != nil { return nil, err } f = new(File) f.yamlSrc = rules for k, v := range rules { if k == "filetype" { filetype := v.(string) f.FileType = filetype break } } return f, err } // ParseDef parses an input syntax file into a highlight Def func ParseDef(f *File, header *Header) (s *Def, err error) { // This is just so if we have an error, we can exit cleanly and return the parse error to the user defer func() { if r := recover(); r != nil { var ok bool err, ok = r.(error) if !ok { err = fmt.Errorf("pkg: %v", r) } } }() rules := f.yamlSrc s = new(Def) s.Header = header for k, v := range rules { if k == "rules" { inputRules := v.([]interface{}) rules, err := parseRules(inputRules, nil) if err != nil { return nil, err } s.rules = rules } } return s, err } // HasIncludes returns whether this syntax def has any include statements func HasIncludes(d *Def) bool { hasIncludes := len(d.rules.includes) > 0 for _, r := range d.rules.regions { hasIncludes = hasIncludes || hasIncludesInRegion(r) } return hasIncludes } func hasIncludesInRegion(region *region) bool { hasIncludes := len(region.rules.includes) > 0 for _, r := range region.rules.regions { hasIncludes = hasIncludes || hasIncludesInRegion(r) } return hasIncludes } // GetIncludes returns a list of filetypes that are included by this syntax def func GetIncludes(d *Def) []string { includes := d.rules.includes for _, r := range d.rules.regions { includes = append(includes, getIncludesInRegion(r)...) } return includes } func getIncludesInRegion(region *region) []string { includes := region.rules.includes for _, r := range region.rules.regions { includes = append(includes, getIncludesInRegion(r)...) } return includes } // ResolveIncludes will sort out the rules for including other filetypes // You should call this after parsing all the Defs func ResolveIncludes(def *Def, files []*File) { resolveIncludesInDef(files, def) } func resolveIncludesInDef(files []*File, d *Def) { for _, lang := range d.rules.includes { for _, searchFile := range files { if lang == searchFile.FileType { searchDef, _ := ParseDef(searchFile, nil) d.rules.patterns = append(d.rules.patterns, searchDef.rules.patterns...) d.rules.regions = append(d.rules.regions, searchDef.rules.regions...) } } } for _, r := range d.rules.regions { resolveIncludesInRegion(files, r) r.parent = nil } } func resolveIncludesInRegion(files []*File, region *region) { for _, lang := range region.rules.includes { for _, searchFile := range files { if lang == searchFile.FileType { searchDef, _ := ParseDef(searchFile, nil) region.rules.patterns = append(region.rules.patterns, searchDef.rules.patterns...) region.rules.regions = append(region.rules.regions, searchDef.rules.regions...) } } } for _, r := range region.rules.regions { resolveIncludesInRegion(files, r) r.parent = region } } func parseRules(input []interface{}, curRegion *region) (ru *rules, err error) { defer func() { if r := recover(); r != nil { var ok bool err, ok = r.(error) if !ok { err = fmt.Errorf("pkg: %v", r) } } }() ru = new(rules) for _, v := range input { rule := v.(map[interface{}]interface{}) for k, val := range rule { group := k switch object := val.(type) { case string: if k == "include" { ru.includes = append(ru.includes, object) } else { // Pattern r, err := regexp.Compile(object) if err != nil { return nil, err } groupStr := group.(string) if _, ok := Groups[groupStr]; !ok { numGroups++ Groups[groupStr] = numGroups } groupNum := Groups[groupStr] ru.patterns = append(ru.patterns, &pattern{groupNum, r}) } case map[interface{}]interface{}: // region region, err := parseRegion(group.(string), object, curRegion) if err != nil { return nil, err } ru.regions = append(ru.regions, region) default: return nil, fmt.Errorf("Bad type %T", object) } } } return ru, nil } func parseRegion(group string, regionInfo map[interface{}]interface{}, prevRegion *region) (r *region, err error) { defer func() { if r := recover(); r != nil { var ok bool err, ok = r.(error) if !ok { err = fmt.Errorf("pkg: %v", r) } } }() r = new(region) if _, ok := Groups[group]; !ok { numGroups++ Groups[group] = numGroups } groupNum := Groups[group] r.group = groupNum r.parent = prevRegion r.start, err = regexp.Compile(regionInfo["start"].(string)) if err != nil { return nil, err } r.end, err = regexp.Compile(regionInfo["end"].(string)) if err != nil { return nil, err } // skip is optional if _, ok := regionInfo["skip"]; ok { r.skip, err = regexp.Compile(regionInfo["skip"].(string)) if err != nil { return nil, err } } // limit-color is optional if _, ok := regionInfo["limit-group"]; ok { groupStr := regionInfo["limit-group"].(string) if _, ok := Groups[groupStr]; !ok { numGroups++ Groups[groupStr] = numGroups } groupNum := Groups[groupStr] r.limitGroup = groupNum if err != nil { return nil, err } } else { r.limitGroup = r.group } r.rules, err = parseRules(regionInfo["rules"].([]interface{}), r) if err != nil { return nil, err } return r, nil } micro-2.0.9/pkg/highlight/unicode.go000066400000000000000000000031211405030104300173230ustar00rootroot00000000000000package highlight import ( "unicode" "unicode/utf8" ) var minMark = rune(unicode.Mark.R16[0].Lo) func isMark(r rune) bool { // Fast path if r < minMark { return false } return unicode.In(r, unicode.Mark) } // DecodeCharacter returns the next character from an array of bytes // A character is a rune along with any accompanying combining runes func DecodeCharacter(b []byte) (rune, []rune, int) { r, size := utf8.DecodeRune(b) b = b[size:] c, s := utf8.DecodeRune(b) var combc []rune for isMark(c) { combc = append(combc, c) size += s b = b[s:] c, s = utf8.DecodeRune(b) } return r, combc, size } // DecodeCharacterInString returns the next character from a string // A character is a rune along with any accompanying combining runes func DecodeCharacterInString(str string) (rune, []rune, int) { r, size := utf8.DecodeRuneInString(str) str = str[size:] c, s := utf8.DecodeRuneInString(str) var combc []rune for isMark(c) { combc = append(combc, c) size += s str = str[s:] c, s = utf8.DecodeRuneInString(str) } return r, combc, size } // CharacterCount returns the number of characters in a byte array // Similar to utf8.RuneCount but for unicode characters func CharacterCount(b []byte) int { s := 0 for len(b) > 0 { r, size := utf8.DecodeRune(b) if !isMark(r) { s++ } b = b[size:] } return s } // CharacterCount returns the number of characters in a string // Similar to utf8.RuneCountInString but for unicode characters func CharacterCountInString(str string) int { s := 0 for _, r := range str { if !isMark(r) { s++ } } return s } micro-2.0.9/runtime/000077500000000000000000000000001405030104300143045ustar00rootroot00000000000000micro-2.0.9/runtime/README.md000066400000000000000000000004631405030104300155660ustar00rootroot00000000000000# Runtime files for Micro This directory will be embedded in the Go binary for portability, but it may just as well be put in `~/.config/micro`. If you would like to make your own colorschemes and syntax files, you can put them in `~/.config/micro/colorschemes` and `~/.config/micro/syntax` respectively. micro-2.0.9/runtime/colorschemes/000077500000000000000000000000001405030104300167725ustar00rootroot00000000000000micro-2.0.9/runtime/colorschemes/atom-dark.micro000066400000000000000000000021071405030104300217040ustar00rootroot00000000000000color-link default "#C5C8C6,#1D1F21" color-link comment "#7C7C7C,#1D1F21" color-link identifier "#F9EE98,#1D1F21" color-link constant "#FF73FD,#1D1F21" color-link constant.string "#A8FF60,#1D1F21" color-link statement "#96CBFE,#1D1F21" color-link symbol "#96CBFE,#1D1F21" color-link preproc "#62B1FE,#1D1F21" color-link type "#C6C5FE,#1D1F21" color-link special "#A6E22E,#1D1F21" color-link underlined "#D33682,#1D1F21" color-link error "bold #FF4444,#1D1F21" color-link todo "bold #FF8844,#1D1F21" color-link statusline "#1D1F21,#C5C8C6" color-link tabbar "#1D1F21,#C5C8C6" color-link indent-char "#505050,#1D1F21" color-link line-number "#656866,#232526" color-link current-line-number "#656866,#1D1F21" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-error "#FF4444,#1D1F21" color-link gutter-warning "#EEEE77,#1D1F21" color-link cursor-line "#2D2F31" color-link color-column "#2D2F31" #color-link symbol.brackets "#96CBFE,#1D1F21" #No extended types (bool in C, etc.) #color-link type.extended "default" #Plain brackets micro-2.0.9/runtime/colorschemes/bubblegum.micro000066400000000000000000000015421405030104300217730ustar00rootroot00000000000000color-link default "241,231" color-link comment "246,231" color-link constant "130,231" color-link constant.string "136,231" color-link constant.number "131,231" color-link identifier "133,231" color-link statement "32,231" color-link symbol "32,231" color-link preproc "28,231" color-link type "61,231" color-link special "167,231" color-link error "231, 160" color-link underlined "underline 241,231" color-link todo "246,231" color-link statusline "241,254" color-link tabbar "241,254" color-link diff-added "34" color-link diff-modified "214" color-link diff-deleted "160" color-link gutter-error "197,231" color-link gutter-warning "134,231" color-link line-number "246,254" color-link cursor-line "254" color-link color-column "254" #No extended types (bool in C, &c.) and plain brackets color-link type.extended "241,231" color-link symbol.brackets "241,231" micro-2.0.9/runtime/colorschemes/cmc-16.micro000066400000000000000000000030031405030104300210070ustar00rootroot00000000000000#CaptainMcClellan's personal color scheme. #16 colour version. color-link comment "bold black" color-link constant "cyan" color-link constant.bool "bold cyan" color-link constant.bool.true "bold green" color-link constant.bool.false "bold red" color-link constant.string "yellow" color-link constant.string.url "underline blue, white" #color-link constant.number "constant" color-link constant.specialChar "bold magenta" color-link identifier "bold red" color-link identifier.macro "bold red" color-link identifier.var "bold blue" #color-link identifier.class "bold green" color-link identifier.class "bold white" color-link statement "bold yellow" color-link symbol "red" color-link symbol.brackets "blue" color-link symbol.tag "bold blue" color-link symbol.tag.extended "bold green" color-link preproc "bold cyan" color-link type "green" color-link type.keyword "bold green" color-link special "magenta" color-link ignore "default" color-link error "bold ,brightred" color-link todo "underline black,brightyellow" color-link indent-char ",brightgreen" color-link line-number "green" color-link line-number.scrollbar "green" color-link statusline "white,blue" color-link tabbar "white,blue" color-link current-line-number "red" color-link current-line-number.scroller "red" color-link diff-added "green" color-link diff-modified "yellow" color-link diff-deleted "red" color-link gutter-error ",red" color-link gutter-warning "red" color-link color-column "cyan" color-link underlined.url "underline blue, white" color-link divider "blue" micro-2.0.9/runtime/colorschemes/cmc-tc.micro000066400000000000000000000026571405030104300212050ustar00rootroot00000000000000#CaptainMcClellan's personal colour scheme. #Full colour edition. color-link default "#aaaaaa,#1e2124" color-link comment "bold #555555" color-link constant "#008888" #color-link constant.string "#888800" color-link constant.string "#a85700" color-link constant.specialChar "bold #ccccff" color-link identifier "bold #e34234" color-link identifier.macro "bold #e34234" color-link identifier.var "bold #5757ff" color-link identifier.class "bold #ffffff" color-link statement "bold #ffff55" color-link symbol "#722f37" color-link symbol.brackets "#4169e1" color-link symbol.tag "#5757ff" color-link preproc "bold #55ffff" color-link type "#3eb489" color-link type.keyword "bold #bdecb6" color-link special "#b57edc" color-link ignore "default" color-link error "bold ,#e34234" color-link todo "bold underline #888888,#f26522" color-link indent-char ",#bdecb6" color-link line-number "#bdecb6,#36393e" color-link line-number.scrollbar "#3eb489" color-link statusline "#aaaaaa,#8a496b" color-link tabbar "#aaaaaa,#8a496b" color-link current-line-number "bold #e34234,#424549" color-link current-line-number.scroller "red" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-error ",#e34234" color-link gutter-warning "#e34234" color-link color-column "#f26522" color-link constant.bool "bold #55ffff" color-link constant.bool.true "bold #85ff85" color-link constant.bool.false "bold #ff8585" micro-2.0.9/runtime/colorschemes/darcula.micro000066400000000000000000000022071405030104300214410ustar00rootroot00000000000000color-link default "#CCCCCC,#242424" color-link comment "#707070,#242424" color-link identifier "#FFC66D,#242424" color-link constant "#7A9EC2,#242424" color-link constant.string "#6A8759,#242424" color-link constant.string.char "#6A8759,#242424" color-link statement "#CC8242,#242424" color-link symbol "#CCCCCC,#242424" color-link preproc "#CC8242,#242424" color-link type "#CC8242,#242424" color-link special "#CC8242,#242424" color-link underlined "#D33682,#242424" color-link error "bold #CB4B16,#242424" color-link todo "bold #D33682,#242424" color-link statusline "#242424,#CCCCCC" color-link tabbar "#242424,#CCCCCC" color-link indent-char "#4F4F4F,#242424" color-link line-number "#666666,#2C2C2C" color-link current-line-number "#666666,#242424" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-error "#CB4B16,#242424" color-link gutter-warning "#E6DB74,#242424" color-link cursor-line "#2C2C2C" color-link color-column "#2C2C2C" #No extended types; Plain brackets. color-link type.extended "default" #color-link symbol.brackets "default" color-link symbol.tag "#AE81FF,#242424" micro-2.0.9/runtime/colorschemes/default.micro000066400000000000000000000022201405030104300214450ustar00rootroot00000000000000color-link default "#F8F8F2,#282828" color-link comment "#75715E,#282828" color-link identifier "#66D9EF,#282828" color-link constant "#AE81FF,#282828" color-link constant.string "#E6DB74,#282828" color-link constant.string.char "#BDE6AD,#282828" color-link statement "#F92672,#282828" color-link symbol.operator "#F92671,#282828" color-link preproc "#CB4B16,#282828" color-link type "#66D9EF,#282828" color-link special "#A6E22E,#282828" color-link underlined "#D33682,#282828" color-link error "bold #CB4B16,#282828" color-link todo "bold #D33682,#282828" color-link statusline "#282828,#F8F8F2" color-link tabbar "#282828,#F8F8F2" color-link indent-char "#505050,#282828" color-link line-number "#AAAAAA,#323232" color-link current-line-number "#AAAAAA,#282828" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-error "#CB4B16,#282828" color-link gutter-warning "#E6DB74,#282828" color-link cursor-line "#323232" color-link color-column "#323232" #No extended types; Plain brackets. color-link type.extended "default" #color-link symbol.brackets "default" color-link symbol.tag "#AE81FF,#282828" micro-2.0.9/runtime/colorschemes/dracula-tc.micro000066400000000000000000000021131405030104300220410ustar00rootroot00000000000000color-link default "#F8F8F2,#282A36" color-link comment "#6272A4" color-link identifier "#50FA7B" color-link identifier.class "#8BE9FD" color-link identifier.var "#F8F8F2" color-link constant "#BD93F9" color-link constant.number "#F8F8F2" color-link constant.string "#F1FA8C" color-link symbol "#FF79C6" color-link symbol.brackets "#F8F8F2" color-link symbol.tag "#AE81FF" color-link type "italic #8BE9FD" color-link type.keyword "#FF79C6" color-link special "#FF79C6" color-link statement "#FF79C6" color-link preproc "#FF79C6" color-link underlined "#FF79C6" color-link error "bold #FF5555" color-link todo "bold #FF79C6" color-link diff-added "#50FA7B" color-link diff-modified "#FFB86C" color-link diff-deleted "#FF5555" color-link gutter-error "#FF5555" color-link gutter-warning "#E6DB74" color-link statusline "#282A36,#F8F8F2" color-link tabbar "#282A36,#F8F8F2" color-link indent-char "#6272A4" color-link line-number "#6272A4" color-link current-line-number "#F8F8F2" color-link cursor-line "#44475A,#F8F8F2" color-link color-column "#44475A" color-link type.extended "default" micro-2.0.9/runtime/colorschemes/dukedark-tc.micro000066400000000000000000000025671405030104300222350ustar00rootroot00000000000000color-link color-column "#001e28" color-link comment "#608b4e,#001e28" color-link constant.bool "#fd971f,#001e28" color-link constant "#fd971f,#001e28" color-link constant.string "#a0f000,#001e28" color-link constant.string.char "#a0f000,#001e28" color-link constant.string.url "#a0f000,#001e28" color-link current-line-number "bold #fd971f,#001e28" color-link cursor-line "#001923" color-link default "#ffffff,#001e28" color-link diff-added "#00c8a0,#001e28" color-link diff-modified "#fd971f,#001e28" color-link diff-deleted "#cb4b16,#001e28" color-link divider "#001e28,#d0d0d0" color-link error "#cb4b16,#001e28" color-link gutter-error "#cb4b16,#001e28" color-link gutter-warning "#fce94f,#001e28" color-link identifier "#00c8a0,#001e28" color-link identifier.class "#00c8a0,#001e28" color-link indent-char "#a0a0a0,#001e28" color-link line-number "#a0a0a0,#001923" color-link preproc "bold #5aaae6,#001e28" color-link special "#a6e22e,#001e28" color-link statement "bold #5aaae6,#001e28" color-link statusline "#ffffff,#0078c8" color-link symbol "#00c8a0,#001e28" color-link symbol.brackets "#ffffff,#001e28" color-link symbol.tag "bold #5aaae6,#001e28" color-link tabbar "#001e28,#ffffff" color-link todo "#fce94f,#001e28" color-link type "bold #3cc83c,#001e28" color-link type.keyword "bold #5aaae6,#001e28" color-link type.extended "#ffffff,#001e28" color-link underlined "#608b4e,#001e28" micro-2.0.9/runtime/colorschemes/dukelight-tc.micro000066400000000000000000000026131405030104300224130ustar00rootroot00000000000000color-link color-column "#f0f0f0" color-link comment "#3f7f5f,#f0f0f0" color-link constant.bool "#641e00,#f0f0f0" color-link constant "#641e00,#f0f0f0" color-link constant.string "#0000ff,#f0f0f0" color-link constant.string.char "#0000ff,#f0f0f0" color-link constant.string.url "#0000ff,#f0f0f0" color-link current-line-number "bold #004080,#f0f0f0" color-link cursor-line "#e6e6e6" color-link default "#000000,#f0f0f0" color-link diff-added "#008040,#f0f0f0" color-link diff-modified "#641e00,#f0f0f0" color-link diff-deleted "#500000,#f0f0f0" color-link divider "#f0f0f0,#004080" color-link error "#500000,#f0f0f0" color-link gutter-error "#500000,#f0f0f0" color-link gutter-warning "#dcc800,#f0f0f0" color-link identifier "bold #0078a0,#f0f0f0" color-link identifier.class "bold #0078a0,#f0f0f0" color-link indent-char "#404040,#f0f0f0" color-link line-number "#404040,#e6e6e6" color-link preproc "bold #780050,#f0f0f0" color-link special "bold #0078a0,#f0f0f0" color-link statement "bold #780050,#f0f0f0" color-link statusline "#ffffff,#0078c8" color-link symbol "bold #0078a0,#f0f0f0" color-link symbol.brackets "#000000,#f0f0f0" color-link symbol.tag "bold #780050,#f0f0f0" color-link tabbar "#f0f0f0,#004080" color-link todo "#dcc800,#f0f0f0" color-link type "bold #004080,#f0f0f0" color-link type.keyword "bold #780050,#f0f0f0" color-link type.extended "#000000,#f0f0f0" color-link underlined "#3f7f5f,#f0f0f0" micro-2.0.9/runtime/colorschemes/dukeubuntu-tc.micro000066400000000000000000000025671405030104300226360ustar00rootroot00000000000000color-link color-column "#2d0023" color-link comment "#886484,#2d0023" color-link constant.bool "#fd971f,#2d0023" color-link constant "#fd971f,#2d0023" color-link constant.string "#a0f000,#2d0023" color-link constant.string.char "#a0f000,#2d0023" color-link constant.string.url "#a0f000,#2d0023" color-link current-line-number "bold #fd971f,#2d0023" color-link cursor-line "#230019" color-link default "#ffffff,#2d0023" color-link diff-added "#00c8a0,#2d0023" color-link diff-modified "#fd971f,#2d0023" color-link diff-deleted "#cb4b16,#2d0023" color-link divider "#2d0023,#d0d0d0" color-link error "#cb4b16,#2d0023" color-link gutter-error "#cb4b16,#2d0023" color-link gutter-warning "#fce94f,#2d0023" color-link identifier "#00c8a0,#2d0023" color-link identifier.class "#00c8a0,#2d0023" color-link indent-char "#a0a0a0,#2d0023" color-link line-number "#a0a0a0,#230019" color-link preproc "bold #5aaae6,#2d0023" color-link special "#a6e22e,#2d0023" color-link statement "bold #5aaae6,#2d0023" color-link statusline "#ffffff,#0078c8" color-link symbol "#00c8a0,#2d0023" color-link symbol.brackets "#ffffff,#2d0023" color-link symbol.tag "bold #5aaae6,#2d0023" color-link tabbar "#2d0023,#ffffff" color-link todo "#fce94f,#2d0023" color-link type "bold #3cc83c,#2d0023" color-link type.keyword "bold #5aaae6,#2d0023" color-link type.extended "#ffffff,#2d0023" color-link underlined "#886484,#2d0023" micro-2.0.9/runtime/colorschemes/geany.micro000066400000000000000000000013501405030104300211270ustar00rootroot00000000000000#Geany color-link comment "red" color-link constant "default" color-link constant.string "bold yellow" color-link identifier "default" color-link preproc "cyan" color-link special "blue" color-link statement "blue" color-link symbol "default" color-link symbol.tag "bold blue" color-link type "blue" color-link type.extended "default" color-link error "red" color-link todo "bold cyan" color-link indent-char "bold black" color-link line-number "" color-link current-line-number "" color-link statusline "black,white" color-link tabbar "black,white" color-link color-column "bold geren" color-link diff-added "green" color-link diff-modified "yellow" color-link diff-deleted "red" color-link gutter-error ",red" color-link gutter-warning "red" micro-2.0.9/runtime/colorschemes/gotham.micro000066400000000000000000000017161405030104300213110ustar00rootroot00000000000000color-link default "#99D1CE,#0C1014" color-link comment "#245361,#0C1014" color-link identifier "#599CAB,#0C1014" color-link constant "#D26937,#0C1014" color-link constant.string "#2AA889,#0C1014" color-link constant.string.char "#D3EBE9,#0C1014" color-link statement "#599CAB,#0C1014" color-link preproc "#C23127,#0C1014" color-link type "#D26937,#0C1014" color-link special "#D26937,#0C1014" color-link underlined "#EDB443,#0C1014" color-link error "bold #C23127,#0C1014" color-link todo "bold #888CA6,#0C1014" color-link statusline "#091F2E,#599CAB" color-link indent-char "#505050,#0C1014" color-link line-number "#245361,#11151C" color-link current-line-number "#599CAB,#11151C" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-error "#C23127,#11151C" color-link gutter-warning "#EDB443,#11151C" color-link cursor-line "#091F2E" color-link color-column "#11151C" color-link symbol "#99D1CE,#0C1014" micro-2.0.9/runtime/colorschemes/gruvbox-tc.micro000066400000000000000000000016331405030104300221300ustar00rootroot00000000000000color-link default "#ebdbb2,#282828" color-link comment "#928374,#282828" color-link symbol "#d79921,#282828" color-link constant "#d3869b,#282828" color-link constant.string "#b8bb26,#282828" color-link constant.string.char "#b8bb26,#282828" color-link identifier "#8ec07c,#282828" color-link statement "#fb4934,#282828" color-link preproc "#fb4934,235" color-link type "#fb4934,#282828" color-link special "#d79921,#282828" color-link underlined "underline #282828" color-link error "#9d0006,#282828" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-error "#fb4934,#282828" color-link gutter-warning "#d79921,#282828" color-link line-number "#665c54,#3c3836" color-link current-line-number "#d79921,#282828" color-link cursor-line "#3c3836" color-link color-column "#79740e" color-link statusline "#ebdbb2,#665c54" color-link tabbar "#ebdbb2,#665c54" micro-2.0.9/runtime/colorschemes/gruvbox.micro000066400000000000000000000012501405030104300215170ustar00rootroot00000000000000color-link default "223,235" color-link comment "243,235" color-link constant "175,235" color-link constant.string "142,235" color-link identifier "109,235" color-link statement "124,235" color-link symbol "124,235" color-link preproc "72,235" color-link type "214,235" color-link special "172,235" color-link underlined "underline 109,235" color-link error "235,124" color-link todo "bold 223,235" color-link diff-added "34" color-link diff-modified "214" color-link diff-deleted "160" color-link line-number "243,237" color-link current-line-number "172,235" color-link cursor-line "237" color-link color-column "237" color-link statusline "223,237" color-link tabbar "223,237" micro-2.0.9/runtime/colorschemes/material-tc.micro000066400000000000000000000023261405030104300222320ustar00rootroot00000000000000color-link color-column "#263238" color-link comment "#4F6875,#263238" color-link constant "#F07178,#263238" color-link constant.number "#F78C6A,#263238" color-link constant.specialChar "#89DDF3,#263238" color-link constant.string "#C3E88D,#263238" color-link current-line-number "#80DEEA,#263238" color-link cursor-line "#283942" color-link default "#EEFFFF,#263238" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link divider "#263238,#80DEEA" color-link error "bold #263238,#F07178" color-link gutter-error "#EEFFFF,#F07178" color-link gutter-warning "#EEFFFF,#FFF176" color-link identifier "#82AAFF,#263238" color-link identifier.macro "#FFCB6B,#263238" color-link indent-char "#505050,#263238" color-link line-number "#656866,#283942" color-link preproc "#C792EA,#263238" color-link special "#C792EA,#263238" color-link statement "#C792EA,#263238" color-link statusline "#80DEEA,#3b4d56" color-link symbol "#96CBFE,#263238" color-link symbol.brackets "#89DDF3,#263238" color-link symbol.operator "#C792EA,#263238" color-link tabbar "#80DEEA,#3b4d56" color-link todo "bold #C792EA,#263238" color-link type "#FFCB6B,#263238" color-link underlined "underline #EEFFFF,#263238" micro-2.0.9/runtime/colorschemes/monokai-dark.micro000066400000000000000000000014721405030104300224050ustar00rootroot00000000000000color-link default "#D5D8D6,#1D0000" color-link comment "#75715E" color-link identifier "#66D9EF" color-link constant "#AE81FF" color-link constant.string "#E6DB74" color-link constant.string.char "#BDE6AD" color-link statement "#F92672" color-link preproc "#CB4B16" color-link type "#66D9EF" color-link special "#A6E22E" color-link underlined "#D33682" color-link error "bold #CB4B16" color-link todo "bold #D33682" color-link statusline "#282828,#F8F8F2" color-link indent-char "#505050,#282828" color-link line-number "#AAAAAA,#282828" color-link current-line-number "#AAAAAA,#1D0000" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-error "#CB4B16" color-link gutter-warning "#E6DB74" color-link cursor-line "#323232" color-link color-column "#323232" micro-2.0.9/runtime/colorschemes/monokai.micro000066400000000000000000000022201405030104300214560ustar00rootroot00000000000000color-link default "#F8F8F2,#282828" color-link comment "#75715E,#282828" color-link identifier "#66D9EF,#282828" color-link constant "#AE81FF,#282828" color-link constant.string "#E6DB74,#282828" color-link constant.string.char "#BDE6AD,#282828" color-link statement "#F92672,#282828" color-link symbol.operator "#F92672,#282828" color-link preproc "#CB4B16,#282828" color-link type "#66D9EF,#282828" color-link special "#A6E22E,#282828" color-link underlined "#D33682,#282828" color-link error "bold #CB4B16,#282828" color-link todo "bold #D33682,#282828" color-link statusline "#282828,#F8F8F2" color-link tabbar "#282828,#F8F8F2" color-link indent-char "#505050,#282828" color-link line-number "#AAAAAA,#323232" color-link current-line-number "#AAAAAA,#282828" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-error "#CB4B16,#282828" color-link gutter-warning "#E6DB74,#282828" color-link cursor-line "#323232" color-link color-column "#323232" #No extended types; Plain brackets. color-link type.extended "default" #color-link symbol.brackets "default" color-link symbol.tag "#AE81FF,#282828" micro-2.0.9/runtime/colorschemes/one-dark.micro000066400000000000000000000022521405030104300215260ustar00rootroot00000000000000color-link default "#ABB2BF,#21252C" color-link color-column "#282C34" color-link comment "#5C6370" color-link constant "#C678DD" color-link constant.number "#E5C07B" color-link constant.string "#98C379" color-link constant.string.char "#BDE6AD" color-link constant.specialChar "#DDF2A4" color-link current-line-number "#C6C6C6,#21252C" color-link cursor-line "#282C34" color-link divider "#ABB2BF" color-link error "#D2A8A1" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-error "#9B859D" color-link gutter-warning "#9B859D" color-link identifier "#61AFEF" color-link identifier.class "#C678DD" color-link identifier.var "#C678DD" color-link indent-char "#515151" color-link line-number "#636D83,#282C34" color-link preproc "#E0C589" color-link special "#E0C589" color-link statement "#C678DD" color-link statusline "#282828,#ABB2BF" color-link symbol "#AC885B" color-link symbol.brackets "#ABB2BF" color-link symbol.operator "#C678DD" color-link symbol.tag "#AC885B" color-link tabbar "#F2F0EC,#2D2D2D" color-link todo "#8B98AB" color-link type "#66D9EF" color-link type.keyword "#C678DD" color-link underlined "#8996A8" micro-2.0.9/runtime/colorschemes/railscast.micro000066400000000000000000000023711405030104300220150ustar00rootroot00000000000000color-link default "#e6e1dc,#2b2b2b" color-link comment "#bc9458,#2b2b2b" color-link statement "#cc7833,#2b2b2b" color-link constant "#a5c261,#2b2b2b" color-link constant.bool "#6d9cbe,#2b2b2b" color-link constant.specialChar "#459231,#2b2b2b" color-link type "#6d9cbe,#2b2b2b" color-link preproc "#cc7833,#2b2b2b" color-link special "#cc7833,#2b2b2b" color-link underlined "#cc7833,#2b2b2b" color-link todo "bold #cc7833,#2b2b2b" color-link error "bold #cc7833,#2b2b2b" color-link gutter-error "#cc7833,#11151C" color-link indent-char "#414141,#2b2b2b" color-link line-number "#a1a1a1,#232323" color-link current-line-number "#e6e1dc,#2b2b2b" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-warning "#a5c261,#11151C" color-link symbol "#edb753,#2b2b2b" color-link symbol.operator "#cc7833,#2b2b2b" color-link symbol.brackets "#cc7833,#2b2b2b" color-link identifier "#edb753,#2b2b2b" color-link statusline "#b1b1b1,#232323" color-link tabbar "bold #b1b1b1,#232323" color-link cursor-line "#353535" color-link color-column "#353535" color-link space "underline #e6e1dc,#2b2b2b" #the Python syntax definition are wrong. This is not how you should do decorators! color-link brightgreen "#edb753,#2b2b2b" micro-2.0.9/runtime/colorschemes/simple.micro000066400000000000000000000016001405030104300213130ustar00rootroot00000000000000color-link comment "blue" color-link constant "red" color-link identifier "cyan" color-link statement "yellow" color-link symbol "yellow" color-link preproc "magenta" color-link type "green" color-link special "magenta" color-link ignore "default" color-link error ",brightred" color-link todo ",brightyellow" color-link indent-char "black" color-link line-number "yellow" color-link current-line-number "red" color-link diff-added "green" color-link diff-modified "yellow" color-link diff-deleted "red" color-link gutter-error ",red" color-link gutter-warning "red" #Cursor line causes readability issues. Disabled for now. #color-link cursor-line "white,black" color-link color-column "white" #No extended types. (bool in C) color-link type.extended "default" #No bracket highlighting. color-link symbol.brackets "default" #Color shebangs the comment color color-link preproc.shebang "comment" micro-2.0.9/runtime/colorschemes/solarized-tc.micro000066400000000000000000000020351405030104300224250ustar00rootroot00000000000000color-link default "#839496,#002833" color-link comment "#586E75,#002833" color-link identifier "#268BD2,#002833" color-link constant "#2AA198,#002833" color-link constant.specialChar "#DC322F,#002833" color-link statement "#859900,#002833" color-link symbol "#859900,#002833" color-link preproc "#CB4B16,#002833" color-link type "#B58900,#002833" color-link special "#268BD2,#002833" color-link underlined "#D33682,#002833" color-link error "bold #CB4B16,#002833" color-link todo "bold #D33682,#002833" color-link statusline "#003541,#839496" color-link tabbar "#003541,#839496" color-link indent-char "#003541,#002833" color-link line-number "#586E75,#003541" color-link current-line-number "#586E75,#002833" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-error "#003541,#CB4B16" color-link gutter-warning "#CB4B16,#002833" color-link cursor-line "#003541" color-link color-column "#003541" color-link type.extended "#839496,#002833" color-link symbol.brackets "#839496,#002833" micro-2.0.9/runtime/colorschemes/solarized.micro000066400000000000000000000016021405030104300220200ustar00rootroot00000000000000color-link comment "bold brightgreen" color-link constant "cyan" color-link constant.specialChar "red" color-link identifier "blue" color-link statement "green" color-link symbol "green" color-link preproc "brightred" color-link type "yellow" color-link special "blue" color-link underlined "magenta" color-link error "bold brightred" color-link todo "bold magenta" color-link statusline "black,brightblue" color-link tabbar "black,brightblue" color-link indent-char "black" color-link line-number "bold brightgreen,black" color-link current-line-number "bold brightgreen,default" color-link diff-added "green" color-link diff-modified "yellow" color-link diff-deleted "red" color-link gutter-error "black,brightred" color-link gutter-warning "brightred,default" color-link cursor-line "black" color-link color-column "black" color-link type.extended "default" color-link symbol.brackets "default" micro-2.0.9/runtime/colorschemes/sunny-day.micro000066400000000000000000000012671405030104300217620ustar00rootroot00000000000000color-link default "0,230" color-link comment "244" color-link constant.string "17" color-link constant "88" color-link identifier "22" color-link statement "0,230" color-link symbol "89" color-link preproc "22" color-link type "88" color-link special "22" color-link underlined "61,230" color-link error "88" color-link todo "210" color-link statusline "233,229" color-link tabbar "233,229" color-link indent-char "229" color-link line-number "244" color-link diff-added "34" color-link diff-modified "214" color-link diff-deleted "160" color-link gutter-error "88" color-link gutter-warning "88" color-link cursor-line "229" #color-link color-column "196" color-link current-line-number "246" micro-2.0.9/runtime/colorschemes/twilight.micro000066400000000000000000000023121405030104300216560ustar00rootroot00000000000000# Twilight color scheme color-link default "#F8F8F8,#141414" color-link color-column "#1B1B1B" color-link comment "#5F5A60" color-link constant "#CF6A4C" #color-link constant.number "#CF6A4C" color-link constant.specialChar "#DDF2A4" color-link constant.string "#8F9D6A" color-link current-line-number "#868686,#1B1B1B" color-link cursor-line "#1B1B1B" color-link divider "#1E1E1E" color-link error "#D2A8A1" color-link diff-added "#00AF00" color-link diff-modified "#FFAF00" color-link diff-deleted "#D70000" color-link gutter-error "#9B859D" color-link gutter-warning "#9B859D" color-link identifier "#9B703F" color-link identifier.class "#DAD085" color-link identifier.var "#7587A6" color-link indent-char "#515151" color-link line-number "#868686,#1B1B1B" color-link current-line-number "#868686,#141414" color-link preproc "#E0C589" color-link special "#E0C589" color-link statement "#CDA869" color-link statusline "#515151,#1E1E1E" color-link symbol "#AC885B" color-link symbol.brackets "#F8F8F8" color-link symbol.operator "#CDA869" color-link symbol.tag "#AC885B" color-link tabbar "#F2F0EC,#2D2D2D" color-link todo "#8B98AB" color-link type "#F9EE98" color-link type.keyword "#CDA869" color-link underlined "#8996A8" micro-2.0.9/runtime/colorschemes/zenburn.micro000066400000000000000000000014531405030104300215130ustar00rootroot00000000000000color-link default "188,237" color-link comment "108,237" color-link constant.string "174,237" color-link constant.number "116,237" color-link constant "181,237" color-link identifier "223,237" color-link statement "223,237" color-link symbol "223,237" color-link preproc "223,237" color-link type "187,237" color-link special "181,237" color-link underlined "188,237" color-link error "115,236" color-link todo "bold 254,237" color-link statusline "186,236" color-link tabbar "186,236" color-link indent-char "238,237" color-link line-number "248,238" color-link diff-added "34" color-link diff-modified "214" color-link diff-deleted "160" color-link gutter-error "237,174" color-link gutter-warning "174,237" color-link cursor-line "238" color-link color-column "238" color-link current-line-number "188,237" micro-2.0.9/runtime/help/000077500000000000000000000000001405030104300152345ustar00rootroot00000000000000micro-2.0.9/runtime/help/colors.md000066400000000000000000000300341405030104300170570ustar00rootroot00000000000000# Colors This help page aims to cover two aspects of micro's syntax highlighting engine: * How to create colorschemes and use them. * How to create syntax files to add to the list of languages micro can highlight. ## Colorschemes To change your colorscheme, press Ctrl-e in micro to bring up the command prompt, and type: ``` set colorscheme twilight ``` (or whichever colorscheme you choose). Micro comes with a number of colorschemes by default. The colorschemes that you can display will depend on what kind of color support your terminal has. Omit color-link default "[fg color],[bg color]" will make the background color match the terminal's, and transparency if set. Modern terminals tend to have a palette of 16 user-configurable colors (these colors can often be configured in the terminal preferences), and additional color support comes in three flavors. * 16-color: A colorscheme that uses the 16 default colors will always work but will only look good if the 16 default colors have been configured to the user's liking. Using a colorscheme that only uses the 16 colors from the terminal palette will also preserve the terminal's theme from other applications since the terminal will often use those same colors for other applications. Default colorschemes of this type include `simple` and `solarized`. * 256-color: Almost all terminals support displaying an additional 240 colors on top of the 16 user-configurable colors (creating 256 colors total). Colorschemes which use 256-color are portable because they will look the same regardless of the configured 16-color palette. However, the color range is fairly limited due to the small number of colors available. Default 256-color colorschemes include `monokai`, `twilight`, `zenburn`, `darcula` and more. * true-color: Some terminals support displaying "true color" with 16 million colors using standard RGB values. This mode will be able to support displaying any colorscheme, but it should be noted that the user-configured 16-color palette is ignored when using true-color mode (this means the colors while using the terminal emulator will be slightly off). Not all terminals support true color but at this point most do. True color support in micro is off by default but can be enabled by setting the environment variable `MICRO_TRUECOLOR` to 1. In addition your terminal must support it (usually indicated by setting `$COLORTERM` to `truecolor`). True-color colorschemes in micro typically end with `-tc`, such as `solarized-tc`, `atom-dark-tc`, `material-tc`, etc... If true color is not enabled but a true color colorscheme is used, micro will do its best to approximate the colors to the available 256 colors. Here is the list of colorschemes: ### 256 color These should work and look nice in most terminals. I recommend these themes the most. * `monokai` (also the `default` colorscheme) * `zenburn` * `gruvbox` * `darcula` * `twilight` * `railscast` * `bubblegum` ### 16 color These may vary widely based on the 16 colors selected for your terminal. * `simple` * `solarized` (must have the solarized color palette in your terminal to use this colorscheme properly) * `cmc-16` * `cmc-paper` * `geany` ### True color True color requires your terminal to support it. This means that the environment variable `COLORTERM` should have the value `truecolor`, `24bit`, or `24-bit`. In addition, to enable true color in micro, the environment variable `MICRO_TRUECOLOR` must be set to 1. Note that you have to create and set this variable yourself. * `solarized-tc`: this is the solarized colorscheme for true color. * `atom-dark-tc`: this colorscheme is based off of Atom's "dark" colorscheme. * `cmc-tc`: A true colour variant of the cmc theme. It requires true color to look its best. Use cmc-16 if your terminal doesn't support true color. * `gruvbox-tc`: The true color version of the gruvbox colorscheme * `github-tc`: The true color version of the Github colorscheme * `material-tc`: Colorscheme based off of Google's Material Design palette ## Creating a Colorscheme Micro's colorschemes are also extremely simple to create. The default ones can be found [here](https://github.com/zyedidia/micro/tree/master/runtime/colorschemes). Custom colorschemes should be placed in the `~/.config/micro/colorschemes` directory. A number of custom directives are placed in a `.micro` file. Colorschemes are typically only 18-30 lines in total. To create the colorscheme you need to link highlight groups with actual colors. This is done using the `color-link` command. For example, to highlight all comments in green, you would use the command: ``` color-link comment "green" ``` Background colors can also be specified with a comma: ``` color-link comment "green,blue" ``` This will give the comments a blue background. If you would like no foreground you can just use a comma with nothing in front: ``` color-link comment ",blue" ``` You can also put bold, italic, or underline in front of the color: ``` color-link comment "bold red" ``` --- There are three different ways to specify the color. Color terminals usually have 16 colors that are preset by the user. This means that you cannot depend on those colors always being the same. You can use those colors with the names `black, red, green, yellow, blue, magenta, cyan, white` and the bright variants of each one (brightblack, brightred...). Then you can use the terminals 256 colors by using their numbers 1-256 (numbers 1-16 will refer to the named colors). If the user's terminal supports true color, then you can also specify colors exactly using their hex codes. If the terminal is not true color but micro is told to use a true color colorscheme it will attempt to map the colors to the available 256 colors. Generally colorschemes which require true color terminals to look good are marked with a `-tc` suffix and colorschemes which supply a white background are marked with a `-paper` suffix. --- Here is a list of the colorscheme groups that you can use: * default (color of the background and foreground for unhighlighted text) * comment * identifier * constant * statement * symbol * preproc * type * special * underlined * error * todo * selection (Color of the text selection) * statusline (Color of the statusline) * tabbar (Color of the tabbar that lists open files) * indent-char (Color of the character which indicates tabs if the option is enabled) * line-number * gutter-error * gutter-warning * diff-added * diff-modified * diff-deleted * cursor-line * current-line-number * color-column * ignore * scrollbar * divider (Color of the divider between vertical splits) * message (Color of messages in the bottom line of the screen) * error-message (Color of error messages in the bottom line of the screen) Colorschemes must be placed in the `~/.config/micro/colorschemes` directory to be used. --- In addition to the main colorscheme groups, there are subgroups that you can specify by adding `.subgroup` to the group. If you're creating your own custom syntax files, you can make use of your own subgroups. If micro can't match the subgroup, it'll default to the root group, so it's safe and recommended to use subgroups in your custom syntax files. For example if `constant.string` is found in your colorscheme, micro will us that for highlighting strings. If it's not found, it will use constant instead. Micro tries to match the largest set of groups it can find in the colorscheme definitions, so if, for examle `constant.bool.true` is found then micro will use that. If `constant.bool.true` is not found but `constant.bool` is found micro will use `constant.bool`. If not, it uses `constant`. Here's a list of subgroups used in micro's built-in syntax files. * comment.bright (Some filetypes have distinctions between types of comments) * constant.bool * constant.bool.true * constant.bool.false * constant.number * constant.specialChar * constant.string * constant.string.url * identifier.class (Also used for functions) * identifier.macro * identifier.var * preproc.shebang (The #! at the beginning of a file that tells the os what script interpreter to use) * symbol.brackets (`{}()[]` and sometimes `<>`) * symbol.operator (Color operator symbols differently) * symbol.tag (For html tags, among other things) * type.keyword (If you want a special highlight for keywords like `private`) In the future, plugins may also be able to use color groups for styling. ## Syntax files The syntax files are written in yaml-format and specify how to highlight languages. Micro's builtin syntax highlighting tries very hard to be sane, sensible and provide ample coverage of the meaningful elements of a language. Micro has syntax files built in for over 100 languages now! However, there may be situations where you find Micro's highlighting to be insufficient or not to your liking. The good news is that you can create your own syntax files, and place them in `~/.config/micro/syntax` and Micro will use those instead. ### Filetype definition You must start the syntax file by declaring the filetype: ``` filetype: go ``` ### Detect definition Then you must provide information about how to detect the filetype: ``` detect: filename: "\\.go$" ``` Micro will match this regex against a given filename to detect the filetype. You may also provide an optional `header` regex that will check the first line of the file. For example: ``` detect: filename: "\\.ya?ml$" header: "%YAML" ``` ### Syntax rules Next you must provide the syntax highlighting rules. There are two types of rules: patterns and regions. A pattern is matched on a single line and usually a single word as well. A region highlights between two patterns over multiple lines and may have rules of its own inside the region. Here are some example patterns in Go: ``` rules: - special: "\\b(break|case|continue|default|go|goto|range|return)\\b" - statement: "\\b(else|for|if|switch)\\b" - preproc: "\\b(package|import|const|var|type|struct|func|go|defer|iota)\\b" ``` The order of patterns does matter as patterns lower in the file will overwrite the ones defined above them. And here are some example regions for Go: ``` - constant.string: start: "\"" end: "\"" rules: - constant.specialChar: "%." - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" ``` Notice how the regions may contain rules inside of them. Any inner rules that are matched are then skipped when searching for the end of the region. For example, when highlighting `"foo \" bar"`, since `\"` is matched by an inner rule in the region, it is skipped. Likewise for `"foo \\" bar`, since `\\` is matched by an inner rule, it is skipped, and then the `"` is found and the string ends at the correct place. You may also explicitly mark skip regexes if you don't want them to be highlighted. For example: ``` - constant.string: start: "\"" end: "\"" skip: "\\." rules: [] ``` #### Includes You may also include rules from other syntax files as embedded languages. For example, the following is possible for html: ``` - default: start: "" end: "" rules: - include: "javascript" - default: start: "" end: "" rules: - include: "css" ``` ## Syntax file headers Syntax file headers are an optimization and it is likely you do not need to worry about them. Syntax file headers are files that contain only the filetype and the detection regular expressions for a given syntax file. They have a `.hdr` suffix and are used by default only for the pre-installed syntax files. Header files allow micro to parse the syntax files much faster when checking the filetype of a certain file. Custom syntax files may provide header files in `~/.config/micro/syntax` as well but it is not necessary (only do this if you have many (100+) custom syntax files and want to improve performance). micro-2.0.9/runtime/help/commands.md000066400000000000000000000115521405030104300173630ustar00rootroot00000000000000# Command bar The command bar is opened by pressing Ctrl-e. It is a single-line buffer, meaning that all keybindings from a normal buffer are supported (as well as mouse and selection). When running a command, you can use extra syntax that micro will expand before running the command. To use an argument with a space in it, put it in quotes. The command bar parser uses the same rules for parsing arguments that `/bin/sh` would use (single quotes, double quotes, escaping). The command bar does not look up environment variables. # Commands Micro provides the following commands that can be executed at the command-bar by pressing `Ctrl-e` and entering the command. Arguments are placed in single quotes here but these are not necessary when entering the command in micro. * `bind 'key' 'action'`: creates a keybinding from key to action. See the `keybindings` documentation for more information about binding keys. This command will modify `bindings.json` and overwrite any bindings to `key` that already exist. * `help 'topic'?`: opens the corresponding help topic. If no topic is provided opens the default help screen. * `save 'filename'?`: saves the current buffer. If the file is provided it will 'save as' the filename. * `quit`: quits micro. * `replace 'search' 'value' 'flags'?`: This will replace `search` with `value`. The `flags` are optional. Possible flags are: * `-a`: Replace all occurrences at once * `-l`: Do a literal search instead of a regex search Note that `search` must be a valid regex (unless `-l` is passed). If one of the arguments does not have any spaces in it, you may omit the quotes. * `replaceall 'search' 'value'`: this will replace all occurrences of `search` with `value` without user confirmation. See `replace` command for more information. * `set 'option' 'value'`: sets the option to value. See the `options` help topic for a list of options you can set. This will modify your `settings.json` with the new value. * `setlocal 'option' 'value'`: sets the option to value locally (only in the current buffer). This will *not* modify `settings.json`. * `show 'option'`: shows the current value of the given option. * `run 'sh-command'`: runs the given shell command in the background. The command's output will be displayed in one line when it finishes running. * `vsplit 'filename'`: opens a vertical split with `filename`. If no filename is provided, a vertical split is opened with an empty buffer. * `hsplit 'filename'`: same as `vsplit` but opens a horizontal split instead of a vertical split. * `tab 'filename'`: opens the given file in a new tab. * `tabmove '[-+]?n'`: Moves the active tab to another slot. `n` is an integer. If `n` is prefixed with `-` or `+`, then it represents a relative position (e.g. `tabmove +2` moves the tab to the right by `2`). If `n` has no prefix, it represents an absolute position (e.g. `tabmove 2` moves the tab to slot `2`). * `tabswitch 'tab'`: This command will switch to the specified tab. The `tab` can either be a tab number, or a name of a tab. * `textfilter 'sh-command'`: filters the current selection through a shell command as standard input and replaces the selection with the stdout of the shell command. For example, to sort a list of numbers, first select them, and then execute `> textfilter sort -n`. * `log`: opens a log of all messages and debug statements. * `plugin list`: lists all installed plugins. * `plugin install 'pl'`: install a plugin. * `plugin remove 'pl'`: remove a plugin. * `plugin update 'pl'`: update a plugin (if no arguments are provided updates all plugins). * `plugin search 'pl'`: search available plugins for a keyword. * `plugin available`: show available plugins that can be installed. * `reload`: reloads all runtime files. * `cd 'path'`: Change the working directory to the given `path`. * `pwd`: Print the current working directory. * `open 'filename'`: Open a file in the current buffer. * `reset 'option'`: resets the given option to its default value * `retab`: Replaces all leading tabs with spaces or leading spaces with tabs depending on the value of `tabstospaces`. * `raw`: micro will open a new tab and show the escape sequence for every event it receives from the terminal. This shows you what micro actually sees from the terminal and helps you see which bindings aren't possible and why. This is most useful for debugging keybindings. * `showkey`: Show the action(s) bound to a given key. For example running `> showkey Ctrl-c` will display `Copy`. * `term exec?`: Open a terminal emulator running the given executable. If no executable is given, this will open the default shell in the terminal emulator. --- The following commands are provided by the default plugins: * `lint`: Lint the current file for errors. * `comment`: automatically comment or uncomment current selection or line. micro-2.0.9/runtime/help/copypaste.md000066400000000000000000000146171405030104300175760ustar00rootroot00000000000000Copy and paste are essential features in micro but can be confusing to get right especially when running micro over SSH because there are multiple methods. This help document will explain the various methods for copying and pasting, how they work, and the best methods for doing so over SSH. # OSC 52 (terminal clipboard) If possible, setting the `clipboard` option to `terminal` will give best results because it will work over SSH and locally. However, there is limited support among terminal emulators for the terminal clipboard (which uses the OSC 52 protocol to communicate clipboard contents). Here is a list of terminal emulators and their status: * Kitty: supported, but only writing is enabled by default. To enable reading, add `read-primary` and `read-clipboard` to the `clipboard_control` option. * iTerm2: only copying (writing to clipboard) is supported. Must be enabled in `Preferences->General-> Selection->Applications in terminal may access clipboard`. You can use Command-v to paste. * `st`: supported. * `rxvt-unicode`: not natively supported, but there is a Perl extension [here](http://anti.teamidiot.de/static/nei/*/Code/urxvt/). * `xterm`: supported, but disabled by default. It can be enabled by putting the following in `.Xresources` or `.Xdefaults`: `XTerm*disallowedWindowOps: 20,21,SetXprop`. * `gnome-terminal`: does not support OSC 52. **Summary:** If you want copy and paste to work over SSH, then you should set `clipboard` to `terminal`, and make sure your terminal supports OSC 52. # Pasting ## Recommendations (TL;DR) The recommended method of pasting is the following: * If you are not working over SSH, use the micro keybinding (Ctrl-v by default) to perform pastes. If on Linux, install `xclip` or `xsel` beforehand. * If you are working over SSH, use the terminal keybinding (Ctrl-Shift-v or Command-v) to perform pastes. If your terminal does not support bracketed paste, when performing a paste first enable the `paste` option, and when finished disable the option. ## Micro paste events Micro is an application that runs within the terminal. This means that the terminal sends micro events, such as key events, mouse events, resize events, and paste events. Micro's default keybinding for paste is Ctrl-v. This means that when micro receives the key event saying Ctrl-v has been pressed from the terminal, it will attempt to access the system clipboard and effect a paste. The system clipboard will be accessed through `pbpaste` on MacOS (installed by default), `xclip` or `xsel` on Linux (these applications must be installed by the user) or a system call on Windows. ## Terminal paste events For certain keypresses, the terminal will not send an event to micro and will instead do something itself. In this document, such keypresses will be called "terminal keybindings." Often there will be a terminal keybinding for pasting and copying. On MacOS these are Command-v and Command-c and on Linux Ctrl-Shift-v and Ctrl-Shift-c. When the terminal keybinding for paste is executed, your terminal will access the system clipboard, and send micro either a paste event or a list of key events (one key for each character in the paste), depending on whether or not your terminal supports sending paste events (called bracketed paste). If your terminal supports bracketed paste, then it will send a paste event and everything will work well. However, if your terminal sends a list of key events, this can cause issues because micro will think you manually entered each character and may add closing brackets or automatic indentation, which will mess up the pasted text. To avoid this, you can temporarily enable the `paste` option while you perform the paste. When paste option is on, micro will aggregate lists of multiple key events into larger paste events. It is a good idea to disable the `paste` option during normal use as occasionally if you are typing quickly, the terminal will send the key events as lists of characters that were in fact manually entered. ## Pasting over SSH When working over SSH, micro is running on the remote machine and your terminal is running on your local machine. Therefore if you would like to paste, using Ctrl-v (micro's keybinding) will not work because when micro attempts to access the system clipboard, it will access the remote machine's clipboard rather than the local machine's clipboard. On the other hand, the terminal keybinding for paste will access your local clipboard and send the text over the network as a paste event, which is what you want. # Copying # Recommendations (TL;DR) The recommended method of copying is the following: * If you are not working over SSH, use the micro keybinding (Ctrl-c by default) to perform copies. If on Linux, install `xclip` or `xsel` beforehand. * If you are working over SSH, use the terminal keybinding (Ctrl-Shift-c or Command-c) to perform copies. You must first disable the `mouse` option to perform a terminal selection, and you may wish to disable line numbers and diff indicators (`ruler` and `diffgutter` options) and close other splits. This method will only be able to copy characters that are displayed on the screen (you will not be able to copy more than one page's worth of characters). Copying follows a similar discussion to the one above about pasting. The primary difference is before performing a copy, the application doing the copy must be told what text needs to be copied. Micro has a keybinding (Ctrl-c) for copying and will access the system clipboard to perform the copy. The text that micro will copy into is the text that is currently selected in micro (usually such text is displayed with a white background). When the `mouse` option is enabled, the mouse can be used to select text, as well as other keybindings, such as ShiftLeft, etc... The terminal also has a keybinding (Ctrl-Shift-c or Command-c) to perform a copy, and the text that it copies is the text selected by the terminal's selection (*not* micro's selection). To select text with the terminal selection, micro's mouse support must first be disabled by turning the `mouse` option off. The terminal, unlike micro, has no sense of different buffers/splits and what the different characters being displayed are. This means that for copying multiple lines using the terminal selection, you should first disable line numbers and diff indicators (turn off the `ruler` and `diffgutter` options), otherwise they might be part of your selection and copied. micro-2.0.9/runtime/help/defaultkeys.md000066400000000000000000000207351405030104300201050ustar00rootroot00000000000000# Default Keys Below are simple charts of the default hotkeys and their functions. For more information about binding custom hotkeys or changing default bindings, please run `> help keybindings` Please remember that *all* keys here are rebindable! If you don't like it, you can change it! ### Power user | Key | Description of function | |---------- |-------------------------------------------------------------------------------------------------- | | Ctrl-e | Open a command prompt for running commands (see `> help commands` for a list of valid commands). | | Tab | In command prompt, it will autocomplete if possible. | | Ctrl-b | Run a shell command (this will close micro while your command executes). | ### Navigation | Key | Description of function | |---------------------------- |------------------------------------------------------------------------------------------ | | Arrows | Move the cursor around | | Shift-arrows | Move and select text | | Alt(Ctrl on Mac)-LeftArrow | Move to the beginning of the current line | | Alt(Ctrl on Mac)-RightArrow | Move to the end of the current line | | Home | Move to the beginning of text on the current line | | End | Move to the end of the current line | | Ctrl(Alt on Mac)-LeftArrow | Move cursor one word left | | Ctrl(Alt on Mac)-RightArrow | Move cursor one word right | | Alt-{ | Move cursor to previous empty line, or beginning of document | | Alt-} | Move cursor to next empty line, or end of document | | PageUp | Move cursor up one page | | PageDown | Move cursor down one page | | Ctrl-Home or Ctrl-UpArrow | Move cursor to start of document | | Ctrl-End or Ctrl-DownArrow | Move cursor to end of document | | Ctrl-l | Jump to a line in the file (prompts with #) | | Ctrl-w | Cycle between splits in the current tab (use `> vsplit` or `> hsplit` to create a split) | ### Tabs | Key | Description of function | |-------- |------------------------- | | Ctrl-t | Open a new tab | | Alt-, | Previous tab | | Alt-. | Next tab | ### Find Operations | Key | Description of function | |---------- |------------------------------------------ | | Ctrl-f | Find (opens prompt) | | Ctrl-n | Find next instance of current search | | Ctrl-p | Find previous instance of current search | ### File Operations | Key | Description of function | |---------- |------------------------------------------------------------------ | | Ctrl-q | Close current file (quits micro if this is the last file open) | | Ctrl-o | Open a file (prompts for filename) | | Ctrl-s | Save current file | ### Text operations | Key | Description of function | |------------------------------------ |------------------------------------------ | | Ctrl(Alt on Mac)-Shift-RightArrow | Select word right | | Ctrl(Alt on Mac)-Shift-LeftArrow | Select word left | | Alt(Ctrl on Mac)-Shift-LeftArrow | Select to start of current line | | Alt(Ctrl on Mac)-Shift-RightArrow | Select to end of current line | | Shift-Home | Select to start of current line | | Shift-End | Select to end of current line | | Ctrl-Shift-UpArrow | Select to start of file | | Ctrl-Shift-DownArrow | Select to end of file | | Ctrl-x | Cut selected text | | Ctrl-c | Copy selected text | | Ctrl-v | Paste | | Ctrl-k | Cut current line | | Ctrl-d | Duplicate current line | | Ctrl-z | Undo | | Ctrl-y | Redo | | Alt-UpArrow | Move current line or selected lines up | | Alt-DownArrow | Move current line or selected lines down | | Alt-Backspace or Alt-Ctrl-h | Delete word left | | Ctrl-a | Select all | ### Macros | Key | Description of function | |---------- |---------------------------------------------------------------------------------- | | Ctrl-u | Toggle macro recording (press Ctrl-u to start recording and press again to stop) | | Ctrl-j | Run latest recorded macro | ### Multiple cursors | Key | Description of function | |------------------ |---------------------------------------------------------------------------------------------- | | Alt-n | Create new multiple cursor from selection (will select current word if no current selection) | | Alt-Shift-Up | Spawn a new cursor on the line above the current one | | Alt-Shift-Down | Spawn a new cursor on the line below the current one | | Alt-p | Remove latest multiple cursor | | Alt-c | Remove all multiple cursors (cancel) | | Alt-x | Skip multiple cursor selection | | Alt-m | Spawn a new cursor at the beginning of every line in the current selection | | Ctrl-MouseLeft | Place a multiple cursor at any location | ### Other | Key | Description of function | |---------- |-------------------------------------------------------------------------------------- | | Ctrl-g | Open help file | | Ctrl-h | Backspace (old terminals do not support the backspace key and use Ctrl+H instead) | | Ctrl-r | Toggle the line number ruler | ### Emacs style actions | Key | Description of function | |---------- |-------------------------- | | Alt-f | Next word | | Alt-b | Previous word | | Alt-a | Move to start of line | | Alt-e | Move to end of line | ### Function keys. Warning! The function keys may not work in all terminals! | Key | Description of function | |------ |-------------------------- | | F1 | Open help | | F2 | Save | | F3 | Find | | F4 | Quit | | F7 | Find | | F10 | Quit | micro-2.0.9/runtime/help/help.md000066400000000000000000000050211405030104300165040ustar00rootroot00000000000000# Micro help text Micro is a terminal-based text editor that aims to be easy to use and intuitive, while also taking advantage of the full capabilities of modern terminals. To open the command bar, press Ctrl-e. This enables a `>` prompt for typing commands. From now on when the documentation says to run a command such as `> help`, this means press Ctrl-e and type `help` (and press enter to execute the command). For a list of the default keybindings run `> help defaultkeys`. For more information on keybindings see `> help keybindings`. ## Quick-start Press Ctrl-q to quit, and Ctrl-s to save. Press Ctrl-e to start typing commands and you can see which commands are available by pressing tab, or by viewing the help topic `> help commands`. Move the cursor around with the mouse or the arrow keys. Run `> help defaultkeys` to get a quick, easy overview of the default hotkeys and what they do. For more info on rebinding keys, see type `> help keybindings`. If the colorscheme doesn't look good, you can change it with `> set colorscheme ...`. You can press tab to see the available colorschemes, or see more information about colorschemes and syntax highlighting with `> help colors`. Press Ctrl-w to move between splits, and type `> vsplit filename` or `> hsplit filename` to open a new split. ## Accessing more help Micro has a built-in help system which can be accessed with the `help` command. To use it, press Ctrl-e to access command mode and type in `help` followed by a topic. Typing `help` followed by nothing will open this page. Here are the possible help topics that you can read: * tutorial: A brief tutorial which gives an overview of all the other help topics * keybindings: Gives a full list of the default keybindings as well as how to rebind them * defaultkeys: Gives a more straight-forward list of the hotkey commands and what they do. * commands: Gives a list of all the commands and what they do * options: Gives a list of all the options you can customize * plugins: Explains how micro's plugin system works and how to create your own plugins * colors: Explains micro's colorscheme and syntax highlighting engine and how to create your own colorschemes or add new languages to the engine For example, to open the help page on plugins you would run `> help plugins`. I recommend looking at the `tutorial` help file because it is short for each section and gives concrete examples of how to use the various configuration options in micro. However, it does not give the in-depth documentation that the other topics provide. micro-2.0.9/runtime/help/keybindings.md000066400000000000000000000377471405030104300201060ustar00rootroot00000000000000# Keybindings Micro has a plethora of hotkeys that make it easy and powerful to use and all hotkeys are fully customizable to your liking. Custom keybindings are stored internally in micro if changed with the `> bind` command or can also be added in the file `~/.config/micro/bindings.json` as discussed below. For a list of the default keybindings in the json format used by micro, please see the end of this file. For a more user-friendly list with explanations of what the default hotkeys are and what they do, please see `> help defaultkeys` (a json formatted list of default keys is included at the end of this document). If `~/.config/micro/bindings.json` does not exist, you can simply create it. Micro will know what to do with it. You can use the alt keys + arrows to move word by word. Ctrl left and right move the cursor to the start and end of the line, and ctrl up and down move the cursor the start and end of the buffer. You can hold shift with all of these movement actions to select while moving. ## Rebinding keys The bindings may be rebound using the `~/.config/micro/bindings.json` file. Each key is bound to an action. For example, to bind `Ctrl-y` to undo and `Ctrl-z` to redo, you could put the following in the `bindings.json` file. ```json { "Ctrl-y": "Undo", "Ctrl-z": "Redo" } ``` **Note:** The syntax `` is equivalent to `-`. In addition, Ctrl-Shift bindings are not supported by terminals, and are the same as simply Ctrl bindings. This means that `CtrlG`, `Ctrl-G`, and `Ctrl-g` all mean the same thing. However, for Alt this is not the case: `AltG` and `Alt-G` mean `Alt-Shift-g`, while `Alt-g` does not require the Shift modifier. In addition to editing your `~/.config/micro/bindings.json`, you can run `>bind ` For a list of bindable actions, see below. You can also chain commands when rebinding. For example, if you want Alt-s to save and quit you can bind it like so: ```json { "Alt-s": "Save,Quit" } ``` Each action will return a success flag. Actions can be chained such that the chain only continues when there are successes, or failures, or either. The `,` separator will always chain to the next action. The `|` separator will abort the chain if the action preceding it succeeds, and the `&` will abort the chain if the action preceding it fails. For example, in the default bindings, tab is bound as ``` "Tab": "Autocomplete|IndentSelection|InsertTab" ``` This means that if the `Autocomplete` action is successful, the chain will abort. Otherwise, it will try `IndentSelection`, and if that fails too, it will execute `InsertTab`. ## Binding commands You can also bind a key to execute a command in command mode (see `help commands`). Simply prepend the binding with `command:`. For example: ```json { "Alt-p": "command:pwd" } ``` **Note for macOS**: By default, macOS terminals do not forward alt events and instead insert unicode characters. To fix this, do the following: * iTerm2: select `Esc+` for `Left Option Key` in `Preferences->Profiles->Keys`. * Terminal.app: Enable `Use Option key as Meta key` in `Preferences->Profiles->Keyboard`. Now when you press `Alt-p` the `pwd` command will be executed which will show your working directory in the infobar. You can also bind an "editable" command with `command-edit:`. This means that micro won't immediately execute the command when you press the binding, but instead just place the string in the infobar in command mode. For example, you could rebind `Ctrl-g` to `> help`: ```json { "Ctrl-g": "command-edit:help " } ``` Now when you press `Ctrl-g`, `help` will appear in the command bar and your cursor will be placed after it (note the space in the json that controls the cursor placement). ## Binding raw escape sequences Only read this section if you are interested in binding keys that aren't on the list of supported keys for binding. One of the drawbacks of using a terminal-based editor is that the editor must get all of its information about key events through the terminal. The terminal sends these events in the form of escape sequences often (but not always) starting with `0x1b`. For example, if micro reads `\x1b[1;5D`, on most terminals this will mean the user pressed CtrlLeft. For many key chords though, the terminal won't send any escape code or will send an escape code already in use. For example for `CtrlBackspace`, my terminal sends `\u007f` (note this doesn't start with `0x1b`), which it also sends for `Backspace` meaning micro can't bind `CtrlBackspace`. However, some terminals do allow you to bind keys to send specific escape sequences you define. Then from micro you can directly bind those escape sequences to actions. For example, to bind `CtrlBackspace` you can instruct your terminal to send `\x1bctrlback` and then bind it in `bindings.json`: ```json { "\u001bctrlback": "DeleteWordLeft" } ``` Here are some instructions for sending raw escapes in different terminals ### iTerm2 In iTerm2, you can do this in `Preferences->Profiles->Keys` then click the `+`, input your keybinding, and for the `Action` select `Send Escape Sequence`. For the above example your would type `ctrlback` into the box (the `\x1b`) is automatically sent by iTerm2. ### Linux using loadkeys You can do this in linux using the loadkeys program. Coming soon! ## Unbinding keys It is also possible to disable any of the default key bindings by use of the `None` action in the user's `bindings.json` file. ## Bindable actions and bindable keys The list of default keybindings contains most of the possible actions and keys which you can use, but not all of them. Here is a full list of both. Full list of possible actions: ``` CursorUp CursorDown CursorPageUp CursorPageDown CursorLeft CursorRight CursorStart CursorEnd SelectToStart SelectToEnd SelectUp SelectDown SelectLeft SelectRight SelectToStartOfText SelectToStartOfTextToggle WordRight WordLeft SelectWordRight SelectWordLeft MoveLinesUp MoveLinesDown DeleteWordRight DeleteWordLeft SelectLine SelectToStartOfLine SelectToEndOfLine InsertNewline InsertSpace Backspace Delete Center InsertTab Save SaveAll SaveAs Find FindLiteral FindNext FindPrevious Undo Redo Copy CopyLine Cut CutLine DuplicateLine DeleteLine IndentSelection OutdentSelection OutdentLine IndentLine Paste SelectAll OpenFile Start End PageUp PageDown SelectPageUp SelectPageDown HalfPageUp HalfPageDown StartOfLine EndOfLine StartOfText StartOfTextToggle ParagraphPrevious ParagraphNext ToggleHelp ToggleDiffGutter ToggleRuler JumpLine ClearStatus ShellMode CommandMode Quit QuitAll AddTab PreviousTab NextTab NextSplit Unsplit VSplit HSplit PreviousSplit ToggleMacro PlayMacro Suspend (Unix only) ScrollUp ScrollDown SpawnMultiCursor SpawnMultiCursorUp SpawnMultiCursorDown SpawnMultiCursorSelect RemoveMultiCursor RemoveAllMultiCursors SkipMultiCursor None JumpToMatchingBrace Autocomplete ``` The `StartOfTextToggle` and `SelectToStartOfTextToggle` actions toggle between jumping to the start of the text (first) and start of the line. You can also bind some mouse actions (these must be bound to mouse buttons) ``` MousePress MouseMultiCursor ``` Here is the list of all possible keys you can bind: ``` Up Down Right Left UpLeft UpRight DownLeft DownRight Center PageUp PageDown Home End Insert Delete Help Exit Clear Cancel Print Pause Backtab F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 F32 F33 F34 F35 F36 F37 F38 F39 F40 F41 F42 F43 F44 F45 F46 F47 F48 F49 F50 F51 F52 F53 F54 F55 F56 F57 F58 F59 F60 F61 F62 F63 F64 CtrlSpace Ctrl-a Ctrl-b Ctrl-c Ctrl-d Ctrl-e Ctrl-f Ctrl-g Ctrl-h Ctrl-i Ctrl-j Ctrl-k Ctrl-l Ctrl-m Ctrl-n Ctrl-o Ctrl-p Ctrl-q Ctrl-r Ctrl-s Ctrl-t Ctrl-u Ctrl-v Ctrl-w Ctrl-x Ctrl-y Ctrl-z CtrlLeftSq CtrlBackslash CtrlRightSq CtrlCarat CtrlUnderscore Backspace OldBackspace Tab Esc Escape Enter ``` You can also bind some mouse buttons (they may be bound to normal actions or mouse actions) ``` MouseLeft MouseMiddle MouseRight MouseWheelUp MouseWheelDown MouseWheelLeft MouseWheelRight ``` ## Key sequences Key sequences can be bound by specifying valid keys one after another in brackets, such as ``. # Default keybinding configuration. A select few keybindings are different on MacOS compared to other operating systems. This is because different OSes have different conventions for text editing defaults. ```json { "Up": "CursorUp", "Down": "CursorDown", "Right": "CursorRight", "Left": "CursorLeft", "ShiftUp": "SelectUp", "ShiftDown": "SelectDown", "ShiftLeft": "SelectLeft", "ShiftRight": "SelectRight", "AltLeft": "WordLeft", (Mac) "AltRight": "WordRight", (Mac) "AltUp": "MoveLinesUp", "AltDown": "MoveLinesDown", "CtrlShiftRight": "SelectWordRight", "CtrlShiftLeft": "SelectWordLeft", "AltLeft": "StartOfTextToggle", "AltRight": "EndOfLine", "AltShiftRight": "SelectWordRight", (Mac) "AltShiftLeft": "SelectWordLeft", (Mac) "CtrlLeft": "StartOfText", (Mac) "CtrlRight": "EndOfLine", (Mac) "AltShiftLeft": "SelectToStartOfTextToggle", "CtrlShiftLeft": "SelectToStartOfTextToggle", (Mac) "ShiftHome": "SelectToStartOfTextToggle", "AltShiftRight": "SelectToEndOfLine", "CtrlShiftRight": "SelectToEndOfLine", (Mac) "ShiftEnd": "SelectToEndOfLine", "CtrlUp": "CursorStart", "CtrlDown": "CursorEnd", "CtrlShiftUp": "SelectToStart", "CtrlShiftDown": "SelectToEnd", "Alt-{": "ParagraphPrevious", "Alt-}": "ParagraphNext", "Enter": "InsertNewline", "Ctrl-h": "Backspace", "Backspace": "Backspace", "Alt-CtrlH": "DeleteWordLeft", "Alt-Backspace": "DeleteWordLeft", "Tab": "Autocomplete|IndentSelection|InsertTab", "Backtab": "OutdentSelection|OutdentLine", "Ctrl-o": "OpenFile", "Ctrl-s": "Save", "Ctrl-f": "Find", "Ctrl-n": "FindNext", "Ctrl-p": "FindPrevious", "Ctrl-z": "Undo", "Ctrl-y": "Redo", "Ctrl-c": "CopyLine|Copy", "Ctrl-x": "Cut", "Ctrl-k": "CutLine", "Ctrl-d": "DuplicateLine", "Ctrl-v": "Paste", "Ctrl-a": "SelectAll", "Ctrl-t": "AddTab", "Alt-,": "PreviousTab", "Alt-.": "NextTab", "Home": "StartOfText", "End": "EndOfLine", "CtrlHome": "CursorStart", "CtrlEnd": "CursorEnd", "PageUp": "CursorPageUp", "PageDown": "CursorPageDown", "CtrlPageUp": "PreviousTab", "CtrlPageDown": "NextTab", "Ctrl-g": "ToggleHelp", "Alt-g": "ToggleKeyMenu", "Ctrl-r": "ToggleRuler", "Ctrl-l": "command-edit:goto ", "Delete": "Delete", "Ctrl-b": "ShellMode", "Ctrl-q": "Quit", "Ctrl-e": "CommandMode", "Ctrl-w": "NextSplit", "Ctrl-u": "ToggleMacro", "Ctrl-j": "PlayMacro", "Insert": "ToggleOverwriteMode", // Emacs-style keybindings "Alt-f": "WordRight", "Alt-b": "WordLeft", "Alt-a": "StartOfLine", "Alt-e": "EndOfLine", // Integration with file managers "F2": "Save", "F3": "Find", "F4": "Quit", "F7": "Find", "F10": "Quit", "Esc": "Escape", // Mouse bindings "MouseWheelUp": "ScrollUp", "MouseWheelDown": "ScrollDown", "MouseLeft": "MousePress", "MouseMiddle": "PastePrimary", "Ctrl-MouseLeft": "MouseMultiCursor", "Alt-n": "SpawnMultiCursor", "AltShiftUp": "SpawnMultiCursorUp", "AltShiftDown": "SpawnMultiCursorDown", "Alt-m": "SpawnMultiCursorSelect", "Alt-p": "RemoveMultiCursor", "Alt-c": "RemoveAllMultiCursors", "Alt-x": "SkipMultiCursor", } ``` ## Pane type bindings Keybindings can be specified for different pane types as well. For example, to make a binding that only affects the command bar, use the `command` subgroup: ``` { "command": { "Ctrl-w": "WordLeft" } } ``` The possible pane types are `buffer` (normal buffer), `command` (command bar), and `terminal` (terminal pane). The defaults for the command and terminal panes are given below: ``` { "terminal": { "": "Exit", "": "CommandMode", "": "NextSplit" }, "command": { "Up": "HistoryUp", "Down": "HistoryDown", "Right": "CursorRight", "Left": "CursorLeft", "ShiftUp": "SelectUp", "ShiftDown": "SelectDown", "ShiftLeft": "SelectLeft", "ShiftRight": "SelectRight", "AltLeft": "StartOfTextToggle", "AltRight": "EndOfLine", "AltUp": "CursorStart", "AltDown": "CursorEnd", "AltShiftRight": "SelectWordRight", "AltShiftLeft": "SelectWordLeft", "CtrlLeft": "WordLeft", "CtrlRight": "WordRight", "CtrlShiftLeft": "SelectToStartOfTextToggle", "ShiftHome": "SelectToStartOfTextToggle", "CtrlShiftRight": "SelectToEndOfLine", "ShiftEnd": "SelectToEndOfLine", "CtrlUp": "CursorStart", "CtrlDown": "CursorEnd", "CtrlShiftUp": "SelectToStart", "CtrlShiftDown": "SelectToEnd", "Enter": "ExecuteCommand", "CtrlH": "Backspace", "Backspace": "Backspace", "OldBackspace": "Backspace", "Alt-CtrlH": "DeleteWordLeft", "Alt-Backspace": "DeleteWordLeft", "Tab": "CommandComplete", "Backtab": "CycleAutocompleteBack", "Ctrl-z": "Undo", "Ctrl-y": "Redo", "Ctrl-c": "CopyLine|Copy", "Ctrl-x": "Cut", "Ctrl-k": "CutLine", "Ctrl-v": "Paste", "Home": "StartOfTextToggle", "End": "EndOfLine", "CtrlHome": "CursorStart", "CtrlEnd": "CursorEnd", "Delete": "Delete", "Ctrl-q": "AbortCommand", "Ctrl-e": "EndOfLine", "Ctrl-a": "StartOfLine", "Ctrl-w": "DeleteWordLeft", "Insert": "ToggleOverwriteMode", "Ctrl-b": "WordLeft", "Ctrl-f": "WordRight", "Ctrl-d": "DeleteWordLeft", "Ctrl-m": "ExecuteCommand", "Ctrl-n": "HistoryDown", "Ctrl-p": "HistoryUp", "Ctrl-u": "SelectToStart", // Emacs-style keybindings "Alt-f": "WordRight", "Alt-b": "WordLeft", "Alt-a": "StartOfText", "Alt-e": "EndOfLine", // Integration with file managers "F10": "AbortCommand", "Esc": "AbortCommand", // Mouse bindings "MouseWheelUp": "HistoryUp", "MouseWheelDown": "HistoryDown", "MouseLeft": "MousePress", "MouseMiddle": "PastePrimary" } } ``` ## Final notes Note: On some old terminal emulators and on Windows machines, `Ctrl-h` should be used for backspace. Additionally, alt keys can be bound by using `Alt-key`. For example `Alt-a` or `Alt-Up`. Micro supports an optional `-` between modifiers like `Alt` and `Ctrl` so `Alt-a` could be rewritten as `Alta` (case matters for alt bindings). This is why in the default keybindings you can see `AltShiftLeft` instead of `Alt-ShiftLeft` (they are equivalent). Please note that terminal emulators are strange applications and micro only receives key events that the terminal decides to send. Some terminal emulators may not send certain events even if this document says micro can receive the event. To see exactly what micro receives from the terminal when you press a key, run the `> raw` command. micro-2.0.9/runtime/help/options.md000066400000000000000000000452661405030104300172660ustar00rootroot00000000000000# Options Micro stores all of the user configuration in its configuration directory. Micro uses `$MICRO_CONFIG_HOME` as the configuration directory. If this environment variable is not set, it uses `$XDG_CONFIG_HOME/micro` instead. If that environment variable is not set, it uses `~/.config/micro` as the configuration directory. In the documentation, we use `~/.config/micro` to refer to the configuration directory (even if it may in fact be somewhere else if you have set either of the above environment variables). Here are the available options: * `autoindent`: when creating a new line, use the same indentation as the previous line. default value: `true` * `autosave`: automatically save the buffer every n seconds, where n is the value of the autosave option. Also when quitting on a modified buffer, micro will automatically save and quit. Be warned, this option saves the buffer without prompting the user, so data may be overwritten. If this option is set to `0`, no autosaving is performed. default value: `0` * `autosu`: When a file is saved that the user doesn't have permission to modify, micro will ask if the user would like to use super user privileges to save the file. If this option is enabled, micro will automatically attempt to use super user privileges to save without asking the user. default value: `false` * `backup`: micro will automatically keep backups of all open buffers. Backups are stored in `~/.config/micro/backups` and are removed when the buffer is closed cleanly. In the case of a system crash or a micro crash, the contents of the buffer can be recovered automatically by opening the file that was being edited before the crash, or manually by searching for the backup in the backup directory. Backups are made in the background for newly modified buffers every 8 seconds, or when micro detects a crash. default value: `true` * `backupdir`: the directory micro should place backups in. For the default value of `""` (empty string), the backup directory will be `ConfigDir/backups`, which is `~/.config/micro/backups` by default. The directory specified for backups will be created if it does not exist. default value: `""` (empty string) * `basename`: in the infobar and tabbar, show only the basename of the file being edited rather than the full path. default value: `false` * `clipboard`: specifies how micro should access the system clipboard. Possible values are: * `external`: accesses clipboard via an external tool, such as xclip/xsel or wl-clipboard on Linux, pbcopy/pbpaste on MacOS, and system calls on Windows. On Linux, if you do not have one of the tools installed, or if they are not working, micro will throw an error and use an internal clipboard. * `terminal`: accesses the clipboard via your terminal emulator. Note that there is limited support among terminal emulators for this feature (called OSC 52). Terminals that are known to work are Kitty (enable reading with `clipboard_control` setting), iTerm2 (only copying), st, rxvt-unicode and xterm if enabled (see `> help copypaste` for details). Note that Gnome-terminal does not support this feature. With this setting, copy-paste **will** work over ssh. See `> help copypaste` for details. * `internal`: micro will use an internal clipboard. default value: `external` * `colorcolumn`: if this is not set to 0, it will display a column at the specified column. This is useful if you want column 80 to be highlighted special for example. default value: `0` * `colorscheme`: loads the colorscheme stored in $(configDir)/colorschemes/`option`.micro, This setting is `global only`. default value: `default` Note that the default colorschemes (default, solarized, and solarized-tc) are not located in configDir, because they are embedded in the micro binary. The colorscheme can be selected from all the files in the ~/.config/micro/colorschemes/ directory. Micro comes by default with three colorschemes: You can read more about micro's colorschemes in the `colors` help topic (`help colors`). * `cursorline`: highlight the line that the cursor is on in a different color (the color is defined by the colorscheme you are using). default value: `true` * `diffgutter`: display diff indicators before lines. default value: `false` * `divchars`: specifies the "divider" characters used for the dividing line between vertical/horizontal splits. The first character is for vertical dividers, and the second is for horizontal dividers. By default, for horizontal splits the statusline serves as a divider, but if the statusline is disabled the horizontal divider character will be used. default value: `|-` * `divreverse`: colorschemes provide the color (foreground and background) for the characters displayed in split dividers. With this option enabled, the colors specified by the colorscheme will be reversed (foreground and background colors swapped). default value: `true` * `encoding`: the encoding to open and save files with. Supported encodings are listed at https://www.w3.org/TR/encoding/. default value: `utf-8` * `eofnewline`: micro will automatically add a newline to the end of the file if one does not exist. default value: `true` * `fastdirty`: this determines what kind of algorithm micro uses to determine if a buffer is modified or not. When `fastdirty` is on, micro just uses a boolean `modified` that is set to `true` as soon as the user makes an edit. This is fast, but can be inaccurate. If `fastdirty` is off, then micro will hash the current buffer against a hash of the original file (created when the buffer was loaded). This is more accurate but obviously more resource intensive. This option will be automatically disabled if the file size exceeds 50KB. default value: `false` * `fileformat`: this determines what kind of line endings micro will use for the file. Unix line endings are just `\n` (linefeed) whereas dos line endings are `\r\n` (carriage return + linefeed). The two possible values for this option are `unix` and `dos`. The fileformat will be automatically detected (when you open an existing file) and displayed on the statusline, but this option is useful if you would like to change the line endings or if you are starting a new file. Changing this option while editing a file will change its line endings. Opening a file with this option set will only have an effect if the file is empty/newly created, because otherwise the fileformat will be automatically detected from the existing line endings. default value: `unix` * `filetype`: sets the filetype for the current buffer. Set this option to `off` to completely disable filetype detection. default value: `unknown`. This will be automatically overridden depending on the file you open. * `incsearch`: enable incremental search in "Find" prompt (matching as you type). default value: `true` * `ignorecase`: perform case-insensitive searches. default value: `true` * `indentchar`: sets the indentation character. default value: ` ` (space) * `infobar`: enables the line at the bottom of the editor where messages are printed. This option is `global only`. default value: `true` * `keepautoindent`: when using autoindent, whitespace is added for you. This option determines if when you move to the next line without any insertions the whitespace that was added should be deleted to remove trailing whitespace. By default, the autoindent whitespace is deleted if the line was left empty. default value: `false` * `keymenu`: display the nano-style key menu at the bottom of the screen. Note that ToggleKeyMenu is bound to `Alt-g` by default and this is displayed in the statusline. To disable this, simply by `Alt-g` to `UnbindKey`. default value: `false` * `matchbrace`: underline matching braces for '()', '{}', '[]' when the cursor is on a brace character. default value: `true` * `mkparents`: if a file is opened on a path that does not exist, the file cannot be saved because the parent directories don't exist. This option lets micro automatically create the parent directories in such a situation. default value: `false` * `mouse`: mouse support. When mouse support is disabled, usually the terminal will be able to access mouse events which can be useful if you want to copy from the terminal instead of from micro (if over ssh for example, because the terminal has access to the local clipboard and micro does not). default value: `true` * `paste`: treat characters sent from the terminal in a single chunk as a paste event rather than a series of manual key presses. If you are pasting using the terminal keybinding (not Ctrl-v, which is micro's default paste keybinding) then it is a good idea to enable this option during the paste and disable once the paste is over. See `> help copypaste` for details about copying and pasting in a terminal environment. default value: `false` * `parsecursor`: if enabled, this will cause micro to parse filenames such as file.txt:10:5 as requesting to open `file.txt` with the cursor at line 10 and column 5. The column number can also be dropped to open the file at a given line and column 0. Note that with this option enabled it is not possible to open a file such as `file.txt:10:5`, where `:10:5` is part of the filename. It is also possible to open a file with a certain cursor location by using the `+LINE,COL` flag syntax. See `micro -help` for the command line options. default value: `false` * `permbackup`: this option causes backups (see `backup` option) to be permanently saved. With permanent backups, micro will not remove backups when files are closed and will never apply them to existing files. Use this option if you are interested in manually managing your backup files. default value: `false` * `pluginchannels`: list of URLs pointing to plugin channels for downloading and installing plugins. A plugin channel consists of a json file with links to plugin repos, which store information about plugin versions and download URLs. By default, this option points to the official plugin channel hosted on GitHub at https://github.com/micro-editor/plugin-channel. default value: `https://raw.githubusercontent.com/micro-editor/plugin-channel/master/channel.json` * `pluginrepos`: a list of links to plugin repositories. default value: `` * `readonly`: when enabled, disallows edits to the buffer. It is recommended to only ever set this option locally using `setlocal`. default value: `false` * `rmtrailingws`: micro will automatically trim trailing whitespaces at ends of lines. default value: `false` * `ruler`: display line numbers. default value: `true` * `relativeruler`: make line numbers display relatively. If set to true, all lines except for the line that the cursor is located will display the distance from the cursor's line. default value: `false` * `savecursor`: remember where the cursor was last time the file was opened and put it there when you open the file again. Information is saved to `~/.config/micro/buffers/` default value: `false` * `savehistory`: remember command history between closing and re-opening micro. Information is saved to `~/.config/micro/buffers/history`. default value: `true` * `saveundo`: when this option is on, undo is saved even after you close a file so if you close and reopen a file, you can keep undoing. Information is saved to `~/.config/micro/buffers/`. default value: `false` * `scrollbar`: display a scroll bar default value: `false` * `scrollmargin`: margin at which the view starts scrolling when the cursor approaches the edge of the view. default value: `3` * `scrollspeed`: amount of lines to scroll for one scroll event. default value: `2` * `smartpaste`: add leading whitespace when pasting multiple lines. This will attempt to preserve the current indentation level when pasting an unindented block. default value: `true` * `softwrap`: wrap lines that are too long to fit on the screen. default value: `false` * `splitbottom`: when a horizontal split is created, create it below the current split. default value: `true` * `splitright`: when a vertical split is created, create it to the right of the current split. default value: `true` * `statusformatl`: format string definition for the left-justified part of the statusline. Special directives should be placed inside `$()`. Special directives include: `filename`, `modified`, `line`, `col`, `opt`, `bind`. The `opt` and `bind` directives take either an option or an action afterward and fill in the value of the option or the key bound to the action. default value: `$(filename) $(modified)($(line),$(col)) $(status.paste)| ft:$(opt:filetype) | $(opt:fileformat) | $(opt:encoding)` * `statusformatr`: format string definition for the right-justified part of the statusline. default value: `$(bind:ToggleKeyMenu): bindings, $(bind:ToggleHelp): help` * `statusline`: display the status line at the bottom of the screen. default value: `true` * `sucmd`: specifies the super user command. On most systems this is "sudo" but on BSD it can be "doas." This option can be customized and is only used when saving with su. default value: `sudo` * `syntax`: enables syntax highlighting. default value: `true` * `tabmovement`: navigate spaces at the beginning of lines as if they are tabs (e.g. move over 4 spaces at once). This option only does anything if `tabstospaces` is on. default value: `false` * `tabsize`: the size in spaces that a tab character should be displayed with. default value: `4` * `tabstospaces`: use spaces instead of tabs. default value: `false` * `useprimary` (only useful on unix): defines whether or not micro will use the primary clipboard to copy selections in the background. This does not affect the normal clipboard using Ctrl-c and Ctrl-v. default value: `true` * `wordwrap`: wrap long lines by words, i.e. break at spaces. This option only does anything if `softwrap` is on. default value: `false` * `xterm`: micro will assume that the terminal it is running in conforms to `xterm-256color` regardless of what the `$TERM` variable actually contains. Enabling this option may cause unwanted effects if your terminal in fact does not conform to the `xterm-256color` standard. Default value: `false` --- Plugin options: all plugins come with a special option to enable or disable them. The option is a boolean with the same name as the plugin itself. By default, the following plugins are provided, each with an option to enable or disable them: * `autoclose`: automatically closes brackets, quotes, etc... * `comment`: provides automatic commenting for a number of languages * `ftoptions`: alters some default options depending on the filetype * `linter`: provides extensible linting for many languages * `literate`: provides advanced syntax highlighting for the Literate programming tool. * `status`: provides some extensions to the status line (integration with Git and more). * `diff`: integrates the `diffgutter` option with Git. If you are in a Git directory, the diff gutter will show changes with respect to the most recent Git commit rather than the diff since opening the file. Any option you set in the editor will be saved to the file ~/.config/micro/settings.json so, in effect, your configuration file will be created for you. If you'd like to take your configuration with you to another machine, simply copy the settings.json to the other machine. ## Settings.json file The settings.json file should go in your configuration directory (by default at `~/.config/micro`), and should contain only options which have been modified from their default setting. Here is the full list of options in json format, so that you can see what the formatting should look like. ```json { "autoclose": true, "autoindent": true, "autosave": 0, "autosu": false, "backup": true, "backupdir": "", "basename": false, "clipboard": "external", "colorcolumn": 0, "colorscheme": "default", "comment": true, "cursorline": true, "diff": true, "diffgutter": false, "divchars": "|-", "divreverse": true, "encoding": "utf-8", "eofnewline": true, "fastdirty": false, "fileformat": "unix", "filetype": "unknown", "incsearch": true, "ftoptions": true, "ignorecase": false, "indentchar": " ", "infobar": true, "initlua": true, "keepautoindent": false, "keymenu": false, "linter": true, "literate": true, "matchbrace": true, "mkparents": false, "mouse": true, "parsecursor": false, "paste": false, "permbackup": false, "pluginchannels": [ "https://raw.githubusercontent.com/micro-editor/plugin-channel/master/channel.json" ], "pluginrepos": [], "readonly": false, "relativeruler": false, "rmtrailingws": false, "ruler": true, "savecursor": false, "savehistory": true, "saveundo": false, "scrollbar": false, "scrollmargin": 3, "scrollspeed": 2, "smartpaste": true, "softwrap": false, "splitbottom": true, "splitright": true, "status": true, "statusformatl": "$(filename) $(modified)($(line),$(col)) $(status.paste)| ft:$(opt:filetype) | $(opt:fileformat) | $(opt:encoding)", "statusformatr": "$(bind:ToggleKeyMenu): bindings, $(bind:ToggleHelp): help", "statusline": true, "sucmd": "sudo", "syntax": true, "tabmovement": false, "tabsize": 4, "tabstospaces": false, "useprimary": true, "xterm": false } ``` ## Global and local settings You can set these settings either globally or locally. Locally means that the setting won't be saved to `~/.config/micro/settings.json` and that it will only be set in the current buffer. Setting an option globally is the default, and will set the option in all buffers. Use the `setlocal` command to set an option locally rather than globally. The `colorscheme` option is global only, and the `filetype` option is local only. To set an option locally, use `setlocal` instead of `set`. In the `settings.json` file you can also put set options locally by specifying either a glob or a filetype. Here is an example which has `tabstospaces` on for all files except Go files, and `tabsize` 4 for all files except Ruby files: ```json { "ft:go": { "tabstospaces": false }, "ft:ruby": { "tabsize": 2 }, "tabstospaces": true, "tabsize": 4 } ``` Or similarly you can match with globs: ```json { "*.go": { "tabstospaces": false }, "*.rb": { "tabsize": 2 }, "tabstospaces": true, "tabsize": 4 } ``` micro-2.0.9/runtime/help/plugins.md000066400000000000000000000430521405030104300172430ustar00rootroot00000000000000# Plugins Micro supports creating plugins with a simple Lua system. Plugins are folders containing Lua files and possibly other source files placed in `~/.config/micro/plug`. The plugin directory (within `plug`) should contain at least one Lua file and an `info.json` file. The info file provides additional information such as the name of the plugin, the plugin's website, dependencies, etc... Here is an example info file from the go plugin, which has the following file structure: ``` ~/.config/micro/plug/go-plugin/ go.lua repo.json help/ go-plugin.md ``` The `go.lua` file contains the main code for the plugin, though the code may be distributed across multiple Lua files. The `info.json` file contains information about the plugin such as the website, description, version, and any requirements. Plugins may also have additional files which can be added to micro's runtime files, of which there are 5 types: * Colorschemes * Syntax files * Help files * Plugin files * Syntax header files In most cases, a plugin will want to add help files, but in certain cases a plugin may also want to add colorschemes or syntax files. It is unlikely for a plugin to need to add plugin files at runtime or syntax header files. No directory structure is enforced but keeping runtime files in their own directories is good practice. ## Lua callbacks Plugins use Lua but also have access to many functions both from micro and from the Go standard library. Many callbacks are also defined which are called when certain events happen. Here is the list of callbacks which micro defines: * `init()`: this function should be used for your plugin initialization. This function is called after buffers have been initialized. * `preinit()`: initialization function called before buffers have been initialized. * `postinit()`: initialization function called after `init()`. * `onBufferOpen(buf)`: runs when a buffer is opened. The input contains the buffer object. * `onBufPaneOpen(bufpane)`: runs when a bufpane is opened. The input contains the bufpane object. * `onAction(bufpane)`: runs when `Action` is triggered by the user, where `Action` is a bindable action (see `> help keybindings`). A bufpane is passed as input and the function should return a boolean defining whether the view should be relocated after this action is performed. * `preAction(bufpane)`: runs immediately before `Action` is triggered by the user. Returns a boolean which defines whether the action should be canceled. For example a function which is run every time the user saves the buffer would be: ```lua function onSave(bp) ... return false end ``` The `bp` variable is a reference to the bufpane the action is being executed within. This is almost always the current bufpane. All available actions are listed in the keybindings section of the help. These functions should also return a boolean specifying whether the bufpane should be relocated to the cursor or not after the action is complete. ## Accessing micro functions Some of micro's internal information is exposed in the form of packages which can be imported by Lua plugins. A package can be imported in Lua and a value within it can be accessed using the following syntax: ```lua local micro = import("micro") micro.Log("Hello") ``` The packages and functions are listed below (in Go type signatures): * `micro` - `TermMessage(msg interface{}...)`: temporarily close micro and print a message - `TermError(filename string, lineNum int, err string)`: temporarily close micro and print an error formatted as `filename, lineNum: err`. - `InfoBar()`: return the infobar BufPane object. - `Log(msg interface{}...)`: write a message to `log.txt` (requires `-debug` flag, or binary built with `build-dbg`). - `SetStatusInfoFn(fn string)`: register the given lua function as accessible from the statusline formatting options. - `CurPane() *BufPane`: returns the current BufPane, or nil if the current pane is not a BufPane. - `CurTab() *Tab`: returns the current tab. * `micro/config` - `MakeCommand(name string, action func(bp *BufPane, args[]string), completer buffer.Completer)`: create a command with the given name, and lua callback function when the command is run. A completer may also be given to specify how autocompletion should work with the custom command. - `FileComplete`: autocomplete using files in the current directory - `HelpComplete`: autocomplete using names of help documents - `OptionComplete`: autocomplete using names of options - `OptionValueComplete`: autocomplete using names of options, and valid values afterwards - `NoComplete`: no autocompletion suggestions - `TryBindKey(k, v string, overwrite bool) (bool, error)`: bind the key `k` to the string `v` in the `bindings.json` file. If `overwrite` is true, this will overwrite any existing binding to key `k`. Returns true if the binding was made, and a possible error (for example writing to `bindings.json` can cause an error). - `Reload()`: reload configuration files. - `AddRuntimeFileFromMemory(filetype RTFiletype, filename, data string)`: add a runtime file to the `filetype` runtime filetype, with name `filename` and data `data`. - `AddRuntimeFilesFromDirectory(plugin string, filetype RTFiletype, directory, pattern string)`: add runtime files for the given plugin with the given RTFiletype from a directory within the plugin root. Only adds files that match the pattern using Go's `filepath.Match` - `AddRuntimeFile(plugin string, filetype RTFiletype, filepath string)`: add a given file inside the plugin root directory as a runtime file to the given RTFiletype category. - `ListRuntimeFiles(fileType RTFiletype) []string`: returns a list of names of runtime files of the given type. - `ReadRuntimeFile(fileType RTFiletype, name string) string`: returns the contents of a given runtime file. - `NewRTFiletype() int`: creates a new RTFiletype, and returns its value. - `RTColorscheme`: runtime files for colorschemes. - `RTSyntax`: runtime files for syntax files. - `RTHelp`: runtime files for help documents. - `RTPlugin`: runtime files for plugin source code. - `RegisterCommonOption(pl string, name string, defaultvalue interface{})`: registers a new option with for the given plugin. The name of the option will be `pl.name`, and will have the given default value. Since this registers a common option, the option will be modifiable on a per-buffer basis, while also having a global value (in the GlobalSettings map). - `RegisterGlobalOption(pl string, name string, defaultvalue interface{})`: same as `RegisterCommonOption` but the option cannot be modified locally to each buffer. - `GetGlobalOption(name string) interface{}`: returns the value of a given plugin in the `GlobalSettings` map. - `SetGlobalOption(option, value string) error`: sets an option to a given value. Same as using the `> set` command. This will parse the value to the actual value type. - `SetGlobalOptionNative(option string, value interface{}) error`: sets an option to a given value, where the type of value is the actual type of the value internally. * `micro/shell` - `ExecCommand(name string, arg ...string) (string, error)`: runs an executable with the given arguments, and pipes the output (stderr and stdout) of the executable to an internal buffer, which is returned as a string, along with a possible error. - `RunCommand(input string) (string, error)`: same as `ExecCommand`, except this uses micro's argument parser to parse the arguments from the input. For example `cat 'hello world.txt' file.txt`, will pass two arguments in the `ExecCommand` argument list (quoting arguments will preserve spaces). - `RunBackgroundShell(input string) (func() string, error)`: returns a function that will run the given shell command and return its output. - `RunInteractiveShell(input string, wait bool, getOutput bool) (string, error)`: temporarily closes micro and runs the given command in the terminal. If `wait` is true, micro will wait for the user to press enter before returning to text editing. If `getOutput` is true, micro redirect stdout from the command to the returned string. - `JobStart(cmd string, onStdout, onStderr, onExit func(string, []interface{}), userargs ...interface{}) *exec.Cmd`: Starts a background job by running the shell on the given command (using `sh -c`). Three callbacks can be provided which will be called when the command generates stdout, stderr, or exits. The userargs will be passed to the callbacks, along with the output as the first argument of the callback. - `JobSpawn(cmd string, cmdArgs []string, onStdout, onStderr, onExit func(string, []interface{}), userargs ...interface{}) *exec.Cmd`: same as `JobStart`, except doesn't run the command through the shell and instead takes as inputs the list of arguments. - `JobStop(cmd *exec.Cmd)`: kills a job. - `JobSend(cmd *exec.Cmd, data string)`: sends some data to a job's stdin. - `RunTermEmulator(h *BufPane, input string, wait bool, getOutput bool, callback func(out string, userargs []interface{}), userargs []interface{}) error`: starts a terminal emulator from a given BufPane with the input command. If `wait` is true it will wait for the user to exit by pressing enter once the executable has terminated and if `getOutput` is true it will redirect the stdout of the process to a pipe which will be passed to the callback which is a function that takes a string and a list of optional user arguments. This function returns an error on systems where the terminal emulator is not supported. - `TermEmuSupported`: true on systems where the terminal emulator is supported and false otherwise. Supported systems: * Linux * MacOS * Dragonfly * OpenBSD * FreeBSD * `micro/buffer` - `NewMessage(owner string, msg string, start, end, Loc, kind MsgType) *Message`: creates a new message with an owner over a range given by the start and end locations. - `NewMessageAtLine(owner string, msg string, line int, kindMsgType) *Message`: creates a new message with owner, type and message at a given line. - `MTInfo`: info message. - `MTWarning`: warning message. - `MTError` error message. - `Loc(x, y int) Loc`: creates a new location struct. - `SLoc(line, row int) display.SLoc`: creates a new scrolling location struct. - `BTDefault`: default buffer type. - `BTLog`: log buffer type. - `BTRaw`: raw buffer type. - `BTInfo`: info buffer type. - `NewBuffer(text, path string) *Buffer`: creates a new buffer with the given text at a certain path. - `NewBufferFromFile(path string) (*Buffer, error)`: creates a new buffer by reading from disk at the given path. - `ByteOffset(pos Loc, buf *Buffer) int`: returns the byte index of the given position in a buffer. - `Log(s string)`: writes a string to the log buffer. - `LogBuf() *Buffer`: returns the log buffer. * `micro/util` - `RuneAt(str string, idx int) string`: returns the utf8 rune at a given index within a string. - `GetLeadingWhitespace(s string) string`: returns the leading whitespace of a string. - `IsWordChar(s string) bool`: returns true if the first rune in a string is a word character. - `String(b []byte) string`: converts a byte array to a string. - `RuneStr(r rune) string`: converts a rune to a string. - `Unzip(src, dest string) error`: unzips a file to given folder. This may seem like a small list of available functions but some of the objects returned by the functions have many methods. The Lua plugin may access any public methods of an object returned by any of the functions above. Unfortunately it is not possible to list all the available functions on this page. Please go to the internal documentation at https://godoc.org/github.com/zyedidia/micro to see the full list of available methods. Note that only methods of types that are available to plugins via the functions above can be called from a plugin. For an even more detailed reference see the source code on Github. For example, with a BufPane object called `bp`, you could call the `Save` function in Lua with `bp:Save()`. Note that Lua uses the `:` syntax to call a function rather than Go's `.` syntax. ```go micro.InfoBar().Message() ``` turns to ```lua micro.InfoBar():Message() ``` ## Accessing the Go standard library It is possible for your lua code to access many of the functions in the Go standard library. Simply import the package you'd like and then you can use it. For example: ```lua local ioutil = import("io/ioutil") local fmt = import("fmt") local micro = import("micro") local data, err = ioutil.ReadFile("SomeFile.txt") if err ~= nil then micro.InfoBar():Error("Error reading file: SomeFile.txt") else -- Data is returned as an array of bytes -- Using Sprintf will convert it to a string local str = fmt.Sprintf("%s", data) -- Do something with the file you just read! -- ... end ``` Here are the packages from the Go standard library that you can access. Nearly all functions from these packages are supported. For an exact list of which functions are supported you can look through `lua.go` (which should be easy to understand). ``` fmt io io/ioutil net math math/rand os runtime path filepath strings regexp errors time archive/zip net/http ``` For documentation for each of these functions, see the Go standard library documentation at https://golang.org/pkg/ (for the packages exposed to micro plugins). The Lua standard library is also available to plugins though it is rather small. The following functions are also available from the go-humanize package: The `humanize` package exposes: * `Bytes` * `Ordinal` ## Adding help files, syntax files, or colorschemes in your plugin You can use the `AddRuntimeFile(name string, type config.RTFiletype, path string)` function to add various kinds of files to your plugin. For example, if you'd like to add a help topic to your plugin called `test`, you would create a `test.md` file, and call the function: ```lua config = import("micro/config") config.AddRuntimeFile("test", config.RTHelp, "test.md") ``` Use `AddRuntimeFilesFromDirectory(name, type, dir, pattern)` to add a number of files to the runtime. To read the content of a runtime file use `ReadRuntimeFile(fileType, name string)` or `ListRuntimeFiles(fileType string)` for all runtime files. In addition, there is `AddRuntimeFileFromMemory` which adds a runtime file based on a string that may have been constructed at runtime. ## Default plugins There are 6 default plugins that come pre-installed with micro. These are * `autoclose`: automatically closes brackets, quotes, etc... * `comment`: provides automatic commenting for a number of languages * `ftoptions`: alters some default options depending on the filetype * `linter`: provides extensible linting for many languages * `literate`: provides advanced syntax highlighting for the Literate programming tool. * `status`: provides some extensions to the status line (integration with Git and more). * `diff`: integrates the `diffgutter` option with Git. If you are in a Git directory, the diff gutter will show changes with respect to the most recent Git commit rather than the diff since opening the file. See `> help linter`, `> help comment`, and `> help status` for additional documentation specific to those plugins. These are good examples for many use-cases if you are looking to write your own plugins. ## Plugin Manager Micro also has a built in plugin manager which you can invoke with the `> plugin ...` command, or in the shell with `micro -plugin ...`. For the valid commands you can use, see the `commands` help topic. The manager fetches plugins from the channels (which is simply a list of plugin metadata) which it knows about. By default, micro only knows about the official channel which is located at github.com/micro-editor/plugin-channel but you can add your own third-party channels using the `pluginchannels` option and you can directly link third-party plugins to allow installation through the plugin manager with the `pluginrepos` option. If you'd like to publish a plugin you've made as an official plugin, you should upload your plugin online (to Github preferably) and add a `repo.json` file. This file will contain the metadata for your plugin. Here is an example: ```json [{ "Name": "pluginname", "Description": "Here is a nice concise description of my plugin", "Website": "https://github.com/user/plugin", "Tags": ["python", "linting"], "Versions": [ { "Version": "1.0.0", "Url": "https://github.com/user/plugin/archive/v1.0.0.zip", "Require": { "micro": ">=1.0.3" } } ] }] ``` Then open a pull request at github.com/micro-editor/plugin-channel adding a link to the raw `repo.json` that is in your plugin repository. To make updating the plugin work, the first line of your plugins lua code should contain the version of the plugin. (Like this: `VERSION = "1.0.0"`) Please make sure to use [semver](http://semver.org/) for versioning. micro-2.0.9/runtime/help/tutorial.md000066400000000000000000000072151405030104300174260ustar00rootroot00000000000000# Tutorial This is a brief intro to micro's configuration system that will give some simple examples showing how to configure settings, rebind keys, and use `init.lua` to configure micro to your liking. Hopefully you'll find this useful. See `> help defaultkeys` for a list an explanation of the default keybindings. ### Settings In micro, your settings are stored in `~/.config/micro/settings.json`, a file that is created the first time you run micro. It is a json file which holds all the settings and their values. To change an option, you can either change the value in the `settings.json` file, or you can type it in directly while using micro. Press Ctrl-e to go to command mode, and type `set option value` (in the future, I will use `> set option value` to indicate pressing Ctrl-e). The change will take effect immediately and will also be saved to the `settings.json` file so that the setting will stick even after you close micro. You can also set options locally which means that the setting will only have the value you give it in the buffer you set it in. For example, if you have two splits open, and you type `> setlocal tabsize 2`, the tabsize will only be 2 in the current buffer. Also micro will not save this local change to the `settings.json` file. However, you can still set options locally in the `settings.json` file. For example, if you want the `tabsize` to be 2 only in Ruby files, and 4 otherwise, you could put the following in `settings.json`: ```json { "*.rb": { "tabsize": 2 }, "tabsize": 4 } ``` Micro will set the `tabsize` to 2 only in files which match the glob `*.rb`. If you would like to know more about all the available options, see the `options` topic (`> help options`). ### Keybindings Keybindings work in much the same way as options. You configure them using the `~/.config/micro/bindings.json` file. For example if you would like to bind `Ctrl-r` to redo you could put the following in `bindings.json`: ```json { "Ctrl-r": "redo" } ``` Very simple. You can also bind keys while in micro by using the `> bind key action` command, but the bindings you make with the command won't be saved to the `bindings.json` file. For more information about keybindings, like which keys can be bound, and what actions are available, see the `keybindings` help topic (`> help keybindings`). ### Configuration with Lua If you need more power than the json files provide, you can use the `init.lua` file. Create it in `~/.config/micro`. This file is a lua file that is run when micro starts and is essentially a one-file plugin. The plugin name is `initlua`. This example will show you how to use the `init.lua` file by creating a binding to `Ctrl-r` which will execute the bash command `go run` on the current file, given that the current file is a Go file. You can do that by putting the following in `init.lua`: ```lua local config = import("micro/config") local shell = import("micro/shell") function init() -- true means overwrite any existing binding to Ctrl-r -- this will modify the bindings.json file config.TryBindKey("Ctrl-r", "lua:initlua.gorun", true) end function gorun(bp) local buf = bp.Buf if buf:FileType() == "go" then -- the true means run in the foreground -- the false means send output to stdout (instead of returning it) shell.RunInteractiveShell("go run " .. buf.Path, true, false) end end ``` Alternatively, you could get rid of the `TryBindKey` line, and put this line in the `bindings.json` file: ```json { "Ctrl-r": "lua:initlua.gorun" } ``` For more information about plugins and the lua system that micro uses, see the `plugins` help topic (`> help plugins`). micro-2.0.9/runtime/plugins/000077500000000000000000000000001405030104300157655ustar00rootroot00000000000000micro-2.0.9/runtime/plugins/autoclose/000077500000000000000000000000001405030104300177635ustar00rootroot00000000000000micro-2.0.9/runtime/plugins/autoclose/autoclose.lua000066400000000000000000000047031405030104300224700ustar00rootroot00000000000000VERSION = "1.0.0" local uutil = import("micro/util") local utf8 = import("utf8") local autoclosePairs = {"\"\"", "''", "``", "()", "{}", "[]"} local autoNewlinePairs = {"()", "{}", "[]"} function charAt(str, i) -- lua indexing is one off from go return uutil.RuneAt(str, i-1) end function onRune(bp, r) for i = 1, #autoclosePairs do if r == charAt(autoclosePairs[i], 2) then local curLine = bp.Buf:Line(bp.Cursor.Y) if charAt(curLine, bp.Cursor.X+1) == charAt(autoclosePairs[i], 2) then bp:Backspace() bp:CursorRight() break end if bp.Cursor.X > 1 and (uutil.IsWordChar(charAt(curLine, bp.Cursor.X-1)) or charAt(curLine, bp.Cursor.X-1) == charAt(autoclosePairs[i], 1)) then break end end if r == charAt(autoclosePairs[i], 1) then local curLine = bp.Buf:Line(bp.Cursor.Y) if bp.Cursor.X == uutil.CharacterCountInString(curLine) or not uutil.IsWordChar(charAt(curLine, bp.Cursor.X+1)) then -- the '-' here is to derefence the pointer to bp.Cursor.Loc which is automatically made -- when converting go structs to lua -- It needs to be dereferenced because the function expects a non pointer struct bp.Buf:Insert(-bp.Cursor.Loc, charAt(autoclosePairs[i], 2)) bp:CursorLeft() break end end end return true end function preInsertNewline(bp) local curLine = bp.Buf:Line(bp.Cursor.Y) local curRune = charAt(curLine, bp.Cursor.X) local nextRune = charAt(curLine, bp.Cursor.X+1) local ws = uutil.GetLeadingWhitespace(curLine) for i = 1, #autoNewlinePairs do if curRune == charAt(autoNewlinePairs[i], 1) then if nextRune == charAt(autoNewlinePairs[i], 2) then bp:InsertNewline() bp:InsertTab() bp.Buf:Insert(-bp.Cursor.Loc, "\n" .. ws) bp:StartOfLine() bp:CursorLeft() return false end end end return true end function preBackspace(bp) for i = 1, #autoclosePairs do local curLine = bp.Buf:Line(bp.Cursor.Y) if charAt(curLine, bp.Cursor.X+1) == charAt(autoclosePairs[i], 2) and charAt(curLine, bp.Cursor.X) == charAt(autoclosePairs[i], 1) then bp:Delete() end end return true end micro-2.0.9/runtime/plugins/comment/000077500000000000000000000000001405030104300174275ustar00rootroot00000000000000micro-2.0.9/runtime/plugins/comment/comment.lua000066400000000000000000000131641405030104300216010ustar00rootroot00000000000000VERSION = "1.0.0" local util = import("micro/util") local config = import("micro/config") local buffer = import("micro/buffer") local ft = {} ft["apacheconf"] = "# %s" ft["bat"] = ":: %s" ft["c"] = "// %s" ft["c++"] = "// %s" ft["cmake"] = "# %s" ft["conf"] = "# %s" ft["crystal"] = "# %s" ft["css"] = "/* %s */" ft["d"] = "// %s" ft["dart"] = "// %s" ft["dockerfile"] = "# %s" ft["elm"] = "-- %s" ft["fish"] = "# %s" ft["gdscript"] = "# %s" ft["glsl"] = "// %s" ft["go"] = "// %s" ft["haskell"] = "-- %s" ft["html"] = "" ft["ini"] = "; %s" ft["java"] = "// %s" ft["javascript"] = "// %s" ft["jinja2"] = "{# %s #}" ft["julia"] = "# %s" ft["kotlin"] = "// %s" ft["lua"] = "-- %s" ft["markdown"] = "" ft["nginx"] = "# %s" ft["nim"] = "# %s" ft["objc"] = "// %s" ft["ocaml"] = "(* %s *)" ft["pascal"] = "{ %s }" ft["perl"] = "# %s" ft["php"] = "// %s" ft["pony"] = "// %s" ft["powershell"] = "# %s" ft["proto"] = "// %s" ft["python"] = "# %s" ft["python3"] = "# %s" ft["ruby"] = "# %s" ft["rust"] = "// %s" ft["scala"] = "// %s" ft["shell"] = "# %s" ft["sql"] = "-- %s" ft["swift"] = "// %s" ft["tex"] = "% %s" ft["toml"] = "# %s" ft["twig"] = "{# %s #}" ft["v"] = "// %s" ft["xml"] = "" ft["yaml"] = "# %s" ft["zig"] = "// %s" ft["zscript"] = "// %s" ft["zsh"] = "# %s" function onBufferOpen(buf) if buf.Settings["commenttype"] == nil then if ft[buf.Settings["filetype"]] ~= nil then buf.Settings["commenttype"] = ft[buf.Settings["filetype"]] else buf.Settings["commenttype"] = "# %s" end end end function isCommented(bp, lineN, commentRegex) local line = bp.Buf:Line(lineN) if string.match(line, commentRegex) then return true end return false end function commentLine(bp, lineN) local line = bp.Buf:Line(lineN) local commentType = bp.Buf.Settings["commenttype"] local sel = -bp.Cursor.CurSelection local curpos = -bp.Cursor.Loc local index = string.find(commentType, "%%s") - 1 local commentedLine = commentType:gsub("%%s", trim(line)) bp.Buf:Replace(buffer.Loc(0, lineN), buffer.Loc(#line, lineN), util.GetLeadingWhitespace(line) .. commentedLine) if bp.Cursor:HasSelection() then bp.Cursor.CurSelection[1].Y = sel[1].Y bp.Cursor.CurSelection[2].Y = sel[2].Y bp.Cursor.CurSelection[1].X = sel[1].X bp.Cursor.CurSelection[2].X = sel[2].X else bp.Cursor.X = curpos.X + index bp.Cursor.Y = curpos.Y end bp.Cursor:Relocate() bp.Cursor.LastVisualX = bp.Cursor:GetVisualX() end function uncommentLine(bp, lineN, commentRegex) local line = bp.Buf:Line(lineN) local commentType = bp.Buf.Settings["commenttype"] local sel = -bp.Cursor.CurSelection local curpos = -bp.Cursor.Loc local index = string.find(commentType, "%%s") - 1 if string.match(line, commentRegex) then uncommentedLine = string.match(line, commentRegex) bp.Buf:Replace(buffer.Loc(0, lineN), buffer.Loc(#line, lineN), util.GetLeadingWhitespace(line) .. uncommentedLine) if bp.Cursor:HasSelection() then bp.Cursor.CurSelection[1].Y = sel[1].Y bp.Cursor.CurSelection[2].Y = sel[2].Y bp.Cursor.CurSelection[1].X = sel[1].X bp.Cursor.CurSelection[2].X = sel[2].X else bp.Cursor.X = curpos.X - index bp.Cursor.Y = curpos.Y end end bp.Cursor:Relocate() bp.Cursor.LastVisualX = bp.Cursor:GetVisualX() end function toggleCommentLine(bp, lineN, commentRegex) if isCommented(bp, lineN, commentRegex) then uncommentLine(bp, lineN, commentRegex) else commentLine(bp, lineN) end end function toggleCommentSelection(bp, startLine, endLine, commentRegex) local allComments = true for line = startLine, endLine do if not isCommented(bp, line, commentRegex) then allComments = false break end end for line = startLine, endLine do if allComments then uncommentLine(bp, line, commentRegex) else commentLine(bp, line) end end end function comment(bp, args) local commentType = bp.Buf.Settings["commenttype"] local commentRegex = "^%s*" .. commentType:gsub("%%","%%%%"):gsub("%$","%$"):gsub("%)","%)"):gsub("%(","%("):gsub("%?","%?"):gsub("%*", "%*"):gsub("%-", "%-"):gsub("%.", "%."):gsub("%+", "%+"):gsub("%]", "%]"):gsub("%[", "%["):gsub("%%%%s", "(.*)"):gsub("%s+", "%s*") if bp.Cursor:HasSelection() then if bp.Cursor.CurSelection[1]:GreaterThan(-bp.Cursor.CurSelection[2]) then local endLine = bp.Cursor.CurSelection[1].Y if bp.Cursor.CurSelection[1].X == 0 then endLine = endLine - 1 end toggleCommentSelection(bp, bp.Cursor.CurSelection[2].Y, endLine, commentRegex) else local endLine = bp.Cursor.CurSelection[2].Y if bp.Cursor.CurSelection[2].X == 0 then endLine = endLine - 1 end toggleCommentSelection(bp, bp.Cursor.CurSelection[1].Y, endLine, commentRegex) end else toggleCommentLine(bp, bp.Cursor.Y, commentRegex) end end function trim(s) local trimmed = s:gsub("^%s*(.-)%s*$", "%1"):gsub("%%","%%%%") return trimmed end function string.starts(String,Start) return string.sub(String,1,string.len(Start))==Start end function init() config.MakeCommand("comment", comment, config.NoComplete) config.TryBindKey("Alt-/", "lua:comment.comment", false) config.TryBindKey("CtrlUnderscore", "lua:comment.comment", false) config.AddRuntimeFile("comment", config.RTHelp, "help/comment.md") end micro-2.0.9/runtime/plugins/comment/help/000077500000000000000000000000001405030104300203575ustar00rootroot00000000000000micro-2.0.9/runtime/plugins/comment/help/comment.md000066400000000000000000000032351405030104300223460ustar00rootroot00000000000000# Comment Plugin The comment plugin provides auto commenting/uncommenting. The default binding to comment/uncomment a line is `Alt-/` and `CtrlUnderscore`, which is equivalent in most terminals to `Ctrl-/`. You can easily modify that in your `bindings.json` file: ```json { "Alt-g": "comment.comment" } ``` You can also execute a command which will do the same thing as the binding: ``` > comment ``` If you have a selection, the plugin will comment all the lines selected. The comment type will be auto detected based on the filetype, but it is only available for certain filetypes: * apacheconf: `# %s` * bat: `:: %s` * c: `// %s` * c++: `// %s` * cmake: `# %s` * conf: `# %s` * crystal: `# %s` * css: `/* %s */` * d: `// %s` * dart: `// %s` * dockerfile: `# %s` * elm: `-- %s` * fish: `# %s` * gdscript: `# %s` * glsl: `// %s` * go: `// %s` * haskell: `-- %s` * html: `` * ini: `; %s` * java: `// %s` * javascript: `// %s` * jinja2: `{# %s #}` * julia: `# %s` * kotlin: `// %s` * lua: `-- %s` * markdown: `` * nginx: `# %s` * nim: `# %s` * objc: `// %s` * pascal: `{ %s }` * perl: `# %s` * php: `// %s` * pony: `// %s` * powershell: `# %s` * proto: `// %s` * python: `# %s` * python3: `# %s` * ruby: `# %s` * rust: `// %s` * scala: `// %s` * shell: `# %s` * sql: `-- %s` * swift: `// %s` * tex: `% %s` * toml: `# %s` * twig: `{# %s #}` * v: `// %s` * xml: `` * yaml: `# %s` * zig: `// %s` * zscript: `// %s` * zsh: `# %s` If your filetype is not available here, you can simply modify the `commenttype` option: ``` set commenttype "/* %s */" ``` Or in your `settings.json`: ```json { "*.c": { "commenttype": "/* %s */" } } ``` micro-2.0.9/runtime/plugins/diff/000077500000000000000000000000001405030104300166755ustar00rootroot00000000000000micro-2.0.9/runtime/plugins/diff/diff.lua000066400000000000000000000010741405030104300203120ustar00rootroot00000000000000VERSION = "1.0.0" local os = import("os") local filepath = import("path/filepath") local shell = import("micro/shell") function onBufferOpen(buf) if buf.Settings["diffgutter"] and (not buf.Type.Scratch) and (buf.Path ~= "") then -- check that file exists local _, err = os.Stat(buf.AbsPath) if err == nil then local dirName, fileName = filepath.Split(buf.AbsPath) local diffBase, err = shell.ExecCommand("git", "-C", dirName, "show", "HEAD:./" .. fileName) if err ~= nil then diffBase = buf:Bytes() end buf:SetDiffBase(diffBase) end end end micro-2.0.9/runtime/plugins/ftoptions/000077500000000000000000000000001405030104300200125ustar00rootroot00000000000000micro-2.0.9/runtime/plugins/ftoptions/ftoptions.lua000066400000000000000000000006041405030104300225420ustar00rootroot00000000000000VERSION = "1.0.0" function onBufferOpen(b) local ft = b:FileType() if ft == "go" or ft == "makefile" then b:SetOption("tabstospaces", "off") elseif ft == "fish" or ft == "python" or ft == "python2" or ft == "python3" or ft == "yaml" or ft == "nim" then b:SetOption("tabstospaces", "on") end end micro-2.0.9/runtime/plugins/linter/000077500000000000000000000000001405030104300172625ustar00rootroot00000000000000micro-2.0.9/runtime/plugins/linter/help/000077500000000000000000000000001405030104300202125ustar00rootroot00000000000000micro-2.0.9/runtime/plugins/linter/help/linter.md000066400000000000000000000060701405030104300220340ustar00rootroot00000000000000# Linter The linter plugin runs a compiler or linter on your source code and parses the resulting output so that the messages and line numbers can be viewed from within micro. By default, the plugin supports the following filetypes and linters: * c: gcc * c++: g++ * d: dmd * go: go build * haskell: hlint * java: javac * javascript: jshint * javascript: eslint * literate: lit * lua: luacheck * nim: nim * objective-c: clang * python: pyflakes * python: mypy * python: pylint * shell: shfmt * swift: swiftc (MacOS and Linux only) * yaml: yamllint If the linter plugin is enabled and the file corresponds to one of these filetypes, each time the buffer is saved, or when the `> lint` command is executed, micro will run the corresponding utility in the background and display the messages when it completes. The linter plugin also allows users to extend the supported filetypes. From inside another micro plugin, the function `linter.makeLinter` can be called to register a new filetype. Here is the spec for the `makeLinter` function: * `linter.makeLinter(name, filetype, cmd, args, errorformat, os, whitelist, domatch, loffset, coffset, callback)` > name: name of the linter > filetype: filetype to check for to use linter > cmd: main linter process that is executed > args: arguments to pass to the linter process use %f to refer to the current file name use %d to refer to the current directory name > errorformat: how to parse the linter/compiler process output %f: file, %l: line number, %m: error/warning message > os: list of OSs this linter is supported or unsupported on optional param, default: {} > whitelist: should the OS list be a blacklist (do not run the linter for these OSs) or a whitelist (only run the linter for these OSs) optional param, default: false (should blacklist) > domatch: should the filetype be interpreted as a lua pattern to match with the actual filetype, or should the linter only activate on an exact match optional param, default: false (require exact match) > loffset: line offset will be added to the line number returned by the linter useful if the linter returns 0-indexed lines optional param, default: 0 > coffset: column offset will be added to the col number returned by the linter useful if the linter returns 0-indexed columns optional param, default: 0 > callback: function to call before executing the linter, if it returns false the lint is canceled. The callback is passed the buf. optional param, default: nil Below is an example for including a linter for any filetype using the `misspell` linter which checks for misspelled words in a file. ```lua function init() -- uses the default linter plugin -- matches any filetype linter.makeLinter("misspell", "", "misspell", {"%f"}, "%f:%l:%c: %m", {}, false, true) end ``` Here is an example for a more typical use-case, where the linter will only match one filetype (C in this case): ```lua function init() linter.makeLinter("gcc", "c", "gcc", {"-fsyntax-only", "-Wall", "-Wextra", "%f"}, "%f:%l:%c:.+: %m") end ``` micro-2.0.9/runtime/plugins/linter/linter.lua000066400000000000000000000171551405030104300212730ustar00rootroot00000000000000VERSION = "1.0.0" local micro = import("micro") local runtime = import("runtime") local filepath = import("path/filepath") local shell = import("micro/shell") local buffer = import("micro/buffer") local config = import("micro/config") local util = import("micro/util") local os = import("os") local linters = {} -- creates a linter entry, call from within an initialization function, not -- directly at initial load time -- -- name: name of the linter -- filetype: filetype to check for to use linter -- cmd: main linter process that is executed -- args: arguments to pass to the linter process -- use %f to refer to the current file name -- use %d to refer to the current directory name -- errorformat: how to parse the linter/compiler process output -- %f: file, %l: line number, %m: error/warning message -- os: list of OSs this linter is supported or unsupported on -- optional param, default: {} -- whitelist: should the OS list be a blacklist (do not run the linter for these OSs) -- or a whitelist (only run the linter for these OSs) -- optional param, default: false (should blacklist) -- domatch: should the filetype be interpreted as a lua pattern to match with -- the actual filetype, or should the linter only activate on an exact match -- optional param, default: false (require exact match) -- loffset: line offset will be added to the line number returned by the linter -- useful if the linter returns 0-indexed lines -- optional param, default: 0 -- coffset: column offset will be added to the col number returned by the linter -- useful if the linter returns 0-indexed columns -- optional param, default: 0 -- callback: function to call before executing the linter, if it returns -- false the lint is canceled. The callback is passed the buf. -- optional param, default: nil function makeLinter(name, filetype, cmd, args, errorformat, os, whitelist, domatch, loffset, coffset, callback) if linters[name] == nil then linters[name] = {} linters[name].filetype = filetype linters[name].cmd = cmd linters[name].args = args linters[name].errorformat = errorformat linters[name].os = os or {} linters[name].whitelist = whitelist or false linters[name].domatch = domatch or false linters[name].loffset = loffset or 0 linters[name].coffset = coffset or 0 linters[name].callback = callback or nil end end function removeLinter(name) linters[name] = nil end function preinit() local devnull = "/dev/null" if runtime.GOOS == "windows" then devnull = "NUL" end makeLinter("gcc", "c", "gcc", {"-fsyntax-only", "-Wall", "-Wextra", "%f"}, "%f:%l:%c:.+: %m") makeLinter("g++", "c++", "gcc", {"-fsyntax-only","-std=c++14", "-Wall", "-Wextra", "%f"}, "%f:%l:%c:.+: %m") makeLinter("dmd", "d", "dmd", {"-color=off", "-o-", "-w", "-wi", "-c", "%f"}, "%f%(%l%):.+: %m") makeLinter("eslint", "javascript", "eslint", {"-f","compact","%f"}, "%f: line %l, col %c, %m") makeLinter("gobuild", "go", "go", {"build", "-o", devnull, "%d"}, "%f:%l:%c:? %m") -- makeLinter("golint", "go", "golint", {"%f"}, "%f:%l:%c: %m") makeLinter("hlint", "haskell", "hlint", {"%f"}, "%f:%(?%l[,:]%c%)?.-: %m") makeLinter("javac", "java", "javac", {"-d", "%d", "%f"}, "%f:%l: error: %m") makeLinter("jshint", "javascript", "jshint", {"%f"}, "%f: line %l,.+, %m") makeLinter("literate", "literate", "lit", {"-c", "%f"}, "%f:%l:%m", {}, false, true) makeLinter("luacheck", "lua", "luacheck", {"--no-color", "%f"}, "%f:%l:%c: %m") makeLinter("nim", "nim", "nim", {"check", "--listFullPaths", "--stdout", "--hints:off", "%f"}, "%f.%l, %c. %m") makeLinter("clang", "objective-c", "xcrun", {"clang", "-fsyntax-only", "-Wall", "-Wextra", "%f"}, "%f:%l:%c:.+: %m") makeLinter("pyflakes", "python", "pyflakes", {"%f"}, "%f:%l:.-:? %m") makeLinter("mypy", "python", "mypy", {"%f"}, "%f:%l: %m") makeLinter("pylint", "python", "pylint", {"--output-format=parseable", "--reports=no", "%f"}, "%f:%l: %m") makeLinter("flake8", "python", "flake8", {"%f"}, "%f:%l:%c: %m") makeLinter("shfmt", "shell", "shfmt", {"%f"}, "%f:%l:%c: %m") makeLinter("swiftc", "swift", "xcrun", {"swiftc", "%f"}, "%f:%l:%c:.+: %m", {"darwin"}, true) makeLinter("swiftc", "swift", "swiftc", {"%f"}, "%f:%l:%c:.+: %m", {"linux"}, true) makeLinter("yaml", "yaml", "yamllint", {"--format", "parsable", "%f"}, "%f:%l:%c:.+ %m") config.MakeCommand("lint", function(bp, args) bp:Save() runLinter(bp.Buf) end, config.NoComplete) config.AddRuntimeFile("linter", config.RTHelp, "help/linter.md") end function contains(list, element) for k, v in pairs(list) do if v == element then return true end end return false end function runLinter(buf) local ft = buf:FileType() local file = buf.Path local dir = "." .. util.RuneStr(os.PathSeparator) .. filepath.Dir(file) for k, v in pairs(linters) do local ftmatch = ft == v.filetype if v.domatch then ftmatch = string.match(ft, v.filetype) end local hasOS = contains(v.os, runtime.GOOS) if not hasOS and v.whitelist then ftmatch = false end if hasOS and not v.whitelist then ftmatch = false end local args = {} for k, arg in pairs(v.args) do args[k] = arg:gsub("%%f", file):gsub("%%d", dir) end if ftmatch then lint(buf, k, v.cmd, args, v.errorformat, v.loffset, v.coffset, v.callback) end end end function onSave(bp) runLinter(bp.Buf) return true end function lint(buf, linter, cmd, args, errorformat, loff, coff, callback) buf:ClearMessages(linter) if callback ~= nil then if not callback(buf) then return end end shell.JobSpawn(cmd, args, nil, nil, onExit, buf, linter, errorformat, loff, coff) end function onExit(output, args) local buf, linter, errorformat, loff, coff = args[1], args[2], args[3], args[4], args[5] local lines = split(output, "\n") local regex = errorformat:gsub("%%f", "(..-)"):gsub("%%l", "(%d+)"):gsub("%%c", "(%d+)"):gsub("%%m", "(.+)") for _,line in ipairs(lines) do -- Trim whitespace line = line:match("^%s*(.+)%s*$") if string.find(line, regex) then local file, line, col, msg = string.match(line, regex) local hascol = true if not string.find(errorformat, "%%c") then hascol = false msg = col elseif col == nil then hascol = false end if basename(buf.Path) == basename(file) then local bmsg = nil if hascol then local mstart = buffer.Loc(tonumber(col-1+coff), tonumber(line-1+loff)) local mend = buffer.Loc(tonumber(col+coff), tonumber(line-1+loff)) bmsg = buffer.NewMessage(linter, msg, mstart, mend, buffer.MTError) else bmsg = buffer.NewMessageAtLine(linter, msg, tonumber(line+loff), buffer.MTError) end buf:AddMessage(bmsg) end end end end function split(str, sep) local result = {} local regex = ("([^%s]+)"):format(sep) for each in str:gmatch(regex) do table.insert(result, each) end return result end function basename(file) local sep = "/" if runtime.GOOS == "windows" then sep = "\\" end local name = string.gsub(file, "(.*" .. sep .. ")(.*)", "%2") return name end micro-2.0.9/runtime/plugins/literate/000077500000000000000000000000001405030104300175765ustar00rootroot00000000000000micro-2.0.9/runtime/plugins/literate/README.md000066400000000000000000000003421405030104300210540ustar00rootroot00000000000000# Literate Micro Support for reading `.lit` files from [zyedidia/Literate](https://github.com/zyedidia/Literate). This plugin will automatically detect the filetype and highlight the correct language inside the code blocks. micro-2.0.9/runtime/plugins/literate/literate.lua000066400000000000000000000040371405030104300221160ustar00rootroot00000000000000VERSION = "1.0.0" local config = import("micro/config") function startswith(str, start) return string.sub(str,1,string.len(start))==start end function endswith(str, endStr) return endStr=='' or string.sub(str,-string.len(endStr))==endStr end function split(string, sep) local sep, fields = sep or ":", {} local pattern = string.format("([^%s]+)", sep) string:gsub(pattern, function(c) fields[#fields+1] = c end) return fields end function onBufferOpen(buf) if not endswith(buf.Path, ".lit") then return end local codetype = "unknown" for i=1,buf:LinesNum() do local line = buf:Line(i-1) if startswith(line, "@code_type") then codetype = split(line, " ")[2] break end end local syntaxFile = "" syntaxFile = syntaxFile .. "filetype: literate-" .. codetype .. "\n" syntaxFile = syntaxFile .. "detect:\n" syntaxFile = syntaxFile .. " filename: \"\\\\.lit$\"\n" syntaxFile = syntaxFile .. "rules:\n" syntaxFile = syntaxFile .. " - include: \"markdown\"\n" syntaxFile = syntaxFile .. " - special: \"^(@s|@title|@code_type|@comment_type|@include|@change|@change_end)\"\n" syntaxFile = syntaxFile .. " - special: \"(@add_css|@overwrite_css|@colorscheme|@compiler|@error_format|@book)\"\n" syntaxFile = syntaxFile .. " - default:\n" syntaxFile = syntaxFile .. " start: \"---.*$\"\n" syntaxFile = syntaxFile .. " end: \"---$\"\n" syntaxFile = syntaxFile .. " limit-group: \"identifier\"\n" syntaxFile = syntaxFile .. " rules:\n" syntaxFile = syntaxFile .. " - special:\n" syntaxFile = syntaxFile .. " start: \"@\\\\{\"\n" syntaxFile = syntaxFile .. " end: \"\\\\}\"\n" syntaxFile = syntaxFile .. " rules: []\n" syntaxFile = syntaxFile .. " - include: " .. codetype .. "\n" config.AddRuntimeFileFromMemory(config.RTSyntax, "literate.yaml", syntaxFile) config.Reload() buf:UpdateRules() end micro-2.0.9/runtime/plugins/status/000077500000000000000000000000001405030104300173105ustar00rootroot00000000000000micro-2.0.9/runtime/plugins/status/help/000077500000000000000000000000001405030104300202405ustar00rootroot00000000000000micro-2.0.9/runtime/plugins/status/help/status.md000066400000000000000000000015331405030104300221070ustar00rootroot00000000000000# Status The status plugin provides some functions for modifying the status line. Using the `statusformatl` and `statusformatr` options, the exact contents of the status line can be modified. Please see the documentation for those options (`> help options`) for more information. This plugin provides functions that can be used in the status line format: * `status.branch`: returns the name of the current git branch. * `status.hash`: returns the hash of the current git commit. * `status.paste`: returns "" if the paste option is disabled and "PASTE" if it is enabled. * `status.lines`: returns the number of lines in the buffer. * `status.vcol`: returns the visual column number of the cursor. * `status.bytes`: returns the number of bytes in the current buffer. * `status.size`: returns the size of the current buffer in a human-readable format. micro-2.0.9/runtime/plugins/status/status.lua000066400000000000000000000030551405030104300213410ustar00rootroot00000000000000VERSION = "1.0.0" local micro = import("micro") local buffer = import("micro/buffer") local config = import("micro/config") local humanize = import("humanize") function init() micro.SetStatusInfoFn("status.branch") micro.SetStatusInfoFn("status.hash") micro.SetStatusInfoFn("status.paste") micro.SetStatusInfoFn("status.vcol") micro.SetStatusInfoFn("status.lines") micro.SetStatusInfoFn("status.bytes") micro.SetStatusInfoFn("status.size") config.AddRuntimeFile("status", config.RTHelp, "help/status.md") end function lines(b) return tostring(b:LinesNum()) end function vcol(b) return tostring(b:GetActiveCursor():GetVisualX()) end function bytes(b) return tostring(b:Size()) end function size(b) return humanize.Bytes(b:Size()) end function branch(b) if b.Type.Kind ~= buffer.BTInfo then local shell = import("micro/shell") local strings = import("strings") local branch, err = shell.ExecCommand("git", "rev-parse", "--abbrev-ref", "HEAD") if err == nil then return strings.TrimSpace(branch) end return "" end end function hash(b) if b.Type.Kind ~= 5 then local shell = import("micro/shell") local strings = import("strings") local hash, err = shell.ExecCommand("git", "rev-parse", "--short", "HEAD") if err == nil then return strings.TrimSpace(hash) end return "" end end function paste(b) if config.GetGlobalOption("paste") then return "PASTE " end return "" end micro-2.0.9/runtime/syntax/000077500000000000000000000000001405030104300156325ustar00rootroot00000000000000micro-2.0.9/runtime/syntax/LICENSE000066400000000000000000000021561405030104300166430ustar00rootroot00000000000000Micro's syntax files are licensed under the MIT "Expat" License: Copyright (c) 2020: Zachary Yedidia, et al. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. micro-2.0.9/runtime/syntax/PowerShell.yaml000066400000000000000000000116641405030104300206120ustar00rootroot00000000000000# PowerShell syntax highlighting file for micro - https://micro-editor.github.io/ # PowerShell syntax taken from: https://github.com/PowerShell/EditorSyntax filetype: powershell detect: filename: "\\.ps(1|m1|d1)$" #header: "" rules: # - comment.block: # Block Comment # - comment.doc: # Doc Comment # - comment.line: # Line Comment # - comment.shebang: # Shebang Line # - constant: # Constant # - constant.bool: # Constant (true, false) # - constant.interpolation: # - constant.number: # Constant (null) # - constant.specialChar: # - constant.string: # String # - constant.string.char: # - constant.string.url: # Uri # - constant.unicode: # - identifier: # Also used for functions # - identifier.class: # Also used for functions # - identifier.macro: # - identifier.var: # - preproc: # Preprocessor # - preproc.DebugIdentifier: # Preprocessor # - preproc.shebang: # The #! at the beginning of a file that tells the os what script interpreter to use # - special: # Special (global|local|private|script|using|workflow) # - statement: # Statements Keywords # - statement.built_in: # - statement.declaration: # Declaration Keywords # - statement.meta: # Meta # - statement.reserved: # Reserved Keywords # - symbol # - symbol.brackets: # {}()[] and sometimes <> # - symbol.operator: # Operators # - symbol.tag: # For html tags, among other things # - type # - type.collections: # Collections (array, hashtable) # - type.ctypes: # CTypes (CBool, CChar, etc.) # - type.keyword: # If you want a special highlight for keywords like 'private' # - type.storage: # Storage Types (int, uint, string, etc.) # Class - identifier.class: "class +[A-Za-z0-9]+ *((:) +[A-Za-z0-9.]+)?" - identifier.class: "(function)(?:([[:space:]][A-Za-z0-9]+[[:space:]]*))" # Verbs taken from PwSh 6.0.2 - identifier: "(Add|Approve|Assert|Backup|Block|Build|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy)[-][A-Za-z0-9]+" - identifier: "(Debug|Deny|Deploy|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|Format|Get|Grant|Group|Hide)[-][A-Za-z0-9]+" - identifier: "(Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Mount|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push)[-][A-Za-z0-9]+" - identifier: "(Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke)[-][A-Za-z0-9]+" - identifier: "(Save|Search|Select|Send|Set|Show|Skip|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Test|Trace)[-][A-Za-z0-9]+" - identifier: "(Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Write)[-][A-Za-z0-9]+" - identifier.var: "\\$(?i)((Global|Local|Private|Script|Using|Workflow)[:])?[A-Za-z0-9]*" # Expression and types - type: "\\[\\b([A-Za-z]+|[A-Za-z]+[0-9]+)\\b\\]" # Keywords - statement: "\\b(alias|as|begin|break|catch|continue|data|default|define|do|dynamicparam)\\b" - statement: "\\b(else|elseif|end|exit|finally|for|foreach|foreach-object|from|if|in|inlinescript)\\b" - statement: "\\b(parallel|param|process|return|switch|throw|trap|try|until|using|var|where|where-object|while)\\b" # Special Keywords - special: "\\b(break|continue|exit)\\b" - symbol.brackets: "(\\{|\\})" - symbol.brackets: "(\\(|\\))" - symbol.brackets: "(\\[|\\])" - symbol.operator: "[\\-+/*=<>?:!~%&|]" - symbol.operator: "[[:space:]][-](ne|eq|gt|ge|lt|le|like|notlike|match|notmatch|contains|notcontains|in|notin|replace|is|isnot)[[:space:]]" # Constants - constant.bool: "\\b\\$(true|false|null)\\b" - constant.number: "\\b([0-9._]+|0x[A-Fa-f0-9_]+|0b[0-1_]+)[FL]?\\b" # Expression Mode String - constant.string: start: "\"" end: "\"" #skip: "\\\\." rules: - constant.specialChar: "\\\\([btnfr]|'|\\\"|\\\\)" - constant.specialChar: "\\\\u[A-Fa-f0-9]{4}" # Argument Mode String - constant.string: start: "'" end: "'" #skip: "\\\\." rules: - constant.specialChar: "\\\\([btnfr]|'|\\\"|\\\\)" - constant.specialChar: "\\\\u[A-Fa-f0-9]{4}" # Line Comment - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME|BUG):?" # Block Comment - comment: start: "<#" end: "#>" rules: - todo: "(TODO|XXX|FIXME|BUG):?" # Embedded C# - default: start: "@\"" end: "\"@" rules: - include: "csharp" # Todo - todo: "(TODO|XXX|FIXME|BUG):?" micro-2.0.9/runtime/syntax/README.md000066400000000000000000000045421405030104300171160ustar00rootroot00000000000000# Syntax Files Here are micro's syntax files. Each yaml file specifies how to detect the filetype based on file extension or headers (first line of the file). Then there are patterns and regions linked to highlight groups which tell micro how to highlight that filetype. Making your own syntax files is very simple. I recommend you check the file after you are finished with the [`syntax_checker.go`](./syntax_checker.go) program (located in this directory). Just place your yaml syntax file in the current directory and run `go run syntax_checker.go` and it will check every file. If there are no errors it will print `No issues!`. You can read more about how to write syntax files (and colorschemes) in the [colors](../help/colors.md) documentation. # Legacy '.micro' filetype Micro used to use the `.micro` filetype for syntax files which is no longer supported. If you have `.micro` syntax files that you would like to convert to the new filetype, you can use the [`syntax_converter.go`](./syntax_converter.go) program (also located in this directory): ``` $ go run syntax_converter.go c.micro > c.yaml ``` Most the the syntax files here have been converted using that tool. Note that the tool isn't perfect and though it is unlikely, you may run into some small issues that you will have to fix manually (about 4 files from this directory had issues after being converted). # Micro syntax highlighting files These are the syntax highlighting files for micro. To install them, just put all the syntax files in `~/.config/micro/syntax`. They are taken from Nano, specifically from [this repository](https://github.com/scopatz/nanorc). Micro syntax files are almost identical to Nano's, except for some key differences: * Micro does not use `icolor`. Instead, for a case insensitive match, use the case insensitive flag (`i`) in the regular expression * For example, `icolor green ".*"` would become `color green "(?i).*"` # Using with colorschemes Not all of these files have been converted to use micro's colorscheme feature. Most of them just hardcode the colors, which can be problematic depending on the colorscheme you use. Here is a list of the files that have been converted to properly use colorschemes: * vi * go * c * d * markdown * html * lua * swift * rust * java * javascript * pascal * python * ruby * sh * git * tex * solidity # License See [LICENSE](LICENSE). micro-2.0.9/runtime/syntax/ada.yaml000066400000000000000000000030111405030104300172360ustar00rootroot00000000000000filetype: ada detect: filename: "(\\.ads$|\\.adb$|\\.ada$)" rules: # Operators - symbol.operator: ([.:;,+*|=!?\\%]|<|>|/|-|&) - symbol.brackets: "[(){}]|\\[|\\]" # keyword.reserved - statement.reserved: \b(abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case)\b - statement.reserved: \b(constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function)\b - statement.reserved: \b(generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|or|others|out|overriding)\b - statement.reserved: \b(package|pragma|private|procedure|protected|raise|range|record|rem|renames|return|requeue)\b - statement.reserved: \b(reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until)\b - statement.reserved: \b(use|when|while|with|xor)\b # Constant - constant.bool: \b(TRUE|FALSE) - constant.number: ([0-9]+) # Storage Types - type.storage: \b(INTEGER|NATURAL|POSITIVE|FLOAT|CHARACTER|STRING)\b - type.storage: \b(LONG_INTEGER|SHORT_INTEGER|LONG_FLOAT|SHORT_FLOAT)\b #Character - constant.string.char: \'.\' # String - constant.string: start: \" end: \" skip: \\. rules: - constant.specialChar: (\\0|\\\\|\\t|\\n|\\r|\\"|\\') - constant.interpolation: \\\([[:graph:]]*\) - constant.unicode: \\u\{[[:xdigit:]]+} # Line Comment - comment.line: "--.*" # Todo - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/apacheconf.yaml000066400000000000000000000145771405030104300206230ustar00rootroot00000000000000filetype: apacheconf detect: filename: "httpd\\.conf|mime\\.types|vhosts\\.d\\\\*|\\.htaccess" rules: - identifier: "(AcceptMutex|AcceptPathInfo|AccessFileName|Action|AddAlt|AddAltByEncoding|AddAltByType|AddCharset|AddDefaultCharset|AddDescription|AddEncoding)" - identifier: "(AddHandler|AddIcon|AddIconByEncoding|AddIconByType|AddInputFilter|AddLanguage|AddModuleInfo|AddOutputFilter|AddOutputFilterByType|AddType|Alias|AliasMatch)" - identifier: "(Allow|AllowCONNECT|AllowEncodedSlashes|AllowOverride|Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID)" - identifier: "(Anonymous_VerifyEmail|AssignUserID|AuthAuthoritative|AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile|AuthDigestAlgorithm)" - identifier: "(AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize)" - identifier: "(AuthGroupFile|AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases)" - identifier: "(AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl|AuthName|AuthType|AuthUserFile)" - identifier: "(BrowserMatch|BrowserMatchNoCase|BS2000Account|BufferedLogs|CacheDefaultExpire|CacheDirLength|CacheDirLevels|CacheDisable|CacheEnable|CacheExpiryCheck)" - identifier: "(CacheFile|CacheForceCompletion|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheIgnoreCacheControl|CacheIgnoreHeaders)" - identifier: "(CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire|CacheMaxFileSize|CacheMinFileSize|CacheNegotiatedDocs|CacheRoot|CacheSize|CacheTimeMargin)" - identifier: "(CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckSpelling|ChildPerUserID|ContentDigest|CookieDomain|CookieExpires|CookieLog|CookieName)" - identifier: "(CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavLockDB|DavMinTimeout|DefaultIcon|DefaultLanguage|DefaultType)" - identifier: "(DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize|Deny|Directory|DirectoryIndex|DirectoryMatch|DirectorySlash)" - identifier: "(DocumentRoot|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|Example|ExpiresActive|ExpiresByType)" - identifier: "(ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FileETag|Files|FilesMatch|ForceLanguagePriority|ForceType|ForensicLog|Group|Header)" - identifier: "(HeaderName|HostnameLookups|IdentityCheck|IfDefine|IfModule|IfVersion|ImapBase|ImapDefault|ImapMenu|Include|IndexIgnore|IndexOptions|IndexOrderDefault)" - identifier: "(ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer|KeepAlive|KeepAliveTimeout)" - identifier: "(LanguagePriority|LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize)" - identifier: "(LDAPTrustedCA|LDAPTrustedCAType|Limit|LimitExcept|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine)" - identifier: "(LimitXMLRequestBody|Listen|ListenBackLog|LoadFile|LoadModule|Location|LocationMatch|LockFile|LogFormat|LogLevel|MaxClients|MaxKeepAliveRequests)" - identifier: "(MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MCacheMaxObjectCount|MCacheMaxObjectSize)" - identifier: "(MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads)" - identifier: "(MMapFile|ModMimeUsePathInfo|MultiviewsMatch|NameVirtualHost|NoProxy|NumServers|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|PassEnv|PidFile)" - identifier: "(ProtocolEcho|Proxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyIOBufferSize|ProxyMatch|ProxyMaxForwards|ProxyPass|ProxyPassReverse)" - identifier: "(ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia|ReadmeName|Redirect|RedirectMatch)" - identifier: "(RedirectPermanent|RedirectTemp|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader)" - identifier: "(Require|RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule|RLimitCPU|RLimitMEM|RLimitNPROC)" - identifier: "(Satisfy|ScoreBoardFile|Script|ScriptAlias|ScriptAliasMatch|ScriptInterpreterSource|ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock|SecureListen)" - identifier: "(SendBufferSize|ServerAdmin|ServerAlias|ServerLimit|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetEnv|SetEnvIf|SetEnvIfNoCase|SetHandler)" - identifier: "(SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSLCACertificateFile|SSLCACertificatePath)" - identifier: "(SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions)" - identifier: "(SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite)" - identifier: "(SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire)" - identifier: "(SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth|StartServers|StartThreads|SuexecUserGroup|ThreadLimit)" - identifier: "(ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnsetEnv|UseCanonicalName|User|UserDir|VirtualDocumentRoot)" - identifier: "(VirtualDocumentRootIP|VirtualHost|VirtualScriptAlias|VirtualScriptAliasIP|Win32DisableAcceptEx|XBitHack)" - symbol.tag: "<[^>]+>" - identifier: ")" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/arduino.yaml000066400000000000000000000054001405030104300201560ustar00rootroot00000000000000filetype: ino detect: filename: "\\.?ino$" rules: - identifier: "\\b[A-Z_][0-9A-Z_]+\\b" ## - type: "\\b((s?size)|((u_?)?int(8|16|32|64|ptr)))_t\\b" ## Constants - constant: "(?i)\\b(HIGH|LOW|INPUT|OUTPUT)\\b" ## Serial Print - constant: "(?i)\\b(DEC|BIN|HEX|OCT|BYTE)\\b" ## PI Constants - constant: "(?i)\\b(PI|HALF_PI|TWO_PI)\\b" ## ShiftOut - constant: "(?i)\\b(LSBFIRST|MSBFIRST)\\b" ## Attach Interrupt - constant: "(?i)\\b(CHANGE|FALLING|RISING)\\b" ## Analog Reference - constant: "(?i)\\b(DEFAULT|EXTERNAL|INTERNAL|INTERNAL1V1|INTERNAL2V56)\\b" ## === FUNCTIONS === ## ## Data Types - type: "\\b(boolean|byte|char|float|int|long|word)\\b" ## Control Structions - statement: "\\b(case|class|default|do|double|else|false|for|if|new|null|private|protected|public|short|signed|static|String|switch|this|throw|try|true|unsigned|void|while)\\b" - statement: "\\b(goto|continue|break|return)\\b" ## Math - identifier: "\\b(abs|acos|asin|atan|atan2|ceil|constrain|cos|degrees|exp|floor|log|map|max|min|radians|random|randomSeed|round|sin|sq|sqrt|tan)\\b" ## Bits & Bytes - identifier: "\\b(bitRead|bitWrite|bitSet|bitClear|bit|highByte|lowByte)\\b" ## Analog I/O - identifier: "\\b(analogReference|analogRead|analogWrite)\\b" ## External Interrupts - identifier: "\\b(attachInterrupt|detachInterrupt)\\b" ## Time - identifier: "\\b(delay|delayMicroseconds|millis|micros)\\b" ## Digital I/O - identifier: "\\b(pinMode|digitalWrite|digitalRead)\\b" ## Interrupts - identifier: "\\b(interrupts|noInterrupts)\\b" ## Advanced I/O - identifier: "\\b(noTone|pulseIn|shiftIn|shiftOut|tone)\\b" ## Serial - identifier: "\\b(Serial|Serial1|Serial2|Serial3|begin|end|peek|read|print|println|available|flush)\\b" ## Structure - identifier: "\\b(setup|loop)\\b" ## - statement: "^[[:space:]]*#[[:space:]]*(define|include(_next)?|(un|ifn?)def|endif|el(if|se)|if|warning|error|pragma)" ## GCC builtins - constant: "(__attribute__[[:space:]]*\\(\\([^)]*\\)\\)|__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__)" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - preproc: "..+" - constant.specialChar: "\\\\." - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/asciidoc.yaml000066400000000000000000000023531405030104300202770ustar00rootroot00000000000000filetype: asciidoc detect: filename: "\\.(asc|asciidoc|adoc)$" rules: # main header - preproc: "^====+$" # h1 - statement: "^==[[:space:]].*$" - statement: "^----+$" # h2 - symbol: "^===[[:space:]].*$" - symbol: "^~~~~+$" # h4 - type: "^====[[:space:]].*$" - type: "^\\^\\^\\^\\^+$" # h5 - constant: "^=====[[:space:]].*$" - constant: "^\\+\\+\\+\\++$" # attributes - type.keyword: ":.*:" - identifier.macro: "\\{[a-z0-9]*\\}" - identifier: "\\\\\\{[a-z0-9]*\\}" - identifier: "\\+\\+\\+\\{[a-z0-9]*\\}\\+\\+\\+" # Paragraph Title - statement: "^\\..*$" # source - identifier: "^\\[(source,.+|NOTE|TIP|IMPORTANT|WARNING|CAUTION)\\]" # Other markup - constant.string: ".*[[:space:]]\\+$" - constant.string: "_[^_]+_" - constant.string: "\\*[^\\*]+\\*" - constant.string: "\\+[^\\+]+\\+" - constant.string: "`[^`]+`" - constant.string: "\\^[^\\^]+\\^" - constant.string: "~[^~]+~" - constant.string: "'[^']+'" - constant: "`{1,2}[^']+'{1,2}" # bullets - symbol: "^[[:space:]]*[\\*\\.-]{1,5}[[:space:]]" # anchors - "bold default": "\\[\\[.*\\]\\]" - "bold default": "<<.*>>" micro-2.0.9/runtime/syntax/asm.yaml000066400000000000000000000226031405030104300173010ustar00rootroot00000000000000filetype: asm detect: filename: "\\.(S|s|asm)$" rules: # This file is made for NASM assembly ## Instructions # x86 - statement: "\\b(?i)(mov|aaa|aad|aam|aas|adc|add|and|call|cbw|clc|cld|cli|cmc|cmp|cmpsb|cmpsw|cwd|daa|das|dec|div|esc|hlt|idiv|imul|in|inc|int|into|iret|ja|jae|jb|jbe|jc|je|jg|jge|jl|jle|jna|jnae|jnb|jnbe|jnc|jne|jng|jnge|jnl|jnle|jno|jnp|jns|jnz|jo|jp|jpe|jpo|js|jz|jcxz|jmp|lahf|lds|lea|les|lock|lodsb|lodsw|loop|loope|loopne|loopnz|loopz|movsb|movsw|mul|neg|nop|or|pop|popf|push|pushf|rcl|rcr|rep|repe|repne|repnz|repz|ret|retn|retf|rol|ror|sahf|sal|sar|sbb|scasb|scasw|shl|shr|stc|std|sti|stosb|stosw|sub|test|wait|xchg|xlat|xor)(?-i)\\b" - statement: "\\b(?i)(bound|enter|ins|leave|outs|popa|pusha)(?-i)\\b" - statement: "\\b(?i)(arpl|clts|lar|lgdt|lidt|lldt|lmsw|loadall|lsl|ltr|sgdt|sidt|sldt|smsw|str|verr|verw)(?-i)\\b" - statement: "\\b(?i)(bsf|bsr|bt|btc|btr|bts|cdq|cmpsd|cwde|insd|iret|iretd|iretf|jecxz|lfs|lgs|lss|lodsd|loopw|loopew|loopnew|loopnzw|loopzw|loopd|looped|loopned|loopnzd|loopzd|cr|tr|dr|movsd|movsx|movzx|outsd|popad|popfd|pushad|pushfd|scasd|seta|setae|setb|setbe|setc|sete|setg|setge|setl|setle|setna|setnae|setnb|setnbe|setnc|setne|setng|setnge|setnl|setnle|setno|setnp|setns|setnz|seto|setp|setpe|setpo|sets|setz|shdl|shrd|stosd)(?-i)\\b" - statement: "\\b(?i)(bswap|cmpxcgh|invd|invlpg|wbinvd|xadd)(?-i)\\b" - statement: "\\b(?i)(cpuid|cmpxchg8b|rdmsr|rdtsc|wrmsr|rsm)(?-i)\\b" - statement: "\\b(?i)(rdpmc)(?-i)\\b" - statement: "\\b(?i)(syscall|sysret)(?-i)\\b" - statement: "\\b(?i)(cmova|cmovae|cmovb|cmovbe|cmovc|cmove|cmovg|cmovge|cmovl|cmovle|cmovna|cmovnae|cmovnb|cmovnbe|cmovnc|cmovne|cmovng|cmovnge|cmovnle|cmovno|cmovpn|cmovns|cmovnz|cmovo|cmovp|cmovpe|cmovpo|cmovs|cmovz|sysenter|sysexit|ud2)(?-i)\\b" - statement: "\\b(?i)(maskmovq|movntps|movntq|prefetch0|prefetch1|prefetch2|prefetchnta|sfence)(?-i)\\b" - statement: "\\b(?i)(clflush|lfence|maskmovdqu|mfence|movntdq|movnti|movntpd|pause)(?-i)\\b" - statement: "\\b(?i)(monitor|mwait)(?-i)\\b" - statement: "\\b(?i)(cdqe|cqo|cmpsq|cmpxchg16b|iretq|jrcxz|lodsq|movsdx|popfq|pushfq|rdtscp|scasq|stosq|swapgs)(?-i)\\b" - statement: "\\b(?i)(clgi|invlpga|skinit|stgi|vmload|vmmcall|vmrun|vmsave)(?-i)\\b" - statement: "\\b(?i)(vmptrdl|vmptrst|vmclear|vmread|vmwrite|vmcall|vmlaunch|vmresume|vmxoff|vmxon)(?-i)\\b" - statement: "\\b(?i)(lzcnt|popcnt)(?-i)\\b" - statement: "\\b(?i)(bextr|blcfill|blci|blcic|blcmask|blcs|blsfill|blsic|t1mskc|tzmsk)(?-i)\\b" # x87 - statement: "\\b(?i)(f2xm1|fabs|fadd|faddp|fbld|fbstp|fchs|fclex|fcom|fcomp|fcompp|fdecstp|fdisi|fdiv|fvidp|fdivr|fdivrp|feni|ffree|fiadd|ficom|ficomp|fidiv|fidivr|fild|fimul|fincstp|finit|fist|fistp|fisub|fisubr|fld|fld1|fldcw|fldenv|fldenvw|fldl2e|fldl2t|fldlg2|fldln2|fldpi|fldz|fmul|fmulp|fnclex|fndisi|fneni|fninit|fnop|fnsave|fnsavenew|fnstcw|fnstenv|fnstenvw|fnstsw|fpatan|fprem|fptan|frndint|frstor|frstorw|fsave|fsavew|fscale|fsqrt|fst|fstcw|fstenv|fstenvw|fstp|fstpsw|fsub|fsubp|fsubr|fsubrp|ftst|fwait|fxam|fxch|fxtract|fyl2x|fyl2xp1)(?-i)\\b" - statement: "\\b(?i)(fsetpm)(?-i)\\b" - statement: "\\b(?i)(fcos|fldenvd|fsaved|fstenvd|fprem1|frstord|fsin|fsincos|fstenvd|fucom|fucomp|fucompp)(?-i)\\b" - statement: "\\b(?i)(fcmovb|fcmovbe|fcmove|fcmove|fcmovnb|fcmovnbe|fcmovne|fcmovnu|fcmovu)(?-i)\\b" - statement: "\\b(?i)(fcomi|fcomip|fucomi|fucomip)(?-i)\\b" - statement: "\\b(?i)(fxrstor|fxsave)(?-i)\\b" - statement: "\\b(?i)(fisttp)(?-i)\\b" - statement: "\\b(?i)(ffreep)(?-i)\\b" # SIMD - statement: "\\b(?i)(emms|movd|movq|packssdw|packsswb|packuswb|paddb|paddw|paddd|paddsb|paddsw|paddusb|paddusw|pand|pandn|por|pxor|pcmpeqb|pcmpeqw|pcmpeqd|pcmpgtb|pcmpgtw|pcmpgtd|pmaddwd|pmulhw|pmullw|psllw|pslld|psllq|psrad|psraw|psrlw|psrld|psrlq|psubb|psubw|psubd|psubsb|psubsw|psubusb|punpckhbw|punpckhwd|punpckhdq|punkcklbw|punpckldq|punpcklwd)(?-i)\\b" - statement: "\\b(?i)(paveb|paddsiw|pmagw|pdistib|psubsiw|pmwzb|pmulhrw|pmvnzb|pmvlzb|pmvgezb|pmulhriw|pmachriw)(?-i)\\b" - statement: "\\b(?i)(femms|pavgusb|pf2id|pfacc|pfadd|pfcmpeq|pfcmpge|pfcmpgt|pfmax|pfmin|pfmul|pfrcp|pfrcpit1|pfrcpit2|pfrsqit1|pfrsqrt|pfsub|pfsubr|pi2fd|pmulhrw|prefetch|prefetchw)(?-i)\\b" - statement: "\\b(?i)(pf2iw|pfnacc|pfpnacc|pi2fw|pswapd)(?-i)\\b" - statement: "\\b(?i)(pfrsqrtv|pfrcpv)(?-i)\\b" - statement: "\\b(?i)(addps|addss|cmpps|cmpss|comiss|cvtpi2ps|cvtps2pi|cvtsi2ss|cvtss2si|cvttps2pi|cvttss2si|divps|divss|ldmxcsr|maxps|maxss|minps|minss|movaps|movhlps|movhps|movlhps|movlps|movmskps|movntps|movss|movups|mulps|mulss|rcpps|rcpss|rsqrtps|rsqrtss|shufps|sqrtps|sqrtss|stmxcsr|subps|subss|ucomiss|unpckhps|unpcklps)(?-i)\\b" - statement: "\\b(?i)(andnps|andps|orps|pavgb|pavgw|pextrw|pinsrw|pmaxsw|pmaxub|pminsw|pminub|pmovmskb|pmulhuw|psadbw|pshufw|xorps)(?-i)\\b" - statement: "\\b(?i)(movups|movss|movlps|movhlps|movlps|unpcklps|unpckhps|movhps|movlhps|prefetchnta|prefetch0|prefetch1|prefetch2|nop|movaps|cvtpi2ps|cvtsi2ss|cvtps2pi|cvttss2si|cvtps2pi|cvtss2si|ucomiss|comiss|sqrtps|sqrtss|rsqrtps|rsqrtss|rcpps|andps|orps|xorps|addps|addss|mulps|mulss|subps|subss|minps|minss|divps|divss|maxps|maxss|pshufw|ldmxcsr|stmxcsr|sfence|cmpps|cmpss|pinsrw|pextrw|shufps|pmovmskb|pminub|pmaxub|pavgb|pavgw|pmulhuw|movntq|pminsw|pmaxsw|psadbw|maskmovq)(?-i)\\b" - statement: "\\b(?i)(addpd|addsd|addnpd|cmppd|cmpsd)(?-i)\\b" - statement: "\\b(?i)(addpd|addsd|andnpd|andpd|cmppd|cmpsd|comisd|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtps2dq|cvtps2pd|cvtsd2si|cvtsd2ss|cvtsi2sd|cvtss2sd|cvttpd2dq|cvttpd2pi|cvttps2dq|cvttsd2si|divpd|divsd|maxpd|maxsd|minpd|minsd|movapd|movhpd|movlpd|movmskpd|movsd|movupd|mulpd|mulsd|orpd|shufpd|sqrtpd|sqrtsd|subpd|subsd|ucomisd|unpckhpd|unpcklpd|xorpd)(?-i)\\b" - statement: "\\b(?i)(movdq2q|movdqa|movdqu|movq2dq|paddq|psubq|pmuludq|pshufhw|pshuflw|pshufd|pslldq|psrldq|punpckhqdq|punpcklqdq)(?-i)\\b" - statement: "\\b(?i)(addsubpd|addsubps|haddpd|haddps|hsubpd|hsubps|movddup|movshdup|movsldu)(?-i)\\b" - statement: "\\b(?i)(lddqu)(?-i)\\b" - statement: "\\b(?i)(psignw|psignd|psignb|pshufb|pmulhrsw|pmaddubsw|phsubw|phsubsw|phsubd|phaddw|phaddsw|phaddd|palignr|pabsw|pabsd|pabsb)(?-i)\\b" - statement: "\\b(?i)(dpps|dppd|blendps|blendpd|blendvps|blendvpd|roundps|roundss|roundpd|roundsd|insertps|extractps)(?-i)\\b" - statement: "\\b(?i)(mpsadbw|phminposuw|pmulld|pmuldq|pblendvb|pblendw|pminsb|pmaxsb|pminuw|pmaxuw|pminud|pmaxud|pminsd|pmaxsd|pinsrb|pinsrd/pinsrq|pextrb|pextrw|pextrd/pextrq|pmovsxbw|pmovzxbw|pmovsxbd|pmovzxbd|pmovsxbq|pmovzxbq|pmovsxwd|pmovzxwd|pmovsxwq|pmovzxwq|pmovsxdq|pmovzxdq|ptest|pcmpeqq|packusdw|movntdqa)(?-i)\\b" - statement: "\\b(?i)(extrq|insertq|movntsd|movntss)(?-i)\\b" - statement: "\\b(?i)(crc32|pcmpestri|pcmpestrm|pcmpistri|pcmpistrm|pcmpgtq)(?-i)\\b" - statement: "\\b(?i)(vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfmsubss|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubps|vfnmsubsd|vfnmsubss)(?-i)\\b" # Crypto - statement: "\\b(?i)(aesenc|aesenclast|aesdec|aesdeclast|aeskeygenassist|aesimc)(?-i)\\b" - statement: "\\b(?i)(sha1rnds4|sha1nexte|sha1msg1|sha1msg2|sha256rnds2|sha256msg1|sha256msg2)(?-i)\\b" # Undocumented - statement: "\\b(?i)(aam|aad|salc|icebp|loadall|loadalld|ud1)(?-i)\\b" ## Registers - identifier: "\\b(?i)(al|ah|bl|bh|cl|ch|dl|dh|bpl|sil|r8b|r9b|r10b|r11b|dil|spl|r12b|r13b|r14b|r15)(?-i)\\b" - identifier: "\\b(?i)(cw|sw|tw|fp_ds|fp_opc|fp_ip|fp_dp|fp_cs|cs|ss|ds|es|fs|gs|gdtr|idtr|tr|ldtr|ax|bx|cx|dx|bp|si|r8w|r9w|r10w|r11w|di|sp|r12w|r13w|r14w|r15w|ip)(?-i)\\b" - identifier: "\\b(?i)(fp_dp|fp_ip|eax|ebx|ecx|edx|ebp|esi|r8d|r9d|r10d|r11d|edi|esp|r12d|r13d|r14d|r15d|eip|eflags|mxcsr)(?-i)\\b" - identifier: "\\b(?i)(mm0|mm1|mm2|mm3|mm4|mm5|mm6|mm7|rax|rbx|rcx|rdx|rbp|rsi|r8|r9|r10|r11|rdi|rsp|r12|r13|r14|r15|rip|rflags|cr0|cr1|cr2|cr3|cr4|cr5|cr6|cr7|cr8|cr9|cr10|cr11|cr12|cr13|cr14|cr15|msw|dr0|dr1|dr2|dr3|r4|dr5|dr6|dr7|dr8|dr9|dr10|dr11|dr12|dr13|dr14|dr15)(?-i)\\b" - identifier: "\\b(?i)(st0|st1|st2|st3|st4|st5|st6|st7)(?-i)\\b" - identifier: "\\b(?i)(xmm0|xmm1|xmm2|xmm3|xmm4|xmm5|xmm6|xmm7|xmm8|xmm9|xmm10|xmm11|xmm12|xmm13|xmm14|xmm15)(?-i)\\b" - identifier: "\\b(?i)(ymm0|ymm1|ymm2|ymm3|ymm4|ymm5|ymm6|ymm7|ymm8|ymm9|ymm10|ymm11|ymm12|ymm13|ymm14|ymm15)(?-i)\\b" - identifier: "\\b(?i)(zmm0|zmm1|zmm2|zmm3|zmm4|zmm5|zmm6|zmm7|zmm8|zmm9|zmm10|zmm11|zmm12|zmm13|zmm14|zmm15|zmm16|zmm17|zmm18|zmm19|zmm20|zmm21|zmm22|zmm23|zmm24|zmm25|zmm26|zmm27|zmm28|zmm29|zmm30|zmm31)(?-i)\\b" ## Constants # Number - it works - constant.number: "\\b(|h|A|0x)+[0-9]+(|h|A)+\\b" - constant.number: "\\b0x[0-9 a-f A-F]+\\b" ## Preprocessor (NASM) - preproc: "%+(\\+|\\?|\\?\\?|)[a-z A-Z 0-9]+" - preproc: "%\\[[. a-z A-Z 0-9]*\\]" ## Other - statement: "\\b(?i)(extern|global|section|segment|_start|\\.text|\\.data|\\.bss)(?-i)\\b" - statement: "\\b(?i)(db|dw|dd|dq|dt|ddq|do)(?-i)\\b" - identifier: "[a-z A-Z 0-9 _]+:" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: ";" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/ats.yaml000066400000000000000000000077531405030104300173210ustar00rootroot00000000000000filetype: ATS detect: filename: "\\.(d|h|s)ats$" rules: - default: \b[[:alnum:]]+[^0-9A-Za-z] # Operators - symbol.operator: "[.:;+`|~<>?='\\&]|/|%|-|,|!|\\*|@|\\#" - symbol.operator: \^ # Types, abstract types and some predefined sorts - type: \b(addr|age?z|bool|char|cls|schar|uchar|double|ldouble|eff|exn|float|int(ptr)?|lincloptr|uint)\b - type: \b(lint|ulint|llint|ullint|nat|ptr|real|ref|size_t|ssize_t|sint|usint|string|tkind|viewt|v?t0p|vt|void)\b - type: \b(prop|t[@0]ype|type|viewt[@0]ype|viewtype|vt[@0]ype|vtype|view)\b - type: \b(prop[+-]|t[@0]ype[+-]|type[+-]|viewt[@0]ype[+-]|viewtype[+-]|vt[@0]ype[+-]|vtype[+-]|view[+-]) # Statements - statement: \b(abstype|abst|absprop|absviewt|absvt(ype)?|absview|and|andalso|as|(re)?assume|begin|(pr)?case|s?case)\b - statement: \b(classdec|dataprop|data(v|view)?type|dataview|datasort|do|dynload|else|end|exception|extype|extva(r|l)|s?if)\b - statement: \b(ifcase|import|for|in|infix(l|r)?|let|local|macrodef|macdef|not|of|op|or|orelse|overload|(pre|post|non)fix)\b - statement: \b(propdef|rec|sortdef|stacst|stadef|staload|stavar|sta(tic)?|symelim|symintr|tkindef|then|try|viewdef|v?typedef)\b - statement: \b(viewtypedef|(pr)?va(l|r)|when|where|while|with|withtype|withprop|withv(iew)?type|withview)\b - statement: \b(abst[@0]ype|absviewt[@0]?ype|absvt[@0]ype|abstbox|abstflat|absvtbox|absvtflat|absimpl|absreimpl|abs)\b - statement: \b(case[+-]|(pr)?va(l|r)[+-]|for\*|while\*) # Numbers - constant.number: \b[0-9.]+([eE][+-]?[0-9]+)?[fFlL]?\b - constant.number: \b0[xX][0-9A-Fa-f]*(\.[0-9A-Fa-f]*)?[pP][+-]?[0-9]+[fFlL]?\b - constant.number: \b([0-9]+|0[xX][0-9A-Fa-f]+)[lLuU]*\b # Function-related keywords, special functions and namespaces. Not really identifiers - identifier: \b(fix|(pr)?fu?n|fnx|castfn|praxi|extern|lam|llam|(pr)?implement|(pr)?implmnt)\b - identifier: \b(fix@|fold@|free@|lam@|llam@|addr@|view@|ref@|fn\*) - identifier: \$\w*\b # Other keywords, function effects... - special: (\$(arrpsz|arrptrsize|break|continue|d2ctype|delay|effmask_(ntm|exn|ref|wrt|all)))\b - special: (\$(effmask|extern|extype_struct|extype|extkind|extval|extfcall|extmcall|ldelay|literal))\b - special: (\$(li?st_vt|li?st_t|li?st|myfilename|myfunction|mylocation|raise|rec(ord)?_vt))\b - special: (\$(rec(ord)?_t|rec(ord)?|showtype|solver_assert|solver_verify|tempenver))\b - special: (\$(tup(le)?_vt|tup(le)?_t|tup(le)?|tyrep|vararg|vcopyenv_vt|vcopyenv_v))\b - special: \!(wrt|exnref|exnwrt|exn|refwrt|ref|all|ntm|laz)\b - special: \b(fun(0|1)|(lin)?cloptr(0|1)?|cloref(0|1)?|clo(0|1)?|lin|prf)\b - special: \b(f?print(ln)?!|prerr(ln)?!|tupz!) # Some C macros and other ATS macros - preproc: ^[[:space:]]*#[[:space:]]*(define|pragma|include|(un|ifn?)def|endif|el(if|se)|if|warning|error|assert)\b - preproc: ^[[:space:]]*#[[:space:]]*(codegen2|codegen3|elifdef|elifndef|prerr|print|require|then|staload|dynload)\b # Boolean values - constant.bool: \b(true|false|null)\b # The "%{ ... %}" block inserts foreign code into ATS at compile-time # Code inside of it is generally C or JavaScript - default: start: "%{[#^$]?" end: "%}" skip: "\\." limit-group: symbol.operator rules: - include: "c" - include: "javascript" # Strings and chars - constant.string: \"[^"]*\" - constant.string: \'[^']*\' # Comments # "////" comments everything until it reaches EOF - comment.block: start: //// end: $a rules: - todo: (TODO|XXX|FIXME) - comment.line: start: // end: $ rules: - todo: (TODO|XXX|FIXME) # ML-like block comment - comment.block: start: \(\* end: \*\) rules: - todo: (TODO|XXX|FIXME) # C-like block comment - comment.block: start: /\* end: \*\/ rules: - todo: (TODO|XXX|FIXME) micro-2.0.9/runtime/syntax/awk.yaml000066400000000000000000000027331405030104300173050ustar00rootroot00000000000000filetype: awk detect: filename: "\\.awk$" header: "^#!.*bin/(env +)?awk( |$)" rules: - preproc: "\\$[A-Za-z0-9_!@#$*?\\-]+" - preproc: "\\b(ARGC|ARGIND|ARGV|BINMODE|CONVFMT|ENVIRON|ERRNO|FIELDWIDTHS)\\b" - preproc: "\\b(FILENAME|FNR|FS|IGNORECASE|LINT|NF|NR|OFMT|OFS|ORS)\\b" - preproc: "\\b(PROCINFO|RS|RT|RSTART|RLENGTH|SUBSEP|TEXTDOMAIN)\\b" - identifier.class: "\\b(function|extension|BEGIN|END)\\b" - symbol.operator: "[\\-+*/%^|!=&<>?;:]|\\\\|\\[|\\]" - statement: "\\b(for|if|while|do|else|in|delete|exit)\\b" - special: "\\b(break|continue|return)\\b" - statement: "\\b(close|getline|next|nextfile|print|printf|system|fflush)\\b" - statement: "\\b(atan2|cos|exp|int|log|rand|sin|sqrt|srand)\\b" - statement: "\\b(asort|asorti|gensub|gsub|index|length|match)\\b" - statement: "\\b(split|sprintf|strtonum|sub|substr|tolower|toupper)\\b" - statement: "\\b(mktime|strftime|systime)\\b" - statement: "\\b(and|compl|lshift|or|rshift|xor)\\b" - statement: "\\b(bindtextdomain|dcgettext|dcngettext)\\b" - special: "/.*[^\\\\]/" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/bat.yaml000066400000000000000000000100641405030104300172650ustar00rootroot00000000000000filetype: batch detect: filename: "(\\.bat$)" # header: "" rules: # Numbers - constant.number: "\\b[0-9]+\\b" # Brackets and symbols - special: "(\\{|\\}|\\(|\\)|\\;|\\]|\\[|`|\\\\|\\$|<|>|!|=|&|\\|)" # Conditionals and control flow # note (?i) means case insensitive match - type: "\\b(?i)(case|do|done|elif|else|esac|exit|fi|for|function|if|in|local|read|return|select|then|until|while)\\b" - type: "\\b(?i)(equ|neq|lss|leq|gtr|geq|on|off)\\b" - type: "\\b(?i)(goto|for|in|do|call|exit|not|exist|errorlevel|defined)\\b" - type: "\\b(?i)(prn|nul|lpt3|lpt2|lpt1|con|com4|com3|com2|com1|aux)\\b" # keywords - statement: "\\b(?i)(adprep|append|arp|assoc|at|atmadm|attrib|auditpol|autochk|autoconv|autofmt|bcdboot|bcdedit|bdehdcfg|bitsadmin|bootcfg|break|brea)\\b" - statement: "\\b(?i)(cacls|cd|certreq|certutil|chcp|change|choice|cipher|chdir|chkdsk|chkntfs|chglogon|chgport|chgusr|clip|cls|clscluadmin|cluster|cmd|cmdkey|cmstp|color)\\b" - statement: "\\b(?i)(comp|compact|convert|copy|cprofile|cscript|csvde|date|dcdiag|dcgpofix|dcpromo|defra|del|dfscmd|dfsdiag|dfsrmig|diantz|dir|dirquota|diskcomp|diskcopy|diskpart|diskperf|diskraid|diskshadow|dispdiag|doin|dnscmd|doskey|driverquery|dsacls|dsadd|dsamain|dsdbutil|dsget|dsmgmt|dsmod|dsmove|dsquery|dsrm)\\b" - statement: "\\b(?i)(echo|edit|endlocal|erase|esentutl|eventcreate|eventquery|eventtriggers|evntcmd|expand|extract)\\b" - statement: "\\b(?i)(fc|filescrn|find|findstr|finger|flattemp|fonde|forfiles|format|freedisk|fs|fsutil|ftp|ftype|fveupdate|getmac|gettype|gpfixup|gpresult|gpupdate|graftabl)\\b" - statement: "\\b(?i)(hashgen|hep|help|helpctr|hostname|icacls|iisreset|inuse|ipconfig|ipxroute|irftp|ismserv|jetpack|keyb|klist|ksetup|ktmutil|ktpass|label|ldifd|ldp|lodctr|logman|logoff|lpq|lpr|macfile)\\b" - statement: "\\b(?i)(makecab|manage-bde|mapadmin|md|mkdir|mklink|mmc|mode|more|mount|mountvol|move|mqbup|mqsvc|mqtgsvc|msdt|msg|msiexec|msinfo32|mstsc|nbtstat|net computer|net group)\\b" - statement: "\\b(?i)(net localgroup|net print|net session|net share|net start|net stop|net use|net user|net view|net|netcfg|netdiag|netdom|netsh|netstat|nfsadmin|nfsshare|nfsstat|nlb)\\b" - statement: "\\b(?i)(nlbmgr|nltest|nslookup|ntackup|ntcmdprompt|ntdsutil|ntfrsutl|openfiles|pagefileconfig|path|pathping|pause|pbadmin|pentnt|perfmon|ping|pnpunatten|pnputil|popd)\\b" - statement: "\\b(?i)(powercfg|powershell|powershell_ise|print|prncnfg|prndrvr|prnjobs|prnmngr|prnport|prnqctl|prompt|pubprn|pushd|pushprinterconnections|pwlauncher|qappsrv|qprocess)\\b" - statement: "\\b(?i)(query|quser|qwinsta|rasdial|rcp|rd|rdpsign|regentc|recover|redircmp|redirusr|reg|regini|regsvr32|relog|ren|rename|rendom|repadmin|repair-bde|replace|reset|restore)\\b" - statement: "\\b(?i)(rxec|risetup|rmdir|robocopy|route|rpcinfo|rpcping|rsh|runas|rundll32|rwinsta|scp|sc|setlocal|session|schtasks|scwcmd|secedit|serverceipoptin|servrmanagercmd|serverweroptin|set|setspn)\\b" - statement: "\\b(?i)(setx|sfc|shadow|shift|showmount|shutdown|sort|ssh|start|storrept|subst|sxstrace|ysocmgr|systeminfo|takeown|tapicfg|taskkill|tasklist|tcmsetup|telnet|tftp|time)\\b" - statement: "\\b(?i)(timeout|title|tlntadmn|tpmvscmgr|tpmvscmgr|tacerpt|tracert|tree|tscon|tsdiscon|tsecimp|tskill|tsprof|type|typeperf|tzutil|uddiconfig|umount|unlodctr|ver|verify)\\b" - statement: "\\b(?i)(verifier|verif|vol|vssadmin|w32tm|waitfor|wbadmin|wdsutil|wecutil|wevtutil|where|whoami|winnt|winnt32|winpop|winrm|winrs|winsat|wlbs|mic|wscript|xcopy)\\b" # / Flags - constant: "(/\\w+)" # Variables - special: "(%%\\w+)" - special: "(%\\w+%)" # Conditional flags - type: "--[a-z-]+" - type: "\\ -[a-z]+" - identifier: "\\$\\{?[0-9A-Z_!@#$*?-]+\\}?" - identifier: "\\$\\{?[0-9A-Z_!@#$*?-]+\\}?" # "" String - constant.string: start: \" end: \" skip: \. rules: - constant.specialChar: (\\0|\\\\|\\t|\\n|\\r|\\"|\\') - constant.unicode: \\u\{[[:xdigit:]]+} # '' string - constant.string: "(\\'.+\\')" # rem as comment - comment.rem: "(?i)(rem\\s.*)" # :: as comment - comment.rem: "(?i)(\\:\\:\\s.*)" micro-2.0.9/runtime/syntax/c.yaml000066400000000000000000000041051405030104300167400ustar00rootroot00000000000000filetype: c detect: filename: "(\\.(c|C)$|\\.(h|H)$|\\.ii?$|\\.(def)$)" rules: - identifier: "\\b[A-Z_][0-9A-Z_]+\\b" - type: "\\b(auto|float|double|char|int|short|long|sizeof|enum|void|static|const|struct|union|typedef|extern|(un)?signed|inline)\\b" - type: "\\b((s?size)|((u_?)?int(8|16|32|64|ptr)))_t\\b" - type.extended: "\\b(bool)\\b" - statement: "\\b(volatile|register)\\b" - statement: "\\b(for|if|while|do|else|case|default|switch)\\b" - statement: "\\b(goto|continue|break|return)\\b" - preproc: "^[[:space:]]*#[[:space:]]*(define|pragma|include|(un|ifn?)def|endif|el(if|se)|if|warning|error)" # GCC builtins - statement: "__attribute__[[:space:]]*\\(\\([^)]*\\)\\)" - statement: "__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__" # Operator Color - symbol.operator: "([.:;,+*|=!\\%]|<|>|/|-|&)" - symbol.brackets: "[(){}]|\\[|\\]" # Integer Constants - constant.number: "(\\b([1-9][0-9]*|0[0-7]*|0[Xx][0-9A-Fa-f]+|0[Bb][01]+)([Uu]?[Ll][Ll]?|[Ll][Ll]?[Uu]?)?\\b)" # Decimal Floating Constants - constant.number: "(\\b(([0-9]*[.][0-9]+|[0-9]+[.][0-9]*)([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+)[FfLl]?\\b)" # Hexadecimal Floating Constants - constant.number: "(\\b0[Xx]([0-9A-Za-z]*[.][0-9A-Za-z]+|[0-9A-Za-z]+[.][0-9A-Za-z]*)[Pp][+-]?[0-9]+[FfLl]?\\b)" - constant.number: "NULL" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\([\"'abfnrtv\\\\]|[0-3]?[0-7]{1,2}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - error: "..+" - constant.specialChar: "\\\\([\"'abfnrtv\\\\]|[0-3]?[0-7]{1,2}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})" - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/caddyfile.yaml000066400000000000000000000007261405030104300204470ustar00rootroot00000000000000filetype: caddyfile detect: filename: "Caddyfile" rules: - identifier: "^\\s*\\S+(\\s|$)" - type: "^([\\w.:/-]+,? ?)+[,{]$" - constant.specialChar: "\\s{$" - constant.specialChar: "^\\s*}$" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - preproc: "\\{(\\w+|\\$\\w+|%\\w+%)\\}" - comment: start: "#" end: "$" rules: [] micro-2.0.9/runtime/syntax/clojure.yaml000066400000000000000000000017271405030104300201700ustar00rootroot00000000000000filetype: clojure detect: filename: "\\.(clj[sc]?|edn)$" rules: # Constants - constant.bool: "\\b(true|false)\\b" - constant.macro: "\\b(nil)\\b" # Valid numbers - constant.number: "[\\-]?[0-9]+?\\b" - constant.number: "0x[0-9][A-Fa-f]+?\\b" - constant.number: "[\\-]?(3[0-6]|2[0-9]|1[0-9]|[2-9])r[0-9A-Z]+?\\b" # Invalid numbers - error: "[\\-]?([4-9][0-9]|3[7-9]|1|0)r[0-9A-Z]+?\\b" # Symbols - symbol.operator: "[=>+\\-*/'?]" # Types/casting - type: "\\b(byte|short|(big)?int(eger)?|long|float|num|bigdec|rationalize)\\b" # String highlighting - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "(\\\\u[0-9A-fa-f]{4,4}|\\\\newline|\\\\space|\\\\tab|\\\\formfeed|\\\\backspace|\\\\return|\\\\.)" # Comments - comment: start: ";" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/cmake.yaml000066400000000000000000000022351405030104300176000ustar00rootroot00000000000000filetype: cmake detect: filename: "(CMakeLists\\.txt|\\.cmake)$" rules: - identifier.var: "^[[:space:]]*[A-Z0-9_]+" - preproc: "^[[:space:]]*(include|include_directories|include_external_msproject)\\b" - statement: "^[[:space:]]*\\b((else|end)?if|else|(end)?while|(end)?foreach|break)\\b" - statement: "\\b(COPY|NOT|COMMAND|PROPERTY|POLICY|TARGET|EXISTS|IS_(DIRECTORY|ABSOLUTE)|DEFINED)\\b[[:space:]]" - statement: "[[:space:]]\\b(OR|AND|IS_NEWER_THAN|MATCHES|(STR|VERSION_)?(LESS|GREATER|EQUAL))\\b[[:space:]]" - special: "^[[:space:]]*\\b((end)?(function|macro)|return)" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - preproc: start: "\\$(\\{|ENV\\{)" end: "\\}" rules: [] - identifier.macro: "\\b(APPLE|UNIX|WIN32|CYGWIN|BORLAND|MINGW|MSVC(_IDE|60|71|80|90)?)\\b" - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/coffeescript.yaml000066400000000000000000000037471405030104300212050ustar00rootroot00000000000000filetype: coffeescript detect: filename: "\\.coffee$" rules: - symbol.operator: "([-+/*=<>!~%?:&|]|[.]{3})|\\b(and|or|is|isnt|not)\\b" - identifier.class: "([A-Za-z_][A-Za-z0-9_]*:[[:space:]]*(->|\\()|->)" - symbol.brackets: "[()]" - statement: "\\b(await|when|catch|continue|debugger|default|by|until)\\b" - statement: "\\b(delete|do|else|export|finally|for|class|extends|while|then)\\b" - statement: "\\b(get|if|import|from|in|instanceof|new|reject|resolve|return)\\b" - statement: "\\b(set|super|switch|this|throw|try|typeof|with|yield|unless)\\b" - constant.bool: "\\b(true|false|yes|no|on|off)\\b" - constant.bool.false: "\\b(false|no|off)\\b" - constant.bool.true: "\\b(true|yes|on)\\b" - constant.number: "\\b[-+]?([1-9][0-9]*|0[0-7]*|0x[0-9a-fA-F]+)([uU][lL]?|[lL][uU]?)?\\b" - constant.number: "\\b[-+]?([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)([EePp][+-]?[0-9]+)?[fFlL]?" - constant.number: "\\b[-+]?([0-9]+[EePp][+-]?[0-9]+)[fFlL]?" - identifier: "@[A-Za-z0-9_]*" - error: "\\b(enum|implements|interface|package|private|protected|public)" - constant: "\\b(globalThis|Infinity|null|undefined|NaN)\\b" - constant: "\\b(null|undefined|NaN)\\b" - constant: "\\b(true|false|yes|no|on|off)\\b" - type: "\\b(Array|Boolean|Date|Enumerator|Error|Function|Generator|Map|Math)\\b" - type: "\\b(Number|Object|Promise|Proxy|Reflect|RegExp|Set|String|Symbol|WeakMap|WeakSet)\\b" - type: "\\b(BigInt64Array|BigUint64Array|Float32Array|Float64Array|Int16Array)\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "###" end: "###" rules: [] - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/colortest.yaml000066400000000000000000000007431405030104300205400ustar00rootroot00000000000000filetype: colortest detect: filename: "ColorTest$" rules: - black: "\\bPLAIN\\b" - red: "\\bred\\b" - green: "\\bgreen\\b" - yellow: "\\byellow\\b" - blue: "\\bblue\\b" - magenta: "\\bmagenta\\b" - cyan: "\\bcyan\\b" - brightred: "\\bbrightred\\b" - brightgreen: "\\bbrightgreen\\b" - brightyellow: "\\bbrightyellow\\b" - brightblue: "\\bbrightblue\\b" - brightmagenta: "\\bbrightmagenta\\b" - brightcyan: "\\bbrightcyan\\b" micro-2.0.9/runtime/syntax/conky.yaml000066400000000000000000000143071405030104300176460ustar00rootroot00000000000000filetype: conky detect: filename: "(\\.*conkyrc.*$|conky.conf)" rules: - type: "\\b(alignment|append_file|background|border_inner_margin|border_outer_margin|border_width|color0|color1|color2|color3|color4|color5|color6|color7|color8|color9|colorN|cpu_avg_samples|default_bar_height|default_bar_width|default_color|default_gauge_height|default_gauge_width|default_graph_height|default_graph_width|default_outline_color|default_shade_color|diskio_avg_samples|display|double_buffer|draw_borders|draw_graph_borders|draw_outline|draw_shades|extra_newline|font|format_human_readable|gap_x|gap_y|http_refresh|if_up_strictness|imap|imlib_cache_flush_interval|imlib_cache_size|lua_draw_hook_post|lua_draw_hook_pre|lua_load|lua_shutdown_hook|lua_startup_hook|mail_spool|max_port_monitor_connections|max_text_width|max_user_text|maximum_width|minimum_height|minimum_width|mpd_host|mpd_password|mpd_port|music_player_interval|mysql_host|mysql_port|mysql_user|mysql_password|mysql_db|net_avg_samples|no_buffers|nvidia_display|out_to_console|out_to_http|out_to_ncurses|out_to_stderr|out_to_x|override_utf8_locale|overwrite_file|own_window|own_window_class|own_window_colour|own_window_hints|own_window_title|own_window_transparent|own_window_type|pad_percents|pop3|sensor_device|short_units|show_graph_range|show_graph_scale|stippled_borders|temperature_unit|template|template0|template1|template2|template3|template4|template5|template6|template7|template8|template9|text|text_buffer_size|times_in_seconds|top_cpu_separate|top_name_width|total_run_times|update_interval|update_interval_on_battery|uppercase|use_spacer|use_xft|xftalpha|xftfont)\\b" # Configuration item constants - statement: "\\b(above|below|bottom_left|bottom_right|bottom_middle|desktop|dock|no|none|normal|override|skip_pager|skip_taskbar|sticky|top_left|top_right|top_middle|middle_left|middle_right|middle_middle|undecorated|yes)\\b" # Variables - preproc: "\\b(acpiacadapter|acpifan|acpitemp|addr|addrs|alignc|alignr|apcupsd|apcupsd_cable|apcupsd_charge|apcupsd_lastxfer|apcupsd_linev|apcupsd_load|apcupsd_loadbar|apcupsd_loadgauge|apcupsd_loadgraph|apcupsd_model|apcupsd_name|apcupsd_status|apcupsd_temp|apcupsd_timeleft|apcupsd_upsmode|apm_adapter|apm_battery_life|apm_battery_time|audacious_bar|audacious_bitrate|audacious_channels|audacious_filename|audacious_frequency|audacious_length|audacious_length_seconds|audacious_main_volume|audacious_playlist_length|audacious_playlist_position|audacious_position|audacious_position_seconds|audacious_status|audacious_title|battery|battery_bar|battery_percent|battery_short|battery_time|blink|bmpx_album|bmpx_artist|bmpx_bitrate|bmpx_title|bmpx_track|bmpx_uri|buffers|cached|cmdline_to_pid|color|color0|color1|color2|color3|color4|color5|color6|color7|color8|color9|combine|conky_build_arch|conky_build_date|conky_version|cpu|cpubar|cpugauge|cpugraph|curl|desktop|desktop_name|desktop_number|disk_protect|diskio|diskio_read|diskio_write|diskiograph|diskiograph_read|diskiograph_write|distribution|downspeed|downspeedf|downspeedgraph|draft_mails|else|endif|entropy_avail|entropy_bar|entropy_perc|entropy_poolsize|eval|eve|exec|execbar|execgauge|execgraph|execi|execibar|execigauge|execigraph|execp|execpi|flagged_mails|font|format_time|forwarded_mails|freq|freq_g|fs_bar|fs_bar_free|fs_free|fs_free_perc|fs_size|fs_type|fs_used|fs_used_perc|goto|gw_iface|gw_ip|hddtemp|head|hr|hwmon|i2c|i8k_ac_status|i8k_bios|i8k_buttons_status|i8k_cpu_temp|i8k_left_fan_rpm|i8k_left_fan_status|i8k_right_fan_rpm|i8k_right_fan_status|i8k_serial|i8k_version|ibm_brightness|ibm_fan|ibm_temps|ibm_volume|ical|iconv_start|iconv_stop|if_empty|if_existing|if_gw|if_match|if_mixer_mute|if_mounted|if_mpd_playing|if_running|if_smapi_bat_installed|if_up|if_updatenr|if_xmms2_connected|image|imap_messages|imap_unseen|ioscheduler|irc|kernel|laptop_mode|lines|loadavg|loadgraph|lua|lua_bar|lua_gauge|lua_graph|lua_parse|machine|mails|mboxscan|mem|memwithbuffers|membar|memwithbuffersbar|memeasyfree|memfree|memgauge|memgraph|memmax|memperc|mixer|mixerbar|mixerl|mixerlbar|mixerr|mixerrbar|moc_album|moc_artist|moc_bitrate|moc_curtime|moc_file|moc_rate|moc_song|moc_state|moc_timeleft|moc_title|moc_totaltime|monitor|monitor_number|mpd_album|mpd_artist|mpd_bar|mpd_bitrate|mpd_elapsed|mpd_file|mpd_length|mpd_name|mpd_percent|mpd_random|mpd_repeat|mpd_smart|mpd_status|mpd_title|mpd_track|mpd_vol|mysql|nameserver|new_mails|nodename|nodename_short|no_update|nvidia|obsd_product|obsd_sensors_fan|obsd_sensors_temp|obsd_sensors_volt|obsd_vendor|offset|outlinecolor|pb_battery|pid_chroot|pid_cmdline|pid_cwd|pid_environ|pid_environ_list|pid_exe|pid_nice|pid_openfiles|pid_parent|pid_priority|pid_state|pid_state_short|pid_stderr|pid_stdin|pid_stdout|pid_threads|pid_thread_list|pid_time_kernelmode|pid_time_usermode|pid_time|pid_uid|pid_euid|pid_suid|pid_fsuid|pid_gid|pid_egid|pid_sgid|pid_fsgid|pid_read|pid_vmpeak|pid_vmsize|pid_vmlck|pid_vmhwm|pid_vmrss|pid_vmdata|pid_vmstk|pid_vmexe|pid_vmlib|pid_vmpte|pid_write|platform|pop3_unseen|pop3_used|processes|read_tcp|read_udp|replied_mails|rss|running_processes|running_threads|scroll|seen_mails|shadecolor|smapi|smapi_bat_bar|smapi_bat_perc|smapi_bat_power|smapi_bat_temp|sony_fanspeed|stippled_hr|stock|swap|swapbar|swapfree|swapmax|swapperc|sysname|tab|tail|tcp_ping|tcp_portmon|template0|template1|template2|template3|template4|template5|template6|template7|template8|template9|texeci|texecpi|threads|time|to_bytes|top|top_io|top_mem|top_time|totaldown|totalup|trashed_mails|tztime|gid_name|uid_name|unflagged_mails|unforwarded_mails|unreplied_mails|unseen_mails|updates|upspeed|upspeedf|upspeedgraph|uptime|uptime_short|user_names|user_number|user_terms|user_times|user_time|utime|voffset|voltage_mv|voltage_v|weather|wireless_ap|wireless_bitrate|wireless_essid|wireless_link_bar|wireless_link_qual|wireless_link_qual_max|wireless_link_qual_perc|wireless_mode|words|xmms2_album|xmms2_artist|xmms2_bar|xmms2_bitrate|xmms2_comment|xmms2_date|xmms2_duration|xmms2_elapsed|xmms2_genre|xmms2_id|xmms2_percent|xmms2_playlist|xmms2_size|xmms2_smart|xmms2_status|xmms2_timesplayed|xmms2_title|xmms2_tracknr|xmms2_url)\\b" - identifier.var: "\\$\\{?[0-9A-Z_!@#$*?-]+\\}?" - symbol.operator: "(\\{|\\}|\\(|\\)|\\;|\\]|\\[|`|\\\\|\\$|<|>|!|=|&|\\|)" - constant.macro: "^TEXT$" micro-2.0.9/runtime/syntax/cpp.yaml000066400000000000000000000053231405030104300173030ustar00rootroot00000000000000filetype: c++ detect: filename: "(\\.c(c|pp|xx)$|\\.h(h|pp|xx)$|\\.ii?$|\\.(def)$)" rules: - identifier: "\\b[A-Z_][0-9A-Z_]*\\b" - type: "\\b(float|double|bool|char|int|short|long|enum|void|struct|union|typedef|(un)?signed|inline)\\b" - type: "\\b(((s?size)|((u_?)?int(8|16|32|64|ptr))|char(8|16|32))_t|wchar_t)\\b" - type: "\\b(final|override)\\b" - type.keyword: "\\b(auto|volatile|const(expr|eval|init)?|mutable|register|thread_local|static|extern|decltype|explicit|virtual)\\b" - statement: "\\b(class|namespace|template|typename|this|friend|using|public|protected|private|noexcept)\\b" - statement: "\\b(concept|requires)\\b" - statement: "\\b(import|export|module)\\b" - statement: "\\b(for|if|while|do|else|case|default|switch)\\b" - statement: "\\b(try|throw|catch|operator|new|delete|static_assert)\\b" - statement: "\\b(goto|continue|break|return)\\b" - preproc: "^[[:space:]]*#[[:space:]]*(define|pragma|include|(un|ifn?)def|endif|el(if|se)|if|warning|error)|_Pragma" # Conditionally-supported/extension keywords - statement: "\\b(asm|fortran)\\b" # GCC builtins - statement: "(__attribute__[[:space:]]*\\(\\([^)]*\\)\\)|__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__)" # Operator Color - symbol.operator: "[-+*/%=<>.:;,~&|^!?]|\\b(sizeof|alignof|typeid|(and|or|xor|not)(_eq)?|bitor|compl|bitand|(const|dynamic|reinterpret|static)_cast)\\b" # Parenthetical Color - symbol.brackets: "[(){}]|\\[|\\]" # Integer Literals - constant.number: "(\\b([1-9][0-9']*|0[0-7']*|0[Xx][0-9a-fA-F']+|0[Bb][01]+)([Uu]?[Ll][Ll]?|[Ll][Ll]?[Uu]?)?\\b)" # Decimal Floating-point Literals - constant.number: "(\\b(([0-9']*[.][0-9']+|[0-9']+[.][0-9']*)([Ee][+-]?[0-9']+)?|[0-9']+[Ee][+-]?[0-9']+)[FfLl]?\\b)" # Hexadecimal Floating-point Literals - constant.number: "(\\b0[Xx]([0-9a-zA-Z']*[.][0-9a-zA-Z']+|[0-9a-zA-Z']+[.][0-9a-zA-Z']*)[Pp][+-]?[0-9']+[FfLl]?\\b)" - constant.bool: "(\\b(true|false|NULL|nullptr)\\b)" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\([\"'abfnrtv\\\\]|[0-3]?[0-7]{1,2}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - error: "..+" - constant.specialChar: "\\\\([\"'abfnrtv\\\\]|[0-3]?[0-7]{1,2}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})" - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/crontab.yaml000066400000000000000000000027001405030104300201450ustar00rootroot00000000000000filetype: crontab detect: filename: "crontab$" header: "^#.*?/etc/crontab" rules: # The time and date fields are: # field allowed values # ----- -------------- # minute 0-59 # hour 0-23 # day of month 0-31 # month 0-12 (or names, see below) # day of week 0-7 (0 or 7 is Sun, or use names) - statement: "^([\\*0-9,\\-\\/]+)\\s+([\\*0-9,\\-\\/]+)\\s+([\\*0-9,\\-\\/]+)\\s+(([\\*0-9,\\-\\/]+)|(\\b(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\b))\\s+(([\\*0-9,\\-\\/]+)|(\\b(sun|mon|tue|wed|thu|fri|sat)\\b))\\s+(.*)$\\n?" - constant: "^([\\*0-9,\\-\\/]+)\\s+([\\*0-9,\\-\\/]+)\\s+([\\*0-9,\\-\\/]+)\\s+(([\\*0-9,\\-\\/]+)|(\\b(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\b))\\s+(([\\*0-9,\\-\\/]+)|(\\b(sun|mon|tue|wed|thu|fri|sat)\\b))" # Shell Values - type: "^[A-Z]+\\=" # Months and weekday keywords - constant: "\\b(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\b" - constant: "\\b(sun|mon|tue|wed|thu|fri|sat)\\b" - type: "\\@(reboot|yearly|annually|monthly|weekly|daily|midnight|hourly)\\b" # Conditionals - special: "(\\{|\\}|\\(|\\)|\\;|\\]|\\[|`|\\\\|\\$|<|>|^|!|=|&|\\|)" - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/crystal.yaml000066400000000000000000000041301405030104300201750ustar00rootroot00000000000000filetype: crystal detect: filename: "\\.cr$" rules: # Asciibetical list of reserved words - statement: "\\b(abstract|alias|as|asm|begin|break|case|class|def|do|else|elsif|end|ensure|enum|extend|for|fun|if|in|include|instance_sizeof|lib|loop|macro|module|next|of|out|pointerof|private|protected|raise|require|rescue|return|select|self|sizeof|spawn|struct|super|then|type|typeof|uninitialized|union|unless|until|verbatim|when|while|with|yield)\\b" # Constants - constant: "\\b(true|false|nil)\\b" - constant.number: "\\b[0-9]+\\b" # Ones that can't be in the same regex because they include non-words. # The nil? one has to be after the constants. - statement: "\\b(nil\\?|as(\\?|\\b)|is_a\\?|responds_to\\?)" - type: "(\\$|@|@@)?\\b[A-Z]+[0-9A-Z_a-z]*" # Crystal "symbols" - constant: "([ ]|^):[0-9A-Z_]+\\b" # Some unique things we want to stand out - constant: "\\b(__FILE__|__LINE__)\\b" # Regular expressions - constant: "/([^/]|(\\\\/))*/[iomx]*|%r\\{([^}]|(\\\\}))*\\}[iomx]*" # Shell command expansion is in `backticks` or like %x{this}. These are # "double-quotish" (to use a perlism). - constant.string: "`[^`]*`|%x\\{[^}]*\\}" - constant.string: start: "`" end: "`" rules: [] - constant.string: start: "%x\\{" end: "\\}" rules: [] - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - symbol.brackets: start: "#\\{" end: "\\}" rules: - default: ".*" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment.bright: start: "##" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - constant: start: "<<-?'?EOT'?" end: "^EOT" rules: [] micro-2.0.9/runtime/syntax/csharp.yaml000066400000000000000000000036041405030104300200010ustar00rootroot00000000000000filetype: csharp detect: filename: "\\.cs$" rules: # Class - identifier.class: "class +[A-Za-z0-9]+ *((:) +[A-Za-z0-9.]+)?" # Annotation - identifier.var: "@[A-Za-z]+" - identifier: "([A-Za-z0-9_]*[[:space:]]*[()])" - type: "\\b(bool|byte|sbyte|char|decimal|double|float|IntPtr|int|uint|long|ulong|object|short|ushort|string|base|this|var|void)\\b" - statement: "\\b(alias|as|case|catch|checked|default|do|dynamic|else|finally|fixed|for|foreach|goto|if|is|lock|new|null|return|switch|throw|try|unchecked|while)\\b" - statement: "\\b(abstract|async|class|const|delegate|enum|event|explicit|extern|get|implicit|in|internal|interface|namespace|operator|out|override|params|partial|private|protected|public|readonly|ref|sealed|set|sizeof|stackalloc|static|struct|typeof|unsafe|using|value|virtual|volatile|yield)\\b" # LINQ-only keywords (ones that cannot be used outside of a LINQ query - lots others can) - statement: "\\b(from|where|select|group|info|orderby|join|let|in|on|equals|by|ascending|descending)\\b" - special: "\\b(break|continue)\\b" - constant.bool: "\\b(true|false)\\b" - symbol.operator: "[\\-+/*=<>?:!~%&|]" - constant.number: "\\b([0-9._]+|0x[A-Fa-f0-9_]+|0b[0-1_]+)[FL]?\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\([btnfr]|'|\\\"|\\\\)" - constant.specialChar: "\\\\u[A-Fa-f0-9]{4}" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\([btnfr]|'|\\\"|\\\\)" - constant.specialChar: "\\\\u[A-Fa-f0-9]{4}" - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/css.yaml000066400000000000000000000155531405030104300173170ustar00rootroot00000000000000filetype: css detect: filename: "\\.(css|scss)$" rules: # Classes and IDs - statement: "(?i)." # - normal: # start: "\\{" # end: "\\}" # rules: [] # css commands - type: "(align-content|align-items|alignment-baseline|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|appearance|azimuth|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|baseline-shift|bookmark-label|bookmark-level|bookmark-state|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-boundary|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-decoration-break|box-shadow|box-sizing|box-snap|box-suppress|break-after|break-before|break-inside|caption-side|caret|caret-animation|caret-color|caret-shape|chains|clear|clip|clip-path|clip-rule|color|color-interpolation-filters|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|columns|column-span|column-width|content|continue|counter-increment|counter-reset|counter-set|cue|cue-after|cue-before|cursor|direction|display|dominant-baseline|elevation|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|float-defer|float-offset|float-reference|flood-color|flood-opacity|flow|flow-from|flow-into|font|font-family|font-feature-settings|font-kerning|font-language-override|font-size|font-size-adjust|font-stretch|font-style|font-synthesis|font-variant|font-variant-alternates|font-variant-caps|font-variant-east-asian|font-variant-ligatures|font-variant-numeric|font-variant-position|font-weight|footnote-display|footnote-policy|glyph-orientation-vertical|grid|grid-area|grid-auto-columns|grid-auto-flow|grid-auto-rows|grid-column|grid-column-end|grid-column-gap|grid-column-start|grid-gap|grid-row|grid-row-end|grid-row-gap|grid-row-start|grid-template|grid-template-areas|grid-template-columns|grid-template-rows|hanging-punctuation|height|hyphenate-character|hyphenate-limit-chars|hyphenate-limit-last|hyphenate-limit-lines|hyphenate-limit-zone|hyphens|image-orientation|image-rendering|image-resolution|initial-letter|initial-letter-align|initial-letter-wrap|isolation|justify-content|justify-items|justify-self|left|letter-spacing|lighting-color|line-break|line-grid|line-height|line-snap|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|marker|marker-end|marker-knockout-left|marker-knockout-right|marker-mid|marker-pattern|marker-segment|marker-side|marker-start|marquee-direction|marquee-loop|marquee-speed|marquee-style|mask|mask-border|mask-border-mode|mask-border-outset|mask-border-repeat|mask-border-slice|mask-border-source|mask-border-width|mask-clip|mask-composite|mask-image|mask-mode|mask-origin|mask-position|mask-repeat|mask-size|mask-type|max-height|max-lines|max-width|min-height|min-width|mix-blend-mode|motion|motion-offset|motion-path|motion-rotation|nav-down|nav-left|nav-right|nav-up|object-fit|object-position|offset-after|offset-before|offset-end|offset-start|opacity|order|orphans|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-style|overflow-wrap|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page|page-break-after|page-break-before|page-break-inside|pause|pause-after|pause-before|perspective|perspective-origin|pitch|pitch-range|play-during|polar-anchor|polar-angle|polar-distance|polar-origin|position|presentation-level|quotes|region-fragment|resize|rest|rest-after|rest-before|richness|right|rotation|rotation-point|ruby-align|ruby-merge|ruby-position|running|scroll-behavior|scroll-snap-align|scroll-snap-margin|scroll-snap-margin-block|scroll-snap-margin-block-end|scroll-snap-margin-block-start|scroll-snap-margin-bottom|scroll-snap-margin-inline|scroll-snap-margin-inline-end|scroll-snap-margin-inline-start|scroll-snap-margin-left|scroll-snap-margin-right|scroll-snap-margin-top|scroll-snap-padding|scroll-snap-padding-block|scroll-snap-padding-block-end|scroll-snap-padding-block-start|scroll-snap-padding-bottom|scroll-snap-padding-inline|scroll-snap-padding-inline-end|scroll-snap-padding-inline-start|scroll-snap-padding-left|scroll-snap-padding-right|scroll-snap-padding-top|scroll-snap-type|shape-image-threshold|shape-inside|shape-margin|shape-outside|size|speak|speak-as|speak-header|speak-numeral|speak-punctuation|speech-rate|stress|string-set|stroke|stroke-alignment|stroke-dashadjust|stroke-dasharray|stroke-dashcorner|stroke-dashoffset|stroke-linecap|stroke-linejoin|stroke-miterlimit|stroke-opacity|stroke-width|table-layout|tab-size|text-align|text-align-all|text-align-last|text-combine-upright|text-decoration|text-decoration-color|text-decoration-line|text-decoration-skip|text-decoration-style|text-emphasis|text-emphasis-color|text-emphasis-position|text-emphasis-style|text-indent|text-justify|text-orientation|text-overflow|text-shadow|text-space-collapse|text-space-trim|text-spacing|text-transform|text-underline-position|text-wrap|top|transform|transform-box|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch|voice-range|voice-rate|voice-stress|voice-volume|volume|white-space|widows|width|will-change|word-break|word-spacing|word-wrap|wrap-after|wrap-before|wrap-flow|wrap-inside|wrap-through|writing-mode|z-index):" # - default: # start: ":" # end: "[;^\\{]" # rules: [] - special: "!important" - identifier: ":active|:focus|:hover|:link|:visited|:link|:after|:before|$" - special: "(\\{|\\}|\\(|\\)|\\;|:|\\]|~|<|>|,)" # SCSS Varaibles - statement: "@import|@mixin|@extend" # Strings - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - special: "\"|'" # Comments & TODOs - comment: start: "\\/\\*" end: "\\*\\/" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/csx.yaml000066400000000000000000000002671405030104300173200ustar00rootroot00000000000000filetype: csharp-script detect: filename: "\\.csx$" header: "^#!.*/(env +)?dotnet-script( |$)" rules: - include: "csharp" - preproc: "\\B(\\#!|\\#[r|load|]+\\b)" micro-2.0.9/runtime/syntax/cython.yaml000066400000000000000000000024531405030104300200260ustar00rootroot00000000000000filetype: cython detect: filename: "\\.pyx$|\\.pxd$|\\.pyi$" rules: # Python Keyword Color - statement: "\\b(and|as|assert|class|def|DEF|del|elif|ELIF|else|ELSE|except|exec|finally|for|from|global|if|IF|import|in|is|lambda|map|not|or|pass|print|raise|try|while|with|yield)\\b" - special: "\\b(continue|break|return)\\b" # Cython Keyword Color - identifier.macro: "\\b(cdef|cimport|cpdef|cppclass|ctypedef|extern|include|namespace|property|struct)\\b" - type: "\\b(bint|char|double|int|public|void|unsigned)\\b" # Operator Color - symbol: "[.:;,+*|=!\\%]|<|>|/|-|&" # Parenthetical Color - symbol.brackets: "[(){}]|\\[|\\]" - constant.string: start: "\"\"\"" end: "\"\"\"" rules: - constant.specialChar: "\\\\." - constant.string: start: "'''" end: "'''" rules: - constant.specialChar: "\\\\." - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/d.yaml000066400000000000000000000103531405030104300167430ustar00rootroot00000000000000filetype: d detect: filename: "\\.(d(i|d)?)$" rules: # Operators and punctuation - statement: "(\\*|/|%|\\+|-|>>|<<|>>>|&|\\^(\\^)?|\\||~)?=" - statement: "\\.\\.(\\.)?|!|\\*|&|~|\\(|\\)|\\[|\\]|\\\\|/|\\+|-|%|<|>|\\?|:|;" # Octal integer literals are deprecated - error: "(0[0-7_]*)(L[uU]?|[uU]L?)?" # Decimal integer literals - constant.number: "([0-9]|[1-9][0-9_]*)(L[uU]?|[uU]L?)?" # Binary integer literals - constant: "(0[bB][01_]*)(L[uU]?|[uU]L?)?" # Decimal float literals - constant.number: "[0-9][0-9_]*\\.([0-9][0-9_]*)([eE][+-]?([0-9][0-9_]*))?[fFL]?i?" - constant.number: "[0-9][0-9_]*([eE][+-]?([0-9][0-9_]*))[fFL]?i?" - constant.number: "[^.]\\.([0-9][0-9_]*)([eE][+-]?([0-9][0-9_]*))?[fFL]?i?" - constant.number: "[0-9][0-9_]*([fFL]?i|[fF])" # Hexadecimal integer literals - constant.number: "(0[xX]([0-9a-fA-F][0-9a-fA-F_]*|[0-9a-fA-F_]*[0-9a-fA-F]))(L[uU]?|[uU]L?)?" # Hexadecimal float literals - constant.number: "0[xX]([0-9a-fA-F][0-9a-fA-F_]*|[0-9a-fA-F_]*[0-9a-fA-F])(\\.[0-9a-fA-F][0-9a-fA-F_]*|[0-9a-fA-F_]*[0-9a-fA-F])?[pP][+-]?([0-9][0-9_]*)[fFL]?i?" - constant.number: "0[xX]\\.([0-9a-fA-F][0-9a-fA-F_]*|[0-9a-fA-F_]*[0-9a-fA-F])[pP][+-]?([0-9][0-9_]*)[fFL]?i?" # Character literals - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." # Keywords # a-e - statement: "\\b(abstract|alias|align|asm|assert|auto|body|break|case|cast|catch|class|const|continue|debug|default|delegate|do|else|enum|export|extern)\\b" # f-l - statement: "\\b(false|final|finally|for|foreach|foreach_reverse|function|goto|if|immutable|import|in|inout|interface|invariant|is|lazy)\\b" # m-r - statement: "\\b(macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|public|pure|ref|return)\\b" # s-w - statement: "\\b(scope|shared|static|struct|super|switch|synchronized|template|this|throw|true|try|typeid|typeof|union|unittest|version|while|with)\\b" # __ - statement: "\\b(__FILE__|__MODULE__|__LINE__|__FUNCTION__|__PRETTY_FUNCTION__|__gshared|__traits|__vector|__parameters)\\b" # Deprecated keywords - error: "\\b(delete|deprecated|typedef|volatile)\\b" # Primitive types - type: "\\b(bool|byte|cdouble|cent|cfloat|char|creal|dchar|double|float|idouble|ifloat|int|ireal|long|real|short|ubyte|ucent|uint|ulong|ushort|void|wchar)\\b" # Globally defined symbols - type: "\\b(string|wstring|dstring|size_t|ptrdiff_t)\\b" # Special tokens - constant: "\\b(__DATE__|__EOF__|__TIME__|__TIMESTAMP__|__VENDOR__|__VERSION__)\\b" # String literals # DoubleQuotedString - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." # WysiwygString - constant.string: start: "r\"" end: "\"" rules: - constant.specialChar: "\\\\." - constant.string: start: "`" end: "`" rules: - constant.specialChar: "\\\\." # HexString - constant.string: start: "x\"" end: "\"" rules: - constant.specialChar: "\\\\." # DelimitedString - constant.string: start: "q\"\\(" end: "\\)\"" rules: - constant.specialChar: "\\\\." - constant.string: start: "q\"\\{" end: "q\"\\}" rules: - constant.specialChar: "\\\\." - constant.string: start: "q\"\\[" end: "q\"\\]" rules: - constant.specialChar: "\\\\." - constant.string: start: "q\"<" end: "q\">" rules: - constant.specialChar: "\\\\." - constant.string: start: "q\"[^({[<\"][^\"]*$" end: "^[^\"]+\"" rules: - constant.specialChar: "\\\\." - constant.string: start: "q\"([^({[<\"])" end: "\"" rules: - constant.specialChar: "\\\\." # Comments - comment: start: "//" end: "$" rules: [] - comment: start: "/\\*" end: "\\*/" rules: [] - comment: start: "/\\+" end: "\\+/" rules: [] micro-2.0.9/runtime/syntax/dart.yaml000066400000000000000000000026121405030104300174510ustar00rootroot00000000000000filetype: dart detect: filename: "\\.dart$" rules: - constant.number: "\\b[-+]?([1-9][0-9]*|0[0-7]*|0x[0-9a-fA-F]+)([uU][lL]?|[lL][uU]?)?\\b" - constant.number: "\\b[-+]?([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)([EePp][+-]?[0-9]+)?[fFlL]?" - constant.number: "\\b[-+]?([0-9]+[EePp][+-]?[0-9]+)[fFlL]?" - identifier: "[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[(]" - statement: "\\b(break|case|catch|continue|default|else|finally)\\b" - statement: "\\b(for|function|get|if|in|as|is|new|return|set|switch|final|await|async|sync)\\b" - statement: "\\b(switch|this|throw|try|var|void|while|with|import|library|part|const|export)\\b" - constant: "\\b(true|false|null)\\b" - type: "\\b(List|String)\\b" - type: "\\b(int|num|double|bool)\\b" - statement: "[-+/*=<>!~%?:&|]" - constant: "/[^*]([^/]|(\\\\/))*[^\\\\]/[gim]*" - constant: "\\\\[0-7][0-7]?[0-7]?|\\\\x[0-9a-fA-F]+|\\\\[bfnrt'\"\\?\\\\]" - comment: start: "//" end: "$" rules: - todo: "TODO:?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "TODO:?" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." micro-2.0.9/runtime/syntax/dockerfile.yaml000066400000000000000000000014321405030104300206250ustar00rootroot00000000000000filetype: dockerfile detect: filename: "(Dockerfile[^/]*$|\\.dockerfile$)" rules: ## Keywords - type.keyword: "(?i)^(FROM|MAINTAINER|RUN|CMD|LABEL|EXPOSE|ENV|ADD|COPY|ENTRYPOINT|VOLUME|USER|WORKDIR|ONBUILD|ARG|HEALTHCHECK|STOPSIGNAL|SHELL)[[:space:]]" ## Brackets & parenthesis - statement: "(\\(|\\)|\\[|\\])" ## Double ampersand - special: "&&" ## Comments - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." micro-2.0.9/runtime/syntax/dot.yaml000066400000000000000000000016611405030104300173100ustar00rootroot00000000000000filetype: dot detect: filename: "\\.(dot|gv)$" rules: - type: "\\b(digraph|edge|graph|node|subgraph)\\b" - statement: "\\b(arrow(head|size|tail)|(bg|fill|font)?color|center|constraint|decorateP|dir|distortion|font(name|size)|head(clip|label)|height|label(angle|distance|font(color|name|size))?|layer(s)?|margin|mclimit|minlen|name|nodesep|nslimit|ordering|orientation|page(dir)?|peripheries|port_label_distance|rank(dir|sep)?|ratio|regular|rotate|same(head|tail)|shape(file)?|sides|size|skew|style|tail(clip|label)|URL|weight|width)\\b" - symbol: "=|->|--" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/elixir.yaml000066400000000000000000000034301405030104300200120ustar00rootroot00000000000000filetype: elixir detect: filename: "\\.ex$|\\.exs$" rules: - statement: "\\b(abs|trunc|rem|div|round|max|min|and|or|not|throw|raise|reraise|hd|tl|in|length|elem|put_elem|destructure|to_(string|charlist)|is_(atom|binary|bitstring|boolean|float|function|integer|list|map|nil|number|pid|port|reference|tuple)|(bit|byte|map|tuple)_size|binary_part|def(delegate|exception|guard|guardp|impl|macro|macrop|module|overridable|p|protocol|struct)?|sigil_[crswCRSWDNT]|if|else|unless|cond|binding|node|self|spawn|spawn_link|spawn_monitor|send|exit|struct|get_and_update_in|get_in|put_in|pop_in|update_in|apply|inspect|make_ref|use|do|end)\\b" - statement: "\\b(alias|import|require|case|fn|receive|after|try|catch|rescue|super|quote|unquote|unquote_splicing|for|with)\\b" - constant: "\\b\\[A-Z]+\\b" - constant.number: "\\b[0-9]+\\b" - constant.string: "`[^`]*`|%x\\{[^}]*\\}" - constant.string: "\"([^\"]|(\\\\\"))*\"|%[QW]?\\{[^}]*\\}|%[QW]?\\([^)]*\\)|%[QW]?<[^>]*>|%[QW]?\\[[^]]*\\]|%[QW]?\\$[^$]*\\$|%[QW]?\\^[^^]*\\^|%[QW]?![^!]*!" - constant.string: "'([^']|(\\\\'))*'|%[qw]\\{[^}]*\\}|%[qw]\\([^)]*\\)|%[qw]<[^>]*>|%[qw]\\[[^]]*\\]|%[qw]\\$[^$]*\\$|%[qw]\\^[^^]*\\^|%[qw]![^!]*!" - symbol.brackets: "\\{|\\}|\\[|\\]|\\(|\\)" - comment: "#[^{].*$|#$" - comment.bright: "##[^{].*$|##$" - type.keyword: "\\:[a-zA-Z][a-zA-Z0-9_]*" - type.keyword: "\\b(describe|test)" - statement: "\\b(expected|assert|assert_raise|assert_in_delta|assert_received|catch_error|catch_throw|flunk|refute|refute_in_delta|refute_received)\\b" - symbol.tag: "^\\s*\\@[a-zA-Z][a-zA-Z0-9_]*\\b" - identifier.macro: "\\b(__CALLER__|__DIR__|__ENV__|__MODULE__|__aliases__|__block__|defmacro)\\b" - todo: "(XXX|TODO|FIXME|\\?\\?\\?)" - preproc.shebang: "\\W*#!.+?( |$)" micro-2.0.9/runtime/syntax/elm.yaml000066400000000000000000000016351405030104300173000ustar00rootroot00000000000000filetype: elm detect: filename: "\\.elm$" rules: - statement: "\\b(as|alias|case|else|exposing|if|import|in|let|module|of|port|then|type|)\\b" - statement: "(\\=|\\:|\\->)" - type: "\\b([A-Z][A-Za-z\\d]*)\\b" - identifier: "^([a-z][A-Za-z\\d]*)\\b" - constant.string: start: "\"\"\"" end: "\"\"\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "--" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "\\{-" end: "-\\}" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/erb.yaml000066400000000000000000000045561405030104300173000ustar00rootroot00000000000000filetype: erb detect: filename: "\\.erb$|\\.rhtml$" rules: - error: "<[^!].*?>" - symbol.tag: "(?i)<[/]?(a(bbr|cronym|ddress|pplet|rea|rticle|side|udio)?|b(ase(font)?|d(i|o)|ig|lockquote|r)?|ca(nvas|ption)|center|cite|co(de|l|lgroup)|d(ata(list)?|d|el|etails|fn|ialog|ir|l|t)|em(bed)?|fieldset|fig(caption|ure)|font|form|(i)?frame|frameset|h[1-6]|hr|i|img|in(put|s)|kbd|keygen|label|legend|li(nk)?|ma(in|p|rk)|menu(item)?|met(a|er)|nav|no(frames|script)|o(l|pt(group|ion)|utput)|p(aram|icture|re|rogress)?|q|r(p|t|uby)|s(trike)?|samp|se(ction|lect)|small|source|span|strong|su(b|p|mmary)|textarea|time|track|u(l)?|var|video|wbr)( .*|>)*?>" - symbol.tag.extended: "(?i)<[/]?(body|div|html|head(er)?|footer|title|table|t(body|d|h(ead)?|r|foot))( .*|>)*?>" - preproc: "(?i)<[/]?(script|style)( .*|>)*?>" - special: "&[^;[[:space:]]]*;" - symbol: "[:=]" - identifier: "(alt|bgcolor|height|href|id|label|longdesc|name|onclick|onfocus|onload|onmouseover|size|span|src|style|target|type|value|width)=" - constant.string: "\"[^\"]*\"" - constant.number: "(?i)#[0-9A-F]{6,6}" - constant.string.url: "(ftp(s)?|http(s)?|git|chrome)://[^ ]+" - comment: "" - preproc: "" - default: start: "<%" end: "%>" rules: [] - preproc: "<%|%>" - red: "&[^;[[:space:]]]*;" - statement: "\\b(BEGIN|END|alias|and|begin|break|case|class|def|defined\\?|do|else|elsif|end|ensure|false|for|if|in|module|next|nil|not|or|redo|rescue|retry|return|self|super|then|true|undef|unless|until|when|while|yield)\\b" - identifier.var: "(\\$|@|@@)?\\b[A-Z]+[0-9A-Z_a-z]*" - magenta: "(?i)([ ]|^):[0-9A-Z_]+\\b" - identifier.macro: "\\b(__FILE__|__LINE__)\\b" - brightmagenta: "!/([^/]|(\\\\/))*/[iomx]*|%r\\{([^}]|(\\\\}))*\\}[iomx]*" - brightblue: "`[^`]*`|%x\\{[^}]*\\}" - constant.string: "\"([^\"]|(\\\\\"))*\"|%[QW]?\\{[^}]*\\}|%[QW]?\\([^)]*\\)|%[QW]?<[^>]*>|%[QW]?\\[[^]]*\\]|%[QW]?\\$[^$]*\\$|%[QW]?\\^[^^]*\\^|%[QW]?![^!]*!" - brightgreen: "#\\{[^}]*\\}" - green: "'([^']|(\\\\'))*'|%[qw]\\{[^}]*\\}|%[qw]\\([^)]*\\)|%[qw]<[^>]*>|%[qw]\\[[^]]*\\]|%[qw]\\$[^$]*\\$|%[qw]\\^[^^]*\\^|%[qw]![^!]*!" - comment: "#[^{].*$|#$" - comment.bright: "##[^{].*$|##$" - identifier.macro: start: "<<-?'?EOT'?" end: "^EOT" rules: [] - todo: "(XXX|TODO|FIXME|\\?\\?\\?)" micro-2.0.9/runtime/syntax/erlang.yaml000066400000000000000000000052131405030104300177670ustar00rootroot00000000000000filetype: erlang detect: filename: "\\.erl$" rules: - identifier: "\\b[A-Z][0-9a-z_]*\\b" # See: http://erlang.org/doc/reference_manual/data_types.html - constant.number: "\\b[0-9]+(\\.[0-9]+)?(e-?[0-9]+)?\\b" - constant.number: "\\b[0-9]{1,2}\\#[a-zA-Z0-9]+\\b" - constant.bool: "\\b(true|false)\\b" - constant.number: "\\$\\\\?\\S{1}" # See: http://erlang.org/doc/reference_manual/introduction.html - statement: "\\b(after|and|andalso|band|begin|bnot|bor|bsl|bsr|bxor|case|catch|cond|div|end|fun|if|let|not|of|or|orelse|receive|rem|try|when|xor)\\b" # See: http://erlang.org/doc/reference_manual/macros.html - preproc: "\\-(module|export|record|include|include_lib|define|undef|ifdef|ifndef|else|endif|if|elif|error|warning)\\b" - identifier.macro: "\\?[A-Z0-9_]+\\b" # See: http://erlang.org/doc/man/erlang.html - special: "\\b(ext_binary|binary|iovec|message_queue_data|time(_unit|stamp)|abs|apply|atom(_to_binary|_to_list)|binary_(part|to_atom|to_existing_atom|to_float|to_integer|to_list|to_term)|bit(_size|string_to_list)|byte_size|ceil|check_(old_code|process_code)|date|delete_module|demonitor|disconnect_node|element|erase|error|exit|float(_to_binary|_to_list)?|floor|garbage_collect|get|group_leader|halt|integer(_to_binary|to_list)|iolist_(size|to_binary)|is_(alive|atom|binary|bitstring|boolean|float|function|integer|list|map|map_key|number|pid|port|process_alive|record|reference|tuple|length)|link|list_to_(atom|binary|bitstring|existing_atom|float|integer|pid|port|ref|tuple)|load_module|make_ref|map_(get|size)|max|min|module_loaded|monitor(_node)?|nodes?|now|open_port|pid_to_list|port(_close|command|connect|control|to_list)|pre_loaded|process(_flag|_info|es)|purge_module|put|register(ed)?|round|self|setelement|size|spawn(_link|_monitor|_opt|_binary)?|statistics|trunc|tuple_(size|to_list)|unlink|unregister|whereis)\\b" # See: http://erlang.org/doc/reference_manual/data_types.html#atom - symbol: start: "'" end: "'" skip: "\\\\." rules: [] # - constant.specialChar: "%." # - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" # - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "%." - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - comment: start: "\\(\\*" end: "\\*\\)" rules: - todo: "(TODO|FIXME|WONTFIX|NOTE|HACK):?"micro-2.0.9/runtime/syntax/fish.yaml000066400000000000000000000037741405030104300174620ustar00rootroot00000000000000filetype: fish detect: filename: "\\.fish$" header: "^#!.*/(env +)?fish( |$)" rules: # Numbers - constant: "\\b[0-9]+\\b" # Conditionals and control flow - statement: "\\b(and|begin|break|case|continue|else|end|for|function|if|in|not|or|return|select|shift|switch|while)\\b" - special: "(\\{|\\}|\\(|\\)|\\;|\\]|\\[|`|\\\\|\\$|<|>|^|!|=|&|\\|)" # Fish commands - type: "\\b(bg|bind|block|breakpoint|builtin|cd|count|command|commandline|complete|dirh|dirs|echo|emit|eval|exec|exit|fg|fish|fish_config|fish_ident|fish_pager|fish_prompt|fish_right_prompt|fish_update_completions|fishd|funced|funcsave|functions|help|history|jobs|math|mimedb|nextd|open|popd|prevd|psub|pushd|pwd|random|read|set|set_color|source|status|string|trap|type|ulimit|umask|vared)\\b" # Common linux commands - type: "\\b((g|ig)?awk|bash|dash|find|\\w{0,4}grep|kill|killall|\\w{0,4}less|make|pkill|sed|sh|tar)\\b" # Coreutils commands - type: "\\b(base64|basename|cat|chcon|chgrp|chmod|chown|chroot|cksum|comm|cp|csplit|cut|date|dd|df|dir|dircolors|dirname|du|env|expand|expr|factor|false|fmt|fold|head|hostid|id|install|join|link|ln|logname|ls|md5sum|mkdir|mkfifo|mknod|mktemp|mv|nice|nl|nohup|nproc|numfmt|od|paste|pathchk|pinky|pr|printenv|printf|ptx|pwd|readlink|realpath|rm|rmdir|runcon|seq|(sha1|sha224|sha256|sha384|sha512)sum|shred|shuf|sleep|sort|split|stat|stdbuf|stty|sum|sync|tac|tail|tee|test|time|timeout|touch|tr|true|truncate|tsort|tty|uname|unexpand|uniq|unlink|users|vdir|wc|who|whoami|yes)\\b" # Conditional flags - statement: "--[a-z-]+" - statement: "\\ -[a-z]+" - identifier: "(?i)\\$\\{?[0-9A-Z_!@#$*?-]+\\}?" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: [] - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/forth.yaml000066400000000000000000000014771405030104300176510ustar00rootroot00000000000000filetype: forth detect: filename: "\\.(forth|4th|fs|fs8|ft|fth|frt)$" rules: - identifier: "\\b[A-Za-z_0-9-]*\\b" - statement: "\\b(?i:(if|else|then|do|loop|case|endcase|of|endof|begin|while|repeat|until|again|unloop|leave|exit|done|next|\\?do|\\+do|\\-do|\\+loop|\\-loop|\\?leave))\\b" - statement: "(^:|;$)" - type: "\\b(?i:(variable|constant|cells))\\b" - special: "\\B[?.]\\B" #for some reason, \b and \B are inverted for symbols - constant.number: "\\b[0-9]+\\b" - constant.string: start: "\\b([Ss.]\" )" end: "\"" rules: [] - comment: start: "\\(" end: "\\)" rules: - todo: "(TODO|NOTE|XXX|FIXME):?" - comment: start: "\\\\" end: "$" rules: - todo: "(TODO|NOTE|XXX|FIXME):?" micro-2.0.9/runtime/syntax/fortran.yaml000066400000000000000000000053001405030104300201670ustar00rootroot00000000000000filetype: fortran detect: filename: "\\.([Ff]|[Ff]90|[Ff]95|[Ff][Oo][Rr])$" rules: - type: "(?i)\\b(action|advance|all|allocatable|allocated|any|apostrophe)\\b" - type: "(?i)\\b(append|asis|assign|assignment|associated|character|common)\\b" - type: "(?i)\\b(complex|data|default|delim|dimension|double precision)\\b" - type: "(?i)\\b(elemental|epsilon|external|file|fmt|form|format|huge)\\b" - type: "(?i)\\b(implicit|include|index|inquire|integer|intent|interface)\\b" - type: "(?i)\\b(intrinsic|iostat|kind|logical|module|none|null|only)\\\\b" - type: "(?i)\\b(operator|optional|pack|parameter|pointer|position|private)\\b" - type: "(?i)\\b(program|public|real|recl|recursive|selected_int_kind)\\b" - type: "(?i)\\b(selected_real_kind|subroutine|status)\\b" - constant: "(?i)\\b(abs|achar|adjustl|adjustr|allocate|bit_size|call|char)\\b" - constant: "(?i)\\b(close|contains|count|cpu_time|cshift|date_and_time)\\b" - constant: "(?i)\\b(deallocate|digits|dot_product|eor|eoshift|function|iachar)\\b" - constant: "(?i)\\b(iand|ibclr|ibits|ibset|ichar|ieor|iolength|ior|ishft|ishftc)\\b" - constant: "(?i)\\b(lbound|len|len_trim|matmul|maxexponent|maxloc|maxval|merge)\\b" - constant: "(?i)\\b(minexponent|minloc|minval|mvbits|namelist|nearest|nullify)\\b" - constant: "(?i)\\b(open|pad|present|print|product|pure|quote|radix)\\b" - constant: "(?i)\\b(random_number|random_seed|range|read|readwrite|replace)\\b" - constant: "(?i)\\b(reshape|rewind|save|scan|sequence|shape|sign|size|spacing)\\b" - constant: "(?i)\\b(spread|sum|system_clock|target|transfer|transpose|trim)\\b" - constant: "(?i)\\b(ubound|unpack|verify|write|tiny|type|use|yes)\\b" - statement: "(?i)\\b(.and.|case|do|else|else?if|else?where|end|end?do|end?if)\\b" - statement: "(?i)\\b(end?select|.eqv.|forall|if|lge|lgt|lle|llt|.neqv.|.not.)\\b" - statement: "(?i)\\b(.or.|repeat|select case|then|where|while)\\b" - special: "(?i)\\b(continue|cycle|exit|go?to|result|return)\\b" #Operator Color - symbol.operator: "[.:;,+*|=!\\%]|/|-|&" #Parenthetical Color - symbol.bracket: "[(){}]|\\[|\\]" # Add preprocessor commands. - preproc: "^[[:space:]]*#[[:space:]]*(define|include|(un|ifn?)def|endif|el(if|se)|if|warning|error)" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "!" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/fsharp.yaml000066400000000000000000000033351405030104300200050ustar00rootroot00000000000000filetype: fsharp detect: filename: "\\.fs?$" rules: - identifier: "\\b[A-Z][0-9a-z_]{2,}\\b" #declarations - statement: "\\b(let|val|method|in|and|rec|private|virtual|constraint)\\b" #structure items - type: "\\b(type|open|class|module|exception|external)\\b" #patterns - statement: "\\b(fun|function|functor|match|try|with)\\b" #patterns-modifiers - statement: "\\b(as|when|of)\\b" #conditions - statement: "\\b(if|then|else)\\b" #blocs - type: "\\b(begin|end|object|struct|sig|for|while|do|done|to|downto)\\b" #constantes - constant.bool: "\\b(true|false)\\b" #modules/classes - special: "\\b(include|inherit|initializer)\\b" #expr modifiers - special: "\\b(new|ref|mutable|lazy|assert|raise)\\b" #keywords which don't exist in ocaml - type: "\\b(base|delegate|downcast|extern|finally|fixed|global|inline|interface|internal|let!|member|namespace|null|override|private|public)\\b" - type: "\\b(return|return!|select|static|upcast|use|use!|void|yield|yield!)\\b" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "%." - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "%." - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - comment: start: "\\(\\*" end: "\\*\\)" rules: [] micro-2.0.9/runtime/syntax/gdscript.yaml000066400000000000000000000044531405030104300203430ustar00rootroot00000000000000filetype: gdscript detect: filename: "\\.gd$" rules: # Built-in constants - constant: "\\b(INF|NAN|PI|TAU)\\b" - constant.bool: "\\b(null|true|false)\\b" # Built-in functions - identifier: "\\b(abs|acos|asin|atan|atan2|ceil|clamp|convert|cos|cosh|db2linear|decimals|deg2rad|ease|exp|float|floor|fmod|fposmod|hash|int|isinf|isnan|lerp|linear2db|load|log|max|min|nearest_po2|pow|preload|print|printerr|printraw|prints|printt|rad2deg|rand_range|rand_seed|randomize|randi|randf|range|round|seed|sin|slerp|sqrt|str|str2var|tan|typeof|var2str|weakref)\\b" # Built-in node names - identifier: "\\b(AnimationPlayer|AnimationTreePlayer|Button|Control|Engine|HTTPClient|HTTPRequest|Input|InputEvent|MainLoop|Node|Node2D|OS|SceneTree|Spatial|StreamPeer|PacketPeer|PacketPeerUDP|Timer|Tween)\\b" # Types - type: "\\b(AABB|Array|Basis|Color|Dictionary|NodePath|Object|Plane|PoolByteArray|PoolColorArray|PoolIntArray|PoolRealArray|PoolVector2Array|PoolVector3Array|Quat|Rect2|RID|String|Transform|Transform2D|Vector2|Vector3)\\b" # Definitions - identifier: "func [a-zA-Z_0-9]+" # Keywords - statement: "\\b(and|as|assert|break|breakpoint|class|const|continue|elif|else|enum|export|extends|for|func|if|in|is|map|master|mastersync|match|not|onready|or|pass|remote|remotesync|return|self|setget|slave|slavesync|signal|sync|tool|var|while|yield)\\b" # Operators - statement: "[.:;,+*|=!\\%@]|<|>|/|-|&" # Parentheses - statement: "[(){}]|\\[|\\]" # Numbers - constant: "\\b[0-9]+\\b" - constant.number: "\\b([0-9]+|0x[0-9a-fA-F]*)\\b|'.'" - comment: start: "\"\"\"" end: "\"\"\"" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "'''" end: "'''" rules: - todo: "(TODO|XXX|FIXME):?" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/gemini.yaml000066400000000000000000000006041405030104300177660ustar00rootroot00000000000000filetype: gemini detect: filename: "\\.(gmi|gemini)$" rules: # link lines - constant: "^=>[[:space:]].*" # preformatted text lines - special: start: "^```" end: "^```" rules: [] # heading lines - special: "^#{1,3}.*" # unordered list items - identifier: "^\\*[[:space:]]" # quote lines - statement: "^>.*" micro-2.0.9/runtime/syntax/gentoo-ebuild.yaml000066400000000000000000000042321405030104300212540ustar00rootroot00000000000000filetype: ebuild detect: filename: "\\.e(build|class)$" rules: # All the standard portage functions - identifier: "^src_(unpack|compile|install|test)|^pkg_(config|nofetch|setup|(pre|post)(inst|rm))" # Highlight bash related syntax - statement: "\\b(case|do|done|elif|else|esac|exit|fi|for|function|if|in|local|read|return|select|shift|then|time|until|while|continue|break)\\b" - statement: "(\\{|\\}|\\(|\\)|\\;|\\]|\\[|`|\\\\|\\$|<|>|!|=|&|\\|)" - statement: "-(e|d|f|r|g|u|w|x|L)\\b" - statement: "-(eq|ne|gt|lt|ge|le|s|n|z)\\b" # Highlight variables ... official portage ones in red, all others in bright red - preproc: "\\$\\{?[a-zA-Z_0-9]+\\}?" - special: "\\b(ARCH|HOMEPAGE|DESCRIPTION|IUSE|SRC_URI|LICENSE|SLOT|KEYWORDS|FILESDIR|WORKDIR|(P|R)?DEPEND|PROVIDE|DISTDIR|RESTRICT|USERLAND)\\b" - special: "\\b(S|D|T|PV|PF|P|PN|A)\\b|\\bC(XX)?FLAGS\\b|\\bLDFLAGS\\b|\\bC(HOST|TARGET|BUILD)\\b" # Highlight portage commands - identifier: "\\buse(_(with|enable))?\\b [!a-zA-Z0-9_+ -]*|inherit.*" - statement: "\\be(begin|end|conf|install|make|warn|infon?|error|log|patch|new(group|user))\\b" - statement: "\\bdie\\b|\\buse(_(with|enable))?\\b|\\binherit\\b|\\bhas\\b|\\b(has|best)_version\\b|\\bunpack\\b" - statement: "\\b(do|new)(ins|s?bin|doc|lib(\\.so|\\.a)|man|info|exe|initd|confd|envd|pam|menu|icon)\\b" - statement: "\\bdo(python|sed|dir|hard|sym|html|jar|mo)\\b|\\bkeepdir\\b" - statement: "prepall(docs|info|man|strip)|prep(info|lib|lib\\.(so|a)|man|strip)" - statement: "\\b(doc|ins|exe)into\\b|\\bf(owners|perms)\\b|\\b(exe|ins|dir)opts\\b" # Highlight common commands used in ebuilds - type: "\\bmake\\b|\\b(cat|cd|chmod|chown|cp|echo|env|export|grep|let|ln|mkdir|mv|rm|sed|set|tar|touch|unset)\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/gentoo-etc-portage.yaml000066400000000000000000000012661405030104300222260ustar00rootroot00000000000000filetype: etc-portage detect: filename: "\\.(keywords|mask|unmask|use)(/.+)?$" rules: # Use flags: - constant.bool.false: "[[:space:]]+\\+?[a-zA-Z0-9_-]+" - constant.bool.true: "[[:space:]]+-[a-zA-Z0-9_-]+" # Likely version numbers: - special: "-[[:digit:]].*([[:space:]]|$)" # Accepted arches: - identifier.class: "[~-]?\\b(alpha|amd64|arm|hppa|ia64|mips|ppc|ppc64|s390|sh|sparc|x86|x86-fbsd)\\b" - identifier.class: "[[:space:]][~-]?\\*" # Categories: - statement: "^[[:space:]]*.*/" # Masking regulators: - symbol: "^[[:space:]]*(=|~|<|<=|=<|>|>=|=>)" # Comments: - comment: start: "#" end: "$" rules: [] micro-2.0.9/runtime/syntax/git-commit.yaml000066400000000000000000000022771405030104300205770ustar00rootroot00000000000000filetype: git-commit detect: filename: "^(.*[\\/])?(COMMIT_EDITMSG|TAG_EDITMSG)$" rules: # File changes - type.keyword: "#[[:space:]](deleted|modified|new file|renamed):[[:space:]].*" - type.keyword: "#[[:space:]]deleted:" - type.keyword: "#[[:space:]]modified:" - type.keyword: "#[[:space:]]new file:" - type.keyword: "#[[:space:]]renamed:" - type.keyword: "^#[[:space:]]Changes.*[:]" - type.keyword: "^#[[:space:]]Your branch and '[^']+" - type.keyword: "^#[[:space:]]Your branch and '" - type.keyword: "^#[[:space:]]On branch [^ ]+" - type.keyword: "^#[[:space:]]On branch" # Color keywords for closing issues (such as on Github) - type.keyword: "\\b(?i)((fix(es|ed)?|close(s|d)?) #[0-9]+)\\b" # Comments - comment.line: start: "^#" end: "$" rules: [] # Diffs (i.e. git commit --verbose) - default: start: "^diff --git" # Diff output puts a space before file contents on each line so this # should never match valid diff output and extend highlighting to the # end of the file end: "^ENDOFFILE" limit-group: "magenta" rules: - include: "patch" micro-2.0.9/runtime/syntax/git-config.yaml000066400000000000000000000005141405030104300205440ustar00rootroot00000000000000filetype: git-config detect: filename: "git(config|modules)$|\\.git/config$" rules: - constant: "\\<(true|false)\\>" - type.keyword: "^[[:space:]]*[^=]*=" - constant: "^[[:space:]]*\\[.*\\]$" - constant: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - comment: start: "#" end: "$" rules: [] micro-2.0.9/runtime/syntax/git-rebase-todo.yaml000066400000000000000000000007171405030104300215100ustar00rootroot00000000000000filetype: git-rebase-todo detect: filename: "^(.*[\\/])?git\\-rebase\\-todo$" rules: # Rebase commands - statement: "^(p(ick)?|r(eword)?|e(dit)?|s(quash)?|f(ixup)?|x|exec|d(rop)?)\\b" # Commit IDs - identifier: "\\b([0-9a-f]{7,40})\\b" # Color keywords for Github (and others) - type.keyword: "\\b(?i)((fix(es|ed)?|close(s|d)?) #[0-9]+)\\b" # Comments - comment.line: start: "^#" end: "$" rules: [] micro-2.0.9/runtime/syntax/glsl.yaml000066400000000000000000000017361405030104300174660ustar00rootroot00000000000000filetype: glsl detect: filename: "\\.(frag|vert|fp|vp|glsl)$" rules: - identifier: "[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[()]" - type: "\\b(void|bool|bvec2|bvec3|bvec4|int|ivec2|ivec3|ivec4|float|vec2|vec3|vec4|mat2|mat3|mat4|struct|sampler1D|sampler2D|sampler3D|samplerCUBE|sampler1DShadow|sampler2DShadow)\\b" - identifier: "\\bgl_(DepthRangeParameters|PointParameters|MaterialParameters|LightSourceParameters|LightModelParameters|LightModelProducts|LightProducts|FogParameters)\\b" - statement: "\\b(const|attribute|varying|uniform|in|out|inout|if|else|return|discard|while|for|do)\\b" - statement: "\\b(break|continue)\\b" - constant.bool: "\\b(true|false)\\b" - symbol.operator: "[-+/*=<>?:!~%&|^]" - constant.number: "\\b([0-9]+|0x[0-9a-fA-F]*)\\b" - comment: start: "//" end: "$" rules: - todo: "TODO:?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "TODO:?" micro-2.0.9/runtime/syntax/go.yaml000066400000000000000000000034461405030104300171320ustar00rootroot00000000000000filetype: go detect: filename: "\\.go$" rules: # Conditionals and control flow - special: "\\b(break|case|continue|default|go|goto|range|return|println|fallthrough)\\b" - statement: "\\b(else|for|if|switch|select)\\b" - preproc: "\\b(package|import|const|var|type|struct|func|defer|iota|make|new|copy|len|cap|panic|append|close|delete|print|recover)\\b" - symbol.operator: "[-+/*=<>!~%&|^]|:=" # Types - symbol: "(,|\\.)" - type: "\\b(u?int(8|16|32|64)?|float(32|64)|complex(64|128))\\b" - type: "\\b(uintptr|byte|rune|string|interface|bool|map|chan|error)\\b" - type.keyword: "\\b(struct)\\b" - constant.bool: "\\b(true|false|nil)\\b" # Brackets - symbol.brackets: "(\\{|\\})" - symbol.brackets: "(\\(|\\))" - symbol.brackets: "(\\[|\\])" # Numbers and strings - constant.number: "\\b([0-9]+|0x[0-9a-fA-F]*)\\b|'.'" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "%." - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - error: "..+" - constant.specialChar: "%." - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - constant.string: start: "`" end: "`" rules: [] - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/godoc.yaml000066400000000000000000000004061405030104300176110ustar00rootroot00000000000000# godoc # example: go doc -all | micro filetype: godoc detect: filename: "\\.godoc$" header: package.*import rules: - preproc: "^[^ ].*" - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/golo.yaml000066400000000000000000000100161405030104300174540ustar00rootroot00000000000000filetype: golo detect: filename: "\\.golo$" rules: - type: "\\b(function|fun|)\\b" - type: "\\b(struct|DynamicObject|union|AdapterFabric|Adapter|DynamicVariable|Observable)\\b" - type: "\\b(list|set|array|vector|tuple|map)\\b" - type: "\\b(Ok|Error|Empty|None|Some|Option|Result|Result.ok|Result.fail|Result.error|Result.empty|Optional.empty|Optional.of)\\b" - identifier.class: "\\b(augment|pimp)\\b" - identifier.class: "\\b(interfaces|implements|extends|overrides|maker|newInstance)\\b" - identifier.class: "\\b(isEmpty|isNone|isPresent|isSome|iterator|flattened|toList|flatMap|`and|orElseGet|`or|toResult|apply|either)\\b" - identifier.class: "\\b(result|option|trying|raising|nullify|catching)\\b" - identifier.class: "\\b(promise|setFuture|failedFuture|all|any)\\b" - identifier.class: "\\b(initialize|initializeWithinThread|start|future|fallbackTo|onSet|onFail|cancel|enqueue)\\b" - identifier.class: "\\b(println|print|raise|readln|readPassword|secureReadPassword|requireNotNull|require|newTypedArray|range|reversedRange|mapEntry|asInterfaceInstance|asFunctionalInterface|isClosure|fileToText|textToFile|fileExists|currentDir|sleep|uuid|isArray|arrayTypeOf|charValue|intValue|longValue|doubleValue|floatValue|removeByIndex|box)\\b" - identifier.class: "\\b(likelySupported|reset|bold|underscore|blink|reverse_video|concealed|fg_black|fg_red|fg_green|fg_yellow|fg_blue|fg_magenta|fg_cyan|fg_white|bg_black|bg_red|bg_green|bg_yellow|bg_blue|bg_magenta|bg_cyan|bg_white|cursor_position|cursor_save_position|cursor_restore_position|cursor_up|cursor_down|cursor_forward|cursor_backward|erase_display|erase_line)\\b" - identifier.class: "\\b(emptyList|cons|lazyList|fromIter|generator|repeat|iterate)\\b" - identifier.class: "\\b(asLazyList|foldl|foldr|take|takeWhile|drop|dropWhile|subList)\\b" - identifier.class: "\\b(import)\\b" - identifier.class: "\\b(module)\\b" - identifier.class: "\\b(JSON)\\b" - identifier.class: "\\b(stringify|parse|toJSON|toDynamicObject|updateFromJSON)\\b" - identifier.class: "\\b(newInstance|define|getKey|getValue|properties|fallback)\\b" - identifier.class: "\\b(times|upTo|downTo)\\b" - identifier.class: "\\b(format|toInt|toInteger|toDouble|toFloat|toLong)\\b" - identifier.class: "\\b(head|tail|isEmpty|reduce|each|count|exists)\\b" - identifier.class: "\\b(newWithSameType|destruct|append|add|addIfAbsent|prepend|insert|last|unmodifiableView|find|filter|map|join|reverse|reversed|order|ordered|removeAt|include|exclude|remove|delete|has|contains|getOrElse|toArray)\\b" - identifier.class: "\\b(add|addTo|succ|pred|mul|neg|sub|rsub|div|rdiv|mod|rmod|pow|rpow|str|lt|gt|eq|ne|ge|le|`and|`or|`not|xor|even|odd|contains|isEmpty|`is|`isnt|`oftype|`orIfNull|fst|snd|getitem|setitem|getter|id|const|False|True|Null|curry|uncurry|unary|spreader|varargs|swapArgs|swapCurry|swapCouple|swap|invokeWith|pipe|compose|io|andThen|until|recur|cond)\\b" - identifier.class: "\\b(toUpperCase|equals|startsWith)\\b" - statement: "\\b(if|else|then|when|case|match|otherwise)\\b" - special: "\\b(with|break|continue|return)\\b" - error: "\\b(try|catch|finally|throw)\\b" - identifier: "\\b(super|this|let|var|local)\\b" - symbol.brackets: "[(){}]|\\[|\\]" - statement: "\\b(for|while|foreach|in)\\b" - constant: "\\b(and|in|is|not|or|isnt|orIfNull)\\b" - constant.bool: "\\b(true|false)\\b" - constant: "\\b(null|undefined)\\b" - symbol.operator: "[\\-+/*=<>!~%&|^]|:=" - constant.number: "\\b([0-9]+|0x[0-9a-fA-F]*)\\b|'.'" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "----" end: "----" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/graphql.yaml000066400000000000000000000022321405030104300201530ustar00rootroot00000000000000filetype: graphql detect: filename: "\\.(gql|graphql)$" rules: - type: "\\b(?:(query|mutation|subscription|type|input|scalar|fragment|schema|union|on|extends?))\\b" # scalar types - statement: "\\b(ID|Int|Float|Boolean|String|Datetime|Null)\\b" # introspection types - statement: "(__\\w+)" # parameters - statement: "((\\w+)(?:\\:([\\s]*)?)(?:\\$))" # directive locations - statement: "\\b(QUERY|MUTATION|SUBSCRIPTION|FIELD|FRAGMENT_DEFINITION|FRAGMENT_SPREAD|INLINE_FRAGMENT|SCHEMA|SCALAR|OBJECT|FIELD_DEFINITION|ARGUMENT_DEFINITION|INTERFACE|UNION|ENUM|ENUM_VALUE|INPUT_OBJECT|INPUT_FIELD_DEFINITION)\\b" # directives - constant: "(@\\w+)" # root types - constant: "\\b(Query|Mutation|Subscription|Schema|Root)\\b" # variables - special: "(\\$\\w+)" # required symbol - special: "(!)" - symbol: "(:|=|\\||\\(|\\)|\\{|\\}|\\[|\\])" - constant.bool: "\\b(true|false)\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "#" end: "$" rules: []micro-2.0.9/runtime/syntax/groff.yaml000066400000000000000000000014011405030104300176150ustar00rootroot00000000000000filetype: groff detect: filename: "\\.m[ems]$|\\.rof|\\.tmac$|^tmac." rules: - statement: "^\\.(ds|nr) [^[[:space:]]]*" - constant.specialChar: "\\\\." - constant.specialChar: "\\\\f.|\\\\f\\(..|\\\\s(\\+|\\-)?[0-9]" - constant: "(\\\\|\\\\\\\\)n(.|\\(..)" - constant: start: "(\\\\|\\\\\\\\)n\\[" end: "]" rules: [] - type: "^\\.[[:space:]]*[^[[:space:]]]*" - comment: "^\\.\\\\\".*$" - constant.string: "(\\\\|\\\\\\\\)\\*(.|\\(..)" - constant.string: start: "(\\\\|\\\\\\\\)\\*\\[" end: "]" rules: [] - constant.specialChar: "\\\\\\(.." - constant.specialChar: start: "\\\\\\[" end: "]" rules: [] - identifier.macro: "\\\\\\\\\\$[1-9]" micro-2.0.9/runtime/syntax/groovy.yaml000077500000000000000000000100501405030104300200420ustar00rootroot00000000000000filetype: groovy detect: filename: "\\.(groovy|gy|gvy|gsh|gradle)$" header: "^#!.*/(env +)?groovy *$" rules: # And the style guide for constants is CONSTANT_CASE - identifier: "\\b[A-Z_$]+\\b" # The style guide for JVM languages is PascalCase for classes and interfaces - identifier.class: "\\b[A-Z][a-zA-Z0-9$]+\\b" # Primitive types - type: "\\b(byte|short|int|long|float|double|char|boolean|void)\\b" # Type-related keywords - type.keyword: "\\b(private|public|protected|static|final|var|def)\\b" # Keywords - statement: "\\b(for|while|do|if|else|switch|case|default|try|catch|finally)\\b" - statement: "\\b(break|continue|return|throw|assert)\\b" - statement: "\\b(package|import|class|interface|trait|enum|extends|implements|throws)\\b" - statement: "\\b(this|super)\\b" # Unsused, but reserved keywords - statement: "\\b(goto|const)\\b" # Operators and punctuation - symbol.operator: "[-+*/%=<>^~&|!?:;,.@]|\\b(in|is|as|instanceof|new)\\b" - symbol.brackets: "[(){}]|\\[|\\]" # Decimal integer literal - constant.number: "(?i)\\b[1-9]([_0-9]*[0-9])?[GLIDF]?\\b" # Binary integer literal - constant.number: "(?i)\\b0b[01]([01_]*[01])?[GLIDF]?\\b" # Octal integer literal - constant.number: "(?i)\\b0[0-7]([0-7_]*[0-7])?[GLIDF]?\\b" # Hexadecimal integer literal - constant.number: "(?i)\\b0x[0-9a-f]([0-9a-f_]*[0-9a-f])?[GLIDF]?\\b" # Floating-point literal - constant.number: "(?i)\\b[0-9]([0-9_]*[0-9])?([.][0-9]([0-9_]*[0-9])?)?(e[+-]?[0-9]([0-9_]*[0-9])?)?[DF]?\\b" - constant.bool: "\\b(true|false|null)\\b" # Annotations - identifier: "@[A-Za-z_$][A-Za-z0-9_$]*\\b" # Single-quoted strings - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\([\"'bfnrst\\x24\\\\]|u[a-fA-F0-9]{4})" # This also matches the Triple-double-quoted strings region, but I can't really find a way to mitigate it, all the while still matching "" as a string correctly # Also, nesting ${} are never going to be matched correctly with just regex either, so highlighting will break if one is to nest interpolation # These two problems combined mean slight mistakes in highlighing that the user is just going to have to deal with # Double-quoted strings - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\([\"'bfnrst\\x24\\\\]|u[a-fA-F0-9]{4})" - identifier.var: "\\x24[\\w\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE]+([.][a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE]+)*" - identifier: "\\x24[{].*[}]" # Triple-double-quoted strings - constant.string: start: "\"\"\"" end: "\"\"\"" skip: "\\\\." rules: - constant.specialChar: "\\\\([\"'bfnrst\\x24\\\\]|u[a-fA-F0-9]{4})" - identifier.var: "\\x24[\\w\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE]+([.][a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE]+)*" - identifier: start: "[$][{]" end: "[}]" rules: [] # Triple-single-quoted strings - constant.string: start: "'''" end: "'''" skip: "\\\\." rules: - constant.specialChar: "\\\\([\"'bfnrst\\x24\\\\]|u[a-fA-F0-9]{4})" # Slashy strings are left out, because they match in unwanted places pretty much all the time # Dollar-slashy strings - constant.string: start: "[$]/" end: "/[$]" rules: [] # Single-line comments - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" # Multiline comments - comment: start: "/[*]" end: "[*]/" rules: - todo: "(TODO|XXX|FIXME):?" # Groovydoc comments - comment: start: "/[*][*]@?" end: "[*]/" rules: [] micro-2.0.9/runtime/syntax/haml.yaml000066400000000000000000000011441405030104300174370ustar00rootroot00000000000000filetype: haml detect: filename: "\\.haml$" rules: - symbol: "-|=" - default: "->|=>" - constant: "([ ]|^)%[0-9A-Za-z_]+>" - special: ":[0-9A-Za-z_]+>" - type: "\\.[A-Za-z_]+>" - constant.string: "\"([^\"]|(\\\\\"))*\"|%[QW]?\\{[^}]*\\}|%[QW]?\\([^)]*\\)|%[QW]?<[^>]*>|%[QW]?\\$[^$]*\\$|%[QW]?\\^[^^]*\\^|%[QW]?![^!]*!" - constant.string: "'([^']|(\\\\'))*'|%[qw]\\{[^}]*\\}|%[qw]\\([^)]*\\)|%[qw]<[^>]*>|%[qw]\\[[^]]*\\]|%[qw]\\$[^$]*\\$|%[qw]\\^[^^]*\\^|%[qw]![^!]*!" - identifier: "#\\{[^}]*\\}" - identifier.var: "(@|@@)[0-9A-Z_a-z]+" - comment: "#[^{].*$|#$" micro-2.0.9/runtime/syntax/haskell.yaml000066400000000000000000000023601405030104300201420ustar00rootroot00000000000000filetype: haskell detect: filename: "\\.hs$" rules: # Keywords - statement: "\\b(as|case|of|class|data|default|deriving|do|forall|foreign|hiding|if|then|else|import|infix|infixl|infixr|instance|let|in|mdo|module|newtype|qualified|type|where)\\b" # Various symbols - symbol: "(\\||@|!|:|_|~|=|\\\\|;|\\(\\)|,|\\[|\\]|\\{|\\})" # Operators - symbol.operator: "(==|/=|&&|\\|\\||<|>|<=|>=)" # Various symbols - special: "(->|<-)" - symbol: "\\.|\\$" # Data constructors - constant.bool: "\\b(True|False)\\b" - constant: "\\b(Nothing|Just|Left|Right|LT|EQ|GT)\\b" # Data classes - identifier.class: "\\b(Read|Show|Enum|Eq|Ord|Data|Bounded|Typeable|Num|Real|Fractional|Integral|RealFrac|Floating|RealFloat|Monad|MonadPlus|Functor|Foldable|Additive|Zip)[ ]" # Strings - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." # Comments - comment: start: "--" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "\\{-" end: "-\\}" rules: - todo: "(TODO|XXX|FIXME):?" - identifier.micro: "undefined" micro-2.0.9/runtime/syntax/html.yaml000066400000000000000000000066501405030104300174710ustar00rootroot00000000000000filetype: html detect: filename: "\\.htm[l]?$" rules: # Doctype is case-insensitive - preproc: "" # Opening tag - symbol.tag: start: "<(a|abbr|acronym|address|applet|area|article|aside|audio|b|base|bdi|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h[1-6]|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|section|select|small|source|span|strike|strong|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|track|tt|u|ul|var|video|wbr)\\b" end: ">" rules: - identifier: "\\b(placeholder|style|alt|bgcolor|height|href|id|(aria|data)\\-.+|label|longdesc|name|on(click|focus|load|mouseover)|size|span|src|target|type|value|width|class|charset|content|rel|integrity|crossorigin|for|onsubmit|lang|role)\\b" - special: "\\b(required)\\b" # Match double-quote strings - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string.url: "((ftp(s)?|http(s)?|git|chrome)://[^\\s]+)" # Match single-quote strings - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string.url: "((ftp(s)?|http(s)?|git|chrome)://[^\\s]+)" # Highlight the equals and any colon between words - symbol: "\\b(=|:\\b)" # Closing tag - symbol.tag: start: "" rules: # Anything in the closing tag is an error - error: "." # Reserved entities like a   and Ī - special: "(([a-zA-Z]&#[0-9]+|&[a-zA-Z]+|&#[a-zA-Z0-9]+);)" # TODO: Add `limit-rules` to both the `default` rules below once it's implemented into Micro - default: start: "" end: "" limit-group: symbol.tag rules: - include: "javascript" - default: start: "" end: "" limit-group: symbol.tag rules: - include: "css" # This weird empty comment thing is technically valid - comment: "" - comment.block: start: "" rules: - todo: "(FIXME|NOTE|TODO):?" # While technically not a "true" error, these are recommended to not be used inside a comment - error: "(\\-\\-|>)" micro-2.0.9/runtime/syntax/html4.yaml000066400000000000000000000026211405030104300175470ustar00rootroot00000000000000filetype: html4 detect: filename: "\\.htm[l]?4$" header: "" rules: - error: "<[^!].*?>" - symbol.tag: "(?i)<[/]?(a(bbr|cronym|ddress|pplet|rea|rticle|side|udio)?|b(ase(font)?|d(i|o)|ig|lockquote|r)?|ca(nvas|ption)|center|cite|co(de|l|lgroup)|d(ata(list)?|d|el|etails|fn|ialog|ir|l|t)|em(bed)?|fieldset|fig(caption|ure)|font|form|(i)?frame|frameset|h[1-6]|hr|i|img|in(put|s)|kbd|keygen|label|legend|li(nk)?|ma(in|p|rk)|menu(item)?|met(a|er)|nav|no(frames|script)|o(l|pt(group|ion)|utput)|p(aram|icture|re|rogress)?|q|r(p|t|uby)|s(trike)?|samp|se(ction|lect)|small|source|span|strong|su(b|p|mmary)|textarea|time|track|u(l)?|var|video|wbr)( .*|>)*?>" - symbol.tag.extended: "(?i)<[/]?(body|div|html|head(er)?|footer|title|table|t(body|d|h(ead)?|r|foot))( .*)*?>" - preproc: "(?i)<[/]?(script|style)( .*)*?>" - special: "&[^;[[:space:]]]*;" - symbol: "[:=]" - identifier: "(alt|bgcolor|height|href|id|label|longdesc|name|on(click|focus|load|mouseover)|size|span|src|style|target|type|value|width)=" - constant.string: "\"[^\"]*\"" - constant.number: "(?i)#[0-9A-F]{6,6}" - default: start: ">" end: "<" rules: [] - symbol.tag: "<|>" - constant.string.url: "(ftp(s)?|http(s)?|git|chrome)://[^ ]+" - comment: "" - preproc: "" micro-2.0.9/runtime/syntax/html5.yaml000066400000000000000000000024331405030104300175510ustar00rootroot00000000000000filetype: html5 detect: filename: "\\.htm[l]?5$" header: "" rules: - error: "<[^!].*?>" - symbol.tag: "(?i)<[/]?(a|a(bbr|ddress|rea|rticle|side|udio)|b|b(ase|d(i|o)|lockquote|r|utton)|ca(nvas|ption)|center|cite|co(de|l|lgroup)|d(ata|atalist|d|el|etails|fn|ialog|l|t)|em|embed|fieldset|fig(caption|ure)|form|iframe|h[1-6]|hr|i|img|in(put|s)|kbd|keygen|label|legend|li|link|ma(in|p|rk)|menu|menuitem|met(a|er)|nav|noscript|o(bject|l|pt(group|ion)|utput)|p|param|picture|pre|progress|q|r(p|t|uby)|s|samp|se(ction|lect)|small|source|span|strong|su(b|p|mmary)|textarea|time|track|u|ul|var|video|wbr)( .*)*?>" - symbol.tag.extended: "(?i)<[/]?(body|div|html|head(er)?|footer|title|table|t(body|d|h(ead)?|r|foot))( .*)*?>" - preproc: "(?i)<[/]?(script|style)( .*)*?>" - special: "&[^;[[:space:]]]*;" - symbol: "[:=]" - identifier: "(alt|bgcolor|height|href|id|label|longdesc|name|on(click|focus|load|mouseover)|size|span|src|style|target|type|value|width)=" - constant.string: "\"[^\"]*\"" - constant.number: "(?i)#[0-9A-F]{6,6}" - default: start: ">" end: "<" rules: [] - symbol.tag: "<|>" - constant.string.url: "(ftp(s)?|http(s)?|git|chrome)://[^ ]+" - comment: "" - preproc: "" micro-2.0.9/runtime/syntax/ini.yaml000066400000000000000000000011551405030104300172770ustar00rootroot00000000000000filetype: ini detect: filename: "\\.(ini|desktop|lfl|override|tscn|tres)$|(mimeapps\\.list|pinforc|setup\\.cfg|project\\.godot)$|weechat/.+\\.conf$" rules: - constant.bool.true: "\\btrue\\b" - constant.bool.false: "\\bfalse\\b" - identifier: "^[[:space:]]*[^=]*=" - special: "^[[:space:]]*\\[.*\\]$" - statement: "[=;]" - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: ";" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/inputrc.yaml000066400000000000000000000006201405030104300202000ustar00rootroot00000000000000filetype: inputrc detect: filename: "inputrc$" rules: - constant.bool.false: "\\b(off|none)\\b" - constant.bool.true: "\\bon\\b" - preproc: "\\bset|\\$include\\b" - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - constant.specialChar: "\\\\.?" - comment: "(^|[[:space:]])#([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/java.yaml000066400000000000000000000017311405030104300174410ustar00rootroot00000000000000filetype: java detect: filename: "\\.java$" rules: - type: "\\b(boolean|byte|char|double|float|int|long|new|short|this|transient|void)\\b" - statement: "\\b(break|case|catch|continue|default|do|else|finally|for|if|return|switch|throw|try|while)\\b" - type: "\\b(abstract|class|extends|final|implements|import|instanceof|interface|native|package|private|protected|public|static|strictfp|super|synchronized|throws|volatile)\\b" - constant: "\\b(true|false|null)\\b" - constant.number: "\\b[0-9]+\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - preproc: "..+" - constant.specialChar: "\\\\." - comment: start: "//" end: "$" rules: [] - comment: start: "/\\*" end: "\\*/" rules: [] micro-2.0.9/runtime/syntax/javascript.yaml000066400000000000000000000056131405030104300206710ustar00rootroot00000000000000filetype: javascript detect: filename: "(\\.js$|\\.es[5678]?$|\\.mjs$)" header: "^#!.*/(env +)?node( |$)" rules: - constant.number: "\\b[-+]?([1-9][0-9]*|0[0-7]*|0x[0-9a-fA-F]+)([uU][lL]?|[lL][uU]?)?\\b" - constant.number: "\\b[-+]?([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)([EePp][+-]?[0-9]+)?[fFlL]?" - constant.number: "\\b[-+]?([0-9]+[EePp][+-]?[0-9]+)[fFlL]?" #- identifier: "[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[(]" # ^ this is not correct usage of the identifier color - symbol.brackets: "(\\{|\\})" - symbol.brackets: "(\\(|\\))" - symbol.brackets: "(\\[|\\])" - symbol.brackets: "(\\{|\\})" - symbol.brackets: "(\\(|\\))" - symbol.brackets: "(\\[|\\])" - symbol.operator: "([-+/*=<>!~%?:&|]|[.]{3})" - statement: "\\b(async|await|break|case|catch|const|continue|debugger|default)\\b" - statement: "\\b(delete|do|else|export|finally|for|function\\*?|class|extends)\\b" - statement: "\\b(get|if|import|from|in|of|instanceof|let|new|reject|resolve|return)\\b" - statement: "\\b(set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\\b" # reserved but unassigned - error: "\\b(enum|implements|interface|package|private|protected|public)" - constant: "\\b(globalThis|Infinity|null|undefined|NaN)\\b" - constant: "\\b(null|undefined|NaN)\\b" - constant: "\\b(true|false)\\b" - type: "\\b(Array|Boolean|Date|Enumerator|Error|Function|Generator|Map|Math)\\b" - type: "\\b(Number|Object|Promise|Proxy|Reflect|RegExp|Set|String|Symbol|WeakMap|WeakSet)\\b" - type: "\\b(BigInt64Array|BigUint64Array|Float32Array|Float64Array|Int16Array)\\b" # - constant: "/[^*]([^/]|(\\\\/))*[^\\\\]/[gim]*" - constant: "\\\\[0-7][0-7]?[0-7]?|\\\\x[0-9a-fA-F]+|\\\\[bfnrt'\"\\?\\\\]" - comment: "^#!.*/(env +)?node( |$)" - identifier: "\\b(alert|decodeURI|decodeURIComponent|document|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape|uneval|window)\\b" - identifier: "\\b(Intl|WebAssembly)\\b" - identifier: "\\b(Arguments)\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "`" end: "`" rules: - constant.specialChar: "\\\\." - identifier: "\\x24\\{.*?\\}" - constant.bool: "\\b(true|false)\\b" - constant.bool.false: "\\b(false)\\b" - constant.bool.true: "\\b(true)\\b" - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME)" - comment: start: "/\\*" end: "\\*/" rules: # function documentation - identifier: "\\s\\*\\s.*" - todo: "(TODO|XXX|FIXME)" micro-2.0.9/runtime/syntax/jinja2.yaml000066400000000000000000000021071405030104300176730ustar00rootroot00000000000000filetype: jinja2 rules: - include: "html" - special: "({{|}}|{%-?|-?%})" - default: start: "({%-?|{{)" end: "(-?%}|}})" limit-group: special rules: - include: "python" - statement: "\\b(ignore missing|with(out)? context|block|call|endblock|endcall|endfilter|endfor|endmacro|endraw|endset|extends|filter|for|include|macro|raw|recursive|scoped|set)\\b" - identifier.builtinfunc: "\\b(attr|batch|capitalize|center|count|d|default|dictsort|e|escape|filesizeformat|first|forceescape|groupby|indent|join|last|length|lower|pprint|random|reject|rejectattr|replace|reverse|safe|select|selectattr|striptags|title|tojson|trim|truncate|unique|upper|urlencode|urlize|wordcount|wordwrap|xmlattr)\\b" - identifier.builtintest: "\\b(callable|defined|divisibleby|eq|equalto|escaped|even|ge|gt|iterable|le|lower|lt|mapping|ne|none|number|odd|sameas|sequence|string|undefined|upper)\\b" - identifier.defaultglobal: "\\b(lipsum|cycler|joiner|namespace)\\b" - comment: start: "{#" end: "#}" rules: [] micro-2.0.9/runtime/syntax/json.yaml000066400000000000000000000014761405030104300174770ustar00rootroot00000000000000filetype: json detect: filename: "\\.json$" header: "^\\{$" rules: - constant.number: "\\b[-+]?([1-9][0-9]*|0[0-7]*|0x[0-9a-fA-F]+)([uU][lL]?|[lL][uU]?)?\\b" - constant.number: "\\b[-+]?([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)([EePp][+-]?[0-9]+)?[fFlL]?" - constant.number: "\\b[-+]?([0-9]+[EePp][+-]?[0-9]+)[fFlL]?" - constant: "\\b(null)\\b" - constant: "\\b(true|false)\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - statement: "\\\"(\\\\\"|[^\"])*\\\"[[:space:]]*:\" \"'(\\'|[^'])*'[[:space:]]*:" - constant: "\\\\u[0-9a-fA-F]{4}|\\\\[bfnrt'\"/\\\\]" micro-2.0.9/runtime/syntax/jsonnet.yaml000066400000000000000000000063111405030104300201770ustar00rootroot00000000000000filename: jsonnet detect: filename: "\\.jsonnet$" # Spec: https://jsonnet.org/ref/spec.html rules: # built-in objects # FIXME: $ won't match - constant: "\\b(self|\\$|super)\\b" # boolean constants - constant.bool: "\\b(null|true|false)\\b" # the standard library - identifier: "\\bstd\\.(extVar|thisFile|type|length|objectHas|objectFields|objectHasAll|objectFieldsAll|prune|mapWithKey|abs|sign|max|min|pow|exp|log|exponent|mantissa|floor|ceil|sqrt|sin|cos|tan|asin|acos|atan|mod|assertEqual|toString|codepoint|char|substr|findSubstr|startsWith|endsWith|split|splitLimit|strReplace|asciiUpper|asciiLower|stringChars|format|escapeStringDollars|escapeStringPython|parseInt|parseOctal|parseHex|parseJson|encodeUTF8|decodeUTF8|manifestIni|manifestPython|manifestPythonVars|manifestJsonEx|manifestYamlDoc|manifestYamlStream|manifestXmlJsonml|makeArray|count|find|map|mapWithIndex|filterMap|filter|foldl|foldr|range|join|lines|flattenArrays|sort|uniq|set|setInter|setUnion|setDiff|setMember|base64|base64DecodeBytes|base64Decode|md5|mergePatch|trace)\\b" # unquoted object keys - type: "[_a-zA-Z][_a-zA-Z0-9]*\\s*:" # object key separator - statement: ":" # keywords - statement: "\\b(assert|else|error|for|function|if|import|importstr|in|local|tailstrict|then)\\b" # operators - symbol.operator: "([.;,+*|=!\\%]|<|>|/|-|&)" # parentheses - symbol.brackets: "([(){}]|\\[|\\])" # numbers - constant.number: "\\b(0|([1-9][0-9]*))(\\.[0-9]+)?([eE][\\+-]?[0-9]+)?\\b" # double-quoted string - constant.string: start: "\"" end: "\"" skip: "\\\\\"" rules: - constant.specialChar: "\\\\u[0-9a-fA-F]{4}|\\\\[bfnrt'\"/\\\\]" # single-quoted string - constant.string: start: "'" end: "'" skip: "\\\\'" rules: - constant.specialChar: "\\\\u[0-9a-fA-F]{4}|\\\\[bfnrt'\"/\\\\]" # double-quoted verbatim string - constant.string: start: "@\"" end: "\"" skip: "\\\\\"" rules: - constant.specialChar: "\\\\\"" # single-quoted verbatim string - constant.string: start: "@'" end: "'" skip: "\\\\'" rules: - constant.specialChar: "\\\\'" # block string - constant.string: # FIXME: # This isn't quite right. # The spec says this: # beginning with |||, followed by optional whitespace and a new-line. # The next non-blank line must be prefixed with some non-zero length # whitespace W. The block ends at the first subsequent line that does # not begin with W, and it is an error if this line does not contain # some optional whitespace followed by |||. # We need to match ^(\s+) on the first non-blank line after ||| # Then we need to skip ^\1.*$ start: "\\|\\|\\| *$" end: "^ *\\|\\|\\|" rules: [] # multi-line comment - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" # single-line comment - comment: start: "#|(//)" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/julia.yaml000066400000000000000000000025551405030104300176310ustar00rootroot00000000000000filetype: julia detect: filename: "\\.jl$" header: "^#!.*/(env +)?julia( |$)" rules: # built-in objects - constant.bool: "\\b(true|false)\\b" - constant: "\\b(nothing|missing)\\b" # built-in attributes - constant: "__[A-Za-z0-9_]+__" # definitions - identifier: "[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[(]" # keywords - statement: "\\b(baremodule|begin|break|catch|const|continue|do|else|elseif|end|export|finally|for|function|global|if|import|let|local|macro|module|quote|return|struct|try|using|while)\\b" - statement: "\\b(abstract\\s+type|primitive\\s+type|mutable\\s+struct)\\b" # decorators - identifier.macro: "@[A-Za-z0-9_]+" # operators - symbol.operator: "[-+*/|=%<>&~^]|\\b(in|isa|where)\\b" # parentheses - symbol.brackets: "([(){}]|\\[|\\])" # numbers - constant.number: "\\b([0-9]+(_[0-9]+)*|0x[0-9a-fA-F]+(_[0-9a-fA-F]+)*|0b[01]+(_[01]+)*|0o[0-7]+(_[0-7]+)*|Inf(16|32|64)?|NaN(16|32|64)?)\\b" - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^']){1}'" - constant.string: start: "\"\"\"" end: "\"\"\"" rules: [] - constant.string: start: "\"[^\"]|\"$" end: "\"" rules: [] - comment: start: "#[^=]|#$" end: "$" rules: [] - comment: start: "#=" end: "=#" rules: [] micro-2.0.9/runtime/syntax/keymap.yaml000066400000000000000000000011441405030104300200040ustar00rootroot00000000000000filetype: keymap detect: filename: "\\.(k|key)?map$|Xmodmap$" rules: - statement: "\\b(add|clear|compose|keycode|keymaps|keysym|remove|string)\\b" - statement: "\\b(control|alt|shift)\\b" - constant.number: "\\b[0-9]+\\b" - special: "=" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "^!" end: "$" rules: [] micro-2.0.9/runtime/syntax/kickstart.yaml000066400000000000000000000011721405030104300205160ustar00rootroot00000000000000filetype: kickstart detect: filename: "\\.ks$|\\.kickstart$" rules: - special: "%[a-z]+" - statement: "^[[:space:]]*(install|cdrom|text|graphical|volgroup|logvol|reboot|timezone|lang|keyboard|authconfig|firstboot|rootpw|user|firewall|selinux|repo|part|partition|clearpart|bootloader)" - constant: "--(name|mirrorlist|baseurl|utc)(=|\\>)" - statement: "\\$(releasever|basearch)\\>" - brightblack: "^@[A-Za-z][A-Za-z-]*" - brightred: "^-@[a-zA-Z0-9*-]+" - red: "^-[a-zA-Z0-9*-]+" - comment: "(^|[[:space:]])#([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/kotlin.yaml000066400000000000000000000034721405030104300200240ustar00rootroot00000000000000filetype: kotlin detect: filename: "\\.kts?$" rules: # Operators - symbol.operator: ([.:;,+*|=!?\\%]|<|>|/|-|&) # Statements Keywords - statement: \b(as|by|class|constructor|companion|const|fun|import|in|infix|interface|inline|is|out|operator|package|return|suspend|super|this|when|val|var)\b - statement.properties: \b(get|set)\b - statement.control: \b(break|continue|else|do|if|try|catch|finally|for|while)\b - statement.class: \b(abstract|annotation|data|enum|final|open|sealed)\b - statement.member: \b(override|lateinit|init)\b - statement.access: \b(internal|private|protected|public)\b - statement.parameter: \b(crossinline|noinline|reified|vararg)\b # Expression and types - type: \b(dynamic|object|throw|typealias)\b # Meta - statement.meta: \@(\bfile|delegate|field|get|property|receiver|set|setparam|param|)\b # Constant - constant: \b(true|false|null) - constant.number: ([0-9]+) # Storage Types - type.storage: \b(Byte|UByte|Char|Double|Float|Int|UInt|Long|ULong|Short|UShort|Boolean|Unit|Nothing)\b # Collections - type.collections: \b(Array)\b # String - constant.string: start: \" end: \" skip: \\. rules: - constant.specialChar: (\\0|\\\\|\\t|\\n|\\r|\\"|\\') - constant.unicode: \\u\{[[:xdigit:]]+} # Shebang Line - comment.shebang: ^(#!).* # Line Comment - comment.line: "//.*" # Block Comment - comment.block: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" # Doc Block Comment - comment.block: start: "/\\*\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" # Todo - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/ledger.yaml000066400000000000000000000007471405030104300177700ustar00rootroot00000000000000filetype: ledger detect: filename: "(^|\\.|/)(ledger|ldgr|beancount|bnct)$" rules: - special: "^([0-9]{4}(/|-)[0-9]{2}(/|-)[0-9]{2}|[=~]) .*" - constant: "^[0-9]{4}(/|-)[0-9]{2}(/|-)[0-9]{2}" - statement: "^~ .*" - identifier.var: "^= .*" - identifier: "^[[:space:]]+(![[:space:]]+)?\\(?[A-Za-z ]+(:[A-Za-z ]+)*\\)?" - identifier: "^[[:space:]]+(![[:space:]]+)?\\(?[A-Za-z_\\-]+(:[A-Za-z_\\-]+)*\\)?" - symbol: "[*!]" - comment: "^[[:space:]]*;.*" micro-2.0.9/runtime/syntax/lfe.yaml000066400000000000000000000010341405030104300172620ustar00rootroot00000000000000filetype: lfe detect: filename: "lfe$|\\.lfe$" rules: - symbol.brackets: "\\(|\\)" - type: "defun|define-syntax|define|defmacro|defmodule|export" - constant: "\\ [A-Za-z][A-Za-z0-9_-]+\\ " - symbol.operator: "\\(([\\-+*/<>]|<=|>=)|'" - constant.number: "\\b[0-9]+\\b" - constant.string: "\\\"(\\\\.|[^\"])*\\\"" - special: "['|`][A-Za-z][A-Za-z0-9_\\-]+" - constant.specialChar: "\\\\.?" - comment: "(^|[[:space:]]);.*" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/lilypond.yaml000066400000000000000000000073731405030104300203620ustar00rootroot00000000000000filetype: lilypond detect: filename: "\\.ly$|\\.ily$|\\.lly$" rules: - constant.number: "\\d+" - identifier: "\\b(staff|spacing|signature|routine|notes|handler|corrected|beams|arpeggios|Volta_engraver|Voice|Vertical_align_engraver|Vaticana_ligature_engraver|VaticanaVoice|VaticanaStaff|Tweak_engraver|Tuplet_engraver|Trill_spanner_engraver|Timing_translator|Time_signature_performer|Time_signature_engraver|Tie_performer|Tie_engraver|Text_spanner_engraver|Text_engraver|Tempo_performer|Tab_tie_follow_engraver|Tab_staff_symbol_engraver|Tab_note_heads_engraver|TabVoice|TabStaff|System_start_delimiter_engraver|Stem_engraver|Stanza_number_engraver|Stanza_number_align_engraver|Staff_symbol_engraver|Staff_performer|Staff_collecting_engraver|StaffGroup|Staff|Spanner_break_forbid_engraver|Span_bar_stub_engraver|Span_bar_engraver|Span_arpeggio_engraver|Spacing_engraver|Slur_performer|Slur_engraver|Slash_repeat_engraver|Separating_line_group_engraver|Script_row_engraver|Script_engraver|Script_column_engraver|Score|Rhythmic_column_engraver|RhythmicStaff|Rest_engraver|Rest_collision_engraver|Repeat_tie_engraver|Repeat_acknowledge_engraver|Pure_from_neighbor_engraver|Pitched_trill_engraver|Pitch_squash_engraver|Piano_pedal_performer|Piano_pedal_engraver|Piano_pedal_align_engraver|PianoStaff|Phrasing_slur_engraver|PetrucciVoice|PetrucciStaff|Percent_repeat_engraver|Part_combine_engraver|Parenthesis_engraver|Paper_column_engraver|Output_property_engraver|Ottava_spanner_engraver|OneStaff|NullVoice|Note_spacing_engraver|Note_performer|Note_name_engraver|Note_heads_engraver|Note_head_line_engraver|NoteName\\|NoteHead|New_fingering_engraver|Multi_measure_rest_engraver|Midi_control_function_performer|Metronome_mark_engraver|Mensural_ligature_engraver|MensuralVoice|MensuralStaff|Mark_engraver|Lyrics|Lyric_performer|Lyric_engraver|Ligature_bracket_engraver|Ledger_line_engraver|Laissez_vibrer_engraver|Kievan_ligature_engraver|KievanVoice|KievanStaff|Key_performer|Key_engraver|Keep_alive_together_engraver|Instrument_switch_engraver|Instrument_name_engraver|Hyphen_engraver|Grob_pq_engraver|GregorianTranscriptionVoice|GregorianTranscriptionStaff|GrandStaff|Grace_spacing_engraver|Grace_engraver|Grace_beam_engraver|Grace_auto_beam_engraver|Global|Glissando_engraver|Fretboard_engraver|FretBoards|Forbid_line_break_engraver|Footnote_engraver|Font_size_engraver|Fingering_engraver|Fingering_column_engraver|Figured_bass_position_engraver|Figured_bass_engraver|FiguredBass|Extender_engraver|Episema_engraver|Dynamics|Dynamic_performer|Dynamic_engraver|Dynamic_align_engraver|Drum_notes_engraver|Drum_note_performer|DrumVoice|DrumStaff|Double_percent_repeat_engraver|Dots_engraver|Dot_column_engraver|Devnull|Default_bar_line_engraver|Custos_engraver|Cue_clef_engraver|CueVoice|Control_track_performer|Concurrent_hairpin_engraver|Collision_engraver|Cluster_spanner_engraver|Clef_engraver|Chord_tremolo_engraver|Chord_name_engraver|ChordNames|ChoirStaff|Breathing_sign_engraver|Break_align_engraver|Bend_engraver|Beam_performer|Beam_engraver|Beam_collision_engraver|Bar_number_engraver|Bar_engraver|Axis_group_engraver|Auto_beam_engraver|Arpeggio_engraver|Accidental_engraver|Score)\\b" - statement: "[-_^]?\\\\[-A-Za-z_]+" - preproc: "\\b(((gisis|gis|geses|ges|g|fisis|fis|feses|fes|f|eisis|eis|eeses|ees|e|disis|dis|deses|des|d|cisis|cis|ceses|ces|c|bisis|bis|beses|bes|b|aisis|ais|aeses|aes|a)[,']*[?!]?)|s|r|R|q)(128|64|32|16|8|4|2|1|\\\\breve|\\\\longa|\\\\maxima)?([^\\\\\\w]|_|\\b)" - special: "[(){}<>]|\\[|\\]" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "%\\{" end: "%\\}" rules: [] - comment: start: "%" end: "$" rules: [] micro-2.0.9/runtime/syntax/lisp.yaml000066400000000000000000000007601405030104300174700ustar00rootroot00000000000000filetype: lisp detect: filename: "(emacs|zile)$|\\.(el|li?sp|scm|ss)$" rules: - default: "\\([a-z-]+" - symbol: "\\(([\\-+*/<>]|<=|>=)|'" - constant.number: "\\b[0-9]+b>" - special: "\\bnil\\b" - preproc: "\\b[tT]b>" - constant.string: "\\\"(\\\\.|[^\"])*\\\"" - constant.specialChar: "'[A-Za-z][A-Za-z0-9_-]+" - constant.specialChar: "\\\\.?" - comment: "(^|[[:space:]]);.*" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/lua.yaml000066400000000000000000000104031405030104300172750ustar00rootroot00000000000000filetype: lua detect: filename: "\\.lua$" rules: - statement: "\\b(do|end|while|break|repeat|until|if|elseif|then|else|for|in|function|local|return)\\b" - statement: "\\b(not|and|or)\\b" - statement: "\\b(debug|string|math|table|io|coroutine|os|utf8|bit32)\\b\\." - statement: "\\b(_ENV|_G|_VERSION|assert|collectgarbage|dofile|error|getfenv|getmetatable|ipairs|load|loadfile|module|next|pairs|pcall|print|rawequal|rawget|rawlen|rawset|require|select|setfenv|setmetatable|tonumber|tostring|type|unpack|xpcall)\\s*\\(" - identifier: "io\\.\\b(close|flush|input|lines|open|output|popen|read|tmpfile|type|write)\\b" - identifier: "math\\.\\b(abs|acos|asin|atan2|atan|ceil|cosh|cos|deg|exp|floor|fmod|frexp|huge|ldexp|log10|log|max|maxinteger|min|mininteger|modf|pi|pow|rad|random|randomseed|sinh|sqrt|tan|tointeger|type|ult)\\b" - identifier: "os\\.\\b(clock|date|difftime|execute|exit|getenv|remove|rename|setlocale|time|tmpname)\\b" - identifier: "package\\.\\b(config|cpath|loaded|loadlib|path|preload|seeall|searchers|searchpath)\\b" - identifier: "string\\.\\b(byte|char|dump|find|format|gmatch|gsub|len|lower|match|pack|packsize|rep|reverse|sub|unpack|upper)\\b" - identifier: "table\\.\\b(concat|insert|maxn|move|pack|remove|sort|unpack)\\b" - identifier: "utf8\\.\\b(char|charpattern|codes|codepoint|len|offset)\\b" - identifier: "coroutine\\.\\b(create|isyieldable|resume|running|status|wrap|yield)\\b" - identifier: "debug\\.\\b(debug|getfenv|gethook|getinfo|getlocal|getmetatable|getregistry|getupvalue|getuservalue|setfenv|sethook|setlocal|setmetatable|setupvalue|setuservalue|traceback|upvalueid|upvaluejoin)\\b" - identifier: "bit32\\.\\b(arshift|band|bnot|bor|btest|bxor|extract|replace|lrotate|lshift|rrotate|rshift)\\b" - identifier: "\\:\\b(close|flush|lines|read|seek|setvbuf|write|byte|char|dump|find|format|gmatch|gsub|len|lower|match|pack|packsize|rep|reverse|sub|unpack|upper)\\b" - identifier: "\\b(self|arg)\\b" - constant: "\\b(false|nil|true)\\b" - statement: "(\\b(dofile|require|include)|%q|%!|%Q|%r|%x)\\b" - constant.number: "\\b([0-9]+)\\b" - symbol.brackets: "[(){}\\[\\]]" - symbol: "(\\*|//|/|%|\\+|-|\\^|>|>=|<|<=|~=|=|[\\.]{2,3}|#)" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "\\[\\[" end: "\\]\\]" rules: - constant.specialChar: "\\\\." # support first few lengths of "long brackets" explicitly # brackets longer than that will give false positives - constant.string: start: "\\[=\\[" end: "\\]=\\]" rules: - constant.specialChar: "\\\\." - constant.string: start: "\\[==\\[" end: "\\]==\\]" rules: - constant.specialChar: "\\\\." - constant.string: start: "\\[===\\[" end: "\\]===\\]" rules: - constant.specialChar: "\\\\." - constant.string: start: "\\[====+\\[" end: "\\]====+\\]" rules: - constant.specialChar: "\\\\." - special: "\\\\[0-7][0-7][0-7]|\\\\x[0-9a-fA-F][0-9a-fA-F]|\\\\[abefnrs]|(\\\\c|\\\\C-|\\\\M-|\\\\M-\\\\C-)." - comment.block: start: "\\-\\-\\[\\[" end: "\\]\\]" rules: - todo: "(TODO|NOTE|FIXME):?" # support long brackets, same as with multiline strings - comment.block: start: "\\-\\-\\[=\\[" end: "\\]=\\]" rules: - todo: "(TODO|NOTE|FIXME):?" - comment.block: start: "\\-\\-\\[==\\[" end: "\\]==\\]" rules: - todo: "(TODO|NOTE|FIXME):?" - comment.block: start: "\\-\\-\\[===\\[" end: "\\]===\\]" rules: - todo: "(TODO|NOTE|FIXME):?" - comment.block: start: "\\-\\-\\[====+\\[" end: "\\]====+\\]" rules: - todo: "(TODO|NOTE|FIXME):?" # this has to go after block comment or block comment does not work - comment: start: "\\-\\-" end: "$" rules: - todo: "(TODO|NOTE|FIXME):?" micro-2.0.9/runtime/syntax/mail.yaml000066400000000000000000000011271405030104300174410ustar00rootroot00000000000000filetype: mail detect: filename: "(.*/mutt-.*|\\.eml)$" header: "^From .* \\d+:\\d+:\\d+ \\d+" rules: - type: "^From .*" - identifier: "^[^[:space:]]+:" - preproc: "^List-(Id|Archive|Subscribe|Unsubscribe|Post|Help):" - constant: "^(To|From):" - constant.string: start: "^Subject:.*" end: "$" rules: - constant.specialChar: "\\\\." - statement: "?" - default: start: "^\\n\\n" end: ".*" rules: [] - comment: start: "^>.*" end: "$" rules: [] micro-2.0.9/runtime/syntax/make_headers.go000066400000000000000000000024771405030104300206030ustar00rootroot00000000000000package main import ( "bytes" "fmt" "io/ioutil" "os" "strings" "time" yaml "gopkg.in/yaml.v2" ) type HeaderYaml struct { FileType string `yaml:"filetype"` Detect struct { FNameRgx string `yaml:"filename"` HeaderRgx string `yaml:"header"` } `yaml:"detect"` } type Header struct { FileType string FNameRgx string HeaderRgx string } func main() { if len(os.Args) > 1 { os.Chdir(os.Args[1]) } files, _ := ioutil.ReadDir(".") for _, f := range files { fname := f.Name() if strings.HasSuffix(fname, ".yaml") { convert(fname[:len(fname)-5]) } } } func convert(name string) { filename := name + ".yaml" var hdr HeaderYaml source, err := ioutil.ReadFile(filename) if err != nil { panic(err) } err = yaml.Unmarshal(source, &hdr) if err != nil { panic(err) } encode(name, hdr) } func encode(name string, c HeaderYaml) { f, _ := os.Create(name + ".hdr") f.WriteString(c.FileType + "\n") f.WriteString(c.Detect.FNameRgx + "\n") f.WriteString(c.Detect.HeaderRgx + "\n") f.Close() } func decode(name string) Header { start := time.Now() data, _ := ioutil.ReadFile(name + ".hdr") strs := bytes.Split(data, []byte{'\n'}) var hdr Header hdr.FileType = string(strs[0]) hdr.FNameRgx = string(strs[1]) hdr.HeaderRgx = string(strs[2]) fmt.Printf("took %v\n", time.Since(start)) return hdr } micro-2.0.9/runtime/syntax/makefile.yaml000066400000000000000000000024161405030104300202760ustar00rootroot00000000000000filetype: makefile detect: filename: "([Mm]akefile|\\.ma?k)$" header: "^#!.*/(env +)?[bg]?make( |$)" rules: - preproc: "\\<(ifeq|ifdef|ifneq|ifndef|else|endif)\\>" - statement: "^(export|include|override)\\>" - symbol.operator: "^[^:= ]+:" - symbol.operator: "([=,%]|\\+=|\\?=|:=|&&|\\|\\|)" - statement: "\\$\\((abspath|addprefix|addsuffix|and|basename|call|dir)[[:space:]]" - statement: "\\$\\((error|eval|filter|filter-out|findstring|firstword)[[:space:]]" - statement: "\\$\\((flavor|foreach|if|info|join|lastword|notdir|or)[[:space:]]" - statement: "\\$\\((origin|patsubst|realpath|shell|sort|strip|suffix)[[:space:]]" - statement: "\\$\\((value|warning|wildcard|word|wordlist|words)[[:space:]]" - identifier: "^.+:" - identifier: "[()$]" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - identifier: "\\$+(\\{[^} ]+\\}|\\([^) ]+\\))" - identifier: "\\$[@^<*?%|+]|\\$\\([@^<*?%+-][DF]\\)" - identifier: "\\$\\$|\\\\.?" - comment: start: "#" end: "$" rules: [] micro-2.0.9/runtime/syntax/man.yaml000066400000000000000000000004171405030104300172730ustar00rootroot00000000000000filetype: man detect: filename: "\\.[1-9]x?$" rules: - green: "\\.(S|T)H.*$" - brightgreen: "\\.(S|T)H|\\.TP" - brightred: "\\.(BR?|I[PR]?).*$" - brightblue: "\\.(BR?|I[PR]?|PP)" - brightwhite: "\\\\f[BIPR]" - yellow: "\\.(br|DS|RS|RE|PD)" micro-2.0.9/runtime/syntax/markdown.yaml000066400000000000000000000020311405030104300203340ustar00rootroot00000000000000filetype: markdown detect: filename: "\\.(md|mkd|mkdn|markdown)$" rules: # Tables (Github extension) - type: ".*[ :]\\|[ :].*" # quotes - statement: "^>.*" # Emphasis - type: "(^|[[:space:]])(_[^ ][^_]*_|\\*[^ ][^*]*\\*)" # Strong emphasis - type: "(^|[[:space:]])(__[^ ][^_]*__|\\*\\*[^ ][^*]*\\*\\*)" # strike-through - type: "(^|[[:space:]])~~[^ ][^~]*~~" # horizontal rules - special: "^(---+|===+|___+|\\*\\*\\*+)\\s*$" # headlines - special: "^#{1,6}.*" # lists - identifier: "^[[:space:]]*[\\*+-] |^[[:space:]]*[0-9]+\\. " # misc - preproc: "(\\(([CcRr]|[Tt][Mm])\\)|\\.{3}|(^|[[:space:]])\\-\\-($|[[:space:]]))" # links - constant: "\\[[^]]+\\]" - constant: "\\[([^][]|\\[[^]]*\\])*\\]\\([^)]+\\)" # images - underlined: "!\\[[^][]*\\](\\([^)]+\\)|\\[[^]]+\\])" # urls - underlined: "https?://[^ )>]+" - special: "^```$" - special: start: "`" end: "`" rules: [] micro-2.0.9/runtime/syntax/mc.yaml000066400000000000000000000006301405030104300171140ustar00rootroot00000000000000# sendmail config files filetype: mc detect: filename: "\\.mc$" rules: - statement: "^(divert|VERSIONID|OSTYPE|DOMAIN|FEATURE|define)" - statement: "^(DAEMON_OPTIONS|MAILER)" - comment: start: "#" end: "$" rules: [] - comment: start: "dnl" end: "$" rules: [] - constant.string: start: "`" end: "'" rules: [] micro-2.0.9/runtime/syntax/micro.yaml000066400000000000000000000024321405030104300176300ustar00rootroot00000000000000filetype: micro detect: filename: "\\.(micro)$" rules: - statement: "\\b(syntax|color(-link)?)\\b" - statement: "\\b(start=|end=)\\b" # Simple one-liners - identifier: "\\b(default|number|statement|underlined|error|todo|statusline|indent-char|cursor\\-line|color\\-column|ignore|divider|tabbar)\\b" # Separate identifiers to keep "complex" regex clean - identifier: "\\b(special(Char)?)\\b" - identifier: "\\b((current\\-)?line\\-number)\\b" - identifier: "\\b(gutter\\-(info|error|warning){1})\\b" - identifier: "\\b(comment(\\.bright)?)\\b" - identifier: "\\b(symbol(\\.(brackets|operator|tag))?)\\b" - identifier: "\\b(identifier(\\.(class|macro|var))?)\\b" - identifier: "\\b(constant(\\.(bool(\\.(true|false){1})?|number|specialChar|string(\\.url)?){1})?)\\b" - identifier: "\\b(preproc(\\.shebang)?)\\b" - identifier: "\\b(type(\\.keyword)?)\\b" - constant.number: "\\b(|h|A|0x)+[0-9]+(|h|A)+\\b" - constant.number: "\\b0x[0-9 a-f A-F]+\\b" - comment: start: "#" end: "$" rules: - todo: "(FIXME|TODO|NOTE):?" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.number: "#[0-9 A-F a-f]+" micro-2.0.9/runtime/syntax/mpdconf.yaml000066400000000000000000000007321405030104300201460ustar00rootroot00000000000000filetype: mpd detect: filename: "mpd\\.conf$" rules: - statement: "\\b(user|group|bind_to_address|host|port|plugin|name|type)\\b" - statement: "\\b((music|playlist)_directory|(db|log|state|pid|sticker)_file)\\b" - special: "^(input|audio_output|decoder)[[:space:]]*\\{|\\}" - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - comment: "(^|[[:space:]])#([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/nanorc.yaml000066400000000000000000000021211405030104300177720ustar00rootroot00000000000000filetype: nanorc detect: filename: "\\.?nanorc$" rules: - default: "(?i)^[[:space:]]*((un)?set|include|syntax|i?color).*$" - type: "(?i)^[[:space:]]*(set|unset)[[:space:]]+(autoindent|backup|backupdir|backwards|boldtext|brackets|casesensitive|const|cut|fill|historylog|matchbrackets|morespace|mouse|multibuffer|noconvert|nofollow|nohelp|nonewlines|nowrap|operatingdir|preserve|punct)\\>|^[[:space:]]*(set|unset)[[:space:]]+(quickblank|quotestr|rebinddelete|rebindkeypad|regexp|smarthome|smooth|speller|suspend|tabsize|tabstospaces|tempfile|undo|view|whitespace|wordbounds)\\b" - preproc: "(?i)^[[:space:]]*(set|unset|include|syntax|header)\\b" - constant.bool.true: "(?i)(set)\\b" - constant.bool.false: "(?i)(unset)\\b" - identifier: "(?i)^[[:space:]]*(i)?color[[:space:]]*(bright)?(white|black|red|blue|green|yellow|magenta|cyan)?(,(white|black|red|blue|green|yellow|magenta|cyan))?\\b" - special: "(?i)^[[:space:]]*(i)?color\\b|\\b(start|end)=" - constant.string: "\"(\\\\.|[^\"])*\"" - comment: "^[[:space:]]*#.*$" - comment.bright: "^[[:space:]]*##.*$" micro-2.0.9/runtime/syntax/nginx.yaml000066400000000000000000000116341405030104300176460ustar00rootroot00000000000000filetype: nginx detect: filename: "nginx.*\\.conf$|\\.nginx$" header: "^(server|upstream)[a-z ]*\\{$" rules: - preproc: "\\b(events|server|http|location|upstream)[[:space:]]*\\{" - statement: "(^|[[:space:]{;])(access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth_basic|auth_basic_user_file|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|default_type|deny|directio|directio_alignment|disable_symlinks|empty_gif|env|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|log_format|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|port_in_redirect|postpone_output|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_header|proxy_read_timeout|proxy_redirect|proxy_send_timeout|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|working_directory|xml_entities|xslt_stylesheet|xslt_types)([[:space:]]|$)" - constant.bool.true: "\\b(on)\\b" - constant.bool.false: "\\b(off)\\b" - identifier: "\\$[A-Za-z][A-Za-z0-9_]*" - symbol: "[*]" - constant-string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - constant.string: start: "'$" end: "';$" rules: [] - comment: "(^|[[:space:]])#([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/nim.yaml000066400000000000000000000044271405030104300173100ustar00rootroot00000000000000filetype: nim detect: filename: "\\.nims?$|nim.cfg" rules: - preproc: "[\\{\\|]\\b(atom|lit|sym|ident|call|lvalue|sideeffect|nosideeffect|param|genericparam|module|type|let|var|const|result|proc|method|iterator|converter|macro|template|field|enumfield|forvar|label|nk[a-zA-Z]+|alias|noalias)\\b[\\}\\|]" - statement: "\\b(addr|and|as|asm|atomic|bind|block|break|case|cast|concept|const|continue|converter|defer|discard|distinct|div|do|elif|else|end|enum|except|export|finally|for|from|func|generic|if|import|in|include|interface|is|isnot|iterator|let|macro|method|mixin|mod|nil|not|notin|object|of|or|out|proc|ptr|raise|ref|return|shl|shr|static|template|try|tuple|type|using|var|when|while|with|without|xor|yield)\\b" - statement: "\\b(deprecated|noSideEffect|constructor|destructor|override|procvar|compileTime|noReturn|acyclic|final|shallow|pure|asmNoStackFrame|error|fatal|warning|hint|line|linearScanEnd|computedGoto|unroll|immediate|checks|boundsChecks|overflowChecks|nilChecks|assertations|warnings|hints|optimization|patterns|callconv|push|pop|global|pragma|experimental|bitsize|volatile|noDecl|header|incompleteStruct|compile|link|passC|passL|emit|importc|importcpp|importobjc|codegenDecl|injectStmt|intdefine|strdefine|varargs|exportc|extern|bycopy|byref|union|packed|unchecked|dynlib|cdecl|thread|gcsafe|threadvar|guard|locks|compileTime)\\b" - symbol.operator: "[=\\+\\-\\*/<>@\\$~&%\\|!\\?\\^\\.:\\\\]+" - special: "\\{\\.|\\.\\}|\\[\\.|\\.\\]|\\(\\.|\\.\\)|;|,|`" - statement: "\\.\\." - type: "\\b(int|cint|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|float|float32|float64|bool|char|enum|string|cstring|array|openarray|seq|varargs|tuple|object|set|void|auto|cshort|range|nil|T|untyped|typedesc)\\b" - type: "'[iI](8|16|32|64)?\\b|'[uU](8|16|32|64)?\\b|'[fF](32|64|128)?\\b|'[dD]\\b" - constant.number: "\\b[0-9]+\\b" - constant.number: "\\b0[xX][0-9A-Fa-f][0-9_A-Fa-f]+\\b" - constant.number: "\\b0[ocC][0-7][0-7_]+\\b" - constant.number: "\\b0[bB][01][01_]+\\b" - constant.number: "\\b[0-9_]((\\.?)[0-9_]+)?[eE][+\\-][0-9][0-9_]+\\b" - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - comment: "[[:space:]]*#.*$" - comment: start: "\\#\\[" end: "\\]\\#" rules: [] - todo: "(TODO|FIXME|XXX):?" micro-2.0.9/runtime/syntax/objc.yaml000066400000000000000000000045271405030104300174430ustar00rootroot00000000000000filetype: objective-c detect: filename: "\\.(m|mm|h)$" rules: - type: "\\b(float|double|CGFloat|id|bool|BOOL|Boolean|char|int|short|long|sizeof|enum|void|static|const|struct|union|typedef|extern|(un)?signed|inline|Class|SEL|IMP|NS(U)?Integer)\\b" - type: "\\b((s?size)|((u_?)?int(8|16|32|64|ptr)))_t\\b" - type: "\\b[A-Z][A-Z][[:alnum:]]*\\b" - type: "\\b[A-Za-z0-9_]*_t\\b" - type: "\\bdispatch_[a-zA-Z0-9_]*_t\\b" - statement: "(__attribute__[[:space:]]*\\(\\([^)]*\\)\\)|__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__|__unused|_Nonnull|_Nullable|__block|__builtin.*)" - statement: "\\b(class|namespace|template|public|protected|private|typename|this|friend|virtual|using|mutable|volatile|register|explicit)\\b" - statement: "\\b(for|if|while|do|else|case|default|switch)\\b" - statement: "\\b(try|throw|catch|operator|new|delete)\\b" - statement: "\\b(goto|continue|break|return)\\b" - statement: "\\b(nonatomic|atomic|readonly|readwrite|strong|weak|assign)\\b" - statement: "@(encode|end|interface|implementation|class|selector|protocol|synchronized|try|catch|finally|property|optional|required|import|autoreleasepool)" - preproc: "^[[:space:]]*#[[:space:]]*(define|include|import|(un|ifn?)def|endif|el(if|se)|if|warning|error|pragma).*$" - preproc: "__[A-Z0-9_]*__" - special: "^[[:space:]]*[#|@][[:space:]]*(import|include)[[:space:]]*[\"|<].*\\/?[>|\"][[:space:]]*$" - statement: "([.:;,+*|=!\\%\\[\\]]|<|>|/|-|&)" - constant.number: "(\\b(-?)?[0-9]+\\b|\\b\\[0-9]+\\.[0-9]+\\b|\\b0x[0-9A-F]+\\b)" - constant: "(@\\[(\\\\.|[^\\]])*\\]|@\\{(\\\\.|[^\\}])*\\}|@\\((\\\\.|[^\\)])*\\))" - constant: "\\b<(\\\\.[^\\>])*\\>\\b" - constant: "\\b(nil|NULL|YES|NO|TRUE|true|FALSE|false|self)\\b" - constant: "\\bk[[:alnum]]*\\b" - constant.string: "'.'" - constant.string: start: "@\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/ocaml.yaml000066400000000000000000000027071405030104300176170ustar00rootroot00000000000000filetype: ocaml detect: filename: "\\.mli?$" rules: - identifier: "\\b[A-Z][0-9a-z_]{2,}\\b" #declarations - statement: "\\b(let|val|method|in|and|rec|private|virtual|constraint)\\b" #structure items - type: "\\b(type|open|class|module|exception|external)\\b" #patterns - statement: "\\b(fun|function|functor|match|try|with)\\b" #patterns-modifiers - statement: "\\b(as|when|of)\\b" #conditions - statement: "\\b(if|then|else)\\b" #blocs - type: "\\b(begin|end|object|struct|sig|for|while|do|done|to|downto)\\b" #constantes - constant.bool: "\\b(true|false)\\b" #modules/classes - special: "\\b(include|inherit|initializer)\\b" #expr modifiers - special: "\\b(new|ref|mutable|lazy|assert|raise)\\b" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "%." - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "%." - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - comment: start: "\\(\\*" end: "\\*\\)" rules: [] micro-2.0.9/runtime/syntax/octave.yaml000066400000000000000000000050321405030104300177770ustar00rootroot00000000000000# References # https://github.com/zyedidia/micro/blob/master/runtime/syntax/go.yaml # https://github.com/vim-scripts/octave.vim--/blob/master/syntax/octave.vim # # TODO # include only needed operators # ... highlighting # built-in function highlighting? # highlight eps/pi/e etc. as functions when followed by () # what are skip and error fields in strings? # multiline comments not working filetype: octave detect: filename: "\\.m$" rules: # Statements https://www.gnu.org/software/octave/doc/v4.0.0/Statements.html - statement: "\\b(function|endfunction|return|end|global|persistent)\\b" - statement: "\\b(if|elseif|else|endif|switch|case|otherwise|endswitch)\\b" - statement: "\\b(while|endwhile|do|until|for|endfor|parfor|endparfor|break|continue)\\b" - statement: "\\b(unwind_protect|unwind_protect_cleanup|end_unwind_protect|try|catch|end_try_catch)\\b" # Operators - symbol.operator: "[-+/*=<>!~%&|^]|:=" # Brackets - symbol.brackets: "(\\{|\\})" - symbol.brackets: "(\\(|\\))" - symbol.brackets: "(\\[|\\])" # Commas - symbol: "," # Numbers https://www.gnu.org/software/octave/doc/v4.0.1/Mathematical-Constants.html - constant.number: "\\b([0-9]+|0x[0-9a-fA-F]*)\\b|'.'" - constant.number: "\\b(pi|e|I|Inf|NaN|eps|realmax|realmin)\\b|" # Boolean - constant.bool: "\\b(true|false)\\b" # Strings https://www.gnu.org/software/octave/doc/v4.0.1/Strings.html - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "%" - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - error: "..+" - constant.specialChar: "%" - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" # Comments https://www.gnu.org/software/octave/doc/v4.2.1/Comments.html - comment: start: "%" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "%{" end: "%}" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "#{" end: "#}" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/pascal.yaml000066400000000000000000000035001405030104300177570ustar00rootroot00000000000000filetype: pascal detect: filename: "\\.pas$" rules: - type: "\\b(?i:(string|ansistring|widestring|shortstring|char|ansichar|widechar|boolean|byte|shortint|word|smallint|longword|cardinal|longint|integer|int64|single|currency|double|extended))\\b" - statement: "\\b(?i:(and|asm|array|begin|break|case|const|constructor|continue|destructor|div|do|downto|else|end|file|for|function|goto|if|implementation|in|inline|interface|label|mod|not|object|of|on|operator|or|packed|procedure|program|record|repeat|resourcestring|set|shl|shr|then|to|type|unit|until|uses|var|while|with|xor))\\b" - statement: "\\b(?i:(as|class|dispose|except|exit|exports|finalization|finally|inherited|initialization|is|library|new|on|out|property|raise|self|threadvar|try))\\b" - statement: "\\b(?i:(absolute|abstract|alias|assembler|cdecl|cppdecl|default|export|external|forward|generic|index|local|name|nostackframe|oldfpccall|override|pascal|private|protected|public|published|read|register|reintroduce|safecall|softfloat|specialize|stdcall|virtual|write))\\b" - constant: "\\b(?i:(false|true|nil))\\b" - special: start: "asm" end: "end" rules: [] - constant.number: "\\$[0-9A-Fa-f]+" - constant.number: "\\b[+-]?[0-9]+([.]?[0-9]+)?(?i:e[+-]?[0-9]+)?" - constant.string: start: "#[0-9]{1,}" end: "$" rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - preproc: start: "{\\$" end: "}" rules: [] - comment: start: "//" end: "$" rules: [] - comment: start: "\\(\\*" end: "\\*\\)" rules: [] - comment: start: "({)(?:[^$])" end: "}" rules: [] micro-2.0.9/runtime/syntax/patch.yaml000066400000000000000000000004101405030104300176100ustar00rootroot00000000000000filetype: patch detect: filename: "\\.(patch|diff)$" header: "^diff" rules: - brightgreen: "^\\+.*" - green: "^\\+\\+\\+.*" - brightblue: "^ .*" - brightred: "^-.*" - red: "^---.*" - brightyellow: "^@@.*" - magenta: "^diff.*" micro-2.0.9/runtime/syntax/peg.yaml000066400000000000000000000007501405030104300172730ustar00rootroot00000000000000filetype: peg detect: filename: "\\.l?peg$" rules: - identifier: "^[[:space:]]*[A-Za-z][A-Za-z0-9_]*[[:space:]]*<-" - constant.number: "\\^[+-]?[0-9]+" - symbol.operator: "[-+*?^/!&]|->|<-|=>" - identifier.var: "%[A-Za-z][A-Za-z0-9_]*" - special: "\\[[^]]*\\]" - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - comment: "(^|[[:space:]])\\-\\-.*$" - todo: "TODO:?" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/perl.yaml000066400000000000000000000034071405030104300174640ustar00rootroot00000000000000filetype: perl detect: filename: "\\.p[lm]$" header: "^#!.*/(env +)?perl( |$)" rules: - type: "\\b(accept|alarm|atan2|bin(d|mode)|c(aller|h(dir|mod|op|own|root)|lose(dir)?|onnect|os|rypt)|d(bm(close|open)|efined|elete|ie|o|ump)|e(ach|of|val|x(ec|ists|it|p))|f(cntl|ileno|lock|ork))\\b|\\b(get(c|login|peername|pgrp|ppid|priority|pwnam|(host|net|proto|serv)byname|pwuid|grgid|(host|net)byaddr|protobynumber|servbyport)|([gs]et|end)(pw|gr|host|net|proto|serv)ent|getsock(name|opt)|gmtime|goto|grep|hex|index|int|ioctl|join)\\b|\\b(keys|kill|last|length|link|listen|local(time)?|log|lstat|m|mkdir|msg(ctl|get|snd|rcv)|next|oct|open(dir)?|ord|pack|pipe|pop|printf?|push|q|qq|qx|rand|re(ad(dir|link)?|cv|do|name|quire|set|turn|verse|winddir)|rindex|rmdir|s|scalar|seek(dir)?)\\b|\\b(se(lect|mctl|mget|mop|nd|tpgrp|tpriority|tsockopt)|shift|shm(ctl|get|read|write)|shutdown|sin|sleep|socket(pair)?|sort|spli(ce|t)|sprintf|sqrt|srand|stat|study|substr|symlink|sys(call|read|tem|write)|tell(dir)?|time|tr(y)?|truncate|umask)\\b|\\b(un(def|link|pack|shift)|utime|values|vec|wait(pid)?|wantarray|warn|write)\\b" - statement: "\\b(continue|else|elsif|do|for|foreach|if|unless|until|while|eq|ne|lt|gt|le|ge|cmp|x|my|sub|use|package|can|isa)\\b" - special: "\\-\\>" - symbol: "(,|\\.)" - identifier: start: "[\\$@%]" end: "\\W" rules: [] - constant.string: "\"\\(.*\\)\"|qq?\\|.*\\||qq?\\{.*\\}|qq?\\/.*\\/" - default: "[sm]/.*/" - preproc: start: "(^use| = new)" end: ";" rules: [] - comment: start: "#" end: "$" rules: [] - comment: start: "^=" end: "^=cut" rules: [] - identifier.macro: start: "<< 'STOP'" end: "STOP" rules: [] micro-2.0.9/runtime/syntax/php.yaml000066400000000000000000000055121405030104300173100ustar00rootroot00000000000000filetype: php detect: filename: "\\.php[2345s~]?$" rules: - symbol.operator: "<|>" - error: "<[^!].*?>" - symbol.tag: "(?i)<[/]?(a(bbr|cronym|ddress|pplet|rea|rticle|side|udio)?|b(ase(font)?|d(i|o)|ig|lockquote|r)?|ca(nvas|ption)|center|cite|co(de|l|lgroup)|d(ata(list)?|d|el|etails|fn|ialog|ir|l|t)|em(bed)?|fieldset|fig(caption|ure)|font|form|(i)?frame|frameset|h[1-6]|hr|i|img|in(put|s)|kbd|keygen|label|legend|li(nk)?|ma(in|p|rk)|menu(item)?|met(a|er)|nav|no(frames|script)|o(l|pt(group|ion)|utput)|p(aram|icture|re|rogress)?|q|r(p|t|uby)|s(trike)?|samp|se(ction|lect)|small|source|span|strong|su(b|p|mmary)|textarea|time|track|u(l)?|var|video|wbr)( .*|>)*?>" - symbol.tag.extended: "(?i)<[/]?(body|div|html|head(er)?|footer|title|table|t(body|d|h(ead)?|r|foot))( .*|>)*?>" - preproc: "(?i)<[/]?(script|style)( .*|>)*?>" - special: "&[^;[[:space:]]]*;" - symbol: "[:=]" - identifier: "(alt|bgcolor|height|href|label|longdesc|name|onclick|onfocus|onload|onmouseover|size|span|src|style|target|type|value|width)=" - constant.number: "(?i)#[0-9A-F]{6,6}" - constant.string.url: "(ftp(s)?|http(s)?|git|chrome)://[^ ]+" - comment: "" - default: "<\\?(php|=)\" end=\"\\?>" - identifier.class: "([a-zA-Z0-9_-]+)\\(" - type: "\\b(array|bool(ean)?|callable|callback|float|int(eger)?|iterable|object|resource|mixed|string|void)\\b" - identifier.class: "[a-zA-Z\\\\]+::" - identifier: "\\b([A-Z][a-zA-Z0-9_]+)\\b" - identifier: "([A-Z0-9_]+)[;|\\s|\\)|,]" - type.keyword: "\\b(global|final|public|private|protected|static|const|var)\\b" - statement: "\\b(abstract|catch|class|declare|do|else(if)?|end(declare|for(each)?|if|switch|while)|finally|for(each)|function|if|interface|namespace|switch|trait|try|while)\\b" - identifier: "\\bnew\\s+([a-zA-Z0-9\\\\]+)" - special: "\\b(as|and|break|case|clone|continue|default|die|fn|echo|empty|eval|exit|extends|goto|or|include(_once)?|implements|instanceof|insteadof|isset|list|new|print|return|require(_once)?|unset|use|throw|xor|yield(\\s+from))\\b" - constant.bool: "\\b(true|false|null|TRUE|FALSE|NULL)\\b" - constant: "[\\s|=|\\s|\\(|/|+|-|\\*|\\[]" - constant.number: "[0-9]" - identifier: "(\\$this|parent|self|\\$this->)" - symbol.operator: "(=>|===|!==|==|!=|&&|\\|\\||::|=|->|\\!)" - identifier.var: "(\\$[a-zA-Z0-9\\-_]+)" - symbol.operator: "[\\(|\\)|/|+|\\-|\\*|\\[|.|,|;]" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - symbol.brackets: "(\\[|\\]|\\{|\\}|[()])" - comment: "(^|[[:space:]])//.*" - comment: "(^|[[:space:]])#.*" - comment: start: "/\\*" end: "\\*/" rules: [] - preproc: "<\\?(php|=)?" - preproc: "\\?>" - preproc: "" micro-2.0.9/runtime/syntax/pkg-config.yaml000066400000000000000000000005111405030104300205370ustar00rootroot00000000000000filetype: pc detect: filename: "\\.pc$" rules: - preproc: "^(Name|Description|URL|Version|Conflicts|Cflags):" - preproc: "^(Requires|Libs)(\\.private)?:" - symbol.operator: "=" - identifier.var: "\\$\\{[A-Za-z_][A-Za-z0-9_]*\\}" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/po.yaml000066400000000000000000000004531405030104300171360ustar00rootroot00000000000000filetype: po detect: filename: "\\.pot?$" rules: - preproc: "\\b(msgid|msgstr)\\b" - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - special: "\\\\.?" - comment: "(^|[[:space:]])#([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/pony.yaml000066400000000000000000000024151405030104300175050ustar00rootroot00000000000000filetype: pony detect: filename: "\\.pony$" rules: - statement: "\\b(type|interface|trait|primitive|class|struct|actor)\\b" - statement: "\\b(compiler_intrinsic)\\b" - statement: "\\b(use)\\b" - statement: "\\b(var|let|embed)\\b" - statement: "\\b(new|be|fun)\\b" - statement: "\\b(iso|trn|ref|val|box|tag|consume)\\b" - statement: "\\b(break|continue|return|error)\\b" - statement: "\\b(if|then|elseif|else|end|match|where|try|with|as|recover|object|lambda|as|digestof|ifdef)\\b" - statement: "\\b(while|do|repeat|until|for|in)\\b" - statement: "(\\?|=>)" - statement: "(\\||\\&|\\,|\\^)" - symbol.operator: "(\\-|\\+|\\*|/|\\!|%|<<|>>)" - symbol.operator: "(==|!=|<=|>=|<|>)" - statement: "\\b(is|isnt|not|and|or|xor)\\b" - type: "\\b(_*[A-Z][_a-zA-Z0-9\\']*)\\b" - constant: "\\b(this)\\b" - constant.bool: "\\b(true|false)\\b" - constant.number: "\\b((0b[0-1_]*)|(0o[0-7_]*)|(0x[0-9a-fA-F_]*)|([0-9_]+(\\.[0-9_]+)?((e|E)(\\\\+|-)?[0-9_]+)?))\\b" - constant.string: "\"(\\\\.|[^\"])*\"" - comment: start: "\"\"\"[^\"]*" end: "\"\"\"" rules: [] - comment: "(^|[[:space:]])//.*" - comment: start: "/\\*" end: "\\*/" rules: [] - todo: "TODO:?" micro-2.0.9/runtime/syntax/pov.yaml000066400000000000000000000013161405030104300173230ustar00rootroot00000000000000filetype: pov detect: filename: "\\.(pov|POV|povray|POVRAY)$" rules: - preproc: "^[[:space:]]*#[[:space:]]*(declare)" - statement: "\\b(sphere|cylinder|translate|matrix|rotate|scale)\\b" - statement: "\\b(orthographic|location|up|right|direction|clipped_by)\\b" - statement: "\\b(fog_type|fog_offset|fog_alt|rgb|distance|transform)\\b" - identifier: "^\\b(texture)\\b" - identifier: "\\b(light_source|background)\\b" - identifier: "\\b(fog|object|camera)\\b" - symbol.operator: "(\\{|\\}|\\(|\\)|\\;|\\]|\\[|`|\\\\|\\$|<|>|!|=|&|\\|)" - special: "\\b(union|group|subgroup)\\b" - comment: "//.*" - comment: start: "/\\*" end: "\\*/" rules: [] micro-2.0.9/runtime/syntax/privoxy-action.yaml000066400000000000000000000031521405030104300215120ustar00rootroot00000000000000filetype: privoxy-action detect: filename: "\\.action$" rules: - constant.bool.false: "[{[:space:]]\\-block([[:space:]{}]|$)" - constant.bool.true: "[{[:space:]]\\+block([[:space:]{}]|$)" - constant.bool.false: "-(add-header|change-x-forwarded-for|client-header-filter|client-header-tagger|content-type-overwrite|crunch-client-header|crunch-if-none-match|crunch-incoming-cookies|crunch-outgoing-cookies|crunch-server-header|deanimate-gifs|downgrade-http-version|fast-redirects|filter|force-text-mode|forward-override|handle-as-empty-document|handle-as-image|hide-accept-language|hide-content-disposition|hide-from-header|hide-if-modified-since|hide-referrer|hide-user-agent|limit-connect|overwrite-last-modified|prevent-compression|redirect|server-header-filter|server-header-tagger|session-cookies-only|set-image-blocker)" - constant.bool.true: "\\+(add-header|change-x-forwarded-for|client-header-filter|client-header-tagger|content-type-overwrite|crunch-client-header|crunch-if-none-match|crunch-incoming-cookies|crunch-outgoing-cookies|crunch-server-header|deanimate-gifs|downgrade-http-version|fast-redirects|filter|force-text-mode|forward-override|handle-as-empty-document|handle-as-image|hide-accept-language|hide-content-disposition|hide-from-header|hide-if-modified-since|hide-referrer|hide-user-agent|limit-connect|overwrite-last-modified|prevent-compression|redirect|server-header-filter|server-header-tagger|session-cookies-only|set-image-blocker)" - constant.specialChar: "\\\\.?" - comment: "(^|[[:space:]])#([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/privoxy-config.yaml000066400000000000000000000015401405030104300215010ustar00rootroot00000000000000filetype: privoxy-config detect: filename: "privoxy/config$" rules: - statement: "(accept-intercepted-requests|actionsfile|admin-address|allow-cgi-request-crunching|buffer-limit|compression-level|confdir|connection-sharing|debug|default-server-timeout|deny-access|enable-compression|enable-edit-actions|enable-remote-http-toggle|enable-remote-toggle|enforce-blocks|filterfile|forward|forwarded-connect-retries|forward-socks4|forward-socks4a|forward-socks5|handle-as-empty-doc-returns-ok|hostname|keep-alive-timeout|listen-address|logdir|logfile|max-client-connections|permit-access|proxy-info-url|single-threaded|socket-timeout|split-large-forms|templdir|toggle|tolerate-pipelining|trustfile|trust-info-url|user-manual)[[:space:]]" - comment: "(^|[[:space:]])#([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/privoxy-filter.yaml000066400000000000000000000007211405030104300215210ustar00rootroot00000000000000filetype: privoxy-filter detect: filename: "\\.filter$" rules: - statement: "^(FILTER|CLIENT-HEADER-FILTER|CLIENT-HEADER-TAGGER|SERVER-HEADER-FILTER|SERVER-HEADER-TAGGER): [a-z-]+" - identifier: "^(FILTER|CLIENT-HEADER-FILTER|CLIENT-HEADER-TAGGER|SERVER-HEADER-FILTER|SERVER-HEADER-TAGGER):" - constant.specialChar: "\\\\.?" - comment: "(^|[[:space:]])#([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/proto.yaml000066400000000000000000000020111405030104300176530ustar00rootroot00000000000000filetype: proto detect: filename: "(\\.(proto)$$)" rules: - identifier: "\\b[A-Z_][0-9A-Z_]+\\b" - type: "\\b(int(8|16|32|64))|string|bytes|repeated|bool|required|map|optional|oneof|union\\b" - statement: "\\b(import|service|enum|syntax|package|option|message|rpc|returns|extensions|to)\\b" - constant: "'\\\\(([0-3]?[0-7]{1,2}))'" - constant: "'\\\\x[0-9A-Fa-f]{1,2}'" - symbol.brackets: "[(){}]|\\[|\\]" - constant.number: "(\\b[0-9]+\\b|\\b0x[0-9A-Fa-f]+\\b)" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - preproc: "..+" - constant.specialChar: "\\\\." - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/puppet.yaml000066400000000000000000000027761405030104300200470ustar00rootroot00000000000000filetype: puppet detect: filename: "\\.pp$" rules: - default: "^[[:space:]]([a-z][a-z0-9_]+)" - identifier.var: "\\$[a-z:][a-z0-9_:]+" - type: "\\b(augeas|computer|cron|exec|file|filebucket|group|host|interface|k5login|macauthorization|mailalias|maillist|mcx|mount|nagios_command|nagios_contact|nagios_contactgroup|nagios_host|nagios_hostdependency|nagios_hostescalation|nagios_hostextinfo|nagios_hostgroup|nagios_service|nagios_servicedependency|nagios_serviceescalation|nagios_serviceextinfo|nagios_servicegroup|nagios_timeperiod|notify|package|resources|router|schedule|scheduled_task|selboolean|selmodule|service|ssh_authorized_key|sshkey|stage|tidy|user|vlan|yumrepo|zfs|zone|zpool|anchor)\\b" - statement: "\\b(class|define|if|else|undef|inherits)\\b" - symbol: "(=|-|~|>)" - identifier.var: "(\\$|@|@@)?\\b[A-Z]+[0-9A-Z_a-z]*" - symbol: "([ ]|^):[0-9A-Z_]+\\b" - constant: "/([^/]|(\\\\/))*/[iomx]*|%r\\{([^}]|(\\\\}))*\\}[iomx]*" - constant.string: "`[^`]*`|%x\\{[^}]*\\}" - constant.string: "\"([^\"]|(\\\\\"))*\"|%[QW]?\\{[^}]*\\}|%[QW]?\\([^)]*\\)|%[QW]?<[^>]*>|%[QW]?\\[[^]]*\\]|%[QW]?\\$[^$]*\\$|%[QW]?\\^[^^]*\\^|%[QW]?![^!]*!" - special: "\\$\\{[^}]*\\}" - constant.string: "'([^']|(\\\\'))*'|%[qw]\\{[^}]*\\}|%[qw]\\([^)]*\\)|%[qw]<[^>]*>|%[qw]\\[[^]]*\\]|%[qw]\\$[^$]*\\$|%[qw]\\^[^^]*\\^|%[qw]![^!]*!" - comment: "#[^{].*$|#$" - comment.bright: "##[^{].*$|##$" - todo: "(XXX|TODO|FIXME|\\?\\?\\?)" - indent-char.whitespace: "[[:space:]]+$" micro-2.0.9/runtime/syntax/python2.yaml000066400000000000000000000047701405030104300201310ustar00rootroot00000000000000filetype: python2 detect: filename: "\\.py2$" header: "^#!.*/(env +)?python2$" rules: # built-in objects - constant: "\\b(None|self|True|False)\\b" # built-in attributes - constant: "\\b(__bases__|__builtin__|__class__|__debug__|__dict__|__doc__|__file__|__members__|__methods__|__name__|__self__)\\b" # built-in functions - identifier: "\\b(abs|apply|callable|chr|cmp|compile|delattr|dir|divmod|eval|exec|execfile|filter|format|getattr|globals|hasattr|hash|help|hex|id|input|intern|isinstance|issubclass|len|locals|max|min|next|oct|open|ord|pow|range|raw_input|reduce|reload|repr|round|setattr|unichr|vars|zip|__import__)\\b" # special method names - identifier: "\\b(__abs__|__add__|__and__|__call__|__cmp__|__coerce__|__complex__|__concat__|__contains__|__del__|__delattr__|__delitem__|__dict__|__delslice__|__div__|__divmod__|__float__|__getattr__|__getitem__|__getslice__|__hash__|__hex__|__init__|__int__|__inv__|__invert__|__len__|__long__|__lshift__|__mod__|__mul__|__neg__|__nonzero__|__oct__|__or__|__pos__|__pow__|__radd__|__rand__|__rcmp__|__rdiv__|__rdivmod__|__repeat__|__repr__|__rlshift__|__rmod__|__rmul__|__ror__|__rpow__|__rrshift__|__rshift__|__rsub__|__rxor__|__setattr__|__setitem__|__setslice__|__str__|__sub__|__xor__)\\b" # types - type: "\\b(basestring|bool|buffer|bytearray|bytes|classmethod|complex|dict|enumerate|file|float|frozenset|int|list|long|map|memoryview|object|property|reversed|set|slice|staticmethod|str|super|tuple|type|unicode|xrange)\\b" # definitions - identifier: "def [a-zA-Z_0-9]+" # keywords - statement: "\\b(and|as|assert|break|class|continue|def|del|elif|else|except|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield)\\b" # decorators - brightgreen: "@.*[(]" # operators - symbol.operator: "([.:;,+*|=!\\%@]|<|>|/|-|&)" # parentheses - symbol.brackets: "([(){}]|\\[|\\])" # numbers - constant.number: "\\b[0-9]+\\b" - constant.string: start: "\"\"\"" end: "\"\"\"" rules: [] - comment: start: "'''" end: "'''" rules: [] - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "#" end: "$" rules: [] micro-2.0.9/runtime/syntax/python3.yaml000066400000000000000000000054211405030104300201240ustar00rootroot00000000000000filetype: python detect: filename: "\\.py(3)?$" header: "^#!.*/(env +)?python(3)?$" rules: # built-in objects - constant: "\\b(Ellipsis|None|self|cls|True|False)\\b" # built-in attributes - constant: "\\b(__bases__|__builtin__|__class__|__debug__|__dict__|__doc__|__file__|__members__|__methods__|__name__|__self__)\\b" # built-in functions - identifier: "\\b(abs|all|any|ascii|bin|bool|breakpoint|bytearray|bytes|callable|chr|classmethod|compile|complex|delattr|dir|divmod|eval|exec|format|getattr|globals|hasattr|hash|help|hex|id|input|isinstance|issubclass|iter|len|locals|max|min|next|nonlocal|oct|open|ord|pow|print|repr|round|setattr|sorted|sum|vars|__import__)\\b" # special method names - identifier: "\\b__(abs|add|and|call|cmp|coerce|complex|concat|contains|delattr|delitem|delslice|del|dict|divmod|div|float|getattr|getitem|getslice|hash|hex|iadd|iand|iconcat|ifloordiv|ilshift|imatmul|imod|imul|init|int|invert|inv|ior|ipow|irshift|isub|iter|itruediv|ixor|len|long|lshift|mod|mul|neg|next|nonzero|oct|or|pos|pow|radd|rand|rcmp|rdivmod|rdiv|repeat|repr|rlshift|rmod|rmul|ror|rpow|rrshift|rshift|rsub|rxor|setattr|setitem|setslice|str|sub|xor)__\\b" # types - type: "\\b(bool|bytearray|bytes|classmethod|complex|dict|enumerate|filter|float|frozenset|int|list|map|memoryview|object|property|range|reversed|set|slice|staticmethod|str|super|tuple|type|zip)\\b" # definitions - identifier: "def [a-zA-Z_0-9]+" # keywords - statement: "\\b(and|as|assert|async|await|break|class|continue|def|del|elif|else|except|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|raise|return|try|while|with|yield)\\b" # decorators - brightgreen: "@.*[(]" # operators - symbol.operator: "([~^.:;,+*|=!\\%@]|<|>|/|-|&)" # parentheses - symbol.brackets: "([(){}]|\\[|\\])" # numbers - constant.number: "\\b[0-9](_?[0-9])*(\\.([0-9](_?[0-9])*)?)?(e[0-9](_?[0-9])*)?\\b" # decimal - constant.number: "\\b0b(_?[01])+\\b" # bin - constant.number: "\\b0o(_?[0-7])+\\b" # oct - constant.number: "\\b0x(_?[0-9a-f])+\\b" # hex - constant.string: start: "\"\"\"" end: "\"\"\"" rules: [] - comment: start: "'''" end: "'''" rules: [] - constant.string: start: "\"" end: "(\"|$)" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "('|$)" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "#" end: "$" rules: # AKA Code tags (PEP 350) - todo: "(TODO|FIXME|HACK|BUG|NOTE|FAQ|MNEMONIC|REQ|RFE|IDEA|PORT|\\?\\?\\?|!!!|GLOSS|SEE|TODOC|STAT|RVD|CRED):?" micro-2.0.9/runtime/syntax/r.yaml000066400000000000000000000014631405030104300167630ustar00rootroot00000000000000filetype: r detect: filename: "\\.(r|R)$" rules: - statement: "\\b(library|require|break|else|for|function|if|ifelse|in|next|names|switch|repeat|print|try|tryCatch|isTRUE|return|while)\\b" - constant: "\\b(T|TRUE|F|FALSE|NULL|Inf|NaN|NA|NA_integer_|NA_real_|NA_complex_|NA_character_)\\b" - constant.number: "(\\b[0-9]+\\b|\\b0x[0-9A-Fa-f]+\\b)" - symbol.operator: "([.:;,+*|=!\\%]|<|>|/|-|&|\\^|\\$)" - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." micro-2.0.9/runtime/syntax/raku.yaml000066400000000000000000000032231405030104300174600ustar00rootroot00000000000000filetype: raku detect: filename: "(\\.p6$|\\.pl6$|\\.pm6$|\\.raku$|\\.rakumod$|\\.rakudoc$)" rules: - type: "\\b(accept|alarm|atan2|bin(d|mode)|c(aller|h(dir|mod|op|own|root)|lose(dir)?|onnect|os|rypt)|d(bm(close|open)|efined|elete|ie|o|ump)|e(ach|of|val|x(ec|ists|it|p))|f(cntl|ileno|lock|ork)|get(c|login|peername|pgrp|ppid|priority|pwnam|(host|net|proto|serv)byname|pwuid|grgid|(host|net)byaddr|protobynumber|servbyport)|([gs]et|end)(pw|gr|host|net|proto|serv)ent|getsock(name|opt)|gmtime|goto|grep|hex|index|int|ioctl|join|keys|kill|last|length|link|listen|local(time)?|log|lstat|m|mkdir|msg(ctl|get|snd|rcv)|next|oct|open(dir)?|ord|pack|pipe|pop|printf?|push|q|qq|qx|rand|re(ad(dir|link)?|cv|do|name|quire|set|turn|verse|winddir)|rindex|rmdir|s|scalar|seek|seekdir|se(lect|mctl|mget|mop|nd|tpgrp|tpriority|tsockopt)|shift|shm(ctl|get|read|write)|shutdown|sin|sleep|socket(pair)?|sort|spli(ce|t)|sprintf|sqrt|srand|stat|study|substr|symlink|sys(call|read|tem|write)|tell(dir)?|time|tr|y|truncate|umask|un(def|link|pack|shift)|utime|values|vec|wait(pid)?|wantarray|warn|write)\\b" - statement: "\\b(continue|else|elsif|do|for|foreach|if|unless|until|while|eq|ne|lt|gt|le|ge|cmp|x|my|sub|use|package|can|isa)\\b" - special: "\\b(has|is|class|role|given|when|BUILD|multi|returns|method|submethod|slurp|say|sub)\\b" - identifier: start: "[$@%]" end: "( |\\\\W|-)" rules: [] - constant.string: "\".*\"|qq\\|.*\\|" - default: "[sm]/.*/" - preproc: start: "(^use| = new)" end: ";" rules: [] - comment: "#.*" - identifier.macro: start: "<" - special: "^%(build$|changelog|check$|clean$|description)" - special: "^%(files|install$|package|prep$)" - special: "^%(pre|preun|pretrans|post|postun|posttrans)" - special: "^%(trigger|triggerin|triggerpostun|triggerun|verifyscript)" - comment: "(^|[[:space:]])#([^{].*)?$" - constant: "^\\*.*$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" - todo: "TODO:?" micro-2.0.9/runtime/syntax/ruby.yaml000066400000000000000000000045431405030104300175050ustar00rootroot00000000000000filetype: ruby detect: filename: "\\.(rb|rake|gemspec)$|^(Gemfile|config.ru|Rakefile|Capfile|Vagrantfile|Guardfile|Appfile|Fastfile|Pluginfile|Podfile)$" header: "^#!.*/(env +)?ruby( |$)" rules: - comment.bright: start: "##" end: "$" rules: - todo: "(XXX|TODO|FIXME|BUG|\\?\\?\\?)" - comment: start: "#" end: "$" rules: - todo: "(XXX|TODO|FIXME|BUG|\\?\\?\\?)" - statement: "\\b(BEGIN|END|alias|and|begin|break|case|class|def|defined\\?|do|else|elsif|end|ensure|for|if|in|module|next|nil|not|or|private|protected|public|redo|rescue|retry|return|self|super|then|undef|unless|until|when|while|yield)\\b" - constant: "(\\$|@|@@)?\\b[A-Z]+[0-9A-Z_a-z]*" - constant.number: "(?i)\\b0x[0-9a-f][0-9a-f_]*\\b" - constant.number: "(?i)\\b0b[01][01_]*\\b" - constant.number: "(?i)\\b[0-9][0-9_]*(['.'][0-9_]+)?(e[\\-]?[0-9_]+)?\\b" # Ruby "Symbols" - constant: "(i?)([ ]|^):[0-9A-Z_]+\\b" - constant: "\\b(__FILE__|__LINE__)\\b" - constant: "/([^/]|(\\\\/))*/[iomx]*|%r\\{([^}]|(\\\\}))*\\}[iomx]*" - constant.string: start: "'" end: "'" skip: "\\\\." rules: [] - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - symbol.brackets: start: "#\\{" end: "\\}" rules: - default: ".*" - constant.string.exec: start: "`" end: "`" skip: "\\\\." rules: - symbol.brackets: start: "#\\{" end: "\\}" rules: - default: ".*" - constant.string: "%[QW]?\\{[^}]*\\}|%[QW]?\\([^)]*\\)|%[QW]?<[^>]*>|%[QW]?\\[[^]]*\\]|%[QW]?\\$[^$]*\\$|%[QW]?\\^[^^]*\\^|%[QW]?![^!]*!" - constant.string: "%[qw]\\{[^}]*\\}|%[qw]\\([^)]*\\)|%[qw]<[^>]*>|%[qw]\\[[^]]*\\]|%[qw]\\$[^$]*\\$|%[qw]\\^[^^]*\\^|%[qw]![^!]*!" - constant.string.exec: "%[x]\\{[^}]*\\}|%[x]\\([^)]*\\)|%[x]<[^>]*>|%[x]\\[[^]]*\\]|%[x]\\$[^$]*\\$|%[x]\\^[^^]*\\^|%[x]![^!]*!" - constant.bool: "\\b(true|false|nil|TRUE|FALSE|NIL)\\b" - symbol.operator: "[-+/*=<>!~%&|^]|\\b:" - symbol.brackets: "([(){}]|\\[|\\])" - constant.macro: start: "<<-?'?EOT'?" end: "^EOT" rules: [] - preproc.shebang: "^#!.+?( |$)" micro-2.0.9/runtime/syntax/rust.yaml000066400000000000000000000026001405030104300175110ustar00rootroot00000000000000filetype: rust detect: filename: "\\.rs$" rules: # function definition - identifier: "fn [a-z0-9_]+" # Reserved words - statement: "\\b(abstract|alignof|as|become|box|break|const|continue|crate|do|dyn|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|pub|pure|ref|return|sizeof|static|self|struct|super|true|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\\b" # macros - special: "[a-z_]+!" # Constants - constant: "\\b[A-Z][A-Z_0-9]+\\b" # Numbers - constant.number: "\\b[0-9]+\\b" # Booleans - constant: "\\b(true|false)\\b" # Traits/Enums/Structs/Types/etc. - type: "\\b[A-Z]+[a-zA-Z_0-9]*[a-z]+[a-zA-Z_0-9]*\\b" # Builtin types that start with lowercase. - type: "\\b(bool|str|isize|usize|((i|u)(8|16|32|64))|f32|f64)\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "r#+\"" end: "\"#+" rules: [] - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" - special: start: "#!\\[" end: "\\]" rules: [] micro-2.0.9/runtime/syntax/sage.yaml000066400000000000000000000047431405030104300174450ustar00rootroot00000000000000filetype: sage detect: filename: "\\.sage$" header: "^#!.*/(env +)?sage( |$)" rules: # built-in objects - constant: "\\b(None|self|True|False)\\b" # built-in attributes - constant: "\\b(__bases__|__builtin__|__class__|__debug__|__dict__|__doc__|__file__|__members__|__methods__|__name__|__self__)\\b" # built-in functions - identifier: "\\b(abs|apply|callable|chr|cmp|compile|delattr|dir|divmod|eval|exec|execfile|filter|format|getattr|globals|hasattr|hash|help|hex|id|input|intern|isinstance|issubclass|len|locals|max|min|next|oct|open|ord|pow|range|raw_input|reduce|reload|repr|round|setattr|unichr|vars|zip|__import__)\\b" # special method names - identifier: "\\b(__abs__|__add__|__and__|__call__|__cmp__|__coerce__|__complex__|__concat__|__contains__|__del__|__delattr__|__delitem__|__dict__|__delslice__|__div__|__divmod__|__float__|__getattr__|__getitem__|__getslice__|__hash__|__hex__|__init__|__int__|__inv__|__invert__|__len__|__long__|__lshift__|__mod__|__mul__|__neg__|__nonzero__|__oct__|__or__|__pos__|__pow__|__radd__|__rand__|__rcmp__|__rdiv__|__rdivmod__|__repeat__|__repr__|__rlshift__|__rmod__|__rmul__|__ror__|__rpow__|__rrshift__|__rshift__|__rsub__|__rxor__|__setattr__|__setitem__|__setslice__|__str__|__sub__|__xor__)\\b" # types - type: "\\b(basestring|bool|buffer|bytearray|bytes|classmethod|complex|dict|enumerate|file|float|frozenset|int|list|long|map|memoryview|object|property|reversed|set|slice|staticmethod|str|super|tuple|type|unicode|xrange)\\b" # definitions - identifier: "def [a-zA-Z_0-9]+" # keywords - statement: "\\b(and|as|assert|break|class|continue|def|del|elif|else|except|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield)\\b" # decorators - brightgreen: "@.*[(]" # operators - statement: "([.:;,+*|=!\\%@]|<|>|/|-|&)" # parentheses - statement: "([(){}]|\\[|\\])" # numbers - constant.number: "\\b[0-9]+\\b" - comment: start: "\"\"\"" end: "\"\"\"" rules: [] - comment: start: "'''" end: "'''" rules: [] - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "#" end: "$" rules: [] micro-2.0.9/runtime/syntax/scala.yaml000066400000000000000000000017711405030104300176070ustar00rootroot00000000000000filetype: scala detect: filename: "\\.scala$" rules: - type: "\\b(boolean|byte|char|double|float|int|long|new|short|this|transient|void)\\b" - statement: "\\b(match|val|var|break|case|catch|continue|default|do|else|finally|for|if|return|switch|throw|try|while)\\b" - statement: "\\b(def|object|case|trait|lazy|implicit|abstract|class|extends|with|final|implements|override|import|instanceof|interface|native|package|private|protected|public|static|strictfp|super|synchronized|throws|volatile|sealed)\\b" - constant.string: start: "\"\"\"" end: "\"\"\"" rules: [] - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant: "\\b(true|false|null)\\b" - comment: start: "//" end: "$" rules: [] - comment: start: "/\\*" end: "\\*/" rules: [] - comment: start: "/\\*\\*" end: "\\*/" rules: [] micro-2.0.9/runtime/syntax/sed.yaml000066400000000000000000000005151405030104300172720ustar00rootroot00000000000000filetype: sed detect: filename: "\\.sed$" header: "^#!.*bin/(env +)?sed( |$)" rules: - symbol.operator: "[|^$.*+]" - constant.number: "\\{[0-9]+,?[0-9]*\\}" - constant.specialChar: "\\\\." - comment: "(^|[[:space:]])#([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/sh.yaml000066400000000000000000000035351405030104300171360ustar00rootroot00000000000000filetype: shell detect: filename: "(\\.sh$|\\.bash|\\.ash|bashrc|bash_aliases|bash_functions|profile|bash-fc\\.|Pkgfile|pkgmk.conf|rc.conf|PKGBUILD|.ebuild\\$|APKBUILD)" header: "^#!.*/(env +)?(ba)?(a)?(mk)?sh( |$)" rules: # Numbers - constant.number: "\\b[0-9]+\\b" # Conditionals and control flow - statement: "\\b(case|do|done|elif|else|esac|exit|fi|for|function|if|in|local|read|return|select|shift|then|time|until|while)\\b" - special: "(\\{|\\}|\\(|\\)|\\;|\\]|\\[|`|\\\\|\\$|<|>|!|=|&|\\|)" # Shell commands - type: "\\b(cd|echo|export|let|set|umask|unset)\\b" # Common linux commands - type: "\\b((g|ig)?awk|bash|dash|find|\\w{0,4}grep|kill|killall|\\w{0,4}less|make|pkill|sed|sh|tar)\\b" # Coreutils commands - type: "\\b(base64|basename|cat|chcon|chgrp|chmod|chown|chroot|cksum|comm|cp|csplit|cut|date|dd|df|dir|dircolors|dirname|du|env|expand|expr|factor|false|fmt|fold|head|hostid|id|install|join|link|ln|logname|ls|md5sum|mkdir|mkfifo|mknod|mktemp|mv|nice|nl|nohup|nproc|numfmt|od|paste|pathchk|pinky|pr|printenv|printf|ptx|pwd|readlink|realpath|rm|rmdir|runcon|seq|(sha1|sha224|sha256|sha384|sha512)sum|shred|shuf|sleep|sort|split|stat|stdbuf|stty|sum|sync|tac|tail|tee|test|time|timeout|touch|tr|true|truncate|tsort|tty|uname|unexpand|uniq|unlink|users|vdir|wc|who|whoami|yes)\\b" # Conditional flags - statement: "--[a-z-]+" - statement: "\\ -[a-z]+" - identifier: "\\$\\{?[0-9A-Za-z_!@#$*?-]+\\}?" - identifier: "\\$\\{?[0-9A-Za-z_!@#$*?-]+\\}?" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" rules: [] - comment: start: "(^|\\s)#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/sls.yaml000066400000000000000000000006661405030104300173270ustar00rootroot00000000000000filetype: salt detect: filename: "\\.sls$" rules: - identifier.var: "^[^ -].*:$" - identifier.var: ".*:" - default: "salt:" - constant.number: "/*[0-9]/*" - constant.bool: "\\b(True|False)\\b" - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - special: "\\b(grain|grains|compound|pcre|grain_pcre|list|pillar)\\b" - comment: "^#.*" - statement: "\\b(if|elif|else|or|not|and|endif|end)\\b" micro-2.0.9/runtime/syntax/solidity.yaml000066400000000000000000000031531405030104300203600ustar00rootroot00000000000000filetype: solidity detect: filename: "\\.sol$" rules: - preproc: "\\b(contract|library|pragma)\\b" - constant.number: "\\b[-]?([0-9]+|0x[0-9a-fA-F]+)\\b" - identifier: "[a-zA-Z][_a-zA-Z0-9]*[[:space:]]*" - statement: "\\b(assembly|break|continue|do|for|function|if|else|new|return|returns|while)\\b" - special: "\\b(\\.send|throw)\\b" # make sure they are very visible - type.keyword: "\\b(anonymous|constant|indexed|payable|public|private|external|internal)\\b" - constant: "\\b(block(\\.(blockhash|coinbase|difficulty|gaslimit|number|timestamp))?|msg(\\.(data|gas|sender|value))?|now|tx(\\.(gasprice|origin))?)\\b" - constant: "\\b(keccak256|sha3|sha256|ripemd160|ecrecover|addmod|mulmod|this|super|selfdestruct|\\.balance)\\b" - constant: "\\b(true|false)\\b" - constant: "\\b(wei|szabo|finney|ether|seconds|minutes|hours|days|weeks|years)\\b" - type: "\\b(address|bool|mapping|string|var|int(\\d*)|uint(\\d*)|byte(\\d*)|fixed(\\d*)|ufixed(\\d*))\\b" - error: "\\b(abstract|after|case|catch|default|final|in|inline|interface|let|match|null|of|pure|relocatable|static|switch|try|type|typeof|view)\\b" - operator: "[-+/*=<>!~%?:&|]" - comment: start: "//" end: "$" rules: [] - comment: start: "/\\*" end: "\\*/" rules: [] - todo: "TODO:?" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." micro-2.0.9/runtime/syntax/sql.yaml000066400000000000000000000042451405030104300173220ustar00rootroot00000000000000filetype: sql detect: filename: "\\.sql$|sqliterc$" rules: - statement: "(?i)\\b(ALL|ASC|AS|ALTER|AND|ADD|AUTO_INCREMENT)\\b" - statement: "(?i)\\b(BETWEEN|BINARY|BOTH|BY|BOOLEAN)\\b" - statement: "(?i)\\b(CHANGE|CHECK|COLUMNS|COLUMN|CROSS|CREATE)\\b" - statement: "(?i)\\b(DATABASES|DATABASE|DATA|DELAYED|DESCRIBE|DESC|DISTINCT|DELETE|DROP|DEFAULT)\\b" - statement: "(?i)\\b(ENCLOSED|ESCAPED|EXISTS|EXPLAIN)\\b" - statement: "(?i)\\b(FIELDS|FIELD|FLUSH|FOR|FOREIGN|FUNCTION|FROM)\\b" - statement: "(?i)\\b(GROUP|GRANT|HAVING)\\b" - statement: "(?i)\\b(IGNORE|INDEX|INFILE|INSERT|INNER|INTO|IDENTIFIED|IN|IS|IF)\\b" - statement: "(?i)\\b(JOIN|KEYS|KILL|KEY)\\b" - statement: "(?i)\\b(LEADING|LIKE|LIMIT|LINES|LOAD|LOCAL|LOCK|LOW_PRIORITY|LEFT|LANGUAGE)\\b" - statement: "(?i)\\b(MODIFY|NATURAL|NOT|NULL|NEXTVAL)\\b" - statement: "(?i)\\b(OPTIMIZE|OPTION|OPTIONALLY|ORDER|OUTFILE|OR|OUTER|ON)\\b" - statement: "(?i)\\b(PROCEDURE|PROCEDURAL|PRIMARY)\\b" - statement: "(?i)\\b(READ|REFERENCES|REGEXP|RENAME|REPLACE|RETURN|REVOKE|RLIKE|RIGHT)\\b" - statement: "(?i)\\b(SHOW|SONAME|STATUS|STRAIGHT_JOIN|SELECT|SETVAL|SET)\\b" - statement: "(?i)\\b(TABLES|TERMINATED|TO|TRAILING|TRUNCATE|TABLE|TEMPORARY|TRIGGER|TRUSTED)\\b" - statement: "(?i)\\b(UNIQUE|UNLOCK|USE|USING|UPDATE|VALUES|VARIABLES|VIEW)\\b" - statement: "(?i)\\b(WITH|WRITE|WHERE|ZEROFILL|TYPE|XOR)\\b" - type: "(?i)\\b(VARCHAR|TINYINT|TEXT|DATE|SMALLINT|MEDIUMINT|INT|INTEGER|BIGINT|FLOAT|DOUBLE|DECIMAL|DATETIME|TIMESTAMP|TIME|YEAR|UNSIGNED|CHAR|TINYBLOB|TINYTEXT|BLOB|MEDIUMBLOB|MEDIUMTEXT|LONGBLOB|LONGTEXT|ENUM|BOOL|BINARY|VARBINARY)\\b" - preproc: "(?i)\\.\\b(databases|dump|echo|exit|explain|header(s)?|help)\\b" - preproc: "(?i)\\.\\b(import|indices|mode|nullvalue|output|prompt|quit|read)\\b" - preproc: "(?i)\\.\\b(schema|separator|show|tables|timeout|width)\\b" - constant.bool: "\\b(ON|OFF)\\b" - constant.number: "\\b([0-9]+)\\b" - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - constant.string: "`(\\\\.|[^\\\\`])*`" - comment: "\\-\\-.*$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/stata.yaml000066400000000000000000000460331405030104300176400ustar00rootroot00000000000000filetype: stata detect: filename: "\\.a?do$" rules: - constant.string: start: "`\"" end: "\"'" rules: - identifier.macro: start: "`" end: "'" rules: [] - identifier.macro: "\\$\\w+" - constant.specialChar: "\\\\." - constant.string: start: "\"" end: "\"" rules: - identifier.macro: start: "`" end: "'" rules: [] - identifier.macro: "\\$\\w+" - constant.specialChar: "\\\\." # Built-in functions - identifier: "\\b(_caller|abbrev|abs|acos|acosh|asin|asinh|atan|atan2|atanh|autocode|betaden|binomial|binomialp|binomialtail|binormal|bofd|byteorder|c|cauchy|cauchyden|cauchytail|Cdhms|ceil|char|chi2|chi2den|chi2tail|Chms|cholesky|chop|clip|Clock|cloglog|Cmdyhms|Cofc|Cofd|coleqnumb|collatorlocale|collatorversion|colnfreeparms|colnumb|colsof|comb|cond|corr|cos|cosh|date|day|det|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|dhms|diag|diag0cnt|digamma|dofb|dofC|dofh|dofm|dofq|dofw|dofy|dow|doy|dunnettprob|e|el|epsdouble|epsfloat|exp|exponential|exponentialden|exponentialtail|F|Fden|fileexists|fileread|filereaderror|filewrite|float|floor|fmtwidth|Ftail|gammaden|gammap|gammaptail|hadamard|halfyear|halfyearly|has_eprop|hh|hhC|hms|hofd|hours|hypergeometric|hypergeometricp|I|ibeta|ibetatail|igaussian|igaussianden|igaussiantail|indexnot|inlist|inrange|int|inv|invbinomial|invbinomialtail|invcauchy|invcauchytail|invchi2|invchi2tail|invcloglog|invdunnettprob|invexponential|invexponentialtail|invF|invFtail|invgammap|invgammaptail|invibeta|invibetatail|invigaussian|invigaussiantail|invlaplace|invlaplacetail|invlogistic|invlogistictail|invlogit|invnbinomial|invnbinomialtail|invnchi2|invnchi2tail|invnF|invnFtail|invnibeta|invnormal|invnt|invnttail|invpoisson|invpoissontail|invsym|invt|invttail|invtukeyprob|invweibull|invweibullph|invweibullphtail|invweibulltail|irecode|issymmetric|J|laplace|laplaceden|laplacetail|ln|lncauchyden|lnfactorial|lngamma|lnigammaden|lnigaussianden|lniwishartden|lnlaplaceden|lnmvnormalden|lnnormal|lnnormalden|lnwishartden|log|log10|logistic|logisticden|logistictail|logit|matmissing|matrix|matuniform|max|maxbyte|maxdouble|maxfloat|maxint|maxlong|mdy|mdyhms|missing|min|minbyte|mindouble|minfloat|minint|minlong|minutes|mm|mmC|mod|mofd|month|monthly|mreldif|msofhours|msofminutes|msofseconds|nbetaden|nbinomial|nbinomialp|nbinomialtail|nchi2|nchi2den|nchi2tail|nF|nFden|nFtail|nibeta|normal|normalden|npnchi2|npnF|npnt|nt|ntden|nttail|nullmat|plural|poisson|poissonp|poissontail|qofd|quarter|quarterly|r|rbeta|rbinomial|rcauchy|rchi2|real|recode|regexm|regexr|regexs|reldif|replay|return|rexponential|rgamma|rhypergeometric|rigaussian|rlaplace|rlogistic|rnbinomial|rnormal|round|roweqnumb|rownfreeparms|rownumb|rowsof|rpoisson|rt|runiform|runiformint|rweibull|rweibullph|s|scalar|seconds|sign|sin|sinh|smallestdouble|soundex|sqrt|ss|ssC|strcat|strdup|strofreal|string|strtrim|stritrim|strltrim|strrtrim|strlen|strupper|strlower|strproper|strmatch|strpos|strrpos|strreverse|strtoname|subinstr|subinword|substr|sum|sweep|t|tan|tanh|tC|td|tden|th|tin|tm|tobytes|tq|trace|trigamma|ttail|tukeyprob|tw|twithin|uchar|udstrlen|udsubstr|uisdigit|uisletter|ustrcompare|ustrsortkey|ustrcompareex|ustrsortkeyex|ustrfix|ustrto|ustrfrom|ustrlen|ustrinvalidcnt|usubstr|ustrleft|ustrright|ustrupper|ustrlower|ustrtitle|ustrtrim|ustrltrim|ustrrtrim|ustrnormalize|ustrpos|ustrrpos|ustrregexm|ustrregexrf|ustrregexra|ustrregexs|ustrreverse|ustrunescape|ustrtohex|ustrtoname|ustrword|ustrwordcount|usubinstr|vec|vecdiag|week|weekly|weibull|weibullden|weibullph|weibullphden|weibullphtail|weibulltail|wofd|word|wordbreaklocale|year|yearly|yh|ym|yofd|yq|yw)\\b" # Built-in commands - statement: "\\b(if|else|else\\s+if|in|foreach|for|forv|forva|forval|forvalu|forvalue|forvalues|by|bys|bysort|quietly|qui|about|ac|ac_7|acprplot|acprplot_7|adjust|ado|adopath|adoupdate|alpha|ameans|an|ano|anov|anova|anova_estat|anova_terms|anovadef|aorder|ap|app|appe|appen|append|arch|arch_dr|arch_estat|arch_p|archlm|areg|areg_p|args|arima|arima_dr|arima_estat|arima_p|as|asmprobit|asmprobit_estat|asmprobit_lf|asmprobit_mfx__dlg|asmprobit_p|ass|asse|asser|assert|avplot|avplot_7|avplots|avplots_7|bcskew0|bgodfrey|binreg|bip0_lf|biplot|bipp_lf|bipr_lf|bipr_p|biprobit|bitest|bitesti|bitowt|blogit|bmemsize|boot|bootsamp|bootstrap|bootstrap_8|boxco_l|boxco_p|boxcox|boxcox_6|boxcox_p|bprobit|br|break|brier|bro|brow|brows|browse|brr|brrstat|bs|bs_7|bsampl_w|bsample|bsample_7|bsqreg|bstat|bstat_7|bstat_8|bstrap|bstrap_7|ca|ca_estat|ca_p|cabiplot|camat|canon|canon_8|canon_8_p|canon_estat|canon_p|cap|caprojection|capt|captu|captur|capture|cat|cc|cchart|cchart_7|cci|cd|censobs_table|centile|cf|char|chdir|checkdlgfiles|checkestimationsample|checkhlpfiles|checksum|chelp|ci|cii|cl|class|classutil|clear|cli|clis|clist|clo|clog|clog_lf|clog_p|clogi|clogi_sw|clogit|clogit_lf|clogit_p|clogitp|clogl_sw|cloglog|clonevar|clslistarray|cluster|cluster_measures|cluster_stop|cluster_tree|cluster_tree_8|clustermat|cmdlog|cnr|cnre|cnreg|cnreg_p|cnreg_sw|cnsreg|codebook|collaps4|collapse|colormult_nb|colormult_nw|compare|compress|conf|confi|confir|confirm|conren|cons|const|constr|constra|constrai|constrain|constraint|continue|contract|copy|copyright|copysource|cor|corc|corr|corr2data|corr_anti|corr_kmo|corr_smc|corre|correl|correla|correlat|correlate|corrgram|cou|coun|count|cox|cox_p|cox_sw|coxbase|coxhaz|coxvar|cprplot|cprplot_7|crc|cret|cretu|cretur|creturn|cross|cs|cscript|cscript_log|csi|ct|ct_is|ctset|ctst_5|ctst_st|cttost|cumsp|cumsp_7|cumul|cusum|cusum_7|cutil|d|datasig|datasign|datasigna|datasignat|datasignatu|datasignatur|datasignature|datetof|db|dbeta|de|dec|deco|decod|decode|deff|des|desc|descr|descri|describ|describe|destring|dfbeta|dfgls|dfuller|di|di_g|dir|dirstats|dis|discard|disp|disp_res|disp_s|displ|displa|display|distinct|do|doe|doed|doedi|doedit|dotplot|dotplot_7|dprobit|drawnorm|drop|ds|ds_util|dstdize|duplicates|durbina|dwstat|dydx|e|ed|edi|edit|egen|eivreg|emdef|end|en|enc|enco|encod|encode|eq|erase|ereg|ereg_lf|ereg_p|ereg_sw|ereghet|ereghet_glf|ereghet_glf_sh|ereghet_gp|ereghet_ilf|ereghet_ilf_sh|ereghet_ip|eret|eretu|eretur|ereturn|err|erro|error|est|est_cfexist|est_cfname|est_clickable|est_expand|est_hold|est_table|est_unhold|est_unholdok|estat|estat_default|estat_summ|estat_vce_only|esti|estimates|etodow|etof|etomdy|ex|exi|exit|expand|expandcl|fac|fact|facto|factor|factor_estat|factor_p|factor_pca_rotated|factor_rotate|factormat|fcast|fcast_compute|fcast_graph|fdades|fdadesc|fdadescr|fdadescri|fdadescrib|fdadescribe|fdasav|fdasave|fdause|fh_st|open|read|close|file|filefilter|fillin|find_hlp_file|findfile|findit|findit_7|fit|fl|fli|flis|flist|for5_0|form|forma|format|fpredict|frac_154|frac_adj|frac_chk|frac_cox|frac_ddp|frac_dis|frac_dv|frac_in|frac_mun|frac_pp|frac_pq|frac_pv|frac_wgt|frac_xo|fracgen|fracplot|fracplot_7|fracpoly|fracpred|fron_ex|fron_hn|fron_p|fron_tn|fron_tn2|frontier|ftodate|ftoe|ftomdy|ftowdate|g|gamhet_glf|gamhet_gp|gamhet_ilf|gamhet_ip|gamma|gamma_d2|gamma_p|gamma_sw|gammahet|gdi_hexagon|gdi_spokes|ge|gen|gene|gener|genera|generat|generate|genrank|genstd|genvmean|gettoken|gl|gladder|gladder_7|glim_l01|glim_l02|glim_l03|glim_l04|glim_l05|glim_l06|glim_l07|glim_l08|glim_l09|glim_l10|glim_l11|glim_l12|glim_lf|glim_mu|glim_nw1|glim_nw2|glim_nw3|glim_p|glim_v1|glim_v2|glim_v3|glim_v4|glim_v5|glim_v6|glim_v7|glm|glm_6|glm_p|glm_sw|glmpred|glo|glob|globa|global|glogit|glogit_8|glogit_p|gmeans|gnbre_lf|gnbreg|gnbreg_5|gnbreg_p|gomp_lf|gompe_sw|gomper_p|gompertz|gompertzhet|gomphet_glf|gomphet_glf_sh|gomphet_gp|gomphet_ilf|gomphet_ilf_sh|gomphet_ip|gphdot|gphpen|gphprint|gprefs|gprobi_p|gprobit|gprobit_8|gr|gr7|gr_copy|gr_current|gr_db|gr_describe|gr_dir|gr_draw|gr_draw_replay|gr_drop|gr_edit|gr_editviewopts|gr_example|gr_example2|gr_export|gr_print|gr_qscheme|gr_query|gr_read|gr_rename|gr_replay|gr_save|gr_set|gr_setscheme|gr_table|gr_undo|gr_use|graph|graph7|grebar|greigen|greigen_7|greigen_8|grmeanby|grmeanby_7|gs_fileinfo|gs_filetype|gs_graphinfo|gs_stat|gsort|gwood|h|hadimvo|hareg|hausman|haver|he|heck_d2|heckma_p|heckman|heckp_lf|heckpr_p|heckprob|hel|help|hereg|hetpr_lf|hetpr_p|hetprob|hettest|hexdump|hilite|hist|hist_7|histogram|hlogit|hlu|hmeans|hotel|hotelling|hprobit|hreg|hsearch|icd9|icd9_ff|icd9p|iis|impute|imtest|inbase|include|inf|infi|infil|infile|infix|inp|inpu|input|ins|insheet|insp|inspe|inspec|inspect|integ|inten|intreg|intreg_7|intreg_p|intrg2_ll|intrg_ll|intrg_ll2|ipolate|iqreg|ir|irf|irf_create|irfm|iri|is_svy|is_svysum|isid|istdize|ivprob_1_lf|ivprob_lf|ivprobit|ivprobit_p|ivreg|ivreg_footnote|ivtob_1_lf|ivtob_lf|ivtobit|ivtobit_p|jackknife|jacknife|jknife|jknife_6|jknife_8|jkstat|joinby|kalarma1|kap|kap_3|kapmeier|kappa|kapwgt|kdensity|kdensity_7|keep|ksm|ksmirnov|ktau|kwallis|l|la|lab|labe|label|labelbook|ladder|levels|levelsof|leverage|lfit|lfit_p|li|lincom|line|linktest|lis|list|lloghet_glf|lloghet_glf_sh|lloghet_gp|lloghet_ilf|lloghet_ilf_sh|lloghet_ip|llogi_sw|llogis_p|llogist|llogistic|llogistichet|lnorm_lf|lnorm_sw|lnorma_p|lnormal|lnormalhet|lnormhet_glf|lnormhet_glf_sh|lnormhet_gp|lnormhet_ilf|lnormhet_ilf_sh|lnormhet_ip|lnskew0|loadingplot|loc|loca|local|log|logi|logis_lf|logistic|logistic_p|logit|logit_estat|logit_p|loglogs|logrank|loneway|lookfor|lookup|lowess|lowess_7|lpredict|lrecomp|lroc|lroc_7|lrtest|ls|lsens|lsens_7|lsens_x|lstat|ltable|ltable_7|ltriang|lv|lvr2plot|lvr2plot_7|m|ma|mac|macr|macro|makecns|man|manova|manova_estat|manova_p|manovatest|mantel|mark|markin|markout|marksample|mat|mat_capp|mat_order|mat_put_rr|mat_rapp|mata|mata_clear|mata_describe|mata_drop|mata_matdescribe|mata_matsave|mata_matuse|mata_memory|mata_mlib|mata_mosave|mata_rename|mata_which|matalabel|matcproc|matlist|matname|matr|matri|matrix|matrix_input__dlg|matstrik|mcc|mcci|md0_|md1_|md1debug_|md2_|md2debug_|mds|mds_estat|mds_p|mdsconfig|mdslong|mdsmat|mdsshepard|mdytoe|mdytof|me_derd|mean|means|median|memory|memsize|meqparse|mer|merg|merge|mfp|mfx|mhelp|mhodds|minbound|mixed_ll|mixed_ll_reparm|mkassert|mkdir|mkmat|mkspline|ml|ml_5|ml_adjs|ml_bhhhs|ml_c_d|ml_check|ml_clear|ml_cnt|ml_debug|ml_defd|ml_e0|ml_e0_bfgs|ml_e0_cycle|ml_e0_dfp|ml_e0i|ml_e1|ml_e1_bfgs|ml_e1_bhhh|ml_e1_cycle|ml_e1_dfp|ml_e2|ml_e2_cycle|ml_ebfg0|ml_ebfr0|ml_ebfr1|ml_ebh0q|ml_ebhh0|ml_ebhr0|ml_ebr0i|ml_ecr0i|ml_edfp0|ml_edfr0|ml_edfr1|ml_edr0i|ml_eds|ml_eer0i|ml_egr0i|ml_elf|ml_elf_bfgs|ml_elf_bhhh|ml_elf_cycle|ml_elf_dfp|ml_elfi|ml_elfs|ml_enr0i|ml_enrr0|ml_erdu0|ml_erdu0_bfgs|ml_erdu0_bhhh|ml_erdu0_bhhhq|ml_erdu0_cycle|ml_erdu0_dfp|ml_erdu0_nrbfgs|ml_exde|ml_footnote|ml_geqnr|ml_grad0|ml_graph|ml_hbhhh|ml_hd0|ml_hold|ml_init|ml_inv|ml_log|ml_max|ml_mlout|ml_mlout_8|ml_model|ml_nb0|ml_opt|ml_p|ml_plot|ml_query|ml_rdgrd|ml_repor|ml_s_e|ml_score|ml_searc|ml_technique|ml_unhold|mleval|mlf_|mlmatbysum|mlmatsum|mlog|mlogi|mlogit|mlogit_footnote|mlogit_p|mlopts|mlsum|mlvecsum|mnl0_|mor|more|mov|move|mprobit|mprobit_lf|mprobit_p|mrdu0_|mrdu1_|mvdecode|mvencode|mvreg|mvreg_estat|n|nbreg|nbreg_al|nbreg_lf|nbreg_p|nbreg_sw|nestreg|net|newey|newey_7|newey_p|news|nl|nl_7|nl_9|nl_9_p|nl_p|nl_p_7|nlcom|nlcom_p|nlexp2|nlexp2_7|nlexp2a|nlexp2a_7|nlexp3|nlexp3_7|nlgom3|nlgom3_7|nlgom4|nlgom4_7|nlinit|nllog3|nllog3_7|nllog4|nllog4_7|nlog_rd|nlogit|nlogit_p|nlogitgen|nlogittree|nlpred|no|nobreak|noi|nois|noisi|noisil|noisily|note|notes|notes_dlg|nptrend|numlabel|numlist|odbc|old_ver|olo|olog|ologi|ologi_sw|ologit|ologit_p|ologitp|on|one|onew|onewa|oneway|op_colnm|op_comp|op_diff|op_inv|op_str|opr|opro|oprob|oprob_sw|oprobi|oprobi_p|oprobit|oprobitp|opts_exclusive|order|orthog|orthpoly|ou|out|outf|outfi|outfil|outfile|outs|outsh|outshe|outshee|outsheet|ovtest|pac|pac_7|palette|parse|parse_dissim|pause|pca|pca_8|pca_display|pca_estat|pca_p|pca_rotate|pcamat|pchart|pchart_7|pchi|pchi_7|pcorr|pctile|pentium|pergram|pergram_7|permute|permute_8|personal|peto_st|pkcollapse|pkcross|pkequiv|pkexamine|pkexamine_7|pkshape|pksumm|pksumm_7|pl|plo|plot|plugin|pnorm|pnorm_7|poisgof|poiss_lf|poiss_sw|poisso_p|poisson|poisson_estat|post|postclose|postfile|postutil|pperron|pr|prais|prais_e|prais_e2|prais_p|predict|predictnl|preserve|print|pro|prob|probi|probit|probit_estat|probit_p|proc_time|procoverlay|procrustes|procrustes_estat|procrustes_p|profiler|prog|progr|progra|program|prop|proportion|prtest|prtesti|pwcorr|pwd|q|s|qby|qbys|qchi|qchi_7|qladder|qladder_7|qnorm|qnorm_7|qqplot|qqplot_7|qreg|qreg_c|qreg_p|qreg_sw|qu|quadchk|quantile|quantile_7|que|quer|query|range|ranksum|ratio|rchart|rchart_7|rcof|recast|reclink|recode|reg|reg3|reg3_p|regdw|regr|regre|regre_p2|regres|regres_p|regress|regress_estat|regriv_p|remap|ren|rena|renam|rename|renpfix|repeat|replace|report|reshape|restore|ret|retu|retur|return|rm|rmdir|robvar|roccomp|roccomp_7|roccomp_8|rocf_lf|rocfit|rocfit_8|rocgold|rocplot|rocplot_7|roctab|roctab_7|rolling|rologit|rologit_p|rot|rota|rotat|rotate|rotatemat|rreg|rreg_p|ru|run|runtest|rvfplot|rvfplot_7|rvpplot|rvpplot_7|sa|safesum|sample|sampsi|sav|save|savedresults|saveold|sc|sca|scal|scala|scalar|scatter|scm_mine|sco|scob_lf|scob_p|scobi_sw|scobit|scor|score|scoreplot|scoreplot_help|scree|screeplot|screeplot_help|sdtest|sdtesti|se|search|separate|seperate|serrbar|serrbar_7|serset|set|set_defaults|sfrancia|sh|she|shel|shell|shewhart|shewhart_7|signestimationsample|signrank|signtest|simul|simul_7|simulate|simulate_8|sktest|sleep|slogit|slogit_d2|slogit_p|smooth|snapspan|so|sor|sort|spearman|spikeplot|spikeplot_7|spikeplt|spline_x|split|sqreg|sqreg_p|sret|sretu|sretur|sreturn|ssc|st|st_ct|st_hc|st_hcd|st_hcd_sh|st_is|st_issys|st_note|st_promo|st_set|st_show|st_smpl|st_subid|stack|statsby|statsby_8|stbase|stci|stci_7|stcox|stcox_estat|stcox_fr|stcox_fr_ll|stcox_p|stcox_sw|stcoxkm|stcoxkm_7|stcstat|stcurv|stcurve|stcurve_7|stdes|stem|stepwise|stereg|stfill|stgen|stir|stjoin|stmc|stmh|stphplot|stphplot_7|stphtest|stphtest_7|stptime|strate|strate_7|streg|streg_sw|streset|sts|sts_7|stset|stsplit|stsum|sttocc|sttoct|stvary|stweib|su|suest|suest_8|sum|summ|summa|summar|summari|summariz|summarize|sunflower|sureg|survcurv|survsum|svar|svar_p|svmat|svy|svy_disp|svy_dreg|svy_est|svy_est_7|svy_estat|svy_get|svy_gnbreg_p|svy_head|svy_header|svy_heckman_p|svy_heckprob_p|svy_intreg_p|svy_ivreg_p|svy_logistic_p|svy_logit_p|svy_mlogit_p|svy_nbreg_p|svy_ologit_p|svy_oprobit_p|svy_poisson_p|svy_probit_p|svy_regress_p|svy_sub|svy_sub_7|svy_x|svy_x_7|svy_x_p|svydes|svydes_8|svygen|svygnbreg|svyheckman|svyheckprob|svyintreg|svyintreg_7|svyintrg|svyivreg|svylc|svylog_p|svylogit|svymarkout|svymarkout_8|svymean|svymlog|svymlogit|svynbreg|svyolog|svyologit|svyoprob|svyoprobit|svyopts|svypois|svypois_7|svypoisson|svyprobit|svyprobt|svyprop|svyprop_7|svyratio|svyreg|svyreg_p|svyregress|svyset|svyset_7|svyset_8|svytab|svytab_7|svytest|svytotal|sw|sw_8|swcnreg|swcox|swereg|swilk|swlogis|swlogit|swologit|swoprbt|swpois|swprobit|swqreg|swtobit|swweib|symmetry|symmi|symplot|symplot_7|syntax|sysdescribe|sysdir|sysuse|szroeter|ta|tab|tab1|tab2|tab_or|tabd|tabdi|tabdis|tabdisp|tabi|table|tabodds|tabodds_7|tabstat|tabu|tabul|tabula|tabulat|tabulate|te|tempfile|tempname|tempvar|tes|test|testnl|testparm|teststd|tetrachoric|time_it|timer|tis|tob|tobi|tobit|tobit_p|tobit_sw|token|tokeni|tokeniz|tokenize|tostring|total|translate|translator|transmap|treat_ll|treatr_p|treatreg|trim|trnb_cons|trnb_mean|trpoiss_d2|trunc_ll|truncr_p|truncreg|tsappend|tset|tsfill|tsline|tsline_ex|tsreport|tsrevar|tsrline|tsset|tssmooth|tsunab|ttest|ttesti|tut_chk|tut_wait|tutorial|tw|tware_st|two|twoway|twoway__fpfit_serset|twoway__function_gen|twoway__histogram_gen|twoway__ipoint_serset|twoway__ipoints_serset|twoway__kdensity_gen|twoway__lfit_serset|twoway__normgen_gen|twoway__pci_serset|twoway__qfit_serset|twoway__scatteri_serset|twoway__sunflower_gen|twoway_ksm_serset|ty|typ|type|typeof|u|unab|unabbrev|unabcmd|update|us|use|uselabel|var|var_mkcompanion|var_p|varbasic|varfcast|vargranger|varirf|varirf_add|varirf_cgraph|varirf_create|varirf_ctable|varirf_describe|varirf_dir|varirf_drop|varirf_erase|varirf_graph|varirf_ograph|varirf_rename|varirf_set|varirf_table|varlist|varlmar|varnorm|varsoc|varstable|varstable_w|varstable_w2|varwle|vce|vec|vec_fevd|vec_mkphi|vec_p|vec_p_w|vecirf_create|veclmar|veclmar_w|vecnorm|vecnorm_w|vecrank|vecstable|verinst|vers|versi|versio|version|view|viewsource|vif|vwls|wdatetof|webdescribe|webseek|webuse|weib1_lf|weib2_lf|weib_lf|weib_lf0|weibhet_glf|weibhet_glf_sh|weibhet_glfa|weibhet_glfa_sh|weibhet_gp|weibhet_ilf|weibhet_ilf_sh|weibhet_ilfa|weibhet_ilfa_sh|weibhet_ip|weibu_sw|weibul_p|weibull|weibull_c|weibull_s|weibullhet|wh|whelp|whi|which|whil|while|wilc_st|wilcoxon|win|wind|windo|window|winexec|wntestb|wntestb_7|wntestq|xchart|xchart_7|xcorr|xcorr_7|xi|xi_6|xmlsav|xmlsave|xmluse|xpose|xsh|xshe|xshel|xshell|xt_iis|xt_tis|xtab_p|xtabond|xtbin_p|xtclog|xtcloglog|xtcloglog_8|xtcloglog_d2|xtcloglog_pa_p|xtcloglog_re_p|xtcnt_p|xtcorr|xtdata|xtdes|xtfront_p|xtfrontier|xtgee|xtgee_elink|xtgee_estat|xtgee_makeivar|xtgee_p|xtgee_plink|xtgls|xtgls_p|xthaus|xthausman|xtht_p|xthtaylor|xtile|xtint_p|xtintreg|xtintreg_8|xtintreg_d2|xtintreg_p|xtivp_1|xtivp_2|xtivreg|xtline|xtline_ex|xtlogit|xtlogit_8|xtlogit_d2|xtlogit_fe_p|xtlogit_pa_p|xtlogit_re_p|xtmixed|xtmixed_estat|xtmixed_p|xtnb_fe|xtnb_lf|xtnbreg|xtnbreg_pa_p|xtnbreg_refe_p|xtpcse|xtpcse_p|xtpois|xtpoisson|xtpoisson_d2|xtpoisson_pa_p|xtpoisson_refe_p|xtpred|xtprobit|xtprobit_8|xtprobit_d2|xtprobit_re_p|xtps_fe|xtps_lf|xtps_ren|xtps_ren_8|xtrar_p|xtrc|xtrc_p|xtrchh|xtrefe_p|xtreg|xtreg_be|xtreg_fe|xtreg_ml|xtreg_pa_p|xtreg_re|xtregar|xtrere_p|xtset|xtsf_ll|xtsf_llti|xtsum|xttab|xttest0|xttobit|xttobit_8|xttobit_p|xttrans|yx|yxview__barlike_draw|yxview_area_draw|yxview_bar_draw|yxview_dot_draw|yxview_dropline_draw|yxview_function_draw|yxview_iarrow_draw|yxview_ilabels_draw|yxview_normal_draw|yxview_pcarrow_draw|yxview_pcbarrow_draw|yxview_pccapsym_draw|yxview_pcscatter_draw|yxview_pcspike_draw|yxview_rarea_draw|yxview_rbar_draw|yxview_rbarm_draw|yxview_rcap_draw|yxview_rcapsym_draw|yxview_rconnected_draw|yxview_rline_draw|yxview_rscatter_draw|yxview_rspike_draw|yxview_spike_draw|yxview_sunflower_draw|zap_s|zinb|zinb_llf|zinb_plf|zip|zip_llf|zip_p|zip_plf|zt_ct_5|zt_hc_5|zt_hcd_5|zt_is_5|zt_iss_5|zt_sho_5|zt_smp_5|ztbase_5|ztcox_5|ztdes_5|ztereg_5|ztfill_5|ztgen_5|ztir_5|ztjoin_5|ztnb|ztnb_p|ztp|ztp_p|zts_5|ztset_5|ztspli_5|ztsum_5|zttoct_5|ztvary_5|ztweib_5)\\b" - constant.number: "\\b[+-]?([0-9]+(\\.[0-9]+)?|\\.[0-9]+|\\.)([eE][+-]?[0-9]+)?[i]?\\b" - symbol.operator: "-|==|<=|>=|<|>|&|!=" - symbol.operator: "\\*|\\+|\\^|/|!|~|=|~=" - symbol.brackets: "[\\{\\}\\(\\)\\[\\]]" - identifier: "%-?\\d{1,2}(\\.\\d{1,2})?[gfe]c?" - identifier: "%(21x|16H|16L|8H|8L)" - identifier: "%-?(tc|tC|td|tw|tm|tq|th|ty|tg).{0,32}" - identifier: "%[-~]?\\d{1,4}s" - identifier.macro: "\\$\\w{1,32}" - identifier.macro: start: "`" end: "'" rules: [] - comment: start: "///?" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "^\\s*\\*" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/svelte.yaml000066400000000000000000000010101405030104300200100ustar00rootroot00000000000000filetype: svelte detect: filename: "\\.svelte$" rules: - default: start: "" rules: - include: "javascript" - default: start: "" rules: - include: "typescript" - default: start: "" end: "" rules: - include: "css" - default: start: "^" end: "$" rules: - include: "html5"micro-2.0.9/runtime/syntax/swift.yaml000066400000000000000000000105341405030104300176550ustar00rootroot00000000000000filetype: swift detect: filename: "\\.swift$" rules: # Patterns - type: \b(_)\b # Operators - symbol.operator: ([.:;,+*|=!?\\%]|<|>|/|-|&) # Declaration Keywords - statement.declaration: \b(associatedtype|class|deinit|enum|extension|fileprivate|func|import|init)\b - statement.declaration: \b(inout|internal|let|open|operator|private|protocol|public|static|struct|subscript|typealias|var)\b # Statements Keywords - statement: \b(break|case|continue|default|defer|do|else|fallthrough|for|guard)\b - statement: \b(if|inif|repeat|return|switch|where|while)\b # keyword.reserved - statement.reserved: \b(associativity|convenience|dynamic|didSet|final|get|infix|indirect|lazy|left|mutating)\b - statement.reserved: \b(none|nonmutating|override|postfix|precedence|prefix|Protocol|required)\b - statement.reserved: \b(right|set|Type|unowned|weak|willSet)\b # Expression and types - type: \b(as|Any|catch|is|rethrows|super|self|throw|throws|try)\b - statement.built_in: \b(abs|advance|alignof|alignofValue|anyGenerator|assert|assertionFailure|bridgeFromObjectiveC)\b - statement.built_in: \b(bridgeFromObjectiveCUnconditional|bridgeToObjectiveC|bridgeToObjectiveCUnconditional|contains)\b - statement.built_in: \b(count|countElements|countLeadingZeros|debugPrint|debugPrintln|distance|dropFirst|dropLast|dump|encodeBitsAsWords)\b - statement.built_in: \b(enumerate|equal|fatalError|filter|find|getBridgedObjectiveCType|getVaList|indices|insertionSort)\b - statement.built_in: \b(isBridgedToObjectiveC|isBridgedVerbatimToObjectiveC|isUniquelyReferenced|isUniquelyReferencedNonObjC)\b - statement.built_in: \b(join|lexicographicalCompare|map|max|maxElement|min|minElement|numericCast|overlaps|partition|posix)\b - statement.built_in: \b(precondition|preconditionFailure|print|println|quickSort|readLine|reduce|reflect)\b - statement.built_in: \b(reinterpretCast!reverse|roundUpToAlignment|sizeof|sizeofValue|sort|split|startsWith|stride)\b - statement.built_in: \b(strideof|strideofValue|swap|toString|transcode|underestimateCount|unsafeAddressOf|unsafeBitCast)\b - statement.built_in: \b(unsafeDowncast|unsafeUnwrap|unsafeReflect|withExtendedLifetime|withObjectAtPlusZero|withUnsafePointer)\b - statement.built_in: \b(withUnsafePointerToObject|withUnsafeMutablePointer|withUnsafeMutablePointers|withUnsafePointer)\b - statement.built_in: \b(withUnsafePointers|withVaList|zip)\b # Meta - statement.meta: \@\b(autoclosure|available|convention|exported|IBAction|IBDesignable|IBOutlet|IBInspectable|infix)\b - statement.meta: \@\b(lazy|noreturn|noescape|nonobjc|NSApplicationMain|NSCopying|NSManaged|objc|prefix|postfix)\b - statement.meta: \@\b(required|testable|warn_unused_result|UIApplicationMain)\b #preprocessor - preproc: ^[[:space:]]*#[[:space:]]*(define|else|elseif|endif|if|selector)\b - preproc.DebugIdentifier: \b(__COLUMN__|__FILE__|__FUNCTION__|__LINE__)\b - preproc.DebugIdentifier: ^[[:space:]]*#[[:space:]]*(column|file|function|line)\b # Constant - constant: \b(true|false|nil) - constant.number: ([0-9]+) # Storage Types - type.storage: \b((U)?Int(8|16|32|64))\b - type.storage: \b(Int|UInt|String|Bit|Bool|Character|Double|Optional|Float|Range)\b - type.storage: \b(AnyObject)\b # Collections - type.collections: \b(Array|Dictionary|Set)\b # Ctypes - type.ctypes: \b(CBool|CChar|CUnsignedChar|CShort|CUnsignedShort|CInt|CUnsignedInt|CLong|CUnsignedLong|CLongLong|CUnsignedLongLong|CWideChar|CChar16|CChar32|CFloat|CDouble)\b # String - constant.string: start: \" end: \" skip: \\. rules: - constant.specialChar: (\\0|\\\\|\\t|\\n|\\r|\\"|\\') - constant.interpolation: \\\([[:graph:]]*\) - constant.unicode: \\u\{[[:xdigit:]]+} # Shebang Line - comment.shebang: ^(#!).* # Doc Comment - comment.doc: (///).* # Line Comment - comment.line: "//.*" # Block Comment - comment.block: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" # Doc Block Comment - comment.block: start: "/\\*\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" # Todo - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/syntax_checker.go000066400000000000000000000013721405030104300211760ustar00rootroot00000000000000package main import ( "fmt" "io/ioutil" "strings" "github.com/zyedidia/highlight" ) func main() { files, _ := ioutil.ReadDir(".") hadErr := false for _, f := range files { if strings.HasSuffix(f.Name(), ".yaml") { input, _ := ioutil.ReadFile(f.Name()) //fmt.Println("Checking file -> ", f.Name()) file, err := highlight.ParseFile(input) if err != nil { hadErr = true fmt.Printf("Could not parse file -> %s:\n", f.Name()) fmt.Println(err) continue } _, err1 := highlight.ParseDef(file, nil) if err1 != nil { hadErr = true fmt.Printf("Could not parse input file using highlight.ParseDef(%s):\n", f.Name()) fmt.Println(err1) continue } } } if !hadErr { fmt.Println("No issues found!") } } micro-2.0.9/runtime/syntax/syntax_converter.go000066400000000000000000000116011405030104300215750ustar00rootroot00000000000000package main import ( "fmt" "io/ioutil" "os" "regexp" "strings" ) type SingleRule struct { color string regex string } type MultiRule struct { color string start string end string } // JoinRule takes a syntax rule (which can be multiple regular expressions) // and joins it into one regular expression by ORing everything together func JoinRule(rule string) string { split := strings.Split(rule, `" "`) joined := strings.Join(split, "|") return joined } func parseFile(text, filename string) (filetype, syntax, header string, rules []interface{}) { lines := strings.Split(text, "\n") // Regex for parsing syntax statements syntaxParser := regexp.MustCompile(`syntax "(.*?)"\s+"(.*)"+`) // Regex for parsing header statements headerParser := regexp.MustCompile(`header "(.*)"`) // Regex for parsing standard syntax rules ruleParser := regexp.MustCompile(`color (.*?)\s+(?:\((.+?)?\)\s+)?"(.*)"`) // Regex for parsing syntax rules with start="..." end="..." ruleStartEndParser := regexp.MustCompile(`color (.*?)\s+(?:\((.+?)?\)\s+)?start="(.*)"\s+end="(.*)"`) for lineNum, line := range lines { line = strings.TrimSpace(line) if line == "" { continue } if strings.HasPrefix(line, "#") { continue } if strings.HasPrefix(line, "syntax") { syntaxMatches := syntaxParser.FindSubmatch([]byte(line)) if len(syntaxMatches) == 3 { filetype = string(syntaxMatches[1]) syntax = JoinRule(string(syntaxMatches[2])) } else { fmt.Println(filename, lineNum, "Syntax statement is not valid: "+line) continue } } if strings.HasPrefix(line, "header") { // Header statement headerMatches := headerParser.FindSubmatch([]byte(line)) if len(headerMatches) == 2 { header = JoinRule(string(headerMatches[1])) } else { fmt.Println(filename, lineNum, "Header statement is not valid: "+line) continue } } // Syntax rule, but it could be standard or start-end if ruleParser.MatchString(line) { // Standard syntax rule // Parse the line submatch := ruleParser.FindSubmatch([]byte(line)) var color string var regexStr string var flags string if len(submatch) == 4 { // If len is 4 then the user specified some additional flags to use color = string(submatch[1]) flags = string(submatch[2]) if flags != "" { regexStr = "(?" + flags + ")" + JoinRule(string(submatch[3])) } else { regexStr = JoinRule(string(submatch[3])) } } else if len(submatch) == 3 { // If len is 3, no additional flags were given color = string(submatch[1]) regexStr = JoinRule(string(submatch[2])) } else { // If len is not 3 or 4 there is a problem fmt.Println(filename, lineNum, "Invalid statement: "+line) continue } rules = append(rules, SingleRule{color, regexStr}) } else if ruleStartEndParser.MatchString(line) { // Start-end syntax rule submatch := ruleStartEndParser.FindSubmatch([]byte(line)) var color string var start string var end string // Use m and s flags by default if len(submatch) == 5 { // If len is 5 the user provided some additional flags color = string(submatch[1]) start = string(submatch[3]) end = string(submatch[4]) } else if len(submatch) == 4 { // If len is 4 the user did not provide additional flags color = string(submatch[1]) start = string(submatch[2]) end = string(submatch[3]) } else { // If len is not 4 or 5 there is a problem fmt.Println(filename, lineNum, "Invalid statement: "+line) continue } // rules[color] = "(?" + flags + ")" + "(" + start + ").*?(" + end + ")" rules = append(rules, MultiRule{color, start, end}) } } return } func generateFile(filetype, syntax, header string, rules []interface{}) string { output := "" output += fmt.Sprintf("filetype: %s\n\n", filetype) output += fmt.Sprintf("detect: \n filename: \"%s\"\n", strings.Replace(strings.Replace(syntax, "\\", "\\\\", -1), "\"", "\\\"", -1)) if header != "" { output += fmt.Sprintf(" header: \"%s\"\n", strings.Replace(strings.Replace(header, "\\", "\\\\", -1), "\"", "\\\"", -1)) } output += "\nrules:\n" for _, r := range rules { if rule, ok := r.(SingleRule); ok { output += fmt.Sprintf(" - %s: \"%s\"\n", rule.color, strings.Replace(strings.Replace(rule.regex, "\\", "\\\\", -1), "\"", "\\\"", -1)) } else if rule, ok := r.(MultiRule); ok { output += fmt.Sprintf(" - %s:\n", rule.color) output += fmt.Sprintf(" start: \"%s\"\n", strings.Replace(strings.Replace(rule.start, "\\", "\\\\", -1), "\"", "\\\"", -1)) output += fmt.Sprintf(" end: \"%s\"\n", strings.Replace(strings.Replace(rule.end, "\\", "\\\\", -1), "\"", "\\\"", -1)) output += fmt.Sprintf(" rules: []\n\n") } } return output } func main() { if len(os.Args) < 2 { fmt.Println("no args") return } data, _ := ioutil.ReadFile(os.Args[1]) fmt.Print(generateFile(parseFile(string(data), os.Args[1]))) } micro-2.0.9/runtime/syntax/systemd.yaml000066400000000000000000000121111405030104300202020ustar00rootroot00000000000000filetype: systemd detect: filename: "\\.(service|socket|timer)$" header: "^\\[Unit\\]$" rules: - statement: "^(Accept|After|Alias|AllowIsolate|Also|ANSI_COLOR|_AUDIT_LOGINUID|_AUDIT_SESSION|Backlog|Before|BindIPv6Only|BindsTo|BindToDevice|BlockIOReadBandwidth|BlockIOWeight|BlockIOWriteBandwidth|_BOOT_ID|Broadcast|BUG_REPORT_URL|BusName|Capabilities|CapabilityBoundingSet|CHASSIS|cipher|class|_CMDLINE|CODE_FILE|CODE_FUNC|CODE_LINE|_COMM|Compress|ConditionACPower|ConditionCapability|ConditionDirectoryNotEmpty|ConditionFileIsExecutable|ConditionFileNotEmpty|ConditionHost|ConditionKernelCommandLine|ConditionNull|ConditionPathExists|ConditionPathExistsGlob|ConditionPathIsDirectory|ConditionPathIsMountPoint|ConditionPathIsReadWrite|ConditionPathIsSymbolicLink|ConditionSecurity|ConditionVirtualization|Conflicts|ControlGroup|ControlGroupAttribute|ControlGroupModify|ControlGroupPersistent|controllers|Controllers|CPE_NAME|CPUAffinity|CPUSchedulingPolicy|CPUSchedulingPriority|CPUSchedulingResetOnFork|CPUShares|CrashChVT|CrashShell|__CURSOR|debug|DefaultControllers|DefaultDependencies|DefaultLimitAS|DefaultLimitCORE|DefaultLimitCPU|DefaultLimitDATA|DefaultLimitFSIZE|DefaultLimitLOCKS|DefaultLimitMEMLOCK|DefaultLimitMSGQUEUE|DefaultLimitNICE|DefaultLimitNOFILE|DefaultLimitNPROC|DefaultLimitRSS|DefaultLimitRTPRIO|DefaultLimitRTTIME|DefaultLimitSIGPENDING|DefaultLimitSTACK|DefaultStandardError|DefaultStandardOutput|Description|DeviceAllow|DeviceDeny|DirectoryMode|DirectoryNotEmpty|Documentation|DumpCore|entropy|Environment|EnvironmentFile|ERRNO|event_timeout|_EXE|ExecReload|ExecStart|ExecStartPost|ExecStartPre|ExecStop|ExecStopPost|ExecStopPre|filter|FONT|FONT_MAP|FONT_UNIMAP|ForwardToConsole|ForwardToKMsg|ForwardToSyslog|FreeBind|freq|FsckPassNo|fstab|_GID|Group|GuessMainPID|HandleHibernateKey|HandleLidSwitch|HandlePowerKey|HandleSuspendKey|hash|HibernateKeyIgnoreInhibited|HOME_URL|_HOSTNAME|ICON_NAME|ID|IdleAction|IdleActionSec|ID_LIKE|ID_MODEL|ID_MODEL_FROM_DATABASE|IgnoreOnIsolate|IgnoreOnSnapshot|IgnoreSIGPIPE|InaccessibleDirectories|InhibitDelayMaxSec|init|IOSchedulingClass|IOSchedulingPriority|IPTOS|IPTTL|JobTimeoutSec|JoinControllers|KeepAlive|KEYMAP|KEYMAP_TOGGLE|KillExcludeUsers|KillMode|KillOnlyUsers|KillSignal|KillUserProcesses|LidSwitchIgnoreInhibited|LimitAS|LimitCORE|LimitCPU|LimitDATA|LimitFSIZE|LimitLOCKS|LimitMEMLOCK|LimitMSGQUEUE|LimitNICE|LimitNOFILE|LimitNPROC|LimitRSS|LimitRTPRIO|LimitRTTIME|LimitSIGPENDING|LimitSTACK|link_priority|valueListenDatagram|ListenFIFO|ListenMessageQueue|ListenNetlink|ListenSequentialPacket|ListenSpecial|ListenStream|LogColor|LogLevel|LogLocation|LogTarget|luks|_MACHINE_ID|MakeDirectory|Mark|MaxConnections|MaxFileSec|MaxLevelConsole|MaxLevelKMsg|MaxLevelStore|MaxLevelSyslog|MaxRetentionSec|MemoryLimit|MemorySoftLimit|MESSAGE|MESSAGE_ID|MessageQueueMaxMessages|MessageQueueMessageSize|__MONOTONIC_TIMESTAMP|MountFlags|NAME|NAutoVTs|Nice|NonBlocking|NoNewPrivileges|NotifyAccess|OnActiveSec|OnBootSec|OnCalendar|OnFailure|OnFailureIsolate|OnStartupSec|OnUnitActiveSec|OnUnitInactiveSec|OOMScoreAdjust|Options|output|PAMName|PartOf|PassCredentials|PassSecurity|PathChanged|PathExists|PathExistsGlob|PathModified|PermissionsStartOnly|_PID|PIDFile|PipeSize|PowerKeyIgnoreInhibited|PRETTY_HOSTNAME|PRETTY_NAME|Priority|PRIORITY|PrivateNetwork|PrivateTmp|PropagatesReloadTo|pss|RateLimitBurst|RateLimitInterval|ReadOnlyDirectories|ReadWriteDirectories|__REALTIME_TIMESTAMP|ReceiveBuffer|RefuseManualStart|RefuseManualStop|rel|ReloadPropagatedFrom|RemainAfterExit|RequiredBy|Requires|RequiresMountsFor|RequiresOverridable|Requisite|RequisiteOverridable|ReserveVT|ResetControllers|Restart|RestartPreventExitStatus|RestartSec|RootDirectory|RootDirectoryStartOnly|RuntimeKeepFree|RuntimeMaxFileSize|RuntimeMaxUse|RuntimeWatchdogSec|samples|scale_x|scale_y|Seal|SecureBits|_SELINUX_CONTEXT|SendBuffer|SendSIGKILL|Service|ShowStatus|ShutdownWatchdogSec|size|SmackLabel|SmackLabelIPIn|SmackLabelIPOut|SocketMode|Sockets|SourcePath|_SOURCE_REALTIME_TIMESTAMP|SplitMode|StandardError|StandardInput|StandardOutput|StartLimitAction|StartLimitBurst|StartLimitInterval|static_node|StopWhenUnneeded|Storage|string_escape|none|replaceSuccessExitStatus|SupplementaryGroups|SUPPORT_URL|SuspendKeyIgnoreInhibited|SyslogFacility|SYSLOG_FACILITY|SyslogIdentifier|SYSLOG_IDENTIFIER|SyslogLevel|SyslogLevelPrefix|SYSLOG_PID|SystemCallFilter|SYSTEMD_ALIAS|_SYSTEMD_CGROUP|_SYSTEMD_OWNER_UID|SYSTEMD_READY|_SYSTEMD_SESSION|_SYSTEMD_UNIT|_SYSTEMD_USER_UNIT|SYSTEMD_WANTS|SystemKeepFree|SystemMaxFileSize|SystemMaxUse|SysVStartPriority|TCPCongestion|TCPWrapName|timeout|TimeoutSec|TimeoutStartSec|TimeoutStopSec|TimerSlackNSec|Transparent|_TRANSPORT|tries|TTYPath|TTYReset|TTYVHangup|TTYVTDisallocate|Type|_UID|UMask|Unit|User|UtmpIdentifier|VERSION|VERSION_ID|WantedBy|Wants|WatchdogSec|What|Where|WorkingDirectory)=" - preproc: "^\\.include\\>" - symbol: "=" - special: "^\\[(Unit|Install|Service|Socket|Timer)\\]" - identifier.class: "\\$MAINPID" - constant.bool: "\\b(true|false)\\b" - comment: "(^|[[:space:]])#([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/tcl.yaml000066400000000000000000000042671405030104300173110ustar00rootroot00000000000000filetype: tcl detect: filename: "\\.tcl$" header: "^#!.*/(env +)?tclsh( |$)" rules: - statement: "\\b(after|append|array|auto_execok|auto_import|auto_load|auto_load_index|auto_qualify|binary|break|case|catch|cd|clock|close|concat|continue|else|elseif|encoding|eof|error|eval|exec|exit|expr|fblocked|fconfigure|fcopy|file|fileevent|flush|for|foreach|format|gets|glob|global|history|if|incr|info|interp|join|lappend|lindex|linsert|list|llength|load|lrange|lreplace|lsearch|lset|lsort|namespace|open|package|pid|puts|pwd|read|regexp|regsub|rename|return|scan|seek|set|socket|source|split|string|subst|switch|tclLog|tell|time|trace|unknown|unset|update|uplevel|upvar|variable|vwait|while)\\b" - statement: "\\b(array anymore|array donesearch|array exists|array get|array names|array nextelement|array set|array size|array startsearch|array statistics|array unset)\\b" - statement: "\\b(string bytelength|string compare|string equal|string first|string index|string is|string last|string length|string map|string match|string range|string repeat|string replace|string to|string tolower|string totitle|string toupper|string trim|string trimleft|string trimright|string will|string wordend|string wordstart)\\b" - statement: "\\b(alarm|auto_load_pkg|bsearch|catclose|catgets|catopen|ccollate|cconcat|cequal|chgrp|chmod|chown|chroot|cindex|clength|cmdtrace|commandloop|crange|csubstr|ctoken|ctype|dup|echo|execl|fcntl|flock|fork|fstat|ftruncate|funlock|host_info|id|infox|keyldel|keylget|keylkeys|keylset|kill|lassign|lcontain|lempty|lgets|link|lmatch|loadlibindex|loop|lvarcat|lvarpop|lvarpush|max|min|nice|pipe|profile|random|readdir|replicate|scancontext|scanfile|scanmatch|select|server_accept|server_create|signal|sleep|sync|system|tclx_findinit|tclx_fork|tclx_load_tndxs|tclx_sleep|tclx_system|tclx_wait|times|translit|try_eval|umask|wait)\\b" - identifier.class: "proc[[:space:]]|(\\{|\\})" - symbol.operator: "(\\(|\\)|\\;|`|\\\\|\\$|<|>|!|=|&|\\|)" - constant.number: "\\b[0-9]+(\\.[0-9]+)?\\b" - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - identifier.var: "\\$\\{?[0-9A-Z_!@#$*?-]+\\}?" - comment: "(^|;)[[:space:]]*#.*" - indent-char.whitespace: "[[:space:]]+$" micro-2.0.9/runtime/syntax/tex.yaml000066400000000000000000000014211405030104300173140ustar00rootroot00000000000000filetype: tex detect: filename: "\\.tex$|\\.bib$|\\.cls$" rules: # colorize the identifiers of {} and [] - identifier: start: "\\{" end: "\\}" rules: [] - identifier: start: "\\[" end: "\\]" rules: [] # numbers - constant.number: "\\b[0-9]+(\\.[0-9]+)?([[:space:]](pt|mm|cm|in|ex|em|bp|pc|dd|cc|nd|nc|sp))?\\b" # let brackets have the default color again - default: "[{}\\[\\]]" - special: "[&\\\\]" # macros - statement: "\\\\@?[a-zA-Z_]+" - statement: "\\\\%" # comments - comment: start: "[^\\\\]%" end: "$" rules: [] - comment: start: "\\\\begin\\{comment\\}" end: "\\\\end\\{comment\\}" rules: [] micro-2.0.9/runtime/syntax/toml.yaml000066400000000000000000000033061405030104300174730ustar00rootroot00000000000000filetype: toml detect: filename: "\\.toml" rules: # Punctuation - symbol: '[=,\.]' - symbol.brackets: '[{\[\]}]' # Strings - constant.string: start: '"""' end: '\"{3,5}' skip: '\\.' rules: - constant.specialChar: '\\u[[:xdigit:]]{4}' - constant.specialChar: '\\U[[:xdigit:]]{8}' - constant.specialChar: '\\[btnfr"\\]' - constant.string: start: '"' end: '"' skip: '\\.' rules: - constant.specialChar: '\\u[[:xdigit:]]{4}' - constant.specialChar: '\\U[[:xdigit:]]{8}' - constant.specialChar: '\\[btnfr"\\]' - constant.string: start: "'''" end: "'{3,5}" rules: [] - constant.string: start: "'" end: "'" rules: [] # Integer - constant.number: '[+-]?(\d+_)*\d+\b' - constant.number: '(0x([[:xdigit:]]+_)*[[:xdigit:]]+|0o([0-7]_)*[0-7]+|0b([01]+_)*[01]+)' # Float - constant.number: '[+-]?(\d+_)*\d+\.(\d+_)*\d+' - constant.number: '[+-]?(\d+_)*\d+(\.(\d+_)*\d+)?[Ee][+-]?(\d+_)*\d+' - constant.number: '(\+|-)(inf|nan)' # Bare key, keys starting with a digit or dash are ambiguous with numbers and are skipped - identifier: '\b[A-Za-z_][A-Za-z0-9_-]*\b' # Boolean and inf, nan without sign - constant.bool.true: '\btrue\b' - constant.bool.false: '\bfalse\b' - constant.number: '\b(inf|nan)\b' # Date and Time - constant: '\d+-\d{2}-\d{2}([T ]\d{2}:\d{2}:\d{2}(\.\d+)?([+-]\d{2}:\d{2}|Z)?)?' - constant: '\d{2}:\d{2}:\d{2}(\.\d+)?' # Comments - comment: start: "#" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/twig.yaml000066400000000000000000000047751405030104300175050ustar00rootroot00000000000000filetype: twig detect: filename: "\\.twig$" rules: - include: "html" - symbol.tag: start: "\\{\\{[[:space:]]" end: "[[:space:]]\\}\\}" rules: - identifier: "\\b(abs|batch|capitalize|convert|encoding|date(_modify)?|default|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|round|slice|sort|split|striptags|title|trim|upper|url_encode)\\b" - identifier.class: "\\b(attribute|block|constant|cycle|date|dump|include|max|min|parent|random|range|source|template_from_string)\\b" - type.keyword: "\\b(and|as|constant|defined|divisibleby|empty|even|false|in|is|iterable|not|null|odd|or|same(as)?|true|with)\\b" - symbol.operator: "[.:;,+*?|=!\\%]|<|>|/|-|&" - symbol.brackets: "[(){}]|\\[|\\]" - constant.number: "\\b[0-9]+\\b|\\b0x[0-9A-Fa-f]+\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\" rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\" rules: - constant.specialChar: "\\\\." - symbol.tag: start: "\\{%[[:space:]]" end: "[[:space:]]%\\}" rules: - identifier: "\\b(abs|batch|capitalize|convert|encoding|date(_modify)?|default|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|round|slice|sort|split|striptags|title|trim|upper|url_encode)\\b" - identifier.class: "\\b(attribute|block|constant|cycle|date|dump|include|max|min|parent|random|range|source|template_from_string)\\b" - type.keyword: "\\b(and|as|constant|defined|divisibleby|empty|even|false|in|is|iterable|not|null|odd|or|same(as)?|true|with)\\b" - symbol.operator: "[.:;,+*?|=!\\%]|<|>|/|-|&" - symbol.brackets: "[(){}]|\\[|\\]" - constant.number: "\\b[0-9]+\\b|\\b0x[0-9A-Fa-f]+\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\" rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\" rules: - constant.specialChar: "\\\\." - comment: start: "\\{#" end: "#\\}" rules: [] micro-2.0.9/runtime/syntax/typescript.yaml000066400000000000000000000033251405030104300207270ustar00rootroot00000000000000filetype: typescript detect: filename: "\\.tsx?$" rules: - constant.number: "\\b[-+]?([1-9][0-9]*|0[0-7]*|0x[0-9a-fA-F]+)([uU][lL]?|[lL][uU]?)?\\b" - constant.number: "\\b[-+]?([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)([EePp][+-]?[0-9]+)?[fFlL]?" - constant.number: "\\b[-+]?([0-9]+[EePp][+-]?[0-9]+)[fFlL]?" - identifier: "[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[(]" - statement: "\\b(abstract|as|async|await|break|case|catch|class|const|constructor|continue)\\b" - statement: "\\b(debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from)\\b" - statement: "\\b(function|get|if|implements|import|in|instanceof|interface|is|let|module|namespace)\\b" - statement: "\\b(new|of|package|private|protected|public|require|return|set|static|super|switch)\\b" - statement: "\\b(this|throw|try|type|typeof|var|void|while|with|yield)\\b" - constant: "\\b(false|true|null|undefined|NaN)\\b" - type: "\\b(Array|Boolean|Date|Enumerator|Error|Function|Math)\\b" - type: "\\b(Number|Object|RegExp|String|Symbol)\\b" - type: "\\b(any|boolean|never|number|string|symbol)\\b" - statement: "[-+/*=<>!~%?:&|]" - constant: "/[^*]([^/]|(\\\\/))*[^\\\\]/[gim]*" - constant: "\\\\[0-7][0-7]?[0-7]?|\\\\x[0-9a-fA-F]+|\\\\[bfnrt'\"\\?\\\\]" - comment: start: "//" end: "$" rules: [] - comment: start: "/\\*" end: "\\*/" rules: - todo: "TODO:?" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." micro-2.0.9/runtime/syntax/v.yaml000066400000000000000000000045551405030104300167740ustar00rootroot00000000000000filetype: v detect: rules: # Conditionals and control flow - keywords: "\\b(import|go|defer)\\b" - special: "\\b(or|break|continue|match|case|goto|return|none)\\b" - function: "\\b(fn)\\b" - main_function: "\\b(fn main\\(\\))" - optionals: "\\b(none|error\\()" - statement: "\\b(if|else|for|match)\\b" - assert: "\\b(assert)\\b" - symbol.operator: "\\b([-+/*=<>!~%&|^])\\b" - symbol.operator: "\\b(:=)\\b" - symbol.operator: "\\b(\\|\\|)\b" - symbol.operator: "\\b(\\&\\&)\\b" - compile_if: "\\b(\\$if|\\$else)\\b" - oses: "\\b(mac|macos|linux|windows|freebsd|openbsd|netbsd|dragonfly|js|android|solaris|haiku)\\b" # Types - symbol: "(,|\\.)" - btype: "\\b(bool)\\b" - ztype: "\\b(char|byte)\\b" - itype: "\\b(int|i(8|16|64)|u(8|16|32|64))\\b" - ftype: "\\b(f(32|64))\\b" - ptype: "\\b(uintptr|charptr|byteptr|voidptr)\\b" - atype: "\\b(array)\\b" - stype: "\\b(string|ustring)\\b" - mtype: "\\b(map)\\b" - type.keyword: "\\b(pub|mut|struct|enum|interface|module|type|const)\\b" - constant.bool: "\\b(true|false)\\b" # Brackets - symbol.brackets: "(\\{|\\})" - symbol.brackets: "(\\(|\\))" - symbol.brackets: "(\\[|\\])" # Numbers and strings - constant.number: "\\b([0-9]+|0x[0-9a-fA-F]*)\\b|'.'" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "%." - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - error: "..+" - constant.specialChar: "%." - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]" - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})" - constant.string: start: "`" end: "`" rules: [] - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" - function.attribute: start: "^\\[" end: "\\]$" rules: - known: "\\b(deprecated|inline|typedef|if)\\b" micro-2.0.9/runtime/syntax/vala.yaml000066400000000000000000000017101405030104300174400ustar00rootroot00000000000000filetype: vala detect: filename: "\\.vala$" rules: - type: "\\b(float|double|bool|u?char|u?int(8|16|32|64)?|u?short|u?long|void|s?size_t|unichar)\\b" - identifier.class: "[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[()]" - statement: "\\b(for|if|while|do|else|case|default|switch|try|throw|catch)\\b" - statement: "\\b(inline|typedef|struct|enum|union|extern|static|const)\\b" - statement: "\\b(operator|new|delete|return|null)\\b" - statement: "\\b(class|override|private|public|signal|this|weak)\\b" - special: "\\b(goto|break|continue)\\b" - constant.bool: "\\b(true|false)\\b" - constant.number: "\\b([0-9]+)\\b" - symbol.operator: "[\\-+/*=<>?:!~%&|]|->" - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'" - comment: "(^|[[:space:]])//.*" - comment: start: "/\\*" end: "\\*/" rules: [] - todo: "TODO:?" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/verilog.yaml000066400000000000000000000057011405030104300201700ustar00rootroot00000000000000filetype: verilog detect: filename: "\\.(v|vh|sv|svh)$" rules: - preproc: "\\b(module|package|program|endmodule|endpackage|endprogram)\\b" - type.keyword: "\\b(task|interface|class|endtask|endinterface|endclass)\\b" # builtin functions like $display - special: "\\$[0-9A-Za-z_]+" # Verilog keywords - statement: "\\b(always|and|assign|automatic|begin|buf|bufif0|bufif1|case|casex|casez|cell|cmos|config)\\b" - statement: "\\b(deassign|default|defparam|design|disable|edge|else|end|endcase|endconfig|endfunction|endgenerate)\\b" - statement: "\\b(endprimitive|endspecify|endtable|event|for|force|forever|fork|function|generate)\\b" - statement: "\\b(genvar|highz0|highz1|if|iff|ifnone|incdir|include|initial|input|instance|join)\\b" - statement: "\\b(large|liblist|library|localparam|macromodule|medium|nand|negedge|nmos|nor|noshowcancelled)\\b" - statement: "\\b(not|notif0|notif1|null|or|output|parameter|pmos|posedge|primitive|pull0|pull1|pulldown|pullup)\\b" - statement: "\\b(pulsestyle_onevent|pulsestyle_ondetect|rcmos|realtime|reg|release|repeat|rnmos|rpmos|rtran)\\b" - statement: "\\b(rtranif0|rtranif1|scalared|showcancelled|small|specify|specparam|strong0|strong1|supply0)\\b" - statement: "\\b(supply1|table|time|tran|tranif0|tranif1|tri0|tri1|triand|trior|trireg|use|uwire)\\b" - statement: "\\b(vectored|wait|wand|weak0|weak1|while|wor|xnor|xor)\\b" # SystemVerilog keywords - statement: "\\b(alias|always_comb|always_ff|always_latch|assert|assume|before|bind|bins|binsof|break)\\b" - statement: "\\b(chandle|clocking|const|constraint|context|continue|cover|covergroup|coverpoint|cross|dist|do)\\b" - statement: "\\b(endclocking|endgroup|endproperty|endsequence|enum)\\b" - statement: "\\b(expect|export|extends|extern|final|first_match|foreach|forkjoin|ignore_bins|illegal_bins|import)\\b" - statement: "\\b(inside|intersect|join_any|join_none|local|longint|matches|modport|new)\\b" - statement: "\\b(packed|priority|property|protected|pure|rand|randc|randcase|randsequence|ref|return)\\b" - statement: "\\b(sequence|solve|static|struct|super|tagged|this|throughout|timeprecision)\\b" - statement: "\\b(timeunit|type|typedef|union|unique|virtual|wait_order|wildcard|with|within)\\b" # types - type.keyword: "\\b(int|integer|logic|wire|tri|unsigned|signed|inout|var|shortint|shortreal|real|void|string|bit|byte)\\b" # constants - constant.number: "\\b[0-9]+\\b" - constant.number: "\\b'[su]?[dboh][0-9xzXZa-fA-F]+\\b" # .asdf(...) argument syntax - special: "\\.((\\*)|([A-Za-z][A-Za-z0-9_]*))" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/vhdl.yaml000066400000000000000000000045471405030104300174650ustar00rootroot00000000000000filetype: vhdl detect: filename: "\\.vhdl?$" rules: - type: "(i)\\b(string|integer|natural|positive|(un)?signed|std_u?logic(_vector)?|bit(_vector)?|boolean|u?x01z?|array|range)\\b" - identifier: "(?i)library[[:space:]]+[a-zA-Z_0-9]+" - identifier: "(?i)use[[:space:]]+[a-zA-Z_0-9\\.]+" - identifier: "(?i)component[[:space:]]+[a-zA-Z_0-9]+" - identifier: "(?i)(architecture|configuration)[[:space:]]+[a-zA-Z_0-9]+[[:space:]]+of[[:space:]]+[a-zA-Z_0-9]+" - identifier: "(?i)(entity|package)[[:space:]]+[a-zA-Z_0-9]+[[:space:]]+is" - identifier: "(?i)end[[:space:]]+((architecture|entity|component|process|package|generate)[[:space:]]+)?[a-zA-Z_0-9]+" - statement: "(?i)\\b(abs|access|after|alias|all|and|architecture|assert|attribute)\\b" - statement: "(?i)\\b(begin|block|body|buffer|bus|case|component|configuration|constant)\\b" - statement: "(?i)\\b(disconnect|downto|else|elsif|end|entity|exit)\\b" - statement: "(?i)\\b(file|for|function|generate|generic|guarded)\\b" - statement: "(?i)\\b(if|impure|in|inertial|inout|is)\\b" - statement: "(?i)\\b(label|library|linkage|literal|loop|map|mod)\\b" - statement: "(?i)\\b(nand|new|next|nor|not|null|of|on|open|or|others|out)\\b" - statement: "(?i)\\b(package|port|postponed|procedure|process|pure)\\b" - statement: "(?i)\\b(range|record|register|reject|rem|report|return|rol|ror)\\b" - statement: "(?i)\\b(select|severity|shared|signal|sla|sll|sra|srl|subtype)\\b" - statement: "(?i)\\b(then|to|transport|type|unaffected|units|until|use)\\b" - statement: "(?i)\\b(variable|wait|when|while|with|xnor|xor)\\b" - statement: "(?i)'(base|left|right|high|low|pos|val|succ|pred|leftof|rightof|image|(last_)?value)" - statement: "(?i)'((reverse_)?range|length|ascending|event|stable)" - statement: "(?i)'(simple|path|instance)_name" - statement: "(?i)\\b(std_match|(rising|falling)_edge|is_x)\\b" - statement: "(?i)\\bto_(unsigned|signed|integer|u?x01z?|stdu?logic(vector)?)\\b" - symbol.operator: "(\\+|-|\\*|/|&|<|>|=|\\.|:)" - constant.number: "(?i)'([0-1]|u|x|z|w|l|h|-)'|[box]?\"([0-1a-fA-F]|u|x|z|w|l|h|-)+\"" - constant.number: "(?i)\\b[0-9\\._]+(e[\\-]?[0-9]+)?( ?[fpnum]?s)?\\b" - constant.bool: "(?i)\\b(true|false)\\b" - constant: "(?i)\\b(note|warning|error|failure)\\b" - constant.string: "\"[^\"]*\"" - comment: "--.*" micro-2.0.9/runtime/syntax/vi.yaml000066400000000000000000000013071405030104300171350ustar00rootroot00000000000000filetype: vi detect: filename: "(^|/|\\.)(ex|vim)rc$|\\.vim" rules: - identifier: "[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[()]" - statement: "\\b([nvxsoilc]?(nore|un)?map|[nvlx]n|[ico]?no|[cilovx][um]|s?unm)\\b" - statement: "\\b(snor|nun|nm|set|if|endif|let|unlet)\\b" - statement: "[!&=]" - constant.number: "\\b[0-9]+\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." - comment: start: "\"" end: "$" rules: [] micro-2.0.9/runtime/syntax/vue.yaml000066400000000000000000000073441405030104300173250ustar00rootroot00000000000000filetype: vue detect: filename: "\\.vue$" rules: - default: start: "" end: "" limit-group: symbol.tag rules: - error: "<[^!].*?>" - symbol.tag: "(?i)<[/]?(a|a(bbr|ddress|rea|rticle|side|udio)|b|b(ase|d(i|o)|lockquote|r|utton)|ca(nvas|ption)|center|cite|co(de|l|lgroup)|d(ata|atalist|d|el|etails|fn|ialog|l|t)|em|embed|fieldset|fig(caption|ure)|form|iframe|h[1-6]|hr|i|img|in(put|s)|kbd|keygen|label|legend|li|link|ma(in|p|rk)|menu|menuitem|met(a|er)|nav|noscript|o(bject|l|pt(group|ion)|utput)|p|param|picture|pre|progress|q|r(p|t|uby)|s|samp|se(ction|lect)|svg|small|source|span|strong|su(b|p|mmary)|textarea|time|track|u|ul|var|video|wbr)( .*)*?>" - symbol.tag.extended: "(?i)<[/]?(body|div|html|head(er)?|footer|title|table|t(body|d|h(ead)?|r|foot))( .*)*?>" - preproc: "(?i)<[/]?(script|style)( .*)*?>" - special: "&[^;[[:space:]]]*;" - identifier: "(alt|bgcolor|class|height|href|id|label|longdesc|name|on(click|focus|load|mouseover)|placeholder|size|span|src|style|target|type|value|width)=" - symbol: "[:=]" - constant.string: "\"[^\"]*\"" - constant.number: "(?i)#[0-9A-F]{6,6}" - symbol.tag: "<|>" - constant.string.url: "(ftp(s)?|http(s)?|git|chrome)://[^ ]+" - comment: "" #- preproc: "" - comment.block: start: "" rules: [] # Bootstrap - symbol.tag.extended: "(?i)<[/]?(b-alert|b-aspect|b-avatar|b-badge|b-icon|b-breadcrumb|b-button-group|b-button-toolbar|b-button|b-calendar|b-card-text|b-card-input|b-card|b-carousel-slide|b-carousel|b-collapse|b-dropdown|b-dropdown-item|b-dropdown-divider|b-embed|b-form-checkbox-group|b-form-checkbox|b-form-datepicker|b-form-file|b-form-group|b-form-input|b-form-radio|b-form-rating|b-form-select|b-form-spinbutton|b-form-tags|b-form-textarea|b-form|b-form-timepicker|b-img-lazy|b-img|b-input-group|b-jumbotron|b-input|b-container|b-row|b-col|b-link|b-list-group|b-list-group-item|b-media|b-modal|b-nav|b-nav-item|b-nav-item-dropdown|b-nav-text|b-nav-form|b-navbar|b-navbar-brand|b-navbar-toggle|b-navbar-nav|b-overlay|b-pagination|b-pagination-nav|b-popover|b-progress|b-progress-bar|b-sidebar|b-skeleton-wrapper|b-skeleton|b-spinner|b-table|b-table-lite|b-table-simple|b-tabs|b-tab|b-time|b-toast|b-tooltip)\\b" - identifier: "(variant|title|show|shadow|icon|align-h|align-v|label-for|@submit|tag|img-alt|img-src|data-toggle|data-target|aria-controls|aria-expanded|aria-label|aria-disabled|tabindex|:interval|background|img-width|img-height|@sliding-start|@sliding-end|cols|header|@reset)=" - symbol: "[:=]" # Vue - symbol.tag.extended: "(?i)<[/]?(component|transition|transition-group|keep-alive|slot)\\b" - identifier: "(v-text|v-html|v-show|v-if|v-else|v-else-if|v-for|v-on|v-bind|v-model|v-slot|v-pre|v-cloak|v-once|key|ref|is|@click)=" - symbol: "[:=]" # Vue-router - symbol.tag.extended: "(?i)<[/]?(router-link|router-view)\\b" - identifier: "(to|v-slot)=" - symbol: "[:=]" - default: start: "" limit-group: symbol.tag rules: - include: "javascript" - default: start: "" end: "" rules: - include: "typescript" - default: start: "" end: "" limit-group: symbol.tag rules: - include: "css" micro-2.0.9/runtime/syntax/xml.yaml000066400000000000000000000014651405030104300173240ustar00rootroot00000000000000filetype: xml detect: filename: "\\.(xml|sgml?|rng|svg|plist)$" header: "<\\?xml.*\\?>" rules: - preproc: start: "" rules: [] - comment: start: "" rules: [] - symbol.tag: start: "<\\??" end: "\\??>" rules: - identifier: start: " " end: "=" rules: [] - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\." micro-2.0.9/runtime/syntax/xresources.yaml000066400000000000000000000006031405030104300207170ustar00rootroot00000000000000filetype: xresources detect: filename: "X(defaults|resources)$" rules: - special: "^[[:alnum:]]+\\*" - identifier.var: "\\*[[:alnum:]]+\\:" - constant.number: "\\b[0-9]+\\b" - symbol.operator: "[*:=]" - constant.bool: "\\b(true|false)\\b" - comment: "(^|[[:space:]])!([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/yaml.yaml000066400000000000000000000015071405030104300174630ustar00rootroot00000000000000filetype: yaml detect: filename: "\\.ya?ml$" header: "%YAML" rules: - type: "(^| )!!(binary|bool|float|int|map|null|omap|seq|set|str) " - constant: "\\b(YES|yes|Y|y|ON|on|TRUE|True|true|NO|no|N|n|OFF|off|FALSE|False|false)\\b" - statement: "(:[[:space:]]|\\[|\\]|:[[:space:]]+[|>]|^[[:space:]]*- )" - identifier: "[[:space:]][\\*&][A-Za-z0-9]+" - type: "[-.\\w]+:" - statement: ":" - special: "(^---|^\\.\\.\\.|^%YAML|^%TAG)" - constant.string: start: "(^| )\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "(^| )'" end: "'" skip: "(\\\\.)|('')" rules: - constant.specialChar: "\\\\." - comment: start: "#" end: "$" rules: [] micro-2.0.9/runtime/syntax/yum.yaml000066400000000000000000000005341405030104300173320ustar00rootroot00000000000000filetype: yum detect: filename: "\\.repo$|yum.*\\.conf$" rules: - identifier: "^[[:space:]]*[^=]*=" - constant.specialChar: "^[[:space:]]*\\[.*\\]$" - statement: "\\$(releasever|arch|basearch|uuid|YUM[0-9])" - comment: "(^|[[:space:]])#([^{].*)?$" - indent-char.whitespace: "[[:space:]]+$" - indent-char: " + +| + +" micro-2.0.9/runtime/syntax/zig.yaml000066400000000000000000000033061405030104300173110ustar00rootroot00000000000000filetype: zig detect: filename: "\\.zig$" rules: # Reserved words - statement: "\\b(align|allowzero|and|asm|async|await|break|callconv|catch|comptime|const|continue|defer|else|errdefer|error|export|extern|fn|for|if|inline|noalias|noinline|nosuspend|or|orelse|packed|pub|resume|return|linksection|suspend|switch|test|threadlocal|try|unreachable|usingnamespace|var|volatile|while)\\b" # builtin functions - special: "@[a-zA-Z_]+" # Primitive Types - type: "\\b(anyframe|anytype|anyerror|bool|comptime_int|comptime_float|enum|f(16|32|64|128)|isize|noreturn|struct|type|union|usize|void)\\b" - type: "\\b(c_u?(short|int|long(long)?)|c_longdouble|c_void)\\b" - type: "\\b((i|u)[0-9]+)\\b" # Operators - symbol.operator: "[-!|=;%.+^*:&?<>~]" # Parenthesis - symbol.brackets: "[(){}]|\\[|\\]" # Constants - constant: "\\b(null|undefined)\\b" - constant.number: "\\b(0b[01_]+|0o[0-7_]+|[0-9_]+|0x[a-fA-F0-9_]+)\\b" - constant.bool: "\\b(true|false)\\b" - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\([nrt\\\\'\"]|x[a-fA-F0-9]{2}|u{[a-fA-F0-9]+})" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - error: "..+" - constant.specialChar: "\\\\([nrt\\\\'\"]|x[a-fA-F0-9]{2}|u{[a-fA-F0-9]+})" - constant.string: start: "\\\\\\\\" end: "$" skip: "\\\\." rules: - constant.specialChar: "\\\\([nrt\\\\'\"]|x[a-fA-F0-9]{2}|u{[a-fA-F0-9]+})" - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/zscript.yaml000066400000000000000000000046631405030104300202250ustar00rootroot00000000000000filetype: zscript # Loosely based on the csharp.yaml definition # (?i) on everything because ZScript isn't case sensitive detect: filename: "(?i)\\.z(c|sc)$" rules: # ZScript only has one preprocessor directive and a required engine version declaration - preproc: "(?i)#include" - preproc: "(?i)version" # State labels ("goto" word overridden by state logic rule below) - symbol.tag: "(?i)[a-z0-9.]+:" - symbol.tag: "(?i)goto [a-z0-9]+[\\+0-9]*" # Classes - identifier.class: "(?i)class +[a-z0-9_]+ *((:) +[a-z0-9.]+)?" # Functions (open paren overridden by symbol.brackets rule because perl regex apparently doesn't support postive lookahead) - identifier: "(?i)[\\.]*[a-z0-9_]+[ ]*[(]+" # Variable types - type: "(?i)\\b(actor|object|vector2|vector3|name|string|color|sound|void|double|bool|int|float|float64|uint8|uint16|uint|int8|int16|TextureID|SpriteID|Array|voidptr|short|action|state|statelabel)\\b" # Keywords - statement: "(?i)\\b(class|default|private|static|native|return|if|else|for|while|do|deprecated|null|readonly|true|false|struct|extend|clearscope|vararg|ui|play|virtual|virtualscope|meta|Property|in|out|states|override|super|is|let|const|replaces|protected|self|abstract|enum|switch|case)\\b" # State logic keywords - special: "(?i)\\b(goto|loop|stop|break|continue|fail)\\b" # Symbols - symbol.operator: "[\\-+/*=<>?:!~%&|]" - symbol.brackets: "[(){}]|\\[|\\]" # Constants - constant.bool: "(?i)(\\b(true|false)\\b|NULL)" - constant.number: "(?i)\\b([0-9][.]*[0-9]*)+?\\b" - constant.number: "(?i)\\b(0x[A-Fa-f0-9_]+)?\\b" - constant.number: "(?i)\\b(0b[0-1_]+)[FL]?\\b" #- constant.number: "(?i)\\b(([0-9][.]*[0-9]*)+|0x[A-Fa-f0-9_]+|0b[0-1_]+)[FL]?\\b" # Strings - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\([btnfr]|'|\\\"|\\\\)" - constant.specialChar: "\\\\u[A-Fa-f0-9]{4}" - constant.string: start: "'" end: "'" skip: "\\\\." rules: - constant.specialChar: "\\\\([btnfr]|'|\\\"|\\\\)" - constant.specialChar: "\\\\u[A-Fa-f0-9]{4}" # Comments - comment: start: "//" end: "$" rules: - todo: "(TODO|XXX|FIXME):?" - comment: start: "/\\*" end: "\\*/" rules: - todo: "(TODO|XXX|FIXME):?" micro-2.0.9/runtime/syntax/zsh.yaml000066400000000000000000000041221405030104300173210ustar00rootroot00000000000000filetype: zsh detect: filename: "(\\.zsh$|\\.?(zshenv|zprofile|zshrc|zlogin|zlogout)$)" header: "^#!.*/(env +)?zsh( |$)" rules: ## Numbers - constant.number: "\\b[0-9]+\\b" ## Conditionals and control flow - statement: "\\b(always|break|bye|case|continue|disown|do|done|elif|else|esac|exit|fi|for|function|if|in|local|read|return|select|shift|then|time|until|while)\\b" - statement: "(\\{|\\}|\\(|\\)|\\;|\\]|\\[|`|\\\\|\\$|<|>|!|=|&|\\|)" ## Conditional flags - special: "-[Ldefgruwx]\\b" - special: "-(eq|ne|gt|lt|ge|le|s|n|z)\\b" ## Bash-inherited - statement: "\\b((un)?alias|bindkey|builtin|cd|declare|eval|exec|export|jobs|let|popd|pushd|set|source|typeset|umask|unset)\\b" ## ZSH-specific - type: "\\b(add-zsh-hook|autoload|chdir|compinit|dirs|(dis|en)able|echotc|emulate|print|prompt(init)?|(un)?setopt|zle|zmodload|zstyle|whence)\\b" ## Common linux commands - statement: "\\b((g|ig)?awk|find|\\w{0,4}grep|kill|killall|\\w{0,4}less|make|pkill|sed|tar)\\b" ## Coreutils commands - statement: "\\b(base64|basename|cat|chcon|chgrp|chmod|chown|chroot|cksum|comm|cp|csplit|cut|date|dd|df|dir|dircolors|dirname|du|echo|env|expand|expr|factor|false|fmt|fold|head|hostid|id|install|join|link|ln|logname|ls|md5sum|mkdir|mkfifo|mknod|mktemp|mv|nice|nl|nohup|nproc|numfmt|od|paste|pathchk|pinky|pr|printenv|printf|ptx|pwd|readlink|realpath|rm|rmdir|runcon|seq|(sha1|sha224|sha256|sha384|sha512)sum|shred|shuf|sleep|sort|split|stat|stdbuf|stty|sum|sync|tac|tail|tee|test|timeout|touch|tr|true|truncate|tsort|tty|uname|unexpand|uniq|unlink|users|vdir|wc|who|whoami|yes)\\b" ## Function definition - identifier: "^\\s+(function\\s+)[0-9A-Z_]+\\s+\\(\\)" # (i) ## Variables - identifier: "\\$\\{?[0-9A-Z_!@#$*?-]+\\}?" #(i) - constant.string: start: "\"" end: "\"" skip: "\\\\." rules: - constant.specialChar: "\\\\." - constant.string: start: "'" end: "'" rules: [] - comment: start: "(^|\\s)#" end: "$" rules: [] micro-2.0.9/snapcraft.yaml000066400000000000000000000015561405030104300154750ustar00rootroot00000000000000name: micro summary: A modern and intuitive terminal-based text editor description: | Micro is a terminal-based text editor that aims to be easy to use and intuitive, while also taking advantage of the full capabilities of modern terminals. confinement: classic adopt-info: micro apps: micro: command: bin/micro parts: micro: source: . source-type: git plugin: nil build-packages: [make] build-snaps: [go] build-attributes: [no-patchelf] override-pull: | snapcraftctl pull version="$(go run $SNAPCRAFT_PART_SRC/tools/build-version.go)" [ -n "$(echo $version | grep "dev")" ] && grade=devel || grade=stable snapcraftctl set-version "$version" snapcraftctl set-grade "$grade" override-build: | make build-tags mkdir $SNAPCRAFT_PART_INSTALL/bin mv ./micro $SNAPCRAFT_PART_INSTALL/bin/ micro-2.0.9/tools/000077500000000000000000000000001405030104300137615ustar00rootroot00000000000000micro-2.0.9/tools/build-date.go000066400000000000000000000006421405030104300163240ustar00rootroot00000000000000package main import ( "fmt" "os" "strconv" "time" ) func main() { var buildTime time.Time epoch := os.Getenv("SOURCE_DATE_EPOCH") if epoch != "" { i, err := strconv.Atoi(epoch) if err != nil { fmt.Errorf("SOURCE_DATE_EPOCH is not a valid integer") os.Exit(1) } buildTime = time.Unix(int64(i), 0) } else { buildTime = time.Now().Local() } fmt.Println(buildTime.Format("January 02, 2006")) } micro-2.0.9/tools/build-version.go000066400000000000000000000036401405030104300170750ustar00rootroot00000000000000package main import ( "fmt" "os/exec" "strings" "github.com/blang/semver" ) func getTag(match ...string) (string, *semver.PRVersion) { args := append([]string{ "describe", "--tags", }, match...) if tag, err := exec.Command("git", args...).Output(); err != nil { return "", nil } else { tagParts := strings.Split(string(tag), "-") if len(tagParts) == 3 { if ahead, err := semver.NewPRVersion(tagParts[1]); err == nil { return tagParts[0], &ahead } } else if len(tagParts) == 4 { if ahead, err := semver.NewPRVersion(tagParts[2]); err == nil { return tagParts[0] + "-" + tagParts[1], &ahead } } return string(tag), nil } } func main() { if tags, err := exec.Command("git", "tag").Output(); err != nil || len(tags) == 0 { // no tags found -- fetch them exec.Command("git", "fetch", "--tags").Run() } // Find the last vX.X.X Tag and get how many builds we are ahead of it. versionStr, ahead := getTag("--match", "v*") version, err := semver.ParseTolerant(versionStr) if err != nil { // no version tag found so just return what ever we can find. fmt.Println("0.0.0-unknown") return } // Get the tag of the current revision. tag, _ := getTag("--exact-match") if tag == versionStr { // Seems that we are going to build a release. // So the version number should already be correct. fmt.Println(version.String()) return } // If we don't have any tag assume "dev" if tag == "" || strings.HasPrefix(tag, "nightly") { tag = "dev" } // Get the most likely next version: if !strings.Contains(version.String(), "rc") { version.Patch = version.Patch + 1 } if pr, err := semver.NewPRVersion(tag); err == nil { // append the tag as pre-release name version.Pre = append(version.Pre, pr) } if ahead != nil { // if we know how many commits we are ahead of the last release, append that too. version.Pre = append(version.Pre, *ahead) } fmt.Println(version.String()) } micro-2.0.9/tools/compile-linux.sh000077500000000000000000000024521405030104300171100ustar00rootroot00000000000000cd .. mkdir -p binaries mkdir -p micro-$1 cp LICENSE micro-$1 cp README.md micro-$1 cp LICENSE-THIRD-PARTY micro-$1 HASH="$(git rev-parse --short HEAD)" VERSION="$(go run tools/build-version.go)" DATE="$(go run tools/build-date.go)" ADDITIONAL_GO_LINKER_FLAGS="$(go run tools/info-plist.go $VERSION)" echo "Linux 64" GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -X main.Version=$1 -X main.CommitHash=$HASH -X 'main.CompileDate=$DATE'" -o micro-$1/micro ./cmd/micro tar -czf micro-$1-linux64.tar.gz micro-$1 mv micro-$1-linux64.tar.gz binaries echo "Linux 32" GOOS=linux GOARCH=386 go build -ldflags "-s -w -X main.Version=$1 -X main.CommitHash=$HASH -X 'main.CompileDate=$DATE'" -o micro-$1/micro ./cmd/micro tar -czf micro-$1-linux32.tar.gz micro-$1 mv micro-$1-linux32.tar.gz binaries echo "Linux arm 32" GOOS=linux GOARCH=arm go build -ldflags "-s -w -X main.Version=$1 -X main.CommitHash=$HASH -X 'main.CompileDate=$DATE'" -o micro-$1/micro ./cmd/micro tar -czf micro-$1-linux-arm.tar.gz micro-$1 mv micro-$1-linux-arm.tar.gz binaries echo "Linux arm 64" GOOS=linux GOARCH=arm64 go build -ldflags "-s -w -X main.Version=$1 -X main.CommitHash=$HASH -X 'main.CompileDate=$DATE'" -o micro-$1/micro ./cmd/micro tar -czf micro-$1-linux-arm64.tar.gz micro-$1 mv micro-$1-linux-arm64.tar.gz binaries rm -rf micro-$1 micro-2.0.9/tools/cross-compile.sh000077500000000000000000000052601405030104300171020ustar00rootroot00000000000000cd .. mkdir -p binaries mkdir -p micro-$1 cp LICENSE micro-$1 cp README.md micro-$1 cp LICENSE-THIRD-PARTY micro-$1 cp assets/packaging/micro.1 micro-$1 cp assets/packaging/micro.desktop micro-$1 cp assets/micro-logo-mark.svg micro-$1/micro.svg HASH="$(git rev-parse --short HEAD)" VERSION="$(go run tools/build-version.go)" DATE="$(go run tools/build-date.go)" ADDITIONAL_GO_LINKER_FLAGS="$(go run tools/info-plist.go $VERSION)" # Mac echo "OSX 64" GOOS=darwin GOARCH=amd64 make build mv micro micro-$1 tar -czf micro-$1-osx.tar.gz micro-$1 mv micro-$1-osx.tar.gz binaries # Linux echo "Linux 64" GOOS=linux GOARCH=amd64 make build ./tools/package-deb.sh $1 mv micro-$1-amd64.deb binaries mv micro micro-$1 tar -czf micro-$1-linux64.tar.gz micro-$1 mv micro-$1-linux64.tar.gz binaries echo "Linux 64 fully static" CGO_ENABLED=0 GOOS=linux GOARCH=amd64 make build mv micro micro-$1 tar -czf micro-$1-linux64-static.tar.gz micro-$1 mv micro-$1-linux64-static.tar.gz binaries echo "Linux 32" GOOS=linux GOARCH=386 make build mv micro micro-$1 tar -czf micro-$1-linux32.tar.gz micro-$1 mv micro-$1-linux32.tar.gz binaries echo "Linux ARM 32" GOOS=linux GOARCH=arm make build mv micro micro-$1 tar -czf micro-$1-linux-arm.tar.gz micro-$1 mv micro-$1-linux-arm.tar.gz binaries echo "Linux ARM 64" GOOS=linux GOARCH=arm64 make build mv micro micro-$1 tar -czf micro-$1-linux-arm64.tar.gz micro-$1 mv micro-$1-linux-arm64.tar.gz binaries # NetBSD echo "NetBSD 64" GOOS=netbsd GOARCH=amd64 make build mv micro micro-$1 tar -czf micro-$1-netbsd64.tar.gz micro-$1 mv micro-$1-netbsd64.tar.gz binaries echo "NetBSD 32" GOOS=netbsd GOARCH=386 make build mv micro micro-$1 tar -czf micro-$1-netbsd32.tar.gz micro-$1 mv micro-$1-netbsd32.tar.gz binaries # OpenBSD echo "OpenBSD 64" GOOS=openbsd GOARCH=amd64 make build mv micro micro-$1 tar -czf micro-$1-openbsd64.tar.gz micro-$1 mv micro-$1-openbsd64.tar.gz binaries echo "OpenBSD 32" GOOS=openbsd GOARCH=386 make build mv micro micro-$1 tar -czf micro-$1-openbsd32.tar.gz micro-$1 mv micro-$1-openbsd32.tar.gz binaries # FreeBSD echo "FreeBSD 64" GOOS=freebsd GOARCH=amd64 make build mv micro micro-$1 tar -czf micro-$1-freebsd64.tar.gz micro-$1 mv micro-$1-freebsd64.tar.gz binaries echo "FreeBSD 32" GOOS=freebsd GOARCH=386 make build mv micro micro-$1 tar -czf micro-$1-freebsd32.tar.gz micro-$1 mv micro-$1-freebsd32.tar.gz binaries rm micro-$1/micro # Windows echo "Windows 64" GOOS=windows GOARCH=amd64 make build mv micro.exe micro-$1 zip -r -q -T micro-$1-win64.zip micro-$1 mv micro-$1-win64.zip binaries echo "Windows 32" GOOS=windows GOARCH=386 make build mv micro.exe micro-$1 zip -r -q -T micro-$1-win32.zip micro-$1 mv micro-$1-win32.zip binaries rm -rf micro-$1 micro-2.0.9/tools/go-bindata/000077500000000000000000000000001405030104300157665ustar00rootroot00000000000000micro-2.0.9/tools/info-plist.go000066400000000000000000000020441405030104300163740ustar00rootroot00000000000000package main import ( "fmt" "io/ioutil" "os" "runtime" ) func check(e error) { if e != nil { panic(e) } } func main() { if runtime.GOOS == "darwin" { if len(os.Args) == 2 { rawInfoPlistString := ` CFBundleIdentifier io.github.micro-editor CFBundleName micro CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleShortVersionString ` + os.Args[1] + ` ` infoPlistData := []byte(rawInfoPlistString) err := ioutil.WriteFile("/tmp/micro-info.plist", infoPlistData, 0644) check(err) fmt.Println("-linkmode external -extldflags -Wl,-sectcreate,__TEXT,__info_plist,/tmp/micro-info.plist") } else { panic("missing argument for version number!") } } } micro-2.0.9/tools/nightly-release.sh000077500000000000000000000024301405030104300174130ustar00rootroot00000000000000# This script updates the nightly release on Github for micro # Must be run from inside the micro git repository commitID=$(git rev-parse --short HEAD) go run remove-nightly-assets.go echo "Cross compiling binaries" ./cross-compile.sh $1 mv ../binaries . MESSAGE=$'Nightly build\n\nAutogenerated nightly build of micro' echo "Updating release" hub release edit nightly \ --prerelease \ --draft=false \ --message "$MESSAGE (please DISREGARD the creation date of this Github release). Assets uploaded on $(date) for commit $commitID." \ --attach "binaries/micro-$1-osx.tar.gz" \ --attach "binaries/micro-$1-linux64.tar.gz" \ --attach "binaries/micro-$1-linux64-static.tar.gz" \ --attach "binaries/micro-$1-amd64.deb" \ --attach "binaries/micro-$1-linux32.tar.gz" \ --attach "binaries/micro-$1-linux-arm.tar.gz" \ --attach "binaries/micro-$1-linux-arm64.tar.gz" \ --attach "binaries/micro-$1-freebsd64.tar.gz" \ --attach "binaries/micro-$1-freebsd32.tar.gz" \ --attach "binaries/micro-$1-openbsd64.tar.gz" \ --attach "binaries/micro-$1-openbsd32.tar.gz" \ --attach "binaries/micro-$1-netbsd64.tar.gz" \ --attach "binaries/micro-$1-netbsd32.tar.gz" \ --attach "binaries/micro-$1-win64.zip" \ --attach "binaries/micro-$1-win32.zip" micro-2.0.9/tools/package-deb.sh000077500000000000000000000003671405030104300164510ustar00rootroot00000000000000fpm -s dir -t deb -p micro-$1-amd64.deb --name micro --license mit --version $1 --deb-recommends xclip --description "A modern and intuitive terminal-based text editor" ./micro=/usr/bin/micro ./assets/packaging/micro.1=/usr/share/man/man1/micro.1 micro-2.0.9/tools/pre-release.sh000077500000000000000000000022631405030104300165270ustar00rootroot00000000000000# This script creates releases on Github for micro # You must have the correct Github access token to run this script # $1 is the title, $2 is the description commitID=$(git rev-parse HEAD) tag="v$1" echo "Creating tag" git tag $tag $commitID hub push --tags echo "Cross compiling binaries" ./cross-compile.sh $1 mv ../binaries . NL=$'\n' echo "Creating new release" hub release create $tag \ --prerelease \ --message "$1${NL}${NL}$2" \ --attach "binaries/micro-$1-osx.tar.gz" \ --attach "binaries/micro-$1-linux64.tar.gz" \ --attach "binaries/micro-$1-linux64-static.tar.gz" \ --attach "binaries/micro-$1-amd64.deb" \ --attach "binaries/micro-$1-linux32.tar.gz" \ --attach "binaries/micro-$1-linux-arm.tar.gz" \ --attach "binaries/micro-$1-linux-arm64.tar.gz" \ --attach "binaries/micro-$1-freebsd64.tar.gz" \ --attach "binaries/micro-$1-freebsd32.tar.gz" \ --attach "binaries/micro-$1-openbsd64.tar.gz" \ --attach "binaries/micro-$1-openbsd32.tar.gz" \ --attach "binaries/micro-$1-netbsd64.tar.gz" \ --attach "binaries/micro-$1-netbsd32.tar.gz" \ --attach "binaries/micro-$1-win64.zip" \ --attach "binaries/micro-$1-win32.zip" micro-2.0.9/tools/release.sh000077500000000000000000000022401405030104300157360ustar00rootroot00000000000000# This script creates releases on Github for micro # You must have the correct Github access token to run this script # $1 is the title, $2 is the description commitID=$(git rev-parse HEAD) tag="v$1" echo "Creating tag" git tag $tag $commitID hub push --tags NL=$'\n' echo "Cross compiling binaries" ./cross-compile.sh $1 mv ../binaries . echo "Creating new release" hub release create $tag \ --message "$1${NL}${NL}$2" \ --attach "binaries/micro-$1-osx.tar.gz" \ --attach "binaries/micro-$1-linux64.tar.gz" \ --attach "binaries/micro-$1-linux64-static.tar.gz" \ --attach "binaries/micro-$1-amd64.deb" \ --attach "binaries/micro-$1-linux32.tar.gz" \ --attach "binaries/micro-$1-linux-arm.tar.gz" \ --attach "binaries/micro-$1-linux-arm64.tar.gz" \ --attach "binaries/micro-$1-freebsd64.tar.gz" \ --attach "binaries/micro-$1-freebsd32.tar.gz" \ --attach "binaries/micro-$1-openbsd64.tar.gz" \ --attach "binaries/micro-$1-openbsd32.tar.gz" \ --attach "binaries/micro-$1-netbsd64.tar.gz" \ --attach "binaries/micro-$1-netbsd32.tar.gz" \ --attach "binaries/micro-$1-win64.zip" \ --attach "binaries/micro-$1-win32.zip" micro-2.0.9/tools/remove-nightly-assets.go000066400000000000000000000014521405030104300205630ustar00rootroot00000000000000package main import ( "fmt" "io/ioutil" "net/http" "os/exec" "strings" "github.com/zyedidia/json5" ) func main() { resp, err := http.Get("https://api.github.com/repos/zyedidia/micro/releases") if err != nil { fmt.Println(err.Error()) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) var data interface{} err = json5.Unmarshal(body, &data) for _, val := range data.([]interface{}) { m := val.(map[string]interface{}) releaseName := m["name"].(string) assets := m["assets"].([]interface{}) for _, asset := range assets { assetInfo := asset.(map[string]interface{}) url := assetInfo["url"].(string) if strings.Contains(strings.ToLower(releaseName), "nightly") { cmd := exec.Command("hub", "api", "-X", "DELETE", url) cmd.Run() } } } } micro-2.0.9/tools/testgen.go000066400000000000000000000136451405030104300157720ustar00rootroot00000000000000package main import ( "fmt" "io/ioutil" "log" "os" "regexp" "strings" "github.com/robertkrimen/otto/ast" "github.com/robertkrimen/otto/parser" ) type walker struct { nodes []ast.Node } func (w *walker) Enter(node ast.Node) ast.Visitor { w.nodes = append(w.nodes, node) return w } func (w *walker) Exit(node ast.Node) { } func getAllNodes(node ast.Node) []ast.Node { w := &walker{} ast.Walk(w, node) return w.nodes } func getCalls(node ast.Node, name string) []*ast.CallExpression { nodes := []*ast.CallExpression{} for _, n := range getAllNodes(node) { if ce, ok := n.(*ast.CallExpression); ok { var calleeName string switch callee := ce.Callee.(type) { case *ast.Identifier: calleeName = callee.Name case *ast.DotExpression: calleeName = callee.Identifier.Name default: continue } if calleeName == name { nodes = append(nodes, ce) } } } return nodes } func getPropertyValue(node ast.Node, key string) ast.Expression { for _, p := range node.(*ast.ObjectLiteral).Value { if p.Key == key { return p.Value } } return nil } type operation struct { startLine int startColumn int endLine int endColumn int text []string } type check struct { before []string operations []operation after []string } type test struct { description string checks []check } func stringSliceToGoSource(slice []string) string { var b strings.Builder b.WriteString("[]string{\n") for _, s := range slice { b.WriteString(fmt.Sprintf("%#v,\n", s)) } b.WriteString("}") return b.String() } func testToGoTest(test test, name string) string { var b strings.Builder b.WriteString("func Test") b.WriteString(name) b.WriteString("(t *testing.T) {\n") for _, c := range test.checks { b.WriteString("check(\n") b.WriteString("t,\n") b.WriteString(fmt.Sprintf("%v,\n", stringSliceToGoSource(c.before))) b.WriteString("[]operation{\n") for _, op := range c.operations { b.WriteString("operation{\n") b.WriteString(fmt.Sprintf("start: Loc{%v, %v},\n", op.startColumn, op.startLine)) b.WriteString(fmt.Sprintf("end: Loc{%v, %v},\n", op.endColumn, op.endLine)) b.WriteString(fmt.Sprintf("text: %v,\n", stringSliceToGoSource(op.text))) b.WriteString("},\n") } b.WriteString("},\n") b.WriteString(fmt.Sprintf("%v,\n", stringSliceToGoSource(c.after))) b.WriteString(")\n") } b.WriteString("}\n") return b.String() } func nodeToStringSlice(node ast.Node) []string { var result []string for _, s := range node.(*ast.ArrayLiteral).Value { result = append(result, s.(*ast.StringLiteral).Value) } return result } func nodeToStringSlice2(node ast.Node) []string { var result []string for _, o := range node.(*ast.ArrayLiteral).Value { result = append(result, getPropertyValue(o, "text").(*ast.StringLiteral).Value) } return result } func nodeToInt(node ast.Node) int { return int(node.(*ast.NumberLiteral).Value.(int64)) } func getChecks(node ast.Node) []check { checks := []check{} for _, ce := range getCalls(node, "testApplyEdits") { if len(ce.ArgumentList) != 3 { // Wrong function continue } before := nodeToStringSlice2(ce.ArgumentList[0]) after := nodeToStringSlice2(ce.ArgumentList[2]) var operations []operation for _, op := range ce.ArgumentList[1].(*ast.ArrayLiteral).Value { args := getPropertyValue(op, "range").(*ast.NewExpression).ArgumentList operations = append(operations, operation{ startLine: nodeToInt(args[0]) - 1, startColumn: nodeToInt(args[1]) - 1, endLine: nodeToInt(args[2]) - 1, endColumn: nodeToInt(args[3]) - 1, text: []string{getPropertyValue(op, "text").(*ast.StringLiteral).Value}, }) } checks = append(checks, check{before, operations, after}) } for _, ce := range getCalls(node, "testApplyEditsWithSyncedModels") { if len(ce.ArgumentList) > 3 && ce.ArgumentList[3].(*ast.BooleanLiteral).Value { // inputEditsAreInvalid == true continue } before := nodeToStringSlice(ce.ArgumentList[0]) after := nodeToStringSlice(ce.ArgumentList[2]) var operations []operation for _, op := range getCalls(ce.ArgumentList[1], "editOp") { operations = append(operations, operation{ startLine: nodeToInt(op.ArgumentList[0]) - 1, startColumn: nodeToInt(op.ArgumentList[1]) - 1, endLine: nodeToInt(op.ArgumentList[2]) - 1, endColumn: nodeToInt(op.ArgumentList[3]) - 1, text: nodeToStringSlice(op.ArgumentList[4]), }) } checks = append(checks, check{before, operations, after}) } return checks } func getTests(node ast.Node) []test { tests := []test{} for _, ce := range getCalls(node, "test") { description := ce.ArgumentList[0].(*ast.StringLiteral).Value body := ce.ArgumentList[1].(*ast.FunctionLiteral).Body checks := getChecks(body) if len(checks) > 0 { tests = append(tests, test{description, checks}) } } return tests } func main() { var tests []test for _, filename := range os.Args[1:] { source, err := ioutil.ReadFile(filename) if err != nil { log.Fatalln(err) } program, err := parser.ParseFile(nil, "", source, parser.IgnoreRegExpErrors) if err != nil { log.Fatalln(err) } tests = append(tests, getTests(program)...) } if len(tests) == 0 { log.Fatalln("no tests found!") } fmt.Println("// This file is generated from VSCode model tests by the testgen tool.") fmt.Println("// DO NOT EDIT THIS FILE BY HAND; your changes will be overwritten!\n") fmt.Println("package buffer") fmt.Println(`import "testing"`) re := regexp.MustCompile(`[^\w]`) usedNames := map[string]bool{} for _, test := range tests { name := strings.Title(strings.ToLower(test.description)) name = re.ReplaceAllLiteralString(name, "") if name == "" { name = "Unnamed" } if usedNames[name] { for i := 2; ; i++ { newName := fmt.Sprintf("%v_%v", name, i) if !usedNames[newName] { name = newName break } } } usedNames[name] = true fmt.Println(testToGoTest(test, name)) } } micro-2.0.9/tools/update-nightly-tag.sh000077500000000000000000000005061405030104300200300ustar00rootroot00000000000000commitID=$(git rev-parse --short HEAD) echo "Moving tag" hub push origin :refs/tags/nightly git tag -f nightly $commitID hub push --tags MESSAGE=$'Nightly build\n\nAutogenerated nightly build of micro' echo "Creating new release" hub release create nightly \ --prerelease \ --draft=false \ --message "$MESSAGE." micro-2.0.9/tools/vendor-src.sh000077500000000000000000000001421405030104300163770ustar00rootroot00000000000000cd ../.. tar czf "$1".tar.gz micro zip -rq "$1".zip micro mv "$1".tar.gz micro mv "$1".zip micro