├── Abstract.md ├── License.md ├── Makefile ├── README.md ├── arduino.xmind ├── dot ├── ArduinoUnoSmd.jpg ├── ArduinoUnoSmd.png ├── ArduinoUnoSmd.ps ├── Atmega168PinMap2.png ├── Makefile ├── arduino.dot ├── arduino.png ├── arduino.ps ├── atmega328w.png ├── atmega328w.ps ├── change.png ├── change.ps ├── chart.png ├── chart.ps ├── chart.svg ├── edit.png ├── edit.ps ├── getjson.png ├── getjson.ps ├── getpost.png ├── getpost.ps ├── getrequest.dot ├── getrequest.png ├── getrequest.ps ├── jsondata.png ├── jsondata.ps ├── origin.png ├── origin.ps ├── python.dot ├── python.png ├── python.ps ├── raspberrypi.jpg ├── raspberrypi.png ├── raspberrypi.ps ├── request.png ├── request.ps ├── restful.dot ├── restful.png ├── restful.ps ├── struct.dot ├── struct.png └── struct.ps ├── highlight.css ├── iot.docx ├── iot.md ├── iot.pdf ├── raspberrypi.xmind ├── scutthesis.cls ├── template.tex └── 基于REST服务的最小物联网系统设计.ppt /Abstract.md: -------------------------------------------------------------------------------- 1 | ##摘要 2 | 随着经济社会的日趋发展及科学技术水平的不断提高,人们对于便利生活的要求越来越高。近年来,随着物联网领域稳步、缓慢地发展,物联网建设的网络环境已经逐渐成熟。由于物联网系统是一个综合性的,包含了硬件、软件、网络等多学科交叉的系统。对于物联网的研究和开发,已经成为一个个热门的话题。 3 | 4 | 本论文中介绍了以REST服务为核心、单片机、ARM开发板而辅助的物联网系统的结构组成及工作原理,提供了相应的软件代码及硬件结构。首先研究了不同服务框架的区别,包括不同语言间开发的优势及劣势,之后重点以REST服务为核心构建系统。本设计中,单片机与ARM开发板通过串口通信的方式实现通信,相互传输所需要的数据,ARM开发板将资源传于互联网上对应的接口,接口可以在互联网上被访问。将ARM开发板获取过来的数据存储于MySQL数据,再以REST服务的方式共享数据,互联网上的其他设备便可以通过网络来访问这些设备。系统分离了软件、硬件的耦合,不仅可以方便系统开发,也可以方便由不同的硬件替换相应的组成,使之更容易理解,同时可以实现更多设备的连接,以实现真正的物联。 5 | 6 | 本论文讨论的代码在GNU/Linux系统上开发,可在不同平台上开发及调度。 7 | 8 | **关键词** : ``物联网``、``REST服务``、``RESTful`` 9 | 10 | ##Abstract 11 | With the increasing development and scientific and technological level of the economy and society continues to improve, people's lives more convenient for the required high . In recent years, the field of Internet Of Things steady , slow development , networking and building the network environment has gradually matured. Because of Internet Of Things is a comprehensive system , including hardware , software, networks, and other multi-disciplinary systems. Things for research and development, has become one hot topic . 12 | 13 | This paper described the Internet of Things system's structure and principle in REST services as the core , microcontroller and ARM development board as assisted, and provided the appropriate software code and hardware architecture . First study the differences between the services framework, including language development among different strengths and weaknesses, then focus to build REST service system as the core . In this design, microcontroller communicate with development board by serial communication, mutual transmission of the data needed , ARM development board resources on the Internet pass the corresponding interface , the interface can be accessed on the Internet. The ARM development board to get over the data stored in MySQL, then the REST service to share data , other devices on the Internet will be able to access these devices through the network. Separation of the coupling system software, hardware , and can not only facilitate the development of the system , can also be easily replaced by a composition corresponding to different hardware , to make it easier to understand , and can connect more devices to achieve real objects associated . 14 | 15 | Code discussed in this paper on the GNU / Linux system development, and scheduling can be developed on different platforms . 16 | -------------------------------------------------------------------------------- /License.md: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | ========================== 3 | Version 2, June 1991 4 | 5 | > Copyright (C) 1989, 1991 Free Software Foundation, Inc., 6 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 7 | Everyone is permitted to copy and distribute verbatim copies 8 | of this license document, but changing it is not allowed. 9 | 10 | # Preamble 11 | 12 | The licenses for most software are designed to take away your 13 | freedom to share and change it. By contrast, the GNU General Public 14 | License is intended to guarantee your freedom to share and change free 15 | software--to make sure the software is free for all its users. This 16 | General Public License applies to most of the Free Software 17 | Foundation's software and to any other program whose authors commit to 18 | using it. (Some other Free Software Foundation software is covered by 19 | the GNU Lesser General Public License instead.) You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | this service if you wish), that you receive source code or can get it 26 | if you want it, that you can change the software or use pieces of it 27 | in new free programs; and that you know you can do these things. 28 | 29 | To protect your rights, we need to make restrictions that forbid 30 | anyone to deny you these rights or to ask you to surrender the rights. 31 | These restrictions translate to certain responsibilities for you if you 32 | distribute copies of the software, or if you modify it. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must give the recipients all the rights that 36 | you have. You must make sure that they, too, receive or can get the 37 | source code. And you must show them these terms so they know their 38 | rights. 39 | 40 | We protect your rights with two steps: (1) copyright the software, and 41 | (2) offer you this license which gives you legal permission to copy, 42 | distribute and/or modify the software. 43 | 44 | Also, for each author's protection and ours, we want to make certain 45 | that everyone understands that there is no warranty for this free 46 | software. If the software is modified by someone else and passed on, we 47 | want its recipients to know that what they have is not the original, so 48 | that any problems introduced by others will not reflect on the original 49 | authors' reputations. 50 | 51 | Finally, any free program is threatened constantly by software 52 | patents. We wish to avoid the danger that redistributors of a free 53 | program will individually obtain patent licenses, in effect making the 54 | program proprietary. To prevent this, we have made it clear that any 55 | patent must be licensed for everyone's free use or not licensed at all. 56 | 57 | The precise terms and conditions for copying, distribution and 58 | modification follow. 59 | 60 | 61 | # GNU GENERAL PUBLIC LICENSE # 62 | ## TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ## 63 | 64 | - *0\.* This License applies to any program or other work which contains 65 | a notice placed by the copyright holder saying it may be distributed 66 | under the terms of this General Public License. The "Program", below, 67 | refers to any such program or work, and a "work based on the Program" 68 | means either the Program or any derivative work under copyright law: 69 | that is to say, a work containing the Program or a portion of it, 70 | either verbatim or with modifications and/or translated into another 71 | language. (Hereinafter, translation is included without limitation in 72 | the term "modification".) Each licensee is addressed as "you". 73 | 74 | Activities other than copying, distribution and modification are not 75 | covered by this License; they are outside its scope. The act of 76 | running the Program is not restricted, and the output from the Program 77 | is covered only if its contents constitute a work based on the 78 | Program (independent of having been made by running the Program). 79 | Whether that is true depends on what the Program does. 80 | 81 | - 1\. You may copy and distribute verbatim copies of the Program's 82 | source code as you receive it, in any medium, provided that you 83 | conspicuously and appropriately publish on each copy an appropriate 84 | copyright notice and disclaimer of warranty; keep intact all the 85 | notices that refer to this License and to the absence of any warranty; 86 | and give any other recipients of the Program a copy of this License 87 | along with the Program. 88 | 89 | You may charge a fee for the physical act of transferring a copy, and 90 | you may at your option offer warranty protection in exchange for a fee. 91 | 92 | - 2\. You may modify your copy or copies of the Program or any portion 93 | of it, thus forming a work based on the Program, and copy and 94 | distribute such modifications or work under the terms of Section 1 95 | above, provided that you also meet all of these conditions: 96 | 97 | a) You must cause the modified files to carry prominent notices 98 | stating that you changed the files and the date of any change. 99 | 100 | b) You must cause any work that you distribute or publish, that in 101 | whole or in part contains or is derived from the Program or any 102 | part thereof, to be licensed as a whole at no charge to all third 103 | parties under the terms of this License. 104 | 105 | c) If the modified program normally reads commands interactively 106 | when run, you must cause it, when started running for such 107 | interactive use in the most ordinary way, to print or display an 108 | announcement including an appropriate copyright notice and a 109 | notice that there is no warranty (or else, saying that you provide 110 | a warranty) and that users may redistribute the program under 111 | these conditions, and telling the user how to view a copy of this 112 | License. (Exception: if the Program itself is interactive but 113 | does not normally print such an announcement, your work based on 114 | the Program is not required to print an announcement.) 115 | 116 | These requirements apply to the modified work as a whole. If 117 | identifiable sections of that work are not derived from the Program, 118 | and can be reasonably considered independent and separate works in 119 | themselves, then this License, and its terms, do not apply to those 120 | sections when you distribute them as separate works. But when you 121 | distribute the same sections as part of a whole which is a work based 122 | on the Program, the distribution of the whole must be on the terms of 123 | this License, whose permissions for other licensees extend to the 124 | entire whole, and thus to each and every part regardless of who wrote it. 125 | 126 | Thus, it is not the intent of this section to claim rights or contest 127 | your rights to work written entirely by you; rather, the intent is to 128 | exercise the right to control the distribution of derivative or 129 | collective works based on the Program. 130 | 131 | In addition, mere aggregation of another work not based on the Program 132 | with the Program (or with a work based on the Program) on a volume of 133 | a storage or distribution medium does not bring the other work under 134 | the scope of this License. 135 | 136 | - 3\. You may copy and distribute the Program (or a work based on it, 137 | under Section 2) in object code or executable form under the terms of 138 | Sections 1 and 2 above provided that you also do one of the following: 139 | 140 | a) Accompany it with the complete corresponding machine-readable 141 | source code, which must be distributed under the terms of Sections 142 | 1 and 2 above on a medium customarily used for software interchange; or, 143 | 144 | b) Accompany it with a written offer, valid for at least three 145 | years, to give any third party, for a charge no more than your 146 | cost of physically performing source distribution, a complete 147 | machine-readable copy of the corresponding source code, to be 148 | distributed under the terms of Sections 1 and 2 above on a medium 149 | customarily used for software interchange; or, 150 | 151 | c) Accompany it with the information you received as to the offer 152 | to distribute corresponding source code. (This alternative is 153 | allowed only for noncommercial distribution and only if you 154 | received the program in object code or executable form with such 155 | an offer, in accord with Subsection b above.) 156 | 157 | The source code for a work means the preferred form of the work for 158 | making modifications to it. For an executable work, complete source 159 | code means all the source code for all modules it contains, plus any 160 | associated interface definition files, plus the scripts used to 161 | control compilation and installation of the executable. However, as a 162 | special exception, the source code distributed need not include 163 | anything that is normally distributed (in either source or binary 164 | form) with the major components (compiler, kernel, and so on) of the 165 | operating system on which the executable runs, unless that component 166 | itself accompanies the executable. 167 | 168 | If distribution of executable or object code is made by offering 169 | access to copy from a designated place, then offering equivalent 170 | access to copy the source code from the same place counts as 171 | distribution of the source code, even though third parties are not 172 | compelled to copy the source along with the object code. 173 | 174 | - 4\. You may not copy, modify, sublicense, or distribute the Program 175 | except as expressly provided under this License. Any attempt 176 | otherwise to copy, modify, sublicense or distribute the Program is 177 | void, and will automatically terminate your rights under this License. 178 | However, parties who have received copies, or rights, from you under 179 | this License will not have their licenses terminated so long as such 180 | parties remain in full compliance. 181 | 182 | - 5\. You are not required to accept this License, since you have not 183 | signed it. However, nothing else grants you permission to modify or 184 | distribute the Program or its derivative works. These actions are 185 | prohibited by law if you do not accept this License. Therefore, by 186 | modifying or distributing the Program (or any work based on the 187 | Program), you indicate your acceptance of this License to do so, and 188 | all its terms and conditions for copying, distributing or modifying 189 | the Program or works based on it. 190 | 191 | - 6\. Each time you redistribute the Program (or any work based on the 192 | Program), the recipient automatically receives a license from the 193 | original licensor to copy, distribute or modify the Program subject to 194 | these terms and conditions. You may not impose any further 195 | restrictions on the recipients' exercise of the rights granted herein. 196 | You are not responsible for enforcing compliance by third parties to 197 | this License. 198 | 199 | - 7\. If, as a consequence of a court judgment or allegation of patent 200 | infringement or for any other reason (not limited to patent issues), 201 | conditions are imposed on you (whether by court order, agreement or 202 | otherwise) that contradict the conditions of this License, they do not 203 | excuse you from the conditions of this License. If you cannot 204 | distribute so as to satisfy simultaneously your obligations under this 205 | License and any other pertinent obligations, then as a consequence you 206 | may not distribute the Program at all. For example, if a patent 207 | license would not permit royalty-free redistribution of the Program by 208 | all those who receive copies directly or indirectly through you, then 209 | the only way you could satisfy both it and this License would be to 210 | refrain entirely from distribution of the Program. 211 | 212 | If any portion of this section is held invalid or unenforceable under 213 | any particular circumstance, the balance of the section is intended to 214 | apply and the section as a whole is intended to apply in other 215 | circumstances. 216 | 217 | It is not the purpose of this section to induce you to infringe any 218 | patents or other property right claims or to contest validity of any 219 | such claims; this section has the sole purpose of protecting the 220 | integrity of the free software distribution system, which is 221 | implemented by public license practices. Many people have made 222 | generous contributions to the wide range of software distributed 223 | through that system in reliance on consistent application of that 224 | system; it is up to the author/donor to decide if he or she is willing 225 | to distribute software through any other system and a licensee cannot 226 | impose that choice. 227 | 228 | This section is intended to make thoroughly clear what is believed to 229 | be a consequence of the rest of this License. 230 | 231 | - 8\. If the distribution and/or use of the Program is restricted in 232 | certain countries either by patents or by copyrighted interfaces, the 233 | original copyright holder who places the Program under this License 234 | may add an explicit geographical distribution limitation excluding 235 | those countries, so that distribution is permitted only in or among 236 | countries not thus excluded. In such case, this License incorporates 237 | the limitation as if written in the body of this License. 238 | 239 | - 9\. The Free Software Foundation may publish revised and/or new versions 240 | of the General Public License from time to time. Such new versions will 241 | be similar in spirit to the present version, but may differ in detail to 242 | address new problems or concerns. 243 | 244 | Each version is given a distinguishing version number. If the Program 245 | specifies a version number of this License which applies to it and "any 246 | later version", you have the option of following the terms and conditions 247 | either of that version or of any later version published by the Free 248 | Software Foundation. If the Program does not specify a version number of 249 | this License, you may choose any version ever published by the Free Software 250 | Foundation. 251 | 252 | - 10\. If you wish to incorporate parts of the Program into other free 253 | programs whose distribution conditions are different, write to the author 254 | to ask for permission. For software which is copyrighted by the Free 255 | Software Foundation, write to the Free Software Foundation; we sometimes 256 | make exceptions for this. Our decision will be guided by the two goals 257 | of preserving the free status of all derivatives of our free software and 258 | of promoting the sharing and reuse of software generally. 259 | 260 | 261 | ## NO WARRANTY 262 | 263 | - 11\. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 264 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 265 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 266 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 267 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 268 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 269 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 270 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 271 | REPAIR OR CORRECTION. 272 | 273 | - 12\. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 274 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 275 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 276 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 277 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 278 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 279 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 280 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 281 | POSSIBILITY OF SUCH DAMAGES. 282 | 283 | ## END OF TERMS AND CONDITIONS ## 284 | 285 | --------------------------------------------------------------------------- 286 | 287 | ### How to Apply These Terms to Your New Programs ### 288 | 289 | If you develop a new program, and you want it to be of the greatest 290 | possible use to the public, the best way to achieve this is to make it 291 | free software which everyone can redistribute and change under these terms. 292 | 293 | To do so, attach the following notices to the program. It is safest 294 | to attach them to the start of each source file to most effectively 295 | convey the exclusion of warranty; and each file should have at least 296 | the "copyright" line and a pointer to where the full notice is found. 297 | 298 | 299 | Copyright (C) 300 | 301 | This program is free software; you can redistribute it and/or modify 302 | it under the terms of the GNU General Public License as published by 303 | the Free Software Foundation; either version 2 of the License, or 304 | (at your option) any later version. 305 | 306 | This program is distributed in the hope that it will be useful, 307 | but WITHOUT ANY WARRANTY; without even the implied warranty of 308 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 309 | GNU General Public License for more details. 310 | 311 | You should have received a copy of the GNU General Public License along 312 | with this program; if not, write to the Free Software Foundation, Inc., 313 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 314 | 315 | Also add information on how to contact you by electronic and paper mail. 316 | 317 | If the program is interactive, make it output a short notice like this 318 | when it starts in an interactive mode: 319 | 320 | Gnomovision version 69, Copyright (C) year name of author 321 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 322 | This is free software, and you are welcome to redistribute it 323 | under certain conditions; type `show c' for details. 324 | 325 | The hypothetical commands `show w' and `show c' should show the appropriate 326 | parts of the General Public License. Of course, the commands you use may 327 | be called something other than `show w' and `show c'; they could even be 328 | mouse-clicks or menu items--whatever suits your program. 329 | 330 | You should also get your employer (if you work as a programmer) or your 331 | school, if any, to sign a "copyright disclaimer" for the program, if 332 | necessary. Here is a sample; alter the names: 333 | 334 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 335 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 336 | 337 | , 1 April 1989 338 | Ty Coon, President of Vice 339 | 340 | This General Public License does not permit incorporating your program into 341 | proprietary programs. If your program is a subroutine library, you may 342 | consider it more useful to permit linking proprietary applications with the 343 | library. If this is what you want to do, use the GNU Lesser General 344 | Public License instead of this License. 345 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | default: docx 2 | 3 | docx: 4 | sed 's/
/}/g' iot2.md > iot3.md
 6 | 	sed 's/<\/code><\/pre>/~~~~ /g' iot3.md > iot2.md
 7 | 	pandoc iot2.md -o iot.docx --toc --smart --highlight-style=pygments
 8 | 	rm iot2.md iot3.md
 9 | 
10 | pdf:
11 | 	sed 's/
/}/g' iot2.md > iot3.md
13 | 	sed 's/<\/code><\/pre>/~~~~ /g' iot3.md > iot2.md
14 | 	sed 's/.png/.ps/g' iot2.md > iot3.md
15 | 	pandoc --template=template.tex --latex-engine=xelatex iot3.md -o iot.pdf --toc --highlight-style=pygments
16 | 	@echo "remove the iot temp file"
17 | 	rm iot2.md iot3.md
18 | 
19 | img:
20 | 	dot dot/arduino.dot -Tps   -o dot/arduino.ps
21 | 	dot dot/arduino.dot -Tpng  -o dot/arduino.png
22 | 	dot dot/python.dot  -Tps   -o dot/python.ps
23 | 	dot dot/python.dot  -Tpng  -o dot/python.png
24 | 	dot dot/struct.dot  -Tps   -o dot/struct.ps
25 | 	dot dot/struct.dot  -Tpng  -o dot/struct.png
26 | 	dot dot/restful.dot -Tpng  -o dot/restful.png
27 | 	dot dot/restful.dot -Tps   -o dot/restful.ps
28 | 	dot dot/getrequest.dot -Tpng  -o dot/getrequest.png
29 | 	dot dot/getrequest.dot -Tps   -o dot/getrequest.ps
30 | 


--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
 1 | #物联网毕业设计#
 2 | 
 3 | 下载: 
 4 | 
 5 | [物联网毕业设计 PDF](https://raw.githubusercontent.com/phodal/thesis/master/iot.pdf)
 6 | 
 7 | [物联网毕业设计 DOCX](https://raw.githubusercontent.com/phodal/thesis/master/iot.docx)
 8 | 
 9 | [物联网毕业设计 PPT](https://raw.githubusercontent.com/phodal/thesis/master/%E5%9F%BA%E4%BA%8EREST%E6%9C%8D%E5%8A%A1%E7%9A%84%E6%9C%80%E5%B0%8F%E7%89%A9%E8%81%94%E7%BD%91%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1.ppt)
10 | 
11 | ##摘要
12 | 随着经济社会的日趋发展及科学技术水平的不断提高,人们对于便利生活的要求越来越高。近年来,随着物联网领域稳步、缓慢地发展,物联网建设的网络环境已经逐渐成熟。由于物联网系统是一个综合性的,包含了硬件、软件、网络等多学科交叉的系统。对于物联网的研究和开发,已经成为一个个热门的话题。
13 | 
14 | 本论文中介绍了以REST服务为核心、单片机、ARM开发板而辅助的物联网系统的结构组成及工作原理,提供了相应的软件代码及硬件结构。首先研究了不同服务框架的区别,包括不同语言间开发的优势及劣势,之后重点以REST服务为核心构建系统。本设计中,单片机与ARM开发板通过串口通信的方式实现通信,相互传输所需要的数据,ARM开发板将资源传于互联网上对应的接口,接口可以在互联网上被访问。将ARM开发板获取过来的数据存储于MySQL数据,再以REST服务的方式共享数据,互联网上的其他设备便可以通过网络来访问这些设备。系统分离了软件、硬件的耦合,不仅可以方便系统开发,也可以方便由不同的硬件替换相应的组成,使之更容易理解,同时可以实现更多设备的连接,以实现真正的物联。
15 | 
16 | 本论文讨论的代码在GNU/Linux系统上开发,可在不同平台上开发及调度。
17 | 
18 | **关键词** : ``物联网``、``REST服务``、``RESTful``
19 | 
20 | ##Abstract
21 | With the increasing development and scientific and technological level of the economy and society continues to improve, people's lives more convenient for the required high . In recent years, the field of Internet Of Things steady , slow development , networking and building the network environment has gradually matured. Because of Internet Of Things is a comprehensive system , including hardware , software, networks, and other multi-disciplinary systems. Things for research and development, has become one hot topic .
22 | 
23 | This paper described the Internet of Things system's structure and principle in REST services as the core , microcontroller and ARM development board as assisted, and provided the appropriate software code and hardware architecture . First study the differences between the services framework, including language development among different strengths and weaknesses, then focus to build REST service system as the core . In this design, microcontroller communicate with development board by serial communication, mutual transmission of the data needed , ARM development board resources on the Internet pass the corresponding interface , the interface can be accessed on the Internet. The ARM development board to get over the data stored in MySQL, then the REST service to share data , other devices on the Internet will be able to access these devices through the network. Separation of the coupling system software, hardware , and can not only facilitate the development of the system , can also be easily replaced by a composition corresponding to different hardware , to make it easier to understand , and can connect more devices to achieve real objects associated .
24 | 
25 | Code discussed in this paper on the GNU / Linux system development, and scheduling can be developed on different platforms .
26 | 
27 | 
28 | ## License
29 | 
30 | © 2014 [Phodal Huang](http://www.phodal.com). This code is distributed under the GNU/GPL license.
31 | 


--------------------------------------------------------------------------------
/arduino.xmind:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/arduino.xmind


--------------------------------------------------------------------------------
/dot/ArduinoUnoSmd.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/ArduinoUnoSmd.jpg


--------------------------------------------------------------------------------
/dot/ArduinoUnoSmd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/ArduinoUnoSmd.png


--------------------------------------------------------------------------------
/dot/Atmega168PinMap2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/Atmega168PinMap2.png


--------------------------------------------------------------------------------
/dot/Makefile:
--------------------------------------------------------------------------------
1 | default:
2 | 	dot arduino.dot -Tps   -o arduino.ps
3 | 	dot arduino.dot -Tpng  -o arduino.png
4 | 	dot python.dot  -Tps   -o python.ps
5 | 	dot python.dot  -Tpng  -o python.png
6 | 	dot struct.dot  -Tps   -o struct.ps
7 | 	dot struct.dot  -Tpng  -o struct.png
8 | 


--------------------------------------------------------------------------------
/dot/arduino.dot:
--------------------------------------------------------------------------------
 1 | digraph G{
 2 |   node[shape=record];
 3 |   Start ->"init port";
 4 |   Start [shape=ellipse];
 5 |   "init port"->check_serial;
 6 |   subgraph cluster{
 7 |     label="handle serial port data";
 8 |     check_serial->format_data;
 9 |     format_data->bool_data;
10 |     bool_data->led13_high[label="true"];
11 |     bool_data->led13_low[label="false"];
12 |     led13_high->check_serial;
13 |     led13_low->check_serial;
14 |     bool_data [shape=diamond];
15 |   }
16 | }
17 | 


--------------------------------------------------------------------------------
/dot/arduino.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/arduino.png


--------------------------------------------------------------------------------
/dot/arduino.ps:
--------------------------------------------------------------------------------
  1 | %!PS-Adobe-3.0
  2 | %%Creator: graphviz version 2.36.0 (20140111.2315)
  3 | %%Title: G
  4 | %%Pages: (atend)
  5 | %%BoundingBox: (atend)
  6 | %%EndComments
  7 | save
  8 | %%BeginProlog
  9 | /DotDict 200 dict def
 10 | DotDict begin
 11 | 
 12 | /setupLatin1 {
 13 | mark
 14 | /EncodingVector 256 array def
 15 |  EncodingVector 0
 16 | 
 17 | ISOLatin1Encoding 0 255 getinterval putinterval
 18 | EncodingVector 45 /hyphen put
 19 | 
 20 | % Set up ISO Latin 1 character encoding
 21 | /starnetISO {
 22 |         dup dup findfont dup length dict begin
 23 |         { 1 index /FID ne { def }{ pop pop } ifelse
 24 |         } forall
 25 |         /Encoding EncodingVector def
 26 |         currentdict end definefont
 27 | } def
 28 | /Times-Roman starnetISO def
 29 | /Times-Italic starnetISO def
 30 | /Times-Bold starnetISO def
 31 | /Times-BoldItalic starnetISO def
 32 | /Helvetica starnetISO def
 33 | /Helvetica-Oblique starnetISO def
 34 | /Helvetica-Bold starnetISO def
 35 | /Helvetica-BoldOblique starnetISO def
 36 | /Courier starnetISO def
 37 | /Courier-Oblique starnetISO def
 38 | /Courier-Bold starnetISO def
 39 | /Courier-BoldOblique starnetISO def
 40 | cleartomark
 41 | } bind def
 42 | 
 43 | %%BeginResource: procset graphviz 0 0
 44 | /coord-font-family /Times-Roman def
 45 | /default-font-family /Times-Roman def
 46 | /coordfont coord-font-family findfont 8 scalefont def
 47 | 
 48 | /InvScaleFactor 1.0 def
 49 | /set_scale {
 50 |        dup 1 exch div /InvScaleFactor exch def
 51 |        scale
 52 | } bind def
 53 | 
 54 | % styles
 55 | /solid { [] 0 setdash } bind def
 56 | /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
 57 | /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
 58 | /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
 59 | /bold { 2 setlinewidth } bind def
 60 | /filled { } bind def
 61 | /unfilled { } bind def
 62 | /rounded { } bind def
 63 | /diagonals { } bind def
 64 | /tapered { } bind def
 65 | 
 66 | % hooks for setting color 
 67 | /nodecolor { sethsbcolor } bind def
 68 | /edgecolor { sethsbcolor } bind def
 69 | /graphcolor { sethsbcolor } bind def
 70 | /nopcolor {pop pop pop} bind def
 71 | 
 72 | /beginpage {	% i j npages
 73 | 	/npages exch def
 74 | 	/j exch def
 75 | 	/i exch def
 76 | 	/str 10 string def
 77 | 	npages 1 gt {
 78 | 		gsave
 79 | 			coordfont setfont
 80 | 			0 0 moveto
 81 | 			(\() show i str cvs show (,) show j str cvs show (\)) show
 82 | 		grestore
 83 | 	} if
 84 | } bind def
 85 | 
 86 | /set_font {
 87 | 	findfont exch
 88 | 	scalefont setfont
 89 | } def
 90 | 
 91 | % draw text fitted to its expected width
 92 | /alignedtext {			% width text
 93 | 	/text exch def
 94 | 	/width exch def
 95 | 	gsave
 96 | 		width 0 gt {
 97 | 			[] 0 setdash
 98 | 			text stringwidth pop width exch sub text length div 0 text ashow
 99 | 		} if
100 | 	grestore
101 | } def
102 | 
103 | /boxprim {				% xcorner ycorner xsize ysize
104 | 		4 2 roll
105 | 		moveto
106 | 		2 copy
107 | 		exch 0 rlineto
108 | 		0 exch rlineto
109 | 		pop neg 0 rlineto
110 | 		closepath
111 | } bind def
112 | 
113 | /ellipse_path {
114 | 	/ry exch def
115 | 	/rx exch def
116 | 	/y exch def
117 | 	/x exch def
118 | 	matrix currentmatrix
119 | 	newpath
120 | 	x y translate
121 | 	rx ry scale
122 | 	0 0 1 0 360 arc
123 | 	setmatrix
124 | } bind def
125 | 
126 | /endpage { showpage } bind def
127 | /showpage { } def
128 | 
129 | /layercolorseq
130 | 	[	% layer color sequence - darkest to lightest
131 | 		[0 0 0]
132 | 		[.2 .8 .8]
133 | 		[.4 .8 .8]
134 | 		[.6 .8 .8]
135 | 		[.8 .8 .8]
136 | 	]
137 | def
138 | 
139 | /layerlen layercolorseq length def
140 | 
141 | /setlayer {/maxlayer exch def /curlayer exch def
142 | 	layercolorseq curlayer 1 sub layerlen mod get
143 | 	aload pop sethsbcolor
144 | 	/nodecolor {nopcolor} def
145 | 	/edgecolor {nopcolor} def
146 | 	/graphcolor {nopcolor} def
147 | } bind def
148 | 
149 | /onlayer { curlayer ne {invis} if } def
150 | 
151 | /onlayers {
152 | 	/myupper exch def
153 | 	/mylower exch def
154 | 	curlayer mylower lt
155 | 	curlayer myupper gt
156 | 	or
157 | 	{invis} if
158 | } def
159 | 
160 | /curlayer 0 def
161 | 
162 | %%EndResource
163 | %%EndProlog
164 | %%BeginSetup
165 | 14 default-font-family set_font
166 | 1 setmiterlimit
167 | % /arrowlength 10 def
168 | % /arrowwidth 5 def
169 | 
170 | % make sure pdfmark is harmless for PS-interpreters other than Distiller
171 | /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
172 | % make '<<' and '>>' safe on PS Level 1 devices
173 | /languagelevel where {pop languagelevel}{1} ifelse
174 | 2 lt {
175 |     userdict (<<) cvn ([) cvn load put
176 |     userdict (>>) cvn ([) cvn load put
177 | } if
178 | 
179 | %%EndSetup
180 | setupLatin1
181 | %%Page: 1 1
182 | %%PageBoundingBox: 36 36 248 506
183 | %%PageOrientation: Portrait
184 | 0 0 1 beginpage
185 | gsave
186 | 36 36 212 470 boxprim clip newpath
187 | 1 1 set_scale 0 rotate 40 40 translate
188 | % cluster
189 | gsave
190 | 1 setlinewidth
191 | 0 0 0 graphcolor
192 | newpath 8 8 moveto
193 | 8 322 lineto
194 | 196 322 lineto
195 | 196 8 lineto
196 | closepath stroke
197 | 0 0 0 graphcolor
198 | 14 /Times-Roman set_font
199 | 40 306.8 moveto 124 (handle serial port data) alignedtext
200 | grestore
201 | % Start
202 | gsave
203 | 1 setlinewidth
204 | 0 0 0 nodecolor
205 | 102 444 27 18 ellipse_path stroke
206 | 0 0 0 nodecolor
207 | 14 /Times-Roman set_font
208 | 88.78 439.8 moveto 26.44 (Start) alignedtext
209 | grestore
210 | % init port
211 | gsave
212 | 1 setlinewidth
213 | 0 0 0 nodecolor
214 | newpath 71.64 351 moveto
215 | 71.64 387 lineto
216 | 132.36 387 lineto
217 | 132.36 351 lineto
218 | closepath stroke
219 | 0 0 0 nodecolor
220 | 14 /Times-Roman set_font
221 | 79.64 364.8 moveto 44.72 (init port) alignedtext
222 | grestore
223 | % Start->init port
224 | gsave
225 | 1 setlinewidth
226 | 0 0 0 edgecolor
227 | newpath 102 425.7 moveto
228 | 102 417.25 102 406.87 102 397.37 curveto
229 | stroke
230 | 0 0 0 edgecolor
231 | newpath 105.5 397.18 moveto
232 | 102 387.18 lineto
233 | 98.5 397.18 lineto
234 | closepath fill
235 | 1 setlinewidth
236 | solid
237 | 0 0 0 edgecolor
238 | newpath 105.5 397.18 moveto
239 | 102 387.18 lineto
240 | 98.5 397.18 lineto
241 | closepath stroke
242 | grestore
243 | % check_serial
244 | gsave
245 | 1 setlinewidth
246 | 0 0 0 nodecolor
247 | newpath 59.02 255 moveto
248 | 59.02 291 lineto
249 | 144.98 291 lineto
250 | 144.98 255 lineto
251 | closepath stroke
252 | 0 0 0 nodecolor
253 | 14 /Times-Roman set_font
254 | 67.02 268.8 moveto 69.96 (check_serial) alignedtext
255 | grestore
256 | % init port->check_serial
257 | gsave
258 | 1 setlinewidth
259 | 0 0 0 edgecolor
260 | newpath 102 350.76 moveto
261 | 102 336.98 102 317.4 102 301.47 curveto
262 | stroke
263 | 0 0 0 edgecolor
264 | newpath 105.5 301.13 moveto
265 | 102 291.13 lineto
266 | 98.5 301.13 lineto
267 | closepath fill
268 | 1 setlinewidth
269 | solid
270 | 0 0 0 edgecolor
271 | newpath 105.5 301.13 moveto
272 | 102 291.13 lineto
273 | 98.5 301.13 lineto
274 | closepath stroke
275 | grestore
276 | % format_data
277 | gsave
278 | 1 setlinewidth
279 | 0 0 0 nodecolor
280 | newpath 60.18 179 moveto
281 | 60.18 215 lineto
282 | 143.82 215 lineto
283 | 143.82 179 lineto
284 | closepath stroke
285 | 0 0 0 nodecolor
286 | 14 /Times-Roman set_font
287 | 68.18 192.8 moveto 67.63 (format_data) alignedtext
288 | grestore
289 | % check_serial->format_data
290 | gsave
291 | 1 setlinewidth
292 | 0 0 0 edgecolor
293 | newpath 102 254.84 moveto
294 | 102 246.06 102 235.16 102 225.27 curveto
295 | stroke
296 | 0 0 0 edgecolor
297 | newpath 105.5 225.07 moveto
298 | 102 215.07 lineto
299 | 98.5 225.07 lineto
300 | closepath fill
301 | 1 setlinewidth
302 | solid
303 | 0 0 0 edgecolor
304 | newpath 105.5 225.07 moveto
305 | 102 215.07 lineto
306 | 98.5 225.07 lineto
307 | closepath stroke
308 | grestore
309 | % bool_data
310 | gsave
311 | 1 setlinewidth
312 | 0 0 0 nodecolor
313 | newpath 102 140 moveto
314 | 38.58 122 lineto
315 | 102 104 lineto
316 | 165.42 122 lineto
317 | closepath stroke
318 | 0 0 0 nodecolor
319 | 14 /Times-Roman set_font
320 | 74.4 117.8 moveto 55.21 (bool_data) alignedtext
321 | grestore
322 | % format_data->bool_data
323 | gsave
324 | 1 setlinewidth
325 | 0 0 0 edgecolor
326 | newpath 102 178.7 moveto
327 | 102 170.25 102 159.87 102 150.37 curveto
328 | stroke
329 | 0 0 0 edgecolor
330 | newpath 105.5 150.18 moveto
331 | 102 140.18 lineto
332 | 98.5 150.18 lineto
333 | closepath fill
334 | 1 setlinewidth
335 | solid
336 | 0 0 0 edgecolor
337 | newpath 105.5 150.18 moveto
338 | 102 140.18 lineto
339 | 98.5 150.18 lineto
340 | closepath stroke
341 | grestore
342 | % led13_high
343 | gsave
344 | 1 setlinewidth
345 | 0 0 0 nodecolor
346 | newpath 15.5 17 moveto
347 | 15.5 53 lineto
348 | 94.5 53 lineto
349 | 94.5 17 lineto
350 | closepath stroke
351 | 0 0 0 nodecolor
352 | 14 /Times-Roman set_font
353 | 23.5 30.8 moveto 62.99 (led13_high) alignedtext
354 | grestore
355 | % bool_data->led13_high
356 | gsave
357 | 1 setlinewidth
358 | 0 0 0 edgecolor
359 | newpath 93.14 106.45 moveto
360 | 89.39 100.2 85.02 92.79 81.23 86 curveto
361 | 76.95 78.33 72.46 69.91 68.42 62.2 curveto
362 | stroke
363 | 0 0 0 edgecolor
364 | newpath 71.48 60.5 moveto
365 | 63.77 53.24 lineto
366 | 65.27 63.73 lineto
367 | closepath fill
368 | 1 setlinewidth
369 | solid
370 | 0 0 0 edgecolor
371 | newpath 71.48 60.5 moveto
372 | 63.77 53.24 lineto
373 | 65.27 63.73 lineto
374 | closepath stroke
375 | 0 0 0 edgecolor
376 | 14 /Times-Roman set_font
377 | 82 74.8 moveto 21.77 (true) alignedtext
378 | grestore
379 | % led13_low
380 | gsave
381 | 1 setlinewidth
382 | 0 0 0 nodecolor
383 | newpath 112.45 17 moveto
384 | 112.45 53 lineto
385 | 187.55 53 lineto
386 | 187.55 17 lineto
387 | closepath stroke
388 | 0 0 0 nodecolor
389 | 14 /Times-Roman set_font
390 | 120.45 30.8 moveto 59.1 (led13_low) alignedtext
391 | grestore
392 | % bool_data->led13_low
393 | gsave
394 | 1 setlinewidth
395 | 0 0 0 edgecolor
396 | newpath 110.36 106.19 moveto
397 | 117.19 94.1 127.02 76.7 135.17 62.25 curveto
398 | stroke
399 | 0 0 0 edgecolor
400 | newpath 138.38 63.7 moveto
401 | 140.25 53.27 lineto
402 | 132.28 60.26 lineto
403 | closepath fill
404 | 1 setlinewidth
405 | solid
406 | 0 0 0 edgecolor
407 | newpath 138.38 63.7 moveto
408 | 140.25 53.27 lineto
409 | 132.28 60.26 lineto
410 | closepath stroke
411 | 0 0 0 edgecolor
412 | 14 /Times-Roman set_font
413 | 128 74.8 moveto 26.43 (false) alignedtext
414 | grestore
415 | % led13_high->check_serial
416 | gsave
417 | 1 setlinewidth
418 | 0 0 0 edgecolor
419 | newpath 46.45 53.1 moveto
420 | 40.23 66.56 32.33 85.98 29 104 curveto
421 | 26.09 119.73 26.75 124.16 29 140 curveto
422 | 33.94 174.82 33.83 185.31 51 216 curveto
423 | 57.37 227.39 66.47 238.36 75.21 247.53 curveto
424 | stroke
425 | 0 0 0 edgecolor
426 | newpath 72.88 250.15 moveto
427 | 82.41 254.77 lineto
428 | 77.85 245.21 lineto
429 | closepath fill
430 | 1 setlinewidth
431 | solid
432 | 0 0 0 edgecolor
433 | newpath 72.88 250.15 moveto
434 | 82.41 254.77 lineto
435 | 77.85 245.21 lineto
436 | closepath stroke
437 | grestore
438 | % led13_low->check_serial
439 | gsave
440 | 1 setlinewidth
441 | 0 0 0 edgecolor
442 | newpath 157.89 53.17 moveto
443 | 163.64 66.67 170.94 86.11 174 104 curveto
444 | 176.7 119.77 176.25 124.16 174 140 curveto
445 | 169.06 174.82 169.02 185.23 152 216 curveto
446 | 145.69 227.4 136.68 238.44 128.04 247.66 curveto
447 | stroke
448 | 0 0 0 edgecolor
449 | newpath 125.42 245.34 moveto
450 | 120.94 254.95 lineto
451 | 130.43 250.23 lineto
452 | closepath fill
453 | 1 setlinewidth
454 | solid
455 | 0 0 0 edgecolor
456 | newpath 125.42 245.34 moveto
457 | 120.94 254.95 lineto
458 | 130.43 250.23 lineto
459 | closepath stroke
460 | grestore
461 | endpage
462 | showpage
463 | grestore
464 | %%PageTrailer
465 | %%EndPage: 1
466 | %%Trailer
467 | %%Pages: 1
468 | %%BoundingBox: 36 36 248 506
469 | end
470 | restore
471 | %%EOF
472 | 


--------------------------------------------------------------------------------
/dot/atmega328w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/atmega328w.png


--------------------------------------------------------------------------------
/dot/change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/change.png


--------------------------------------------------------------------------------
/dot/chart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/chart.png


--------------------------------------------------------------------------------
/dot/chart.ps:
--------------------------------------------------------------------------------
   1 | %!PS-Adobe-3.0
   2 | %%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner
   3 | %%Title: chart.ps
   4 | %%CreationDate: Fri Apr  4 17:53:01 2014
   5 | %%DocumentData: Clean7Bit
   6 | %%LanguageLevel: 2
   7 | %%Pages: 1
   8 | %%BoundingBox: 14 14 655 255
   9 | %%EndComments
  10 | %%BeginProlog
  11 | % Use own dictionary to avoid conflicts
  12 | 10 dict begin
  13 | %%EndProlog
  14 | %%Page: 1 1
  15 | % Translate for offset
  16 | 14.173228346456694 14.173228346456694 translate
  17 | % Translate to begin of first scanline
  18 | 0 240.00000000000006 translate
  19 | 640 -240.00000000000006 scale
  20 | % Image geometry
  21 | 800 300 8
  22 | % Transformation matrix
  23 | [ 800 0 0 300 0 0 ]
  24 | % Strings to hold RGB-samples per scanline
  25 | /rstr 800 string def
  26 | /gstr 800 string def
  27 | /bstr 800 string def
  28 | {currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop}
  29 | {currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop}
  30 | {currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop}
  31 | true 3
  32 | %%BeginData:        52453 ASCII Bytes
  33 | colorimage
  34 | JcC<$JcC<$JcC<$iW"E~>
  35 | JcC<$JcC<$JcC<$iW"E~>
  36 | JcC<$JcC<$JcC<$iW"E~>
  37 | JcC<$JcC<$JcC<$iW"E~>
  38 | JcC<$JcC<$JcC<$iW"E~>
  39 | JcC<$JcC<$JcC<$iW"E~>
  40 | JcC<$JcC<$JcC<$iW"E~>
  41 | JcC<$JcC<$JcC<$iW"E~>
  42 | JcC<$JcC<$JcC<$iW"E~>
  43 | JcC<$JcC<$JcC<$iW"E~>
  44 | JcC<$JcC<$JcC<$iW"E~>
  45 | JcC<$JcC<$JcC<$iW"E~>
  46 | JcC<$JcC<$JcC<$iW"E~>
  47 | JcC<$JcC<$JcC<$iW"E~>
  48 | JcC<$JcC<$JcC<$iW"E~>
  49 | JcC<$JcC<$JcC<$iW"E~>
  50 | JcC<$JcC<$JcC<$iW"E~>
  51 | JcC<$JcC<$JcC<$iW"E~>
  52 | JcC<$JcC<$JcC<$iW"E~>
  53 | JcC<$JcC<$JcC<$iW"E~>
  54 | JcC<$JcC<$JcC<$iW"E~>
  55 | JcC<$JcC<$JcC<$iW"E~>
  56 | JcC<$JcC<$JcC<$iW"E~>
  57 | JcC<$JcC<$JcC<$iW"E~>
  58 | JcC<$JcC<$JcC<$iW"E~>
  59 | JcC<$JcC<$JcC<$iW"E~>
  60 | JcC<$JcC<$JcC<$iW"E~>
  61 | JcC<$JcC<$JcC<$iW"E~>
  62 | JcC<$JcC<$JcC<$iW"E~>
  63 | JcC<$JcC<$JcC<$iW"E~>
  64 | JcC<$JcC<$JcC<$iW"E~>
  65 | JcC<$JcC<$JcC<$iW"E~>
  66 | JcC<$JcC<$JcC<$iW"E~>
  67 | JcC<$JcC<$JcC<$iW"E~>
  68 | JcC<$JcC<$JcC<$iW"E~>
  69 | JcC<$JcC<$JcC<$iW"E~>
  70 | JcC<$JcFX-!<.QLJcCE'J,~>
  71 | JcC<$JcFX-!<.QLJcCE'J,~>
  72 | JcC<$JcFX-!<.QLJcCE'J,~>
  73 | JcC<$Rf
  75 | JcC<$Rf0m[o^Mk[!q`>amf*M^rrUqgqtU0moAJa0k5sc'o7?pm
  76 | s.B=A~>
  77 | JcC<$Rf3on!-o
  78 | s.B=A~>
  79 | JcC<$Rf
  81 | JcC<$Rfe\7u_S+7ortP
  83 | JcC<$RfiD7M1a@Wrs[)mbg+PNF3)\QbK&04rtP?Vs8TmC
  84 | ]!$On\?k;ss..I8s3uAmT`KPeJcC<$TDsE~>
  85 | JcC<$Rf
  87 | JcC<$Rf
  89 | JcC<$Rf
  91 | JcC<$T`5JDSti0^WHiZdVl$5Yc2@SBOehmS!UEAWrs&H%s8N$j_>V@SA^(,Q$#.`cs'+dgs5I)W
  92 | rsZ!X9q\`[K8G.QNf'>)rrhh%gX'X3rrI/ZJcC<$TDsE~>
  93 | JcC<$T`5JKX08h9[>KdIZa-d5eGT=IT
  95 | JcC<$T`5JQ\%B>g^RLY+]tM"agALsOXh4K1!Ut@5rs&K&s8N%CdJ_SrN7n10$'3j@s+Kk@s6>15
  96 | rsZa#HFUocU8O]2X/NE(rrhtPjP5dnrrJG8JcC<$TDsE~>
  97 | JcC<$T`5JP[(3i^AUAT*]Xt_\f_kaMOad2;$`co"s8$'0rrg30H)f_[5Q:mR4R?140
  98 | Mr"F5IEkRWAGY$
  99 | JcC<$T`5JU^;@h-H&RQ!`5KO+h>I9RT9&lc$asOEs8$fNrr<"-XSo@(ERXmd)hYAbULL$rVOh@o
 100 | Rc4;HNmqV2Gl-CZdW+O5jo#,\rr:Mqr;QeNb^oeFs.B=A~>
 101 | JcC<$T`5J[a32`PN1?;ic-4>Nir&fWXe5L5$c%#es8.Smrr<"C\Ga#?L"ZG))jS%8Z$EU\Z`JMX
 102 | WTO6\T%\M`Mu;W!fnSkXkktG_rr:`5r;Qe`e:IXNs.B=A~>
 103 | JcC<$SGrcWKW1_bcM7D?OaHu2!N&Kgrs%:lGOb])p\k*mFj0ga*I5*=f2pPWg<Wr;Qe<_L_`
 105 | JcC<$SGrcZPdIWGeG0%ET8`Z[!O6,5rs%G/M"CXTq#13nLXQ/$*K%V]ghkg'hpZT"e+*J
 107 | JcC<$SGrc]UVFC)gA([KXe#@.!PE[Vrs%VFRJ$T(q>L
 109 | JcC<$SGrePgSps`@K$$%!Kj2TrrMFXrVm&tSbE%cAc??EAm
 115 | JcC<$Sc8r;GlOb
 117 | JcC<$Sc8rBMZ:&es*qWUrrJ[pqu6]b@dX1%L=?2&b/h`Ia3OY`%J\ZVAH2\b?\=)hL43q9rsISZ
 118 | o\u^3kCpS.oR[$ns.B=A~>
 119 | JcC<$Sc8rHRfC.6s,k7qrrK14qu6]dGjYM;R+_N>da6Chcdi!o%Jeo\HN4$(G*SG_R#lmsrsIbl
 120 | p?&ZVl^,TQp4<6ps.B=A~>
 121 | JcC<$T)T,[=kitUU]9+Gbkh>?K2qea!G4t%rrg@lF[/r+;i+s-fMYHcCX:JcD;@J,~>
 123 | JcC<$T)T,^Dr:T%YQ*Qoe,'(FPAC&E!IA5QrrgXETmhOjJHC=Kli-nkJ_._rP*D8sP)c(1rrrC4
 124 | s8V2)rVloaEW,nDr-G[Ks/2msN6["SJcD;@J,~>
 125 | JcC<$T)T,aKB3'I])Ul?g%t^LU4N3'!KD@%rrgmMYE4qGP6-l-mf*4nPMOBOU84W]U7SC_rrrCJ
 126 | s8V;@rVlodL&M#XrJeMjs0T67S^i;kJcD;@J,~>
 127 | JcC<$TDo;a?HrNMWMBLn]KrFlrrI;TqtpKY9)\bupIj^r_=gk%Z]t/jk5PAfA_le:B"[Eok$cL3
 128 | rrr?qs8V(LrH&'X>lF[/S9b,6s+dcWHcCX:JcD;@J,~>
 129 | JcC<$TDo;dF4C6i['0N0`*0JDrrIqoqtpK\@f?<8pgWQIanKQE]qP1Bl2L\iH/\8WHH#:=l#kJQ
 130 | rrrC4s8V4hrIt?(EW,nDWJ^]Ts-L:rN6["SJcD;@J,~>
 131 | JcC<$TDo;fLYDe.^UjIFc#LGorrJP3qu$Q`Gl@XNq0DCudJ/4da058om/I"lN99]tNQpq\m"sEn
 132 | rrrCJs8VA-rKdPKLAh,Y[@@0qs/*^6S^i;kJcD;@J,~>
 133 | JcC<$T`5MH=36eNHX^?/FH!7cIeNa?!Dr%XrrMFXrVmbAOT0XJs&K*0QiCOXs8W'gmf3=F>ibj@
 134 | Pl(IarD!=lia_re!U*efrsHbHo)Jad:$)D%`e"/@s.01?~>
 135 | JcC<$T`5MOD:#,6N-9<%L7>VRNq`MP!GCcrrrMOsrVmbJTDshqs(hYOV>k`(s8W(*nc/XMETd=h
 136 | UAOrorac'/k'-e(!UFb)rsI%fo`+sfAEa&Pc@Q"Hs.01?~>
 137 | JcC<$T`5MUK%@5oSVi5oR&Rl?T(r9a!IaG6rrMV6rVmbTXoFpBs+(-mZN#gLs8W(AoDejSL$S`9
 138 | YP\>'rd+VElAPW@!Ub^ArsI;-p&G'hHL(U%eUdaOs.01?~>
 139 | JcC<$U&PYn>K-X"h;t)ijkeemabT`lrrLkRqYpT^9)ei&r*emjHH?+ds1+Kr@d!dkk=PXP"41%i
 140 | P5>1^rD!=li^j#i#&[]Gs5cl%rr38$Du]ia`rH)/JcC<$T`9N~>
 141 | JcC<$U&PYpE6S@BiTR26ki1S$d$OV.rrM"lqYpTa@fHB>r,qE,MpME=s2(W4G3],-l
 143 | JcC<$U&PYrK[g%bk3K@WlfR=/f;AHErrM21qYpTcGlI^TrJC"CSC[^js3%_JMXCHDm
 145 | JcC<$T`5#jr;QejRJ6^^G,+p6!TQlQruJ1rrr7;cs&K*0QiCOVrr9*Bs8Vf1Ip-VtT[2g!rr3/u
 146 | 8cShLA,ZE.k["2f%b(IXr1I6\s8RPWs8?BZJcC<$U&TW~>
 147 | JcC<$T`5#jr;Qf"VYC)kLp-[T!U!tlruJS7rr7o&s(hYOV>k`'rr9H^s8Vi:ODfSlXju_7rr3/u
 148 | @K6AhGQ%OBlZ3")%b^m^r2ai*s8S.qs8I/tJcC<$U&TW~>
 149 | JcC<$T`5#jr;Qf-ZhOJ#RC`7p!U=t0ruJqPrr8M>s+(-mZN#gKrr9g%s8VlBTS/Db\D-ELrr30!
 150 | GQ7^,MuEYVm=tW?%c76crO@ONs8S_5s8Il8JcC<$U&TW~>
 151 | JcC<$Rf?4SCr`QFq:e>oFr;YT:B1$80rrqmX
 152 | rr:Y]rr3&7FE%3Y"TG>uHgC\2"f=k+
 153 | JcC<$Rf
 155 | JcC<$Rf
 157 | JcC<$Rf
 159 | JcC<$Rfc9k2Z@="5po;pAY'lj7<3Qi:Q
 161 | JcC<$RfCBJcC<$TDsE~>
 163 | JcC<$JcC<$JcC<$iW"E~>
 164 | JcC<$JcC<$JcC<$iW"E~>
 165 | JcC<$JcC<$JcC<$iW"E~>
 166 | JcC<$JcC<$JcC<$iW"E~>
 167 | JcC<$JcC<$JcC<$iW"E~>
 168 | JcC<$JcC<$JcC<$iW"E~>
 169 | JcC<$JcC<$JcC<$iW"E~>
 170 | JcC<$JcC<$JcC<$iW"E~>
 171 | JcC<$JcC<$JcC<$iW"E~>
 172 | JcC<$JcC<$JcC<$iW"E~>
 173 | JcC<$JcC<$JcC<$iW"E~>
 174 | JcC<$JcC<$JcC<$iW"E~>
 175 | JcC<$JcC<$JcC<$iW"E~>
 176 | JcC<$JcC<$JcC<$iW"E~>
 177 | JcC<$JcC<$JcC<$iW"E~>
 178 | JcC<$JcC<$JcC<$iW"E~>
 179 | JcC<$JcC<$JcC<$iW"E~>
 180 | JcC<$JcC<$JcC<$iW"E~>
 181 | JcC<$JcC<$JcC<$iW"E~>
 182 | JcC<$JcC<$JcC<$iW"E~>
 183 | JcC<$JcC<$JcC<$iW"E~>
 184 | JcC<$JcC<$JcC<$iW"E~>
 185 | JcC<$JcC<$JcC<$iW"E~>
 186 | JcC<$JcC<$JcC<$iW"E~>
 187 | JcC<$JcC<$JcC<$iW"E~>
 188 | JcC<$JcC<$JcC<$iW"E~>
 189 | JcC<$JcC<$JcC<$iW"E~>
 190 | JcC<$JcC<$JcC<$iW"E~>
 191 | JcC<$JcC<$JcC<$iW"E~>
 192 | JcC<$JcC<$JcC<$iW"E~>
 193 | JcC<$JcC<$JcC<$iW"E~>
 194 | JcC<$JcC<$JcC<$iW"E~>
 195 | JcC<$JcC<$JcC<$iW"E~>
 196 | h#@ASrg3lRs4s03fn'0Ss+13$s+133s*t~>
 197 | h#@ASrg3lRs4s03fn'0Ss+13$s+133s*t~>
 198 | h#@ASrg3lRs4s03fn'0Ss+13$s+133s*t~>
 199 | h#@A#rmV/Gnp8mBGOG;,J\ZiPJ\ZiPJ\^WfY5a"~>
 200 | h#@A#rmV/Gnp8mBGOG;,J\ZiPJ\ZiPJ\^WfY5a"~>
 201 | h#@A#rmV/Gnp8mBGOG;,J\ZiPJ\ZiPJ\^WfY5a"~>
 202 | h>[lRMuWeVs2(*%s.7Dbs+13$s+13$s,m>3~>
 203 | h>[lRMuWeVs2(*%s.7Dbs+13$s+13$s,m>3~>
 204 | h>[lRMuWeVs2(*%s.7Dbs+13$s+13$s,m>3~>
 205 | h>[l=GC+\BriE='s0\t[s+13$s+13$s,m>3~>
 206 | h>[l=GC+\BriE='s0\t[s+13$s+13$s,m>3~>
 207 | h>[l=GC+\BriE='s0\t[s+13$s+13$s,m>3~>
 208 | h>[lD])M;Qetg"Zs1bI_s+13$s+13$s,m>3~>
 209 | h>[lD])M;Qetg"Zs1bI_s+13$s+13$s,m>3~>
 210 | h>[lD])M;Qetg"Zs1bI_s+13$s+13$s,m>3~>
 211 | g&D;bWkth:s0BLms+13$s+13$s,m>3~>
 212 | g&D;bWkth:s0BLms+13$s+13$s,m>3~>
 213 | g&D;bWkth:s0BLms+13$s+13$s,m>3~>
 214 | h>[l"R/d,Ff&D;[p4D4Rs+13$s+13$s,m>3~>
 215 | h>[l"R/d,Ff&D;[p4D4Rs+13$s+13$s,m>3~>
 216 | h>[l"R/d,Ff&D;[p4D4Rs+13$s+13$s,m>3~>
 217 | h>[iZN/VqErViRAFKL,oJcC<$JcC<$OT0h~>
 218 | h>[iZN/VqErViRAFKL,oJcC<$JcC<$OT0h~>
 219 | h>[iZN/VqErViRAFKL,oJcC<$JcC<$OT0h~>
 220 | g].
 221 | g].
 222 | g].
 223 | JcC<$JcC<$JcC<$iW"E~>
 224 | JcC<$JcC<$JcC<$iW"E~>
 225 | JcC<$JcC<$JcC<$iW"E~>
 226 | JcC<$JcC<$JcC<$iW"E~>
 227 | JcC<$JcC<$JcC<$iW"E~>
 228 | JcC<$JcC<$JcC<$iW"E~>
 229 | JcC<$JcC<$JcC<$iW"E~>
 230 | JcC<$JcC<$JcC<$iW"E~>
 231 | JcC<$JcC<$JcC<$iW"E~>
 232 | JcC<$JcC<$JcC<$iW"E~>
 233 | JcC<$JcC<$JcC<$iW"E~>
 234 | JcC<$JcC<$JcC<$iW"E~>
 235 | JcC<$JcC<$JcC<$iW"E~>
 236 | JcC<$JcC<$JcC<$iW"E~>
 237 | JcC<$JcC<$JcC<$iW"E~>
 238 | JcC<$JcC<$JcC<$iW"E~>
 239 | JcC<$JcC<$JcC<$iW"E~>
 240 | JcC<$JcC<$JcC<$iW"E~>
 241 | JcC<$JcC<$JcC<$iW"E~>
 242 | JcC<$JcC<$JcC<$iW"E~>
 243 | JcC<$JcC<$JcC<$iW"E~>
 244 | JcC<$JcC<$JcC<$iW"E~>
 245 | JcC<$JcC<$JcC<$iW"E~>
 246 | JcC<$JcC<$JcC<$iW"E~>
 247 | JcC<$JcC<$JcC<$iW"E~>
 248 | JcC<$JcC<$JcC<$iW"E~>
 249 | JcC<$JcC<$JcC<$iW"E~>
 250 | JcC<$JcC<$JcC<$iW"E~>
 251 | JcC<$JcC<$JcC<$iW"E~>
 252 | JcC<$JcC<$JcC<$iW"E~>
 253 | JcC<$JcC<$JcC<$iW"E~>
 254 | JcC<$JcC<$JcC<$iW"E~>
 255 | JcC<$JcC<$JcC<$iW"E~>
 256 | JcC<$JcC<$JcC<$iW"E~>
 257 | JcC<$JcC<$JcC<$iW"E~>
 258 | JcC<$JcC<$JcC<$iW"E~>
 259 | JcC<$JcC<$JcC<$iW"E~>
 260 | JcC<$JcC<$JcC<$iW"E~>
 261 | JcC<$JcC<$JcC<$iW"E~>
 262 | JcC<$JcC<$JcC<$iW"E~>
 263 | JcC<$JcC<$JcC<$iW"E~>
 264 | JcC<$JcC<$JcC<$iW"E~>
 265 | JcC<$JcC<$JcC<$iW"E~>
 266 | JcC<$JcC<$JcC<$iW"E~>
 267 | JcC<$JcC<$JcC<$iW"E~>
 268 | JcC<$JcC<$JcC<$iW"E~>
 269 | JcC<$JcC<$JcC<$iW"E~>
 270 | JcC<$JcC<$JcC<$iW"E~>
 271 | JcC<$JcC<$JcC<$iW"E~>
 272 | JcC<$JcC<$JcC<$iW"E~>
 273 | JcC<$JcC<$JcC<$iW"E~>
 274 | JcC<$K)Z&PV-d),Vu2,GJcC<$kPp&~>
 275 | JcC<$K)Z&Q]7kTd]`!E]JcC<$kPp&~>
 276 | JcC<$K)Z&Re[)Baec(."JcC<$kPp&~>
 277 | JcC<$K)Yh+r'^UCJcC<$JcFp5J,~>
 278 | JcC<$K)YhHr,Me7JcC<$JcFp5J,~>
 279 | JcC<$K)Yhjr20P8JcC<$JcFp5J,~>
 280 | JcC<$K`;)Pf_\)=7bR`ks+13$s69Q6~>
 281 | JcC<$K`;)PiVRWsF5d(Ks+13$s69Q6~>
 282 | JcC<$K`;)Plh[L[lhuD7JcC<$l2Q8~>
 283 | JcC<$M>meYn^Fk1H!^>9"`'pap%eQ;s+13$s6]i:~>
 284 | JcC<$M>meYoA%9dR"P6U"cg+Jp%eQ;s+13$s6]i:~>
 285 | JcC<$M>meYp?1)N]s7F3"h2h>p%eQ;s+13$s6]i:~>
 286 | JcC<$N;j%Uac^"#njN^bO4s*t~>
 287 | JcC<$N;j%VeZ4FGno=naW8%"Ardk*#s+14>s*t~>
 288 | JcC<$N;j"Vj2nUsVZj6AjRrBKJcC<$JcG6>J,~>
 289 | JcC<$O8f=Y^4/oW70Q._D1@b0qaCTVKQU2l70IA
 290 | JcC<$O8f=Zc(0.ZEWpN6N0g94qf2d[R?2aoEWhBDoD/B:s+13$s762?~>
 291 | JcC<$O8f=[hS?2kVZj$#Yd1XEqPOD%Yc@]#"LZkQq>PsFJcC<$o)F4~>
 292 | JcC<$OoGLGSlbn[$!VkK^<=mSgY[DV71=_)gt/iZ9gqK`a7K.Ys+13$s7?8@~>
 293 | JcC<$OoGLL["&'q$%\GA^WY!TgY\FsEX\Jrgt00'GB._]d.@*bs+13$s7?8@~>
 294 | JcC<$OoGLRc`[8F$*CSD_TU
 295 | JcC<$PQ)r]I7Qdq?B)20dFmI?lL+68nXs2X?DI/coBti$d?%3o7Yg*urIP!"s+14Cs*t~>
 296 | JcC<$PQ)reRri[kK:fQldFmI?lL+68o!X3mKt-gKoBti$e"h80F.qdirIP!"s+14Cs*t~>
 297 | JcC<$PQ)ro^Sn'.Y-km^dFmI?lL+68o?ae@ZI/C=oBti$e[qfYW5%WjrIP!"s+14Cs*t~>
 298 | JcC<$Q2_ENIRZatFJ6Y#guRbio_A:\pAYR"q=X4=e:pL_=2OP)JcC<$JcGHDJ,~>
 299 | JcC<$Q2_EVS9&^nOfQFJguRbio_A:\pAYR"q=X4=eX^f&J'@K[JcC<$JcGHDJ,~>
 300 | JcC<$Q2_E_^o+*/Za[m#guRbio_A:\pAYR"q=X4=fX[rYXk<4@JcC<$JcGHDJ,~>
 301 | JcC<$Qi@QVJjr1%J[
 302 | JcC<$Qi@Q\TQ>-sRC:8ii9Bh+qYos`$N9_gk/W*pF0"^&JcC<$JcGKEJ,~>
 303 | JcC<$Qi@Qc_PjB3[_']6i9Bh+qYos`$N9_gk0U9/Vo8#tJcC<$JcGKEJ,~>
 304 | JcC<$RK!`mT1_UIL:#+UjR)U9rp'LjrV#[8N(-6YjRrM's+13$s7u\F~>
 305 | JcC<$RK!`n[
 306 | JcC<$RK!`od&O"D\%Bf8jR)U9rp'LjrV#[:]r.d;kk4q+s+13$s7u\F~>
 307 | JcC<$Rf
 308 | JcC<$Rf
 309 | JcC<$Rf
 310 | JcC<$SGruqUImsUSAWq;me-M;rsA]!mDDsn?.AKEJcC<$JcGWIJ,~>
 311 | JcC<$SGruq\9;nAWPd
 312 | JcC<$SGruqdAa%F\AQnWme-M;rsA]!mF827Y28dKJcC<$JcGWIJ,~>
 313 | JcC<$Sc9&`F@A]L\Bj$uo_dSG#l=&>?U\&Bo)4.>JcC<$r;V9~>
 314 | JcC<$Sc9&dQ#^u6]$K7"o_dSG#l=&BKQ;Oko)4.>JcC<$r;V9~>
 315 | JcC<$Sc9&i]Vh^:][,I$o_dSG#l=&GYG\JVo)4.>JcC<$r;V9~>
 316 | JcC<$T)T,?<^fu^`Rs>DqV2#Ur:8NQ79S+2rIP!"s+14Ks*t~>
 317 | JcC<$T)T,KIr]q<`Rs>DqV2#Ur:8X"Edu^4rIP!"s+14Ks*t~>
 318 | JcC<$T)T,XYG\J4`Rs>DqV2#Ur:8aMVlebGrIP!"s+14Ks*t~>
 319 | JcC<$T`5AuSjl.bZHh@qpAN\E#lXAMA49eUoDO7?JcC<$rr7K~>
 320 | JcC<$T`5AuZu^8H[a*dupAN\E#lXAOLN8"#oDO7?JcC<$rr7K~>
 321 | JcC<$TDo5DW2Hr4cJS'`rRq2VrU]!QVlnnJrIP!"s+14Ls*t~>
 322 | JcC<$U&PGkG=>)d^X_E9qUYZPrUelS7:P0Hrdk*#s+14Ms*t~>
 323 | JcC<$U&PGmQZ@5E^X_E9qUYZPrUes$Ee`NErdk*#s+14Ms*t~>
 324 | JcC<$U&PGp]r.g>^X_E9qUYZPrUf'QVm,4Rrdk*#s+14Ms*t~>
 325 | JcC<$UAkPcC.1pka4onOrRCiPrq+`A7===mJcC<$JcGcMJ,~>
 326 | JcC<$UAkPgNH0
 327 | JcC<$UAkPl\#67:a4onOrRCiPrq,*LVmtsaJcC<$JcGcMJ,~>
 328 | JcC<$U]1YO<^gB!cJJ!`rmLfOrUe6-7?Hj0JcC<$Jc>`MJ,~>
 329 | JcC<$U]1YXIWC+KcJJ!`rmLfOrUeK^Ei/0sJcC<$Jc>`MJ,~>
 330 | JcC<$U]1YcY,AJ6cJJ!`rmLfOrUedCVnhWmJcC<$Jc>`MJ,~>
 331 | JcC<$V#L_G9gra&dGaWlci47Ko!(YQXR>n8s+13$s*t~>
 332 | JcC<$V#L_RG]J\NdGaWlci47Ko"K0c]'fBFs+13$s*t~>
 333 | JcC<$V#L__Wi*,6dGaWlci47Ko$423bO51Ws+13$s*t~>
 334 | JcC<$V>ghA91='9eE6B#c2S%Hn
 335 | JcC<$V>ghNGB/nZeE6B#c2S%Hn?$_SaRK(Xs+13%s*t~>
 336 | JcC<$V>gh\WMd,9eE6B#c2S%HnAV<(dd[-bs+13%s*t~>
 337 | JcC<$VZ-q>8k"-AfBDl*bPqhDmXIZ,f^o&ms+13&s*t~>
 338 | JcC<$VZ-qLG&in_fBDl*bPqhDm[J6Gg@P8os+13&s*t~>
 339 | JcC<$VZ-q\WMd/=fBDl*bPqhDm^oBuh=LSrs+13&s*t~>
 340 | JcC<$VuI%88O\0Df]r//ao;S>k@@#+k4O<*JcCB&J,~>
 341 | JcC<$VuI%GF`Nnaf]r//ao;S>k_O8Dk4O<*JcCB&J,~>
 342 | JcC<$VuI%YWMd2>f]r//ao;S>l*@4qk4O<*JcCB&J,~>
 343 | JcC<$W;d+57R`0Ng$8:Nrs&2F9gtcBpjrHrs+LE&~>
 344 | JcC<$W;d+EF)mkhg$8:Nrs&2LG]L(UpjrHrs+LE&~>
 345 | JcC<$W;d+XW2I,Ag$8:Nrs&2SWi*i&pjrHrs+LE&~>
 346 | JcC<$WW*4A8O\ENg$JFOrs/PpUd[u"nGIk;JcCH(J,~>
 347 | JcC<$WW*4OF`O"gg$JFOrs/Pp[W6Q;nGIk;JcCH(J,~>
 348 | JcC<$WW*4^WMd2@g$JFOrs/Ppb,;2hnGIk;JcCH(J,~>
 349 | JcC<$WrE=B8O\BNg?eUPrs/JkH:;6!oDX=@JcCK)J,~>
 350 | JcC<$WrE=PF`O"hg?eUPrs/JkQZ@c;oDX=@JcCK)J,~>
 351 | JcC<$WrE=_WMd5Bg?eUPrs/Jk\u2^ioDX=@JcCK)J,~>
 352 | JcC<$X8`FQ9LXBGg?nXNrs&8T<(2f2pOW?qs+^Q(~>
 353 | JcC<$X8`F[GB0%dg?nXNrs&8WHuc"HpOW?qs+^Q(~>
 354 | JcC<$X8`FgWi*8@g?nXNrs&8[XJ`espOW?qs+^Q(~>
 355 | JcC<$XT&O^:doWDg$ACIrs&/,7S(8]qgncus+gW)~>
 356 | JcC<$XT&OeH?,4ag$ACIrs&/8F*,Ijqgncus+gW)~>
 357 | JcC<$XT&OnXJ`G@g$ACIrs&/FVl7u1qgncus+gW)~>
 358 | JcC<$XoAXj=[dAFf^&:Grs/PoKgfG,oDX=@JcCQ+J,~>
 359 | JcC<$XoAXoJT?jdf^&:Grs/PoT5oVAoDX=@JcCQ+J,~>
 360 | JcC<$XoAXuYc"hAf^&:Grs/Po^8J-joDX=@JcCQ+J,~>
 361 | JcC<$Y5\as@7>"DfBN"Ars&>]
 362 | JcC<$Y5\b!LN8?cfBN"Ars&>_I<)7MpjrHrs+p]*~>
 363 | JcC<$Y5\b%Z_t+AfBN"Ars&>bXJ`htpjrHrs+p]*~>
 364 | JcC<$YQ"k&DFIsAe`lb
 365 | JcC<$YQ"k(O`H,be`lb
 366 | JcC<$YQ"k)\YlXCe`lb
 367 | JcC<$YQ"i^79$J=k4JYars&GmF@C'+oR[$ns,$c+~>
 368 | JcC<$YQ"j%EdY7Bk4JYars&GmPB)ZBoR[$ns,$c+~>
 369 | JcC<$YQ"jFVl[JXk4JYars&Gm\>QXloR[$ns,$c+~>
 370 | gA_DoZ2aj[S!_l[s+14-rs,Ah9rQ@so_uB##5QnF7AoJIJcC<$MZ82~>
 371 | gA_DoZ2aj[S!_l[s+14-rs-,UGd,KQo_uB##5R)!Ejk<0JcC<$MZ82~>
 372 | gA_DoZ2aj[S!_l[s+14-rs-uMWk$F7o_uB##5R;YVoS-!JcC<$MZ82~>
 373 | g]%TAE1m7%HIgkqmeQm6^k';c^^$8s7=1E$\%];d#.T.O9VSu0J\ZiPhS?;oJ,~>
 374 | g]%TAE1m7%HIgkqmeQm6^k';c^^$`XEep*^\%];d#.Tk;FelI[J\ZiPhS?;oJ,~>
 375 | g]%TAE1m7%HIgkqmeQm6^k';c^^%9FVjNjN\%];d#.UY1V5Lc9J\ZiPhS?;oJ,~>
 376 | h#@`YM6ilT_Nt6%T$)]bJcFa0#Mr6FM8e
 377 | h#@`YM6ilT_Nt6%T$)]bJcFa0#N^5OT#KOTqmHG.rU5P_T'#`ts+13.s*t~>
 378 | h#@`YM6ilT_Nt6%T$)]bJcFa0#O\Xj\&I1mqmHG.rU7%i]&r^;s+13.s*t~>
 379 | h#@_]`5ePNXKV[([B5#[JcFd1#OYebGe_r"qQp2+prGop`:*VTs+13/s*t~>
 380 | h#@_]`5ePNXKV[([B5#[JcFd1#P!CdPeYo>qQp2+psF/(bO>@[s+13/s*t~>
 381 | h#@_]`5ePNXKV[([B5#[JcFd1#PPF#[D1D_qQp2+ptMaFddR*bs+13/s*t~>
 382 | h>[l6QiG+!s.m@.s1bI_s+142rs/OI7:3UWlh@^b#6+4?7<7D\JcC<$N;nD~>
 383 | h>[l6QiG+!s.m@.s1bI_s+142rs/OiEeM$Ulh@^b#6+4]Eff;RJcC<$N;nD~>
 384 | h>[l6QiG+!s.m@.s1bI_s+142rs/P:Vm!eclh@^b#6+5*Vm>=TJcC<$N;nD~>
 385 | h>[kGJr>&!W5>V8s0BLms+142rs#/c:p/:2os"H#qUeG1[Hm[?s+130s*t~>
 386 | h>[kGJr>&!W5>V8s0BLms+142rs#rQHF2/bos"H#qVHC:^[(`Is+130s*t~>
 387 | h>[kGJr>&!W5>V8s0BLms+142rs$lKX1HdDos"H#qW+WRbNo"Us+130s*t~>
 388 | h>[lTnF45^o\tK$p4D4Rs+143rs-P58"e,eo_u&o#5+3L?Jb;QJcC<$NrOV~>
 389 | h>[lTnF45^o\tK$p4D4Rs+143rs."oFK<[Ho_u&o#5,!:K&6+uJcC<$NrOV~>
 390 | h>[lTnF45^o\tK$p4D4Rs+143rs.P^W4C15o_u&o#5,s5Xkr[KJcC<$NrOV~>
 391 | gA_E#T`>"dIrqfDs+143rs.[`7>8b=nbfQi#5m^e7@rc=JcC<$NrOV~>
 392 | gA_E#T`>"dIrqfDs+143rs.n;Egt)+nbfQi#5me9Ej"[%JcC<$NrOV~>
 393 | gA_E#T`>"dIrqfDs+143rs/+rVmaV&nbfQi#5mkjVo%]nJcC<$NrOV~>
 394 | ec,[?oR[$ns5j7cr,G/<^"VoNXT&LuW^Tk
 395 | ec,[?oR[$ns5j7cr/u)W^=r#OXT&Lu]5i8Onbn%=JcCf2J,~>
 396 | ec,[?oR[$ns5j7crOSo3^Y8,PXT&Luc_mesnbn%=JcCf2J,~>
 397 | JcC<$\,QZ$78pJAl1_7Y#6+.&7?H^,JcC<$O8j_~>
 398 | JcC<$\,QZ;EdP4El1_7Y#6+.JEhqmmJcC<$O8j_~>
 399 | JcC<$\,QZWVlRDZl1_7Y#6+.uVnD3eJcC<$O8j_~>
 400 | JcC<$\GlcJ7S'?#jRfGO#5Go$:!iD.JcC<$OT0h~>
 401 | JcC<$\GlcYF*+S1jRfGO#5H>]GLQ'[JcC<$OT0h~>
 402 | JcC<$\GlcjVl72PjRfGO#5HiKWRpY
 403 | JcC<$\c2oq:dp;_i:HoHrs&JoDFK9@p4<6ps,d82~>
 404 | JcC<$\c2p"H?,Xui:HoHrs&JoO)gcPp4<6ps,d82~>
 405 | JcC<$\c2p)XJ`SKi:HoHrs&Jo[\pXsp4<6ps,d82~>
 406 | JcC<$])N$0AOURRg[G$;rs&;>7S:kmr.4m!s,m>3~>
 407 | JcC<$])N$2MK4cng[G$;rs&;HF*5jur.4m!s,m>3~>
 408 | JcC<$])N$4[AU@Ig[G$;rs&;SVl8/7r.4m!s,m>3~>
 409 | JcC<$])Mtp79HtLlhI=V"nZq+IcU0Qs+134s*t~>
 410 | JcC<$])Mu5EdtUNlhI=V"n\%"R,mpks+134s*t~>
 411 | JcC<$])MuTVldS_lhI=V"n]=&[cI+4s+134s*t~>
 412 | JcC<$]Di)R7S'<%jn,AK#5ZP58]L5sJcC<$P5g%~>
 413 | JcC<$]Di)_F*+P3jn,AK#5ZhjFNa.NJcC<$P5g%~>
 414 | JcC<$]Di)oVl7/Rjn,AK#5[2SW7(/4JcC<$P5g%~>
 415 | JcC<$]`/6'<(2_di:HrCrrr%@7
 416 | JcC<$]`/6+I<(t$i:HrCrrr%^Eg5VWJcC<$P5g%~>
 417 | JcC<$]`/60Y,AeNi:HrCrrr&,VmPLWJcC<$P5g%~>
 418 | JcC<$^&J?:GsuA\g[G$6rs&>L7n:Jbqgncus-*J5~>
 419 | JcC<$^&J?:Qu\%ug[G$6rs&>RF*#Ikqgncus-*J5~>
 420 | JcC<$]`/2MVm*qjn,&jZ#5[AXVpOl/JcC<$PQ-.~>
 421 | JcC<$^&J;:78^;>lM$tO"n[@7GN/:Hs+136s*t~>
 422 | JcC<$^&J;NEdG.DlM$tO"n\@+PN)7ds+136s*t~>
 423 | JcC<$^&J;eVlRDZlM$tO"n]L+[,Ub0s+136s*t~>
 424 | JcC<$^AeGm8k#2nj7N>Drs&AN7nCSdr.4m!s-3P6~>
 425 | JcC<$^AeH!G&jP+j7N>Drs&AUF*,Rmr.4m!s-3P6~>
 426 | JcC<$^AeH*WMd8Nj7N>Drs&A\Vl8#2r.4m!s-3P6~>
 427 | JcC<$^]+Q6@RYO[hXUQ9rrr(E7=!qdJcC<$PlH7~>
 428 | JcC<$^]+Q8LiS`uhXUQ9rrr(bEg5VWJcC<$PlH7~>
 429 | JcC<$^]+Q9[&::LhXUQ9rrr)/VmPLWJcC<$PlH7~>
 430 | JcC<$^]+M(79[4Qm.m4P#5ck=8B(#pJcC<$Q2c@~>
 431 | JcC<$^]+M@Ee(aQm.m4P#5d+qFNa+MJcC<$Q2c@~>
 432 | JcC<$^]+M]VldV`m.m4P#5dDYW6t&2JcC<$Q2c@~>
 433 | JcC<$_#FV^7S'?&k4P5D"nd11IcL*Ps+13_rrL^Kf"o.rjq"4@Js*t~>
 434 | JcC<$_#FVjF*+P3k4P5D"ne7'R,djjs+13_rrLQdq>^Kg"o8&lq=aXNs*t~>
 435 | JcC<$_#FW"W2R5Rk4P5D"nfL*[c@%3s+13_rrLcsq>^Ki"oA/oqY0jQs*t~>
 436 | JcC<$_>ac0=@Iqaht-i:rs&AJ7S1_ir.4m!s1SF5]XIY9!I9J!O9'I#m/MS~>
 437 | JcC<$_>ac3J9%1#ht-i:rs&ARF*,^qr.4m!s1SF5`4u-J!K*6BScOSNm/MS~>
 438 | JcC<$_>ac7YG\hLht-i:rs&A[W2S25r.4m!s1SF5c,f_\!LotbX9"^$m/MS~>
 439 | JcC<$_>a^o7:Ej_n,&OQ"nZq+K]MiXs+13urrq/(;GqnupAYH_lgF5JYjUoCkPbD]I-^b2!PkZ#
 440 | s*t~>
 441 | JcC<$_>a_6EeV3\n,&OQ"n\%"SE0Bps+13urrqJQI!hFFpAYHbmI9YZ](,7UlM^_`NUHcF!Q_V6
 442 | s*t~>
 443 | JcC<$_>a_WVm!hgn,&OQ"n]@'\E*@7s+13urrqi,Xf]G.pAYHdnFH1k`:NNfmJ[%cSacUX!RSRI
 444 | s*t~>
 445 | JcC<$_Z'hR78'Z1l1UME#5ZD09@3/+JcC<$eGfR+9Dq9[9]5[F$)*fYJmhu6S=65OrrIM[rQ5/2
 446 | W9jP7~>
 447 | JcC<$_Z'haEd"\:l1UME#5ZbgG15pYJcC<$eGfR3G5ZF^GN\`#$*C,)P'(i+WMcrurrJ+trQtYF
 448 | Zg@^B~>
 449 | JcC<$_Z'hsVl@5Vl1UME#5[/RW7LG9JcC<$eGfR
 451 | JcC<$_uBu,;FQYhiUm,9rrr%47?6L'JcC<$eGfMsqaCL7o`##]\?L)OrrIMVrP\f*W9jP7~>
 452 | JcC<$_uBu1Hubq'iUm,9rrr%UEhhaiJcC<$eGfN>qf2\.o`##j_7GBtrrJ+prQPA?Zg@^B~>
 453 | JcC<$_uBu6Xf&YNiUm,9rrr&'Vn;'aJcC<$eGfNcqkjG3o`#$"b/B\DrrJ\4rR:kS^?klM~>
 454 | JcC<$`;^)AF@C/ag[P-,rs&>778MG&rIP!"s4RGB7JZref;cTrQbE:r!IX53rrKp6m/MS~>
 455 | JcC<$`;^)AQ#_r$g[P-,rs&>CEd61)rIP!"s4RGBEr#_=gpP2>UrN<3!KHOGrrL3Im/MS~>
 456 | JcC<$_uBqRVmF1nnGJUP#5[#NWS$_=JcC<$g<?q>UWW^sC3/cMRVBSacUX!RSRIs*t~>
 457 | JcC<$`;^%J78U8?lM-VD"nQ4mQfn-ps+14's7&PSrs/(6p:n02B]K$j!HX%pO9'I%m/MS~>
 458 | JcC<$`;^%[EdG.ElM-VD"nRLiWTX&-s+14's7(.+rs/.JpW(/EI-:G-!JQm=ScOSPm/MS~>
 459 | JcC<$`;^%pVlRD[lM-VD"nT$t^?>9Bs+14's7*#`rs/4^ps7.YO6ZZC!LK\^X9"^&m/MS~>
 460 | JcC<$`W$/(:.:DkjReZ9#5PPn=539EJcC<$f)G_uqaCL7p\tQiGh;f+\bjWL`;T]:C\n#.!PbT"
 461 | s*t~>
 462 | JcC<$`W$/.H#f_)jReZ9#5Q)UIG=;kJcC<$f)G`@qf2\.p\tQkMVS*K_Yhnsbl.PBJ,9-B!QVP5
 463 | s*t~>
 464 | JcC<$`W$/4X/EDMjReZ9#5Q`GWn[(CJcC<$f)G`eqkjG3p\tQmRc41ibP^(Ce,B:IOo,+U!RJLH
 465 | s*t~>
 466 | JcC<$`r?;BE^aubh=:H-rs&Jm>",:PpjrHrs472NhFmf9!DMGHrt"!ti15[EE/9e/;r%EQp2U$1
 467 | !PkZ#s*t~>
 468 | JcC<$`r?;BPB)`$h=:H-rs&JmJTA*]pjrHrs472Nk'$]D!I*`%rt".7jJeN"Js`=dC#T*lpOrJE
 469 | !Q_V6s*t~>
 470 | JcC<$`r?;C];N!Ph=:H-rs&JnY,B5&pjrHrs472Nn#H>a!NPYart":NkdI@SPbt\BJ*$_1pm(dW
 471 | !RSRIs*t~>
 472 | JcC<$`r?7G78gGBlhQ\C#5Fu_?et>QJcC<$f)Gp.HV@+\h=ppMrTX=]!P,Q9rrDfmrrK""r;Qf0
 473 | WU0Y8~>
 474 | JcC<$`r?7ZEdP7GlhQ\C#5GZJKAH.uJcC<$f)Gp7Rs91IjnJcUrp9Xa!Q)PLrrDinrrKF9r;Qf9
 475 | [-[gC~>
 476 | JcC<$`r?7pVlRD[lhQ\C#5HH@XkiUJJcC<$f)GpA_5aNOn+Zh_rpTjd!R&O_rrDlorrKgNr;QfA
 477 | ^[1uN~>
 478 | JcC<$a8ZA'9LYAojRnW7#6*pc7Bu.RJcC<$_>aP?WVc\si,S_prr_4g
 479 | JcC<$a8ZA-GB0V+jRnW7#6*t9EkL]5JcC<$_>aPI[JTt*jFdI2rr_A*Ct7nPJ,~>
 480 | JcC<$a8ZA5Wi*AOjRnW7#6+(lVo\0!JcC<$_>aPS^\e$4k`u/Hrr_JAJ_TPkJ,~>
 481 | JcC<$aSuMDF%()dh=:H)rrr.]7;q,VJcC<$_>aQ.o(r@dq>L
 482 | JcC<$aSuMDP]Di&h=:H)rrr.tEfK#LJcC<$_>aQ/o_SRfqYgEqrqQKYs*t~>
 483 | JcC<$aSuME];N!Qh=:H)rrr/:Vm51PJcC<$_>aQ1p%n[gqYgEqrqZQZs*t~>
 484 | JcC<$aSuID78pPDm.l\A#6!OS7DeEgJcC<$S,\!~>
 485 | JcC<$aSuIXEdP7Gm.l\A#6!\-Elm\FJcC<$S,\!~>
 486 | JcC<$aSuIoVlRD[m.l\A#6!hdVpOf-JcC<$S,\!~>
 487 | JcC<$ao;S'91>>qjRnK3"nmR;IcL*Ps+13>s*t~>
 488 | JcC<$ao;S.GB0Y-jRnK3"nnR/QfIais+13>s*t~>
 489 | JcC<$ao;S6WMd8OjRnK3"no^/[H$q2s+13>s*t~>
 490 | n,ERijMo@"rdk*#s5O%`r+e`E`8:(`N;j+[d7-dTn,.b:JcELb"d&BVs4,j&rrJeZl2Q8~>
 491 | n,ERjl-Ro?rdk*#s5O%`r/Pf\`8:(`N;j+[flM>an,.b:JcELb"ePGfs4ZB0rrK7jl2Q8~>
 492 | n,ERjmFp@\rdk*#s5O%`rO8]2`8:(`N;j+[ihra)n,.b:JcELb"g%Ius52l9rrKY"l2Q8~>
 493 | nc&[QR
 495 | nc&[UWf-h1!g1:nJcC<$jSoFqEdbLMm.lP="ndmrUuqE&s+13jrrfmH^:Wq7rr@NIrrK=Krr3"N
 496 | rTX?4~>
 497 | nc&[Y]VGFt!iXB?JcC<$jSoG4Vl[P_m.lP="nf:$]B8j=s+13jrrg6[a2RZLrrA/[rrKa^rr3"`
 498 | rTX?4~>
 499 | o)B*+Dg\_,d`8S[GC&1us+144rs%7N7\7rfoni\QqR8mog@>/ns+14%rrM*
 501 | o)B*8LQfBsg/ns+14%rrKjKo`#BKe^]68o(;R'
 502 | o(2mdd/O%GKDt-8J,~>
 503 | o)B*DTW-)eiS)JfVPi^1s+144rs%kiVn(.8oni\QqUVREg@>/ns+14%rrKgIo`#BQgY7qYo_%m=
 504 | o_&6sfDbdNQ2^%JJ,~>
 505 | o)B*,f_bLEs7u]pq7b1+s+145rs/C57
 507 | o)B*8hu*?Ns8)cqqT7B@s+145rs/FZEg+K!o)4CE"nI1aZg%79s+14&rr]Vu8%SBn(")mXM8l0]
 508 | Tk^4=s09T6n+D>4l]B?Ws*t~>
 509 | o)B*Ejo##Us82irqpaPTs+145rs/J1VmOG"o)4CE"nJgo_s-rIs+14&rr]Sq7(N!j("`<^Ra/%=
 510 | YCE\!s1HYKnb8=Jm\&(rs*t~>
 511 | nc&j2Ghi?!J\Co2s+142rs#/c=h*)NqM5(Spn:,fhXcQOQ^,j9M2KXWm/MS~>
 513 | nc&j=O5g3>QcT&Ts+142rs#oPJ%F8!qM5(SppG-shXcrjUncFlR$uS'm/MS~>
 515 | nc&jGVWe'[XOR0!s+142rs$iJXh<9QqM5(SproY=hXc_
 516 | rs??0Z*;rIVl8AKm/MS~>
 517 | o)B!IDL1RIs,h/iJcC<$jo5P:84K6!k4XQ0#6*j^7Cha\JcC<$huEY`!3uF$!3uL2qYpedDT2XF
 518 | \c6UIrrK"=rr3"=n`g((~>
 519 | o)B!PLQUs's.kCQJcC<$jo5PCFE=M1k4XQ0#6*q5El%)
 521 | o)B!WTW%A[s0nW8JcC<$jo5PMW2I/Qk4XQ0#6+%jVp"E&JcC<$huEX\!)i\]!)ri%qYpf*PLTW>
 522 | b5[_*rrKdarr3"ao]cC+~>
 523 | o)AchDX@?%!g7ElJcC<$kPke`AOUsbhX^Z"rrr.S7<[Y^JcC<$huE5HqYpfq7b[n
 525 | o)Ad"L@>*@!i:YEJcC<$kPkeaMK5$%hX^Z"rrr.mEg#DRJcC<$huE49qYpfr?JkeZHi&EorrKCO
 526 | rr3"OrosH5~>
 527 | o)Ad1TC`$]!k4frJcC<$kPkeb[AUFOhX^Z"rrr/6Vm>:RJcC<$huE46qYpfsFlWMuNr5.@rrKda
 528 | rr3"arosH5~>
 529 | o)A`QK)GWM^hr(^s+145rs"u^=h<8QqLnkQr7=D/b3o1Ys+14.s8DNio#CX.!6>$/qYpf"P%aam
 530 | ]BF24rrK"=rr3"=rTX?4~>
 531 | o)A`dR/HscbD,22s+145rs#fMJ%OA#qLnkQr7uF9cL1U]s+14.s8D$[jFR8!!J]\6jneu^[%MdD
 532 | s2=5Trr3#(d/O%GKDt-8J,~>
 533 | o)Aa"Xo/2#et;;[s+145rs$cHXhNHTqLnkQr8jlTe*d-bs+14.s8D!Zj+%"p!JKM3jSJl]^TNUp
 534 | s30nqrr3#3fDbdNQ2^%JJ,~>
 535 | o)AcdD;+sg!fLpiJcC<$kl1k;84TH&k4XE,"nct+MWFJ^s+14)rri>DWiF;9rrgnirLK\^rr@!:
 536 | rs>REs5M@ErVuo]m/MS~>
 537 | o)ActL>`%1!hY5BJcC<$kl1kEFEFY4k4XE,"ne+#TB,]ss+14)rrrC[7RiO>pAY9MJGuROrr2tM
 538 | rr3;0d/W7YKDtoNlg4Y%~>
 539 | o)Ad.TBH1Q!jeNqJcC<$kl1kPW2R8Sk4XE,"nfF(\`EI8s+14)rrrCY6UQq6pAY9SP5_o$rr2t_
 540 | rr3;;fDk-jQ2^g`mHjk'~>
 541 | o)B!NDKM5WWe,)YJcC<$kl1n_@7>Xbht-i!rs&A978VV*rIP!"s4dPTrlWIXrrq%^kl:G+rr2t7
 542 | rr3:mP'Mi8EqfV%?gRfC~>
 543 | o)B!TL5`+P\
 545 | o)B!ZT;9*Ia/tuJJcC<$kl1nbZ_t4Nht-i!rs&ASVlAA=rIP!"s4dPUreZ^8pAY
 547 | nc&X3GPu@ZRIu.2JcFs6#+.ha]%QNJJc>rSoO11ZkP0W.JcFI(s8M]k!Vt[OrrUh[HiF$OMQljT
 548 | s06WlFj04PJ,~>
 549 | nc&XrSoS%=fkP0W.JcFI(!W;ohrrMuWr;QiSF,^+u$(AI#
 550 | s8T]bN/,mKs*t~>
 551 | nc&XFVZ!+f]_I'XJcFs6#0a!I^"MiMJc>rSoWb=0kP0W.JcFI(!W;ohrrMu[r;QiXLReAD$)kf<
 552 | s8U')S=&!rs*t~>
 553 | nG`Xbf>GenJcC<$kPkb;84K<#kOsK,s8N
 554 | nG`XchTaR7JcC<$kPkbDFE=M1kOsK,s8N
 555 | nG`Xejk&>VJcC<$kPkbOW2R5RkOsK,s8N
 556 | nc&[dhu83,JcFj3#PMRpI`L@;rdk+Lrs&Jh:dqbVq18Qss.TIC~>
 557 | nc&XdjFR>^s5a1bpkNmVa5?LfJcGcM#6+"9Ek^i7JcC<$U&TW~>
 558 | nc&Xel@Jtds5a1bqQm*-a5?LfJcGcM#6++mVoe6"JcC<$U&TW~>
 559 | o)AgZJ!H4Ks+143rs"KP?b>"ZqgneGrrr.[7<%/VJcC<$U&TW~>
 560 | o)Ag]Q)CL1s+143rs#HCK=on*qgneGrrr.rEfT&LJcC<$U&TW~>
 561 | o)Ag`X1>`ks+143rs$QBYJ/]XqgneGrrr/9Vm5.OJcC<$U&TW~>
 562 | o)Aj,[f;-MJcC<$kPkb17S'?(kOsK,r;R!"gIFfSmJDJ7JcDJEJ,~>
 563 | o)Aj7_uH4qJcC<$kPkb
 564 | o)AjBci:6@JcC<$kPkbJW2R5TkOsK,r;R!"kGP9+mJDJ7JcDJEJ,~>
 565 | o)AgUJ#/!Qs+145rs/*t7>AnAo_sFAqu6inGt!JJp4<6ps.]OD~>
 566 | o)AgYQ*m06s+145rs/4JEh(5/o_sFAqu6inQZAYWp4<6ps.]OD~>
 567 | o)Ag]X2M8os+145rs/>&Vmjb*o_sFAqu6in];N-up4<6ps.]OD~>
 568 | nc&[ZcME+lJcFp5#(o?W^=r&QJcGTH#5cA.:=eq5JcC<$U]5i~>
 569 | nc&[]fDC.!JcFp5#,$!n^=r&QJcGTH#5c_eGh;H`JcC<$U]5i~>
 570 | nc&[_hu&'*JcFp5#/d@D^=r&QJcGTH#5d2RW7g\=JcC<$U]5i~>
 571 | o)Ad&h#@3N!rBd]JcC<$nG`^*780i6l1]c/q#:Ni@7?aMpjrHrs.fUE~>
 572 | o)Aa1iqiZVqp!fFs+14>rs$YeGI,iapOWA>rrr%KEinO"JcC<$U]5i~>
 573 | o)Aars%;WWOgXEpOWA>rrr&"VnhKjJcC<$U]5i~>
 574 | o)B*(DL\t6f#tFkH?\4ss+14?rs.^`7?G^Po_sFAq#:QoVF=nKoDX=@JcDPGJ,~>
 575 | o)B*5LR#X&h:09DOH8FQs+14?rs.n:Eh^b:o_sFAq#:Qo\8m5XoDX=@JcDPGJ,~>
 576 | o)B*BTW?>mjPA+rVl&^0s+14?rs/+rVmjk/o_sFAq#:QocDRc"oDX=@JcDPGJ,~>
 577 | nc&[NQ#Zb>!dLpAJcC<$nc&jnF@C#^h!k5ms7cNtrp!6I[d*^?s+13Gs*t~>
 578 | nc&[SVhtA,!ft%gJcC<$nc&jnQ#_i"h!k5ms7cNtrp4lM^ZtZHs+13Gs*t~>
 579 | nc&[X\YB%p!iF-8JcC<$nG`^*Vm4(nnGIk;p\tHsn#E;-lM?)3JcDPGJ,~>
 580 | n,ERhi53LgrIP!"s6oslY=2?qf'<$]s7QBqpPMC`iUh^$JcDPGJ,~>
 581 | n,ERhjiu02rIP!"s6osl_/an2f'<$]s7QBqpS2bliUh^$JcDPGJ,~>
 582 | n,ERildskRrIP!"s6oslf;G[]f'<$]s7QBqpVNi7iUh^$JcDPGJ,~>
 583 | JcC<$f`)069LYAojRn*(o`#-oeOE0UmehY9JcDSHJ,~>
 584 | JcC<$f`)0=GB0V+jRn*(o`#-ogiIVbmehY9JcDSHJ,~>
 585 | JcC<$f`)0EWi*AOjRn*(o`#-ojJSs+mehY9JcDSHJ,~>
 586 | JcC<$g&D
 587 | JcC<$g&D
 588 | JcC<$g&D
 589 | h#@]$O.Oi#s4s03fn'0Zrs#&`=1-ZHq18S:rs&>-798.4rdk*#s/,gH~>
 590 | h#@]$O.Oi#s4s03fn'0Zrs#lOI^n"rq18S:rs&>
 591 | h#@]$O.Oi#s4s03fn'0Zrs$fIXh33Oq18S:rs&>MVlJJ@rdk*#s/,gH~>
 592 | l2LbUpAYNVHHt,`p%!F[gir2^s+.tK^]pK&7=1N+\:MHb^]h)?7>A"XJ\ZiPq7s05J,~>
 593 | l2LbWpAYNVHHt,`p%!F[gir2^s+.tK^]pi\Eeg-d\:MHb^]h,iEg!W
 594 | l2LbXpAYNVHHt,`p%!F[gir2^s+.tK^]q9GVj
 595 | o)Afmld+horrMnPpAYNC`W,sig;90Us.7Dbs,6m^moW#4`SU1aJcG6>"o+HRCZ"c8s+13Is*t~>
 596 | o)Ag'mb$q*rrMqepAYNC`W,sig;90Us.7Dbs,6m^npkbM`SU1aJcG6>"o,6@MVn&Ws+13Is*t~>
 597 | o)Ag5o&0':rrMu%pAYNC`W,sig;90Us.7Dbs,6m^p9:I'`SU1aJcG6>"o-0:YM\u's+13Is*t~>
 598 | o)B$%nA=AgcKYAkV=acoe=_ZsXKV[([B5#[N;j.^GsuD\g$\]fs6oslrng78_X./Ns+13Js*t~>
 599 | o)B$2o$-M#fBrV([IjJ*e=_ZsXKV[([B5#[N;j.^Qu\(ug$\]fs6oslroA0AaR&eTs+13Js*t~>
 600 | o)B$@p"/[4hspa8`:X'9e=_ZsXKV[([B5#[MuO!qVm3thmeVM7n,EUkl):N+m/)A6JcDYJJ,~>
 601 | o)B$'Z&"^B[[GIZan5T>f;NuPUqQg.^ScY_N;j*a78U2;l1]c/mJd@`Hpr\Jp4<6ps/5mI~>
 602 | o)B$4^7;.0_lDA7de*PGf;NuPUqQg.^ScY_N;j*tEdG+Bl1]c/mJd@`RW=kWp4<6ps/5mI~>
 603 | o)B$AbH\Xscb/2gg[tLPf;NuPUqQg.^ScY_N;j+5VlRAXl1]c/mJd@`]Vi3up4<6ps/5mI~>
 604 | o)B$)o#9n%\aleYq=agrfBiP;WN*h9s8TCAJcC`0#MD^=SBKsbrdk+:rs&D?78MD$rIP!"s/>sJ~>
 605 | o)B$5oZusA`V$g6qY'psfBiP;WN*h9s8TCAJcC`0#N9iIWlsGprdk+:rs&DIEd6.'rIP!"s/>sJ~>
 606 | o)B$Bp=\u]dJ(_fqtC$tfBiP;WN*h9s8TCAJcC`0#OA@e\]a%*rdk+:rs&DVVlA89rIP!"s/>sJ~>
 607 | oD]0IIIbAB[CYtDLApoH$bWD:s-:mhK)PCpi.:ogrs/4'7=<#/nbdtsJ~>
 608 | oD]0PPP!2h_T)8jS,W-]$bWD:s-:mhK)PCpi.:ogrs/:OEgO]"nbdtsJ~>
 609 | oD]0XWqP-9cI2I:Yl=@r$bWD:s-:mhK)PCpi.:ogrs/D+VmaM!nbdtA"pjrHrs/>sJ~>
 610 | oD]0LY1]r!Wk#1<^!cWS$LsC2J=QT;UORBfJcC`0#)YiV]%??FJcG$8#5P/c@,:GRJcC<$WW.J~>
 611 | oD]0S]\pEM\]).saP-@f$LsC2J=QT;UORBfJcC`0#,ZEo]@ZHGJcG$8#5PfMKAH.uJcC<$WW.J~>
 612 | oD]0Zb3$h#a3huRe)L*$$LsC2J=QT;UORBfJcC`0#0*RE^";ZIJcG$8#5QQBXPNLIJcC<$WW.J~>
 613 | o)B$)e=sP'[aG-BV=acgo(r=b!V,f5s,I$_\OB,idc^=Ts69Ofrp!6I[HdU>s+13Ls*t~>
 614 | o)B$5gTniR_qG(Z[.OA!o(r=b!V,f5s,I$_a`;R0dc^=Ts69Ofrp4lM^?YQGs+13Ls*t~>
 615 | o)B$Bj204'cf+oq`:X'1o(r=b!V,f5s,I$_go%*^dc^=Ts69OfrpQkbam/_Rs+13Ls*t~>
 616 | o)B$'o"X8cc1M&9LOoJVs7u["k>4U-al2jjJcFs6"o!gAGi87Gs+13Ls*t~>
 617 | o)B$4oZHFuf(T.DS:U]ks7u["m!<]Gal2jjJcFs6"o"d4PMl+bs+13Ls*t~>
 618 | o)B$Ap=8R1hY@-NY^uh*s7u["o;nk!al2jjJcFs6"o#m3Zf(M-s+13Ls*t~>
 619 | o)B'#\ZN3O^rY4$bPm(mJcGWI#Q&C-Dnk&qqgne1rs&GN77tknr.4m!s/Q*L~>
 620 | o)B$0`Oiq,bL,5@e:IXNs8)a#r/brZ^YA5SJcFp5#6!7rFj]XTJcC<$WrIS~>
 621 | o)B$=dE0Y^f%]?^h1>TWs8)a#rOJi4^t\>TJcFp5#6!S[W7:85JcC<$WrIS~>
 622 | o)B'Rc-k7rd`SkVPl615JcGWI#*q\X[Fa^=JcFj3"nc\#Olc=gs+13Ms*t~>
 623 | o)B'Xe_8p;g=*g2VYu)GJcGWI#-W&q\C^$@JcFj3"ndjqV<.H&s+13Ms*t~>
 624 | o)B'^hW!YYinVbc\c%*ZJcGWI#0WpG][uHDJcFj3"nf:$]]Jm=s+13Ms*t~>
 625 | l2LbOJcC<$qu6l178'T)jn43)jSoG][RF6Nnc"+>JcDeNJ,~>
 626 | l2LbRJcC<$qu6lAEd"\4jn43)jSoG]`,^7Znc"+>JcDeNJ,~>
 627 | l2LbUJcC<$qu6lTVl@8Qjn43)jSoG]eYfG$nc"+>JcDeNJ,~>
 628 | lMgnac[l+Is8;m%h+^>"a56CcJcFd1"n>\`W9O,/s+13Ns*t~>
 629 | l2Lb9JcC<$r;R#`G]KP!hX^Vrs5X+_nUGSel1oo1JcDeNJ,~>
 630 | l2LbAJcC<$r;R#iWi*>HhX^Vrs5X+_nuen/l1oo1JcDeNJ,~>
 631 | mJd1/rhoggJcC<$rVm,q?U]4Ug[G#js5O%^pmFQdhXlC!JcDeNJ,~>
 632 | mJd18rjMm1JcC<$rVm,sL2rNpg[G#js5O%^po\XqhXlC!JcDeNJ,~>
 633 | mJd1Arl+rQJcC<$rVm-!ZDY(Gg[G#js5O%^prKA;hXlC!JcDeNJ,~>
 634 | o)B#NP_+k5X6T0BU4N>qs8Ds%Jjj(XfB`3_s5Et^ro-L<_X./Ns+13Os*t~>
 635 | o)B#bVO*t%]'f.[Z@W%,s8Ds%TQ5aufB`3_s5Et^roJ9CaR&eTs+13Os*t~>
 636 | o)B$"\ZN6laRSop_L_`
 637 | o)B#ns/Y&!Xe)/WTn35ps8N$&Y!l'bdH:+Qs53h[p3K/\j7\'(JcDhOJ,~>
 638 | o)B$(s1.4=]<8BBZ%;q+s8N$&^iF\(dH:+Qs53h[p6]lij7\'(JcDhOJ,~>
 639 | o)B$7s2aK[ahPX,_1DW;s8N$&eu,OYdH:+Qs53h[p:I62j7\'(JcDhOJ,~>
 640 | o)B#os/Y&!XnVbkU4N>qs8W*(bXk9lb2MskJcFX-#5lA-:tG+6JcC<$XoEn~>
 641 | o)B$)s1.4=]D2@'Z@W%,s8W*(fQD85b2MskJcFX-#5lbeH.VN`JcC<$XoEn~>
 642 | o)B$8s2aK\anku7_L_`
 643 | o)B#os/Y&!Xdu&TTn35prs8Y`:dp5[h=1>ns5!\YoOC=ZkP0W.JcDkPJ,~>
 644 | o)B$)s1.4=]ns5!\YoS@OhkP0W.JcDkPJ,~>
 645 | o)B$8s2aK\ahGO)_1DW;rs8YnXJ`PHh=1>ns5!\YoWkC0kP0W.JcDkPJ,~>
 646 | o)B#besa@oXSVtsU4N>qrs/.&75h#@QRW't+Mo7?pms/l
 647 | o)B#sh5e]G])2O-Z@W%,rs/7PEfn,jmJ2>5h#@QR\oNGZo7?pms/l
 648 | o)B$0jLj$saSc)<_L_`5h#@QRc_ml#o7?pms/l
 649 | o)B$1]tM);Wg/m9TV;AdkhC[gjSoJ_G"#lMfBW*]s4dPXrp3EL[HdU>s+13Qs*t~>
 650 | o)B$Q:(YbD'tc*;j"jSoJ_Q?%_kfBW*]s4dPXrp=uO^?YQGs+13Qs*t~>
 651 | o)J^=#1MnY\[oAgU&P/;YCZ`7rs/M8Vm*hclM#l0g]%KWn>iJ/lM?)3JcDnQJ,~>
 652 | o)B$ThZ*9KqXa[aSYH,djfGK5JcFj3#+J%WXO?8(JcFF'"o!jBGiA=Hs2G!>rq#f6s6]i:~>
 653 | o)B$Yj8\lRqt9pdY+kpu`_&^tJcFj3#-r8pZdS"/JcFF'"o"d4PMu1cs2G!>rq?);s6]i:~>
 654 | o)B$^l2USZr:g0g^S:`1`CE:kJcFj3#0j'G]$fa6JcFF'"o#m3Zf1S.s2=p,[BmJh\~>
 655 | oD]0gO7E(+nE6%Fo]W(M!TgE^WW:V$s6'CeZUIEWbi89oJcFF'#6!"?9$Zl&JcEdj"he/07;LJ*
 656 | s6ou<~>
 657 | oD]0iU@e>VoBW9kp?\RS!QIb27KB<:s6'Ce`,]t#bi89oJcFF'#6!:tFj]XTJcEdj"jM[?Ef].0
 658 | s6ou<~>
 659 | oD]0k[J'O*p$]H
 661 | oD\sGjSuR0rr3&XRB<:b!TgE\WW:V$s69Og_+-t^a56@bJcF@%"nce&O6-(ds2b3@a@?+s!DVd/
 662 | s7$&=~>
 663 | oD\sNl2SQKrr3&]Wk5),!QIb07KB<:s69OgcZF6+a56@bJcF@%"ndstUZM3#s2b3@eT:\0!I4$`
 664 | s7$&=~>
 665 | oD\sTmJkGerr3&c]ZHuL!Q@S,6NEp5s69Oghl*H`a56@bJcF@%"nf=%]B/a;s2b3?jnu"WX7UuC
 666 | nGe"~>
 667 | nG`LQqu6ZQV#LGBql0\5rdk+8rs."G7>Jkao;?QqaCLEJcG6>J,~>
 668 | nG`LTqu6ZWV#LFaqaLU2rIP"7rs.A'Eh(,)n,%\9f)GsN`H$@Znc"+>ao;@!qf2\9JcG6>J,~>
 669 | nG`LXqu6Z]V#LF_qa1C-rIP"7rs.efVmaS#n,%\9f)GsNeu,P$nc"+>ao;@MqkjG9JcG6>J,~>
 670 | MZ3\*rMfn:rIP"7rs.dj75eGf^A<^j(Rq18RgrrMmaqaCKsJcG6>J,~>
 671 | MZ3[KrC-g;qgne5rs.tBEfn/kmJ2>5eGf^BIWDp^q18RgrrMq:qf2[pJcG6>J,~>
 672 | MZ3[JrBgU6qgne5rs/2#VmF4nmJ2>5eGf^CXf'/&q18RgrrN%rqkjG'JcG6>J,~>
 673 | M>m_-WiF#9JcG'9#Ol4lB=ld\pOW@nrrr1`7;^rRJcEmm!W5Re70%1Us7$&=~>
 674 | M>m^N7Rhn)JcG'9#P3alM7hI*pOW@nrrr2"EfAoIJcEmm!W@3=EWD2Ps7$&=~>
 675 | M>m^M6UQ;!JcG'9#PYU'Z+eiTpOW@nrrr2
 676 | M#RP*`;P8eli.4_CdhU9eEHRVs3goOrnp=;`U*JQs2t?ABDY*tS:U_0s*t~>
 677 | M#ROKJ,=fsli.4aO)fi]eEHRVs3goOroA0Bb3]"Vs2t?AN;IVq["88Hs*t~>
 678 | M#ROJIJ\Tqli.4d\>QLAeEHRVs3goOropAZdHpa]s2t?A\,3''d"25ds*t~>
 679 | L]7AQJcG'9#l/R2
 680 | M#RMTqgne5rs8IdEdkCCjn/P's3^iMp6p#jj7S!'bPqUlFo67\K(jirnGe"~>
 681 | M#RMTqgne5rs8P8Vl[JWjn/P's3^iMp:[B4j7S!'bPqV&W;NOoZ20%OnGe"~>
 682 | JcC<$nc&mlGstc
 683 | JcC<$nc&mmR
 684 | JcC<$nc&mn^8J'Ed,X`rJcF*s#5mDWW7CA8JcF!p#hc/S['-X;a7Y#`n,In~>
 685 | JcC<$o)B!pMFC:;cJnHoJcF$q"nZFrPih^ks3CWLYt%63^=_cFJcG-;J,~>
 686 | JcC<$o)B!pVK-pacJnHoJcF$q"n[[mVrm`)s3CWL_fTpc^=_cFJcG-;J,~>
 687 | JcC<$nc&j6VlI8Piq*,"s3CWJoWtI/k4aH,cMn.%W2I&
 688 | JcC<$oD]*oJjiA1bM_siJcF!p#5Y\q=539EJcF*s#FIqLO20E5pOWA2s*t~>
 689 | JcC<$oD]*pTQ57[bM_siJcF!p#5Z5XIG=;kJcF*s#I&5iU;5FHpOWA2s*t~>
 690 | JcC<$oD]*q_PaBEbM_siJcF!p#5ZiIX5!1DJcF*s#L'*E\\Qk_pOWA2s*t~>
 691 | JcC<$o`#3rM+((/al)^dJcEpn"n5P]WTj50s3goQrg#uBOM]`=p4<80s*t~>
 692 | JcC<$o`#3rV/gaZal)^dJcEpn"n@%^[d!U=s3goQri^?`UVbaPp4<80s*t~>
 693 | JcC<$o`#3r`i#fHal)^dJcEpn"nJdn`Td2Ls3^iObGV;L_V4DNJcG'9J,~>
 694 | JcC<$p&>
 695 | JcC<$p&>
 696 | JcC<$p&>
 697 | JcC<$pAYEqImm),b22XaJcEjl#6*aY7Cqg]JcF:##krU59qfYbn+_J6l2Q8~>
 698 | JcC<$pAYErST8tWb22XaJcEjl#6*k2El75>JcF:##l0j.Gc]!Cn+_J6l2Q8~>
 699 | JcC<$pAYEs_5F
 700 | JcC<$p\tNqJON5)bMMacJcEdj"o!^>HK+UKs472Up2i_uUW_N_qLS\1s*t~>
 701 | JcC<$p\tNrT5o+VbMMacJcEdj"o"[1PiD@es472Upm#lEXioSiqLS\1s*t~>
 702 | JcC<$p\tNs_PaBDbMMacJcEdj"o#g1Zf:Y/s472UqRi`+\]`juqLS\1s*t~>
 703 | JcC<$q#:WmF@AotaklOaJcEai#5lq>9$Zl&JcFC&#k2Y!;lImtnG7_9kPp&~>
 704 | JcC<$q#:WoQ#_,NaklOaJcEai#5m4sFj]XTJcFC&#kO*tI'CfPnG7_9kPp&~>
 705 | JcC<$q#:Wr]Vhd?aklOaJcEai#5mP[W7:85JcFC&#ktj,XLZO4nG7_9kPp&~>
 706 | JcC<$q>U`hCIM1!b22XbJcE[g"nck(Noftcs4RDXl!m.bXj,enqgne0s*t~>
 707 | JcC<$q>U`kNcKKMb22XbJcE[g"ne!uU?2*"s4RDXmYGn5Zd%Ftqgne0s*t~>
 708 | JcC<$q>U`o\>QC
 709 | JcC<$qYpi]>=Dl'c/8$fJcEXf#5c/(;V1I
 710 | JcC<$qYpicJoZLPc/8$fJcEXf#5cSaHJ%ceJcFL)#iU5QLUYUgo)+(=jo9i~>
 711 | JcC<$qYpikYc"\:c/8$fJcEXf#5d)OWS-h@JcFL)#je^lYe/6?o)+(=jo9i~>
 712 | JcC<$qu6rS=[cc(d,FQnJcERd"nGqfU?MB's4mV[btpiA[*dq*r.4n/s*t~>
 713 | JcC<$qu6r\JT?IPd,FQnJcERd"nI:dZ0:t6s4mV[fQqRp\'a7-r.4n/s*t~>
 714 | JcC<$qu6rfYG\V9d,FQnJcERd"nSsr_W^cGs4mV[jfGAb]$]R0r.4n/s*t~>
 715 | JcC<$r;R&691
 716 | JcC<$r;R&EGB/VOdGsfrJcEOc#5PcLK\c8!JcFU,#g.=2OLs$'o_j@@j8XW~>
 717 | JcC<$r;R&XWMd&6dGsfrJcEOc#5QQBXkiUJJcFU,#i)DWZb=lLo_j@@j8XW~>
 718 | JcC<$rr3<%N($0j][Z*9rIP!`rs&Jg;+7kWqLS\(rs55d7>JV.kk+h)s5O'/~>
 719 | JcC<$rr3<&VfHgK][Z*9rIP!`rs&JiH?-abqLS\(rs6#REh0qqkk+h)s5O'/~>
 720 | JcC<$rr3<'a/>iF^!u3:rIP!`rs&JkX/F))qLS\(rs6uLVmsLmkk+h)s5O'/~>
 721 | JcC<$s8NDnDad
 722 | JcC<$s8NDrP&b`B_Un&Erdk*_rrr.rEff5OJcF^/$2p]@FJ?\+l1P%,s5F!.~>
 723 | JcC<$s8NE!\u2O;_Un&Erdk*_rrr/9Vm>7QJcF^/$3%oAW49aul1P%,s5F!.~>
 724 | JcCH(%c*e@Zh;jS78]`"h!Fb6JcEC_#6!:H8BC2rJcFd1#krg;8
 725 | JcCH(%ct1%`V88BEdFe.h!Fb6JcEC_#6!J$FNs4NJcFd1#l1$3FJQn1m.Q#1huA3~>
 726 | JcCH(%e%iig\U3?VlR>Lh!Fb6JcEC_#6!__Vpau1JcFd1#lDH9W40b#m.Q#1huA3~>
 727 | JcCK)!MW'_70l[[7:31AhXC5js1/.5p3K/^jS"0)jSoMQCdh'jaPH:YJcFU,J,~>
 728 | JcCK)!P!4MEX6r5EeLdDhXC5js1/.5p6]lkjS"0)jSoMUO)fKGaPH:YJcFU,J,~>
 729 | JcCK)!Rn"HV[0B'Vm!\VhXC5js1/.5p:I64jS"0)jSoMY\>Q@;aPH:YJcFU,J,~>
 730 | JcCN*!S0a;70S(Ldc0ipJcE7[#5cG0:=Se3JcFm4#i/]R`!~>
 731 | JcCN*!T8%rEWqc@dc0ipJcE7[#5cegGh2B_JcFm4#j$YYIBguQn+hP7h>`!~>
 732 | JcCN*!:9Q["gkqjiputts1&(5qq\0Lf^Sijs5s=em]`Uj]$'""q18S%s*t~>
 733 | JcCN*!13ON"L6SAoDF1>[f6O'C.49IpOWA-rs6_C7:NOKiUQbqs4mX)~>
 734 | JcCN*!3l[f6O'NH1lXpOWA-rs7/$Ee_!KiUQbqs4mX)~>
 735 | JcCN*!7(G="MiXPoDF1>[f6O'[AU\"pOWA-rs7\eVm*bZiUQbqs4mX)~>
 736 | JcCN*!/:8<"1R[krdk*Wrs&>179%t1rdk+6rs5r&7<#fdjR`;#s4dR(~>
 737 | JcCN*!2KC2"2jO"rdk*Wrs&>>EdQO1rdk+6rs6PcEf[f\jR`;#s4dR(~>
 738 | JcCN*!6+f4"46H/rdk*Wrs&>NVlJMArdk+6rs7;WVmF(cjR`;#s4dR(~>
 739 | JcCN*!.ao7!T*[(s0DY.nm4bUkkK`/li.:iQpjGo^=VQ?rIP"&s*t~>
 740 | JcCN*!2'+.!TX$-s0DY.nq;%ckkK`/li.:iY]=cP^=VQ?rIP"&s*t~>
 741 | JcCN*!5eT1!U9H3s0DY.o<>..kkK`/li.:jbbqAH^=VQ?rIP"&s*t~>
 742 | JcCT,!UP=470.o:JcE"T#5P>h>MSiLJcG-;$28p<8
 743 | JcCT,!UuZVEWMa0JcE"T#5PoPJDBbqJcG-;$2L-4FJ?b.lLk.-s4RF&~>
 744 | JcCT,!VO;*VZFU3JcE"T#5QWDXPNLIJcG-;$2_Q:W40b"lLk.-s4RF&~>
 745 | JcCZ.#5kT"77qYrr^?j-m=G;Ars&Jj
 746 | JcCZ.#5l8_Ed!Ogrc/%'nq$hFrs&JkI<)a[q18S6rs8%PEd4V,h!Fcds4@:$~>
 747 | JcCZ.#6!,SVl6i!rhfe/pOW@Krs&JlXf',%q18S6rs85*VlI;Mh!Fcds4@:$~>
 748 | JcC]/$e/iY7;/aFe[`9Brdk*Prrr1h7:b9HJcG3=#gudC=/jF$n+hP7f)L7~>
 749 | JcC]/$f6h_Ef%*Ff>bqjrdk*Prrr2'Ee`HBJcG3=#i'oMI^.,Sn+hP7f)L7~>
 750 | JcC]/$L,$tVm3eUg=G$EJcDkP"o-6
 751 | JcCc1$h96H79#Phe`-)nrdk*Nrs&Gc:IVYVqLS\:rs6#)7;0$Ti:-Sos4.."~>
 752 | JcCc1$hUB=EdX\"e`-)nrdk*Nrs&GeH#gXbqLS\:rs6VfEf%9Qi:-Sos4.."~>
 753 | JcCc1$hq]?Vl[AEe`-)nrdk*Nrs&GhX/F,+qLS\:rs7>XVm3k]i:-Sos4.."~>
 754 | JcCi3$i@)*77Vj:ce[mYr.4mIrrr.[7;LiRJcG?A$2]lS7=;bujRW5"s4%(!~>
 755 | JcCi3$iIefEc[VYce[mYr.4mIrrr.rEf8lJJcG?A$2giEEgFDhjRW5"s4%(!~>
 756 | JcCi3$iSYYVl-r8ce[mYr.4mIrrr/9Vm,+OJcG?A$2quDVmX7hjRW5"s4%(!~>
 757 | JcCl4$HHUE7;&R>g#hl$JcDYJ#6!LR7_7s_JcGEC$1Dq(8
 758 | JcCl4$IafOEf%$@g#hl$JcDYJ#6!V+F2RA@JcGEC$1a=$FJH_)kk4q+s3q!u~>
 759 | JcCl4$KAFjVm3eQg#hl$JcDYJ#6!ecVp4T)JcGEC$22!/W49^rkk4q+s3q!u~>
 760 | JcCr6$fH;!79Q"ne)TojrIP!Frrr+U7;q,VJcGHD$/AcS;52.em.UF0s3gpt~>
 761 | JcCr6$g*jtEe(('e)TojrIP!Frrr+nEfK#LJcGHD$06_ZHEG9Dm.UF0s3gpt~>
 762 | JcCr6$h(g-VldJEe)TojrIP!Frrr,6Vm51PJcGHD$15!qX1?=,m.UF0s3gpt~>
 763 | JcD#8$fcb,78f5\dGF0\qgndBrs&DZ9LcY\qgneBrs6),7:WUKhXC8ks3Udr~>
 764 | JcD#8$gF7(EdOOpdGF0\qgndBrs&D^GB:^hqgneBrs6YgEe_!JhXC8ks3Udr~>
 765 | JcD#8$h2!2VlR;AdGF0\qgndBrs&DbWMe#-qgneBrs7AZVm!\XhXC8ks3Udr~>
 766 | JcD):$hB`[77_g3bM2:Qq18R=rrr(P7<@DZJcGTH$3$Ga7<5rfj7<(us3L^q~>
 767 | JcD):$h^cKEcdVUbM2:Qq18R=rrr(iEff5OJcGTH$3%8PEfdl]j7<(us3L^q~>
 768 | JcD):$i%uHVl7#7bM2:Qq18R=rrr)3Vm>7QJcGTH$3&5JVmF(cj7<(us3L^q~>
 769 | h#@]1PaBbrs4s03fn'1Ers\Y";FO&rX2`cPnFup5s.B;qr7jk5_X75Os8;m'mWCrfLqhR(o_j@@
 770 | cMrC~>
 771 | h#@]1PaBbrs4s03fn'1Ers\_8Hua:iZGtMWnFup5s.B;qr8Dd>amJtVs8;m'ns4<;T"in>o_j@@
 772 | cMrC~>
 773 | h#@]1PaBbrs4s03fn'1Ers\bQXf&,(\]37^nFup5s.B;qr8srUd-^^]s8;m'p:R<%\%pVXo_j@@
 774 | cMrC~>
 775 | h>[lLF26U\eFIq:gir2^s+.u7^^Rf0:dmfYJ!?V*ZFR]#^mr1D\8F`GWORMprP/`8;FO9+Q)(Xp
 776 | ^S&BFs*t~>
 777 | h>[lLF26U\eFIq:gir2^s+.u7^^RlFG]IhQLQnI2ZFR]#^mr1D\;>6VWORMprP/`AH?+1bQ)(Xp
 778 | ^S&BFs*t~>
 779 | h>[lLF26U\eFIq:gir2^s+.u7^^Ro]W2HPgOd)NcC!WORMprP/`LW2HP[Q)(Xp
 780 | ^S&BFs*t~>
 781 | h>[l*V#UJ#WPXu$s.7Dbs3:QPpo@Ib7:i.0eDT]cqgnd9rs&DS84^\dqgneIrs5f#7:E=BhX:/i
 782 | s3(Fm~>
 783 | h>[l*V#UJ#WPXu$s.7Dbs3:QPq7_?!Eepd6eDT]cqgnd9rs&DXFEG[mqgneIrs6GaEeUjDhX:/i
 784 | s3(Fm~>
 785 | h>[l*V#UJ#WPXu$s.7Dbs3:QPqphjIVm*\KeDT]cqgnd9rs&D_W2S,2qgneIrs75UVm!YThX:/i
 786 | s3(Fm~>
 787 | gA_HPJCgm+s8TL/JcF'r%/-`'77Cg[_U@<+o_O.=Qi@6^JjjkBon!,LpP)+*Hb7bdo(mq;b5Zt~>
 788 | gA_HPJCgm+s8TL/JcF'r%/7JcEcQu9_U@<+o_O.=Qi@6^SoU%Son!,LpnDeLQFt]+o(mq;b5Zt~>
 789 | gA_HPJCgm+s8TL/JcF'r%/SMXVl-c._U@<+o_O.=Qi@6^^8J?ton!,Lqo#D1[D(,Lo(mq;b5Zt~>
 790 | g]%T,I(0*N^&S,IVh+lqrs\+R9gqKfU;G@8l1=b&s-TKrs@If78B;hfBDl*JcEjl
 791 | J,~>
 792 | g]%T,I(0*N^&S,IVh+lqrs\:qG]IhaXMWEBl1=b&s-
 794 | g]%T,I(0*N^&S,IVh+lqrs\J?Wi)c#\AH\Nl1=b&s-
 796 | h#@_iN9:0?_Q3_:ZGM1me,Kj;O\A24BV3/ihs9n0JcCo5"nd^@DrC8@rs?M;79ZY4h
 798 | h#@_iN9:0?_Q3_:ZGM1me,KjAWcrK(M6"MAhs9n0JcCo5"neX2NSsG^rs@"sEe(C:h
 800 | h#@_iN9:0?_Q3_:ZGM1me,KjHaf;8:YdhQuhs9n0JcCo5"nf^0Z/G8-rs@S`VldMPh
 802 | h>[Q+LAq2P"lb.4p4D4Rs472[rm-'b77M'd`RNf1oD/B:s,m
 804 | h>[Q+LAq2P"lb.4p4D4Rs472[rn`RNf1oD/B:s,m
 806 | h>[Q+LAq2P"lb.4p4D4Rs472[roV"pVl-c.`RNf1oD/B:s,m
 808 | h>[MXD>nPZVuEH@FKL,ofDc?U[V&#t7WGPsFNrK:UO@
 809 | `W(G~>
 810 | h>[MXD>nPZVuEH@FKL,ofDc?Va,=tYF-!KCe_ocbq>PsFNrK:UW,daQoSEMRl]6(-T>0">oDF1>
 811 | `W(G~>
 812 | h>[MXD>nPZVuEH@FKL,ofDc?XgU=#XW3WqPe_ocbq>PsFNrK:U`2BfsoSEMRn[PKp\%pVWoDF1>
 813 | `W(G~>
 814 | ec,[?oR[%prse4`NIB1E>j6cL8JcCZ.#5mOX7Bu.RMZ4!q:dn?Xa4otSrdk*fs*t~>
 815 | ec,[?oR[%prseD&IWBIQQEnQ^j6cL8JcCZ.#5mY0EkL]5MZ4"+H?+D7a4otSrdk*fs*t~>
 816 | ec,[?oR[%prseSFY,A1s[(46.j6cL8JcCZ.#5mbeVoe6"MZ4"=XJ`/1a4otSrdk*fs*t~>
 817 | JcDkP%fXRq7R]aUQFtGpjR2^
 818 | JcDkP%fY"HF)l;UV7k++jR2^
 819 | JcDkP%fYP'W2HPs\%g/?jR2^
 820 | JcDqR%f*_Q77B[]S&Eb1kOA3BJcCK)#6!aa7A]8ENrKF>@7
 821 | JcDqR%f4>/EcQ5YVo7$=kOA3BJcCK)#6!h7EjP$+NrKFGLN7O1^t7Z
 822 | JcDqR%f>%kVl-Jt[`-\MkOA3BJcCK)#6!qjVo.cpNrKFPZ_se3_:Rc=qgnd`s*t~>
 823 | JcE%U&,t+;:IR]LKsA\Khs'_,rdk*%rs&4q79/"1rK7*ergu_M?`M6&lLk.-s1nYb~>
 824 | JcE%U&,tF_H#dqOS$g;ehs'_,rdk*%rs&5.EdZU2rK7*erj?igKX&YRlLk.-s1nYb~>
 825 | JcE%U&,te4X/Dkr[^sN0hs'_,rdk*%rs&5BVlJMArK7*erm7UAYIVd0lLk.-s1nYb~>
 826 | JcE+W!qW^6r^@,tN4@'`ip?=5rdk*#rs&Gh?U^+?pQGO_mX%AkGdu/Zn+_J6^Ai]~>
 827 | JcE+W!qjHlrc/Pe,9#n+_J6^Ai]~>
 828 | JcE+W!r1EXrhg()[_9l:ip?=5rdk*#rs&GjYc#4upQGO_p:mN'[(OfEn+_J6^Ai]~>
 829 | JcE4Z&,X4n8ju0FJZ$H6h<4;$r.4m!s8Ds%pqT@nrs?VB78TGjf]_u*JcEF`J,~>
 830 | JcE4Z&,X\DG&hVLRBFKUh<4;$r.4m!s8Ds%prmc%d-pmsrs@,%EdF\%f]_u*JcEF`J,~>
 831 | JcE4Z&,b>#WMcYo[C=*%h<4;$r.4m!s8Ds%pt;RDeaNF#rs@YdVlR>Ff]_u*JcEF`J,~>
 832 | JcE:\&*]ir77B[XOhArki9Bh-rIP!"s82g#rpt/!HK=abrsJRh7n$mhcJ@j\rdk*^s*t~>
 833 | JcE:\&+-l]EcQ5WTt\e(i9Bh-rIP!"s82g#rpu7mQ/qV(rsJV,FE3)AcJ@j\rdk*^s*t~>
 834 | JcE:\!qOaErhg(,[D:&>i9Bh-rIP!"s82g#rq!Us[cI+IrsJ\JW2Hi1cJ@j\rdk*^s*t~>
 835 | JcEC_&Fm/P84>sHJuco?h<+.uqYl'GJcGNF#5QY;7_A'bR/[KF@mrk=]@5d/q18RWs*t~>
 836 | JcEC_&G3r.FE2DLRBac\h<+.uqYl'GJcGNF#5QnnF2[JCR/[KNLiRR)][Pm0q18RWs*t~>
 837 | JcEC_&GOkkW2HPp[(43*h<+.uqYl'GJcGNF#5R2UVp=],R/[KY[&9k1^!l!1q18RWs*t~>
 838 | JcELb&G!AY8OZ'>ELO_hg>qYnq>PsFJcGBB#5!^?A`*+YS,WilSk2@RTuG^Lo_j@@\c70~>
 839 | JcELb&G4)5F`MMFO/Kh>g>qYnq>PsFJcGBB#5"X1LYq_&S,WimZupD=X2WcVo_j@@\c70~>
 840 | JcELb&GOqnW2HPlZF7Wqg>qYnq>PsFJcGBB#5#^/YM\sNS,Winc`*hE\Ad.co_j@@\c70~>
 841 | JcEUe&G<_d91;9>BTT[Ef&,]\pA9F@JcG9?#5dCU7A8uASGrrOB15::\Bs.$p\oaD\Gq'~>
 842 | JcEUe&GOD>GB._GM4qK%f&,]\pA9F@JcG9?#5dM-Ej=m)SGrrWN,j!)]$T@&p\oaD\Gq'~>
 843 | JcEUe&Gb.tWMcYmYdV3df&,]\pA9F@JcG9?#5dYbVo7iqSGrr`[\p%1][5R(p\oaD\Gq'~>
 844 | JcE^h&bj.p9gqK?@u@P4e(j'Po_JK;s+14
 845 | JcE^h&bs\FG]IhGL7Yipe(j'Po_JK;s+14kO\S%s0hrX~>
 846 | JcE^h"8^olWrAn'YI(p_e(j'Po_JK;s+14
 847 | JcEgk&a?9:8ju0
 848 | JcEgk&am>tF`MMDLS2,ue_K6PoCr06s+149rs&GkNcL?Eoq;
 849 | JcEgk"7t$SWW&e&YI2!ae_K6PoCr06s+149rs&Gl[AUFnoq;
 850 | JcEso"TIVfG"M[%$
 851 | JcEso"TIc'Q?E1I$A"VK`R3H%m.:#MJcC<$kPkb^f5u)Jm/!LW$N7Y]Edat,f]Vl'JcE(VJ,~>
 852 | JcEso"TIrA]W(n.$E^YE`R3H%m.:#MJcC<$kPkb^i2EQsm/!LW$N8JRVl[DIf]Vl'JcE(VJ,~>
 853 | JcF'r'E-d`Cdpi^7Uh+P`R*>ulLFTFrdk*#s5a1aoTDXFg@P
 854 | JcF'r'E.%'O)o>^F+p*f`R*>ulLFTFrdk*#s5a1aoVlk[h"1NArsIqPEcRASd,+0`rdk*Ts*t~>
 855 | JcF'r'E.=G\>Z='W33M<`R*>ulLFTFrdk*#s5a1aoY[T-h=LWBrsJ5+Vl-l6d,+0`rdk*Ts*t~>
 856 | JcF4!"TJ,8P[XP[$V>)mZ,b8Gip$%.qgncus5
 857 | JcF4!"TJ/EXbZmr$[%?![E$\Kip$%.qgncus5
 858 | JcF4!"TJ5Vb-V)F$`L;:]#W4Pip$%.qgncus5
 859 | JcF=$"TIA]GYJ**$r(c,\]N=Wk3V[4qYl'GJcFR+#5>r'8&"EgWW*=M?q!P2[F!h!p&0IAYQ'+~>
 860 | JcF=$"TIW"R!8OM%!Rc-]?/OYk3V[4qYl'GJcFR+#5?>_F2mYFWW*=XL2q@#\Bs.$p&0IAYQ'+~>
 861 | JcF=$"TIl?]rM(0%&pP?^<+j\k3V[4qYl'GJcFR+#5?fKVpOl/WW*=eZ_sb0]?oI'p&0IAYQ'+~>
 862 | JcFF'"80Qm?2[2#?%/9WbLYP4m.9uKrdk*#s4[JXrptb2>MA]JXT&XrLdjg?UW1sJo(dk:XoEn~>
 863 | JcFF'"8:-AK`,p"JsN=LbLYP4m.9uKrdk*#s4[JXrpu_%JDBbqXT&XuUiUR/XiB#To(dk:XoEn~>
 864 | JcFF'"8UlqZ2LR/Y-YOObLYP4m.9uKrdk*#s4[JXrq!k%XPWRJXT&Y$`2BN:\]3:`o(dk:XoEn~>
 865 | JcFR+"SpE;E(^*u$r1c%Z,Y/Ci90P#q##^CJcF:##5[Id7=XLoY5\n-Y>I_]MS7HqmIgF/s/c6N~>
 866 | JcFR+"T$i[P'-bE%![f)[`6\Hi90P#q##^CJcF:##5[P8Egc+aY5\n-_0^3GT>&b2mIgF/s/c6N~>
 867 | JcFR+"T.?-\Z,S+%'$S>]Z/=Ni90P#q##^CJcF:##5[VfVmtp`Y5\n.f;tmL\%gAKmIgF/s/c6N~>
 868 | JcF^/"T-cHG>8'*%7XcWTYen&hra7pp%eQ;s+13trs&2;84BNEq69l+d:Pg9Dm%7;l1=b&s/Q*L~>
 869 | JcF^/"T.&eQ[&LM%
 870 | JcF^/"T.H3]rM(0%B-J:[_p;=hra7pp%eQ;s+13trs&2NW2I`'q69l+kI%4cZF\35l1=b&s/Q*L~>
 871 | JcFm4"oeAMWI7YB71EIHQ+"c]g>V8`oCr+\JcC<$cMn.Ko9i$Cc11b=rsS.J7R^IL_U[W6p\oaD
 872 | WW.J~>
 873 | JcFm4"oeAU]pjBIEXdP_Uq+Rog>V8`oCr+\JcC<$cMn.Ko
 875 | JcFm4"oeD`e%`!_V[]`5[CsZ/g>V8`oCr+\JcC<$cMn.Ko>[]-f^\pHrsSJ;Vl-Z,_U[W6p\oaD
 876 | WW.J~>
 877 | JcG$8"oe/=TQX*/71E@BP-i?Yf\Y`Unb)\TJcC<$ao;SBmVPC,iq0YY$i$Mn77r3EdG=*[r.4mG
 878 | s*t~>
 879 | JcG$8"oe5J[[)4;EXdJ[U:JCnf\Y`Unb)\TJcC<$ao;SBmZ)=Fiq0YY$i7DZEcmhadG=*[r.4mG
 880 | s*t~>
 881 | JcG$8"oe;Yd(HFXV[]`5[(aZ0f\Y`Unb)\TJcC<$ao;SBm^8stiq0YY$iAAQVl@&;dG=*[r.4mG
 882 | s*t~>
 883 | JcG0<"oRT!Q#'%j71NFBO0?OJfA>TRnFQDNrdk*#s2G!Bpt&>2Ms9uGrsSe8=[bbqXNK8[o(dk:
 884 | V>l&~>
 885 | JcG0<"oR`3Y)d`(EXmP\TXDbafA>TRnFQDNrdk*#s2G!BptU19U?VE^rsSeHJT>diZHCnao(dk:
 886 | V>l&~>
 887 | JcG0<"oRoIb.+GLV[ff6[(F<&fA>TRnFQDNrdk*#s2G!Bpu8?P^$5:$rsSh\YG\;'\]WXho(dk:
 888 | V>l&~>
 889 | JcG?A"o[u7UjcGE71VmsI$CtWcIUh4l0n6;qYc!FJcEOc#5#;m7]>_M])N/_BgkHsS]01>n+Zg4
 890 | s.o[F~>
 891 | JcG?A"o\&E\X\3KEY!5EQ(tk/cIUh4l0n6;qYc!FJcEOc#5#cRF1:Q4])N/jNH0&lWQ!HJn+Zg4
 892 | s.o[F~>
 893 | JcG?A"o\/UdD2s`V[fl9[(XK)f%oEOn+68LrIP!"s1nX=o[9\9amJo8rsRqtVl-`.`Ra&;p\oaD
 894 | V#Pr~>
 895 | M>m\WkiVd7rs&Gmd&Mk18,Yje:hkTO]ZJRQhrO%joCi"YJcC<$]`/68nsDj<^@;$5rsRS,77C+8
 896 | ^XD$+o_a:?UAo`~>
 897 | M>m\Wmd0lDrs&Gog:a8:FT$4jH&A#f^<+dShrO%joCi"YJcC<$]`/68nuQkSa7/u>rsRkTEcQN#
 898 | ^XD$+o_a:?UAo`~>
 899 | M#RPKoDS=]#6"8XeAJVkrML1+Yd:aQajJ_tjQZ.)pA+Z
 901 | MZ3k$?:@:]Yl"G*rqu''VhAJKrC%8i@sjHA`QQ`biTKRto_84\JcC<$\,Q^0ms[](d.7.NrsRk?
 902 | 7R]t%\B`pqoD4%
 903 | MZ3k2KlV3^_u'H=rqu06]:aq$rGiHlL6\L?`QQ`biTKRto_84\JcC<$\,Q^0n!\9DeFNRRrsS(b
 904 | F)lGl]$B-soD4%
 905 | MZ3kAZ_s_(gACmTrqu?Hd_`>hrML4*Y-YLI`QQ`biTKRto_84\JcC<$\,Q^0n%,Esg%,*WrsS>6
 906 | W2HW&^!>I!oD4%
 907 | MuNh58,Pd\\btsDYE3a&r'_2i@
 909 | MuNh=FSp.ab5Cha_5`ZGr,NBlKTi%3_TL9Xh;d_do(DeTrdk*#s0DY0pumTUL>VY&_uC/6WHE6'
 910 | PI/NekOSEIJcDABJ,~>
 911 | MuNhGW;NOuhYd'/f#YG)r21.*Y-PCE_ogBYh;d_do(DeTrdk*#s0DY0q!#)^Yi56R_uC/;aJl)9
 912 | Zb"?6kOSEIJcDABJ,~>
 913 | MuNd1qaCNZ>5L`$;.k6:W5?^)fA#6GlL=H>q>C5Cs+13Prs/8Q=[dAlp&;u2%-NgI77M@!ak,VB
 914 | p\oaDSc=3~>
 915 | MuNdOqf2^]JbsI#HAIfXYf"W2fA#6GlL=H>q>C5Cs+13Prs/8UIr^\5p&;u2%.('>Ec[>Iak,VB
 916 | p\oaDSc=3~>
 917 | MuNdrqkjIpYkt=2Wir_7\\uYq>C5Cs+13Prs/8YXf&Shp&;u2%._Q?Vl6o3ak,VB
 918 | p\oaDSc=3~>
 919 | MuNceq*brlA9Wp%\&QY>fA,?IlL4?
 921 | MuNd6q/R-nL6A++]>i(BfA,?IlL4?
 923 | MuNdbq54n+YHkLC^W+LFfA,?IlL4?
 925 | MuNcpqaD&eZGk#7fA#3Ckj.^/pA"OaJcC<$UAkMto>"!fHKXu#bl8+,Kh+X%EMUV*ipQL;JcD/<
 926 | J,~>
 927 | MuNd>qf36j\&HPu/rQfn&@bl8+3Tlb
 929 | MuNdgqPOk;`QQZ\gY_&TlgOH=q"t&As+13Ers8Spe>T:Ukk4r!rs\83W2HT"\&R"Yme-L/s-`n;~>
 930 | MuNdLqaCm4hrEnbmdp,Gq>C5Cs+13?rs8Pm\4T24jn8W"rsen@E^iJgG,`O6iU-:7JcD):J,~>
 931 | MuNddqf3(+hrEnbmdp,Gq>C5Cs+13?rs8Pm`-$*ak4S`#rsenNPB1bdP-E!YiU-:7JcD):J,~>
 932 | MuNe*qkjh1hrEnbmdp,Gq>C5Cs+13?rs8PmdAWtPkOni$rseq`];MR*Zae'-iU-:7JcD):J,~>
 933 | MuNhOAGnq$;qUa9q"t#@s+138rs8Mk\kPV3i:[)urse@j=[bbRIBUcEipHC7JcD#8J,~>
 934 | MuNhQM>_H!I,FSiq"t#@s+138rs8Mk`HQ?`iq<<"rseJ.JT>dUQF+ccipHC7JcD#8J,~>
 935 | MuNhT[Jd!-Xlo?Mq"t#@s+138rs8Mkd]'.Pjn8W%rseYLYG\:u[(=B2ipHC7JcD#8J,~>
 936 | MZ3kSW,usGl[f(es,R*bqs_I"7:4I6r7CrYrQBgc77CC<\BEObme-I.s-*J5~>
 937 | MZ3kU]p4bdmt(Lis,R*bqs_aSEeN$8r7CrYrR[]bEcQ`&]$&adme-I.s-*J5~>
 938 | MZ3kWf"J]@oR[$ns,R*bqs`+8Vm,"Kr7CrYroCqqVl-Z)^!#'gme-I.s-*J5~>
 939 | JcC<$JcCi3#lF,7>X_JsnbLo=%d9Tl77B[]S&*M-jmVp@JcCl4J,~>
 940 | JcC<$JcCi3#lF,=JT?(RnbLo=%dg`XEcQ5ZW56m:jmVp@JcCl4J,~>
 941 | JcC<$JcCi3#lF,DXf&2HnbLo=%e@uOVl-Ju\&-PJjmVp@JcCl4J,~>
 942 | JcC<$JcCf2$2a;FCIL^Mkk>#5rt"S*G=P(j
 943 | JcC<$JcCf2$2a;IN,j!7l1Y,6rt"\>QZR7gI@@L_e_]Q\p\f[CO8j_~>
 944 | JcC<$JcCf2$2a;LZ_s_:lh:>8rt"eU]r7j,X0fIYe_]Q\p\f[CO8j_~>
 945 | JcC<$JcCc1$2jDUQ:OGEX7Q2Krt57pWGP*n78/!&_U$rrm.:&PJcC`0J,~>
 946 | JcC<$JcCc1$2jDUWcW90]^u!\rt57t]o[;UEd*bM_U$rrm.:&PJcC`0J,~>
 947 | JcC<$JcCc1$2jDV_5F34d.@+prt58$e@;HTVl@&4_U$rrm.:&PJcC`0J,~>
 948 | JcC<$JcC`0$NB__\626hEm++Pr;QolZBCm:oD]EscCJiE77B^\OgiKahrsS&qLS[(s*t~>
 949 | JcC<$JcC`0$NB___LHTHP19.$r;Qoo`N?W3oD]EtfX$Z^EcQ5YU:SLuhrsS&qLS[(s*t~>
 950 | JcC<$JcC`0$NB__cE*qA\)-cSr;QorgW\+7oD\shjj(E9rhg(,[_9i7hrsS&qLS[(s*t~>
 951 | JcC<$JcCZ.%eoDGN(HH-F2%8Arr:bTr^?iWV>:,prU._"G"hm($V"`f[E6qSjmD[7rIP!)s*t~>
 952 | JcC<$JcCZ.%eoDHU3(EsPKWRnrr;&/rc/$\](u@0rUJ@FQ?W=K$Zh,r\]N@WjmD[7rIP!)s*t~>
 953 | JcC<$JcCZ.%eoDJ]r7j,\CpKLrr;DirhfdqeG9+JrUf'p]W1q.$EphMajf/.mIU,OJcCQ+J,~>
 954 | JcC<$JcCW-%/]Y[aa?WJ79YelltH;c#tEMDqs)V@Tn$GH7131@Q+5#fguRhnpA9F@L&ZZ~>
 955 | JcC<$JcCW-%/]Y[cBiWnEe119mZ%-b$$5&&qsN7]\"86MEXR>ZUq=h#guRhnpA9F@L&ZZ~>
 956 | JcC<$JcCW-"T.fSe@,@S"L#f$n@/=n$)m1fqsrq)d)!!bV[KT3[D0o8guRhnpA9F@L&ZZ~>
 957 | JcC<$JcCT,#6+DdjN!*Wr^?fVqF(Hb@SZeh%7jfKNNU=Lf\Y`VoD&67s+:9$~>
 958 | JcC<$JcCT,#6+DdjNO6Drc/![qJlXcLO&c;%
 959 | JcC<$JcCT,#6+DdjO1T=p87tpZ`Eu$%B-G8[(OH,f\Y`VoD&67s+:9$~>
 960 | JcC<$JcCN*#lODaj4U\h?:afZ&56>EHAeW9bL+tuj6?%)q"oXBJcGcMJ,~>
 961 | JcC<$JcCN*#lODaj4V&5JTLR+&9i\`Pb,%qbL+tuj6?%)q"oXBJcGcMJ,~>
 962 | JcC<$JcCN*#Q4;`j4_M\X7iG&WNED1[(4,udFd:8l0n9>qgncus8W+L~>
 963 | JcC<$JcCH(#5n2bl/C@3qF(s>X1QHsdFHq+iofUqoCr+\JcC<$r;V9~>
 964 | JcC<$JcCH(#5n2bl/C@8qJm.1ZbOT*dFHq+iofUqoCr+\JcC<$r;V9~>
 965 | JcC<$JcCH(#5n2bl/C@?qPOn1]u.q8dFHq+iofUqoCr+\JcC<$r;V9~>
 966 | JcC<$JcCB&"o\5gn`tJu71Dr:iT'%`lL+36pA"OaJcC<$q#>j~>
 967 | JcC<$JcCB&"o\5gn`uP>EXd6BiT'%`lL+36pA"OaJcC<$q#>j~>
 968 | JcC<$JcCB&"o\5gna!gbV[]WZiT'%`lL+36pA"OaJcC<$q#>j~>
 969 | JcC<$JcC<$"TSJukAU>g#u\J0p@e:Wqu-MFs+14As*t~>
 970 | JcC<$JcC<$"TSJul]M0e$%0qhp@e:Wqu-MFs+14As*t~>
 971 | JcC<$JcC<$"TSJun@JUs$*E"Up@e:Wqu-MFs+14As*t~>
 972 | JcC<$JcC<$rVm$"fYPZ&JcC<$lMlA~>
 973 | JcC<$JcC<$rVm$"iR$-MJcC<$lMlA~>
 974 | JcC<$JcC<$r;QlcioU&gs+148s*t~>
 975 | JcC<$JcC<$JcC<$iW"E~>
 976 | JcC<$JcC<$JcC<$iW"E~>
 977 | JcC<$JcC<$JcC<$iW"E~>
 978 | JcC<$JcC<$JcC<$iW"E~>
 979 | JcC<$JcC<$JcC<$iW"E~>
 980 | JcC<$JcC<$JcC<$iW"E~>
 981 | JcC<$JcC<$JcC<$iW"E~>
 982 | JcC<$JcC<$JcC<$iW"E~>
 983 | JcC<$JcC<$JcC<$iW"E~>
 984 | JcC<$JcC<$JcC<$iW"E~>
 985 | JcC<$JcC<$JcC<$iW"E~>
 986 | JcC<$JcC<$JcC<$iW"E~>
 987 | JcC<$JcC<$JcC<$iW"E~>
 988 | JcC<$JcC<$JcC<$iW"E~>
 989 | JcC<$JcC<$JcC<$iW"E~>
 990 | JcC<$JcC<$JcC<$iW"E~>
 991 | JcC<$JcC<$JcC<$iW"E~>
 992 | JcC<$JcC<$JcC<$iW"E~>
 993 | g]%
994 | g]%
995 | g]%
996 | h#@`%NctI&np8mBGOG;,J\ZiPJ\ZiPJ\^WfY5a"~> 997 | h#@`%NctI&np8mBGOG;,J^AtpJ^AtpJ^Ec1Y5a"~> 998 | h#@`%NctI&np8mBGOG;,J`)+;J`)+;J`,nQY5a"~> 999 | h#@_lWcnFB_Nt6%T$)]bpAY-.JcG`L!5O0crVll5JcG`L!5O0crr2u6Y5a"~> 1000 | h#@_lWcnFB_Nt6%T$)]bpAY->JcG`L!76;srVllEJcG`L!76;srr2uFY5a"~> 1001 | h#@_lWcnFB_Nt6%T$)]bpAY-NJcG`L!8rG.rVllUJcG`L!8rG.rr2uVY5a"~> 1002 | g]%TFG5qTDYQ+X1Xb$NGrrBics8N#u^k)OarrBics8N#u^k)ObrrBj;s*t~> 1003 | g]%TFG5qTDYQ+X1Xb$NGrrCDss8N#ud"25qrrCDss8N#ud"25rrrCEKs*t~> 1004 | g]%TFG5qTDYQ+X1Xb$NGrrCu.s8N#ui.:q,rrCu.s8N#ui.:q-rrCu[s*t~> 1005 | g]%TFG5qT<^&S,IVh+mArrBics8N#u^k)OarrBics8N#u^k)ObrrBj;s*t~> 1006 | g]%TFG5qT<^&S,IVh+mArrCDss8N#ud"25qrrCDss8N#ud"25rrrCEKs*t~> 1007 | g]%TFG5qT<^&S,IVh+mArrCu.s8N#ui.:q,rrCu.s8N#ui.:q-rrCu[s*t~> 1008 | g]%TFG5qTZX8i4*_L_a\rrBics8N#u^k)OarrBics8N#u^k)ObrrBj;s*t~> 1009 | g]%TFG5qTZX8i4*_L_a\rrCDss8N#ud"25qrrCDss8N#ud"25rrrCEKs*t~> 1010 | g]%TFG5qTZX8i4*_L_a\rrCu.s8N#ui.:q,rrCu.s8N#ui.:q-rrCu[s*t~> 1011 | g]%TFG5qU%K)PCpi.:oZs+13$s+134s*t~> 1012 | g]%TFG5qU%K)PCpi.:oZs+13$s+134s*t~> 1013 | g]%TFG5qU%K)PCpi.:oZs+13$s+134s*t~> 1014 | g]%QEG5qUAUORBf\GlZeS!_l[rrW5mR">8@s4!:"d/JUr"36Iodt.Q!rrKs@JcG0 1015 | g]%QEG5qUAUORBf\GlZeS!_l[rrW5mR">8@s4!:"d/JUr"36Iodt.Q!rrKs@JcG0 1016 | g]%QEG5qUAUORBf\GlZeS!_l[rrW5mR">8@s4!:"d/JUr"36Iodt.Q!rrKs@JcG0 1017 | ec,[?oXOo)np8mBGOC(_!lp=EJc>o?F26U\e:R](h0RAuF7k+a!p+BoJcG0 1018 | ec,[?oXOo)np8mBGOC(_!lp=EJc>o?F26U\e:R](h0RAuF7k+a!p+BoJcG0 1019 | ec,[?oXOo)np8mBGOC(_!lp=EJc>o?F26U\e:R](h0RAuF7k+a!p+BoJcG0 1020 | MZ3jsQN-uVbC]`q\Z0h(rrpQ@s8TC(K)Z"s`W,sig4K>,qh_YPJcG0 1021 | MZ3jsQN-uVbC]`q\Z0h(rrpQ@s8TC(K)Z"s`W,sig4K>,qh_YPJcG0 1022 | MZ3jsQN-uVbC]`q\Z0h(rrpQ@s8TC(K)Z"s`W,sig4K>,qh_YPJcG0 1023 | MZ3j]YQ+X1Xb$KQl?7aYrr3&nJCfAP"TQuEM>`&+"00;[TRm.2s*t~> 1024 | MZ3j]YQ+X1Xb$KQl?7aYrr3&nJCfAP"TQuEM>`&+"00;[TRm.2s*t~> 1025 | MZ3j]YQ+X1Xb$KQl?7aYrr3&nJCfAP"TQuEM>`&+"00;[TRm.2s*t~> 1026 | MZ3jU^&S,IVh+jKl?7aYs8N2JI(0*+rriARW-R9Qrrgo>s2Ud`s6fo;~> 1027 | MZ3jU^&S,IVh+jKl?7aYs8N2JI(0*+rriARW-R9Qrrgo>s2Ud`s6fo;~> 1028 | MZ3jU^&S,IVh+jKl?7aYs8N2JI(0*+rriARW-R9Qrrgo>s2Ud`s6fo;~> 1029 | MZ3jsX8i4*_L_^fl?7aY"95fgk(3O:s4?W;s/E#NrrnR;Mg]]GJcG3=J,~> 1030 | MZ3jsX8i4*_L_^fl?7aY"95fgk(3O:s4?W;s/E#NrrnR;Mg]]GJcG3=J,~> 1031 | MZ3jsX8i4*_L_^fl?7aY"95fgk(3O:s4?W;s/E#NrrnR;Mg]]GJcG3=J,~> 1032 | MZ3k>K)PCpi.:n/l?7aY!n;u(JcGcM"h^c4s-:l^rrr&anA(LbJcG3=J,~> 1033 | MZ3k>K)PCpi.:n/l?7aY!n;u(JcGcM"h^c4s-:l^rrr&anA(LbJcG3=J,~> 1034 | MZ3k>K)PCpi.:n/l?7aY!n;u(JcGcM"h^c4s-:l^rrr&anA(LbJcG3=J,~> 1035 | MZ3hYUORBfJc>fOl?7aY!Ng5fOb+O=cmf.e~> 1036 | MZ3hYUORBfJc>fOl?7aY!Ng5fOb+O=cmf.e~> 1037 | MZ3hYUORBfJc>fOl?7aY!Ng5fOb+O=cmf.e~> 1038 | M#RMGoR[$ns+14DrrM]eJcC<$l2Q8~> 1039 | M#RMGoR[$ns+14DrrM]eJcC<$l2Q8~> 1040 | M#RMGoR[$ns+14DrrM]eJcC<$l2Q8~> 1041 | JcC<$JcC<$JcC<$iW"E~> 1042 | JcC<$JcC<$JcC<$iW"E~> 1043 | JcC<$JcC<$JcC<$iW"E~> 1044 | JcC<$JcC<$JcD/ 1045 | JcC<$JcC<$JcD/ 1046 | JcC<$JcC<$JcD/ 1047 | JcC<$JcC<$JcD/ 1048 | JcC<$JcC<$JcD/ 1049 | JcC<$JcC<$JcD/ 1050 | JcC<$JcC<$JcDAB*SJB1Xm,l<[AoeQrkY/5m/R($TYR9$s2C_5lIs,Srt>=GS?MP`_4A"#s5(Sm 1051 | V:qc>lhCF0~> 1052 | JcC<$JcC<$JcDAB*SJB1Xm,l<[AoeQrkY/5m/R($TYR9$s2C_5lIs,Srt>=GS?MP`_4A"#s5(Sm 1053 | V:qc>lhCF0~> 1054 | JcC<$JcC<$JcDAB*SJB1Xm,l<[AoeQrkY/5m/R($TYR9$s2C_5lIs,Srt>=GS?MP`_4A"#s5(Sm 1055 | V:qc>lhCF0~> 1056 | JcC<$JcC<$JcDAB*RLMUlE1*=RI]@9kH=REZiB!douig(n[8;T[G&Lsrt=M$rmJjMY4q4fs4Eh3 1057 | adM_I^\@bY~> 1058 | JcC<$JcC<$JcDAB*RLMUlE1*=RI]@9kH=REZiB!douig(n[8;T[G&Lsrt=M$rmJjMY4q4fs4Eh3 1059 | adM_I^\@bY~> 1060 | JcC<$JcC<$JcDAB*RLMUlE1*=RI]@9kH=REZiB!douig(n[8;T[G&Lsrt=M$rmJjMY4q4fs4Eh3 1061 | adM_I^\@bY~> 1062 | JcC<$JcC<$JcDAB*RMe*s/>_F\GuSua4UFlV>A-]s7i)`s7OpRWnP>hrt 1064 | JcC<$JcC<$JcDAB*RMe*s/>_F\GuSua4UFlV>A-]s7i)`s7OpRWnP>hrt 1066 | JcC<$JcC<$JcDAB*RMe*s/>_F\GuSua4UFlV>A-]s7i)`s7OpRWnP>hrt 1068 | JcC<$JcC<$JcDAB*RN%1s.o8=`W,t,]&E\hU\_LYs88GfkG$5UWnP>hrt;p#s8W&/iW&qQqUide 1069 | hn9!NZhOKM~> 1070 | JcC<$JcC<$JcDAB*RN%1s.o8=`W,t,]&E\hU\_LYs88GfkG$5UWnP>hrt;p#s8W&/iW&qQqUide 1071 | hn9!NZhOKM~> 1072 | JcC<$JcC<$JcDAB*RN%1s.o8=`W,t,]&E\hU\_LYs88GfkG$5UWnP>hrt;p#s8W&/iW&qQqUide 1073 | hn9!NZhOKM~> 1074 | JcC<$JcC<$JcDAB1XNK.opGd3`W,t,fZ!m\X8gegs5TRJa3Xe.WnP>gnc.4Ys4kNE`W,J/s4G 1076 | JcC<$JcC<$JcDAB1XNK.opGd3`W,t,fZ!m\X8gegs5TRJa3Xe.WnP>gnc.4Ys4kNE`W,J/s4G 1078 | JcC<$JcC<$JcDAB1XNK.opGd3`W,t,fZ!m\X8gegs5TRJa3Xe.WnP>gnc.4Ys4kNE`W,J/s4G 1080 | JcC<$JcC<$JcDAB1XMr$T%3kn`W,t,pp.#hg].&OWiVuqkb>GsTZY.?T)\SnX/GO`ZE9MKs4G 1082 | JcC<$JcC<$JcDAB1XMr$T%3kn`W,t,pp.#hg].&OWiVuqkb>GsTZY.?T)\SnX/GO`ZE9MKs4G 1084 | JcC<$JcC<$JcDAB1XMr$T%3kn`W,t,pp.#hg].&OWiVuqkb>GsTZY.?T)\SnX/GO`ZE9MKs4G 1086 | JcC<$JcC<$JcDAB"45 1087 | JcC<$JcC<$JcDAB"45 1088 | JcC<$JcC<$JcDAB"45 1089 | JcC<$JcC<$JcDAB!RT*1s*t~> 1090 | JcC<$JcC<$JcDAB!RT*1s*t~> 1091 | JcC<$JcC<$JcDAB!RT*1s*t~> 1092 | JcC<$JcC<$JcDABs80e8J,~> 1093 | JcC<$JcC<$JcDABs80e8J,~> 1094 | JcC<$JcC<$JcDABs80e8J,~> 1095 | JcC<$JcC<$JcC<$iW"E~> 1096 | JcC<$JcC<$JcC<$iW"E~> 1097 | JcC<$JcC<$JcC<$iW"E~> 1098 | %%EndData 1099 | showpage 1100 | %%Trailer 1101 | end 1102 | %%EOF 1103 | -------------------------------------------------------------------------------- /dot/chart.svg: -------------------------------------------------------------------------------- 1 | 温度 (°C)本月温度情况本月对比012341020304050phodal.com -------------------------------------------------------------------------------- /dot/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/edit.png -------------------------------------------------------------------------------- /dot/getjson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/getjson.png -------------------------------------------------------------------------------- /dot/getpost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/getpost.png -------------------------------------------------------------------------------- /dot/getrequest.dot: -------------------------------------------------------------------------------- 1 | digraph G{ 2 | RK=LR; 3 | subgraph cluster1{ 4 | label="GET Request"; 5 | Browser->Server [label="GET"]; 6 | Server->Database [label="Refresh"]; 7 | Database->Server; 8 | Server->Browser [label="JSON"]; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /dot/getrequest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/getrequest.png -------------------------------------------------------------------------------- /dot/getrequest.ps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 2 | %%Creator: graphviz version 2.36.0 (20140111.2315) 3 | %%Title: G 4 | %%Pages: (atend) 5 | %%BoundingBox: (atend) 6 | %%EndComments 7 | save 8 | %%BeginProlog 9 | /DotDict 200 dict def 10 | DotDict begin 11 | 12 | /setupLatin1 { 13 | mark 14 | /EncodingVector 256 array def 15 | EncodingVector 0 16 | 17 | ISOLatin1Encoding 0 255 getinterval putinterval 18 | EncodingVector 45 /hyphen put 19 | 20 | % Set up ISO Latin 1 character encoding 21 | /starnetISO { 22 | dup dup findfont dup length dict begin 23 | { 1 index /FID ne { def }{ pop pop } ifelse 24 | } forall 25 | /Encoding EncodingVector def 26 | currentdict end definefont 27 | } def 28 | /Times-Roman starnetISO def 29 | /Times-Italic starnetISO def 30 | /Times-Bold starnetISO def 31 | /Times-BoldItalic starnetISO def 32 | /Helvetica starnetISO def 33 | /Helvetica-Oblique starnetISO def 34 | /Helvetica-Bold starnetISO def 35 | /Helvetica-BoldOblique starnetISO def 36 | /Courier starnetISO def 37 | /Courier-Oblique starnetISO def 38 | /Courier-Bold starnetISO def 39 | /Courier-BoldOblique starnetISO def 40 | cleartomark 41 | } bind def 42 | 43 | %%BeginResource: procset graphviz 0 0 44 | /coord-font-family /Times-Roman def 45 | /default-font-family /Times-Roman def 46 | /coordfont coord-font-family findfont 8 scalefont def 47 | 48 | /InvScaleFactor 1.0 def 49 | /set_scale { 50 | dup 1 exch div /InvScaleFactor exch def 51 | scale 52 | } bind def 53 | 54 | % styles 55 | /solid { [] 0 setdash } bind def 56 | /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def 57 | /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def 58 | /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def 59 | /bold { 2 setlinewidth } bind def 60 | /filled { } bind def 61 | /unfilled { } bind def 62 | /rounded { } bind def 63 | /diagonals { } bind def 64 | /tapered { } bind def 65 | 66 | % hooks for setting color 67 | /nodecolor { sethsbcolor } bind def 68 | /edgecolor { sethsbcolor } bind def 69 | /graphcolor { sethsbcolor } bind def 70 | /nopcolor {pop pop pop} bind def 71 | 72 | /beginpage { % i j npages 73 | /npages exch def 74 | /j exch def 75 | /i exch def 76 | /str 10 string def 77 | npages 1 gt { 78 | gsave 79 | coordfont setfont 80 | 0 0 moveto 81 | (\() show i str cvs show (,) show j str cvs show (\)) show 82 | grestore 83 | } if 84 | } bind def 85 | 86 | /set_font { 87 | findfont exch 88 | scalefont setfont 89 | } def 90 | 91 | % draw text fitted to its expected width 92 | /alignedtext { % width text 93 | /text exch def 94 | /width exch def 95 | gsave 96 | width 0 gt { 97 | [] 0 setdash 98 | text stringwidth pop width exch sub text length div 0 text ashow 99 | } if 100 | grestore 101 | } def 102 | 103 | /boxprim { % xcorner ycorner xsize ysize 104 | 4 2 roll 105 | moveto 106 | 2 copy 107 | exch 0 rlineto 108 | 0 exch rlineto 109 | pop neg 0 rlineto 110 | closepath 111 | } bind def 112 | 113 | /ellipse_path { 114 | /ry exch def 115 | /rx exch def 116 | /y exch def 117 | /x exch def 118 | matrix currentmatrix 119 | newpath 120 | x y translate 121 | rx ry scale 122 | 0 0 1 0 360 arc 123 | setmatrix 124 | } bind def 125 | 126 | /endpage { showpage } bind def 127 | /showpage { } def 128 | 129 | /layercolorseq 130 | [ % layer color sequence - darkest to lightest 131 | [0 0 0] 132 | [.2 .8 .8] 133 | [.4 .8 .8] 134 | [.6 .8 .8] 135 | [.8 .8 .8] 136 | ] 137 | def 138 | 139 | /layerlen layercolorseq length def 140 | 141 | /setlayer {/maxlayer exch def /curlayer exch def 142 | layercolorseq curlayer 1 sub layerlen mod get 143 | aload pop sethsbcolor 144 | /nodecolor {nopcolor} def 145 | /edgecolor {nopcolor} def 146 | /graphcolor {nopcolor} def 147 | } bind def 148 | 149 | /onlayer { curlayer ne {invis} if } def 150 | 151 | /onlayers { 152 | /myupper exch def 153 | /mylower exch def 154 | curlayer mylower lt 155 | curlayer myupper gt 156 | or 157 | {invis} if 158 | } def 159 | 160 | /curlayer 0 def 161 | 162 | %%EndResource 163 | %%EndProlog 164 | %%BeginSetup 165 | 14 default-font-family set_font 166 | 1 setmiterlimit 167 | % /arrowlength 10 def 168 | % /arrowwidth 5 def 169 | 170 | % make sure pdfmark is harmless for PS-interpreters other than Distiller 171 | /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse 172 | % make '<<' and '>>' safe on PS Level 1 devices 173 | /languagelevel where {pop languagelevel}{1} ifelse 174 | 2 lt { 175 | userdict (<<) cvn ([) cvn load put 176 | userdict (>>) cvn ([) cvn load put 177 | } if 178 | 179 | %%EndSetup 180 | setupLatin1 181 | %%Page: 1 1 182 | %%PageBoundingBox: 36 36 177 306 183 | %%PageOrientation: Portrait 184 | 0 0 1 beginpage 185 | gsave 186 | 36 36 141 270 boxprim clip newpath 187 | 1 1 set_scale 0 rotate 40 40 translate 188 | % cluster1 189 | gsave 190 | 1 setlinewidth 191 | 0 0 0 graphcolor 192 | newpath 8 8 moveto 193 | 8 254 lineto 194 | 125 254 lineto 195 | 125 8 lineto 196 | closepath stroke 197 | 0 0 0 graphcolor 198 | 14 /Times-Roman set_font 199 | 28.71 238.8 moveto 75.57 (GET Request) alignedtext 200 | grestore 201 | % Browser 202 | gsave 203 | 1 setlinewidth 204 | 0 0 0 nodecolor 205 | 66 206 40.11 18 ellipse_path stroke 206 | 0 0 0 nodecolor 207 | 14 /Times-Roman set_font 208 | 42.28 201.8 moveto 47.43 (Browser) alignedtext 209 | grestore 210 | % Server 211 | gsave 212 | 1 setlinewidth 213 | 0 0 0 nodecolor 214 | 66 120 33.28 18 ellipse_path stroke 215 | 0 0 0 nodecolor 216 | 14 /Times-Roman set_font 217 | 47.73 115.8 moveto 36.54 (Server) alignedtext 218 | grestore 219 | % Browser->Server 220 | gsave 221 | 1 setlinewidth 222 | 0 0 0 edgecolor 223 | newpath 47.92 189.63 moveto 224 | 42.66 184.05 37.57 177.3 34.79 170 curveto 225 | 31.23 160.67 35.09 151.23 41.17 143.16 curveto 226 | stroke 227 | 0 0 0 edgecolor 228 | newpath 43.83 145.42 moveto 229 | 47.79 135.6 lineto 230 | 38.57 140.81 lineto 231 | closepath fill 232 | 1 setlinewidth 233 | solid 234 | 0 0 0 edgecolor 235 | newpath 43.83 145.42 moveto 236 | 47.79 135.6 lineto 237 | 38.57 140.81 lineto 238 | closepath stroke 239 | 0 0 0 edgecolor 240 | 14 /Times-Roman set_font 241 | 35 158.8 moveto 27.21 (GET) alignedtext 242 | grestore 243 | % Server->Browser 244 | gsave 245 | 1 setlinewidth 246 | 0 0 0 edgecolor 247 | newpath 66 138.1 moveto 248 | 66 149.37 66 164.38 66 177.33 curveto 249 | stroke 250 | 0 0 0 edgecolor 251 | newpath 62.5 177.6 moveto 252 | 66 187.6 lineto 253 | 69.5 177.6 lineto 254 | closepath fill 255 | 1 setlinewidth 256 | solid 257 | 0 0 0 edgecolor 258 | newpath 62.5 177.6 moveto 259 | 66 187.6 lineto 260 | 69.5 177.6 lineto 261 | closepath stroke 262 | 0 0 0 edgecolor 263 | 14 /Times-Roman set_font 264 | 66 158.8 moveto 33.46 (JSON) alignedtext 265 | grestore 266 | % Database 267 | gsave 268 | 1 setlinewidth 269 | 0 0 0 nodecolor 270 | 66 34 42.27 18 ellipse_path stroke 271 | 0 0 0 nodecolor 272 | 14 /Times-Roman set_font 273 | 40.35 29.8 moveto 51.3 (Database) alignedtext 274 | grestore 275 | % Server->Database 276 | gsave 277 | 1 setlinewidth 278 | 0 0 0 edgecolor 279 | newpath 55.39 102.93 moveto 280 | 52.18 97.2 49.09 90.54 47.46 84 curveto 281 | 45.56 76.35 47.07 68.27 49.9 60.92 curveto 282 | stroke 283 | 0 0 0 edgecolor 284 | newpath 53.26 62.01 moveto 285 | 54.38 51.47 lineto 286 | 46.93 59.01 lineto 287 | closepath fill 288 | 1 setlinewidth 289 | solid 290 | 0 0 0 edgecolor 291 | newpath 53.26 62.01 moveto 292 | 54.38 51.47 lineto 293 | 46.93 59.01 lineto 294 | closepath stroke 295 | 0 0 0 edgecolor 296 | 14 /Times-Roman set_font 297 | 48 72.8 moveto 43.54 (Refresh) alignedtext 298 | grestore 299 | % Database->Server 300 | gsave 301 | 1 setlinewidth 302 | 0 0 0 edgecolor 303 | newpath 81.63 51.21 moveto 304 | 88.67 60.49 94.67 72.54 91 84 curveto 305 | 89.78 87.81 87.97 91.56 85.88 95.11 curveto 306 | stroke 307 | 0 0 0 edgecolor 308 | newpath 82.96 93.18 moveto 309 | 80.26 103.42 lineto 310 | 88.76 97.1 lineto 311 | closepath fill 312 | 1 setlinewidth 313 | solid 314 | 0 0 0 edgecolor 315 | newpath 82.96 93.18 moveto 316 | 80.26 103.42 lineto 317 | 88.76 97.1 lineto 318 | closepath stroke 319 | grestore 320 | endpage 321 | showpage 322 | grestore 323 | %%PageTrailer 324 | %%EndPage: 1 325 | %%Trailer 326 | %%Pages: 1 327 | %%BoundingBox: 36 36 177 306 328 | end 329 | restore 330 | %%EOF 331 | -------------------------------------------------------------------------------- /dot/jsondata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/jsondata.png -------------------------------------------------------------------------------- /dot/origin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/origin.png -------------------------------------------------------------------------------- /dot/python.dot: -------------------------------------------------------------------------------- 1 | digraph G{ 2 | node[shape=record]; 3 | Start ->"init"; 4 | Start [shape=ellipse]; 5 | "init"->get_data; 6 | subgraph cluster{ 7 | get_data->parse_data; 8 | parse_data->get_result; 9 | get_result->serial_write; 10 | serial_write->"Serial Send 1"[label="result = 1"] 11 | serial_write->"Serial Send 0"[label="result = 0"] 12 | "Serial Send 1"->get_data; 13 | "Serial Send 0"->get_data; 14 | serial_write [shape=diamond,label="1 or 0?"]; 15 | get_data [label="Get JSON Data"] 16 | parse_data [label="Parse JSON Data"] 17 | get_result [label="Get Result"] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /dot/python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/python.png -------------------------------------------------------------------------------- /dot/python.ps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 2 | %%Creator: graphviz version 2.36.0 (20140111.2315) 3 | %%Title: G 4 | %%Pages: (atend) 5 | %%BoundingBox: (atend) 6 | %%EndComments 7 | save 8 | %%BeginProlog 9 | /DotDict 200 dict def 10 | DotDict begin 11 | 12 | /setupLatin1 { 13 | mark 14 | /EncodingVector 256 array def 15 | EncodingVector 0 16 | 17 | ISOLatin1Encoding 0 255 getinterval putinterval 18 | EncodingVector 45 /hyphen put 19 | 20 | % Set up ISO Latin 1 character encoding 21 | /starnetISO { 22 | dup dup findfont dup length dict begin 23 | { 1 index /FID ne { def }{ pop pop } ifelse 24 | } forall 25 | /Encoding EncodingVector def 26 | currentdict end definefont 27 | } def 28 | /Times-Roman starnetISO def 29 | /Times-Italic starnetISO def 30 | /Times-Bold starnetISO def 31 | /Times-BoldItalic starnetISO def 32 | /Helvetica starnetISO def 33 | /Helvetica-Oblique starnetISO def 34 | /Helvetica-Bold starnetISO def 35 | /Helvetica-BoldOblique starnetISO def 36 | /Courier starnetISO def 37 | /Courier-Oblique starnetISO def 38 | /Courier-Bold starnetISO def 39 | /Courier-BoldOblique starnetISO def 40 | cleartomark 41 | } bind def 42 | 43 | %%BeginResource: procset graphviz 0 0 44 | /coord-font-family /Times-Roman def 45 | /default-font-family /Times-Roman def 46 | /coordfont coord-font-family findfont 8 scalefont def 47 | 48 | /InvScaleFactor 1.0 def 49 | /set_scale { 50 | dup 1 exch div /InvScaleFactor exch def 51 | scale 52 | } bind def 53 | 54 | % styles 55 | /solid { [] 0 setdash } bind def 56 | /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def 57 | /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def 58 | /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def 59 | /bold { 2 setlinewidth } bind def 60 | /filled { } bind def 61 | /unfilled { } bind def 62 | /rounded { } bind def 63 | /diagonals { } bind def 64 | /tapered { } bind def 65 | 66 | % hooks for setting color 67 | /nodecolor { sethsbcolor } bind def 68 | /edgecolor { sethsbcolor } bind def 69 | /graphcolor { sethsbcolor } bind def 70 | /nopcolor {pop pop pop} bind def 71 | 72 | /beginpage { % i j npages 73 | /npages exch def 74 | /j exch def 75 | /i exch def 76 | /str 10 string def 77 | npages 1 gt { 78 | gsave 79 | coordfont setfont 80 | 0 0 moveto 81 | (\() show i str cvs show (,) show j str cvs show (\)) show 82 | grestore 83 | } if 84 | } bind def 85 | 86 | /set_font { 87 | findfont exch 88 | scalefont setfont 89 | } def 90 | 91 | % draw text fitted to its expected width 92 | /alignedtext { % width text 93 | /text exch def 94 | /width exch def 95 | gsave 96 | width 0 gt { 97 | [] 0 setdash 98 | text stringwidth pop width exch sub text length div 0 text ashow 99 | } if 100 | grestore 101 | } def 102 | 103 | /boxprim { % xcorner ycorner xsize ysize 104 | 4 2 roll 105 | moveto 106 | 2 copy 107 | exch 0 rlineto 108 | 0 exch rlineto 109 | pop neg 0 rlineto 110 | closepath 111 | } bind def 112 | 113 | /ellipse_path { 114 | /ry exch def 115 | /rx exch def 116 | /y exch def 117 | /x exch def 118 | matrix currentmatrix 119 | newpath 120 | x y translate 121 | rx ry scale 122 | 0 0 1 0 360 arc 123 | setmatrix 124 | } bind def 125 | 126 | /endpage { showpage } bind def 127 | /showpage { } def 128 | 129 | /layercolorseq 130 | [ % layer color sequence - darkest to lightest 131 | [0 0 0] 132 | [.2 .8 .8] 133 | [.4 .8 .8] 134 | [.6 .8 .8] 135 | [.8 .8 .8] 136 | ] 137 | def 138 | 139 | /layerlen layercolorseq length def 140 | 141 | /setlayer {/maxlayer exch def /curlayer exch def 142 | layercolorseq curlayer 1 sub layerlen mod get 143 | aload pop sethsbcolor 144 | /nodecolor {nopcolor} def 145 | /edgecolor {nopcolor} def 146 | /graphcolor {nopcolor} def 147 | } bind def 148 | 149 | /onlayer { curlayer ne {invis} if } def 150 | 151 | /onlayers { 152 | /myupper exch def 153 | /mylower exch def 154 | curlayer mylower lt 155 | curlayer myupper gt 156 | or 157 | {invis} if 158 | } def 159 | 160 | /curlayer 0 def 161 | 162 | %%EndResource 163 | %%EndProlog 164 | %%BeginSetup 165 | 14 default-font-family set_font 166 | 1 setmiterlimit 167 | % /arrowlength 10 def 168 | % /arrowwidth 5 def 169 | 170 | % make sure pdfmark is harmless for PS-interpreters other than Distiller 171 | /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse 172 | % make '<<' and '>>' safe on PS Level 1 devices 173 | /languagelevel where {pop languagelevel}{1} ifelse 174 | 2 lt { 175 | userdict (<<) cvn ([) cvn load put 176 | userdict (>>) cvn ([) cvn load put 177 | } if 178 | 179 | %%EndSetup 180 | setupLatin1 181 | %%Page: 1 1 182 | %%PageBoundingBox: 36 36 275 562 183 | %%PageOrientation: Portrait 184 | 0 0 1 beginpage 185 | gsave 186 | 36 36 239 526 boxprim clip newpath 187 | 1 1 set_scale 0 rotate 40 40 translate 188 | % cluster 189 | gsave 190 | 1 setlinewidth 191 | 0 0 0 graphcolor 192 | newpath 8 8 moveto 193 | 8 376 lineto 194 | 223 376 lineto 195 | 223 8 lineto 196 | closepath stroke 197 | grestore 198 | % Start 199 | gsave 200 | 1 setlinewidth 201 | 0 0 0 nodecolor 202 | 126 500 27 18 ellipse_path stroke 203 | 0 0 0 nodecolor 204 | 14 /Times-Roman set_font 205 | 112.78 495.8 moveto 26.44 (Start) alignedtext 206 | grestore 207 | % init 208 | gsave 209 | 1 setlinewidth 210 | 0 0 0 nodecolor 211 | newpath 99 407 moveto 212 | 99 443 lineto 213 | 153 443 lineto 214 | 153 407 lineto 215 | closepath stroke 216 | 0 0 0 nodecolor 217 | 14 /Times-Roman set_font 218 | 116.5 420.8 moveto 18.67 (init) alignedtext 219 | grestore 220 | % Start->init 221 | gsave 222 | 1 setlinewidth 223 | 0 0 0 edgecolor 224 | newpath 126 481.7 moveto 225 | 126 473.25 126 462.87 126 453.37 curveto 226 | stroke 227 | 0 0 0 edgecolor 228 | newpath 129.5 453.18 moveto 229 | 126 443.18 lineto 230 | 122.5 453.18 lineto 231 | closepath fill 232 | 1 setlinewidth 233 | solid 234 | 0 0 0 edgecolor 235 | newpath 129.5 453.18 moveto 236 | 126 443.18 lineto 237 | 122.5 453.18 lineto 238 | closepath stroke 239 | grestore 240 | % get_data 241 | gsave 242 | 1 setlinewidth 243 | 0 0 0 nodecolor 244 | newpath 74.45 331 moveto 245 | 74.45 367 lineto 246 | 177.55 367 lineto 247 | 177.55 331 lineto 248 | closepath stroke 249 | 0 0 0 nodecolor 250 | 14 /Times-Roman set_font 251 | 82.45 344.8 moveto 87.1 (Get JSON Data) alignedtext 252 | grestore 253 | % init->get_data 254 | gsave 255 | 1 setlinewidth 256 | 0 0 0 edgecolor 257 | newpath 126 406.84 moveto 258 | 126 398.06 126 387.16 126 377.27 curveto 259 | stroke 260 | 0 0 0 edgecolor 261 | newpath 129.5 377.07 moveto 262 | 126 367.07 lineto 263 | 122.5 377.07 lineto 264 | closepath fill 265 | 1 setlinewidth 266 | solid 267 | 0 0 0 edgecolor 268 | newpath 129.5 377.07 moveto 269 | 126 367.07 lineto 270 | 122.5 377.07 lineto 271 | closepath stroke 272 | grestore 273 | % parse_data 274 | gsave 275 | 1 setlinewidth 276 | 0 0 0 nodecolor 277 | newpath 69.4 255 moveto 278 | 69.4 291 lineto 279 | 182.6 291 lineto 280 | 182.6 255 lineto 281 | closepath stroke 282 | 0 0 0 nodecolor 283 | 14 /Times-Roman set_font 284 | 77.4 268.8 moveto 97.21 (Parse JSON Data) alignedtext 285 | grestore 286 | % get_data->parse_data 287 | gsave 288 | 1 setlinewidth 289 | 0 0 0 edgecolor 290 | newpath 126 330.84 moveto 291 | 126 322.06 126 311.16 126 301.27 curveto 292 | stroke 293 | 0 0 0 edgecolor 294 | newpath 129.5 301.07 moveto 295 | 126 291.07 lineto 296 | 122.5 301.07 lineto 297 | closepath fill 298 | 1 setlinewidth 299 | solid 300 | 0 0 0 edgecolor 301 | newpath 129.5 301.07 moveto 302 | 126 291.07 lineto 303 | 122.5 301.07 lineto 304 | closepath stroke 305 | grestore 306 | % get_result 307 | gsave 308 | 1 setlinewidth 309 | 0 0 0 nodecolor 310 | newpath 88.25 179 moveto 311 | 88.25 215 lineto 312 | 163.75 215 lineto 313 | 163.75 179 lineto 314 | closepath stroke 315 | 0 0 0 nodecolor 316 | 14 /Times-Roman set_font 317 | 96.25 192.8 moveto 59.49 (Get Result) alignedtext 318 | grestore 319 | % parse_data->get_result 320 | gsave 321 | 1 setlinewidth 322 | 0 0 0 edgecolor 323 | newpath 126 254.84 moveto 324 | 126 246.06 126 235.16 126 225.27 curveto 325 | stroke 326 | 0 0 0 edgecolor 327 | newpath 129.5 225.07 moveto 328 | 126 215.07 lineto 329 | 122.5 225.07 lineto 330 | closepath fill 331 | 1 setlinewidth 332 | solid 333 | 0 0 0 edgecolor 334 | newpath 129.5 225.07 moveto 335 | 126 215.07 lineto 336 | 122.5 225.07 lineto 337 | closepath stroke 338 | grestore 339 | % serial_write 340 | gsave 341 | 1 setlinewidth 342 | 0 0 0 nodecolor 343 | newpath 126 140 moveto 344 | 76.97 122 lineto 345 | 126 104 lineto 346 | 175.03 122 lineto 347 | closepath stroke 348 | 0 0 0 nodecolor 349 | 14 /Times-Roman set_font 350 | 106.56 117.8 moveto 38.88 (1 or 0?) alignedtext 351 | grestore 352 | % get_result->serial_write 353 | gsave 354 | 1 setlinewidth 355 | 0 0 0 edgecolor 356 | newpath 126 178.7 moveto 357 | 126 170.25 126 159.87 126 150.37 curveto 358 | stroke 359 | 0 0 0 edgecolor 360 | newpath 129.5 150.18 moveto 361 | 126 140.18 lineto 362 | 122.5 150.18 lineto 363 | closepath fill 364 | 1 setlinewidth 365 | solid 366 | 0 0 0 edgecolor 367 | newpath 129.5 150.18 moveto 368 | 126 140.18 lineto 369 | 122.5 150.18 lineto 370 | closepath stroke 371 | grestore 372 | % Serial Send 1 373 | gsave 374 | 1 setlinewidth 375 | 0 0 0 nodecolor 376 | newpath 15.67 17 moveto 377 | 15.67 53 lineto 378 | 106.33 53 lineto 379 | 106.33 17 lineto 380 | closepath stroke 381 | 0 0 0 nodecolor 382 | 14 /Times-Roman set_font 383 | 23.67 30.8 moveto 74.66 (Serial Send 1) alignedtext 384 | grestore 385 | % serial_write->Serial Send 1 386 | gsave 387 | 1 setlinewidth 388 | 0 0 0 edgecolor 389 | newpath 109.31 109.83 moveto 390 | 100.91 103.57 91.04 95.19 84 86 curveto 391 | 78.63 78.99 74.14 70.52 70.59 62.57 curveto 392 | stroke 393 | 0 0 0 edgecolor 394 | newpath 73.8 61.15 moveto 395 | 66.74 53.25 lineto 396 | 67.33 63.83 lineto 397 | closepath fill 398 | 1 setlinewidth 399 | solid 400 | 0 0 0 edgecolor 401 | newpath 73.8 61.15 moveto 402 | 66.74 53.25 lineto 403 | 67.33 63.83 lineto 404 | closepath stroke 405 | 0 0 0 edgecolor 406 | 14 /Times-Roman set_font 407 | 85 74.8 moveto 53 (result = 1) alignedtext 408 | grestore 409 | % Serial Send 0 410 | gsave 411 | 1 setlinewidth 412 | 0 0 0 nodecolor 413 | newpath 124.67 17 moveto 414 | 124.67 53 lineto 415 | 215.33 53 lineto 416 | 215.33 17 lineto 417 | closepath stroke 418 | 0 0 0 nodecolor 419 | 14 /Times-Roman set_font 420 | 132.67 30.8 moveto 74.66 (Serial Send 0) alignedtext 421 | grestore 422 | % serial_write->Serial Send 0 423 | gsave 424 | 1 setlinewidth 425 | 0 0 0 edgecolor 426 | newpath 131.81 105.69 moveto 427 | 135.72 95.87 141.2 82.96 147 72 curveto 428 | 148.77 68.66 150.75 65.22 152.78 61.85 curveto 429 | stroke 430 | 0 0 0 edgecolor 431 | newpath 155.83 63.57 moveto 432 | 158.18 53.23 lineto 433 | 149.9 59.85 lineto 434 | closepath fill 435 | 1 setlinewidth 436 | solid 437 | 0 0 0 edgecolor 438 | newpath 155.83 63.57 moveto 439 | 158.18 53.23 lineto 440 | 149.9 59.85 lineto 441 | closepath stroke 442 | 0 0 0 edgecolor 443 | 14 /Times-Roman set_font 444 | 148 74.8 moveto 53 (result = 0) alignedtext 445 | grestore 446 | % Serial Send 1->get_data 447 | gsave 448 | 1 setlinewidth 449 | 0 0 0 edgecolor 450 | newpath 56.17 53.1 moveto 451 | 51.79 70.15 46 97.17 46 121 curveto 452 | 46 274 46 274 46 274 curveto 453 | 46 295.79 62.19 312.95 80 325.23 curveto 454 | stroke 455 | 0 0 0 edgecolor 456 | newpath 78.5 328.43 moveto 457 | 88.81 330.87 lineto 458 | 82.27 322.53 lineto 459 | closepath fill 460 | 1 setlinewidth 461 | solid 462 | 0 0 0 edgecolor 463 | newpath 78.5 328.43 moveto 464 | 88.81 330.87 lineto 465 | 82.27 322.53 lineto 466 | closepath stroke 467 | grestore 468 | % Serial Send 0->get_data 469 | gsave 470 | 1 setlinewidth 471 | 0 0 0 edgecolor 472 | newpath 187.9 53.27 moveto 473 | 192.61 58.8 197.16 65.25 200 72 curveto 474 | 208.49 92.18 205 99.11 205 121 curveto 475 | 205 274 205 274 205 274 curveto 476 | 205 295.64 189.01 312.79 171.43 325.1 curveto 477 | stroke 478 | 0 0 0 edgecolor 479 | newpath 169.2 322.37 moveto 480 | 162.72 330.76 lineto 481 | 173.02 328.24 lineto 482 | closepath fill 483 | 1 setlinewidth 484 | solid 485 | 0 0 0 edgecolor 486 | newpath 169.2 322.37 moveto 487 | 162.72 330.76 lineto 488 | 173.02 328.24 lineto 489 | closepath stroke 490 | grestore 491 | endpage 492 | showpage 493 | grestore 494 | %%PageTrailer 495 | %%EndPage: 1 496 | %%Trailer 497 | %%Pages: 1 498 | %%BoundingBox: 36 36 275 562 499 | end 500 | restore 501 | %%EOF 502 | -------------------------------------------------------------------------------- /dot/raspberrypi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/raspberrypi.jpg -------------------------------------------------------------------------------- /dot/raspberrypi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/raspberrypi.png -------------------------------------------------------------------------------- /dot/request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/request.png -------------------------------------------------------------------------------- /dot/restful.dot: -------------------------------------------------------------------------------- 1 | digraph G{ 2 | User->Browser1 [label="GET"]; 3 | User->Browser2 [label="POST"]; 4 | User->Browser3 [label="PUT"]; 5 | User->Browser4 [label="Delete"]; 6 | subgraph cluster0{ 7 | Database->MySQL; 8 | MySQL->Database; 9 | } 10 | subgraph cluster1{ 11 | label="GET Request"; 12 | Browser1->Server1 ; 13 | Server1->Database [label="Create"]; 14 | Database->Server1 [label=""]; 15 | Server1->Browser1; 16 | } 17 | subgraph cluster2{ 18 | label="POST Request"; 19 | Browser2->Server2 ; 20 | Server2->Database [label="Refresh"]; 21 | Database->Server2 [label=""]; 22 | Server2->Browser2; 23 | } 24 | subgraph cluster3{ 25 | label="PUT Request"; 26 | Browser3->Server3 ; 27 | Server3->Database [label="Update"]; 28 | Database->Server3 [label=""]; 29 | Server3->Browser3; 30 | } 31 | subgraph cluster4{ 32 | Browser4->Server4 ; 33 | Server4->Database [label="Delete"]; 34 | Database->Server4 [label=""]; 35 | Server4->Browser4; 36 | label="Delete Request"; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /dot/restful.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/restful.png -------------------------------------------------------------------------------- /dot/restful.ps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 2 | %%Creator: graphviz version 2.36.0 (20140111.2315) 3 | %%Title: G 4 | %%Pages: (atend) 5 | %%BoundingBox: (atend) 6 | %%EndComments 7 | save 8 | %%BeginProlog 9 | /DotDict 200 dict def 10 | DotDict begin 11 | 12 | /setupLatin1 { 13 | mark 14 | /EncodingVector 256 array def 15 | EncodingVector 0 16 | 17 | ISOLatin1Encoding 0 255 getinterval putinterval 18 | EncodingVector 45 /hyphen put 19 | 20 | % Set up ISO Latin 1 character encoding 21 | /starnetISO { 22 | dup dup findfont dup length dict begin 23 | { 1 index /FID ne { def }{ pop pop } ifelse 24 | } forall 25 | /Encoding EncodingVector def 26 | currentdict end definefont 27 | } def 28 | /Times-Roman starnetISO def 29 | /Times-Italic starnetISO def 30 | /Times-Bold starnetISO def 31 | /Times-BoldItalic starnetISO def 32 | /Helvetica starnetISO def 33 | /Helvetica-Oblique starnetISO def 34 | /Helvetica-Bold starnetISO def 35 | /Helvetica-BoldOblique starnetISO def 36 | /Courier starnetISO def 37 | /Courier-Oblique starnetISO def 38 | /Courier-Bold starnetISO def 39 | /Courier-BoldOblique starnetISO def 40 | cleartomark 41 | } bind def 42 | 43 | %%BeginResource: procset graphviz 0 0 44 | /coord-font-family /Times-Roman def 45 | /default-font-family /Times-Roman def 46 | /coordfont coord-font-family findfont 8 scalefont def 47 | 48 | /InvScaleFactor 1.0 def 49 | /set_scale { 50 | dup 1 exch div /InvScaleFactor exch def 51 | scale 52 | } bind def 53 | 54 | % styles 55 | /solid { [] 0 setdash } bind def 56 | /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def 57 | /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def 58 | /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def 59 | /bold { 2 setlinewidth } bind def 60 | /filled { } bind def 61 | /unfilled { } bind def 62 | /rounded { } bind def 63 | /diagonals { } bind def 64 | /tapered { } bind def 65 | 66 | % hooks for setting color 67 | /nodecolor { sethsbcolor } bind def 68 | /edgecolor { sethsbcolor } bind def 69 | /graphcolor { sethsbcolor } bind def 70 | /nopcolor {pop pop pop} bind def 71 | 72 | /beginpage { % i j npages 73 | /npages exch def 74 | /j exch def 75 | /i exch def 76 | /str 10 string def 77 | npages 1 gt { 78 | gsave 79 | coordfont setfont 80 | 0 0 moveto 81 | (\() show i str cvs show (,) show j str cvs show (\)) show 82 | grestore 83 | } if 84 | } bind def 85 | 86 | /set_font { 87 | findfont exch 88 | scalefont setfont 89 | } def 90 | 91 | % draw text fitted to its expected width 92 | /alignedtext { % width text 93 | /text exch def 94 | /width exch def 95 | gsave 96 | width 0 gt { 97 | [] 0 setdash 98 | text stringwidth pop width exch sub text length div 0 text ashow 99 | } if 100 | grestore 101 | } def 102 | 103 | /boxprim { % xcorner ycorner xsize ysize 104 | 4 2 roll 105 | moveto 106 | 2 copy 107 | exch 0 rlineto 108 | 0 exch rlineto 109 | pop neg 0 rlineto 110 | closepath 111 | } bind def 112 | 113 | /ellipse_path { 114 | /ry exch def 115 | /rx exch def 116 | /y exch def 117 | /x exch def 118 | matrix currentmatrix 119 | newpath 120 | x y translate 121 | rx ry scale 122 | 0 0 1 0 360 arc 123 | setmatrix 124 | } bind def 125 | 126 | /endpage { showpage } bind def 127 | /showpage { } def 128 | 129 | /layercolorseq 130 | [ % layer color sequence - darkest to lightest 131 | [0 0 0] 132 | [.2 .8 .8] 133 | [.4 .8 .8] 134 | [.6 .8 .8] 135 | [.8 .8 .8] 136 | ] 137 | def 138 | 139 | /layerlen layercolorseq length def 140 | 141 | /setlayer {/maxlayer exch def /curlayer exch def 142 | layercolorseq curlayer 1 sub layerlen mod get 143 | aload pop sethsbcolor 144 | /nodecolor {nopcolor} def 145 | /edgecolor {nopcolor} def 146 | /graphcolor {nopcolor} def 147 | } bind def 148 | 149 | /onlayer { curlayer ne {invis} if } def 150 | 151 | /onlayers { 152 | /myupper exch def 153 | /mylower exch def 154 | curlayer mylower lt 155 | curlayer myupper gt 156 | or 157 | {invis} if 158 | } def 159 | 160 | /curlayer 0 def 161 | 162 | %%EndResource 163 | %%EndProlog 164 | %%BeginSetup 165 | 14 default-font-family set_font 166 | 1 setmiterlimit 167 | % /arrowlength 10 def 168 | % /arrowwidth 5 def 169 | 170 | % make sure pdfmark is harmless for PS-interpreters other than Distiller 171 | /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse 172 | % make '<<' and '>>' safe on PS Level 1 devices 173 | /languagelevel where {pop languagelevel}{1} ifelse 174 | 2 lt { 175 | userdict (<<) cvn ([) cvn load put 176 | userdict (>>) cvn ([) cvn load put 177 | } if 178 | 179 | %%EndSetup 180 | setupLatin1 181 | %%Page: 1 1 182 | %%PageBoundingBox: 36 36 500 436 183 | %%PageOrientation: Portrait 184 | 0 0 1 beginpage 185 | gsave 186 | 36 36 464 400 boxprim clip newpath 187 | 1 1 set_scale 0 rotate 40 40 translate 188 | % cluster0 189 | gsave 190 | 1 setlinewidth 191 | 0 0 0 graphcolor 192 | newpath 172 8 moveto 193 | 172 134 lineto 194 | 274 134 lineto 195 | 274 8 lineto 196 | closepath stroke 197 | grestore 198 | % cluster1 199 | gsave 200 | 1 setlinewidth 201 | 0 0 0 graphcolor 202 | newpath 8 168 moveto 203 | 8 316 lineto 204 | 112 316 lineto 205 | 112 168 lineto 206 | closepath stroke 207 | 0 0 0 graphcolor 208 | 14 /Times-Roman set_font 209 | 22.21 300.8 moveto 75.57 (GET Request) alignedtext 210 | grestore 211 | % cluster2 212 | gsave 213 | 1 setlinewidth 214 | 0 0 0 graphcolor 215 | newpath 120 168 moveto 216 | 120 316 lineto 217 | 224 316 lineto 218 | 224 168 lineto 219 | closepath stroke 220 | 0 0 0 graphcolor 221 | 14 /Times-Roman set_font 222 | 130.7 300.8 moveto 82.59 (POST Request) alignedtext 223 | grestore 224 | % cluster3 225 | gsave 226 | 1 setlinewidth 227 | 0 0 0 graphcolor 228 | newpath 232 168 moveto 229 | 232 316 lineto 230 | 336 316 lineto 231 | 336 168 lineto 232 | closepath stroke 233 | 0 0 0 graphcolor 234 | 14 /Times-Roman set_font 235 | 246.6 300.8 moveto 74.81 (PUT Request) alignedtext 236 | grestore 237 | % cluster4 238 | gsave 239 | 1 setlinewidth 240 | 0 0 0 graphcolor 241 | newpath 344 168 moveto 242 | 344 316 lineto 243 | 448 316 lineto 244 | 448 168 lineto 245 | closepath stroke 246 | 0 0 0 graphcolor 247 | 14 /Times-Roman set_font 248 | 353.43 300.8 moveto 85.13 (Delete Request) alignedtext 249 | grestore 250 | % User 251 | gsave 252 | 1 setlinewidth 253 | 0 0 0 nodecolor 254 | 228 374 27 18 ellipse_path stroke 255 | 0 0 0 nodecolor 256 | 14 /Times-Roman set_font 257 | 214.78 369.8 moveto 26.43 (User) alignedtext 258 | grestore 259 | % Browser1 260 | gsave 261 | 1 setlinewidth 262 | 0 0 0 nodecolor 263 | 60 268 44.24 18 ellipse_path stroke 264 | 0 0 0 nodecolor 265 | 14 /Times-Roman set_font 266 | 32.78 263.8 moveto 54.43 (Browser1) alignedtext 267 | grestore 268 | % User->Browser1 269 | gsave 270 | 1 setlinewidth 271 | 0 0 0 edgecolor 272 | newpath 205.71 363.48 moveto 273 | 182.5 353.15 145.48 335.5 116 316 curveto 274 | 105.08 308.78 93.87 299.75 84.38 291.54 curveto 275 | stroke 276 | 0 0 0 edgecolor 277 | newpath 86.67 288.89 moveto 278 | 76.85 284.89 lineto 279 | 82.03 294.13 lineto 280 | closepath fill 281 | 1 setlinewidth 282 | solid 283 | 0 0 0 edgecolor 284 | newpath 86.67 288.89 moveto 285 | 76.85 284.89 lineto 286 | 82.03 294.13 lineto 287 | closepath stroke 288 | 0 0 0 edgecolor 289 | 14 /Times-Roman set_font 290 | 152 326.8 moveto 27.21 (GET) alignedtext 291 | grestore 292 | % Browser2 293 | gsave 294 | 1 setlinewidth 295 | 0 0 0 nodecolor 296 | 172 268 44.24 18 ellipse_path stroke 297 | 0 0 0 nodecolor 298 | 14 /Times-Roman set_font 299 | 144.78 263.8 moveto 54.43 (Browser2) alignedtext 300 | grestore 301 | % User->Browser2 302 | gsave 303 | 1 setlinewidth 304 | 0 0 0 edgecolor 305 | newpath 219.25 356.75 moveto 306 | 210.31 340.16 196.31 314.15 185.86 294.75 curveto 307 | stroke 308 | 0 0 0 edgecolor 309 | newpath 188.88 292.97 moveto 310 | 181.06 285.82 lineto 311 | 182.72 296.29 lineto 312 | closepath fill 313 | 1 setlinewidth 314 | solid 315 | 0 0 0 edgecolor 316 | newpath 188.88 292.97 moveto 317 | 181.06 285.82 lineto 318 | 182.72 296.29 lineto 319 | closepath stroke 320 | 0 0 0 edgecolor 321 | 14 /Times-Roman set_font 322 | 209 326.8 moveto 34.23 (POST) alignedtext 323 | grestore 324 | % Browser3 325 | gsave 326 | 1 setlinewidth 327 | 0 0 0 nodecolor 328 | 284 268 44.24 18 ellipse_path stroke 329 | 0 0 0 nodecolor 330 | 14 /Times-Roman set_font 331 | 256.78 263.8 moveto 54.43 (Browser3) alignedtext 332 | grestore 333 | % User->Browser3 334 | gsave 335 | 1 setlinewidth 336 | 0 0 0 edgecolor 337 | newpath 236.91 356.63 moveto 338 | 240.1 350.76 243.72 344.08 247 338 curveto 339 | 254.74 323.66 263.34 307.61 270.31 294.61 curveto 340 | stroke 341 | 0 0 0 edgecolor 342 | newpath 273.42 296.21 moveto 343 | 275.05 285.74 lineto 344 | 267.25 292.91 lineto 345 | closepath fill 346 | 1 setlinewidth 347 | solid 348 | 0 0 0 edgecolor 349 | newpath 273.42 296.21 moveto 350 | 275.05 285.74 lineto 351 | 267.25 292.91 lineto 352 | closepath stroke 353 | 0 0 0 edgecolor 354 | 14 /Times-Roman set_font 355 | 255 326.8 moveto 26.45 (PUT) alignedtext 356 | grestore 357 | % Browser4 358 | gsave 359 | 1 setlinewidth 360 | 0 0 0 nodecolor 361 | 396 268 44.24 18 ellipse_path stroke 362 | 0 0 0 nodecolor 363 | 14 /Times-Roman set_font 364 | 368.78 263.8 moveto 54.43 (Browser4) alignedtext 365 | grestore 366 | % User->Browser4 367 | gsave 368 | 1 setlinewidth 369 | 0 0 0 edgecolor 370 | newpath 250.29 363.48 moveto 371 | 273.5 353.15 310.52 335.5 340 316 curveto 372 | 350.92 308.78 362.13 299.75 371.62 291.54 curveto 373 | stroke 374 | 0 0 0 edgecolor 375 | newpath 373.97 294.13 moveto 376 | 379.15 284.89 lineto 377 | 369.33 288.89 lineto 378 | closepath fill 379 | 1 setlinewidth 380 | solid 381 | 0 0 0 edgecolor 382 | newpath 373.97 294.13 moveto 383 | 379.15 284.89 lineto 384 | 369.33 288.89 lineto 385 | closepath stroke 386 | 0 0 0 edgecolor 387 | 14 /Times-Roman set_font 388 | 326 326.8 moveto 36.53 (Delete) alignedtext 389 | grestore 390 | % Server1 391 | gsave 392 | 1 setlinewidth 393 | 0 0 0 nodecolor 394 | 63 194 37.41 18 ellipse_path stroke 395 | 0 0 0 nodecolor 396 | 14 /Times-Roman set_font 397 | 41.23 189.8 moveto 43.54 (Server1) alignedtext 398 | grestore 399 | % Browser1->Server1 400 | gsave 401 | 1 setlinewidth 402 | 0 0 0 edgecolor 403 | newpath 54.87 249.94 moveto 404 | 54.33 241.6 54.52 231.36 55.32 222 curveto 405 | stroke 406 | 0 0 0 edgecolor 407 | newpath 58.81 222.27 moveto 408 | 56.47 211.94 lineto 409 | 51.85 221.48 lineto 410 | closepath fill 411 | 1 setlinewidth 412 | solid 413 | 0 0 0 edgecolor 414 | newpath 58.81 222.27 moveto 415 | 56.47 211.94 lineto 416 | 51.85 221.48 lineto 417 | closepath stroke 418 | grestore 419 | % Server2 420 | gsave 421 | 1 setlinewidth 422 | 0 0 0 nodecolor 423 | 172 194 37.41 18 ellipse_path stroke 424 | 0 0 0 nodecolor 425 | 14 /Times-Roman set_font 426 | 150.23 189.8 moveto 43.54 (Server2) alignedtext 427 | grestore 428 | % Browser2->Server2 429 | gsave 430 | 1 setlinewidth 431 | 0 0 0 edgecolor 432 | newpath 166.16 249.94 moveto 433 | 165.28 241.6 165.04 231.36 165.44 222 curveto 434 | stroke 435 | 0 0 0 edgecolor 436 | newpath 168.94 222.17 moveto 437 | 166.17 211.94 lineto 438 | 161.96 221.66 lineto 439 | closepath fill 440 | 1 setlinewidth 441 | solid 442 | 0 0 0 edgecolor 443 | newpath 168.94 222.17 moveto 444 | 166.17 211.94 lineto 445 | 161.96 221.66 lineto 446 | closepath stroke 447 | grestore 448 | % Server3 449 | gsave 450 | 1 setlinewidth 451 | 0 0 0 nodecolor 452 | 284 194 37.41 18 ellipse_path stroke 453 | 0 0 0 nodecolor 454 | 14 /Times-Roman set_font 455 | 262.23 189.8 moveto 43.54 (Server3) alignedtext 456 | grestore 457 | % Browser3->Server3 458 | gsave 459 | 1 setlinewidth 460 | 0 0 0 edgecolor 461 | newpath 278.16 249.94 moveto 462 | 277.28 241.6 277.04 231.36 277.44 222 curveto 463 | stroke 464 | 0 0 0 edgecolor 465 | newpath 280.94 222.17 moveto 466 | 278.17 211.94 lineto 467 | 273.96 221.66 lineto 468 | closepath fill 469 | 1 setlinewidth 470 | solid 471 | 0 0 0 edgecolor 472 | newpath 280.94 222.17 moveto 473 | 278.17 211.94 lineto 474 | 273.96 221.66 lineto 475 | closepath stroke 476 | grestore 477 | % Server4 478 | gsave 479 | 1 setlinewidth 480 | 0 0 0 nodecolor 481 | 391 194 37.41 18 ellipse_path stroke 482 | 0 0 0 nodecolor 483 | 14 /Times-Roman set_font 484 | 369.23 189.8 moveto 43.54 (Server4) alignedtext 485 | grestore 486 | % Browser4->Server4 487 | gsave 488 | 1 setlinewidth 489 | 0 0 0 edgecolor 490 | newpath 388.98 249.94 moveto 491 | 387.51 241.6 386.56 231.36 386.32 222 curveto 492 | stroke 493 | 0 0 0 edgecolor 494 | newpath 389.82 221.95 moveto 495 | 386.35 211.94 lineto 496 | 382.82 221.93 lineto 497 | closepath fill 498 | 1 setlinewidth 499 | solid 500 | 0 0 0 edgecolor 501 | newpath 389.82 221.95 moveto 502 | 386.35 211.94 lineto 503 | 382.82 221.93 lineto 504 | closepath stroke 505 | grestore 506 | % Database 507 | gsave 508 | 1 setlinewidth 509 | 0 0 0 nodecolor 510 | 223 108 42.27 18 ellipse_path stroke 511 | 0 0 0 nodecolor 512 | 14 /Times-Roman set_font 513 | 197.35 103.8 moveto 51.3 (Database) alignedtext 514 | grestore 515 | % MySQL 516 | gsave 517 | 1 setlinewidth 518 | 0 0 0 nodecolor 519 | 223 34 39.15 18 ellipse_path stroke 520 | 0 0 0 nodecolor 521 | 14 /Times-Roman set_font 522 | 200.05 29.8 moveto 45.9 (MySQL) alignedtext 523 | grestore 524 | % Database->MySQL 525 | gsave 526 | 1 setlinewidth 527 | 0 0 0 edgecolor 528 | newpath 217.16 89.94 moveto 529 | 216.28 81.6 216.04 71.36 216.44 62 curveto 530 | stroke 531 | 0 0 0 edgecolor 532 | newpath 219.94 62.17 moveto 533 | 217.17 51.94 lineto 534 | 212.96 61.66 lineto 535 | closepath fill 536 | 1 setlinewidth 537 | solid 538 | 0 0 0 edgecolor 539 | newpath 219.94 62.17 moveto 540 | 217.17 51.94 lineto 541 | 212.96 61.66 lineto 542 | closepath stroke 543 | grestore 544 | % Database->Server1 545 | gsave 546 | 1 setlinewidth 547 | 0 0 0 edgecolor 548 | newpath 184.99 115.98 moveto 549 | 162.34 121.3 133.67 130.12 111 144 curveto 550 | 100.16 150.64 90.01 160.26 81.87 169.22 curveto 551 | stroke 552 | 0 0 0 edgecolor 553 | newpath 79.17 166.99 moveto 554 | 75.26 176.83 lineto 555 | 84.46 171.58 lineto 556 | closepath fill 557 | 1 setlinewidth 558 | solid 559 | 0 0 0 edgecolor 560 | newpath 79.17 166.99 moveto 561 | 75.26 176.83 lineto 562 | 84.46 171.58 lineto 563 | closepath stroke 564 | grestore 565 | % Database->Server2 566 | gsave 567 | 1 setlinewidth 568 | 0 0 0 edgecolor 569 | newpath 202.63 123.94 moveto 570 | 196.17 129.58 189.54 136.47 185 144 curveto 571 | 181 150.63 178.21 158.49 176.28 165.96 curveto 572 | stroke 573 | 0 0 0 edgecolor 574 | newpath 172.86 165.22 moveto 575 | 174.13 175.73 lineto 576 | 179.7 166.72 lineto 577 | closepath fill 578 | 1 setlinewidth 579 | solid 580 | 0 0 0 edgecolor 581 | newpath 172.86 165.22 moveto 582 | 174.13 175.73 lineto 583 | 179.7 166.72 lineto 584 | closepath stroke 585 | grestore 586 | % Database->Server3 587 | gsave 588 | 1 setlinewidth 589 | 0 0 0 edgecolor 590 | newpath 234.93 125.43 moveto 591 | 243.87 137.73 256.23 154.76 266.31 168.64 curveto 592 | stroke 593 | 0 0 0 edgecolor 594 | newpath 263.53 170.77 moveto 595 | 272.24 176.8 lineto 596 | 269.19 166.66 lineto 597 | closepath fill 598 | 1 setlinewidth 599 | solid 600 | 0 0 0 edgecolor 601 | newpath 263.53 170.77 moveto 602 | 272.24 176.8 lineto 603 | 269.19 166.66 lineto 604 | closepath stroke 605 | grestore 606 | % Database->Server4 607 | gsave 608 | 1 setlinewidth 609 | 0 0 0 edgecolor 610 | newpath 256.41 119.36 moveto 611 | 274.73 125.55 297.6 134.13 317 144 curveto 612 | 333 152.14 349.76 163.02 363.27 172.45 curveto 613 | stroke 614 | 0 0 0 edgecolor 615 | newpath 361.47 175.47 moveto 616 | 371.65 178.41 lineto 617 | 365.52 169.76 lineto 618 | closepath fill 619 | 1 setlinewidth 620 | solid 621 | 0 0 0 edgecolor 622 | newpath 361.47 175.47 moveto 623 | 371.65 178.41 lineto 624 | 365.52 169.76 lineto 625 | closepath stroke 626 | grestore 627 | % MySQL->Database 628 | gsave 629 | 1 setlinewidth 630 | 0 0 0 edgecolor 631 | newpath 228.83 51.94 moveto 632 | 229.72 60.26 229.96 70.49 229.56 79.86 curveto 633 | stroke 634 | 0 0 0 edgecolor 635 | newpath 226.07 79.71 moveto 636 | 228.84 89.94 lineto 637 | 233.05 80.21 lineto 638 | closepath fill 639 | 1 setlinewidth 640 | solid 641 | 0 0 0 edgecolor 642 | newpath 226.07 79.71 moveto 643 | 228.84 89.94 lineto 644 | 233.05 80.21 lineto 645 | closepath stroke 646 | grestore 647 | % Server1->Browser1 648 | gsave 649 | 1 setlinewidth 650 | 0 0 0 edgecolor 651 | newpath 68.12 211.94 moveto 652 | 68.67 220.26 68.49 230.49 67.7 239.86 curveto 653 | stroke 654 | 0 0 0 edgecolor 655 | newpath 64.2 239.61 moveto 656 | 66.55 249.94 lineto 657 | 71.16 240.4 lineto 658 | closepath fill 659 | 1 setlinewidth 660 | solid 661 | 0 0 0 edgecolor 662 | newpath 64.2 239.61 moveto 663 | 66.55 249.94 lineto 664 | 71.16 240.4 lineto 665 | closepath stroke 666 | grestore 667 | % Server1->Database 668 | gsave 669 | 1 setlinewidth 670 | 0 0 0 edgecolor 671 | newpath 82.89 178.65 moveto 672 | 97.76 168.27 118.84 154.33 138.47 144 curveto 673 | 152.4 136.67 168.22 129.77 182.37 124.06 curveto 674 | stroke 675 | 0 0 0 edgecolor 676 | newpath 183.85 127.25 moveto 677 | 191.86 120.31 lineto 678 | 181.28 120.73 lineto 679 | closepath fill 680 | 1 setlinewidth 681 | solid 682 | 0 0 0 edgecolor 683 | newpath 183.85 127.25 moveto 684 | 191.86 120.31 lineto 685 | 181.28 120.73 lineto 686 | closepath stroke 687 | 0 0 0 edgecolor 688 | 14 /Times-Roman set_font 689 | 139 146.8 moveto 36.53 (Create) alignedtext 690 | grestore 691 | % Server2->Browser2 692 | gsave 693 | 1 setlinewidth 694 | 0 0 0 edgecolor 695 | newpath 177.83 211.94 moveto 696 | 178.72 220.26 178.96 230.49 178.56 239.86 curveto 697 | stroke 698 | 0 0 0 edgecolor 699 | newpath 175.07 239.71 moveto 700 | 177.84 249.94 lineto 701 | 182.05 240.21 lineto 702 | closepath fill 703 | 1 setlinewidth 704 | solid 705 | 0 0 0 edgecolor 706 | newpath 175.07 239.71 moveto 707 | 177.84 249.94 lineto 708 | 182.05 240.21 lineto 709 | closepath stroke 710 | grestore 711 | % Server2->Database 712 | gsave 713 | 1 setlinewidth 714 | 0 0 0 edgecolor 715 | newpath 178.95 176.19 moveto 716 | 183.22 166.5 189.08 154.25 195.46 144 curveto 717 | 197.71 140.38 200.27 136.7 202.9 133.15 curveto 718 | stroke 719 | 0 0 0 edgecolor 720 | newpath 205.71 135.24 moveto 721 | 209.05 125.19 lineto 722 | 200.17 130.96 lineto 723 | closepath fill 724 | 1 setlinewidth 725 | solid 726 | 0 0 0 edgecolor 727 | newpath 205.71 135.24 moveto 728 | 209.05 125.19 lineto 729 | 200.17 130.96 lineto 730 | closepath stroke 731 | 0 0 0 edgecolor 732 | 14 /Times-Roman set_font 733 | 196 146.8 moveto 43.54 (Refresh) alignedtext 734 | grestore 735 | % Server3->Browser3 736 | gsave 737 | 1 setlinewidth 738 | 0 0 0 edgecolor 739 | newpath 289.83 211.94 moveto 740 | 290.72 220.26 290.96 230.49 290.56 239.86 curveto 741 | stroke 742 | 0 0 0 edgecolor 743 | newpath 287.07 239.71 moveto 744 | 289.84 249.94 lineto 745 | 294.05 240.21 lineto 746 | closepath fill 747 | 1 setlinewidth 748 | solid 749 | 0 0 0 edgecolor 750 | newpath 287.07 239.71 moveto 751 | 289.84 249.94 lineto 752 | 294.05 240.21 lineto 753 | closepath stroke 754 | grestore 755 | % Server3->Database 756 | gsave 757 | 1 setlinewidth 758 | 0 0 0 edgecolor 759 | newpath 279.32 176.11 moveto 760 | 276.05 166.17 271 153.68 264 144 curveto 761 | 260.49 139.14 256.17 134.52 251.66 130.33 curveto 762 | stroke 763 | 0 0 0 edgecolor 764 | newpath 253.86 127.6 moveto 765 | 244.01 123.7 lineto 766 | 249.28 132.89 lineto 767 | closepath fill 768 | 1 setlinewidth 769 | solid 770 | 0 0 0 edgecolor 771 | newpath 253.86 127.6 moveto 772 | 244.01 123.7 lineto 773 | 249.28 132.89 lineto 774 | closepath stroke 775 | 0 0 0 edgecolor 776 | 14 /Times-Roman set_font 777 | 273 146.8 moveto 40.43 (Update) alignedtext 778 | grestore 779 | % Server4->Browser4 780 | gsave 781 | 1 setlinewidth 782 | 0 0 0 edgecolor 783 | newpath 398 211.94 moveto 784 | 399.47 220.26 400.43 230.49 400.68 239.86 curveto 785 | stroke 786 | 0 0 0 edgecolor 787 | newpath 397.18 239.93 moveto 788 | 400.65 249.94 lineto 789 | 404.18 239.95 lineto 790 | closepath fill 791 | 1 setlinewidth 792 | solid 793 | 0 0 0 edgecolor 794 | newpath 397.18 239.93 moveto 795 | 400.65 249.94 lineto 796 | 404.18 239.95 lineto 797 | closepath stroke 798 | grestore 799 | % Server4->Database 800 | gsave 801 | 1 setlinewidth 802 | 0 0 0 edgecolor 803 | newpath 385.67 176.1 moveto 804 | 381.44 165.38 374.47 152.05 364 144 curveto 805 | 338.71 124.56 303.99 115.79 275.34 111.89 curveto 806 | stroke 807 | 0 0 0 edgecolor 808 | newpath 275.43 108.37 moveto 809 | 265.09 110.66 lineto 810 | 274.6 115.32 lineto 811 | closepath fill 812 | 1 setlinewidth 813 | solid 814 | 0 0 0 edgecolor 815 | newpath 275.43 108.37 moveto 816 | 265.09 110.66 lineto 817 | 274.6 115.32 lineto 818 | closepath stroke 819 | 0 0 0 edgecolor 820 | 14 /Times-Roman set_font 821 | 376 146.8 moveto 36.53 (Delete) alignedtext 822 | grestore 823 | endpage 824 | showpage 825 | grestore 826 | %%PageTrailer 827 | %%EndPage: 1 828 | %%Trailer 829 | %%Pages: 1 830 | %%BoundingBox: 36 36 500 436 831 | end 832 | restore 833 | %%EOF 834 | -------------------------------------------------------------------------------- /dot/struct.dot: -------------------------------------------------------------------------------- 1 | digraph G{ 2 | compound=true; 3 | 4 | subgraph cluster0{ 5 | RaspberryPi->Hardware; 6 | Hardware->RaspberryPi[label="Serial Commucation"]; 7 | } 8 | subgraph cluster1{ 9 | Server->RaspberryPi [label="GET/POST"]; 10 | RaspberryPi->Server; 11 | Browser->Server [label="CRUD"]; 12 | Server->Browser [label="Ajax"]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /dot/struct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/dot/struct.png -------------------------------------------------------------------------------- /dot/struct.ps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 2 | %%Creator: graphviz version 2.36.0 (20140111.2315) 3 | %%Title: G 4 | %%Pages: (atend) 5 | %%BoundingBox: (atend) 6 | %%EndComments 7 | save 8 | %%BeginProlog 9 | /DotDict 200 dict def 10 | DotDict begin 11 | 12 | /setupLatin1 { 13 | mark 14 | /EncodingVector 256 array def 15 | EncodingVector 0 16 | 17 | ISOLatin1Encoding 0 255 getinterval putinterval 18 | EncodingVector 45 /hyphen put 19 | 20 | % Set up ISO Latin 1 character encoding 21 | /starnetISO { 22 | dup dup findfont dup length dict begin 23 | { 1 index /FID ne { def }{ pop pop } ifelse 24 | } forall 25 | /Encoding EncodingVector def 26 | currentdict end definefont 27 | } def 28 | /Times-Roman starnetISO def 29 | /Times-Italic starnetISO def 30 | /Times-Bold starnetISO def 31 | /Times-BoldItalic starnetISO def 32 | /Helvetica starnetISO def 33 | /Helvetica-Oblique starnetISO def 34 | /Helvetica-Bold starnetISO def 35 | /Helvetica-BoldOblique starnetISO def 36 | /Courier starnetISO def 37 | /Courier-Oblique starnetISO def 38 | /Courier-Bold starnetISO def 39 | /Courier-BoldOblique starnetISO def 40 | cleartomark 41 | } bind def 42 | 43 | %%BeginResource: procset graphviz 0 0 44 | /coord-font-family /Times-Roman def 45 | /default-font-family /Times-Roman def 46 | /coordfont coord-font-family findfont 8 scalefont def 47 | 48 | /InvScaleFactor 1.0 def 49 | /set_scale { 50 | dup 1 exch div /InvScaleFactor exch def 51 | scale 52 | } bind def 53 | 54 | % styles 55 | /solid { [] 0 setdash } bind def 56 | /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def 57 | /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def 58 | /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def 59 | /bold { 2 setlinewidth } bind def 60 | /filled { } bind def 61 | /unfilled { } bind def 62 | /rounded { } bind def 63 | /diagonals { } bind def 64 | /tapered { } bind def 65 | 66 | % hooks for setting color 67 | /nodecolor { sethsbcolor } bind def 68 | /edgecolor { sethsbcolor } bind def 69 | /graphcolor { sethsbcolor } bind def 70 | /nopcolor {pop pop pop} bind def 71 | 72 | /beginpage { % i j npages 73 | /npages exch def 74 | /j exch def 75 | /i exch def 76 | /str 10 string def 77 | npages 1 gt { 78 | gsave 79 | coordfont setfont 80 | 0 0 moveto 81 | (\() show i str cvs show (,) show j str cvs show (\)) show 82 | grestore 83 | } if 84 | } bind def 85 | 86 | /set_font { 87 | findfont exch 88 | scalefont setfont 89 | } def 90 | 91 | % draw text fitted to its expected width 92 | /alignedtext { % width text 93 | /text exch def 94 | /width exch def 95 | gsave 96 | width 0 gt { 97 | [] 0 setdash 98 | text stringwidth pop width exch sub text length div 0 text ashow 99 | } if 100 | grestore 101 | } def 102 | 103 | /boxprim { % xcorner ycorner xsize ysize 104 | 4 2 roll 105 | moveto 106 | 2 copy 107 | exch 0 rlineto 108 | 0 exch rlineto 109 | pop neg 0 rlineto 110 | closepath 111 | } bind def 112 | 113 | /ellipse_path { 114 | /ry exch def 115 | /rx exch def 116 | /y exch def 117 | /x exch def 118 | matrix currentmatrix 119 | newpath 120 | x y translate 121 | rx ry scale 122 | 0 0 1 0 360 arc 123 | setmatrix 124 | } bind def 125 | 126 | /endpage { showpage } bind def 127 | /showpage { } def 128 | 129 | /layercolorseq 130 | [ % layer color sequence - darkest to lightest 131 | [0 0 0] 132 | [.2 .8 .8] 133 | [.4 .8 .8] 134 | [.6 .8 .8] 135 | [.8 .8 .8] 136 | ] 137 | def 138 | 139 | /layerlen layercolorseq length def 140 | 141 | /setlayer {/maxlayer exch def /curlayer exch def 142 | layercolorseq curlayer 1 sub layerlen mod get 143 | aload pop sethsbcolor 144 | /nodecolor {nopcolor} def 145 | /edgecolor {nopcolor} def 146 | /graphcolor {nopcolor} def 147 | } bind def 148 | 149 | /onlayer { curlayer ne {invis} if } def 150 | 151 | /onlayers { 152 | /myupper exch def 153 | /mylower exch def 154 | curlayer mylower lt 155 | curlayer myupper gt 156 | or 157 | {invis} if 158 | } def 159 | 160 | /curlayer 0 def 161 | 162 | %%EndResource 163 | %%EndProlog 164 | %%BeginSetup 165 | 14 default-font-family set_font 166 | 1 setmiterlimit 167 | % /arrowlength 10 def 168 | % /arrowwidth 5 def 169 | 170 | % make sure pdfmark is harmless for PS-interpreters other than Distiller 171 | /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse 172 | % make '<<' and '>>' safe on PS Level 1 devices 173 | /languagelevel where {pop languagelevel}{1} ifelse 174 | 2 lt { 175 | userdict (<<) cvn ([) cvn load put 176 | userdict (>>) cvn ([) cvn load put 177 | } if 178 | 179 | %%EndSetup 180 | setupLatin1 181 | %%Page: 1 1 182 | %%PageBoundingBox: 36 36 347 284 183 | %%PageOrientation: Portrait 184 | 0 0 1 beginpage 185 | gsave 186 | 36 36 311 248 boxprim clip newpath 187 | 1 1 set_scale 0 rotate 40 40 translate 188 | % cluster0 189 | gsave 190 | 1 setlinewidth 191 | 0 0 0 graphcolor 192 | newpath 8 94 moveto 193 | 8 232 lineto 194 | 164 232 lineto 195 | 164 94 lineto 196 | closepath stroke 197 | grestore 198 | % cluster1 199 | gsave 200 | 1 setlinewidth 201 | 0 0 0 graphcolor 202 | newpath 172 8 moveto 203 | 172 146 lineto 204 | 295 146 lineto 205 | 295 8 lineto 206 | closepath stroke 207 | grestore 208 | % RaspberryPi 209 | gsave 210 | 1 setlinewidth 211 | 0 0 0 nodecolor 212 | 86 206 53.24 18 ellipse_path stroke 213 | 0 0 0 nodecolor 214 | 14 /Times-Roman set_font 215 | 51.39 201.8 moveto 69.21 (RaspberryPi) alignedtext 216 | grestore 217 | % Hardware 218 | gsave 219 | 1 setlinewidth 220 | 0 0 0 nodecolor 221 | 61 120 44.45 18 ellipse_path stroke 222 | 0 0 0 nodecolor 223 | 14 /Times-Roman set_font 224 | 33.41 115.8 moveto 55.19 (Hardware) alignedtext 225 | grestore 226 | % RaspberryPi->Hardware 227 | gsave 228 | 1 setlinewidth 229 | 0 0 0 edgecolor 230 | newpath 48.84 192.99 moveto 231 | 38.31 187.68 28.07 180.24 22 170 curveto 232 | 16.24 160.28 21.58 150.38 29.96 142.05 curveto 233 | stroke 234 | 0 0 0 edgecolor 235 | newpath 32.29 144.66 moveto 236 | 37.53 135.45 lineto 237 | 27.69 139.38 lineto 238 | closepath fill 239 | 1 setlinewidth 240 | solid 241 | 0 0 0 edgecolor 242 | newpath 32.29 144.66 moveto 243 | 37.53 135.45 lineto 244 | 27.69 139.38 lineto 245 | closepath stroke 246 | grestore 247 | % Server 248 | gsave 249 | 1 setlinewidth 250 | 0 0 0 nodecolor 251 | 213 120 33.28 18 ellipse_path stroke 252 | 0 0 0 nodecolor 253 | 14 /Times-Roman set_font 254 | 194.73 115.8 moveto 36.54 (Server) alignedtext 255 | grestore 256 | % RaspberryPi->Server 257 | gsave 258 | 1 setlinewidth 259 | 0 0 0 edgecolor 260 | newpath 119.72 192.01 moveto 261 | 133.09 186.16 148.28 178.63 161 170 curveto 262 | 172.07 162.49 183.03 152.62 192.02 143.7 curveto 263 | stroke 264 | 0 0 0 edgecolor 265 | newpath 194.57 146.1 moveto 266 | 199.07 136.51 lineto 267 | 189.57 141.2 lineto 268 | closepath fill 269 | 1 setlinewidth 270 | solid 271 | 0 0 0 edgecolor 272 | newpath 194.57 146.1 moveto 273 | 199.07 136.51 lineto 274 | 189.57 141.2 lineto 275 | closepath stroke 276 | grestore 277 | % Hardware->RaspberryPi 278 | gsave 279 | 1 setlinewidth 280 | 0 0 0 edgecolor 281 | newpath 49.7 137.71 moveto 282 | 44.64 147.37 40.77 159.62 45.52 170 curveto 283 | 47.69 174.74 50.85 179.08 54.46 182.97 curveto 284 | stroke 285 | 0 0 0 edgecolor 286 | newpath 52.14 185.59 moveto 287 | 61.82 189.88 lineto 288 | 56.93 180.49 lineto 289 | closepath fill 290 | 1 setlinewidth 291 | solid 292 | 0 0 0 edgecolor 293 | newpath 52.14 185.59 moveto 294 | 61.82 189.88 lineto 295 | 56.93 180.49 lineto 296 | closepath stroke 297 | 0 0 0 edgecolor 298 | 14 /Times-Roman set_font 299 | 46 158.8 moveto 115.48 (Serial Commucation) alignedtext 300 | grestore 301 | % Server->RaspberryPi 302 | gsave 303 | 1 setlinewidth 304 | 0 0 0 edgecolor 305 | newpath 207.96 138.06 moveto 306 | 204.06 148.58 197.66 161.61 188 170 curveto 307 | 175.12 181.18 158.49 188.83 142.41 194.06 curveto 308 | stroke 309 | 0 0 0 edgecolor 310 | newpath 141.1 190.8 moveto 311 | 132.51 197 lineto 312 | 143.09 197.51 lineto 313 | closepath fill 314 | 1 setlinewidth 315 | solid 316 | 0 0 0 edgecolor 317 | newpath 141.1 190.8 moveto 318 | 132.51 197 lineto 319 | 143.09 197.51 lineto 320 | closepath stroke 321 | 0 0 0 edgecolor 322 | 14 /Times-Roman set_font 323 | 200 158.8 moveto 65.34 (GET/POST) alignedtext 324 | grestore 325 | % Browser 326 | gsave 327 | 1 setlinewidth 328 | 0 0 0 nodecolor 329 | 233 34 40.11 18 ellipse_path stroke 330 | 0 0 0 nodecolor 331 | 14 /Times-Roman set_font 332 | 209.28 29.8 moveto 47.43 (Browser) alignedtext 333 | grestore 334 | % Server->Browser 335 | gsave 336 | 1 setlinewidth 337 | 0 0 0 edgecolor 338 | newpath 200.65 102.92 moveto 339 | 194.8 93.27 190.03 80.8 194.79 70 curveto 340 | 196.95 65.08 200.18 60.55 203.87 56.5 curveto 341 | stroke 342 | 0 0 0 edgecolor 343 | newpath 206.57 58.77 moveto 344 | 211.36 49.32 lineto 345 | 201.72 53.72 lineto 346 | closepath fill 347 | 1 setlinewidth 348 | solid 349 | 0 0 0 edgecolor 350 | newpath 206.57 58.77 moveto 351 | 211.36 49.32 lineto 352 | 201.72 53.72 lineto 353 | closepath stroke 354 | 0 0 0 edgecolor 355 | 14 /Times-Roman set_font 356 | 195 72.8 moveto 27.21 (Ajax) alignedtext 357 | grestore 358 | % Browser->Server 359 | gsave 360 | 1 setlinewidth 361 | 0 0 0 edgecolor 362 | newpath 231.43 52.41 moveto 363 | 230.35 61.85 228.62 73.67 226 84 curveto 364 | 225.28 86.83 224.41 89.74 223.47 92.63 curveto 365 | stroke 366 | 0 0 0 edgecolor 367 | newpath 220.14 91.55 moveto 368 | 220.09 102.14 lineto 369 | 226.74 93.89 lineto 370 | closepath fill 371 | 1 setlinewidth 372 | solid 373 | 0 0 0 edgecolor 374 | newpath 220.14 91.55 moveto 375 | 220.09 102.14 lineto 376 | 226.74 93.89 lineto 377 | closepath stroke 378 | 0 0 0 edgecolor 379 | 14 /Times-Roman set_font 380 | 228 72.8 moveto 38.9 (CRUD) alignedtext 381 | grestore 382 | endpage 383 | showpage 384 | grestore 385 | %%PageTrailer 386 | %%EndPage: 1 387 | %%Trailer 388 | %%Pages: 1 389 | %%BoundingBox: 36 36 347 284 390 | end 391 | restore 392 | %%EOF 393 | -------------------------------------------------------------------------------- /highlight.css: -------------------------------------------------------------------------------- 1 | code > span.kw { color: #268BD2; font-weight: bold; } 2 | code > span.dt { color: #268BD2; } 3 | code > span.dv { color: #D33682; } 4 | code > span.bn { color: #D33682; } 5 | code > span.fl { color: #D33682; } 6 | code > span.ch { color: #4070a0; } 7 | code > span.st { color: #2AA198; } 8 | code > span.co { color: #93A1A1; font-style: italic; } 9 | code > span.ot { color: #A57800; } 10 | code > span.al { color: #CB4B16; font-weight: bold; } 11 | code > span.fu { color: #268BD2; } 12 | code > span.er { color: #D30102; font-weight: bold; } 13 | -------------------------------------------------------------------------------- /iot.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/iot.docx -------------------------------------------------------------------------------- /iot.md: -------------------------------------------------------------------------------- 1 | #物联网毕业设计# 2 | 3 | ##摘要 4 | 随着经济社会的日趋发展及科学技术水平的不断提高,人们对于便利生活的要求越来越高。近年来,随着物联网领域稳步、缓慢地发展,物联网建设的网络环境已经逐渐成熟。由于物联网系统是一个综合性的,包含了硬件、软件、网络等多学科交叉的系统。对于物联网的研究和开发,已经成为一个个热门的话题。 5 | 6 | 本论文中介绍了以REST服务为核心、单片机、ARM开发板而辅助的物联网系统的结构组成及工作原理,提供了相应的软件代码及硬件结构。首先研究了不同服务框架的区别,包括不同语言间开发的优势及劣势,之后重点以REST服务为核心构建系统。本设计中,单片机与ARM开发板通过串口通信的方式实现通信,相互传输所需要的数据,ARM开发板将资源传于互联网上对应的接口,接口可以在互联网上被访问。将ARM开发板获取过来的数据存储于MySQL数据,再以REST服务的方式共享数据,互联网上的其他设备便可以通过网络来访问这些设备。系统分离了软件、硬件的耦合,不仅可以方便系统开发,也可以方便由不同的硬件替换相应的组成,使之更容易理解,同时可以实现更多设备的连接,以实现真正的物联。 7 | 8 | 本论文讨论的代码在GNU/Linux系统上开发,可在不同平台上开发及调度。 9 | 10 | **关键词** : ``物联网``、``REST服务``、``RESTful`` 11 | 12 | ##Abstract 13 | With the increasing development and scientific and technological level of the economy and society continues to improve, people's lives more convenient for the required high . In recent years, the field of Internet Of Things steady , slow development , networking and building the network environment has gradually matured. Because of Internet Of Things is a comprehensive system , including hardware , software, networks, and other multi-disciplinary systems. Things for research and development, has become one hot topic . 14 | 15 | This paper described the Internet of Things system's structure and principle in REST services as the core , microcontroller and ARM development board as assisted, and provided the appropriate software code and hardware architecture . First study the differences between the services framework, including language development among different strengths and weaknesses, then focus to build REST service system as the core . In this design, microcontroller communicate with development board by serial communication, mutual transmission of the data needed , ARM development board resources on the Internet pass the corresponding interface , the interface can be accessed on the Internet. The ARM development board to get over the data stored in MySQL, then the REST service to share data , other devices on the Internet will be able to access these devices through the network. Separation of the coupling system software, hardware , and can not only facilitate the development of the system , can also be easily replaced by a composition corresponding to different hardware , to make it easier to understand , and can connect more devices to achieve real objects associated . 16 | 17 | Code discussed in this paper on the GNU / Linux system development, and scheduling can be developed on different platforms . 18 | 19 | 20 | ##绪论## 21 | 22 | ###选题背景### 23 | 24 | 随着科技的发展,计算机电子技术迅猛发展,已经成为生活中不可缺少的部分。目前人们绝大多数都是采用PC进行网络数据传送,但由于成本高,限制了应用的范围。而嵌入式系统却越来越受到人们的青睐。它采用嵌入式的微处理器,支持 25 | TCP/IP协议,它已成为网络发展新阶段的标志。 26 | 27 | 物联网是新一代信息技术的重要组成部分。其英文名称是The Internet of things。顾名思义,物联网的意思就是物物相连的互联网。这有两层意思:第一,物联网是建立在互联网之上的,是互联网的拓展和延伸;第二,其用户端扩 28 | 展和延伸到了物品与物品之间,进行信息通信和交换。物联网有如下特征: 29 | 30 | 首先,广泛应用了各种感知技术。在物联网中部署了大量的多种传感器,每个传感器都能从外界采集信息,不同类的传感器捕获的信息不同。而且获得的数据具有实时性,按照一定的规律来采集数据,不断更新数据。 31 | 32 | 其次,它是建立在互联网上的网络。物联网技术的核心和基础仍是互联网,通过各种无线和有线网络与互联网结合起来,将物体的信息准确实时地传递出去,数据传输过程中必须适应各种网络协议。 33 | 34 | 还有,物联网本身也具有一种智能处理的能力,能够智能控制物体。物联网从传感器中获得数据,然后进行分析,处理处有意义的数据,来适应不同用户的需求。 35 | 36 | ###设计内容### 37 | 设计主要是关于基于RESTful服务的网络服务构建,可采用有线网络、无线网络、手机GSM网络等与Internet相关,通过手机、电脑 、移动设备等登录到网页可实现控制家电的上的,并可实时查看诸如温度等一些信息的基本内容。 38 | 39 | 硬件设计时,采用Arduino单片机系统,作为一个基于Atmega328芯片的最小系统,Arduino可以系统代码。Arduino主要用于展示LED灯的控制,通过与RaspberryPI开发板相连来获取实时状态。Raspberry PI作为一个ARM开发板,由于其运行的是Linux系统,在软件方面有着相对于其他开发板较好的支持,在这里是作为数据传输设备以用来进行模块分离。 40 | 41 | 软件设计时,由于一个物联网系统其核心是以网络为基础的,需要优先考虑网络 42 | 方面的优化,学需要考虑数据库等的问题。 43 | 44 | 用户界面设计时,随着近来来平板、手机等移动设备的流行,在设计时不能再以 45 | 桌面程序为核心,需要考虑不用设备之间的兼容性等问题,这里便以网页为核心 46 | 作为显示。而,随着云计算技术的流行,未来的物联网系统必然也会基于云计算 47 | 技术构建。作为一个可视化的网页来说,实时的状态显示等是较为重要,同时我 48 | 们需要考虑的是用户体验。 49 | 50 | ###设计的目的及其意义### 51 | 设计以简化物联网系统为主,简化一个可扩展的最小的物联网系统,以简化系统 52 | 的逻辑为起点,为广大的用户提供一个良好的了解物联网系统方面知识的框架。 53 | 54 | 55 | ###国内外发展现状和趋势### 56 | 物联网是建立在互联网技术之上的。目前,我国物联网发展与全球同处于起步阶 57 | 段,初步具备了一定的技术、产业和应用基础,呈现出良好的发展态势。把单片 58 | 机应用系统和Internet连接也已经是一种趋势。 59 | 60 | 目前无线通信网络已经覆盖各地,是实现“物联网”必不可少的设施,可以将安置 61 | 在每个物品上的电子介质产生的数字信号通过无线网络传输出去。“云计算”技术 62 | 的运用,使数以亿计的各类物品的实时动态管理变得可能。 63 | 64 | 物联网技术的推广已经取得一定的成效。在多方面已经开始应用,如远程抄表, 65 | 电力行业,视频监控等等。以及在物流领域和医疗领域也都日趋成熟,如物品存 66 | 储及运输监测,远程医疗,个人的健康监护等。除此之外在环境监控,楼宇节能, 67 | 食品等方面也开展了广泛应用。 68 | 69 | 尽管在这些领域已经取得一些进展,但应认识到,物联网发展技术还存在一系列 70 | 制约和瓶颈。有几个方面可以表现出来:核心技术与国外差距较大,集成服务能 71 | 力不够,缺乏骨干企业,应用水平不高,信息安全存在隐患。我们国家在PC架构 72 | 领域还没有主动权,软件产品很少。目前,计算环境正在向以网络为中心发展, 73 | 有很多产品不必也windows兼容,因此,研究单片机系统接入网络,前途宽广。 74 | 75 | #系统总体设计方案# 76 | 77 | 物联网的核心也就是网络服务,而网络服务在某种意义上来说,就是需要打造一 78 | 个多平台的通信协议,在使机器、家电、设备等连上计算机网络。基本的物联 79 | 网系统,不仅能控制设备,还可以在远程查看状态。而复杂的物联网系统可以让 80 | 互联网上的设备之间实现互联与通信,也就是物联网的最终目标所在——使物体与 81 | 物体之间的交互成为可能,不需要人为去干预。 82 | 83 | 系统采用的结构是: 84 | Arduino+Raspberry Pi+Laravel+JSON+RESTful+Ajax+Python+HighCharts,其框架图如下所示 85 | 86 | 87 | [struct]: dot/struct.png "系统框架图" 88 | ![系统框架图][struct] 89 | 90 | Arduino与Raspberry Pi通过串口通信的方式实现通信,相互传输所需要的数据, 91 | Raspberry Pi将资源传于互联网上对应的接口,接口可以在互联网上被访问。 92 | Laravel框架构架于服务器之上,将Raspbery Pi获取过来的数据存储于MySQL数 93 | 据,再以REST服务的方式共享数据,互联网上的其他设备便可以通过网络来访问 94 | 这些设备。Ajax用于将后台的数据以不需要刷新的方式传递到网站前台,通过 95 | HighCharts框架显示给终端用户。 96 | 97 | ##硬件方案选择## 98 | 99 | ###单片机选择### 100 | 101 | ####Arduino#### 102 | 103 | Arduino,是一个开放源代码的单芯片微电脑,它使用了Atmel AVR单片机,采用 104 | 了基于开放源代码的软硬件平台,构建于开放源代码 simple I/O 接口板,并且 105 | 具有使用类似Java,C 语言的Processing/Wiring开发环境。 106 | 107 | Arduino开发板封装了常用的库到开发环境中,可以让用户在开发产品时,将主 108 | 要注意力放置于所需要实现的功能上,而不是开发的过程中。在为Arduino写串 109 | 口程序时,我们只需要用Serial.begin(9600)以9600的速率初始化串口,而在往 110 | 串口发送数据时,可以用Serial.write('1')的方式向串口发送字串'1'。 111 | 112 | ####51#### 113 | 114 | 单片机[^mcu],又称微控制器,是把中央处理器、存储器、定时/计数器 115 | (Timer/Counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型 116 | 计算机。与应用在个人计算机中的通用型微处理器相比,它更强调自供应(不用 117 | 外接硬件)和节约成本。它的最大优点是体积小,可放在仪表内部,但存储量小, 118 | 输入输出接口简单,功能较低。 119 | 120 | 51单片机相较于Arduino开发板,不仅代码复杂,由于系统比较古老而不方便于 121 | 快速开发。 122 | 123 | [^mcu]:全称单片微型计算机(英语:Single-Chip Microcomputer) 124 | 125 | ##软件方案选择## 126 | 127 | ###数据通讯方式选择### 128 | 129 | ####REST#### 130 | 131 | REST[^rest] 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的 132 | 应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。 133 | 随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转 134 | 移。 135 | 136 | [^rest]:Representational State Transfer 137 | 138 | ####SOAP#### 139 | 140 | 简单对象访问协议是交换数据的一种协议规范,使用在计算机网络Web服务中, 141 | 交换带结构信息。SOAP为了简化网页服务器从XML数据库中提取数据时,节省去 142 | 格式化页面时间,以及不同应用程序之间按照HTTP通信协议,遵从XML格式执行 143 | 资料互换,使其抽象于语言实现、平台和硬件。 144 | 145 | ###数据通信格式选择### 146 | 147 | ####JSON#### 148 | 149 | JSON[^json]是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机 150 | 器解析和生成。 它基于JavaScript Programming Language, Standard 151 | ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语 152 | 言的文本格式,但是也使用了类似于C语言家族的习惯[^cfamily]。 这些特性使 153 | JSON成为理想的数据交换语言。 154 | 155 | JSON相对于XML来说可以减少文件的大小,同时我们可以用于网站前端的数据通讯。 156 | 157 | [^json]: JavaScript Object Notation 158 | [^cfamily]: 包括C, C++, C#, Java, JavaScript, Perl, Python等 159 | 160 | 对于基于浏览器的客户端使用的web服务更倾向于使用JSON作为表述格式。 161 | 162 | ####XML#### 163 | 164 | 可扩展标记语言[^xml],是一种标记语言。标记指计算机所能理解的信息符号, 165 | 通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记, 166 | 既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士 167 | 自由决定的标记语言,这就是语言的可扩展性。XML是从标准通用标记语言 168 | (SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言 169 | (XSL)、XBRL和XPath等。 170 | 171 | XML具有良好的可读性,有着较好的库支持,从Java语言到其他语言,如Linux系 172 | 统上libxml等对XML的支持比较好。 173 | 174 | [^xml]: eXtensible Markup Language,简称: XML 175 | 176 | ##网络服务方案选择## 177 | 178 | ###语言选择### 179 | 180 | **PHP Laravel** 181 | 182 | PHP [^php] 是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入 183 | HTML中使用。PHP的语法借鉴吸收了C语言、Java和Perl等流行计算机语言的特点, 184 | 易于一般程序员学习。PHP的主要目标是允许网络开发人员快速编写动态页面, 185 | 但PHP也被用于其他很多领域。 186 | 187 | [^php]:PHP:Hypertext Preprocessor,即超文本预处理器 188 | 189 | **Laravel** 190 | 191 | Laravel是一套简洁、优雅的PHP Web开发框架。它可以让你从面条一样杂乱的代 192 | 码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、 193 | 富于表达力。 194 | 195 | **Java Spring** 196 | 197 | **Java** 198 | 199 | Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun 200 | Microsystems公司于1995年5月推出的Java程序设计语言。Java 技术具有卓越的 201 | 通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控 202 | 制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社 203 | 群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前 204 | 景。 205 | 206 | **Spring** 207 | 208 | Spring是一个开源框架,是为了解决企业应用程序开发复杂性。Spring框架的主 209 | 要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 210 | J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只 211 | 可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单 212 | 性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 213 | 214 | 由于相较于Java在web方面没有PHP来得快速、简单、有效,同时Laravel框架在 215 | 某些方面如数据迁移、代码生成比Spring快,同时不需要依赖于开发环境,这里 216 | 以Laravel作为框架,可以利用artisan工具等的强大驱动开发。 217 | 218 | ##其它## 219 | 220 | ###数据通讯设备### 221 | 222 | **Raspeberry PI** 223 | 224 | Raspberry Pi是一款针对电脑业余爱好者、教师、小学生以及小型企业等用户的 225 | 迷你电脑,预装Linux系统,体积仅信用卡大小,搭载ARM架构处理器,运算性能 226 | 和智能手机相仿。在接口方面,Raspberry Pi提供了可供键鼠使用的USB接口,此外 227 | 还有千兆以太网接口、SD卡扩展接口以及1个HDMI高清视频输出接口,可与显示器或者TV相连。 228 | 229 | Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的 230 | 多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软 231 | 件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为 232 | 核心的设计思想,是一个性能稳定的多用户网络操作系统。 233 | 234 | Raspberry Pi相比于一般的ARM开发板来说,由于其本身搭载着Linux操作系统,可以用 235 | 诸如Python、Ruby或Bash来执行脚本,而不是通过编译程序来运行,具有更高的开发效率。 236 | 237 | 238 | ##辅助语言选择## 239 | 240 | **Python** 241 | 242 | Python, 是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于 243 | 1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有 244 | 丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作 245 | 的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用 246 | python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别 247 | 要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,速度要求非 248 | 常高,就可以用C++重写。 249 | 250 | **Ruby** 251 | 252 | Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言, 253 | 在20世纪90年代由日本人松本行弘开发,遵守GPL协议和Ruby License。 254 | 255 | Python相对于Ruby有着更好的跨平台能力,同时有理好的可读性,加之Ruby语言 256 | 没有对串口通讯及Windows系统更好的支持。 257 | 258 | ##串口通信模块## 259 | 260 | **PySerial** 261 | 262 | PySerial封装了串口通讯模块,支持Linux、Windows、BSD(可能支持所有支持POSIX的操 263 | 作系统),支持Jython(Java)和IconPython(.NET and Mono). 264 | 265 | 在使用PySerial之后,我们只需要 266 | 267 | ``` python 268 | ser=serial.Serial("/dev/ttyACM0",9600) 269 | ser.write("1") 270 | ``` 271 | 就可以向串口发送一个字符1。 272 | 273 | ##网页通信## 274 | 275 | **Ajax** 276 | AJAX [^ajax] 是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页 277 | 应用的网页开发技术。 278 | 279 | 系统主要用Ajax来实现实时温度显示,通过直接访问JSON数据的情况下,可以在 280 | 不需要刷新页面的情况下直接读取数据。 281 | 282 | 283 | [^ajax]: Asynchronous JavaScript and XML(异步JavaScript和XML) 284 | 285 | ##数据可视化框架选择## 286 | 287 | **HighCharts** 288 | 289 | Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在 290 | web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习、个人 291 | 网站和非商业用途使用。HighCharts支持的图表类型有曲线图、区域图、柱状图、 292 | 饼状图、散状点图和综合图表。 293 | 294 | 295 | #本地系统设计# 296 | ##硬件设计## 297 | ###Raspberry Pi### 298 | 299 | Raspberry Pi开发板在这里主要工作有: 300 | 301 | - 与Arduino开发板,通过USB线连接。 302 | - 可以直接运行Debian GNU/Linux系统,通过网线上网,并从服务器中读取数据, 303 | - 通过Python语言接收、发送串口数据。 304 | 305 | ##软件设计## 306 | 在本地我们需要解决的问题可以如下描述,Arduino开发板从串口一直读取数据, 307 | Raspberry Pi从URL中验证数据、解析数据,再将数据发送到串口,我们可以用下面的伪代码来描述: 308 | 309 | ``` ada 310 | arduino: 311 | begin 312 | repeat 313 | wait(serial.open) 314 | data:=receive_data() 315 | led_status:=parse(data) 316 | if led_status 317 | oped(led.id) 318 | util false 319 | end 320 | raspberrypi: 321 | begin 322 | repeat 323 | json:=get_data(url) 324 | if validate(json).success() 325 | data:=parse(json) 326 | serial.write(data) 327 | util false 328 | end 329 | ``` 330 | ##Arduino## 331 | 332 | [arduinouno]: dot/ArduinoUnoSmd.png "Arduino开发板" 333 | ![Arduino开发板][arduinouno] 334 | 335 | 336 | Arduino UNO用的处微控制器是Atmega328,它与Arduino芯片的对应关系如下所示 337 | 338 | [atmega328]: dot/atmega328w.png "Arduino管脚Atmega328对应图" 339 | ![Arduino管脚Atmega328对应图][atmega328] 340 | 341 | 其主要参数如下所示: 342 | 343 | 高性能,低功耗的AVR®8位微控制器•先进的RISC结构 344 | 345 | - 131条指令 346 | - 绝大多数为单时钟周期执行 347 | - 32个通用工作寄存器 348 | - 全静态工作 349 | - 高达20 MIPS的吞吐量,在20 MHz 350 | - 片上2周期乘法器高耐用性非易失性内存段 351 | - 8K字节的系统内可编程Flash存储器(ATMEGA88PA中) 352 | - 512字节的EEPROM(ATMEGA88PA) 353 | - 1K字节的片内SRAM(ATMEGA88PA) 354 | - 写/擦除次数:10,000次,000 EEPROM 355 | - 数据保存:20年在85°C/100年在25°C(1) 356 | - 可选的引导具有独立锁定位代码段在系统编程的片上引导程序真正的同时读 357 | - 写操作 358 | - 编程软件安全锁外设特点 359 | - 两个8位定时器/计数器具有独立预分频器和比较模式 360 | - 1个16位定时器/计数器具有独立预分频器,比较模式,并捕获模式 361 | - 具有独立振荡器的实时计数器 362 | - 6个PWM通道 363 | - 8通道10位ADC在TQFP和QFN / MLF封装温度测量 364 | - 6通道10位ADC引脚PDIP封装温度测量 365 | - 可编程的串行USART 366 | - 主/从机模式的SPI串行接口 367 | - 面向字节的两线串行接口(飞利浦公司的I2C兼容) 368 | - 独立的片内振荡器的可编程看门狗定时器 369 | - 片上模拟比较器 370 | - 中断和唤醒引脚电平变化单片机的特殊功能 371 | - 上电复位以及可编程的掉电检测 372 | - 内部校准振荡器 373 | - 外部和内部中断源 374 | - 6种睡眠模式:空闲模式,ADC噪声抑制,省电,掉电,待机,扩展Standby 375 | 376 | Arduino部分硬件程序如下所示,主要负责从串口中读入数据,并用led灯显示。 377 | 程序流程图如下所示 378 | 379 | [image]: dot/arduino.png "Arduino程序流程图" 380 | ![Arduino程序流程图][image] 381 | 382 | 系统主要的功能在于接收和传递数据。 383 | 384 | 代码如下所示 385 | 386 | 387 | void setup() { 388 | Serial.begin(9600); 389 | pinMode(13,OUTPUT); 390 | pinMode(12,OUTPUT); 391 | } 392 | 393 | int serialData; 394 | void loop() { 395 | String inString = ""; 396 | while (Serial.available()> 0) 397 | { 398 | int inChar = Serial.read(); 399 | if (isDigit(inChar)) { 400 | inString += (char)inChar; 401 | } 402 | serialData=inString.toInt(); 403 | Serial.print(serialData); 404 | } 405 | if(serialData==1){ 406 | digitalWrite(12,LOW); 407 | digitalWrite(13,HIGH); 408 | }else{ 409 | digitalWrite(13,LOW); 410 | digitalWrite(12,HIGH); 411 | } 412 | 413 | 414 | 415 | ##Raspberry Pi## 416 | Raspberrypi如下所示的开发板 417 | 418 | [raspi]: dot/raspberrypi.png "Raspberry Pi开发板" 419 | ![Raspberry Pi开发板][raspi] 420 | 421 | ``` 422 | begin 423 | repeat 424 | json:=get_data(url) 425 | if validate(json).success 426 | data:=parse(json) 427 | if data:==1 428 | serial_send("1") 429 | else 430 | serial_send("0") 431 | else 432 | output "error" 433 | util false 434 | end 435 | ``` 436 | 437 | ####Raspberry Pi程序#### 438 | 439 | 其程序流程图如下所示: 440 | 441 | [python2]: dot/python.png "Python 程序流程图" 442 | ![Python程序流程图][python2] 443 | 444 | ###获取数据### 445 | 446 | Raspberry Pi端的主要功能便是将数据从 447 | [http://www.xianuniversity.com/athome/1][xianuniversity] [^domain] 下 448 | 载下来并解析数据,再将数据用串口通讯的方式传递给Arduino。 449 | 450 | 在Debian系统中,自带了python语言,python有良好的动态特性,同时有强大的自建库功能。 451 | 在python语言中可以用自带的urllib2库打开并下载网页的内容,将上述网址中 452 | 的JSON数据下载到本地。 453 | 454 | 数据采用的是JSON格式,具有良好的可读性,同时方便于解析,相比于XML格式 455 | 又可以减少文件大小, 456 | 457 | ``` javascript 458 | [{ 459 | "id": 1, 460 | "temperature": 10, 461 | "sensors1": 22, 462 | "sensors2": 11, 463 | "led1": 0 464 | }] 465 | ``` 466 | 467 | [xianuniversity]:http://www.xianuniversity.com/athome/1 468 | 469 | JSON的 470 | 将上述中的数据取出来后,通过python中的json库,将json数据转换为数组,将 471 | 取出数据中的第一个结果中的id的值。 472 | 473 | ###串口通讯### 474 | 由于python中没有用于串口通讯的库,需要寻找并安装这样一个库,这里就用到 475 | 了pip这样的包管理工具——用于管理python的库。 476 | 477 | ####安装pyserial#### 478 | 479 | pip常用命令有install、uninstall以及search,install顾名思义就是安装,安 480 | 装pip库如下所示[^windows],如后代码如下所示,$[^dollar]开头: 481 | 482 | 483 | ``` bash 484 | $pip install pyserial 485 | ``` 486 | 487 | [^dollar]:指在*nix系统的终端中执行的命令。 488 | [^windows]:在Windows系统中需要先安装pip,再安装pyserial。 489 | 490 | ###python串口通讯### 491 | 在Linux内核的系统[^windows_com]中虚拟串口用的节点是ttyACM,位于/dev目录下。 492 | 493 | ``` python 494 | serial.Serial("/dev/ttyACM0",9600) 495 | ``` 496 | 串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去, 497 | 同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能 498 | 的电路,我们称为串行接口电路。 499 | 500 | 便是打开这个设备,以9600的速率传输数据。 501 | 502 | ``` python 503 | import json 504 | import urllib2 505 | import serial 506 | import time 507 | 508 | url="http://www.xianuniversity.com/athome/1" 509 | 510 | while 1: 511 | try: 512 | date=urllib2.urlopen(url) 513 | result=json.load(date) 514 | status=result[0]["led1"] 515 | ser=serial.Serial("/dev/ttyACM0",9600) 516 | if status==1 : 517 | ser.write("1") 518 | elif status==0: 519 | ser.write("0") 520 | time.sleep(1) 521 | except urllib2.URLError: 522 | print "Bad URL or timeout" 523 | ``` 524 | 525 | [^windows_com]:在Windows系统上,只需要将/dev/ttyACM0改为对应的com口。 526 | [getjson]: dot/getjson.png "python返回json数据" 527 | ![python返回json数据][getjson] 528 | 529 | 系统还需要对上面的数据进行处理,只拿其中的结果 530 | 531 | [originjson]: dot/origin.png "python处理完后的结果" 532 | ![python处理完后的结果][originjson] 533 | 534 | 当改变led的状态后,便可以得到下面的结果 535 | 536 | [changejson]: dot/change.png "改变状态后的结果" 537 | ![改变状态后的结果][changejson] 538 | 539 | #网络系统设计# 540 | 541 | ##网络服务程序设计## 542 | 543 | 对于物联网系统网络的核心是构建一个RESTful服务,而这构建RESTful的核心便 544 | 是基础的HTPP协议。基础的HTTP协议便是:GET、POST、PUT、DELETE。它们分别 545 | 对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资 546 | 源),PUT用来更新资源,DELETE用来删除资源。 547 | 548 | [restful]: dot/restful.png "restful" 549 | ![restful][restful] 550 | 551 | 简要的来说,一个GET动作便是在打开一个网页的时候,看到的内容,便是GET到 552 | 的资源。而在获取取到网页的内容之前,会有一个POST动作到所要打开的网站的 553 | 服务器。 554 | 555 | [getrequest]: dot/getrequest.png "Get Request" 556 | ![Get Request][getrequest] 557 | 558 | ###基本的REST服务### 559 | 560 | REST服务实际上是充当着网络与设备的传输介质,构建一个REST服务也就相当于 561 | 获取一个URL下的某个数据 562 | 563 | $curl http://www.xianuniversity.com/athome/1 564 | 565 | 返回结果如下所示 566 | 567 | [jsondata]: dot/jsondata.png "JSON结果返回图" 568 | ![JSON结果返回图][jsondata] 569 | 570 | 假设有这样一个资源用于呈现led的状态,即 http://localhost/status/1 571 | [^localhost],获取这个LED的状态便发出了类似下面这样的请求: 572 | 573 | ``` python 574 | GET /status/1 HTTP/1.1 575 | Host:localhost 576 | Cotent-Type:application/json;charset=UTF-8 577 | ``` 578 | [^localhost]:在本地进行web开发时,浏览器可以识别localhost,配置好Hosts时相当于127.0.0.1。 579 | 580 | 在客户端发出上述的请求的时候,服务端需要对其做出响应,构造出一个下面的结果 581 | ``` javascript 582 | [{ 583 | "status":1 584 | }] 585 | ``` 586 | 1代表给予灯的状态应该是亮的,在那之后需要做的便是将其通过串口发送给单片 587 | 机进行处理,对应于一个关机的结果便是 588 | 589 | ``` javascript 590 | [{ 591 | "status":0 592 | }] 593 | ``` 594 | 这样就完成了基本的状态设计。而对于系统最后需要解析的数据的结果来说,还需要加入其他元素, 595 | ``` javascript 596 | [{ 597 | "id": 1, 598 | "temperature": 10, 599 | "sensors1": 22, 600 | "sensors2": 11, 601 | "led1": 0 602 | }] 603 | ``` 604 | 这里也涉及到了json数据结构的设计,可以将上面的结果设计为 605 | ``` javascript 606 | [{ 607 | "id": 1, 608 | "temperature": 10, 609 | "sensors":[{ 610 | "sensor":22, 611 | "sensor":11, 612 | }], 613 | "led1": 0 614 | }] 615 | ``` 616 | 这种具有更好的可读性,然而在对于网速速度要求高的情况下,会表现得不好, 617 | 同时会造成额外的系统开销。对于这样一个需要不断读取数据的系统来说,采用 618 | 单层结构的json数据会更具有优势。 619 | 620 | 在设计这样一个接口的时候,需要考虑客户端可能需要获取全部的数据 621 | ``` python 622 | GET /status HTTP/1.1 623 | Host:localhost 624 | Cotent-Type:application/json;charset=UTF-8 625 | ``` 626 | 设计好这样的接口有助于显示在系统的前台,而这也是无法在物联网系统中产生 627 | 统一协议的原因之一,复杂的接口无法用于简单功能的场景。 628 | 629 | 下面是一个简单的POST请求的示例,系统需要能接收POST请求,并将请求存储到数据库 630 | 631 | ``` bash 632 | POST / HTTP/1.1 633 | Host:localhost 634 | User-Agent: Go 1.1 package http 635 | Content-Length: 45 636 | Authorization: 123456 637 | Accept-Encoding: gzip 638 | ``` 639 | 一个PUT动作但是我们更新资源,就好比是我们创建一个日志或者一个说说一样。 640 | DELETE动作,便是删除动作了,而这也是一个物联网系统服务所需要的。 641 | 642 | ##系统前台设计## 643 | 在对系统前台设计的时候,在考虑不同移动设备的兼容的同时,也需要保持一个 644 | 良好可用的结构。而系统在前台的主要功能是在于控制物体的状态、显示一些数 645 | 值的变化,控制物体状态的关键在于如何将数据由前台POST到后台,在网页端可 646 | 以用POST,而在移动端则可以用JSON API。 647 | 648 | ###Ajax### 649 | 650 | - AJAX : Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 651 | - AJAX 不是新的编程语言,而是一种使用现有标准的新方法。 652 | - AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。 653 | 654 | 剥离后的Ajax部分代码如下所示,主要用的是 jQuery 框架的 getJSON 来实现的 655 | ```algorithm 656 | begin 657 | data:=get_data(url) 658 | if data.get_success 659 | temperature:=data.push(temperature) 660 | ```` 661 | 662 | 663 | [editjson]: dot/edit.png "控制界面" 664 | ![控制界面][editjson] 665 | 666 | 当按下Change Status按钮时,系统发生了如下变化 667 | 668 | [getpost]: dot/getpost.png "GET POST数据" 669 | ![GET POST数据][getpost] 670 | 671 | 系统会先向服务器发送数据,也就是POST请求,在请求结束后,系统将会刷新页面,也就是GET请求。 672 | 673 | 系统会不断从后台获取数据结果,如下所示 674 | 675 | [request]: dot/request.png "后台获取数据" 676 | ![后台获取数据][request] 677 | 678 | 在Javascript语言中有函数库可以直接用于获取后台数据——getJSON,可以从指定的URL中获取结果。 679 | 680 | - url 用于提供 json 数据的地址页 681 | - data(Optional) 用于传送到服务器的键值对 682 | - callback(Optional) 回调函数,json 数据请求成功后的处理函数 683 | 684 | 685 | ``` javascript 686 | var dataLength = []; 687 | function drawTemp() { 688 | var zero = []; 689 | $.getJSON('/athome/', function(json) { 690 | var items = []; 691 | dataLength.push(json.length); 692 | $.each(json, function(key, val) { 693 | zero.push(val.temperature); 694 | }); 695 | }; 696 | ``` 697 | 698 | 实际上,上面的程序只是从 /athome/ 下面获取数据,再将数据堆到数组里面,再 699 | 把这部分放到图形中。 700 | 701 | ###Highcharts### 702 | 703 | Highcharts有以下的特点 704 | 705 | - 兼容性:兼容当今所有的浏览器,包括 iPhone、IE 和火狐等等; 706 | - 对个人用户完全免费; 707 | - 纯JS,无BS; 708 | - 支持大部分的图表类型:直线图,曲线图、区域图、区域曲线图、柱状图、饼装图、散布图; 709 | - 跨语言:不管是 PHP、Asp.net 还是 Java 都可以使用,它只需要三个文件:一个是Highcharts 710 | 的核心文件 highcharts.js,还有 a canvas emulator for IE 和 Jquery类库或者 MooTools 类库; 711 | - 提示功能:鼠标移动到图表的某一点上有提示信息; 712 | - 放大功能:选中图表部分放大,近距离观察图表; 713 | - 易用性:无需要特殊的开发技能,只需要设置一下选项就可以制作适合自己的图表; 714 | - 时间轴:可以精确到毫秒; 715 | 716 | 在这里只需将需要处理的数据存储到数组中,便可以将其渲染成为图形,下面的温度走势图便是基于Highcharts的结果 717 | 718 | [chart1]: dot/chart.png "温度走势图" 719 | ![chart][chart1] 720 | 721 | ##系统后台设计## 722 | 723 | ###数据库设计### 724 | 725 | 系统使用Laravel框架作为系统底层,需要配置其运行环境[^runtime],创建数 726 | 据库[^createdb],对应于上面生成的最后的JSON数据,创建对应的数据库: 727 | 728 | 系统数据库结构如下所示 729 | 730 | | 表名 | 数据类型 | 作用 | 731 | | ---- |-------- | ------ | 732 | | id | 整数 | ID | 733 | | temperature | 浮点数 | 温度 | 734 | | sensors1 | 浮点数 | 传感器1 | 735 | | sensors2 | 浮点数 | 传感器2 | 736 | | led1 | 布尔型 | led状态 | 737 | 738 | 对应于数据库,其相应的php代码如下所示 739 | 740 | ``` php 741 | public function up() 742 | { 743 | Schema::create('athomes', function(Blueprint $table) 744 | { 745 | $table--->increments('id'); 746 | $table->float('temperature'); 747 | $table->float('sensors1'); 748 | $table->float('sensors2'); 749 | $table->boolean('led1'); 750 | $table->timestamps(); 751 | }); 752 | } 753 | ``` 754 | 755 | 当POST数据的时候,便是将数据存往数据库,而GET的时候则是从数据库中拿出 756 | 数据再渲染给浏览器,GET、PUT、DELETE、POST便是对就于数据库的Create、Refresh、Update、Delete 757 | 758 | 系统使用MySQL作为数据库,开始的时候需要创建数据库,在数据库中执行 759 | 760 | CREATE DATABASE IF NOT EXISTS iot default charset utf8 COLLATE utf8_general_ci; 761 | 762 | 用于创建一个athomes数据库,同时将PHP与数据库配置好 763 | 764 | ```php 765 | 'mysql' => array( 766 | 'driver' => 'mysql', 767 | 'host' => 'localhost', 768 | 'database' => 'iot', 769 | 'username' => 'root', 770 | 'password' => ' ', 771 | 'charset' => 'utf8', 772 | 'collation' => 'utf8_unicode_ci', 773 | 'prefix' => '', 774 | ) 775 | ``` 776 | 777 | 当用户在前台创建一个数据后,可以在MySQL的后台查看: 778 | 779 | +----+-------------+----------+----------+------+---------------------+---------------------+ 780 | | id | temperature | sensors1 | sensors2 | led1 | created_at | updated_at | 781 | +----+-------------+----------+----------+------+---------------------+---------------------+ 782 | | 1 | 19.80 | 22.20 | 7.50 | 0 | 2013-12-31 07:03:59 | 2013-12-31 07:03:59 | 783 | +----+-------------+----------+----------+------+---------------------+---------------------+ 784 | | 2 | 18.80 | 22.00 | 7.60 | 0 | 2013-12-31 07:03:59 | 2013-12-31 07:03:59 | 785 | +----+-------------+----------+----------+------+---------------------+---------------------+ 786 | 787 | [^runtime]:这里用的是Linux+Nginx+MySQL+PHP。 788 | [^createdb]:创建数据的代码:CREATE DATABASE IF NOT EXISTS bbs default charset utf8 COLLATE utf8_general_ci; 789 | -------------------------------------------------------------------------------- /iot.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/iot.pdf -------------------------------------------------------------------------------- /raspberrypi.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/raspberrypi.xmind -------------------------------------------------------------------------------- /scutthesis.cls: -------------------------------------------------------------------------------- 1 | % Copyright (C) 2010-2011 by Alwin Tsui 2 | % and Quansheng Guan 3 | % 4 | % This file is part of the scutthesis package project. 5 | % http://scutthesis.googlecode.com/ 6 | % --------------------------------------------------- 7 | % This file may be distributed and/or modified under the 8 | % conditions of the GNU General Public License v3 9 | % of this license or (at your option) any later version. 10 | % 11 | % modified from thuthesis.cls,seuthesis.cls and tjthesis.cls 12 | 13 | % 本cls只对中文摘要开始的格式进行设置,至于论文签名的标题,版权声明等,建议到研究生院下载doc版本, 14 | % 填写好转换为pdf格式,再用pdfpages宏include进latex文档。 15 | 16 | %% Jun 19,2010.参照现有国内各高校论文latex模板(东南,清华,北航等),取其精华去其糟粕,写成初版 17 | %% Jun 20,2010,修改abstract,keywords,Appendence支持lyx的scutthesis.layout 18 | %% Jun 22,2010,用natbib来控制引用标的显示 19 | %% v2.0.1, Mar 31,2011,合并了Quansheng Guan部分修改,主要包含:草稿引入水印,加入定理环境,完善标题、表格和程序代码等格式 20 | 21 | 22 | \NeedsTeXFormat{LaTeX2e}[1999/12/01] 23 | \ProvidesClass{scutthesis}[2011/03/31 2.0.1 The LaTeX class for the thesis of South China University of Technology] 24 | 25 | %% import global options 26 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 27 | 28 | \newif\ifmasterdegree\masterdegreefalse %默认为doctor 29 | \newif\ifpdfcover\pdfcoverfalse % To do 30 | \newif\ifdraftmode\draftmodefalse % added by Quansheng Guan, 初稿加上水印背景 31 | \DeclareOption{draftmode}{\draftmodetrue} % added by Quansheng Guan 32 | 33 | \DeclareOption{master}{\masterdegreetrue} 34 | \DeclareOption{pdfcover}{\pdfcovertrue} %using pdfcover,TOdo 35 | 36 | \DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}} 37 | \ProcessOptions\relax %revised by Quansheng Guan \ProcessOptions 38 | \LoadClass[12pt,a4paper,openany]{book} 39 | 40 | \newif\ifonepage\onepagefalse 41 | 42 | %% define 几个宏 43 | \newcommand{\scutthesis}{% 44 | S\hspace{-0.3ex}\raisebox{-0.5ex}{C}\hspace{-0.3ex}U\hspace{0.1em}\raisebox{-0.5ex}{T}% 45 | \textsc{Thesis} 46 | } 47 | \ifmasterdegree \newcommand{\@degree}{硕士} \else \newcommand{\@degree}{博士} \fi 48 | \newcommand{\thesissubject}{华南理工大学\@degree{}学位论文} 49 | \renewcommand{\today}{\the\year~年~\the\month~月~\the\day~日} 50 | 51 | 52 | %% 加载几个常用的sty packages 53 | \RequirePackage{ifpdf} 54 | \RequirePackage{ifthen} 55 | \RequirePackage{doc} 56 | \RequirePackage{keyval} 57 | \RequirePackage[dvipsnames]{xcolor} 58 | \RequirePackage{indentfirst} 59 | \RequirePackage{makeidx} % 索引 60 | \RequirePackage{amssymb} %this package conflicts with xeCJK, place it before xeCJK to avoid the coflict. 61 | \RequirePackage[final]{pdfpages} 62 | \RequirePackage{color} 63 | %\RequirePackage{prettyref} %不需要 64 | \ifdraftmode 65 | \RequirePackage{draftwatermark} % added by Quansheng Guan, 初稿加上水印背景 66 | \SetWatermarkText{初稿\small\today} 67 | \fi 68 | 69 | %% 设置页面布局 70 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 71 | \RequirePackage[left=2.5cm,right=2.5cm,bottom=2.5cm,top=2.5cm,%设置页面上下左右各为25mm 72 | headheight=1.5cm,%页眉所占高度, 73 | footskip=1cm %页脚所占高度 74 | ]{geometry} 75 | 76 | %% 字体设置 77 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 78 | \RequirePackage[BoldFont, SlantFont, CJKnumber]{xeCJK} % xeCJK package 79 | %\punctstyle{kaiming} 80 | \setmainfont[Mapping=tex-text]{Times New Roman}%\rmfamily 使用的字体,默认英文和数字的字体。 81 | \XeTeXlinebreaklocale "zh" %采用中文断行方式 82 | \XeTeXlinebreakskip = 0pt plus 1pt %字元间可加入0pt~1pt 的弹性间距,这样才能排出左右对齐的段落。 83 | 84 | \setCJKmainfont{STSong} 85 | \setCJKfamilyfont{song}{STSong} 86 | \setCJKfamilyfont{hei}{STHeiti} 87 | \setCJKfamilyfont{kai}{STKaiti} 88 | \setCJKfamilyfont{fang}{STFangsong} 89 | 90 | \newcommand{\songti}{\CJKfamily{song}} 91 | \newcommand{\heiti}{\CJKfamily{hei}} 92 | \newcommand{\kaiti}{\CJKfamily{kai}} 93 | \newcommand{\fangsong}{\CJKfamily{fang}} 94 | 95 | %% Font size 96 | \newcommand{\chuhao}{\fontsize{42pt}{46pt}\selectfont} 97 | \newcommand{\xiaochuhao}{\fontsize{36pt}{40pt}\selectfont} 98 | \newcommand{\yichu}{\fontsize{32pt}{36pt}\selectfont} 99 | \newcommand{\yihao}{\fontsize{28pt}{32pt}\selectfont} 100 | \newcommand{\erhao}{\fontsize{21pt}{24pt}\selectfont} 101 | \newcommand{\xiaoerhao}{\fontsize{18pt}{20}\selectfont} 102 | \newcommand{\sanhao}{\fontsize{15.75pt}{18pt}\selectfont} 103 | %\newcommand{\xiaosanhao}{\fontsize{15bp}{18pt plus .3pt minus .2pt}\selectfont} 104 | \newcommand{\xiaosanhao}{\fontsize{15pt}{22.5pt}\selectfont}%1.5 105 | \newcommand{\sihao}{\fontsize{14pt}{16pt}\selectfont} 106 | \newcommand{\xiaosihao}{\fontsize{12pt}{14pt}\selectfont} 107 | \newcommand{\wuhao}{\fontsize{10.5pt}{13pt}\selectfont} 108 | \newcommand{\xiaowuhao}{\fontsize{9pt}{11pt}\selectfont} 109 | \newcommand{\liuhao}{\fontsize{7.5pt}{9pt}\selectfont} 110 | \newcommand{\xiaoliuhao}{\fontsize{6.5pt}{7.5pt}\selectfont} 111 | \newcommand{\qihao}{\fontsize{5.5pt}{6.5pt}\selectfont} 112 | 113 | % 中文段首缩进 114 | \newlength\CJK@twochars %set \CJK@twochars zero 115 | \def\CJK@spaceChar{\hskip \f@size \p@} 116 | \def\CJKindent{% 117 | \settowidth\CJK@twochars{\CJK@spaceChar\CJK@spaceChar}% 118 | \parindent\CJK@twochars} 119 | \newcommand{\cndash}{\rule{0.0em}{0pt}\rule[0.35em]{1.4em}{0.05em}\rule{0.2em}{0pt}} % 中文破折号,added by Quansheng 120 | 121 | % 报警处理 122 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 123 | %不要拉大行距使得页面充满 124 | \raggedbottom 125 | % 去掉页面中的badboxes报警,同上 126 | % \setlength\parskip{.5\baselineskip 127 | % plus .1\baselineskip 128 | % minus .4\baselineskip 129 | % } 130 | \hbadness=10000 \tolerance=10000 \hfuzz=150pt % 去掉表格中的badboxes报警,看着不爽 131 | 132 | % My fonts for Scut thesis 133 | \renewcommand{\normalsize}{\xiaosihao\songti\normalfont} % Normal font size 小四号宋体 134 | \newcommand{\absnamecn}{\heiti\xiaoerhao} % 中文“摘要”字样的字体 135 | \newcommand{\abskeycn}{\heiti\xiaosihao} % 中文摘要“关键字”字样的字体 136 | \newcommand{\abskeyscn}{\songti\xiaosihao\normalfont} % 中文摘要关键字的字体 137 | \newcommand{\absnameen}{\heiti\xiaosihao} % 英文``Abstract''字样的字体 138 | \newcommand{\abskeyen}{\bfseries\xiaosihao} % 英文``KEY WORDS''字样的字体 139 | \newcommand{\abskeysen}{\songti\xiaosihao\normalfont} % 英文关键字的字体 140 | \newcommand{\headfont}{\songti\wuhao\normalfont} % 页眉字体 141 | \newcommand{\toctitlefont}{\heiti\xiaoerhao} % “目录”字样的字体 142 | \newcommand{\tocchapterfont}{\heiti\xiaosihao} % 目录上第X章的字体 143 | \newcommand{\tocsectionfont}{\normalsize} % 目录上X.Y节的字体 144 | \newcommand{\tocsubsectionfont}{\normalsize} % 目录上X.Y.Z小节的字体 145 | \newcommand{\tocsubsubsectionfont}{\normalsize} % 目录上X.Y.Z小节的字体 146 | \newcommand{\textchapterfont}{\centering\heiti\xiaoerhao} % 正文上第X章的字体 147 | \newcommand{\textsectionfont}{\heiti\xiaosanhao} % 正文上X.Y节的字体 148 | \newcommand{\textsubsectionfont}{\heiti\sihao} % 正文上X.Y.Z小节的字体 149 | \newcommand{\textsubsubsectionfont}{\heiti\xiaosihao} % 正文上X.Y.Z.K小节的字体 150 | \newcommand{\footnotefont}{\songti\xiaowuhao\normalfont} % 脚注字体 151 | \newcommand{\ftcaptionfont}{\kaiti\wuhao\normalfont} % 图表标题的字体 152 | \newcommand{\reftitlefont}{\heiti\xiaoerhao} % “参考文献”字样的字体 153 | \newcommand{\refbodyfont}{\songti\wuhao\normalfont} % 参考文献字体 154 | \newcommand{\thanktitlefont}{\heiti\sanhao} % “致谢”字样的字体 155 | \newcommand{\appendixtitlefont}{\heiti\sanhao} % “附录”字样的字体 156 | %\normalfont command (essentially) executes the command sequence: 157 | % \fontencoding{\encodingdefault} 158 | % \fontfamily{\familydefault} 159 | % \fontseries{\seriesdefault} 160 | % \fontshape{\shapedefault} 161 | % \selectfont 162 | 163 | 164 | 165 | %% 图表环境 166 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 167 | %图题(由图号和图名组成)。图号为“图1-1”格式。图题置于图下,有图注或其他说明时应置于图题之上。 168 | %表序与表名置于表上。 169 | %图题和表题在lyx中插图或插表时,可以参照标题的位置,在上还是在下。 170 | 171 | \RequirePackage{graphicx} 172 | \DeclareGraphicsExtensions{.pdf,.eps,.jpg,.png} % 如果插入的图片没有指定扩展名,那么依次搜索下面的扩展名所对应的文件 173 | \RequirePackage{subfig} % config兼容subfigure命令 174 | \RequirePackage{float} % 可以使用[H]命令 175 | %\RequirePackage{ccaption} %与subfig冲突,弃用 176 | \RequirePackage{caption} % lislis:居中. 使用caption3.0 177 | \DeclareCaptionFont{capFont}{\ftcaptionfont} % 表格名及图名 178 | \DeclareCaptionLabelSeparator{twospace}{~~} 179 | \captionsetup{ labelsep=twospace,% 去掉图标签后的冒号 180 | belowskip=0bp,aboveskip=0bp, 181 | font={capFont}, figurename=图,tablename=表,listfigurename=插图目录,listtablename=表格目录} 182 | \captionsetup[figure]{position=bottom} 183 | \captionsetup[subfloat]{captionskip=6bp,nearskip=0bp,farskip=0bp,topadjust=0bp,justification=centering} 184 | \let\Oldincludegraphics\includegraphics 185 | \renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}} 186 | 187 | %%%%%%%%%%定义双标题命令 188 | \newcommand{\FigureBicaption}[2]{ 189 | \renewcommand{\figurename}{图} 190 | \vspace{8pt} 191 | \caption{#1} 192 | \addtocounter{figure}{-1} 193 | \renewcommand{\figurename}{Fig.} 194 | \captionsetup{list=false} 195 | \vspace{6pt} 196 | \caption{#2} 197 | \captionsetup{list=true} 198 | \renewcommand{\figurename}{图} 199 | } 200 | \newcommand{\SubfloatCaption}[4] % Two Parameters, the first one is the width of the subfigure, 201 | { 202 | \subfloat[#2]{ 203 | \label{#3} 204 | \addtocounter{subfigure}{-1} 205 | \subfloat[\vspace{-5pt}#1]{#4} 206 | }% 207 | } 208 | 209 | 210 | 211 | %% 表格 212 | \RequirePackage{array} % 扩展了 array 和 tabular 环境功能 213 | \RequirePackage{booktabs} % 增加对三线表格的支持 % \toprule,\midrule,\bottomrule 214 | \usepackage{longtable} % 长表格支持,截断跨页 215 | \RequirePackage{ctable, threeparttable} % 支持表格注释,复杂表格,一般用不上 216 | \RequirePackage{diagbox} % 表格中的反斜线 217 | %\RequirePackage{tabularx} 218 | \captionsetup[table]{position=top} 219 | %定义双标题命令 220 | \newcommand{\TableBicaption}[2]{ 221 | \renewcommand{\tablename}{表} 222 | \vspace{8pt} 223 | \caption{#1} 224 | \vspace{6pt} 225 | \addtocounter{table}{-1} 226 | \renewcommand{\tablename}{Table} 227 | \captionsetup{list=false} 228 | \caption{#2} 229 | \captionsetup{list=true} 230 | \renewcommand{\tablename}{表} 231 | } 232 | 233 | \renewcommand{\theequation}{\arabic{chapter}-\arabic{equation}} 234 | \renewcommand{\thetable}{\arabic{chapter}-\arabic{table}} 235 | \renewcommand{\thefigure}{\arabic{chapter}-\arabic{figure}} 236 | 237 | \renewcommand{\thefootnote}{注\arabic{footnote}} \setcounter{footnote}{0} 238 | 239 | \renewcommand\fps@table{htbp} 240 | 241 | \renewcommand{\textfraction}{0.07} 242 | \renewcommand{\topfraction}{0.9} 243 | \renewcommand{\bottomfraction}{0.8} 244 | \renewcommand{\floatpagefraction}{0.85} 245 | 246 | %% 列表 247 | %\RequirePackage{enumitem} 248 | %\setlist{noitemsep,nolistsep,topsep=0pt,itemindent=1em} 249 | %\setenumerate[1]{label=\arabic*), ref=\arabic*} 250 | %\setenumerate[2]{label=\emph{\alph*}),ref=\theenumi.\emph{\alph*}} 251 | %\setenumerate[3]{label=\roman*), ref=\theenumii.\roman*} 252 | % Ref: http://bbs.ctex.org/viewthread.php?tid=52331&page=1 253 | % \setitemize{itemindent=38pt,leftmargin=0pt,itemsep=0ex,listparindent=26pt,partopsep=0pt,parsep=\parskip,topsep=-0.25ex} 254 | % \setenumerate{itemindent=38pt,leftmargin=0pt,itemsep=0ex,listparindent=26pt,partopsep=0pt,parsep=\parskip,topsep=-0.25ex} 255 | % \setdescription{itemindent=38pt,leftmargin=0pt,itemsep=0ex,listparindent=26pt,partopsep=0pt,parsep=\parskip,topsep=-0.25ex} 256 | 257 | \RequirePackage{paralist}% 修改列表格式 258 | \setdefaultenum{1)}{a)}{i.}{A.}% 设置列表模式,for \enumerate 259 | \setdefaultleftmargin{4ex}{}{}{}{}{}%standard \itemize :• – ∗ · 260 | 261 | \RequirePackage[numbers,super,square,sort&compress]{natbib} % 修改引用参考文献格式 262 | % 用natbib代替下面的一些设置 263 | %\let\originalcite=\cite 264 | %\renewcommand{\cite}[1]{\textsuperscript{\originalcite{#1}}} 265 | %\renewcommand{\citet}[1]{\originalcite{#1}} 266 | 267 | %% 程序代码格式 268 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 269 | \RequirePackage[ruled,vlined,algochapter]{algorithm2e} 270 | % algorithm2e 中文标题定制 271 | \renewcommand{\algorithmcfname}{算法} 272 | \renewcommand\thealgocf{\csname the\algocf@within\endcsname-\@arabic\c@algocf}% 273 | 274 | \usepackage{listings} 275 | \lstset{tabsize=4, % 276 | frame=shadowbox, %把代码用带有阴影的框圈起来 277 | commentstyle=\color{red!50!green!50!blue!50},%浅灰色的注释 278 | rulesepcolor=\color{red!20!green!20!blue!20},%代码块边框为淡青色 279 | keywordstyle=\color{blue!90}\bfseries, %代码关键字的颜色为蓝色,粗体 280 | showstringspaces=false,%不显示代码字符串中间的空格标记 281 | stringstyle=\ttfamily, % 代码字符串的特殊格式 282 | keepspaces=true, % 283 | breakindent=22pt, % 284 | numbers=left,%左侧显示行号 285 | stepnumber=1,% 286 | numberstyle=\tiny, %行号字体用小号 287 | basicstyle=\footnotesize, % 288 | showspaces=false, % 289 | flexiblecolumns=true, % 290 | breaklines=true, %对过长的代码自动换行 291 | breakautoindent=true,% 292 | breakindent=4em, % 293 | escapebegin=\begin{CJK*}{GBK}{hei},escapeend=\end{CJK*}, 294 | aboveskip=1em, %代码块边框 295 | %% added by http://bbs.ctex.org/viewthread.php?tid=53451 296 | fontadjust, 297 | captionpos=t, 298 | framextopmargin=2pt,framexbottommargin=2pt,abovecaptionskip=-3pt,belowcaptionskip=3pt, 299 | xleftmargin=4em,xrightmargin=4em, % 设定listing左右的空白 300 | texcl=true, 301 | % 设定中文冲突,断行,列模式,数学环境输入,listing数字的样式 302 | extendedchars=false,columns=flexible,mathescape=true 303 | % numbersep=-1em 304 | } 305 | \renewcommand{\lstlistingname}{代码} %% 重命名Listings标题头 added by Guan 306 | 307 | %参考文献bibi style 308 | %%%%%%%%%%%%%%%%%%%%%% 309 | %\bibliographystyle{scutthesis} 310 | %\renewcommand\@biblabel[1]{#1} % Reference list option change from [1] to 1 311 | \let\orig@bibliography=\bibliography 312 | \renewcommand{\bibliography}[1]{ 313 | \clearpage % 使参考文献使用 seunolabel 页面样式 314 | \refbodyfont 315 | \orig@bibliography{#1} 316 | \normalsize 317 | } 318 | 319 | \RequirePackage{array} % 扩展了 array 和 tabular 环境功能 320 | \RequirePackage[nottoc]{tocbibind} % 将参考文献、索引、表格目录和图形 321 | \renewcommand{\bibname}{参考文献} 322 | 323 | % 设置目录 324 | %%%%%%%%%%%%%%%%% 325 | \RequirePackage{titletoc} 326 | \renewcommand\contentsname{目录} 327 | \titlecontents{chapter}[0ex]{\tocchapterfont}{% 328 | 第\CJKnumber{\thecontentslabel}章\quad{}}{}{% 329 | \hspace{.5em}\titlerule*[5pt]{$\cdot$}\contentspage}% 330 | \titlecontents{section}[1em]{\tocsectionfont}{% 331 | \thecontentslabel\quad{}}{}{% 332 | \hspace{.5em}\titlerule*[5pt]{$\cdot$}\contentspage}% 333 | \titlecontents{subsection}[2em]{\tocsubsectionfont}{% 334 | \thecontentslabel\quad{}}{}{% 335 | \hspace{.5em}\titlerule*[5pt]{$\cdot$}\contentspage}% 336 | \titlecontents{subsubsection}[3em]{\tocsubsubsectionfont}{% 337 | \thecontentslabel\quad{}}{}{% 338 | \hspace{.5em}\titlerule*[5pt]{$\cdot$}\contentspage}% 339 | 340 | % 设定章节深度和目录深度 341 | \setcounter{secnumdepth}{4} 342 | \setcounter{tocdepth}{2} 343 | 344 | % Text style 345 | %%%%%%%%%%%%%%%%%%%%%%%% 346 | \RequirePackage[pagestyles, rm]{titlesec}%调用titlesec涵盖fancyhdr的功能 347 | \renewcommand{\chaptername}{第\CJKnumber{\thechapter}章} 348 | \titleformat{\chapter}[hang]{\textchapterfont}{第\CJKnumber{\thechapter}章}{1em}{} 349 | \titleformat{\section}[hang]{\textsectionfont}{\thesection}{1em}{} 350 | \titleformat{\subsection}[hang]{\textsubsectionfont}{\thesubsection}{1em}{} 351 | \titleformat{\subsubsection}[hang]{\textsubsectionfont}{\thesubsubsection}{1ex}{}% 小四黑体居左 352 | 353 | %\titlespacing{\chapter}{0pt}{3ex plus .5ex minus .5ex}{3ex plus .5ex minus .5ex} % 缩短章节标题的上边距 354 | \setlength{\parskip}{0ex}% 正文段前段后距:无空行 355 | \titlespacing{\chapter}{0pt}{-20pt}{1pt} % 缩短章标题上间距,revised by Quansheng Guan 356 | \titlespacing{\section}{0pt}{1pt}{1pt} % 标题间距 357 | \titlespacing{\subsection}{0pt}{4pt}{0pt} 358 | \titlespacing{\subsubsection}{0pt}{6pt}{6pt} 359 | 360 | \newcommand{\linespacing}[1]{\linespread{#1}\selectfont}% 行距命令 361 | 362 | %\sethead[ even-left ][ even-center ][ even-right ] { odd-left }{ odd-center }{ odd-right } 363 | \newpagestyle{revtitlestyle}{ 364 | \sethead[][{\headfont{}\thesissubject}][] % 页眉偶数页,五号字体,居中 365 | {}{{\headfont{}\chaptertitlename\quad\chaptertitle}}{} % 页眉奇数页,五号字体,居中 366 | \setfoot{}{\headfont{}\thepage}{}%页码五号宋体居中 367 | \headrule%上横线 368 | \setheadrule{1.5pt}%设置横线粗细 369 | 370 | } 371 | % added by Quansheng Guan 372 | % page style for chapters without label number 373 | \newpagestyle{nolabelchapterstyle}{ 374 | \sethead[][{\headfont{}\thesissubject}][] % 页眉偶数页,五号字体,居中 375 | {}{{\headfont\chaptertitle}}{} % 页眉奇数页,五号字体,居中, no label 376 | \setfoot{}{\headfont{}\thepage}{}%页码五号宋体居中 377 | \headrule%上横线 378 | \setheadrule{1.5pt}%设置横线粗细 379 | } 380 | 381 | \newpagestyle{appendix_style}{ %针对附录的特殊要求,以section而不是chapter为页眉。 382 | \sethead[][{\headfont{}\thesissubject}][] % 页眉偶数页,五号字体,居中 383 | {}{{\headfont\thesection\quad\sectiontitle}}{} % 页眉奇数页,五号字体,居中, no label 384 | \setfoot{}{\headfont{}\thepage}{}%页码五号宋体居中 385 | \headrule%上横线 386 | \setheadrule{1.5pt}%设置横线粗细 387 | } 388 | 389 | \newpagestyle{frontstyle}{ 390 | \setfoot{}{\thepage}{} 391 | } 392 | %%%%%% 393 | \newcommand{\myclearpage}{% 394 | \ifonepage 395 | \clearpage 396 | \else 397 | \cleardoublepage 398 | \fi 399 | } 400 | 401 | \renewcommand\frontmatter{ 402 | %\@frontmattertrue % added by Quansheng Guan 403 | \pagestyle{empty} % added by Quansheng Guan 摘要之前的部分不需要页码 404 | \myclearpage 405 | \pagenumbering{Roman}% Roman style page number 406 | % added by Quansheng Guan 407 | \let\ps@plain=\ps@frontstyle 408 | \pagestyle{plain} 409 | \@mainmatterfalse 410 | }% 411 | 412 | \renewcommand\mainmatter{% 413 | \@mainmattertrue 414 | \ifodd \arabic{page} % 目录后如果是奇数页结尾,则插入一个无页码空白页 415 | \clearpage 416 | \pagestyle{empty} 417 | \mbox{} %空白占位符 418 | \fi 419 | \clearpage 420 | \pagenumbering{arabic} 421 | % the original plainstyle is revised to add the pagehead to the first page in a chapter 422 | % the default style of the first page is plain. 423 | % \pagestyle{yourstyle} can be used to define the style of other pages, 424 | % or keep the same as plain. 425 | \let\ps@plain=\ps@revtitlestyle 426 | \pagestyle{revtitlestyle} % revised by Quansheng Guan 427 | %\pagestyle{plain} 428 | % 开始正文部分 429 | } 430 | \renewcommand\backmatter{% 431 | % there is no label number for reference chapter 432 | \let\ps@plain=\ps@nolabelchapterstyle 433 | \pagestyle{plain} % revised by Quansheng Guan 434 | } 435 | %========== 436 | \AtBeginDocument{\CJKindent{}% 437 | \makeindex% 438 | \normalsize%正文字体格式 439 | \linespacing{1.682}% 主行距~1.5倍 440 | } 441 | \AtEndDocument{} 442 | %------------------ 443 | \newcommand{\preface}[1]{% 444 | \chapter*{#1} 445 | \addcontentsline{toc}{chapter}{#1} 446 | } 447 | 448 | \newenvironment{abstractCn}{ 449 | \chapter*{摘\quad 要} 450 | \addcontentsline{toc}{chapter}{摘要} 451 | }{} 452 | 453 | \newcommand{\keywordsCn}[1]{ 454 | \par 455 | \vspace{1em} 456 | \newcommand{\@keywords}{#1} 457 | {\noindent\abskeycn 关键词:} {\abskeyscn \@keywords} % \noindent去掉缩进 458 | } 459 | 460 | \newenvironment{abstractEn} 461 | { 462 | \chapter*{Abstract} 463 | \addcontentsline{toc}{chapter}{Abstract} 464 | }{ 465 | } 466 | 467 | \newcommand{\keywordsEn}[1]{ 468 | \par 469 | \vspace{1em} 470 | {\noindent\abskeyen Keywords:} {\abskeysen #1} % \noindent去掉缩进 471 | } 472 | 473 | \renewcommand{\appendix}[1]{% 474 | %\myclearpage % commented by Quansheng Guan 475 | % added by Quansheng Guan 476 | % \chaptertitle is not available for those chapters without label number. 477 | \renewpagestyle{plain}{ 478 | \sethead[][{\headfont{}\thesissubject}][] % 页眉偶数页,五号字体,居中 479 | {}{{\headfont{#1}}}{} % 页眉奇数页,五号字体,居中 480 | \setfoot{}{\headfont{}\thepage}{}%页码五号宋体居中 481 | \headrule%上横线 482 | \setheadrule{1.5pt}%设置横线粗细 483 | } 484 | 485 | \renewcommand{\thesection}{{#1}\arabic{section}} 486 | \chapter*{#1} 487 | \addcontentsline{toc}{chapter}{#1} 488 | \setcounter{section}{0} 489 | 490 | } 491 | 492 | %examples: 493 | %\appendix{附\quad 录}% 494 | %\section{随机数的生成}% 495 | %\appendix{攻读博士学位期间取得的研究成果} 496 | %\appendix{致\quad 谢}% 497 | 498 | % added by Quansheng Guan 499 | \renewenvironment{verse} 500 | {\let\\\@centercr 501 | \list{}{\itemsep \z@ 502 | \itemindent -1.5em% 503 | \listparindent\itemindent 504 | \rightmargin \leftmargin 505 | \advance\leftmargin 1.5em}% 506 | \item\relax} 507 | {\endlist} 508 | \renewenvironment{quotation} 509 | {\list{}{\listparindent 1.5em% 510 | \itemindent \listparindent 511 | \rightmargin \leftmargin 512 | \parsep \z@ \@plus\p@}% 513 | \item\relax} 514 | {\endlist} 515 | \renewenvironment{quote} 516 | {\list{}{\rightmargin\leftmargin}%\vspace{-15pt} 517 | \item\relax} 518 | {\endlist} 519 | 520 | %%定理环境 521 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 522 | \RequirePackage{bm} % 数学符号粗体 523 | %\RequirePackage[amsmath,thmmarks]{ntheorem} 524 | \RequirePackage{amsmath,amsthm,mathrsfs} 525 | %允许公式换页显示,否则大型推导公式都在一页内, 526 | %一页显示不下放到第二页,导致很大的空白空间,很不好看 527 | \allowdisplaybreaks[4] 528 | %\setlength\jot{1pt} %公式之间的距离,TODO 529 | 530 | \newtheoremstyle{definition}% name 531 | {0pt}% Space above, empty = `usual value' 532 | {0pt}% Space below 533 | {}% Body font \itshape 534 | {\parindent}% Indent amount (empty = no indent, \parindent = para indent) 535 | {\bfseries}% Thm head font 536 | {:}% Punctuation after thm head 537 | {0.5em}% Space after thm head: \newline = linebreak 538 | {}% Thm head spec 539 | \theoremstyle{definition} 540 | \newtheorem{definition}{定义~}[chapter] 541 | \newtheorem{example}{例~}[chapter] 542 | \newtheorem{remark}{说明~}[chapter] 543 | 544 | 545 | \newtheoremstyle{plain}% name 546 | {0pt}% Space above, empty = `usual value' 547 | {0pt}% Space below 548 | {\itshape}% Body font \itshape 549 | {\parindent}% Indent amount (empty = no indent, \parindent = para indent) 550 | {\bfseries}% Thm head font 551 | {:}% Punctuation after thm head 552 | {0.5em}% Space after thm head: \newline = linebreak 553 | {}% Thm head spec 554 | \theoremstyle{plain} 555 | \newtheorem{proposition}{命题~}[chapter] 556 | \newtheorem{lemma}{引理~}[chapter] 557 | \newtheorem{theorem}{定理~}[chapter] 558 | \newtheorem{axiom}{公理~}[chapter] 559 | \newtheorem{corollary}{ 推论~}[chapter] 560 | \newtheorem{case}{情形~}[chapter] 561 | \newtheorem{conjecture}{猜想~}[chapter] 562 | \newtheorem{property}{性质~}[chapter] 563 | 564 | \renewenvironment{proof}{\vskip 1pt\indent \itshape 证明:~\normalfont}{\hfill$\square$\vskip 0.01\baselineskip} %$\blacksquare$ 565 | %\renewcommand{\proofname}{\hskip 2em 证明:~} % 566 | %%%%%%%%%%%%%%%%% end of 定理环境 567 | \setlength\abovedisplayskip{4pt} 568 | \setlength\belowdisplayskip{4pt} 569 | 570 | \endinput 571 | %% End of file `scutthesis.cls'. 572 | -------------------------------------------------------------------------------- /template.tex: -------------------------------------------------------------------------------- 1 | \documentclass[a4paper, 11pt]{article} 2 | \usepackage{geometry} % 設定邊界 3 | \geometry{ 4 | top=1in, 5 | inner=1in, 6 | outer=1in, 7 | bottom=1in, 8 | headheight=3ex, 9 | headsep=2ex 10 | } 11 | \usepackage{tabu} 12 | \usepackage[T1]{fontenc} 13 | \usepackage{lmodern} 14 | \usepackage{amssymb,amsmath} 15 | \usepackage{ifxetex,ifluatex} 16 | \usepackage{fixltx2e} % provides \textsubscript 17 | % use upquote if available, for straight quotes in verbatim environments 18 | \IfFileExists{upquote.sty}{\usepackage{upquote}}{} 19 | \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex 20 | \usepackage[utf8]{inputenc} 21 | $if(euro)$ 22 | \usepackage{eurosym} 23 | $endif$ 24 | \else % if luatex or xelatex 25 | \usepackage{fontspec} % 允許設定字體 26 | \usepackage{xeCJK} % 分開設置中英文字型 27 | \setCJKmainfont{STSong} % 設定中文字型 28 | \setmainfont[Mapping=tex-text]{Times New Roman}%\rmfamily 使用的字体,默认英文和数字的字体。 % 設定英文字型 29 | \setromanfont{Georgia} % 字型 30 | \setmonofont{Courier New} 31 | \linespread{1.2}\selectfont % 行距 32 | \XeTeXlinebreaklocale "zh" % 針對中文自動換行 33 | \XeTeXlinebreakskip = 0pt plus 1pt % 字與字之間加入0pt至1pt的間距,確保左右對整齊 34 | \parindent 0em % 段落縮進 35 | \setlength{\parskip}{20pt} % 段落之間的距離 36 | \ifxetex 37 | \usepackage{xltxtra,xunicode} 38 | \fi 39 | \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} 40 | \newcommand{\euro}{€} 41 | $if(mainfont)$ 42 | \setmainfont{$mainfont$} 43 | $endif$ 44 | $if(sansfont)$ 45 | \setsansfont{$sansfont$} 46 | $endif$ 47 | $if(monofont)$ 48 | \setmonofont{$monofont$} 49 | $endif$ 50 | $if(mathfont)$ 51 | \setmathfont{$mathfont$} 52 | $endif$ 53 | \fi 54 | % use microtype if available 55 | \IfFileExists{microtype.sty}{\usepackage{microtype}}{} 56 | $if(geometry)$ 57 | \usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} 58 | $endif$ 59 | $if(natbib)$ 60 | \usepackage{natbib} 61 | \bibliographystyle{plainnat} 62 | $endif$ 63 | $if(biblatex)$ 64 | \usepackage{biblatex} 65 | $if(biblio-files)$ 66 | \bibliography{$biblio-files$} 67 | $endif$ 68 | $endif$ 69 | $if(listings)$ 70 | \usepackage{listings} 71 | $endif$ 72 | $if(lhs)$ 73 | \lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} 74 | $endif$ 75 | $if(highlighting-macros)$ 76 | $highlighting-macros$ 77 | $endif$ 78 | $if(verbatim-in-note)$ 79 | \usepackage{fancyvrb} 80 | $endif$ 81 | $if(tables)$ 82 | \usepackage{longtable} 83 | $endif$ 84 | 85 | \usepackage{graphicx} 86 | \usepackage{caption} 87 | % We will generate all images so they have a width \maxwidth. This means 88 | % that they will get their normal width if they fit onto the page, but 89 | % are scaled down if they would overflow the margins. 90 | \makeatletter 91 | \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth 92 | \else\Gin@nat@width\fi} 93 | \makeatother 94 | \let\Oldincludegraphics\includegraphics 95 | \renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}} 96 | \ifxetex 97 | \usepackage[setpagesize=false, % page size defined by xetex 98 | unicode=false, % unicode breaks when used with xetex 99 | xetex]{hyperref} 100 | \else 101 | \usepackage[unicode=true]{hyperref} 102 | \fi 103 | \hypersetup{breaklinks=true, 104 | bookmarks=true, 105 | pdfauthor={$author-meta$}, 106 | pdftitle={$title-meta$}, 107 | colorlinks=true, 108 | urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$, 109 | linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$, 110 | pdfborder={0 0 0}} 111 | \urlstyle{same} % don't use monospace font for urls 112 | $if(links-as-notes)$ 113 | % Make links footnotes instead of hotlinks: 114 | \renewcommand{\href}[2]{#2\footnote{\url{#1}}} 115 | $endif$ 116 | $if(strikeout)$ 117 | \usepackage[normalem]{ulem} 118 | % avoid problems with \sout in headers with hyperref: 119 | \pdfstringdefDisableCommands{\renewcommand{\sout}{}} 120 | $endif$ 121 | \setlength{\parindent}{0pt} 122 | %\setlength{\parskip}{6pt plus 2pt minus 1pt} 123 | \setlength{\emergencystretch}{3em} % prevent overfull lines 124 | 125 | \title{\huge 基于REST服务的最小物联网系统设计} % 設置標題,使用巨大字體 126 | \author{Phodal Huang} % 設置作者 127 | \date{February 2014} % 設置日期 128 | \usepackage{titling} 129 | \setlength{\droptitle}{-8em} % 將標題移動至頁面的上面 130 | 131 | \usepackage{fancyhdr} 132 | \usepackage{lastpage} 133 | \pagestyle{fancyplain} 134 | 135 | $if(numbersections)$ 136 | \setcounter{secnumdepth}{5} 137 | $else$ 138 | \setcounter{secnumdepth}{0} 139 | $endif$ 140 | $if(verbatim-in-note)$ 141 | \VerbatimFootnotes % allows verbatim text in footnotes 142 | $endif$ 143 | $if(lang)$ 144 | \ifxetex 145 | \usepackage{polyglossia} 146 | \setmainlanguage{$mainlang$} 147 | \else 148 | \usepackage[$lang$]{babel} 149 | \fi 150 | $endif$ 151 | $for(header-includes)$ 152 | $header-includes$ 153 | $endfor$ 154 | 155 | $if(title)$ 156 | \title{$title$} 157 | $endif$ 158 | \author{$for(author)$$author$$sep$ \and $endfor$} 159 | \date{$date$} 160 | 161 | %%%% 段落首行缩进两个字 %%%% 162 | \makeatletter 163 | \let\@afterindentfalse\@afterindenttrue 164 | \@afterindenttrue 165 | \makeatother 166 | \setlength{\parindent}{2em} %中文缩进两个汉字位 167 | 168 | 169 | %%%% 下面的命令重定义页面边距,使其符合中文刊物习惯 %%%% 170 | \addtolength{\topmargin}{-2pt} 171 | \setlength{\oddsidemargin}{0.63cm} % 3.17cm - 1 inch 172 | \setlength{\evensidemargin}{\oddsidemargin} 173 | \setlength{\textwidth}{14.66cm} 174 | \setlength{\textheight}{24.00cm} % 24.62 175 | 176 | %%%% 下面的命令设置行间距与段落间距 %%%% 177 | \linespread{1.4} 178 | % \setlength{\parskip}{1ex} 179 | \setlength{\parskip}{0.5\baselineskip} 180 | 181 | 182 | \begin{document} 183 | %%%% 定理类环境的定义 %%%% 184 | \newtheorem{example}{例} % 整体编号 185 | \newtheorem{algorithm}{算法} 186 | \newtheorem{theorem}{定理}[section] % 按 section 编号 187 | \newtheorem{definition}{定义} 188 | \newtheorem{axiom}{公理} 189 | \newtheorem{property}{性质} 190 | \newtheorem{proposition}{命题} 191 | \newtheorem{lemma}{引理} 192 | \newtheorem{corollary}{推论} 193 | \newtheorem{remark}{注解} 194 | \newtheorem{condition}{条件} 195 | \newtheorem{conclusion}{结论} 196 | \newtheorem{assumption}{假设} 197 | 198 | %%%% 重定义 %%%% 199 | \renewcommand{\contentsname}{目录} % 将Contents改为目录 200 | \renewcommand{\abstractname}{摘要} % 将Abstract改为摘要 201 | \renewcommand{\refname}{参考文献} % 将References改为参考文献 202 | \renewcommand{\indexname}{索引} 203 | \renewcommand{\figurename}{图} 204 | \renewcommand{\tablename}{表} 205 | \renewcommand{\appendixname}{附录} 206 | 207 | \maketitle 208 | 209 | $for(include-before)$ 210 | $include-before$ 211 | 212 | $endfor$ 213 | $if(toc)$ 214 | { 215 | \newpage 216 | \hypersetup{linkcolor=black} 217 | \setcounter{tocdepth}{$toc-depth$} 218 | \tableofcontents 219 | } 220 | \newpage 221 | $endif$ 222 | $body$ 223 | 224 | $if(natbib)$ 225 | $if(biblio-files)$ 226 | $if(biblio-title)$ 227 | $if(book-class)$ 228 | \renewcommand\bibname{$biblio-title$} 229 | $else$ 230 | \renewcommand\refname{$biblio-title$} 231 | $endif$ 232 | $endif$ 233 | \bibliography{$biblio-files$} 234 | 235 | $endif$ 236 | $endif$ 237 | $if(biblatex)$ 238 | \printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ 239 | 240 | $endif$ 241 | $for(include-after)$ 242 | $include-after$ 243 | 244 | $endfor$ 245 | \end{document} 246 | -------------------------------------------------------------------------------- /基于REST服务的最小物联网系统设计.ppt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/thesis/e991f3d3a84887f192431ee67cbc9675ad6962f9/基于REST服务的最小物联网系统设计.ppt --------------------------------------------------------------------------------