diff --git a/Makefile b/Makefile index abc6376..64fc63c 100644 --- a/Makefile +++ b/Makefile @@ -5,13 +5,24 @@ # Distributed under terms of the Apache license. # -pdf: +pdf2: @rm ./build/main.pdf @xelatex -output-directory=./build/ main.tex # @zathura ./build/main.pdf @open ./build/main.pdf +pdf: + xelatex main.tex + -bibtex main.aux + xelatex main.tex + xelatex main.tex + +show: pdf + @open main.pdf + + clean: @find . -name '*.aux' -print0 | xargs -0 rm -rf + @rm main.pdf @rm -rf *.lof *.log *.lot *.out *.toc *.bbl *.blg *.thm diff --git a/data/bibs.bib b/data/bibs.bib index 4e01c57..22d40d6 100644 --- a/data/bibs.bib +++ b/data/bibs.bib @@ -1,240 +1,167 @@ This file was created with JabRef 2.1 beta 2. Encoding: GB2312 -@book{kottwitz2011latex, - title={LaTeX Beginner's Guide}, - author={Kottwitz, S.}, - isbn={9781847199867}, - url={http://books.google.com.hk/books?id=rB1Cb62dVnUC}, +@inproceedings{2012The, + title={The Digital Twin Paradigm for Future NASA and U.S. Air Force Vehicles}, + author={ Glaessgen, E. and Stargel, D. }, + booktitle={Aiaa/asme/asce/ahs/asc Structures, Structural Dynamics ; Materials Conference Aiaa/asme/ahs Adaptive Structures Conference Aiaa}, + year={2012}, + abstract={Future generations of NASA and U.S. Air Force vehicles will require lighter mass while being subjected to higher loads and more extreme service conditions over longer time periods than the present generation. Current approaches for certification, fleet management and sustainment are largely based on statistical distributions of material properties, heuristic design philosophies, physical testing and assumed similitude between testing and operational conditions and will likely be unable to address these extreme requirements. To address the shortcomings of conventional approaches, a fundamental paradigm shift is needed. This paradigm shift, the Digital Twin, integrates ultra-high fidelity simulation with the vehicle's on-board integrated vehicle health management system, maintenance history and all available historical and fleet data to mirror the life of its flying twin and enable unprecedented levels of safety and reliability.}, +} + +@article{2011Reengineering, + title={Reengineering Aircraft Structural Life Prediction Using a Digital Twin}, + author={ Tuegel, E. J. and Ingraffea, A. R. and Eason, T. G. and Spottswood, S. M. }, + journal={International Journal of Aerospace Engineering}, + volume={2011}, + number={1687-5966}, year={2011}, - publisher={Packt Publishing} + abstract={Reengineering of the aircraft structural life prediction process to fully exploit advances in very high performance digital computing is proposed. The proposed process utilizes an ultrahigh fidelity model of individual aircraft by tail number, a Digital Twin, to integrate computation of structural deflections and temperatures in response to flight conditions, with resulting local damage and material state evolution. A conceptual model of how the Digital Twin can be used for predicting the life of aircraft structure and assuring its structural integrity is presented. The technical challenges to developing and deploying a Digital Twin are discussed in detail.}, } -@ARTICLE{idlemem, - author = {A. Acharya and S. Setia}, - title = {Availability and Utility of Idle Memory in Workstation Clusters}, - journal = {ACM SIGMETRICS Performance Evaluation Review}, - year = {1999} -} -%期刊文章 - -@TECHREPORT{sigsegv, - author = {E. A. Anderson and J. M. Neefe}, - title = {An Exploration of Network RAM}, - institution = {UC Berkley}, - year = {1994}, - number = {CSD-98-1000}, - month = dec -} -%技术报告? - -@ARTICLE{Myrinet, - author = {N.J. Boden and D. Cohen and R.E. Felderman and A.E. Kulawik and C. - L. Seitz and J.N. Seizovic and W. Su}, - title = {Myrinet: A Gigabit-per-Second Local Area Network}, - journal = {IEEE Micro}, - year = {1995}, - volume = {15}, - pages = {29--36}, - number = {1} -} -%期刊文章 - -@BOOK{ulk3rd, - title = {Understanding the Linux Kernel}, - publisher = {O'{\MakeUppercase{R}}eilly}, - year = {2005}, - author = {Daniel P. Bovet and Marco Cesati}, - edition = {3rd}, - booktitle = {Understanding the Linux Kernel}, - isbn = {0-596-00565-2} -} -%书籍 - -@BOOK{ldd3rd, - title = {Linux Device Drivers}, - publisher = {O'{\MakeUppercase{R}}eilly}, - year = {2005}, - author = {Jonathan Corbet and Alessandro Rubini and Greg Kroah-Hartman}, - edition = {3rd}, - booktitle = {Linux Device Drivers} -} -%书籍 - -@ARTICLE{GMM, - author = {M. J. Feeley and W. E. Morgan and F. H. Pighin and A. R. Karlin and - H. M. Levy and C. A. Thekkath}, - title = {Implementing Global Memory Management in a Workstation Cluster}, - journal = {ACM SIGOPS Operating Systems Review}, - year = {1995}, - pages = {201--212} -} -%期刊文章 - -@ARTICLE{nrd, - author = {M. D. Flouris and E. P. Markatos}, - title = {The Network RamDisk: Using Remote Memory on Heterogeneous NOWs}, - journal = {Cluster Computing}, - year = {1999}, - volume = {2}, - pages = {281--293}, - number = {4} -} -%期刊文章 - -@INPROCEEDINGS{1992GMM, - author = {M. J. Frankling and M. J. Carey and M. Livny}, - title = {Globla memory management in client-server DBMS architectures}, - booktitle = {Proceeding of the 18th VLDB Conference}, - year = {1992}, - month = aug -} -%会议论文? - -@INPROCEEDINGS{iSCSIIOprof, - author = {Jizhong Han and Dan Zhou and Xubin He and Jinzhu Gao}, - title = {I/{\MakeUppercase{O}} Profiling for Distributed IP Storage Systems}, - booktitle = {Proceeding of The Second International Conference on Embedded Software - and Systems}, - year = {2005}, - month = dec +@article{2017Digital, + title={Digital Twin: Mitigating Unpredictable, Undesirable Emergent Behavior in Complex Systems}, + author={ Grieves, M. and Vickers, J. }, + journal={Springer International Publishing}, + year={2017}, + abstract={Systems do not simply pop into existence. They progress through lifecycle phases of creation, production, operations, and disposal. The issues leading to undesirable and unpredicted emergent behavior are set in place during the phases of creation and production and realized during the operational phase, with many of those problematic issues due to human interaction. We propose that the idea of the Digital Twin, which links the physical system with its virtual equivalent can mitigate these problematic issues. We describe the Digital Twin concept and its development, show how it applies across the product lifecycle in defining and understanding system behavior, and define tests to evaluate how we are progressing. We discuss how the Digital Twin relates to Systems Engineering and how it can address the human interactions that lead to "normal accidents." We address both Digital Twin obstacles and opportunities, such as system replication and front running. We finish with NASA's current work with the Digital Twin.}, } -@INPROCEEDINGS{icache1, - author = {X. He and Q. Yang and M. Zhang}, - title = {A Caching Strategy to Improve iSCSI Performance}, - booktitle = {Proceeding of Local Computer Networks}, - year = {2002} +@article{2020Integration, + title={Integration of Digital Twin and Deep Learning in Cyber-Physical Systems: Towards Smart Manufacturing}, + author={ Lee, J. }, + volume={38}, + number={8}, + pages={901-910}, + year={2020}, + abstract={No abstract available.}, } -@MASTERSTHESIS{NFS, - author = {M. R. Hines and M. Lewandowski and K. Gopalan}, - title = {Anemone: Adaptive Network Memory Engine}, - school = {Florida State University}, - year = {2003} -} -%硕士论文 - -@INPROCEEDINGS{memserver, - author = {L. Iftode and K. Li and K. Petersen}, - title = {Memory Servers for Multicomputers}, - booktitle = {Proceeding of the IEEE Spring COMPCON 93}, - year = {1993}, - pages = {538-547}, - month = feb +@article{2017The, + title={The Digital Twin: Realizing the Cyber-Physical Production System for Industry 4.0}, + author={ Uhlemann, H. J. and Lehmann, C. and Steinhilper, R. }, + journal={Procedia CIRP}, + volume={61}, + pages={335-340}, + year={2017}, + abstract={Concerning current approaches to planning of manufacturing processes, the acquisition of a sufficient data basis of the relevant process information and subsequent development of feasible layout options requires 74% of the overall time-consumption. However, the application of fully automated techniques within planning processes is not yet common practice. Deficits are to be observed in the course of the use of a fully automated data acquisition of the underlying process data, a key element of Industry 4.0, as well as the evaluation and quantification and analysis of the gathered data. As the majority of the planning operations are conducted manually, the lack of any theoretical evaluation renders a benchmarking of the results difficult. Current planning processes analyze the manually achieved results with the aid of simulation. Evaluation and quantification of the planning procedure are limited by complexity that defies manual controllability. Research is therefore required with regard to automated data acquisition and selection, as the near real-time evaluation and analysis of a highly complex production systems relies on a real-time generated database. The paper presents practically feasible approaches to a multi-modal data acquisition approach, its requirements and limitations. The further concept of the Digital Twin for a production process enables a coupling of the production system with its digital equivalent as a base for an optimization with a minimized delay between the time of data acquisition and the creation of the Digital Twin. Therefore a digital data acquisition approach is necessary. As a consequence a cyber-physical production system can be generated, that opens up powerful applications. To ensure a maximum concordance of the cyber-physical process with its real-life model a multimodal data acquisition and evaluation has to be conducted. The paper therefore presents a concept for the composition of a database and proposes guidelines for the implementation of the Digital Twin in production systems in small and medium-sized enterprises.}, } -@INPROCEEDINGS{dodo, - author = {S. Koussih and A. Acharyam, S. Setia}, - title = {Dodo:A User-level System for Exploiting Idle Memory in Workstation - Clusters}, - booktitle = {Proceeding of the Eighth IEEE International Symposium on High Performance - Distributed Computing}, - year = {1999} +@article{2017C2PS, + title={C2PS: A Digital Twin Architecture Reference Model for the Cloud-Based Cyber-Physical Systems}, + author={ Alam, K. M. and Saddik, A El }, + journal={IEEE Access}, + volume={5}, + pages={2050-2062}, + year={2017}, + abstract={Cyber-physical system (CPS) is a new trend in the Internet-of-Things related research works, where physical systems act as the sensors to collect real-world information and communicate them to the computation modules (i.e. cyber layer), which further analyze and notify the findings to the corresponding physical systems through a feedback loop. Contemporary researchers recommend integrating cloud technologies in the CPS cyber layer to ensure the scalability of storage, computation, and cross domain communication capabilities. Though there exist a few descriptive models of the cloud-based CPS architecture, it is important to analytically describe the key CPS properties: computation, control, and communication. In this paper, we present a digital twin architecture reference model for the cloud-based CPS, C2PS, where we analytically describe the key properties of the C2PS. The model helps in identifying various degrees of basic and hybrid computation-interaction modes in this paradigm. We have designed C2PS smart interaction controller using a Bayesian belief network, so that the system dynamically considers current contexts. The composition of fuzzy rule base with the Bayes network further enables the system with reconfiguration capability. We also describe analytically, how C2PS subsystem communications can generate even more complex system-of-systems. Later, we present a telematics-based prototype driving assistance application for the vehicular domain of C2PS, VCPS, to demonstrate the efficacy of the architecture reference model.}, } -@ARTICLE{HPBD, - author = {S. Liang and R. Notonha and D. K. Panda}, - title = {Swapping to Remote Memory over InfiniBand: An Approach using a High - Performance Network Block Device}, - journal = {IEEE Cluster Computing}, - year = {2005}, - month = sep -} -%期刊文章 - -@BOOK{lkd2nd, - title = {Linux Kernel Development}, - publisher = {Sams Publishing}, - year = {2005}, - author = {Robert Love}, - edition = {2nd}, - booktitle = {Linux Kernel Development}, - isbn = {0-672-32720-1} -} -%书籍 - -@INPROCEEDINGS{rrmp, - author = {E. P. Markatos and G. Dramitions}, - title = {Implementation of a Reliable Remote Memory Pager}, - booktitle = {Proceeding of the 1996 Usenix Technical Conference}, - year = {1996} +@inproceedings{2005Digital, + title={Digital Twin Spark Ignition for Improved Fuel Economy and Emissions on Four Stroke Engines}, + author={ Ramtilak, A. and Joseph, A. and Sivakumar, G. and Bhat, S. S. }, + booktitle={SIAT 2005}, + year={2005}, + abstract={The Digital Twin Spark Ignition (DTS-i) is a concept developed specifically for small bore four stroke engines with two valves. Two spark plugs placed diametrically opposite to each other in the combustion chamber fire simultaneously igniting the charge. The benefit of this concept is improved fuel economy, better drivability, and reduced engine on a emissions. The concept has been successfully launched on two products namely 150 DTS-i and 180 DTS-i engine. The DTS-i concept helps the products meet the India 2005-emission standard without the use of secondary air injection and exhaust after treatment.}, } -@OTHER{stream, - author = {John McCalpin}, - etype = {CP}, - howpublished = {http://www.streambench.org}, - title = {Streambenchmark}, - url = {http://www.streambench.org} -} -%其他 - -@INPROCEEDINGS{Nswap, - author = {T. Newhall and S. Finney and K. Ganchevm and M. Spiegel}, - title = {Nswap:A Network Swapping Module for Linux Clusters}, - booktitle = {Proceeding of Euro-Par'03 International Conference on Parallel and - Distributed Computing}, - year = {2003}, - address = {Klagenfurt, Austria}, - month = aug +@article{2014On, + title={On the Effects of Modeling As-Manufactured Geometry: Toward Digital Twin}, + author={ Cerrone, A and Hochhalter, J and Heber, G and Ingraffea, A }, + journal={International Journal of Aerospace Engineering}, + volume={2014}, + year={2014}, + abstract={A simple, nonstandardized material test specimen, which fails along one of two different likely crack paths, is considered herein. The result of deviations in geometry on the order of tenths of a millimeter, this ambiguity in crack path motivates the consideration of as-manufactured component geometry in the design, assessment, and certification of structural systems. Herein, finite element models of as-manufactured specimens are generated and subsequently analyzed to resolve the crack-path ambiguity. The consequence and benefit of such a ???personalized??? methodology is the prediction of a crack path for each specimen based on its as-manufactured geometry, rather than a distribution of possible specimen geometries or nominal geometry. The consideration of as-manufactured characteristics is central to the Digital Twin concept. Therefore, this work is also intended to motivate its development.}, } -@INPROCEEDINGS{manager, - author = {J. Oleszkiewicz and L. Xiao and Y. Liu}, - title = {Parallel Network RAM: Effectively Utilizing Global Cluster memory - for Large Data-Intensive Parallel Programs}, - booktitle = {Proceeding of International Conference on Parallel Proceeding}, - year = {2004}, - pages = {577-592} +@article{2018Digital, + title={Digital Twin and Big Data Towards Smart Manufacturing and Industry 4.0: 360 Degree Comparison}, + author={ Qi, Q. and Tao, F. }, + journal={IEEE Access}, + pages={3585-3593}, + year={2018}, + abstract={With the advances in new-generation information technologies, especially big data and digital twin, smart manufacturing is becoming the focus of global manufacturing transformation and upgrading. Intelligence comes from data. Integrated analysis for the manufacturing big data is beneficial to all aspects of manufacturing. Besides, the digital twin paves a way for the cyber-physical integration of manufacturing, which is an important bottleneck to achieve smart manufacturing. In this paper, the big data and digital twin in manufacturing are reviewed, including their concept as well as their applications in product design, production planning, manufacturing, and predictive maintenance. On this basis, the similarities and differences between big data and digital twin are compared from the general and data perspectives. Since the big data and digital twin can be complementary, how they can be integrated to promote smart manufacturing are discussed.}, } -@ARTICLE{Quadrics, - author = {Fabrizio Petrini and Eitan Frachtenberg and Adolfy Hoisie and Salvador - Coll}, - title = {Performance Evaluation of the Quadrics Interconnection Network}, - journal = {Journal of Cluster Computing}, - year = {2003}, - volume = {6}, - pages = {125--142}, - number = {2}, - month = apr -} -%期刊文章 - -@INPROCEEDINGS{NBD, - author = {Sun, H. Tang and M. Chen and J. Fan}, - title = {A Scalable Dynamic Network Memory Service System}, - booktitle = {Proceeding of High-Performance Computing in Asia-Pacific Region}, - year = {2005} +@article{Anwer2017Shaping, + title={Shaping the digital twin for design and production engineering}, + author={Anwer and Nabil and Schleich and Benjamin and Mathieu and Luc and Wartzack and Sandro}, + journal={CIRP Annals}, + year={2017}, + abstract={The digitalization of manufacturing fuels the appl}, } -@INPROCEEDINGS{VMA, - author = {T. S. Trevisan and V. S. Costal and L. Whately and C. L. Amorim}, - title = {Distributed Shared Memory in Kernel Mode}, - booktitle = {Proceeding of Computer Architecture and High Performance Computing}, - year = {2002} +@article{陶飞2017Digital, + title={Digital twin workshop:a new paradigm for future workshop}, + author={陶飞 and 张萌 and 程江峰 and 戚庆林}, + journal={Computer Integrated Manufacturing Systems}, + volume={23}, + number={第1期}, + year={2017}, + abstract={With the integration and extensive applications for new generation of information technologies(such as cloud computing,internet of things,big data,mobile internet,artificial intelligence)in manufacturing industry,a number of countries had put forward their national advanced manufacturing development strategies,such as Industry4.0in Germany,Industrial Internet and manufacturing system based on Cyber-Physical Systems(CPS)in USA,as well as Made in China 2025 and Internet Plus Manufacturing in China.Although each of these strategies was proposed under different circumstances,one of the common purposes of these strategies was to achieve the interconnection,interoperability between physical world and the information world of manufacturing and the intelligent operation of manufacturing.As one of bottlenecks to achieve this purpose,the communication and interaction between the physical world and the information world of manufacturing must be solved.To solve the problem,a novel concept of Digital Twin Workshop(DTW)based on digital twin was proposed.Complementary to the concept,the characteristics,architecture,system composition,operating mechanism and enabling key technologies were also elaborated and discussed respectively.On this basis,the theory and implementation of the communication and interaction between physical and information world of workshop based on workshop digital twin data were discussed.}, } -@ARTICLE{bigmem, - author = {L. Xiao and S. Chen and X. Zhang}, - title = {Adaptive Memory Allocations in Clusters to Handle Unexpctedly Large - Data-Intensive Jobs}, - journal = {IEEE Transactions on Parallel and Distributed Systems}, - year = {2004}, - volume = {15}, - pages = {577-592}, - number = {6}, - month = jun +@inproceedings{2017Generating, + title={Generating Digital Twin Models using Knowledge Graphs for Industrial Production Lines}, + author={ Banerjee, A. and Dalal, R. and Mittal, S. and Joshi, K. P. }, + booktitle={9th ACM Web Science Conference, Industrial Knowledge Graphs}, + year={2017}, + abstract={Digital Twin models are computerized clones of physical assets that can be used for in-depth analysis. Industrial production lines tend to have multiple sensors to generate near real-time status information for production. Industrial Internet of Things datasets are difficult to analyze and infer valuable insights such as points of failure, estimated overhead. etc. In this paper we introduce a simple way of formalizing knowledge as digital twin models coming from sensors in industrial production lines. We present a way on to extract and infer knowledge from large scale production line data, and enhance manufacturing process management with reasoning capabilities, by introducing a semantic query mechanism. Our system primarily utilizes a graph-based query language equivalent to conjunctive queries and has been enriched with inference rules.}, } -%期刊文章 -@OTHER{IB, - etype = {OL}, - howpublished = {http://www.infinibandta.org/spec}, - key = {ITA}, - organization = {InfiniBand Trade Association}, - title = {The InfiniBand Architecture}, - url = {http://www.infinibandta.org/spec} +@article{Wagner2017The, + title={The role of the Industry 4.0 Asset Administration Shell and the Digital Twin during the life cycle of a plant}, + author={Wagner and C and Grothoff and J and Epple and U and Drath and R and Malakuti and S}, + journal={IEEE Int C Emerg}, + year={2017}, + abstract={Industry 4.0 has come up with an impressive number of additional terms and definitions e.g. Asset Administration Shell or Digital Twin. Those terms stand for Industry 4.0 core paradigms, but their meaning is not harmonized even among experts. This is a source of misunderstanding and confusion. In this paper, the mentioned terms are discussed along the life cycle of a plant. A plant's life cycle comprises the whole process from its idea to its destruction. During the discussion of the terms not only the concepts, but also the visions of Industry 4.0 are clarified. Goal of this paper is not to define additional terms, but to explain and substantiate existing ones and to solve apparent contradictions. Additional outcome of the discussion are architectural recommendations for an upcoming Industry 4.0 architecture. Moreover, suggestions for device manufacturers, system integrators, plant owners and Industry 4.0 architects are given.}, } -%其他 + +@article{韩辉2019Digital, + title={Digital Twin Service towards Smart Manufacturing}, + author={韩辉}, + journal={疾病监测}, + year={2019}, + abstract={参考译名:面向智能制造的"数字双胞胎"(Digital Twin)服务Digital twin provides an effective way for the cyber-physical integration of manufacturing. Meanwhile, smart manufacturing services could optimize the entire business processes and operation procedure of manufacturing, to achieve a new higher level of productivity. The combination of smart manufacturing services and digital twin would radically change product design, manufacturing, usage, MRO and other processes. Combined with the services, the digital twin will generate more reasonable manufacturing planning and precise production control to help achieve smart manufacturing, through the two-way connectivity between the virtual and physical worlds of manufacturing. This paper specifies and highlights how manufacturing services and digital twin are converged together and the various components of digital twin are used by manufacturers in the form of services.来源:【刊名】:Procedia CIRPISSN】:2212-8271【出版信息】:2018 Vol.72}, +} + +@article{2022Validation, + title={Validation of materials-informed digital twin: Mapping residual strains in HSLA steel weldment using high energy X-rays}, + author={ Fisher, Charles R. and Nygren, Kelly E. and Beaudoin, Armand J. }, + journal={Journal of manufacturing processes}, + number={74-Feb.}, + year={2022}, +} + +@article{2021SARS, + title={SARS-CoV-2 Spread Forecast Dynamic Model Validation Thorough Digital Twin Approach, Catalonia Case Study}, + author={ Pau, Fic and Joan, Gis and GIC V铆Ctor and XP I Palom茅S}, + year={2021}, +} + +@article{2021Research, + title={Research on Digital Twin Framework of Military Large-scale UAV Based on Cloud Computing}, + author={ Wang, Y. C. and Zhang, N. and Li, H. and Cao, J. }, + journal={Journal of Physics: Conference Series}, + volume={1738}, + number={1}, + pages={012052 (6pp)}, + year={2021}, + abstract={Firstly, this article explains the characteristics and advantages of military large-scale UAVs, and points out the three basic problems currently encountered by military large-scale UAVs; secondly, this article is based on the current design, manufacturing and application reality of large-scale military UAVs, analyzed the urgent need to build a cloud computing-based digital twin framework for military large-scale UAVs, and discussed in detail from the aspects of test cost, integrated perception, centralized control, business prediction, and mission planning; again, this article proposed cloud-based computing The digital twin framework for military large-scale UAVs discusses the composition and functions of each layer; finally, it points out the five directions and work priorities that need to be paid attention to in the construction of the digital twin system of military large-scale UAVs, including UAV model, flight status measurement, reliable propagation channel, intelligent command and control, and capability evaluation analysis.}, +} + +@article{2021Intelligent, + title={Intelligent Ironmaking Optimization Service on a Cloud Computing Platform by Digital Twin - ScienceDirect}, + author={ Zhou, H. and Yang, C. and Sun, Y. }, + journal={工程(英文)}, + year={2021}, + abstract={The shortage of computation methods and storage devices has largely limited the development of multiobjective optimization in industrial processes.To improve the operational levels of the process industries,we propose a multi-objective optimization framework based on cloud services and a cloud distribution system.Real-time data from manufacturing procedures are first temporarily stored in a local database,and then transferred to the relational database in the cloud.Next,a distribution system with elastic compute power is set up for the optimization framework.Finally,a multi-objective optimization model based on deep learning and an evolutionary algorithm is proposed to optimize several conflicting goals of the blast furnace ironmaking process.With the application of this optimization service in a cloud factory,iron production was found to increase by 83.91 td^(-1),the coke ratio decreased 13.50 kgt^(-1),and the silicon content decreased by an average of 0.047%.}, +} + +@misc{2021PRECISION, + title={PRECISION TREATMENT WITH MACHINE LEARNING AND DIGITAL TWIN TECHNOLOGY FOR OPTIMAL METABOLIC OUTCOMES}, + author={ Hadley, F. and Dunlap, T. A. and Poon, Tcy }, + year={2021}, + abstract={A patient health management platform accesses a metabolic profile for a patient and biosignals recorded for the patient during a current time period comprising sensor data and/or lab test data collected for the patient. The platform encodes the biosignals into a vector representation and inputs the vector representation into a patient-specific metabolic model to determine a metabolic state of the patient at a conclusion of the current time period. The patient-specific metabolic model comprises a set of parameter values determined based on labels assigned to the previous metabolic states and a function representing one or more effects of the plurality of biosignals of the personalized metabolic profile. The platform compares the determined metabolic state of the patient to a threshold metabolic state representing a target metabolism. The platform generates a patient-specific treatment recommendation outlining instructions for the patient to improve the determined metabolic state to the functional metabolic state.}, +} + diff --git a/data/chapter1-intro.tex b/data/chapter1-intro.tex index a5809c0..28ee492 100644 --- a/data/chapter1-intro.tex +++ b/data/chapter1-intro.tex @@ -1,82 +1,33 @@ % !Mode:: "TeX:UTF-8" -\chapter{简介} +\chapter{数字孪生} -\section{项目说明} +\section{概述} -欢迎使用北京航空航天大学毕业设计论文毕业设计论文\LaTeX{}模板, -本模板由北航开源俱乐部(BHOSC)维护,根据北京航空航天大学教务处的 -本科生毕业设计论文要求和研究生毕业设计论文要求来编写的。 +数字产品定义(Digital product definition, DPD)经历了从二维到三维的发展。业界提出了以产品设计为核心的数字仿真(DMU)、虚拟样机等技术,产品设计信息的定义和表达也越来越完善。近年来,国内外制造业的经验表明,3D数字化定义的产品模式已经成熟,其效益被反复验证。但是,目前的数字化产品定义还存在描述不涉及制造、运行和维护阶段、产品定义和过程定义之间缺乏相关性、后续模拟基于“理想定义”对真实产品的指导有限等问题。为了解决上述问题,“数字孪生”技术应运而生。数字孪生技术被誉为有望改变未来制造“游戏规则”的顶级技术。这项技术使用数据馈送来映射物理实体,并正在对工业的许多领域产生颠覆性的影响。德国信息技术和新媒体协会预测,在制造业市场中,数字孪生的价值是巨大的,到2025年将超过780亿欧元。Gartner已经连续两年(2016、2017)将数字孪生列为十大战略技术发展趋势之一。2017年11月,世界上最大的武器制造商洛克希德・马丁公司将数字孪生列为未来国防和航空航天工业的六大顶级技术。 -目前本模板支持本科、硕士和博士研究生毕业设计论文要求规范。 +数字孪生是真实产品的虚拟表示。它拥有产品的信息,从产品生命的开始一直到产品的处置。在网络物理系统的语境中,数字孪生可以被看作是一个网络表征,是其特征点的对象集合,其中泛函其物理机制、虚拟特征和与人的交互关系。 -本模板在编写过程中尽可能满足学校要求,但是由于原始规范主要针对Word。 -和\LaTeX{}之间不可避免的差异加之编写者的水平限制,本模板很难做到完全一致。 -我们十分欢迎北航的\LaTeX{}爱好者/专家参与到本模板的完善工作中, -希望本模板能够对各位同学的论文撰写工作提供便利, -感谢您对我们工作的信任以及任何可能的反馈和贡献。 -如果您对开发和完善本模板\,BUAAthesis.cls\,有兴趣, -或者有任何想法和建议,请与我们联系! +在真实的实践场景中,数字孪生往往会遇到复杂的现实问题,如海量信息的建模、处理问题,模型的结构化专有化问题等等。单一场景即有可能需要构建几千孪生体并处理每秒几十万量级的数据,如何根据已有知识构建模型,如何描述模型特征和状态,如何关联、分析、响应大量数据,是本篇文章的主要研究内容。 -{\heiti 注意:}本模板在尽可能满足学校要求的同时,在细节处理上, -倾向于遵从\LaTeX{}排版规范,避免使用奇怪的宏包和编写者认为不规范的设置。 -所以难免和学校提供的基于Word的样张存在细微差异,请谨慎使用! +鉴于以上生产需要,本文提出了一种实时分布式通信系统以及一种知识和事件模型化方法,解决大数据情况下实时响应和高效知识处理问题,并在自研的通用型数字孪生平台上进行验证。 -\section{相关信息} -\subsection{模板维护及联系方式} -\begin{tabular}{ll} - \multicolumn{2}{l}{北航开源俱乐部 BeiHang OpenSource Club (BHOSC)} \\ - GoogleGroup & \url{https://groups.google.com/d/forum/BHOSC/} \\ - Github & \url{https://github.com/BHOSC/} \\ - IRC & \#beihang-osc @ FreeNode -\end{tabular} -\subsection{代码托管及相关页面} -\begin{itemize} - \item 毕业设计论文模板代码 - \item[] \url{https://github.com/BHOSC/BUAAthesis/} - % TODO(huxuan): Others pages related to BUAAthesis - % \item 软件学院本科毕设答辩演示模板 - % \item[] \url{https://github.com/huxuan/latex\_buaasoft\_bachelor\_slide} - % \item 研究生毕设综述报告和开题报告模板 - % \item[] \url{https://github.com/JosephPeng/ZongshuKaiti\} -\end{itemize} +\section{总体方案} -\subsection{贡献者} -\begin{tabularx}{\textwidth}{@{\hspace{2em}}ll} - \href{https://github.com/JosephPeng/}{Joseph \footnote{目前的维护者}} & - \href{mailto:pengyongbuaa@gmail.com}{pengyongbuaa@gmail.com} \\ - \href{http://huxuan.org/}{huxuan \textsuperscript{1}} & - \href{mailto:i@huxuan.org}{i@huxuan.org} \\ -\end{tabularx} +数字孪生主要技术包括信息建模、信息采集同步,信息分析、智能决策等,虽然已经取得了很大发展,但是由于现在世界模型机理复杂、知识图谱建立困难以及有效数据采集分析困难等问题,限制了其实践形势。 -\subsection{项目协议} -本项目主要遵从以下两套协议 -\begin{itemize} - \item \href{http://www.gnu.org/licenses/gpl.txt} - {GNU General Public License (GPLv3)} - \item \href{http://www.latex-project.org/lppl.txt} - {\LaTeX{} Project Public License (LPPL)} -\end{itemize} -使用前请认真阅读相关协议,详情请见项目代码根目录下的 LICENSE 文件 +\subsection{通用平台设计} -\section{免责声明} -本模板为编写者依据北京航空航天大学研究生院及教务处出台的 -《北京航空航天大学研究生撰写学位论文规定(2009年7月修订)》和 -《本科生毕业设计(论文)撰写规范及要求》编写而成, -旨在方便北京航空航天大学毕业生撰写学位论文使用。 +\begin{figure}[h!] + \centering + \includegraphics[width=0.8\textwidth]{figure/f1.png} + \caption{系统结构图} + \label{fig-f1} +\end{figure} -如前所述,本模板为北航开源俱乐部\LaTeX{}爱好者依据学校的要求规范编写, -研究生院及教务处只提供毕业论文的写作规范,目前并未提供官方\LaTeX{}模板, -也未授权第三方模板为官方模板,故此模板仅为论文规范的参考实现, -不保证格式能完全满足审查老师要求。任何由于使用本模板而引起的论文格式等问题, -以及造成的可能后果,均与本模板编写者无关。 +\subsection{通讯网络} +\subsection{知识模型} +\subsection{状态与事件模型} -任何组织或个人以本模板为基础进行修改、扩展而生成新模板,请严格遵守相关协议。 -由于违反协议而引起的任何纠纷争端均与本模板编写者无关。 -\section{版本历史} -\begin{itemize} - \item[1.0] 2012/07/24 已完成大体功能,说明文档和细节方面还有待完善。 - % “a.b”为版本号,b为奇数时为内测版本,为偶数时为发行版。 -\end{itemize} diff --git a/data/chapter2.tex b/data/chapter2.tex new file mode 100644 index 0000000..703000b --- /dev/null +++ b/data/chapter2.tex @@ -0,0 +1,13 @@ +\chapter{平台设计} + +\section{整体架构} + +\section{功能设计} + +\section{sql设计} + +\section{后端设计} + +\section{前端设计} + +\section{交互逻辑} diff --git a/data/chapter3.tex b/data/chapter3.tex new file mode 100644 index 0000000..ebd250c --- /dev/null +++ b/data/chapter3.tex @@ -0,0 +1,107 @@ + +\chapter{通讯网络} + +\section{通讯拓扑} +\begin{figure}[h!] + \centering + \includegraphics[width=0.8\textwidth]{figure/f3.png} + \caption{通讯网络} + \label{fig-f3} +\end{figure} + +\section{通讯协议} + +\begin{table} + \centering + \caption{通讯帧} + \begin{tabular}{|l|l|l|l|l|l|l|l|} + \hline + \multicolumn{4}{|c|}{prefix} & \multicolumn{4}{c|}{count} \\ + \hline + typ & \multicolumn{3}{c|}{tag} & \multicolumn{4}{c|}{source} \\ + \hline + \multicolumn{4}{|c|}{target} & \multicolumn{4}{c|}{data} \\ + \hline + \multicolumn{8}{|c|}{data} \\ + \multicolumn{8}{|c|}{....} \\ + \multicolumn{8}{|c|}{data} \\ + \hline + \end{tabular} + \label{tab-col} +\end{table} + +\begin{itemize} + \item prefix(8bit) + \item count(8bit) + \item typ(4bit) + \item tag(4bit) + \item source(8bit) + \item target(8bit) + \item data +\end{itemize} + +\section{路由算法} + +rie树又被称为前缀树、字典树是一种用于快速检索的多叉树结构。字典树把字符串看成字符序列,根据字符串中字符序列的先后顺序构造从上到下的树结构,树结构中的每一条边都对应着一个字符。字典树上存储的字符串被视为从根节点到某个节点之间的一条路径,并在终点节点上做个标记"该节点对应词语的结尾",正因为有终点节点的存在,字典树不仅可以实现简单的存储字符串,还可以实现字符串的映射,只需要将相对应的值悬挂在终点节点上即可。 + +Trie的核心思想是空间换时间,有如下基本性质: +\begin{itemize} + \item - 根节点不包含字符,除根节点外每一个节点都只包含一个字符 + \item - 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串 + \item - 每个节点的所有子节点包含的字符都不相同 +\end{itemize} + +字典树能够利用字符串中的公共前缀,这样可能会节省内存,利用字符串的公共前缀可以减少查询字符串的时间,能够最大限度的减少无谓的字符串比较,同时在查询的过程中不需要预知待查询字符串的长度,沿着字典树的边进行匹配,查询效率比较高。 + + +\section{分布式选举协议} +\begin{figure}[h!] + \centering + \includegraphics[width=0.8\textwidth]{figure/f2.png} + \caption{选举协议} + \label{fig-f2} +\end{figure} + +分布式协议中,一个节点任一时刻处于以下三个状态之一: + +\begin{itemize} + \item 从动 + \item 候选者 + \item 主控 +\end{itemize} + +如上图所示,可以看出所有节点启动时都是从动状态;在一段时间内如果没有收到来自主控的心跳,从从动切换到候选者,发起选举;如果收到大多数的同意票(含自己的一票)则切换到主控状态;如果发现其他节点比自己更新,则主动切换到从动。 + +总之,系统中最多只有一个主控节点,如果在一段时间里发现没有主控,则大家通过选举-投票选出主控。主控会不停的给从动发心跳消息,表明自己的存活状态。如果主控节点故障,那么从动节点会转换成候选状态,重新选出主控。 + + +\section{硬实时通信} + +在工业控制领域实时(Real Time)是一个核心要求。实时系统是指计算的正确性不仅依赖于逻辑的正确性而且依赖于产生结果的时间,如果系统的时间限制不能得到满足,系统将会产生故障。在工业领域这种故障可能造成灾难性的结果。 + +在CPU资源调度方面,OS主要提供一个多任务(multitasking)的运行环境,以方便应用的开发。在开发某个应用时首先把工作拆解成多个任务(Task/Thread),每个任务都可以简化成一个简单的无限循环: + +\begin{lstlisting}[ + language={C}, + caption={基本调度过程}, + label={code-c-sample}, +] +void MyTask (void) +{ + while (1) { + Wait for an event to occur; + Perform task operation; + } +} +\end{lstlisting} + +如上面代码所示,任务(Task)都是等待event,然后处理事务。任何一个任务得以运行,都是因为它收到了一个Event,这个Event可能是一个中断、也可能是超时到期、还有可能是其他任务发出的IPC信号,继续追查发出IPC信号的任务最后的源头Event肯定是一个外部设备硬件中断或者是内部的Timer中断。中断引起了Event传递,形成了逐个运行多个任务的链条(Chain)。一个系统内部会存在很多条这种链条。 + +对实时(Real Time)系统来说,不仅仅要求OS能提供多任务环境,更要求任务能在极短的时间之内响应外部的中断事件。 + +对于终端节点来说硬实时通讯较好实现,利用时钟定时中断即可强制切换到高级别消息发送,但是终端节点一般作为信息发送和执行节点,不具备逻辑处理功能,在整体通讯延迟受最慢一级也就是逻辑处理层一般也是主机节点影响最大,为处理此问题,对消息进行分级,高优先级消息会先触发中断响应,并切换到执行状态,且不可被抢占。 + + +\section{终端通信} + +\section{性能分析} diff --git a/data/chapter4.tex b/data/chapter4.tex new file mode 100644 index 0000000..cae254f --- /dev/null +++ b/data/chapter4.tex @@ -0,0 +1,163 @@ + +\chapter{知识模型} + +\section{基本模型} + + 在建立数字孪生虚拟世界过程中,会有大大小小的规则、算法等知识纳入其中,任何规则算法归纳来讲都是描述任意虚拟或实体对象相关作用关系。本文归纳了这些规则、算法的共同特征,建立了一个一般性的知识模型,该模型是一个动态模型,其知识求解过程可根据特点纳入平台内运算或使用独立进程进行运算求解。 + 基本模型需要先建立三个外部特征,触发域、输入域、输出域。触发域主要用于设定触发求解过程的条件。输入域是指定该模型需要哪些虚拟/实体对象的什么参数。输出域是指定该模型输入影响范围和参数。 + 基本模型内部求解过程可以根据类型和功能特点选择提交公式或算法代码,或直接运行独立的求解程序。 + +\section{知识分类} + + 对于不同的知识或者说规则,根据其作用域和功能特点,将其分为现实类知识、虚拟类知识、仿真类知识 + +\subsection{现实类知识} + + 该类知识是具体场景下最底层知识,其触发域和输入域仅能为实体对象数据,虚拟场景运行与否不影响该类知识触发和生效作用。 + +\subsection{仿真类知识} + + 该类知识为虚拟环境中与实体对象对应的虚拟对象的数据的关联知识,其输出域可以设定于虚拟世界,也可作用于现实世界。 + +\subsection{虚拟类知识} + 该类知识其输出域仅能作用于虚拟世界。 + +\section{碰撞检测} + 碰撞检测目前定义为虚拟类知识,暂时其输出域数据无法作用于现实世界,主要用于虚拟世界用户交互检测。 +为了简化物体之间的碰撞检测运算,通常会对物体创建一个规则的几何外形将其包围。在本系统中,碰撞检测中将物体分为三种检测模型,点、AABB、球体。其中,AABB(axis-aligned bounding box)包围盒被称为轴对齐包围盒。 + +轴对齐包围盒是判断两个物体是否重叠的最快算法,物体被包裹在一个非旋转的(因此轴对齐的)盒中,并检查这些盒在三维坐标空间中的位置,以确定它们是否重叠。 + +由于性能原因,轴对齐是有一些约束的。两个非旋转的盒子之间是否重叠可以通过逻辑比较进行检查,而旋转的盒子则需要三角运算,这会导致性能下降。如果你有旋转的物体,可以通过修改边框的尺寸,这样盒子仍可以包裹物体,或者选择使用另一种边界几何类型,比如球体 (球体旋转,形状不会变)。 + +\subsection{点与AABB} +如果检测到一个点是否在 AABB 内部就非常简单了 — 我们只需要检查这个点的坐标是否在 AABB 内; 分别考虑到每种坐标轴。如果假设 $P_x$, $P_y$ 和 $P_z$ 是点的坐标, $B_{minX} - B_{maxX}$, $B_{minY} - B_{maxY}$, 和$B_{minZ}–B_{maxZ}$ 是 AABB 的每一个坐标轴的范围,我们可以使用以下公式计算两者之间的碰撞是否发生: + +\begin{lstlisting}[ + language={}, + label={code-js-sample}, +] +function isPointInsideAABB(point, box) { + return (point.x >= box.minX && point.x <= box.maxX) && + (point.y >= box.minY && point.y <= box.maxY) && + (point.z >= box.minY && point.z <= box.maxZ); +} +\end{lstlisting} + +\subsection{AABB与AABB} + +检查一个 AABB 是否和另一个 AABB 相交类似于检测两个点一样。我们只需要基于每一条坐标轴并利用盒子的边缘去检测。 + +\begin{lstlisting}[ + language={}, + label={code-js-sample}, +] +function intersect(a, b) { + return (a.minX <= b.maxX && a.maxX >= b.minX) && + (a.minY <= b.maxY && a.maxY >= b.minY) && + (a.minZ <= b.maxZ && a.maxZ >= b.minZ); +} +\end{lstlisting} + + +\section{刚体运动力学模型} + + 在虚拟世界中为关联现实设备运动状态,需要根据已有的传感器数据,如加速度、里程信息等估计实体对象运动姿态,或者由虚拟对象指导影响实体对象运动,两者相互作用皆需要实现基本的刚体运动。 + +刚体的运动主要基于牛顿三大定律来模拟: +\begin{itemize} + \item 1.惯性 物体在不受力时,总是保持速度不变. + \item 2.力,质量,加速度力在物体上产生加速度,满足$F = ma$. + \item 3.力的作用是相互的 +\end{itemize} + + +基于牛顿三大定律,在计算机中来模拟刚体的运动,物理引擎来模拟的流程大致都是这样的: + +对于每个物体,使用循环的方式来模拟: + + + +% 流程图定义基本形状 +\tikzstyle{startstop} = [rectangle, rounded corners, minimum width = 2cm, minimum height=1cm,text centered, draw = black] +\tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=2cm, minimum height=1cm, text centered, draw=black] +\tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black] +\tikzstyle{decision} = [diamond, aspect = 3, text centered, draw=black] +% 箭头形式 +\tikzstyle{arrow} = [->,>=stealth] + +\begin{center} +\begin{tikzpicture}[node distance=0.5cm] +%定义流程图具体形状 +\node[startstop](start){Start}; +\node[io, below of = start, yshift = -1cm](in1){分析受力}; +\node[process, below of = in1, yshift = -1cm](pro1){更新速度和位置}; +\node[process, below of = pro1, yshift = -1cm](pro2){碰撞检测}; +\node[io, below of = pro2, yshift = -1cm](out1){解决约束}; +\node[decision, below of = out1, yshift = -1cm](dec1){到达稳态}; +\node[startstop, below of = dec1, yshift = -1cm](stop){显示结果}; +\coordinate (point1) at (-3cm, -6cm); +%连接具体形状 +\draw [arrow] (start) -- (in1); +\draw [arrow] (in1) -- (pro1); +\draw [arrow] (pro1) -- (pro2); +\draw [arrow] (pro1) -- (out1); +\draw [arrow] (out1) -- (dec1); + +\draw (dec1) -- node [above] {N} (point1); +\draw [arrow] (point1) |- (in1); +\draw [arrow] (dec1) -- node [right] {Y} (stop); +\end{tikzpicture} +\end{center} + +\subsection{理想粒子的运动} + +先不考虑物体的形状和旋转,把物体当成理想粒子来对待,根据牛顿定律来循环计算物体的速度和位置: +\[ dt = t_{i+1} - t_{i} \] +\[ v(t_{i+1}) = v(t_{i}) + (\frac{f(t_{i})}{m})dt \] +\[ p(t_{i+1}) = v(t_{i}) + v(t_{i+1})dt \] + +将其泰勒展开 + +\[ p(t_{i+1}) = p(t_{i}) + p^{'}(t_{i})dt + p^{''}(t_{i})\frac{dt^{2}}{2!} + p^{'''}(t_{i})\frac{dt^{3}}{3!} + ... \] + +对于浏览器按像素点实时位置渲染精度而言,3阶泰勒展开已符合精度要求。 + + + +\subsection{3d物体旋转运动} + +惯性张量 + +在三维空间中任取一点$Q$ 及一个直角坐标系$Q_{xyz}$,可以得到物体的惯性张量: + +\begin{equation} +I ={ +\left[ \begin{array}{ccc} + I_{xx} & I_{xy} & I_{xz}\\ + I_{yz} & I_{yy} & I_{yz}\\ + I_{zx} & I_{zy} & I_{zz} +\end{array} +\right ]} +\end{equation} + +对角元素$I_{xx}$,$I_{yy}$,$I_{yy}$是物体分别相对于$x$,$y$,$z$轴的转动惯量。 +\[ I_{xx} = \int{(r_{y}^{2}+r_z^2)dm} \] +\[ I_{yy} = \int{(r_{x}^{2}+r_z^2)dm} \] +\[ I_{zz} = \int{(r_{x}^{2}+r_y^2)dm} \] + +计算惯量积 +\[ I_{xy} = I_{yx} = - \int{(r_x r_y)dm} \] +\[ I_{xz} = I_{zx} = - \int{(r_x r_z)dm} \] +\[ I_{yz} = I_{zy} = - \int{(r_z r_y)dm} \] + +根据惯性张量计算力矩$\tau$,角将速度$d\omega$,角速度$\omega$。 +\[ \tau = \frac{dL}{dt} = I \frac{d\omega}{dt} \] +\[ d\omega = I^{-1} \tau dt \] +\[ \omega(t_{i+1}) = \omega(t_i) + (I^{-1} \tau(t_i)) dt \] + +用四元数$q$来表示刚体的旋转状态,刚体在$dt$时间内沿着$\omega$旋转了$|\omega dt|$的角度,得到 +\begin{equation} + q(t_{i+1}) = q(t_i) * [\cos{\frac{|\omega dt|}{2}},\sin{\frac{|\omega dt|}{2}}\frac{\omega}{|\omega|}] +\end{equation} + diff --git a/data/chapter5.tex b/data/chapter5.tex new file mode 100644 index 0000000..969b670 --- /dev/null +++ b/data/chapter5.tex @@ -0,0 +1,9 @@ +\chapter{状态与事件模型} + +\section{状态机制} + +\section{时序模型} + +\section{事件模型} + +\section{预测算法} diff --git a/data/conclusion.tex b/data/conclusion.tex index a976e83..51aeb00 100644 --- a/data/conclusion.tex +++ b/data/conclusion.tex @@ -2,15 +2,3 @@ \chapter*{结论\markboth{结论}{}} \addcontentsline{toc}{chapter}{结论} -本文主要介绍使用\LaTeX{}进行撰写论文的方法,文中范例丰富,涵盖基本的论文使用,在使用本\LaTeX{}模板时 -可直接复制后进行内容的替换更改即可使用。 - -在第一章主要介绍了\LaTeX{}的背景、本模板的维护者信息以及开源协议等; -在第二章介绍了各个操作系统平台下\LaTeX{}的配置方法; -在第三章介绍了各\LaTeX{}版本及软件的下载地址; -在第四章介绍了\LaTeX{}的基本常用语法以及代码示例,高阶使用技巧等; - -\ldots\ldots\ldots - -通过使用本模块来完成论文,可以基本掌握\LaTeX{}的使用,也在最小学习成本的基础上满足规范的论文格式,省去 -后期调格式之苦,使作者更专注于论文,亦可更高效的完成论文。 diff --git a/data/master/denotation.tex b/data/master/denotation.tex index 1f98ee2..5791d60 100644 --- a/data/master/denotation.tex +++ b/data/master/denotation.tex @@ -10,10 +10,14 @@ \item[physical entity] 物理对象 \item[virtual entity] 虚拟对象 \item[physical domain(space)] 物理域(物理空间) -\item[$E$] 能量 -\item[$m$] 质量 -\item[$c$] 光速 -\item[$P$] 概率 -\item[$T$] 时间 -\item[$v$] 速度 +\item[$L$] 角动量 +\item[$I$] 惯性张量 +\item[$\tau$] 力矩 +\item[$\omega$] 角速度 +% \item[$E$] 能量 +% \item[$m$] 质量 +% \item[$c$] 光速 +% \item[$P$] 概率 +% \item[$T$] 时间 +% \item[$v$] 速度 \end{denotation} diff --git a/data/reference.tex b/data/reference.tex index 231ab71..d904251 100644 --- a/data/reference.tex +++ b/data/reference.tex @@ -4,4 +4,4 @@ \addcontentsline{toc}{chapter}{参考文献} \nocite{*} \bibliography{data/bibs} -\cleardoublepage \ No newline at end of file +\cleardoublepage diff --git a/figure/f1.png b/figure/f1.png new file mode 100644 index 0000000..429552e Binary files /dev/null and b/figure/f1.png differ diff --git a/figure/f2.png b/figure/f2.png new file mode 100644 index 0000000..a732f84 Binary files /dev/null and b/figure/f2.png differ diff --git a/figure/f3.png b/figure/f3.png new file mode 100644 index 0000000..966a032 Binary files /dev/null and b/figure/f3.png differ diff --git a/figure/image.pdf b/figure/image.pdf deleted file mode 100644 index cb477d3..0000000 --- a/figure/image.pdf +++ /dev/null @@ -1,1407 +0,0 @@ -%PDF-1.6 % -1 0 obj <>/OCGs[6 0 R 31 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - application/pdf - - - image - - - Adobe Illustrator 25.0 (Windows) - 2021-12-05T16:51:19+09:00 - 2021-12-05T17:03:35+08:00 - 2021-12-05T17:03:35+08:00 - - - - 256 - 192 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAwAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AO/yh/KH8ttZ/LbQdT1PQ be6v7q3L3Fw5k5O3qMKmjAdBgZEsw/5UT+Uf/Us2v3y/8140i3f8qJ/KP/qWbX75f+a8aW3f8qJ/ KP8A6lm1++X/AJrxpbd/yon8o/8AqWbX75f+a8aW3f8AKifyj/6lm1++X/mvGlt3/Kifyj/6lm1+ +X/mvGlt3/Kifyj/AOpZtfvl/wCa8aW3f8qJ/KP/AKlm1++X/mvGlt3/ACon8o/+pZtfvl/5rxpb d/yon8o/+pZtfvl/5rxpbd/yon8o/wDqWbX75f8AmvGlt3/Kifyj/wCpZtfvl/5rxpbd/wAqJ/KP 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 QVUDoMUgP//Z - - - - proof:pdf - uuid:65E6390686CF11DBA6E2D887CEACB407 - xmp.did:da1aa433-5af4-0f48-a4ad-1ac98505a175 - uuid:f102bf80-db2a-451a-bc4e-715bcb7532ee - - uuid:3551369e-6143-43dc-9ad5-638045412661 - xmp.did:3f39c437-9597-b948-b3a6-b3cd5a1122e5 - uuid:65E6390686CF11DBA6E2D887CEACB407 - proof:pdf - - - - - saved - xmp.iid:da1aa433-5af4-0f48-a4ad-1ac98505a175 - 2021-12-05T16:51:14+08:00 - Adobe Illustrator 25.0 (Windows) - / - - - - Web - Adobe Illustrator - 1 - False - False - - 400.000000 - 300.000000 - Pixels - - - - - SourceHanSansCN-Regular - 思源黑体 CN - Regular - Open Type - Version 2.004;hotconv 1.0.118;makeotfexe 2.5.65603 - False - SourceHanSansCN-Regular.otf - - - - - - Cyan - Magenta - Yellow - Black - - - - - - 默认色板组 - 0 - - - - 白色 - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - 黑色 - CMYK - PROCESS - 92.941171 - 87.924010 - 89.019603 - 79.998469 - - - RGB 红 - CMYK - PROCESS - 0.000000 - 96.057063 - 94.692910 - 0.000000 - - - RGB 黄 - CMYK - PROCESS - 10.232700 - 0.000000 - 82.787818 - 0.000000 - - - RGB 绿 - CMYK - PROCESS - 61.385518 - 0.000000 - 100.000000 - 0.000000 - - - RGB 青 - CMYK - PROCESS - 54.818034 - 0.000000 - 17.749293 - 0.000000 - - - RGB 蓝 - CMYK - PROCESS - 92.437625 - 74.618143 - 0.000000 - 0.000000 - - - RGB 洋红 - CMYK - PROCESS - 37.152666 - 76.470584 - 0.000000 - 0.000000 - - - R=193 G=39 B=45 - CMYK - PROCESS - 30.704203 - 96.395814 - 89.282060 - 0.311284 - - - R=237 G=28 B=36 - CMYK - PROCESS - 6.631570 - 95.248336 - 88.165098 - 0.000000 - - - R=241 G=90 B=36 - CMYK - PROCESS - 4.168765 - 78.277254 - 87.420458 - 0.000000 - - - R=247 G=147 B=30 - CMYK - PROCESS - 3.326467 - 53.789574 - 87.890434 - 0.000000 - - - R=251 G=176 B=59 - CMYK - PROCESS - 3.155566 - 40.241092 - 79.378957 - 0.000000 - - - R=252 G=238 B=33 - CMYK - PROCESS - 8.706798 - 4.281681 - 84.188598 - 0.000000 - - - R=217 G=224 B=33 - CMYK - PROCESS - 24.496832 - 4.812695 - 88.274962 - 0.000000 - - - R=140 G=198 B=63 - CMYK - PROCESS - 52.657354 - 4.299992 - 88.769358 - 0.000000 - - - R=57 G=181 B=74 - CMYK - PROCESS - 71.654838 - 3.976501 - 89.727622 - 0.000000 - - - R=0 G=146 B=69 - CMYK - PROCESS - 82.153046 - 25.873196 - 94.540322 - 0.000000 - - - R=0 G=104 B=55 - CMYK - PROCESS - 89.062327 - 48.691538 - 99.887079 - 12.857251 - - - R=34 G=181 B=115 - CMYK - PROCESS - 73.119706 - 4.031434 - 70.296782 - 0.000000 - - - R=0 G=169 B=157 - CMYK - PROCESS - 76.195925 - 13.815518 - 46.472874 - 0.000000 - - - R=41 G=171 B=226 - CMYK - PROCESS - 71.493095 - 18.979171 - 7.040513 - 0.000000 - - - R=0 G=113 B=188 - CMYK - PROCESS - 85.931176 - 52.587163 - 5.535973 - 0.000000 - - - R=46 G=49 B=146 - CMYK - PROCESS - 94.308382 - 92.034787 - 6.817731 - 0.000000 - - - R=27 G=20 B=100 - CMYK - PROCESS - 99.890131 - 100.000000 - 56.227964 - 6.869611 - - - R=102 G=45 B=145 - CMYK - PROCESS - 74.422824 - 92.877084 - 4.782177 - 0.000000 - - - R=147 G=39 B=143 - CMYK - PROCESS - 54.363316 - 94.229037 - 5.300984 - 0.000000 - - - R=158 G=0 B=93 - CMYK - PROCESS - 48.963147 - 100.000000 - 45.465779 - 1.168841 - - - R=212 G=20 B=90 - CMYK - PROCESS - 21.271075 - 96.807808 - 47.934690 - 0.000000 - - - R=237 G=30 B=121 - CMYK - PROCESS - 7.318226 - 92.840463 - 23.675898 - 0.000000 - - - R=199 G=178 B=153 - CMYK - PROCESS - 27.014571 - 31.519035 - 39.740595 - 0.000000 - - - R=153 G=134 B=117 - CMYK - PROCESS - 47.473869 - 48.465705 - 52.770275 - 0.000000 - - - R=115 G=99 B=87 - CMYK - PROCESS - 61.647969 - 61.345845 - 64.623481 - 9.597924 - - - R=83 G=71 B=65 - CMYK - PROCESS - 69.369036 - 69.069958 - 70.214385 - 29.034865 - - - R=198 G=156 B=109 - CMYK - PROCESS - 28.302431 - 42.944989 - 59.780270 - 0.000000 - - - R=166 G=124 B=82 - CMYK - PROCESS - 43.195239 - 55.864805 - 72.469670 - 0.402838 - - - R=140 G=98 B=57 - CMYK - PROCESS - 51.039898 - 64.644843 - 86.056304 - 9.897001 - - - R=117 G=76 B=36 - CMYK - PROCESS - 55.831230 - 70.949870 - 98.220795 - 23.968871 - - - R=96 G=56 B=19 - CMYK - PROCESS - 58.672464 - 76.531619 - 100.000000 - 38.492408 - - - R=66 G=33 B=11 - CMYK - PROCESS - 65.099561 - 82.607764 - 100.000000 - 56.676584 - - - - - - 灰色 - 1 - - - - R=0 G=0 B=0 - CMYK - PROCESS - 92.941171 - 87.924010 - 89.019603 - 79.998469 - - - R=26 G=26 B=26 - CMYK - PROCESS - 84.460211 - 80.059505 - 79.012740 - 65.642786 - - - R=51 G=51 B=51 - CMYK - PROCESS - 79.150069 - 73.788047 - 71.343553 - 45.099562 - - - R=77 G=77 B=77 - CMYK - PROCESS - 73.763633 - 67.089337 - 63.955134 - 22.668803 - - - R=102 G=102 B=102 - CMYK - PROCESS - 67.409778 - 58.947122 - 56.102842 - 5.868620 - - - R=128 G=128 B=128 - CMYK - PROCESS - 57.457846 - 48.441291 - 45.477986 - 0.000000 - - - R=153 G=153 B=153 - CMYK - PROCESS - 46.198213 - 37.769130 - 35.367361 - 0.000000 - - - R=179 G=179 B=179 - CMYK - PROCESS - 34.619668 - 27.295336 - 25.937283 - 0.000000 - - - R=204 G=204 B=204 - CMYK - PROCESS - 23.514152 - 17.810330 - 17.239642 - 0.000000 - - - R=230 G=230 B=230 - CMYK - PROCESS - 11.630426 - 8.902113 - 8.902113 - 0.000000 - - - R=242 G=242 B=242 - CMYK - PROCESS - 6.298924 - 4.803540 - 4.803540 - 0.000000 - - - - - - Web 颜色组 - 1 - - - - R=63 G=169 B=245 - CMYK - PROCESS - 67.647821 - 23.639277 - 0.000000 - 0.000000 - - - R=122 G=201 B=67 - CMYK - PROCESS - 56.954294 - 0.000000 - 87.365526 - 0.000000 - - - R=255 G=147 B=30 - CMYK - PROCESS - 0.000000 - 54.879069 - 86.437780 - 0.000000 - - - R=255 G=29 B=37 - CMYK - PROCESS - 0.000000 - 93.359268 - 81.557941 - 0.000000 - - - R=255 G=123 B=172 - CMYK - PROCESS - 0.000000 - 66.503394 - 7.190051 - 0.000000 - - - R=189 G=204 B=212 - CMYK - PROCESS - 30.695048 - 15.655756 - 14.529639 - 0.000000 - - - - - - - Adobe PDF library 15.00 - 21.0.0 - - - - - - - - - - - - - - - - - - - - - - - - - -endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 400.0 300.0]/Type/Page>> endobj 33 0 obj <>stream -H4 -0 yۤzbux5ܽla StCJ#̈́6#bHbt_ Hx}I m2Aɔh 3gʕ1_ u'$lI!c7@ 9R>stream -8;Z\s9+J`[#Xg\3]=BusiAq^PupSZZS?.!"=B]ZXJh_Hl@:^n^'N63(9!K:1s.AUUXs'm\$lGm\[2?6F/[]f~> -endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> -endstream endobj 31 0 obj <> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 30 0 obj <> endobj 41 0 obj [43 0 R] endobj 42 0 obj <>stream -H\Pj0+ۍ$>+e!}WNH  3; Tϕ5TZcqBh3F;Z~K8y W?auCk߽FolK^O`64d*ݛ"Tx i6CHQI^ JjZ-=I崝sDBOP=FsQB{wxW|ikBT_x_ -endstream endobj 43 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <>stream -HA 0!N[UoNhl#!* -endstream endobj 47 0 obj <>stream -HtR{L[ehݸ+[ᚺaAlx@,L`QGF4cюa{y  J aAMLdDΈh1Sֹ?/9;''cn~/dhl\!BEz}k()| -(͊^_O/] ݋65S~˔?v@ڽ1O`B?[2{ZWdX^Z[;艎g$8WҾch@8ZwgqX-->RRģ8򧛵~FsN^ DoC?*}cU *c_ -k[=RsR;6> endobj 34 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <>stream -%!PS-Adobe-3.0 -%%Creator: Adobe Illustrator(R) 24.0 -%%AI8_CreatorVersion: 25.0.1 -%%For: (Frost) () -%%Title: (image.pdf) -%%CreationDate: 12/5/2021 5:03 PM -%%Canvassize: 16383 -%%BoundingBox: 0 -300 400 0 -%%HiResBoundingBox: 0 -300 400 0 -%%DocumentProcessColors: Cyan Magenta Yellow Black -%AI5_FileFormat 14.0 -%AI12_BuildNumber: 66 -%AI3_ColorUsage: Color -%AI7_ImageSettings: 0 -%%CMYKProcessColor: 1 1 1 1 ([套版色]) -%AI3_Cropmarks: 0 -300 400 0 -%AI3_TemplateBox: 200.5 -150.5 200.5 -150.5 -%AI3_TileBox: -220.869990237057 -447.600006103516 620.989990234375 147.419952392578 -%AI3_DocumentPreview: None -%AI5_ArtSize: 14400 14400 -%AI5_RulerUnits: 6 -%AI24_LargeCanvasScale: 1 -%AI9_ColorModel: 2 -%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 -%AI5_TargetResolution: 800 -%AI5_NumLayers: 1 -%AI9_OpenToView: -426.166788008815 258.754405498255 1.32378043194809 1543 918 18 0 0 56 108 0 0 0 1 1 0 1 1 0 0 -%AI5_OpenViewLayers: 7 -%%PageOrigin:-200 -450 -%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 -%AI9_Flatten: 1 -%AI12_CMSettings: 00.MS -%%EndComments - -endstream endobj 50 0 obj <>stream -%AI24_ZStandard_Data(/XD%~b?<Xs~/?ϬUU5J)%>O)8U; Y  Wt fʢԂҌGս*SZSB+qH%]0BDgJ>^%GZ_^ϒN R߽paމ$dI>QE¿hͲ+;7OMIB$sm|5 RA\ `!= L Qa A *\`„ T -TѨ^%=ZVW*?ꉕ03&W:0Rx.=MT>VoɒNȎE" OsQNAYfS嘎S)ya4̾.Oj:zxX2t&ad3IiT=Z-f:_yPrN^I.$jKRyoCMM򎚡?X'6QI!zN˒\AC";~?LzI\>ȺkI1(+֧R<:ZF8UgtJ|PQI>c%S>N/S]{Htrdc(|4S :٤[/m$eRTuȕFG JY"zW~^,փ~?3[rs+F3DDD:jGa\?\ڈ5puEeTlWC'SϦO ǫ$磐6AY}˛L$X9:?#Buخ>U.}\&@\Bi'n}$G+f]V&I]'|:!I;UFZ -mNmm6w6$8z@T*C,,DT8ppB :X :@P 8*hh8$иp 6p8$8zc&1 q 0qʶS>GtG|]Iqfܠ8FGK%L -@<`4$,aF]CѸKh2O$OHϯ*pb@Ag# #a&5Ab4 FC0A@ ~0fr'],RCM';'rv&m?CytGe. jr餒f"!3v2Ǖm\d-wBрx2xhb4h*(&$" "`4" xhܨѠA3S3F h$%B@P@P0EЁ ~`T2Gs(M9fY`48ah@01h0ēFbB""ȌF+lB"heh<UQEgU.F՚ - -p#`48a4\wt#+̋#hlƎN4v'h !ZD5V="zk2dzud2h@P=CCFc! Wx.$&*ab"BbјB$! & (0`4)a*2gF[BܰϡQUQg4" %QQfTЭ֙̑ghJ[|F/C}FC%uʘdB[n0d+́U"!JHDH@H\"%P,Q0E%b(*&($ &61A!Aq@( -P0(IDJ\B"BBB'&( `4&( -08 -@HS@PDPDPHPLP78H'EGJN㎹=YyжK95x+2GJFhXA0h;F>ȝO$!yi -`4 `4:шB\' Fϊ`4р8:1وFU  FC`4 h$Ah@ET@P0gFѨ8YEMA"S!Z`48FÊ w&*$ 'I0&aEHTDPDPLDHDHDD@D@D<h\EXETDEPE8hDLDD!aQA(D!F)>qK<y^~^I) LKJJgs)p%ш@<&7qq<::_# 6FQYUUI '1E% -N)Fb &v!̅ FCD DT1v}ž֢C2Qbfd:DT(1*h(ZƄ%Ҍ _o(l$, 얆vfVFf1cEQ%QQ,+**Wk(h$( 蔄tdTDd* U04>dWhD!fWkӊO΍M 3hBcFC%.4Xذ8F !6PT0 <`,0|`CH$i!h0.FF$ .2PIh-&`G& "8DHMBI 'Lpqa|d63 &a5x8Ca&XP ,H` "@fږHIp6XH0>`@qlpჅc>X\EpD$*P4 X&aL$ e"M$Tg4t",d $-PC$ 4DBH &J$: 0t`48x`L8ClP "P!Mx :D`T0 -s9(P@c6`bEp -TX |0 (@..` 8P`48p@.0P@ - -,X` @ -@*P -`!P0A0|pP  -(|@A -hPP AB 0th@P{x@ B, (df8ƒ :pa!C .,6\X\@ .>`a>PC N(x8a N`F :P .\tC (l &6d`({\l \`8XPWFlp.:t8B] &xpx p 8\pF#,h` -2`Å JpNB\pQB .P`4<`` .:pa2x…  =.F`C E6`p "pb46hp‡ !؀ 6\hAB`4&qDwŇ2TTi=IxCT@+3&0.JB`4,4Yj$=̜/*CIa͜Ļʹ`paXЁCE L..\\< ,L@:XpB  $lp c"1%Q 6!" J#\F"pЌ`G=`c&6p . %XЀ!>`@!0"*pЁCE!01J=7],Iy7YRi(QG)_J271y>>-j -5Kq.-lvU7]rզgɠsG+g“Gk7,?׎ofٛ]Zn/ٜnGgXlͳzuFRr=DN,!;nzS̆YY5(FҜY*faD%X$IN$}vgճoBf9B 4[eӚZL,{N#ʖh#=U9Ij 3WNyՎj9|)S!EZ6 ]:"7/IKB*Mg,2?C2ߐ|9=Rz.!0M##6=o*y8_bw4^=XQ걒ӶEbXm(O^ \23uRhἚݫcrjϟ-+,gaK"nk<`TvzkH9b/$=HHteFrvu#S)"a ܎оUM׆Sf'8F{OűGhR,d2Ng[,)G|b*u$uMyNkoJ%^O鼎-*ɥYڍgÚ&SzUߋXPW4K5͡ts%exOravԳع[F*ՎyKdGʘ×>kNҋbΠ ɏ~+z=ꦞd+i=SsV3Y,֫{ .g[h*~oޱ篂nUf6ʶ_iM!^?ŨR!LUetNUsO}YijݥؤկݑݥY6#Ozճ]M6{5QMPH6툂vZK>|HSֻ~s%`M]_[eŔ[Vݭ>㺛 J+.^!x6:%^>YLVGd|wni|zS(E%3T_?Ppz=Y^O:{>+w<ݽQ|C*W=zŝDbsԶȟHГ3d'vVf$,j OndxX96꒬VeQ NA -6Qx {*%Wjw,:1"LyFRng9uyp^6d:gi+rA,yu_y-VMlUfywXJ=l%Z9ȳRM:y&cQP]+םWˤu53=gZ -Y|=]%٬{-D7[iWSWzRƏIFO"vB14ie)ܘpx#4Fjcd'ʺl&_S^B1annC;WOs2Ueg YY9snW -ai7rl&~KeKXn{-3݆h~ؤ[SڋxRAjکbOGؖ'ds:hZ{L轪^3^|^X~$G.>gM Vo%:^+ Zx2mE\dey9ϣ6w#Sß^RBEyGG>JU#~I($R3ZD3eƕ:VOU#[)5=j*-s^a ǻb'Ξc$`-mZr-'ϒ}l)v5wjɪf4&ɜ%$srca_YWzy&h}Ϊܽ9RʪxY<鱃_ɼH{Hr,t/™l6ʧdŮ Nb'oR#V wͻkȇՙ\򎙗roWBs7/UJ;R]wjҪѝl X:ws}ķ3! +MeюegƳCRax'YG#IlO+e[YZpVx&+$oL$KGnz$y4sl -n"|m_x!s_1rKCbcW46't&GoX()$P2IT{%~'?Ll{_\h2vXQ -a/vSȇCo$ѤxǧEZ*ekkl>fV=4bvt}H^ ^xXPNIjV?DZm냦eo]L9&É 룯h-,s%!rݙ̮OIG+oƭ#ɿ`$j=2:@Tr6k>%r,Սuq}mX4r[~U~e#5>LgXm3#eGݔQ}%d_/R%ZɤYg3c}cY!3Ģ7*oV۳!:2"2ى.奌*/e"{\JU/{Ί,kOL ߍ-m6v+6o+}B(sIKMbL}A5)C/A(]#|檱ti/czUc㵒r: (VUD#N=mpS#23I5$"n0za֪USrcD6gqjf.cƅ=ɛY먟| #[ Sկ>2!n6J昤v[KժUHm1)36q&JYX(UcIGd]Bg"RM^$_eѳHF5QDBsMWB:0;wc7aEy2He23G5ʤӖq-ڍ3N-R#Rt$]NcrXWRvsVj\=*CW^n9Ϩi1XG>70d$y٫8#E۱mGQjW%G:>T6yuVETNN2O^!ْUdC'N='-2LrĽY 3bQXwQk1/İ#"ǎ%[m_H2v;w K;G)mT.^W'3ra$76Q;qHAZS-m貊#c -M:eEE9БO[F׺[ѩsHب`] k>ХvS8rh1I1NKcie5T6gf<挌DH|.Z˗K?ody+$*{Uj.™{aaUQ1)fQ62zq.f>RLF"eS+W.K+-U24]xISꏮmQ+QyRGѿ4<+'t\0?])Hv$ᑞyw7)Ǒ|#LB?nzRrM8ziW12_vB$ 2]GMn񝼦HiJUCʓi!bs0P›$lά;͜ئ›ѷ75WxW<Ǯ$|jH}hl;LKKXSU[3.RkׅbdqKf 7;,|e|?3nvgJ^'%V]DdwXHJe(Ɩ >MeGsl\52dJM\R-g#RΤ~Ǜel`$;k}nR%#Sq^SwM,,UΌ?^S/Oˈ''P҅S)*3 ,);cڻ3UnMMn1,,+,BI hxTG:NJw&il8z$O蜴Jx*sT"}P\7LA=DrjR׳+9(ՠFRj:=JZأmյJJ&e -.[FDJg%d/n4})p)ee %Dlսl)S-R}؍fw-G=dEht%2֩U6E912b?u_i i84U%M]ѕ$$9C,);U먚9W_gҽ:,Pک|I{\ˌ!;cB㪖'?y%$4McVƖ /}7<֬dDYT69ʤ@.;TI;{ ;O;M|KLDi:|g}q;84X#ꦙ;)DK:4m$uPZƱ-ۼηӻJo}ۍsC'Օ!z)49AhRtd_~TK:vTJJ;ΐdqIݹZOMRGҞvIR,~ N笴{=+F5NQ0Q%e&,*Ց5yIj>M;7lξ[O;YceC,1/˝92MZ$%x;Оןh':/(WG )nDbȫ]):3ވ ;ʕsɄ-gd>K>AK>'\]tƎά HIQ4˫|e$C,b=*ߴ\NX.gLyVZ2ooGXUmeѬsU ~`MzY&/mꈟ똵̸**S)?Ox,YysdϠ\a;'}l,I3~N&9N͆ll -ЌYی9s6MȌsg H0jCʪ&ٴHx< nXKxSfa;%SxgOI4bhtG;zmRL]eϤW4dx:DbdxwceMkn|+mFd|t2޲P,_=ɚ+ -Rݑ̬=ZOZv73 -Rx\&ՔS,&q\iŢ݊i1<~u{aVcNwfi(i#FucQqXhMs=Cs*l=d9FC*.l@$ L QA   0\"ƫ;H> TȀf ->lp -0LXcl6` ! -6(adrדSV?eO.qVbi$&eUFjfaG*GtOxEdI7>!?gAcSšzFx -VJ3*HU|fR."1]%vRgQ -/ ^뿴daI qCElVstC}{]?)UT-۔7LЦ -&ɤcf%+IK42430 Rfe'ehfRfXRVV#fd'sw)fhNX*ڝN M&1(tCWt(tgFaM{#OYUc] [JIHS -ӭ+ZSF+{!ʱ̹kd=yfh2YS7VwZErZ,V+gdSڍROCд|79q_Tk$XXZ~t^J2Gv!ibYsG}ҳ4»Dד/+>wF<88X(j"d:'kIaP S09byX,RWWGC#u)OSf:SXJR φfxig$^} 'z-a]b l;7Sf03&q_>YB2DO"dǫ">^ʵ*egْl3jjթ+WF)ټ:9zR}$O+Ol^{ٚ]dxtQTBtUR͆Y(r٧9G#;]('( 3ǯ +v=%}ٲ a"^j9I󰢗_C* ݁C3+},|2{;6gӹq2jHyhE֜19g1G^fQqhl.dIﲦ/6blK?ug'\C[ӕgӑRէBk9P\Y -e2it $lҘE,I3]iu}^owBdGFB;qZ^\Ў#Nܙi8gV2VepF96isMHq]#$";h(xP2{"4(zʬz+tnytdB$ᱺ{XLGmjrna<I9mS8({{Eb[ ViO S3BMbj{RwEwM_뉯Q$nU_^U)UUt6 Q -MFXN׵IIeS|R YDIrvdZw21dyL|[udSIlOI -+*UʦF4]|'\wiƐn%u* k^76Ye{'t":̣hBPoyxȨv#J3)h#z¢;TDtE?͐+.G)Wφd.OT$葢~sܑ}6>t0K*cZvYBߤB)bRq\x{uóGϲ2Z+vbMڝ!NZ!b]~mGibvI\ФaZ8L^JGAS"1B2E:g -͛16g'yo1>[K0BmҠdcاK 1n%=PЌ1H%`do:1ƆuQ"fƘ:x0?? qT;b{`4ߔbB0㬠LHQ=|3I5\l}%ocFRAȋAĜ+Ȑ1Diq;f8/d3V-1@ Տ4u?TZto!4ƋAl[FD鬄d.nʻc$p+1ˡo񷖲p/ ށYL$f~<bC,Q/ bXwn0LJJy}gH"[U*bMY1mbJaQ,X?S7*ޘ`0FqˢFq[]Ubo*4]xZ`hfQ< ~C{QLw1bxSHDŤ)(htf 2FCTPp8TxYe| -b5T̫1atʜ\ECd6vF3oו(f -4tijNz6'qV5`*zcb plqv{tҥ 7>s?gVeyqNvZY qzx(xx.Ũ7ם1+yYӳѺ;@QjȌ󫅲b0Gm/AE4]s`x^g{@z=yz,"(7z~`zNW,[k 3o ?qD˛#Ǒ%Ib[1i 3MZDžzcjF~=ɯF0R'*_)DHK9Uܚ>`~ǝ2zvI,J3.R>D kPTJ|~B< |3|Fݑ|v!"hD/ёj4s`" Pğo!" T>N.ţ# DH B\G 3\v)a -̟s[? t_;&4܎ %ph]j,ԻVaVd2p&nL,I_Wf,6>$Ûr:MS^h1-=-/-&2VFːhm8=3rL7(iE~ ,ɬC=\A Gcj4b>Tv4gRUЫjSYcsƅ[F2`r?nIBmnkiXCtꙚ%MZiץunrm=͹%Dmq&.?t-}.)1$Wkƚc:ܗk_٫6G#.^¦-QT~1fjbmcgVcPdt-NԲ-v:{fzuv[Y~ ]ƒ-e$z0|XiwO#@u#M퐒ͫZBM[&v`MzX8TRu[m V{-@ZBv&(DՎuÑKT)adpj_[-]mFsY^-ډ$n% jt"X?\ڸ[.K@=%:X@S Mם]mBKy]M~FE -( j/vh|VP*0P -|vchn5H^aۼ6Ww+PO#YurkC$)Ox˖(,H^^YfW4a6ڋ~Ґ;E] zW3G.tmi+MN! -knY;;-DөE(5ѯCfm//òY{MY YkJPOˏf~XYtLZ!cYCud{|S؟Dt˱nFR e_QqhPZA8L1%>j+.4K6f-DO4U5B,Dž~|bv!Ӟ \dxc5#Ӧ^Xg)[h> .Lb ´?G۪<9aա= lѼTl5/ПHi粺 J~& y2vGB8mp,Gp#UG;k4N}FmWSєQ7?ܪ|zՆ.Mch4o78][4Jx#$kcҬn=:L`!6k+jv1,hqfmm'v P/򪼭ӕطo5&^( vioS "IȟŝHB{y KC2aBQāܣIg"zPF1717g7rn~;#=jȹ1&0Q y^Kۈ~*S|+GfL E9Rs-"sCcb{T2{=Yxɹo5)*%9s ޸BzU -R椤c-&D_ӭz - -^t(4mܥR]<P4U*x]i&pZ1mP -MK 0tI(u5/t8 0Г: I7$AKR״]K񖺓lbZs{TϙWsmg찖QS*;k6IHQOMh@@Ф;N `S@d 3S@&TW8>Fp<0ۤnR6}\UמF4٘ -ڠ͡bx^:a"O^Ŀ ۶(57'St jyx(&&s{a;Fm-hf81Mh4U.+̜A邇wy'j$|whaM87v4\mC Ƌؔ"4C)'&}%o⛤Z$օ|8lMq@/:7P -]玻~M9Iȫqg9m䆚 ;3bH&uX'@zϰw!Q# Snɱ@ۢNу -Şeyn*34YL| ~hj3 -}tOlOʉv>>u֌; 9qOXL7z}>v£1166YS$IOz,azSi7J@I -ӳBU/gKp_,Dt׏ou*;b#i?x:nhgT,y_G dNVS\瑻a8+L}p]%F:gպ7Zv:98{{#S;d6gF\76Л 9*D.d2 CciOD>Uzzt(v`piGɅ_vC|/c< g|oR.?&zfo~T:}$DSu'Uf"* v& ^֧6`?ƾMs8frPa_w*!~x~IJK]7cYǏ !L~'F0/mDЯcW{_J8#q6ZGU\2I#ak!~N+|ǍgW`aE-6˟ nuŀN,zJJZ8l?aVSYP]Jv#< , .@Èb:+/)= bAs3e087! <`(+ШûP@oN- _c%we2-[v=W@J,QAƦM,ZBÅA $oUV1 -pc0±o*c׽iICjHR9pZ'0'YLyp-9-υ ?1S5!]~+= -*䮵c9C Mnwo@ϖ`D7C^wY.rZ)-?e 9Ea d0,DI\DnKJRS+T==ƕ%)93e*`v9 Pa-+*u6 >OU'8F: t{̈́8';qoC 6)=z97ҴS:١+ ӊHnO7C kbǸ^ X7xʳa3z/~gsߦ&yRo|Gk@p_z?0^}^ @sK4!$To=kGC -CQE׽rQ~Q#U-ut@X^ZpW6EFɄ-1pxŮMq&ܒRgPPb.J^wc±Ю I5jAd k!tTM8/n PZل1^xJ" ytkuŋ5b6f^ Ff -cm5Ld-Hל{m88@20'-b>><=Op@1w -7]DJB*ך l'pT:i]V :-ڟxV}Oͥ#JߋL!ϐŸ= jJI51X48(cgơؼKXV M@Si,:ZQ`^6Lz[I9Pľ'C(;xӥfen9"QۣRe;Όk'iyAT=h }1/et/?wJ·0ܸ%m[ôx( AZZ(9CUhh=Brxdoxb|Lk2ɔn_s ǎK K@O:!25d(!V,8c}[p}[;XVhFR/ʍ FBjȑ%oyGN~ꉳqZNL#o P8u#%!=ӗ>+FlM$E7W n)TC8y耾QPlW50Ѐwln lƑrU\5T^0- @؇ΦZ2H -Op64nsĕ@"EOKy|IlQ26ʡ`kub^oڑN_Fr= R q-. Wv،:7P_fT{JA?ELC%2|VK=HZ׭(eH4>I"?I1yXX2- -Х|p|,67Z+1J!y] x_H9-T4"W ]4Үn--Hp)x u:zB~(BYv*,IC˜N$SoMQ2X'SONj5˰d*\M$7EA

.\nnL-{ACk&RyЭ-i`fzE}P{_"$[j ċ4[%CjY*n 1g]Ap)Z2.|sIva~FPC&S%Qwy 3'z~T@AL_{5Hdxp_hG8n՟J<@Gt/1;5zL?`Tte=j=m'NBC˃9 w ЭޗlAC$L:Mȼ6iCUN]y1mg%ͭ Оэ5F/8A&zצƒ9p@RҌtN(0ߍew!\)R&168M> qؘ - ,1UrU:ko- -(<* z+R,\?6G% /l v%|4rR$:]s)gGK_FMl9;b' -*4-t7˵(kB—HHn!_Hd>p"cO#LxF+qĜ/X)R,BO7;ZI^|T4gB6lɒ%qV-F:zToWXrGR_rጞc=PS`R ~ ]R ⟋ ^TLomM*áL."ϴ95\c"hhN.T^4(#QNd/X7J -)dOK!!,[zw&ဵpi4 Y8]8`Wd{`hkjH H|,1}JgQ༎@CӫxM lv 2e&#io z<ݬRJ/zKbc#W#6 0 1䒡DlKK<#gڡ`Tke2SZANZ5&,h(.4T5;w?Ћidpy9҈98VkÔĠ!̣]("Ӣ=}/;{ ez84.ax4mGGt#W4dfev'yRtL'1w1[ڭ#]s -*^9ФCl4JR40-x[h %R"97RKyf #S͗h5OMsgF1⼐ȶl]hce $ތIҪY*Pw|˟JET7,qGObJ_G) b,A4oykZp{=d - -7K1'%}u]k oA2.]\3-Ahq8no{!YϪYՄ#m>1Q.)7Hjt9"͡/䝃Ӫ:_^MM|-%=#TF8YѤ -6~3F\#;QnXäeE@gES5\BqDzޕ\aw9[H$e#,55e2|X yTUD^H-_,`8RH"^|tgR"#wUϢaM zب:M-" -z#AK8 'u0P *eY㕮Ƶv;0=4=ۦrI_;>Mx1|`@^>Kդ+4|x1(DWUy,EpןGԂG93i o'^R 2 55l'lDBG-[¯I-Vΐe ~C ƌ &~Jv' -r{_H4' ok-`=ހ5~3'=0N8eލ:!gP-Xs8B"''K^.dK " Gۓf_u>=-G+A{n5>r7s'…vNf/O4SҠ"bqBw۩Jh&dEL-•ݓ1DX:&5}Q6φ<ԇ)1pChW}N?=ͫIрj -Z"|;ͱ% `0\T`Og WJVt^EBȕI1@%{jt?H7U~1bms83UA uir6NZ8T=͈]XHAyĉڃp1>f[:_g8<$ja'WHZ2z3wa_(28y'dT3VKC~!J1Tu;&Őꮌ*fjlIxRm~4USɥ=:欐 v}`ikⓄ|skm$؞(uch=R(`gÍ#p\Un cETW+=`cƫdlnsUD۫/|U B@b]ͲΦ`6@%ݯ\ʮwXqarE^w1SDW=1B,9N&'DʣOfU{p1. 挄WN`!\)+tz찰-s{)W8&WY3?Lh -l -hJU&%Bp:bM޺ʶY ԨPMNGގ?-K ƌ6N@QM=r.vՀ*wEp 4 fI$ q>oГ@RxP^6iy#S|S0]W;FKA5ʁTW#,]qa\.IއQA8}D(Ue@nRI?iKf,ж&qTʖ@ pLZDEBSVii0&'6r7,{'5OՊ, -:"a"d`B'=3T7NU^ʪ)T'.Q~ -hq֠?^MӦ3KZ(&ЧJUȑGXH]9LSR^Y2-P4t_4FTFI0c@d"Yۧa *UTqE`PA -0y\ܩЮPݡ2ѧQ 1{]FAߢ!ov?-\x(";/$sUBͯX\*X2HĒbR׉.V?(`An9:Ohy:W5Yuis>S%aVUKǬί XD `bm*gȹFۉm:9j#QGZ%/C)@}TƜV1xz+Y'wג^9;xqPm!؂Rȸh\""qk-/!LF^7o/ݑUXdBX+wTlfB`,4RCq*N,)"Mvp^UAq&e:9#~J]O׌:tؘӕqELT+nӁ~r ke%/Zpf3\\2m@U@*!*4#n!wp)6`^%W421yV,7 >`N6@TQoj6Q@^d&"Up %7STFFFJP!/@K=z4.x'ks0Ҡld+@TYEP0n m%(qx7Y\ y82m?brѧ}YyGoj$cU/ՈH[40`#%%$f4*;b۪0WSUᗬ4qgHCkwH#Lx(G 8kĀʴF@K8ק 4+75ͅJ 3Fn~mL}nO„2G:v88LyBAV :_@be\4<b6UGk #2*L@iQxNjX" hǂ%rG=`y4<-GP ˋU[ Mp / -w -fCz }e;-zQ zlڗH t{!K ^uo:6HfTI1`^,,"dGG3)ػ{#"ϑ CxD -4f06D$l®KB: K*WoJ Wbi- sWR>{̢q~IFc -b&&` p'^grYCs2 i-0,\c!y.|- -qCOU@BXrú6n4ˊؿsSâ뻨/< -,KnS*(x"sW !6HWQ] IV.2Q``x*=O(ң:x߶F4 &sY$I25xkCG<*zW>UߟwY:~J醨UA+V8Jft[/Ӄzj"A?^`RVD9U+w⦩MwB3F>@ڗ#|`^eX0ʻ籉gL ->V)X,gAW=ژ@r'~ "Pc&}e UȄB 5m!`J%'CSBh 3j@Lw~[:]&> ig*Je B?N\'];=<4Ӳ~oy!!XlL.YA6d85"kb^ S\u -bks3ۥ[SS0ؚ.\7y25El\7eMuGIQdbso(Ҝ\-N!F` "Ҍ._-N",x Jځ_5&N(h ؅F!fW0И,N/ݓǚCʍC+F -3|sL.v ,%`sȐZs)< m)!^mǭ@eCD0Bϸξj]-JrĶEqjRZ+~SUؕ 3RIW[(bF|q*Pht Qx(~WȯbRujUHAT }3eHe|Ρ2ʾO1DȂ2ٮ)OeȠ )3hR2M}#/#*JF7 -11 -"\4I/Qa-9ߦ*\BqM>M,Ae!tPFr7b `Nc?e'jl"Ԗ3Kf?wai[ϓ@۪'9E2~LJc#f|u qboLרv钯 6(ZfYy ǿhJ[)3:aRRG,|Ҳ; ~"V8Z$|ih㚘¢dϿ -[d)}~ r2(++3.֣%1d1Eo^a;)]l020ٰSjɉgI/#lsUԋhم."s"{?J%^ m|tGBylo} -ehnMDOApw(݌(ɫ -s3?nϖ;dh:wN2fiJ|TTh|E SNOV[)sA?ν2ht?Bdz ]]vLţ7lmAeBU -˷}NBkN) -9%`-*ꠉn?_qƊ<@}IFeYw9KlE8Qƍ -=%}**=M -jpi^DD*iDqް­u{St#'{zނ#څ>~~>k#wW7_$\#V;C6(զTa~pPα -hlP.6 -EF:|9!g5ǃuh&^8[I3[ 1CKR9;`= Idy$7|3~]ohp  y\7T .ݕwƆ!9w1tob"Rqyb :4QXv|፭I - 2R񆆻0=H*n$=`+* -)MIա|FךOKRխ8*>`roBqETV飋p&Yt:8A!V'I9)h_ණD`}_NP-&QF m]r~=sCЖw) -sC1Хx@ НOn9 c>7s(٬}>@09Z{)]IՇT.e+H$DZM -޵% e+s URj:_r4*XwI78m\W -$EoC-vrk44fwiÚ5Δ1P~ՇȂ #-W3fR?{ܫ"a-x0uXǙd - 3 ]}ú̊W+z\WsDZK|]&`!eĶ_ *hv(A PxF Msb 0O,*;TpƎ=ɢi'͆>"@h7QcEQj#.ҡb糹X(ֵ7p֕ -Dev+ΑZ Kd}81Xج!1Emލ/\\P@6Ң=5UV$*%B#~ _IIw(q~ 9[Ow()%Xp0ѹf X?T=3ꈻ(%]&=%OBz('`HDWy@{pr -+tcP߀ΰ|7J:wJ"lI>&Fj7ɫѢZPy-??ѥۉ.0mW] $J-{rxg hr0.h l$KO 1$Py*U4B`+9'4 C*#LfmoEXt/q`0p}&@"U\ -;9/^sxXF20w/MJ3P0,˜[wjQz.X1NDǂZaO ^2U!MX9BJfj`Dfl{{Qe E 8QY6.b2(qD(\/H8kz4l~Acq}׃`L\] -x!ϩ0]_ާ/&jKr~1Y,lZ3WSv2IOB /~"jaTx3+ekiqC{PQ2jio,wAˣ3x$V mx$HU䵠|4;Z/AQ&j.B jG/I(˃b̀eSz?1)!"zVJY$|͚x+󿿈12>g̼r ޤ@6I ukba;FlAꏀ2?BZOKA?LieERAܰIF[:kYtNB TeL=!ALkڗ '^cJ-0718vCW[ >CWuq{"7&|JeY|낷߶RlyӨzx >1XiCq>ؓ>RMJԉTKBv5*55æIZ;P'nah{Ccp,D"f' d)~"`GDPMr m+#R yL$šZD"#cK (=Kb#N~"Qq#&Ԯ+2-㈏/P\w {v@*UC|i]/'8,kAw?Ɏ?'yuT?]$գKufBUUF7. n%F^$Rzݴ {ڭz{(6%G"ȳe$* va = V#:Y?@]=pe‘-Yg̑}\䯤8ޱ۵9^"c+@w#_諫bScrurXgZ*f~ hTAբl_H P -@E_&+D\|"P"VDȿL!.b-yX\X~jf҅bv|g _ &[Z xrkBwҽMMUJtJӫ85>M=p $ݧ֡w,^CF)b -i5!#I!ZF9 1~t#F)V#Jrcc{֕]Xp}-BEoQx\ިH:j0Nl8=]7mD]]Sjbfrybs5{(쎹U"'{9%!(/x5+t&ѹ)4|U3GZaW`5qϚ,Mr1ͦe0CIxHJ/#A&)G&%-IHD|,ʰ Ea}Uz]=9is`/Tن -"`pւV7Jc;lS)X'IGq Q8kt!N%ZD"!R[Wv&A fKv11LQTdj_o x^Z1:0 qZmu!/ 9aF- wkݦ_nŽ#dS`/xdmN DvJߎa}{ rg\>1\f3sr:PGM 'W9/'4'ɐ\D.NǴO|@c `#Q|[7P̤Ǣ+]}< -8Zo,FQ&ZPD<\H>..BQS:nyGAgEܓ;m3AwSjјMFvV8Z)MԶQ2"#=vnC1ac9f rjAVF?Zll@VOV""&osOj3AWVaj| IiV*]\ERw2u Ib@a9;||pŶ־j:?ybdaR87f81z{>Ϻ.!4^. :K:qmy"N[5 ^JewAy=ɠX1 [Z˵t5XrDU8s`' -&~YgĘC -M[7TL:K?<r![4-*qJP٢SnqC&EZ`v~Ut?V~d(~#k֧3 ݃=576 eޙk:#$LD| 9iAϫ/:8$(OԾbi`(LE'G 10Ц+X+R+cpǕuJO-n<7Oe7+g_@feD*5BEOoR1 -m :\QЏ@t&]Pt~HKT2<$Vr xx)WSz\G: tH eT*}PDF*.rg!׌?r/kө F8.bn@DT!DI"jB)<ߖ9ĒYRs-)c1?6QK~VJBqOY* l#unʹ1̀?+իt)ӓǔNsfcUp*siih-xb+z*y,*4ŋ6G -M_ӂ<#r\-X`l S% !B`),Ea;t8IIC#swm2LtA_0Ͳ<;-nKIRK|n"/ZnÁ[r[ձU.X/ph6fC.25ȷcۤ%z LNZ9!)muцD6'ӷvX[*+M<"? =y"רяs}#7R1I6Ԭ&3i[f7#D \ 1߫A]V--a' Wc".)˭s{qdz5E\aa|I3?G&YgG<Ȅ2>U(Wx _)2&~G-x  -4md`,ڗnuި߀^" -}ۣFxq+Jٱ?W@Ǔ.E, |-I}h_o73$:]0 -G>aþBG&e}Cxp.o "783 .[S > 8r+Gp뜗Huơ7ܯA3޹%9_H)|;p},7FTpL"._)II@G.BCE;0!|52CK\ l1j)0nCW;yWBgj(4xM|ܱ*XM# Tu)l_ạ "`~/,/ͳK$|@jȧeթEX>TW pMC8$!cJP{hrDldb"y1yN1_BxT j7H)随F57uف{wmMMR6[b~G뱉i,ۓcw ;4Wv"Ë^-]ޱXF܊md`}@@D-L6lX+ -xTnR]ҁeϟ!z\N!_@ggl/ZOkFbv#XLt*MNvWSF&NuVFJuHoW[KyJ@`T zth.$Tp? 6ua~3h6 )+kZG»`XW?fĶ.Oٕ:4y'\|17>EAd=}-1T$c (-r}5uW24uT` %幒|!v +ɝc6O|:sUdu2crP4%aF휘;ꇫZry@w?9iQ?^?P̹ 3'PR$4QR2 Zh:%!R޽vn -*YRrtJ )b3{.۵w)Uk*w!꛱S\D{n-ZԷv1^uJTxcqScTcn).ڶSuqw}{bu=1bm-fZ\Wj;""^ȵ)WXM^b;CL<|gh7Tvۼ.j-^{}or}s0h&iƦzӚ;͚k7Qڊs;v"yvsfEJT齽jF"zE+&"flH"jcs\o]#q*ͷXs($Kq׺Bws\;:ۻnqBZcγ]wmgPu?4D̤)"gžȚ3&mAyaEOD`W09;|՟B|` -&eGC|_Py Whr/i bI_͛+3}>2m̨| YԷ:kW&\C74u҆_G }}!>03ş #7E4(9:i  2ˉY*m̨ ؓ!7jTʼ)2_ Y36j#i& (m|E4gffq}u3;+ r3y ee}抉q2{'NZQ4^RLvbIw*g.-GGnxl94_P\S74iʚ~qE4b24hM?fˉd2"zmatE ʄ53bN?,Ӑ9qısTF2eJ%^V)WJ#?<J#>7Z3hNc貅 AT0F+I?Q$ыLuC4 +M>GQ,S>GKi4PTht  2U<%cy~VSU Bvq}-(r+A%IҾ #d_ǀ-+K -iTcF5a} E8R < -&iđ1S ל=5epfc&&6+?&E҄A Zܗ9ŽQ2u҆MtAD) sڮ|ەj*_'#74M;7jS_,ߘ] s(ш:/&s2\P% -ida!dY: -LX[7eVm:{ކ'Ͱ: -AWvtڑ#i' -"fG8kTfLS)3*_J2H.49$$rBzb& .EI(TU=n[uiBAL#dS7+MGXSUy|eG$ta1f|&-SؒhYыWPĎ 3JP'rucX"5hPU#_x"z8AhP!Й"WL##h8`i:aCDʓ2Yc -Τ11cLA=n!F I肅dF+K  &4NP5NTYN+Sb0A7D$ᰡb@AƊyc%XQ -YtkȢ̚Fe` sޮHB<]Ny$ !`G*Yx`:qČ)=v[%י"o԰F|a% -&fS U5dQɔZ@y]' &k5eP idj"O ;af2gAH -Caul9Q(h8hVa0<&A z lB< ~r-paΟ0rwV2Di̞K !x~'.Y=ȖB7d̫`K}o#vGy:mXFǨac)Ērm>׏6+?4cOI_~{e t#C W#u[%LؼHC݈q2^ϬlEK)nhxP2F_$Gfli})7kR?ߠM}2)3ǭ ەfeʀ5y*S2.XIA SB# 0!BH7"#6㦥bɚ߀]1[L+ifOЌb,K<)sHȘB !!_g[I#cdʠ>/b /Ap+>P :2`W@DFqs%d%Uʘ"G G^FMfJ/̫PO)3}Û2g̖ӗr6cQG;pVG=sZ'NZ9@`!PErĐ,ym .xm#M͔5yB+#k gHR]|YL c@7rLLB%jo$JạH۠Eх ndo@_P@0E30YJKE4ŒõDT]'2d#/ @0Dw"8Iڏ(k21ߐWzC߁ހ dڈBEJI3ؑ∰3`o$ZbcFB`W1Wa0]LBFɧX-u%a ,~? -(f.}C.3fy*PD" [9Ž:L /dZv[t_.U>,O?R+Kg׏Y&Eƀ--UgPǡ膊 2ecF#Vd˟Hb<,_~7nS̘STWzF+PK֊TF.[;+K "Se9'cw YԈvE9mWO$3K3y>ܹ*u`7lT$ !c1^O# `Lp.2_OΜicf5p11^J%'agP`GR(Iq 8hW^4rEgnoЦ,sݗq},gN2{̞9FLʻL%/WKeLWSY6UΈA8gY^'myغ6sf(e|M>tZG% ;̠LׄQ4O&].U>;rX5@] 7U"GKO !aE4_Q*HHMH z0 3kƦ4Hp,RPCq -BqԬ~֒J1_L%XiaK%˔`   ch!9cƔ3BV~(S͊k"[|[-N<A&F-U=wÒD`\/D\!:mW?h 9"WJ TXy:Zt.XHAA"vqPy8iV% ԘgUm3)&I#(4֐M2`LSiVEm}.#7,kȤ<` 4l- e-&!˓+@H5)clq&EX{솾flx5y-%+!"]Hf"`?.(Od8I3}꺼 ٔI3Uey =0suڲY/cH&?e 6]y / >t(jt9}x]А'ngJ*g 8iV%Pđ1ǮӔE/Z?:qVWD%} hf0_,p1y0D=s]F,am:oVl!{w] `$Y)C9E5CUiy6ͪ|`}cNc -͚wADD@3 -Tc̱ddXi"sH"qPfa}5*}춼VEjHCTڔMr'|6/ZJT B"oڤʛr|-0򆭊 L+O12_N URe{{&ke'h8jTަߠU:rYP26 oernXz3K)3I3y[)d\fPf} `&P0sho ;{?GMˤ2Od:a|)tAҔ5}'4ZI2si!XN 3@2`M胧_]VPBk֢FᏠ R0q"|ОׯQWdH/'jr2^M%T D0Sc WJ"C8cH<"H#n`%y3*3#Ȳd[xkʦʝ8veș.)R+j1#nҬJ5gnyMڔRcx\ENN d+WI&k>(O׌M5dTd "eh/'f!9&@wa٧32 q~ -%h&;oY+(y6U]',M @P -Ax <(H >+4:d.Dw" 1_P1/ELH!5`m !?_P/ xA w#(j%~h! -n&ρO|~@Rv0D8C!B$ ^0]y `9"<PDEX&t YM4dWjC!W@>R v_Q)4Ds!?G HI0]]70BG} E5W?̀ dT0$@SIL H)C!$h4OS#0P  Da0C0#>H o'R( u?C.aGP$bF -aDLA;rW13E_sgΖ:+O̿PnߤU7 z "x^$Ծ -&iE4_̙1@x_-kEoHGe b8/sÖ}L(Lj( w! -DM> WSpEIG%jG5*+ LגpHXi!{]JT)'ewq!ċ!ċ^ƜC^u7DG~dLۜI}/>ă%BRH_b -#ۙA}/y,/4޴I+3{B-y*PP(13G؁y}e&!YVi6nRB \# ̀ zH]#Q()Cbԑ;RF rE -mho9QLQLLJDhh\hʞ Y9@aR<|: sRƀf+;} -Ue1ZxC|afly -n -nAA*DE>Ot%.Z=4dO>H ٩epA}3;/Y{E1Е@y^XG -ʩR*]Ɩ((e1k9{+J>(G?5oBJ>8z@F>@FkCX$PRFF.# G;pZ, F}(p6hRݖy% =IڇB9ad %dH2^1 GC3IR*U4NpR9@Ip)xe &m!1n 3 @It7R-}03sҰ> ۿ4P̞q\:bDu]mB|;övuܰN$e;F^Da3/!ddDvdb47v$|Yg#s{AkCbRox5y2k:?D¾Λ%iG nP9#E qiXi9p֬Q|."]+L&;H-SHF6iU \Upk5ʨAnCp 8!I6=r\=p\!;S\adQ2L 5` F&lIhSFW4Y+;bIp8ڨ@Oc("6+VX#1đ2F -ofܖicFm̬FQJpBvC!H <899h_ N oc($aX2E5shH''c,%67-}'l\vQ$93}̖t*=q;oЦ~ -7ZI*:lW΋+ԙ%ΘfJɜق2]|>H-AM.ܠ#A$i1#U9#4A:qV Y0Y3m s&#g b -V>GoXj"B|02XJ*8F(Aea&3MSw%ܹiԠCKʼ1Œ4O#6UlIy63fdx)CBL:4AӔI0[M#MYsp5]uh2 -yP>>=! ,)A҅4s*Qޮ xeO2 W,Q=uZ+M_´c|J/XJ$ٔC 9+sDi"H -$jg#i&œ nԑ%Lh:H@0d6!-=t[DC/(BFXb$I#lьY*đ 0)ŒBIwDfg2 #d'Ϋle8!m x%NZ xYJB/)_#&ul=,'e*% -idi!|A Li2G1_KЄ*#1`Io$T)G#:QrTQ e -s>p;2şZi?gf ze'l~oHW` WWSCe8E Zxy䆥 )oWBdeULP!aTLqV>'J4Lc3fMʍ(ظaceI|"y'‰$B^qҴ$a UaLsԬxLWԟ"mȰJ-y4DU*+F2pd`G:oܤV64̧S+][8Q;O!{At)x[G:mUgKaK&Lʼ9:v+!t7fm8dX'GQ\Ee5C?#dYUq̬̚%2#7SLi6%eޔY$3g5p6PxM$D~gR)bHYUlиR(MӦ5p@B$1 z0_0&3E#_L19kV bcA$̎zܶN,qȈ%HcladbڤU WBwkٖ{!* *<G^gO^ DY?߰]GXw|cC[z{ 6ta(b|4U -A̷ԍq -=K ݿQnIH?=ßg>}v%נӀNo$*9~9kab|~Ku0Mਈh5{;/@. -V;F/}{V}Z|{pn^ 3  s;o_%s78=4L ݛr+CV? '.N?.{ȇ~lWEJeߴs=Qh9^TVp= -XS('G甈zdE3V,6R_mw7TAOza%/w:{.|V&?CC Ԗސz}kuzkyLRjSjzml_pRl{.oB?JhlK7y?KOK =͟x7F*bs5>UH^L{(;χ>7af@wvm@a@'RKzWO~!rt&KK +ÁG Ro8Ncz zhH.rzcLLpZ[E;W>%]zΎqkXJ;韋/߇>0̿#HL츄eT8`8,,aAy؍fbqł׷T Э /ID#F~oH h.va'QL -yqg6f8{T@}ZF)zgs2BmlJVӹ|B7=[رwܔY!(+6GmDۼ0:`cw= -[(>|Qd„$D"one )$E_~9˩ TunkA$ SH@4n/`!APsOTG0]Q?sU\OM;ʉ*jIK9Sf{튟0@*h̅  ;e$ ߙ+Xۺ+QϪ{+O/FŊ6G;,L]xۇg>1FWEKw w^L# z\X7`'yʃ)'ܶ-{ߟƶ3ȹRxƙTrΤK -d)4`FۇuOͯWӾh -HsIE%ϋOhT$`4ԛXGIWf~5@ } .rGq 5Ch/`K2UQI*=)fBPRÛ Sk],.$=dZgՐuݍH342ʿ 0yHY,4Omk !jȫrdžmȧrg!8C_M"G; g =Ȍd]@^߉h)7B }Jg϶djQS".Q^"&9EG[TAIGjR|)_Ver(؆fn,yáDZ/c*q9S#Ť6KNYP[C|F#k᠄v3=^l "X68| t?f53A]14&i6Դ.pP!rCAz"D]]|6p`fȖзܥ֨ P=Zm8%D'@=c>*NH q0ACU(U?Y@ok]x64C N.?Mu/ x)bXYF|4M$/og3 DNƋ 6n^q|SZC- wK]'h -ĹHA"8|B&t^,,]lr_-)l -SQԨչwtdFt(bm!}@uT|o%b%rDhu8FICw̝g#%C9K2s M?e\ r(EN u*Eө#A`cgž1iDz 3FOBءqcQ*2O3/]2Nh hZ-De!FadMm#ћ8iin -q NI2h{-N.(Q : a6f"(r -hm%]t9\1@96=yK+zb1D_'m|8ayd^c鴵aәҔq)@S&6\5cp6Xj#Fmu$f 5bY &fRH1 /;k"~%Y|s̮Q ,̆+a5IOD )>!O4eAQw3 ? Y1)a={BNUYХbks=![6c^K8wNP8ZvJ3Z@]E ⽰>X%3%v'h˵iͼ$^lY BnȭQfWqcT\M=)^jyBXb:q01@bk,#8-;<]&iL/7C6ֳscq}H6%ȋD$<2ЗWeF ?nvux_X5hIQZ"@6=D/tQ"i+Ģ%hsǡ<!}G{ gZ^Qx2@:f􍴠!5'H ui/X zk c:`~cc6Uu hL  2I&37|$s1C_]01x܆ze}kv$ Ntrƍެ -fo3!iDC =VuKp~ Roɭs,_YA 4]Gk VәZÊE@#]'8; =M<4ޅ};:S:ON;Ͼ'V [_a7h|}+A/B^D 2R+@ڠVHܨp(忢i) >s8ݧSm~!J.VN`Q<I qЏі$ `n OI*Swq8Pc -CN񍊰6 cb'%$uOL]"$#;(ɕI18!H^ =1`L&uGq -$ԩdŠS {cP9!SB"NiC Jn H3;6p" W֙Á m N(He0v.?*Z=,}h"ޕLgn- E.C'Ywd![/W&O N/܁_onQ>Vndۤ'OK +)\=.v(n^7?EÙ%!/MHΜx7 Xs;OFŽiz}W\U{G2)6V -endstream endobj 51 0 obj <>stream -I6$ \Z  H% -cnSѧ,EHe[K]Hа {+ӷ0g%݆=U[^4bvI_/ls=>@1mm78l%qMZn>8.!L# ]BOqË^YD*FYGiM󄄸e)W0RQ0Wn=@Vl X+ DH:S/K n!>˂w,c.Z#/UPo‚U׮&wwDQ4dnLhGLB`h[X@"8\t]`8Btف;sQ*KР!뻼ݣs,w{fy'Tl` "*{ -JŴR!f%zp{_ߍqdkI#Ǯ 3@3͘k~R ) &ՕP<5iV v*wx0y[ a6ו(V+H_ 1!SYt0:rcDcv Nex[sXx | ; aA|B{8I;\ću݆2YVhmFDR+4(k!.Ȏ(sp˄ۗ@;Y,a`jkwmInͫJn8OeXQ 1KLdAծPey5Z !!f^m˒&D\ORw@JUE:4A}6;Vu6D`jq4&]ӹktu~5'a`Ou5Kj<iVEQrhzH"^my+y&qQKppZ1vdye85bRf!Ph%gj[ EtW!s}50!&蜋:ہ0s`{ dt)<}%`މ#d=t0M-o/A2v<5I7Ⱥ VLֳSbeT9JE0J=6E~ޕząCdjp-WԪƑ9#l -pX.a"uUF8~Tyy`yhy>질,"85֡٪#jOy]oM (Jf{vxۦ2~;}bobY."3hރjQxD 9A+7} vc4!/GI| -輴'0.DIJg66BhJ, -} go1I<)00+obH0r[Ty'0ioE4 15[%h"31^_S y8o΄ZٚREym*>0b{E(,X^kAM)U-A K -uS-DEĈp\}?JVR8rEvoK̯f[<W\Tràj%!:9je7 - qtYc^Up4hbSF1A`Q=5 - 4TeCh8-JkNd52l'dod܇UĦ$2Ulk7y*MqA]0Gs 9 8(']Q$ >7(d)Y,]Z Ũxˎ)hko7v(sj֯GOVY_+x‰v@1I ۛȧɧ -dZ$cobN=*(ߠV) }W +2tFGUs'yP6i:` " m+^ l+S..Mf/Qs|#FM^`b"|yCY#GiH lwVCD!O#-l(5}:4 VVJa`q7 L'Գv ٔe_hvc).]֛$܎Hu4oViImBN͎,dyRn)+yȣu >^Ҏʎ(,ls8ݑbP7 f 5֨0Hq]U_.M`UJMagUl·DfVgm/K֜{ͧAI}bQn|K'@P=x {]3 ~oŋ(!P@IR\յizh$T@1J|,]$;4_qNˀQȧPP_bOD'4}:r'}h?˩)(FwMf\iEieh{+qMujT],̒H\E`UC`K}ʥi~ -4ySmC(Xc (kyX9nNK - vdkybS{hXe@#¸s -{.jRQ(p>T{MrQm8y0>=֋U*)AI:Xpƴd3xRn 7)m<%3 7w#[h$:jܩqՄV:Q잙6 -2}v>x;5npl[ťMZIJDi\[d@%uVmTФw'i -"%L/@м~yTmF?fw:;"ÞnELyuÓ"Ȉ=k/#Q1n6Rxb+W!qūxJV4XGNkY ̐V|' --v𓮄7! -㟁Q%dfyLb/:BA o'*RM˷sX[4Ǭ  ģHt )%Kkp9\1fƼsZH 0oC (8`SF/˯Ju"aT~EZ qŖ$`(TMdN@RTOk?%4i;Zn(8I>^VJ(""ʝǂ"$Hmi$=ԚHU d˒Jk`Ɩ )%@n`6oݖAqhՋ:h Lesxbj h*߷ϼ0gQA>yK;*߆ - ^w͢tR5Pp7~$d=8@a`rD2hMMʯNGc}&6".oX^l tBJT`MKgs d{o*`^}.L@ξqqp>2Ct)8y~3x- lǹ@=x> ڔ -Ȑ`; bSV鷌>nRU;[m0Mat/kQ"]*"v f\L҈}h haW8SD ({WE$׏Ob\=꫾NXC%!(C\KNfv'9 y1;HJJuWw=}@>0ByA 2Es ,vwCKz5z Rɲ'\)I,tn뒬e5A='$iT* ҭ(u2߀U߉emlV 4, wH֫dKiGn٥hƕ)fh^G%H1cc0QG80!ͦ6d;?^tC@v5K_jg"b J^Hq u#},,Rw=_7)`:_{3R΋5KHp&3 WDi ziݞK!Xչy7ް>.5o%|O@9K^0ܺu%ߜ(vT)b6 Xy0.38l3DR1KXS8qA79mDi8xzO:_w`Y%p5B֭V@,HL֜K%ifXMA?)tD+/wTa:=e>zecwHKG0t"J "fZKᦗ&qPJK*h!Qo;9 A!(VXuM6$nJЇEC&3)A%fQda2Iuiy _t31R +L.{^g~ {J19sa6pKxyCCցBż&mv -cw(%%ʿD<8X`Ya=8߃a.q Ѕ|>2\b" ~}L-%KasKn @Gn #[-Vj %Rمd3DƦK\<R @}_1"%EPV!YbEĒ_X!#zv%ш:0C7 mUJL#TIA&pv%Df$H}IC]I MBi)= HzQZS£QJ%fP`J|-N$Z&O&gb]&KTa`䒴n X8aOItBʒ$Y90#\Y -I̭O=@PܓEC2RY$Q#VއEѪ! (t X$P -MdE?qqݑQ#<"=HGvHG1#TGL*gVxĺXD -vVVGșPoBكeU_7\5$jc`7B}bьm$ hgldX 5Ҕ`d4g3bvhBKF@W c(LnpPwHH1.h}\$zѻ E]pE.кZ.6?u̟'j^TPE)|-E8(RY~3/sNdKbMсQh~atY"/(L -ZAC >HGDT1\Cdc2cH7cC6}Q=dQd8llTp2I82[8$3!2CfҐd3 0.!8c i]HyR3ondh1!z[4vJ!G -9 1&ġӠ'!e#ƪīѫqgt! !|Sd߀ZņW qt6 5}m )nBnHSA8(Zn/AR7ĉA  "e7zj }y ! @l8'-z|q"9*! D9 Z78Bүs ~LD# -A 8Mƅㄣ?}8MaHT3PEY/~Xztѣzd=QC'ѵ7-B0Dx= G|[  -GDQG>0,|GByޡb;t R;G ޶cǸӑ%A -$; [!+6!N:l;k1P@x\T?Q',2#{FZTA?n 'c#QsA/h= ni!Y~T5vX/`$˂LrV9&t<M7d@p;)qHS;A$1L8d;8ڏ2e[GE-!78Nџz,oRr7F ymh6n؄~`jwrXjO&y?: ;~TEG˳a:a RِlLelhi 6G`R!{RH?5A!*?a2>(APU| 6uFQ39/1s3Q6+8=Gȸ30b1R0Q!!/ !pt!Y; ixeDfH*c"aʠ<% 荇1#ĠdGF"#PDx2HSqQ1t#1b"8F)Ҳ1Vџ}!"T_-bEVS/bb$FVHDA%1"Ɩ-!30>N#*,a<ߍ[B%#!-X0B_G발)^GY#I)%&a?Ra`<#5H,$_t(<~#)k_xؑt _tM^+Hk/$Z/B0Oz$p^Ԛ$$O^%DV"N6I*wIy" :I _I+TW5 _ -]Ms;s1|\ -h B#MB -@MڂYPq Ąu^MRZ?Y UU )P 1b9Z>=~oӜ&9 3Kמ1$GH]R{`s, >ɼ"T",eЊŲ'Xdʰzʙ'CXDX+xW,Z{2ݼBœ@Ic0JB5ފaE(QjRB0hň^V8EIV8K)|Y;W1bUrp%}=X¼+K - -gZBU -pK(MEi\RMo&n!u(ȳt{ Fx2נ0YB7& <9=7 QSZ&m&1j~&64Q&-XbIY屉Iam+)>MoRR0 >': -r`HN*c3uc'"u'jEb,x(Z E=aS(B 0(d@Q%@ (Jb'MPD'(% ͞o(, D)'J&QZ߉)}SۢZ'Q8D6'Z >;J8aQPo"m"( mR>揔RL $Mbh07;ZY06){*|fEpq4B/QSRfԥ-Qag ?-*] D%paTD@ӓ-K YhXF/TOũqT>y/ T@IHB aw$T:2QD!A҄K - 9v2zX1o!kU`uB?@JU‹JE;U>ST?u*,Y - *;ę;7UJ SEoUhGJT9*@&d#yQEaƌUFra>OUFa=+"/=ETF۹Se"jTؔ~6HZSi_DX"3 "C{bI[@l S!)NR)BtD**ٌ0!GQ CYBh= @HˉAgAxni]PHAwg@/* Rr_J@ -D[WBTH'1&CTT&*a@efbt_URuU<*}7z *’+"e-V jSVϊQ+L tJ3ϭ8| -*1W Wwҿ+$劃ɰV8{@v\ ="P^r1aK&X@0ORBM, SAt8 pW3튳 ]9VlDrF|- @^Pf%x|ND]^@+v@s>`bh 7~NC^GG}@>̿R>,D-( Kj0b=b0=K>_%ixd8`,CAKx81Z[i;8-dzR yunZXq^x`ڡٲ=vMD[肻h[nCX(C%uQr:2&/\E:u\ -x7r6"9\Х]XDK}8*L]NP*,ۥ(HTRH^|Eop S Qh}E#W}/¡/0|CGn0~ mpnm/)iCrQW0K} BbSS'ߺ khwk d0jT!({mT2l\2)*dÐa+"LaudA̢Pd8$N@c T_ WHR$Tfdb̕C ۲a2]f8 L}02 ZPfza3B'7o9 _SgwA/@yfoZ8螙| S0vf5A.6szCA. $p!jh4QBk McFZZeL-i^dh + %LfáSv6՚BMmz6T'RJV''R6F6{#ḮDA67LhAnhk,72recMߞvcʹNXo˴.(iyC'$Po {sMx4fo&$C*M2 "&8$+)E!H-R+ᴢqJJ= -s8IrsXG7 4#/I"7I :=R$ÅS$Dq(|.7G0FDqۄ~2BJ0:EaVNoO4*) #BƑDBMPNIaJ443Bhra_Z0&3:pu9'ApwO@PR{FpK:ȥc),VM!\RcSeXLwSZ;NWS8 H6;=;_; 4+A2w$VA UYmwJ[@Hs!E[ƒ MJ"OQ~V>(DAj+O=~y?4mzaky%~iJlϩwp`=;s=Kfv)-M0 -$.WLyDig3(F:P?Ш -^c 6磃DzhvV|, -P0D6 Kn&o ;*՜Ţw~\8glAmvs]Pڕ\K  |ֆu`fݪrV@B^ÿBsP24sBמvIs1b9؜Ɏ$/9ghr0Ӕs%O8=BOς>@9f!''cU=vO^q#e==Aڭ(YND`:{.Qg,k+-A\"G<*gŁgHi -tȁ˗+`;A5ƁT$ @}$EXlǽE #MGI8@l, ) lXȮ9Cr*wȽAR*R"5#DnYzlΙZmԼ+ m`|u팑C&rK6xVrh[bCjŌtaa] ZŦw50'XW㦁<)6 tR"d YAUf#iiPIygguA d131$LFe#]p© dVIr=K G#d%گ1jk U<1`J=Va0 Wa`sxb;B)X%%W9ةLa;L&@`๛6XAz$sţ⾗j?'3 1-c5ߍPm -$dxSIIGX͡ b88WPSjÐ! nE-H;O µtbgIL֊FG9#JQq~g$PEN Q=!B" re#3.ALJAD$`|ȢD -BkiQ |;B[ͨNXTe -CD@atK'"ub靏Z=-^HߚsX%AM'u/&uI?7y]2tI^T_6OU]Ka1MԎQbY2Z)A -U(Cӧ}]vY=1ꥊtR #dt t]S*G0h ضF]˛xqKVuh̻cG`מ& UAĚ.Di=XXs`|5`vC@@ -XtHQ);f/,>K.fssH@ŸBj1h! >n̘{''\ٗ:ۡИoNsANr E/ %>3[ J%-YQ!N p墩 n[\6anNgKCtkx n{\j4(r; _#dzF]{wo, y$T0WΖC^jT@U |)@4&|өK%'H@)#Cu#~w6c3զ8{ -i 6,O6v~E"ޣMA^=R8@r\u&D ptc-i2S>.40?TyxIH Ec7:+{@;iR/8h Nw7HZ[EF3\4 Hf93NyNޣ{7a8U4 ) uh*8UMw)@ܫx|V{;c>7.D"m-:>u@EY45N{c&Z_4XnIq5b(x{J1 8j%)Zد0f_զ,S]D`Y{UD3)?3[1Jt1 m{L?=(뫂upUP+c{GRм Ig +?oΈ^uX޿xa7ѮӅcu?Gbonrfm\:]joogj @n d_6Aon Aǰ.=Zuh#-wU9±"TpoG{(=v,M/*;UoL|x[.5iHoLv\gQvĿ Jֳۙ|pz}@3g,5U^,r -g.RwX:qPaBa8[1FӍ?o0[{%V -A -Zu9|E0*U"V7~Fe[K/тn'KN$l? -w7 >Rl8/RG ~LcII$M7xpeKIYڰS~w5%pw2nD(UxsQ~8To0)sh+7Y@H)9>1*2?gpHna YVNoag)&4fEٿ+Z\ Zؘ_֮J۵9' :Ӽjѕ^>#_s3nQYOy\ddh"-00LR]Wv;{ -0P -@{d1l[N>տGnFWW_H$.l+ⲏYd\`[wH)5 -0__8+a'-Y4w_-H>'1g>bęT,'g)T -!^iPVg,_G0gSy]6qZT(p~ x|+j!=B\~?gP9\FΞ(¢)$X|xMcu1~K<_;-`65~tAf]lN\*/@a|Q@=jUZJLٓ8rAd("N)2զcE{8u߳5G+ ܺn9A8X4eX| r'% ?b -w|]b!Z_\yFijmϮhQw覬уG(v)d[<ə\XQ3|NyzR>U~>UݺF!2|`҈Ly+md+7پ_1L'M7ӭ~qm@~S/Euϒ;GȒrLMƋL`p?'#{rxSP*~lݧ(,HФw8L8K(1Y3HܰBű iB}!#FoC#yc)JO޻aیZwRGU+_xmK{.U´zQ4L>g?۞]0?X=g3 -v?\+JKg'^(᮸HE]{ͯ)I jZ &P B,e=̬Qw QHruapj=" '|bgl̂Ͳc{9ՓgmAޝfO[ O)TJ\ :sROL1ԋ'a%WuvY/'4׏*2^!Dy^9}R_6R*QM_cޡ ,wI2pd9W2xl - "/$J]W 0Dcj;@YJ\8~pDo-P HXsH1d-6cK1@:j3灟XZMlԲ>/v qEpg(- y6{Z.p"#p^YH&Y[$ia'i{g>F,;ͣ2K4-Ӝ; 'R_}yof57oUl^5JjoDbJ̟SV~m 'DgԚDnHG+sT+i 0?ylMRGmj 6H>ȳy|T %v|ZӥB0*Q$3<#]aExIAPx+D;n@ x*o|ޔHYEOr%# -qaKWp/=+ -WWڏ *>ً5?A ;ᏤzY uѪ!P!x͒[ &B_FqD`9"D='g{bn&>v6 #GMJ;b.ejWV0{\ߒ߿w!bi -:CgѸRMɦo@M[.c'h.ְi^w'&Ei{JEC{@6䴶zA";6mq*v[4̻|G^w?^(b3Rڔ}@-T>f^x/w&ڂTAuwBQ'Fi R$ar|t98S(Ges*澙h:2]nʝ:G_csY;0_J]wDPkl`+4$8z#BQp͛P3PPPi=o~6/k]A OR=h= V`Q4c\cVkC tTlo -];u,~S)ܸ0k!TXO+IEKڏ.Ji!LJdG>Jc`hǹZN+5Aib/I-#SYz:0NÐq) ;T*^:nj6H-~rS}6>%KD&( Q'{Ƹʭ6ן?g@T9NO,1Xd^7atQY4I(*zEU -Gv+KE:t6v*,~^| -L;8LH]pq.CP-gyt!*6wWךvF9Z1z2Bis)~ҢeВPt>P舮w7c,A}ϓ\ "'"zAcWY'&Kݹ;켣y j\-lhs" :/q% 'Cc*_\RԄ7О -+cȭQՃs" ap^T=IuE&ڛ[7&\(3Gh9-=!YuF8 -n4'ëQ\8qa -_̈́sE2s}¹kH 7ˣfptR )o;QYq(ΚbP=_*p> -pڤp*+#ɫ3!\=o os9ݒlY!`'Хe(W>b /3g2zlH_Uʺ![$‍+V5qŖag9ԝRX b?g+^/!$b9JTy(@qxKY#oqF4;#Q0taB[cEۀ[|)cIz00'EM#ʪɥܣ^:iT͝%wF QE/mKr _zsg01I El!  ll|Zp% P=k3u(dRCV^ K ?N0.Nw.ذ1;`U\ -4c2N cWZXل)"Ep%Cjqnqk˸c]~i/7::\byW!J@E(gYe٢e8ƋD=4d|XXc<1s?x~%q6нS/0N1"5b a<;L0aEjvuLRKfcܨ٬1~53Eȱ1fW!Rq(q 0X QS G$ -.ap[Y;MEyeE^g$>߀\-^錭e0boc`C#zrg'ۋ0N&?3?ۤO}ͯo$Dqz'?,Fg!p(UtŢW؁/>rlv&n.d:\UZ2(v9¸HP, 1<<,OqY0J kA z~c=#Ó( Tp**4R7l.mc|u>GiCEs_w]k|>ɒ'a{K".+]IQM(B8^&\cR1n? -1{h%_KxEr͓5wx#F]p;%3 L'&>XcEk޽$n DK?Ǖ$M *طzםI%aSDO;~'4Oaݬp±>yx?-auivSH;`9ѯ(8t */JrzVt(U=>u 1-:6.f'gsԡy<vIFMQ-XrW1X&71eE=VCpC;8pM 00WMܻ7M3޹$jȂx (45>U:DyOR6tfN=o[YI(nwɵGHxisqtXNl*wr)qԶkfj~/xΒZ+a9hl=25>ɨ¶͗)yJLnsmHg2scN7=T?/XmݏV"~6BȤ=2k }کE; -#RL_L5moSFX,/oHx=rŐ\sѶ茣A+zo?}VjRώȋMFaKV*^Qg6Nls"ْ:˦|"QՒspSQSNc("j9B ٙ'N> *ٻ]g:?Z#JI2c()dʕleA]> Snoc|g=b1æzP -b18+&p 8ܐF+rS) vNq<0Ȃ!tV|QߧEJ/$bvs@V2,8Ac'9u׏bTڭR,[+׆ɇauvxzj=o22iOMo=nk/A7u}ykt-^la0E%dגPJ,9Ch8fs`J}vӶ6pD_PUuk}\>Ou' |_1dGHКK--wx~YΰMTaLÿrRX='6jibҲ-xz a1y\z^ -dֲ"AvuDӸZ3ARH.hӮ>| Y$_ BIH$ʔ*>jY(v=F%\Mfd%,j|4j͉TWa'&N:"ꇴe޺l8^UIQ8uTKwo5:v~O6ΤH{Iq6Z%2J& $in/G4d/jM-ZNH>Zx -lb^n\M] jFj1cu4^/LWUAOV6|5A꠲N;9L:r0E3օY0j~)35.$6sbh`uשԴid6? j4w0ӀRn%0Uͷ}L_ blJLI:/,By::Tr4y)`ȼ3TRZwL/h *(LpaWWA~̓ /WZ+L3OԈe43ƃ/yKp+|體ZD\\:&ieY11cv6i/&zSǴÛP4ykli/#*?p1C3fZcjOC阾iʋ4Fw(ܥL9o0B9vhvLMy*e03x4%zK:Off0dKxo#73XC~U8P{#*L9}@TLDْRPnvAifPh;pҚ^ -B}IafG'+1ImUvl5O"-0}Qo/ĥBq! ,R%%{j^,$ yG/4 }f3l%5G^LtLU]>.B]caOQE=HX6ncSdtɺ %Bŷ.a4 -9:&ӎZ"(`U@{8]BzU4{ G2K#[[IRoUiIuIHH=n( u6.qJM)lb1o\"d7SݘΪRIht3yUҍz4/CaLЊPֳL^#YC_@*Ax=zf8[+ө2-9fDtIq6;& K@AHWGVDao8U-#rƢX4VdJM8V?Ia[؟ޱwTݫx,#!3Pv"VXmR [EąG3ű0mw=h},ⷐ.X78%`9KKr)*&>_9=ߪ?rȋv˅@g@抩a5WKqG h=]u^ҽ}dH Du1* ĺz%]=JF@~$Lu ؠf*G @w.H c]x[o@5y9V!0sZz%@ 6zx8u;іL򒽛fȱMȴ|/2L|[ 6dh4|l_W#ZVxZ3,7py4+JL n2rF);ӓ3SIteMÊd~, G "pY X ѩiclX(i~D)9@q%]V6`-g"࿻]L)RJvMt`1(t{eTM!qܸzW+4K[JiTQU/vaza -G'f&U?}'J[r Q3g,.?aF^ɔc^i DZG)ǻZK=Si#4uROǫs-дٺ,/BO+(2|J~_~̇4>/)(MiQc{$Se#^̟ &x˜nP9]q<|T+ǪUf2k#ᣠ*""k^YG9OG<vx`9>##yG)oL"Vh:͸upOA ?aV(Y+s$VKFxf屩 Ey\zÑo# TӱQHGظ1ƭa|Obu:dpu~W>G_gw1) &SqYƱ-#bHDZA䅷fO\>sycNjr)H}1pYNm0ڥ04v2wt|K܊(=ƒ_^I'_H~:2^/[[>YQg.|[a>ͯ̇*|[~aW+_|G)?U_-4?92=)о('* F(r<|MH="X1^8R@46ҏ.q\1 t AB4 )w!D( -NBzNٔ1qBB!Y)#Ԓ{opuyGnr벌ݮGTFȿeSr) -H?V=Vje]t;PMLK!L?=rҚ_vZ]45B` Ӱ/&A*:KqRbη; )zb(o> 6|GE&rЪYr8!)イX({Ñ̪cЂkG3G^sRPUQR<;Ȫ%hdW?{ҢA=P,f: -8;2r:l\T qb?Od F]_].}G>Ӆ -҅!ї`^-)icP3vVK=)7 y(zUJnүL7KZW{ -7xX[O@ַ/ I˧{zVVI\s2^gB #^G*=,MeNEy)x6ڥ(y<'9* /6SR1 M5n֞5NE{e=LHBV2Q>S:gE*%%+S+K$׮kk2' cz糭['d"aJhwnpHO\3JW2`,!f$nci/U$3 0HٸƱ ǽRsersv qv7 ɴzak0vp|irGL֜-*e ճjPk*<'N>W>'y[o@Z?@W -HpdPiDzdO9<*A#kX2B -鉧TOGhlyE!,#^(r]zEvq9,g2"6iYfV+>EQ`۰!p"pyF/DFO۲K5ڣwi! ZxntCdk̄'{V#Yd"ؐEf1fO^U4W56ҵP-U-Tcϭ揤D6OI =bj蚈P5WF-]縪MJؒemX;GSGӳCce="!rSBV]gսAGB?Բj*7pw@~B%9THO\1ꈇ:װ8ېRލG O~MG6$ވ*tvk֚-KwE I ~OBgA|,b&bV?GUKǼy:r:bu(Pš7[({ZsU$VX$"`aGD8=m0e -_ʦH]Skf;zȌ`;"xuwk&$*^Io~XvU'+(4%T}.p8,ov@l]EdOāD 2s6,zhSlSmXǢ\✫jbĸWtsoq:`Sɫ~vfB ~2-ffm% 2s !_)psnů,v!8V&Of;WA3r;(j-H=N,$̫FVozUF֚̀W:<_MPA agikgDz%A%{U߀s%!q170) ZhL-t\4N6ⱊ2޽~ǮzyHpco@0!9Ւ֭QUP5W,ICWlrƐ=UpDF=!-XO@m?2CcU 멲jC-/x;NRa:S-AL{TOn ŠEfXbRJⅮDEez:뮖d !c4r]'4h _ 5:kaW[!pC1p 46U+dwA ؊$ yL $xi渗iPa&Y+0ȃIxq-"`h>R'! W ?qhg6-0Vm+-bY=tmQb2vATY-Jdm(pqzyŒ Dvo}-*}`4]#qF.a),WYW1%%Xhi|-3Jz{ri#6$x 3 *JQ'HDْv1-R-26mG_E@ls wܫz IC8ɂe gCOu[kd {++FiɂGfwa7\wF-#q_\Z^,Za0VRqbZa4]ԒX=GMt5ܸ׆އLxHaL‚J%Cn2'tX>|L7$]H[=Gĉ?t~ؑS;u*@o Bp,Zk)cGFLE${#_i7m׭;Wa0 mV?D݊My]-f^v Ct+Fx)IfOLɍ(ʅ33B7JZ([xVnHx4nWOx20yl,-zU㭆dz,J8+-ɬ>pʩauʋ%O Bjq'R~}6ɵL_-3F ,]-i~qqp -EcQ7!)]JX#w$nɺ.?(H"uԑL{BmGsأtC 5k"[X/i ? (pD ҅%0ˀ}`ròe#ia+=IJq_p]i *|Yf]VK=Vl^QP0@&Fb/ ->y6Ϥ^D`Lݻ84L!6B-KK4i N>nj -懨ZGpA=gQ/̠O(ޖ Wx[9EԓM 8@K?j CL$r1}SV?ŗ Ǟh*dII&AH%WBҙwŒô-v3WyJj3afAel% -`tD<so@{YZQ=Mu -ZMk6T-Х_҇A;%}UKN_k*'ʫoyKH=(O7iNb=meDsXD4 -ƶ[ [ FCLX -˥ k -R<_ ]f6H>#މA~7[Z%}1CsC|=sW`3l -[7Uд92f}J'%}(}(4/+1ZU DUޣfM7TTTU @ew<%.V zXO} E2X"V~TILf1nuNm" ;iI$m}ЯrO B ?IhҢޒoՒxT:tbZ [X W>X} :| 00X(aM4Cs}~I->W0+Y2C%P( =iTF r Ml jJdT%=z4DԊ o!%WCnD}`1N?XgP}î^R{xaz}$Oge$|0m-ɃOBzNKU)ga0L߈[eM sg?H+ncY7xXL,ĉF@N4cE'x@l~Ṕ_kaF=@ƺh ՇVaU"2,v}.&o }ӂ,E%W `~):~$5XZj1t?W7/0˝9g ;"H|쵅6=ԩXC, -i' -PlʓNNTd0<v_ -P!SMK6|`hS -M, -XzUu֓@Ɣ{zIE|4%T1 )bJ5>=0O_=+]LI-5 -pD:ӽMkE&]̻EIRwʵԉFu8NՑB6h#8ϕq؏t8{6 'ARY(9xԇ.`Dtyo}>)ߢZ0U[+R}IXDAWh9MEM]bTn># -0f)`$$T煐#`kNU|߱ZTP dٗDH@ iϺH:(/N!UXG_ŸWp*j>I|lޣG(9oG`o[$9d"a6p  =b- աm`)⸄R(߂I+*?h'_c^zD5(hs5J?䜆-L\:k*eM lVG udE a0֐ F -VV=EO) K:*/۱6Vm܃v"k-)]PK E-՞''~kz$Tk},qdjo1c e0W_GwhTvאN)׳vzR3M57=ͽpmg8 -C,#BEQ; J\߿Q@Xvy.՟R-hH%7bi#q2vcKv{IpJĒ&[şzT9,T0B ⪏з6U$fI_jŸz#25I5U  ިk[xI8%9zYaG=U}ebm+yqhj#N~H.J%Kd#Gn0`^aᖱB5ǕYO$OB{XU}*U{X*X``u5A`{[uu$O4sg>O+B1=BðO:p{7TO[+I }Jcgn7x/fR!8;=I} "zUC@u$z/W_{qԻJo<};"MjJC q#+7 ʩ/dHP}&!0r 2B18K \4r>͗Y-_ʶ'$&X ܖ j,+"_eEBLZs\H"HrX V_T_Jrx60V[ŧ -L}&PW=OejMbdѱ&`Pc}{<<BiJNgP~BOz |o|  T6=%ΩR&!Jo\ػPȒݯ< Cr;X-,ճ~VZuԛk)!v΀&tܓ'MEQ!ax8ݪ>Vw}R@NZ`a@)/|BDD"4OAo }7KZ $ _' PyRnR --v'C%չȹpg 4g&mu -{ 6i"QGa/2w$wSbw/`*D?ĩBL6dTVJ)GpIv@l=J} zRBOuWKj|,/| 9_`ʛkMu*cWcgyl -T\T{KESP=,T> piA/aC!/C z! -""ᇴbnJ L,V`1,Ria/5r6W*S| |~OKί6*.:*66&Z'u$^k5.·j]R)F<2xxTE,KҮ!8wDG`LzXLV9d@7n9,74ax`"gx@Зp"j*/A+5?g|g˼|5*#?̇*(z$qFX$hs`3 'Y# "_g'lEWa&=&\ -)3Ǝ $5SH UϷ`%/s@0^I ~Ӄffp>P’W؜.u}d0up$uZ櫁lC1Z_ !R?ۤG/ɋ"J%VBA%a>WQЗZ-47?Ob.9{ḿo#h -Tr9?Q1>ߍ%{XCN,IvX&H֡C/Ge W@3uZ㡫H1f*y7(/ѧssN?_Onb~\/‚_+@;#?%?D.9{g`~/o,9?'{yfv4N@otlrt b| 59gwXp_c|Ok f!-HN5'|R&9ӽ"cMcH4YI{9d#h0Θ4\MSA8m !xxS΁@C:V=_đv:=OT`x*KC`aQRWy|ZaۑgZYCt3,Kay<w<k0OMbn4|ũ7Q |% v>ւĠwG8>ȦKx -VrOBh)[> zܦr_Ǫ#^;*d<g<y_-6HGbxi~͗4b]Rf.cTxvxV$y?p!do *u9] QІWD}(OUA3| 08ߨͧS% -7BGIr>[ 1+LKiPhh+Wk[C-5rN;}F<2}ZCI -Ud3` Xz.2';Vred~_"Tf>K{~ͷ1e:(,O*)@UH =uase98W C&mm9K[X2_}J9zCajŵ[G#֢]MA08O$^ _vbyc էhV:s|yWJZ+'Ċy&.pf{ʘ^!Ή;NM8!we-彠NS؆8H9j~X>䝀NnLi wX?bp1'Xʰj\[{' Ւn쩤4A{ҫ#dӖ Pdýc/\͓9'廍j(V=c=hs/@zxe/xhNcg=7B D D"V`zƥZ5wV*~Sǧ7o:֫'_ӦȑpP%P\ -?z-neJ׍ހz5x1{h]  ?8!'kvUTS(Z6xˮ |ʱ|2",`2f-o0 -O[_$MMJ|]Ց@{y9]ܖL@y [BW8u 8&a&f%X*30_,0|i^8|"nGy=hAp`B¯X´~Ab'k%sL;FĭwovA)$8JfMTOwYD'$w*@(@zQ]I|usjn] Kf TP&NcH?fG6s{adwXb/Ta(K}v2@硴},8jH' -YjY|'.f%2\e B%rHVsj5V@w~a]Ŭ#qC@>yH; -C=(aAhY$#@7^J!qr*w#Xǯ/ y ]U0uh\eRĵKLq÷?5_i((` 7[MLοUSS޴0X01p% kϲ3a(X̛\/s9 \/xmZI :v|dbC[H4Y|S̸PO/)}߄WQ+o_YV{GY.Oq,"缗H @m%Jpg4KI?XA0b;y7oMWu|-Ӣm -^#r30-L/fP{EV^ [+ }*@k#0oaV4j}$: ¼ 0N_!e{l -}SImb"۳8Kch᫨0x<8} >Ն%/Ɓeõr0)eZt -}c(GQ1pS˖~k?q}$ɹ7Tm'.fՊQ-.oF1/Zh1_ZCnNUL[S0aah -[nm7 _yEX-sdKݙ ۿ^ 9Y8v eUS-tal+ e :ia;;\DZ.o Qw W7o8I:&"wm)d[4Lޚ}"2rpKct wL}cfύap2^Lx>H")md"0qaE -uS #(gp;%nNAzôĸ=ٞPR/C_լh\7qwFӳv,<3;O͆Plknn6$17r9N>`u$n Oǒ|.tf7#]Nt0N^#mNԑdMu;w;.֣msiMb6B6ӿV><|aQ:}x\0gPN;w)DNk>Ju>"3ފ逸ZBbVDP!|N7 kP18F0 >, ` `C~;L29? h^DZgX3J^_6-0;3}84r@0d˿>E%E`OpZ9fv6suY;ƃSx;fO J+9b T6q [yWW@5QLNUGRx@>;fB o_ 0pv -C֐zw}xyC(sSC - pӒPp E/Q_ lUgfZ /yfxJf\ -DD.n $|C]r;x8ν>89mG:fq˅P7swϙ{ vZJ(b$d4?| ]ZNsPͬxExMeݝ}@7 &pσ(\YV?l h,;x6Q& f]V`|Wx}R0JE`D)9A?PX4'J>V[cA[G`~v?7DiS(AnRa6V)h@ 6 /o medI_ g鬩51Z'COL@ -^z ԣi9w`B^Br\3t&t$ -Igbsh6YREXJȧÒ.z4;I/83[FP͞)\4pB2k&"ǚTﱼ (`ǫV8r^Z5ӿ3>EPD"W)ko @`d*2z[;rP Bn 2m -5̵RB#Û|WS9swN^4C~ZZO)5V?{wNˇk%7Kc[4 es <qYP}g=- }/:HsOgʹAbrTVR?ϒURQCߊ*WOJ -n>>T Xd~)( VC) - gΚ)'@bFl/6~9(иՄlOs[E$[TP{I_EVV(l&"SOj(>k`{ykQYC =,8u5v&[]TH-a wyo$l< j ilM;&q&@&cտZzW}gܫ3^o]6X8W.EMYqg9#> 6o7O:&!;YKh_lIG5F}2wь[%œ04}l/x"vbWmKwš #'HX\b'!q>4Mп) }qr7׷.l0|ک F!Og޷L5a MƢ;`ax'o(rz7ΛM -W<^a=bb5D;@! !yg>~uћMc͂F2s3]+w#_?7e{ø/[tBAw&*j^Y,se`9ǩON ʉPBWV SH»6;TqVYpTOǓ|mapU/}gHdOńȷvoa]XGD $`R3}S 6pO%fPFi7zLV;CBbkGsB.qHN_3F>;mJo}X9t~u-CVq&60߱>/5-^uQNB@"i,Z\e!qQ7- 6rO=AcDēvbioG.jX^=K>{ ȴ\Tr,k0H2Se3|kabmd:Vn4jK""\lW^ MT3ߦE$H[F|aQy:~ -eDGt]5x ցJy\( F "5TQzCL fJY;xGQ[tvUvҪIΎKJ3_# h:xwT$vE!gM!n7*5SIAYw f(``Ttt 0/"" HŒ,aQ Š0Q:*`BQWXR -Ԍ.H@J) #%/#$$0 (Q@TuTTA Ñ `j.6.o\_43&01 -QL`_h^d# A0Q— -FE_.(U@Ȉ"0 I.PB" -2 -b[c -: mIQQ ZHZ2 V_#Bbظ@|pbBA|s J#0 DX޾l7=uW ͭ;+ib:度'|;pQhCh/T`, 8B qqov@fon 218 ,:a Cnwkb7w 5ʱ?8 H=0nA zGPq_ycq)hh4j4, -#4|o;]6 2̸ E9P]gnyiHĐz"@(YHu "/W3ضp3ahz#~chD 4x:t<C FE!_nӗUB,m_܈<&M!N$*U1{h -YkpN]=v<;uKC9d6o E.m$A0 _[f|NC9=ɻ=1; ܕ ->l4 6w3:3Ȳ/?X_(=zTDvf_H{(ǹwidɧ(e=G"OQ;VF-=<`t٧(99@"@SG`ɧ($ą)$JW-Sxc0)6@{;:H;Ah#IIplcH9b{A~.jݔLϸUvh1Q=AQ}J[ݡFCHE5mXLwTJƺ=f^Ì/o(E), { jrG:}\X0ԑh0B{;4}NȆ;[q:PH4pPqos-nd3y;0AKxaw<<R) l4F0\ǑN ^!1|iv(6o - <+CtJ;H!@7<ZQr,ⷬ(OÚ?Z 4q<2aupƠcaۉC ([n/; g8JD>?ý <ҏ =,q`eAb>Fq@(q' !U2JS }!i`=W."lk۾օБ1\ C]5Sw:tzxM@Eb Avҍ3^B1oYx߁ہ0p5 "y<>A%_R/Il8p8"Fqs%WJzJȅsγ`;ぼa_*#u4ˎ dT 1@]Q. BtQ'l>zH".)8 -2yxQ&m'P}1y#dPC1yj:XM/p -L -6q}. :.\,i;PSζ>Ng+ *kGqkSɇe~3.'#9t< W&?ɕ2PwG`1B6C^լ^9+bZ C=WH| aǤAvjԙT+s"PAH<?6π3pǀ1G3\ .t -[ưwpBKkcqƑ^uC:.3$$sP)L}0r}yPf_@^ -I߳'[*mDY ء.t"<3|揄@A2[=^3Y CA}B>O R/!|ura<7S:#^4 G:\(_T'×DyK ȑ*mZw,Bc=5]o-o ؍:uU<c]xPI }2ga9/CrE{p <䲮eQ dF1ze8F)˅wЧ R{ Oq},la -YMlC{"0LԐg8:w{ -.xP%9BW 0wiaT0|Dq`"1(=y| C%`aV&GV}[lrZ./rPI@,[}*wSz#2l1 㝸]X {BQ֭^9y /,TJ f0N3e}Ѓvb7ďj(B{9]qqOWpccӊPō W9ӲQ/ - cd(D.mp`8 -C*[NvnV4ό/0&#(ܱ^=y&W܀_"vCf}E?r" ܋P I1PCGq85m -.y/xiN@yF|WN@.Loi].tbar`a97Lꋭ|*7NT2oAis'8M5qN-9kgHy~Qn0ܗ wy.t"9{e_tV^3f-sel+NFI}&=}췶i:%Z56p2_AciGLۇBl(./{d{߈'. 49p͠~3HI# Cz;@N3݈o& -F>O_9a"r.sgNn/rQ+8E)H:\H2oĭXws,+ |e`AGN(ik i$7oD8$=ce,W)#gxj -/2^Lq+g^yJ֝2ƽ_iU(] {$BcCNq $r <,*Ci}sÐv/YLϢ6Ńa"B& G ̯b3K }s"p$wRÚE7A'.t C*(% ?Yq[*HfE;VG2s0xkЧ^ {o ͠ -rx +$[r<\#Xt2oCӽd:=ÿ-ta6[K$u`|ہ4@y|84=mAj*+oIΛW9+o_1 q!9XS 6T̛`681/}c^cJAۢ ,;[b=`CPf~#uMKs/zWZ7(<[NǶ0B0We p-B& 𡅽"p:,Wh7/p1 OܦE_Aw(W̝PaP!+$r:F=h7PvmY?Z('/U#c8{&LS}"9>PCnRb;*#VWj,g@ N4:GqxLmA(m'J#TDYpĝhRVkeIƅ{YU.K!ONj=RAz; ]ҦU 餋w -\gnFᲳPr:FOMB;2t.;"+u*8ޠ_=Awm+o^`3{HE# +i_v=8;!(xӲ"zܳV;O6՗bBC!&cűc&q73ƐMkӏ@:1Ӊet3zޥ\%^'$SF݀ ^Zf@mY <މ{9paʻ㜞)gbZoЅ?y_.x,\uPѕH.!\/yιnL C}bRa cFQ) aXp|!2#d>uFUz0]0 D~e!I{(GːP!U*΢V߬N4=sa0gQ\;:sh,w Ƀɜ0ڜr+G|m|xXH W+aDq/9߸ڱno<4(^.~L<_?TQtze7,b{abcϊ^G.KL^ku⚓y!M3yaO0+ >"ͲR|S{du>~JO[W$z05vϺI"V)#K<)4t!?9:|gsdxٻE8uR{9Ϋ͟_JIift$z䉾Qbi_(:ڷ3N.VeUX_ۼСW}iw̠9VN{{6J+F%ϊ@uKι9D(OJx$$Sox"~Vi(\V*N օޓ7$1=<5'6xr6:Y΋VG5mbs-Z0>8FDyļdQ}R.b^Y#^0z]kDEe5WI͚`w²E-CJ -z֞Up/컅Z p; ov]Д?:ΊAY6:g!ot8Uus]<M>}̬$tAplڙDi&\mVDomݓCߏ G6Ev?|C$8R[(\xJ" -3P%l!4́}~k;֮cձV6D|׽v`oOmEbktvn>,.z8CN烺]g.Vs] .vsu׫kV7%DW]s4ڼ_"fH >%K*ov0EOzdVڨ\Sڣ?c}BfFT1zlIS+MۤHC4$Ӡ,%802bccf3c-9650-44b3-88d4-00bc7600be140b9afbb2-3385-4c1f-a7d6-d4069711bc5c 678.252122b550504-2a4c-4782-95c4-b0da469b60fabd77fbbe-5c56-4780-bbce-4e686de3e440212513.371363f8c4728-dfcc-4fd1-8ae1-db9b24142a5f698f570-28dc-4a5a-9981-b5f059798b2e51.ml10SVGFilter -/ : -/XMLNode(fxmlnode-nodenam/ArrayeTurbulenc;children1nodetype/result2attribute(turbvalu; ,2baseFrequency0.05stitchTilesnoSnumOctav2,feCompositininGraphioperator1id)AI__1idx0%xw10yho/Def ;fractalNois44animadur10restaralwaybeg1 1;20 15;200 200; 15 20;1 1 fillremovaccumul2noncalcModsplinadditivreplarepeatDindefinNRfeGaussianBl1bnstdDevicOuk3k3&q" D:(v8@B$ C h(VFq*SȻmƒY -$ci8^Umbl6AeqoZꤺp/C7(]r63ÓP^x @ȉblđR7겫 ,t@$5 fAQM1~/B/d%~[0JYSXbԹO)f 񥎝9TC#1Kt U/LJj w?d>#,|]&o `]=\r\`ԁ&($YۯcX]@XP?, rH`j5Bn[ri>l16VbaJW^yH*1T$02uFբh^%{C x=_;kU>6\nl+\>J'X @g/>NIF)b'=3by)nF6܃(=Y3-#k֑:&wi5a8H0"omREV@3 DHGZ ;THEy һERNprxv;+~S#~& -8%Y#-ͱUL~hu -,6z{(T1ybhA})X>&or6]4O~+]Y6OPtYk| -}'S:W*}Y[W[ƶw@q"i:_D *p# "Œ0)M}" 2bp8ʝD1p0@ - /+̘ rr\raMb<O{D ˤPh&ǢB-b)L Ld0ςt4!N j1ID8Ogh:B6 -"Ugf<K OG¢I䓹XB:bx t4NG#iG@LL&qH 2^`R!˚Qb֐|D.SȒ,I .TEcb`0D>>`]XL|2<ҢǢL!(]N2],L4&"}8HMLϤdd04LdEGH'Q& h6OyCn8 B0=3LDzWX!";~tlYYcάrO)/{TroKxݽm;J v2}x&EƄrIӧP$5m[S婷ZR+ZomM-jJmf̖Y˵LaLbIQ,ڃt0fʤ!x8*Gec| ALO2t::N/:.ԳE5׶WUu5UF(鸽xtȣ$&ex7 /@E&AE%ͅPDKOv^m2GʿUlPrP4@@ -R0I,(  r鄴0)@+)< td2+PTlKY<^[(XVRmjw>˦$ -k%1_z z}7l1cKx7[֩볝eU44FEQѨhl* (BXEF0Vεs-ekU[sݶj=n6u{}/\\7.V-yZTᆓ=V_x_NVCA]Sv66ty;u-1kq#7#cl)ʝU-cCIޥrWHk)\5 Q2X׷F|鼒3Qzp/CQ) p e(8sPr/E 7R1VO%Uk ݱb@D&1Q%U 7bmhcfYC-qҌеip;zG5:U\*1Vbodue.$'ՅM$؍Ыj[\qxdCu;ڤlpT4T < 1(Q_eks~ɆG@ hV6n"x>;&RB隶.r/nDyV6p,eF;E*;܁b]Qt 7Z`fuM`vrJ ZrB|$(6FY1:\ߩh32S}ۖ4ăqrՁbcXI10+m`h+7 i>u2oǔk>6b@"`*/VDt(~}`r:oHQjTS;07hÒSi9,%JXFji Y5"/d"4olZSAܬ͏yw -V7p$C_T7Oic_GD4KT\VZlP pX؟k$VB^GιzmC3_Y=Xk::yAN! x2d;6IhOe.EGuoXVPn/DoQӈ+SS0 gf^g̛e!/i5>HYg4a~" P9:ǪHJq6cE%V| (x>vY>JkE+ ,&?Nntt -vwP9gmf@Lpc&9,lPaJhP΁ϱxl T `k O`y5"0~DW:QD}(=3rED4t!joc{*j YI]UA@B9ZGS A36-*1qN JyjZc=cK`O?k#cU -gL "ڎ`Jx2t-gCBGâ78Idz;c'kϡLl -0L9cي0,Ϳ\t_Td?5@עN>vOEb%`]q&78|XAJMOAGLN"&M``a3-蒜@1 dRN{/ _CF7W:G;&4\JBwW9S[hI/ BȮ审!PueAsEI)vх1V.|Ôuh*hxBWp̟ -4b0;=.VwB ^pOyp":+ {0_ՖiG\ir&=+yyMsRXt܈G7!^B&e6ͼ3iP6UAtw6Pط2^c$?vZ3 .ѪHL}vc4f׊3tvC8-#Aa0~M)Fp)9D\i(J-IiKs/qqaR6g_@^f% e}Vʡ"'bH8_Ǖ)AyIܐlTĘ E;ZR'CUiH6\: &'yp)Os IyWybgʅHV2 -7WHL'(g`Dx02}\jmbt^4w5rCwiQA(b6K'OJ[Dqɠ>/<ے:Xߐ8N/T$2'HOH[djFwNnce>y$SUe2pQ,2(xEǑɅ9m4)# ԢB8O} ߒDVF 崎ڧٍV PQZbAe77.S@5N'BEvC{i8cGzhY9 )5[Ϸo4lxGj %s?,ro)l@}dI:iA 'ٓfryjm:[1IXj@:4V %Ab蓄G;"2MQ8s%T2Ef#PTV;z\ -Y#ZYgNAْȉF Pdgt c""T\1Qdbl%&v5aYB%o&D?+XaȽpV3\ P1$CqUʑXx(mt0t~HpZxɔ!ΨN5~չMf~ցF|F>OTXP:d,}OzJ5p#P/ -|']?ڊhcBm Aiz0ݟ\}&GMlJ4"EX*;Zq~xV='}CBXCã8=ʼn$w@3_3,5j*b^n7QCIH-LyOhe*$[I:HjN`OA~ZK_>gH2rNxKu<_"46ZUxJdTdj -V xHK8w/, ̑驊zV31< -ǜr$wX+YKW7_Pg}kꑶHTRT)H(T%(^70`3FiR\)WP?1~ɇȣ  4Qɸ-|62>~ڿQG V+ty=GȆT7i_.j$!_RNO\If}&[oOh$HiӋ6kD^r -#Fёh\;节2q$k60)"ųKHD*e/ -ccȦӉb9cWZ]B` yh7Ѽ`5XňN;6I78U6Z,%FѷSNkE_ŒlYP2nc|t^Yµ߮r&3B5JdDi. Rz{,:-D!%k}E_F+t?uuENTG) iolqc 5|!P|HcEKq \By2 =Ն X=:L6LΉܮ<#|){?/TR9%S}mՖ=olHM&A*orP_Ʌ01}>WώBǧQ@ND%M'c: -uZs:ШjO2^:B!!_kO@(w㢶Ϝ͋W,ݡHH'oJm](e+'zɰ=w7?s-d|s+'Z9%}ELW19_ēPqv ֊82s&wa+Lon$q@zݪƸ.3^L^h?$f@RO2W' cÂ&zMT3K2 ->w "@kW(cx (z1>߀dG/?Px672dj2Vkl[/GCP ;f) :{#GRm|JeTcݲpUl:TϳPki BJ4)?wkfMYxy+61?@q֜t΄nEM'MILgc|d➄JEf 5"lekpTJPt\Ng Ё_bǬOE rCT'7ՠiL[e]_z[IهO -tcQjAG̱cPrZA\CN-"BGG<b^qG#]|n^wTPs@}4\<"xWo5?ɵ>&5AT!9 wI4K1v-tcHj4!RH"vq/ֹ\'|`G*KN] #u;ķWՃ^ x|KMi؃ @Gb@[na[۠7a01m3C -R?RZPHOioư2 =q) 2|bbAJى 1B+:8,ef3 {%}fd)hGqQ6? \z$󝯠k2/Iň -8PqԦ%#I*!T - -nQ-QW,q dġպ-+S){\zDKEEY/V o[[+-1X?zhX6TuG<̃cO`EC~dgƵɓ k75ɳf)qKMiv L{ڭZʒqo64.f!mc7TȂgtQ?p _as)"Sʇ_ NJd(.S1qcDaaa5yqg._cLHm!${y KQ2i*)w (=|¿=@qf6B"'$ɠ׈wgO月63j~aT&A# 9?x "[rBr6%b%=Rot![ռfiD…|jyR纄-v.tђ^ⲤN|Okrq":Iz4q5 -OӠ6M7t-VvLvS]#@ a2#ՉFQA/15|›k7,,\o gpXoޙC2GI,u;¥qc,QP.lpA~ߣ&3FD/f9Eh6p|JL8Pl*a X'z=5j:H4Ȃp򷓡ba'PóHOFT5N\X;Q4޸cQj! _x8e%`6t\`VU?u - ʇ|]g8;W~{+^_eE*HLu=b;PJ)4ldHXiiP  Ly܎l\L 2&usi;wŪ -Vrhfcn6irdoa%ΙMUDZ8w+"̹D(䅔ʕ۟QsŴU4l硳ȽQ,OQ:3tl-l"Nەsv*B ވUJ(X s(%PH0%D`CO>wqFcz.j=  >u(b]TB)lvN^.ޭ;А( z_O$|x:QW*Qz야B8 /-^=X}]?fQ:֏l?nc_?V1{X5Dz}s3ۑ/̝~cRB$ϣc7c1[?vmyӏe[c^JQr+1'x8Dl7L_n]/ oV_[c +*;;k)ID=mkiM6 zy6i7ɫyoxxLCtxf:wc0,W>(=zf4ӭ@ -3Գ_ЫBAOn}ocLA|fƤLIg횒*itϺL@ˆJ^zR+Jz~~zֹ+pF[GLF-i2e~Y͵K4IK$i&o2׾ K,a„͚zVo?^z^)P½^/پ+ _Z -_ -Zkj+(R][ RN&\t7;uI:SPR z-nƩL`֩͹b^N&mVv;laD ir4e+6V  Pq=8!a FaH3 -X\ >IzH $BȀ:\ -/J`LmDx+9 vO N# b"< Lh#)B`%0!T b"lLF,S ,CDh"$g *LԴDL:r\+,Q'  -\!( X&. " ;DmԄ6h̰_xĔjR sC~$c)% -KS/ ;oR[Pg3b8fL3Vl7zZwT{/}ӛiju{^>v_-Wj-ɣ7IzVyx{+^Tks{kycAVLAQ KU ޽7|/}Au+ J"URv$ϒ/XoŔe3ZI`_VP[coO򲦖tA^~} -ͨ[gНO6I> Oz[~Ӏ (gu }'6JښeT7篸n'RM^-~^ VOO7=%h#zjEYx#nrswmj#ϓJjg,|n,Lh9]JqŌ1KqůfCxÉf - ?]ƛL -i9DG_)6-K+PdVcQHmVQ,b檤ןZ6d fWȍ82N蜾mM6$`Y -ܩ)mJrUf#qsA!a?P(Ũ\l79)rv9r.' -F68MEsl^(R8[B[VuJ1v-)۹XSSnƖ)p-Fї3g+a cs2e @ @ -z %pzfhr.xD⇇x A< CCIءE %! !ra /~$P ɀ??~^pBB@Dg!!%~xG-x@2!`JL?"ۍNsTT0w׉"-'.!K{wv;Mg;oqҒt[ts vnr6ӖcJBl]G;17xcP%A@xZ@ idi%LG ɗTT -JDZZ\23B1QENဍh>J28e w*ô1jv$24p@0N%Lm3VŠ}(*07Q 6?PDlw4h EjnCI+#au -endstream endobj 52 0 obj <>stream -Z6d"KK0mtH Q`^>0^h! -* AIa`ƙʝLPBRHJL|8UI6T)h0-'՗:8P$d)ȘS5zTڌG LTPR222aKR(d<t̑1dLk$1cHǜƜ`-dcBSbcBSƄF8bKkPCR1XBP>ZQt!0$%Eǡ1!E#݉bި(Tw'~ِZOp=rR](d>vQ(tD$2;5i252r)/1$Օ!:kD$Q-+1k>EAJDbG522cBL(| Ar`; %vШ H}RiYi$jB% -) #]ة0uuX9oZ{cЖiD>ţJ0HKXa$DVڽ5je';wBJ)& -D25R#-n5BRV΁ҁdDaBB(]ͯT@RL߱ ][gda#P-b 2hThi5+'Q#sFFd&[)[PD6JFDYHFq0Yd -ȷy U4=qJj)~/4n -qqFF, MacBa0=B:*HqOΒ @V ##bKEI:>%#vT:]daCiLf j"V>B7Z -36*i` ࠁ"+hHD8488hazz`n@CähU+Ìx IeQٕ'j -xزɘJ#SJ34m10I0Sg-$*\e>Cf4:4lT#OcdXTk^\F$*QC⤄JŤ NhuiH7NL)8)aT(^ZJ).bS0aGt%UG OeY¡XV\7%(TT$* /ÕӁSCkJRY$2bNHQ QDTdV\h98-*$aaRb/8lT щÁ_&i2@jhHDBEbra~PnD%Ļ;j(J925N\("+dYX)p#Ԭ2WqGpL2F}qNfa~6PajLG:ss$ШYBH>PȃV;p2alved"28 9kcu +&cfip( k0qrc HZPu6Z>lJ -=4(v% Ɖ֙!0јJ'ңd%N찄%1XJ&fE%<^Vj8Oa!#AB'*bIDr dkN#^\MTi@tB&UQ824 0?ƙ-S$15:IRH{)|M@hxWp~ -&iN>V z/.ּERfڅɸ7cgog3 -2P@~g7uq;̖rmL'v.|ք}{).+Gs 2"8bzydz,˄ ši3y@Qvݣ[:qg,r ẛܑ&?(Tԅ[ك6WnnqLj{Xאt ݹ(c -xjs1,}%gc`*2Euƾ9O7_W -6'XN?y8/Pˎ}%IjV4QKN"a˫xV?`YLBLfHa۞Uoӫ*|~KI??WlP*``D(JfR`.5ҧo -Sf9j}&36-~ԑ( -\ZA{>Y8ڝ\Ḱb[(קrSk/gx@Wip2٤ 5'ƥ" -_/f|{ P ptW+/W?'&ҷ9cK̶@bK 6(OL@ R:&9?ߔmJa,6_Euqw&q%N\f.@$E+:NeD5Q he`O04Q2*QsUlM"D;׽@NY)0&FХ#.ړG\u?ItH;PbE49m[ȡ`I Yf$qVAV -AP4J_LB M8\a^ze2uyE@VhstaL=?=iӔ x/53bFni/_K=6L@>98KuPGnCQWM/oQX0_ )cz\i!IILrNB\  ^;hfE*z+$Um#AQl|r^'AczQRBqY׆2K@=3. ^vqa ´|s} vM;.HIFۘ!$냰cdwH,DYٷA9uRӬz[dozshS|\ġ;fȴF -<+'w _Nf,cYN[h.)OG|4ZefXlԪ[ڝ#.E)ytҙB2U=&*GM\)'R.zaCY5c [|U -8[ o#z -47e87 W/ۑkٳ٦]_ -uɦfADGiQ3sxϕ)}eQr~>zG숫΋Em]QTfE[<\c5To:ER5#YZwi\4,ss.3g\$)0{us(1V8*:ْ ^B%I1T.*h5kfLbF]1A~oPv!J:6L∺n#WE9_kk}?7(1qء %͂q;r׉e=,b uk4\e2-md9zo"N7|GnOLǻf2™&C6 (i0QZ-A9ث]Ht>*Dc_#@a','pMȉ-^Px#j -L!̞?$7K~78wf3WHx*Ajp˳c#iBb ?Yu>!V-~J?9TcwAl)TDؾ-9l$8N {_6|#K0#IaA% ~r! Ym_"-r{TR98R "1։!NUCU0 #%Օ9K]8@zeTG h`ΟiG -ϓ |OC&Zʗ%>Pa9u\J42SI1c趃#<: 6. ,c1S^<azm8GT4~+ 1lrgKP^v?5`6d@+>%q :<< I2&v5Hz}rZt|)T(wo)!*`!,pܚ5>^CxB>KA -n*#4qsFH+01|k$W[>|Qc !, fq(V(s}Bw|_b^ - -C!M!P>+!YhpxS k`#W '&e@2SZ׼Ն) TYd̬Ьw$P^L`Ye~P vߔL>ɢK%Ԃ.Я8y|. Zh*EZP \ɧ#(Ӝeˆ |BٶTݘ)Wrx5)CN䳔,X *hׁ I@݃+E*םpGb5&5T -^jtZ+VnJ̴W,i>Ƽ&?htLmD D &hF}?Ao?J޻ cHg+/ωL9A5m&Z|;xPIѨk5ğfoTÐnc&,\DGR-==9BwԿ5%daݖf`m2O=^8 / GIzT浄z"1B*ULY\G7E_$^elM,!1Ԛ 7>$|7Фӣx6ih ;.B\a6jLQdDe{ԺuKKғsx.ޫ>AS7.:]L+x&U|bax6!at_E&Ձi2FhAP)ZX!"^ƺ sH#oiIfa*bkS.^LAŢtbZ3@xwD︗OǐY66`HX,G?sO vq -uK P'^(>pq>Cs-C*fOd߱7\Lb}F{ %_Xӝv)wl|&)9uE7lBq`b -@z֋-Mĭ5$'a2>58m5,wWj>gKCRExbpbl~}ssKoJMu_XqyF7[**pGI4F sPa5AJ19,ͬѽ,ye,s8n',0bFӌ1#(g!]$r 9^l8z"kGuP-IU9R4ճ :1FnIU [TPwQא#!oNskDXr$$X=e;hGUb擭Kwѭz8ٱS8͔cWsTT"IN8C@_>b5&8 9,~]O˳L*Xt*<\u" }3>:~◗ kV -wu᠎5-#/E7˜q叀}VJfSp-Qj33ml16>dsr42&odzFpONE-mePI=y};..Z i%Ĺ75+DjoD1Bd bBMImx9/EɖO~ wT 눗!JIIa٤ф-!3XPWS@ֈ[ѸHOJ(h/'0k`,eR(l_ ->By/%fB<[1hxǬ^9EXρc#CsJ=KFcC3#^R5!YSx l ![4uM34H7nL`} dkj7۩B0qRT(W%Qo2 *Ըj{"X|#b,Zcg@Ϲnw.h5f3.FAl%ƚD߫Ñ4;z~2S7ٰ.1q}3ΌX%za+Y]Ccz3=77,15̱$g] a\&fW^D5؄SE-! ^!3 /sDyzvPu7T 7;^4O>cȷ䱮CL\0 Y/+Mk~Neo;6i~QҊmm-M𛪒58uDL$--+ý+ȈjpQt$ӧrmajhc^q7?`%mu&:e[,E5rф1q؈Eky9#}ᆐE'fԠH6 r(b%7IY',FYo,_TL4f*`Ӄ;!7R!jb o^ +:T=0,C[<݊TJJ&r] mk~ 8Cp [fC7j9NzjB(;{\bd2_yHA%_ldJDJlGqqbc[ r-Bm𕶒ï.t9i@2V^@&mu}*t*CgupMOGy敡bX !$.,沖;,8<]yw;WQΆ, Xu"֨Ls[@(xH -`^jp4$ic&Jo ݺa %9Qk[ lْ`7j'G\YE 4dP[RA!4Ҝ#})9- Ue\`#6}'; ZaYY ۻŃ.CYNwwx$[Kbob:K_] -)rg |ȽڶxD[ YFyug=1U:nhH!GI`0oǍr/5.1Jjl+𺏕 -G~Ůn33ǧ: 5j;{=3}(M @VP}VyH]\1t!jERjan}&;:_є/Zx&Oے"gT;P%r7G[|bDnrO< -GGSi`%T4\g@Jw 3GmIYf\qH; IXݪāpݚ"+@ :5M*wAu,hT8l8b_k="J+QNl8hzUF*\iFWT Z?_][!+Z}p+ tgKvx蟳p6|Fw=qm1;$b%[nP]Ψi$fBZ,vk2]ɽf kLN׶Wms`5cRZQ-hE|GE!B0fQsv7L@fV@T[ԶRY}_ .v􃦊|3XOLR fbsXl!`嵄BB-x~5#oI"EBfz/ ևTPz2ݡ]nh L%~(`ny ">X,5zBY! -:yKf &w7_Wzz^qN胪Cqi}RD!c -2ZP `쨰]09L@g+tVCޕq%`pJG gnX>ãzaE:zCfȦRV`xyXׅwe -p*yK$*?n!skӃ[B.ceK~ mڀ(NhWvGm򿷔HF6+h vqfo ]scN>"e7tЦqbbcOm0V!: #r"v]H.#0^zw\~8:}r;N^NXvzՕStЕU~iN)="倞)Csr'm&KPRZ1L#R2SD_}^I#~K9\ |įH E+iGehϳs/!VeK"XQ@d&BgE>{LA?Q1 -6SB.nt4:- Ԣc%O¯maة)n rM\rN}GwUgZ)HsnWUn<-^hS\T2nn 50%G5MK;PjmHr&&TV*Adx{Nxapb^O[6{Hg{Ote>jVV1R=pW +Ԛ"L ^ߦ#@+YR]=,9<9. ށ:-;vmѵQ WDYc5cZI*q54m3A$F&X~dihD%2ϾFl3D-|ӯ\y3\c)=buW1*c5}Gw]^@TyEQ5T)IlũnuP`p5 {̞}wUy  Vk[V.tqFWp:z`12'ocpO"5XߩG,D)^PCaJQ4+/wo„XX)/G;PиwF~_͹ 3z/eA.1E(0;/=GہsJz,q=wm)$fZc oJ$}q#@ߗԩ*g} n9þ1;kc*BI6{BMuI>G$[tZ)X2LKHMF=tbCEt!| u -Ty%^AZLVTt+Y?~ X=ND]'F@8%=@WV8XNeVHdԮs82YSsH&B8RKwxWEt u9MEC3ܞ\8PeeC 6Oz iNCC0J^UydTh<]߿C E0>^ -VXvӇ"K %]e.1f)@GwzfSnA ܄pmO9k] ?]vQذ8 ݤq@|\)!z58K\ñ=eU6Ue, g  0&&j5~=(ѿW`A(Adk#zk f .+8Lj1J °V켢g'!Т=)nj}y!{"l lW[Z=Sw|N&Аxj@OSxٕt<;Īu RXmPn i2 BK {umXhi8͠U*ts"lU!hCjЊBN?tŹ,ki#]~9vjqYv!ߏ2 v!f -vޤ) 9+Ni cRO{^Ryhn.r؜YSm'iT[̞h n<~/1{o#W'͖)^j?'3oP`N:DB)8VFg=<$;9<)T@h03uj NDUm9 >Te@Y)jMҔ\_϶BD(6T^xi/KrcrOzS[m$vL7(5P7Q54_>e\^akHtR}ݙ5WF+z~QҿRˮV_I -ACğ"Ap39tx,q1M[+! .-WJa6 (FW\,a yr={J*6$TjӁ90̧.cC(IDЈjrƯ+ -x`D*= 8d¨x{kaabcfY{m!,u[fvd;xc@7Am9Jeb@ӰUyt" :|hYDA/Ɏ9S o/d mЀ܈#iZ~1Ԏ&Q:hYuI!x؎g 5EgH5v*4*N5([hcy>m5 -$a!`g+ ׫ ^zc?HT]mV ~ r/J%&}lMe4^ -b]܎A2e |Aي6[RV$>T2 &H@Tr&BsSǥ9F"1;/X>9Xf %-]^i.J -Ì3$uX"BCY}UՁJx`TVNG *6f%ng*E* nH#Ffѱ&R.=f81vL6 N,WDWIZ,B -@(mxr)&Ke3}O ?}{lC3i7p:/rv|l]$U 0y\C1dP~G}? -lF"qcAXytV\у0pJUٺi]gvI %jZ.gX`u? `2@V E$觞+у>lM%] %X~:y%bQ@ $Ar<8s3Cq0<҅r9@$\?AN9Y RiĞ[u#-Ī9Y(1/Y9,̸(a7[Lmo𘝵ɱ)i~ߔ{Ѭu_ě;ӡ4p*Ԥ=gSVH\"\ O ER1(̈ưXgH1o;pWvX-S-J<Z{$'P]έҟM|8TjK3^&Ⅰm>:PfO5OI@te&R2@X%MtCɝg՞0K5{=kiTMJ -ĠYpkw^j9 |ԁآ+a#gX*ZZA@ž#{m^X0hpb - -CtBA%hMKt8G gFOyyVI; ;Rϩ#21:eϜ:ȁQSPiMInSZg70Z!#=U;ˊ.j ."xGx<- -gM/Ҡ_zcWECSY ZF.`zg^?7H1ׅcaBCa=R|9\?Bva@HgpK󵳎;di F[%:O>uoR)[5:2\A+ +NYU#/؃g8QIs){$4UMïI%كݛzEƐ! JsW$Ifd2(?ӕz`jk 6gКKr%.@ߺ YJp 7MQBԆZ`kK"Okw"`9l3f88M<63Dr&+sxB)oss H͏qjm`E5E֎Y[9ƀx bM|2NYcYgh\ bm3$ x*b1bt l$rRgŠx2ĉDߣ8'i5ډ- 9󫙜h@͚h@@1#WP@0 ym@6e8R -pi]T!B!& @BLB*1k"QFN`8LsgYEaǪWyb|pCm,SJYbfdLfAEMS߇~,/t#.5sܒE.u8: 3 RkF) up]7S4l` ]b!%5&Iq3i#9|nm( u`VgIt̐a5*PKPJF؊ v8B˸v`qri3XYTnqIM>N ^DP -us"~]_nk9BKS -mh&/ȷ[9A#Z+"If[f Ǔųq:Lɦ])4s{ -A>%S]Aj:1Rk14&q@wIو_X  cQU=*Ue$cj -)ף/c=UyVU0-X`:S^ #!Hy!4`6Ih> ZCD dFn0[jM:Dk4m]&(iH1A<Q/:i Ԡ8`eCDBV')-)xIA#`Mow7b=FݝŃ}C -cWXY/Yz!^A)^˵L)kٓK@:[ܷS1寝1֥X0VD02d՟~ސާ>R۠ <}ŰAQ4r[Z:z@\r2G,Ϫg/Cߕ&g'T)'S=M8-ءY|"g:s&S%4N8GI:g0xAj -x@I-)j Q*84Vy~~@BSwF*U2P0[3ra0Jgi#^m-99"G eW*tהyaJ< On-CU;?̪rĵ@XC9"'sjX"*a^2w9WWp\E))B?B3 f0c7;[;ŹOEm0?."cв+MvrCǺʃD*G#fιBs6h҃s-LcU,yp&g(7^T}4ROͥ"l ! R% -"I'Umh=bR`JORF#cA CvyY`}ܱ:> Px́$3IG Lb]Gj6Qwyl^ΓfXlR`Oabe -vR6' $0E=3X (Pen{zPqb$/&%&oEfʹ9#:Id'e!{0u)!8J7q.k1!266~J K&dcu`?,b!j] 3=DjWDTp`TcR7y>R0^aL5FT,/4QsD8B1aL3hKhE1eZ C̓͠&4_rϟ?dÛ!R)B^q(5CM#~JOQvR^gq`4J3ȎOӬVDBFPAfz9>oH9Q>QD4 -(XkW*eqXRA)TPĎIV>P8 sѫ⪭l =SWXz{lҴ(y^\HP0S(&sd5/#j,y -q1j ˨jOu+t+xA$~#t^}\lʝ=78BqB -fN}YG(|lAh'gfB3Q4UئIkpL $_4MMc%(!dw3o PX%84$#8#fU kU KVϴJ`VŰY ĵP̪Xõf<T<cL s5EJSq쩲f_N3U[1=y\y'[ -HPmtA:3@Y*pNFųAl 3pU8G &U`ҳ5(:\4sP ZBm pͳ G%* W+u fvlNH>m:&o\֪&i8ADP :Di%f@Xi]':iqTDdsn(A9b9z@qdx3?4g_ԙJTLLO^(gP/ps U+{s04D B~2,H}9H} be$JItզȐ$H0$JEjW8*RBj(:&B088 H9SgQ%zdPꂵF +AS_mEqqցHMܦn -Z8Myl"zj6BHtݚV8^nCm8IlЙK.eʰ..}Ie_ʬEgtsO} c*'ihę-Ge,gv3$%O͍AX]\.Vj|pfPu@CI7W :4tÏ,dt9/ wu tAi1ե9mQ#1PpK`zK=%л1ߦQA^#jM@k^zJ#Nވm90hQ+QH\SLtJ)mtHuZ(-d}n\[ulΗעBxV0!<ǘH?oNXUCtj&t"j #4bѺ -˓ CN-QLG%3=DViӚ 寷ǕA\\ZVm(֝!AHi`NQAK498dwp"+yK\lYA)=DFߗo%nGQbҀR:T퓲Rj$`Q]7"z™<M|^B(Σ\'琵qyf TMɴY7)+6])Ůo:ZX!{/YH^6*ZPG0EHE}iPF({j3zx! wtgaW8ХC*5!< j ١` ~1Пn<3 $."+F?#9`f ^P{Dܵkt Ds6A}5n3Vn(b7RV l]p| acͪ NFʇ#7} }L Q@rIo_>~#DiO+&xGR1oHCS"1凇1\]C~0g?wPYF?6M=DA!C4CtV"7S*,t3{J'AZK t=,|QX8_jh4B 3r ړ E(M[2!G#89j73 7J~x#PY6=P/RН3 -ovŇ셸l,.7\Ȍ7^sZ Н#wA]S0@[3E2PⵅsuqX-|HIr&Sφr f?<]KȤkeyHiEuW1A0ySA+Ve63G5&Vx:_t Iكx7})YFǝ6RoDRF]$,N,z%6!"M3J6wS>EAZl9 ׉=89U!E_6K}#"ƞ2FI/  "ΫoAJQxm1Ǖ^G,U/5UNCր -B[|K.V^4u7'|׍&?џLT -#e7iXG0W󮑐I`ƫ_oeU?Gq?+04rK0؏53ZCq Ө|Ɂ QC%Z0S]"#8)* 4!1Y_{q -Oӵa9C e ;N)^z/jnO`X -r&T21k/I rS\Yr:]/y~kCJQ7t4LyyY9>-bl2NtXaV/Z*SLMX(^>Y{#k{ [pn12C#DѨi!mXPj`V{G-cZ,*Rc~Bh=G|Ot'-X7DmGQES&OoTN8(VS½8X/ -Va3pe$Br,b@j:~}zQWAtH_DM;L`) -͞E(_ -j:?R2!ESZ/d`GHJOokY8CeoT[xl/ lʡL$X7|;ovBn`r[8GYh&Š.- -U{!66$^7GSǝ!y!#g0_B%3lCxi 8{ߓk[Ek|1fJ>rP:T*ZշVw1ݝ 7gέ]ƤhEm{ɷdzaTڇG|GC= b2xS7MY?OD|f/g<e㴍wbmDRahbHj >& -钨t]$w.5C r= $<EPfəUw★7DJ E(%~:҅ iCV) =M0 KE9?V2Bt:lgQ48AsL2Iia[YJ ٨9Y4i O O_ wA_,~d997#/5[\ -ִ֕ɔbPt=tSt#QKJpX$8q 䍸 Q%QxH Di([ɾp b+D6/ iTn T 3EH0I03B}:n&a8F]ֆA՗U> w4:R#na;^P/P! c̦Nᨽb,BzD/KuQJ ?W "|Wp2T\)kÁik;-Xhkh95O&^Yn^G=$u Pӆ*u5LMtmtPٷ0?I?ΛF5^K[ q~ HC*|(WS 8coO$> 6#ߺ~`m2AՊT͠SZ -DYw /ɵ&۳(K~T>nEsgP:4ώ/y;M>bQȠH#cKg1bv&5_:~Qaa0cRTGYU~с4)gVpmUs{M NL -mh4Bu}i*L$wR_'wQbn6pn yCc¯P&'YF&y! ?0Z|ԆsR[ ܾ -Ca~ -c3AKyfPP@%U m>|p7m삣pUߙpE{u;'b|(Q8/gH 1:4*jN]:z(MFQ&zǞNǒʭ(Oo:Q@ۖ~ uY)q ? F 設|ex\BGQA;Ԁ^lٟ}\O-׺""ՊPU>VJ>P7@L#! T :n[P1[;[۱"jV6Jֲ8^ 6)v6V0WpeV%A.o5u .|b/*ZwXзEx d/`5 =Qj+wrqm9 F=vbMMÍ +h'T/5'F(-61R𕑘rbe%y_Jެ=l=ZDFdְ0k}qGDWPdyWFHd]EͨfgVԣ=&!Zu'HO))~{==T^ -QQa+L% }N)B,V*0^!!=B g`wWASt-qh8Q|U61C,< LuWnC)bI3BQ$…0أ?Em$s*J@B,SxJGZMۚ~Y~!b|Ċֆ6#51<8l Am@;9OC^!F]sK[/pXRNMek~|NSs@/C@NAk:UY,p=Sm)let=|a :]A1{ԔNr8r}kw8xtedP%\XZD?]Oß?({ :AsPք;pV5fzp&e.긆9A]X*,89f) (-1HfE o[`aeHU -endstream endobj 6 0 obj <> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 32 0 obj [31 0 R] endobj 53 0 obj <> endobj xref -0 54 -0000000004 65535 f -0000000016 00000 n -0000000159 00000 n -0000048361 00000 n -0000000000 00000 f -0000000000 00000 f -0000212424 00000 n -0000000000 00000 f -0000048412 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000212498 00000 n -0000212529 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000050150 00000 n -0000049959 00000 n -0000212614 00000 n -0000048806 00000 n -0000052578 00000 n -0000052465 00000 n -0000049058 00000 n -0000049397 00000 n -0000049445 00000 n -0000050034 00000 n -0000050065 00000 n -0000050295 00000 n -0000050320 00000 n -0000050652 00000 n -0000050795 00000 n -0000050864 00000 n -0000051154 00000 n -0000051269 00000 n -0000052652 00000 n -0000052857 00000 n -0000054064 00000 n -0000119653 00000 n -0000185242 00000 n -0000212639 00000 n -trailer -<<16DA5999AEBA0045AFF458B125925EA0>]>> -startxref -212845 -%%EOF diff --git a/gbt7714-author-year.bst b/gbt7714-author-year.bst new file mode 100644 index 0000000..65cc492 --- /dev/null +++ b/gbt7714-author-year.bst @@ -0,0 +1,2160 @@ +%% +%% This is file `gbt7714-author-year.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% gbt7714.dtx (with options: `2015,authoryear') +%% ------------------------------------------------------------------- +%% GB/T 7714-2015 BibTeX Style +%% https://github.com/CTeX-org/gbt7714-bibtex-style +%% Version: 2020/03/14 v2.0.1 +%% ------------------------------------------------------------------- +%% Copyright (C) 2016-2020 by Zeping Lee +%% ------------------------------------------------------------------- +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% https://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% ------------------------------------------------------------------- +INTEGERS { + uppercase.name + max.num.authors + period.between.author.year + sentence.case.title + link.title + title.in.journal + show.mark + show.medium.type + slash.for.extraction + in.booktitle + abbreviate.journal + italic.journal + bold.journal.volume + show.missing.address.publisher + space.before.pages + only.start.page + show.url + show.doi + show.note + show.english.translation + lang.zh.order + lang.ja.order + lang.en.order + lang.ru.order + lang.other.order +} + +FUNCTION {load.config} +{ + #1 'uppercase.name := + #3 'max.num.authors := + #0 'period.between.author.year := + #1 'sentence.case.title := + #0 'link.title := + #1 'title.in.journal := + #1 'show.mark := + #1 'show.medium.type := + #1 'slash.for.extraction := + #0 'in.booktitle := + #0 'abbreviate.journal := + #0 'italic.journal := + #0 'bold.journal.volume := + #1 'show.missing.address.publisher := + #0 'space.before.pages := + #0 'only.start.page := + #1 'show.url := + #1 'show.doi := + #0 'show.note := + #0 'show.english.translation := + #1 'lang.zh.order := + #2 'lang.ja.order := + #3 'lang.en.order := + #4 'lang.ru.order := + #5 'lang.other.order := +} + +ENTRY + { address + author + booktitle + date + doi + edition + editor + howpublished + institution + journal + key + language + mark + medium + note + number + organization + pages + publisher + school + series + title + translator + translation + url + urldate + volume + year + } + { entry.lang entry.is.electronic entry.numbered } + { label extra.label sort.label short.list entry.mark entry.url } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash } + +INTEGERS { lang.zh lang.ja lang.en lang.ru lang.other } + +INTEGERS { charptr len } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'after.slash := + #3 'lang.zh := + #4 'lang.ja := + #1 'lang.en := + #2 'lang.ru := + #0 'lang.other := +} + +FUNCTION {bbl.anonymous} +{ entry.lang lang.zh = + { "佚名" } + { "Anon" } + if$ +} + +FUNCTION {bbl.space} +{ entry.lang lang.zh = + { "\ " } + { " " } + if$ +} + +FUNCTION {bbl.et.al} +{ entry.lang lang.zh = + { "等" } + { entry.lang lang.ja = + { "他" } + { entry.lang lang.ru = + { "идр" } + { "et~al." } + if$ + } + if$ + } + if$ +} + +FUNCTION {citation.et.al} +{ bbl.et.al } + +FUNCTION {bbl.colon} { ": " } + +FUNCTION {bbl.wide.space} { "\quad " } + +FUNCTION {bbl.slash} { "//\allowbreak " } + +FUNCTION {bbl.sine.loco} +{ entry.lang lang.zh = + { "[出版地不详]" } + { "[S.l.]" } + if$ +} + +FUNCTION {bbl.sine.nomine} +{ entry.lang lang.zh = + { "[出版者不详]" } + { "[s.n.]" } + if$ +} + +FUNCTION {bbl.sine.loco.sine.nomine} +{ entry.lang lang.zh = + { "[出版地不详: 出版者不详]" } + { "[S.l.: s.n.]" } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state after.slash = + { bbl.slash * write$ + newline$ + } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.after} +{ 't := + duplicate$ empty$ + 'pop$ + { 's := + output.state mid.sentence = + { t * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state after.slash = + { bbl.slash * write$ } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s + } + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + show.english.translation entry.lang lang.zh = and + { ")" + write$ + } + 'skip$ + if$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { output.state after.slash = + 'skip$ + { after.block 'output.state := } + if$ + } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { output.state after.slash = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ + } + if$ +} + +FUNCTION {new.slash} +{ output.state before.all = + 'skip$ + { slash.for.extraction + { after.slash 'output.state := } + { after.block 'output.state := } + if$ + } + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {italicize} +{ duplicate$ empty$ + { pop$ "" } + { "\textit{" swap$ * "}" * } + if$ +} + +INTEGERS { byte second.byte } + +INTEGERS { char.lang tmp.lang } + +STRINGS { tmp.str } + +FUNCTION {get.str.lang} +{ 'tmp.str := + lang.other 'tmp.lang := + #1 'charptr := + tmp.str text.length$ #1 + 'len := + { charptr len < } + { tmp.str charptr #1 substring$ chr.to.int$ 'byte := + byte #128 < + { charptr #1 + 'charptr := + byte #64 > byte #91 < and byte #96 > byte #123 < and or + { lang.en 'char.lang := } + { lang.other 'char.lang := } + if$ + } + { tmp.str charptr #1 + #1 substring$ chr.to.int$ 'second.byte := + byte #224 < + { charptr #2 + 'charptr := + byte #207 > byte #212 < and + byte #212 = second.byte #176 < and or + { lang.ru 'char.lang := } + { lang.other 'char.lang := } + if$ + } + { byte #240 < + { charptr #3 + 'charptr := + byte #227 > byte #234 < and + { lang.zh 'char.lang := } + { byte #227 = + { second.byte #143 > + { lang.zh 'char.lang := } + { second.byte #128 > second.byte #132 < and + { lang.ja 'char.lang := } + { lang.other 'char.lang := } + if$ + } + if$ + } + { byte #239 = + second.byte #163 > second.byte #172 < and and + { lang.zh 'char.lang := } + { lang.other 'char.lang := } + if$ + } + if$ + } + if$ + } + { charptr #4 + 'charptr := + byte #240 = second.byte #159 > and + { lang.zh 'char.lang := } + { lang.other 'char.lang := } + if$ + } + if$ + } + if$ + } + if$ + char.lang tmp.lang > + { char.lang 'tmp.lang := } + 'skip$ + if$ + } + while$ + tmp.lang +} + +FUNCTION {check.entry.lang} +{ author field.or.null + title field.or.null * + get.str.lang +} + +FUNCTION {set.entry.lang} +{ language empty$ + { check.entry.lang } + { language "english" = language "american" = or language "british" = or + { lang.en } + { language "chinese" = + { lang.zh } + { language "japanese" = + { lang.ja } + { language "russian" = + { lang.ru } + { check.entry.lang } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + 'entry.lang := +} + +FUNCTION {set.entry.numbered} +{ type$ "patent" = + type$ "standard" = or + type$ "techreport" = or + { #1 'entry.numbered := } + { #0 'entry.numbered := } + if$ +} + +INTEGERS { nameptr namesleft numnames name.lang } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := + nameptr max.num.authors > + { bbl.et.al + #1 'namesleft := + } + { t "others" = + { bbl.et.al } + { t get.str.lang 'name.lang := + name.lang lang.en = + { t #1 "{vv~}{ll}{~f{~}}" format.name$ + uppercase.name + { "u" change.case$ } + 'skip$ + if$ + t #1 "{, jj}" format.name$ * + } + { t #1 "{ll}{ff}" format.name$ } + if$ + } + if$ + } + if$ + nameptr #1 > + { ", " swap$ * * } + 'skip$ + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author empty$ not + { author format.names } + { "empty author in " cite$ * warning$ + bbl.anonymous + } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names } + if$ +} + +FUNCTION {format.translators} +{ translator empty$ + { "" } + { translator format.names + entry.lang lang.zh = + { translator num.names$ #3 > + { "译" * } + { ", 译" * } + if$ + } + 'skip$ + if$ + } + if$ +} + +FUNCTION {format.full.names} +{'s := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := + t get.str.lang 'name.lang := + name.lang lang.en = + { t #1 "{vv~}{ll}" format.name$ 't := } + { t #1 "{ll}{ff}" format.name$ 't := } + if$ + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.full} +{ author empty$ + { editor empty$ + { "" } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.full} +{ author empty$ + { "" } + { author format.full.names } + if$ +} + +FUNCTION {editor.full} +{ editor empty$ + { "" } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.full + { type$ "collection" = + type$ "proceedings" = + or + 'editor.full + 'author.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[" write$ + label ")" * + make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + 's := + s text.length$ 'charptr := + { charptr #0 > s charptr #1 substring$ "[" = not and } + { charptr #1 - 'charptr := } + while$ + charptr #0 > + { "{" s * "}" * } + { s } + if$ + "]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {change.sentence.case} +{ entry.lang lang.en = + { "t" change.case$ } + 'skip$ + if$ +} + +FUNCTION {add.link} +{ url empty$ not + { "\href{" url * "}{" * swap$ * "}" * } + { doi empty$ not + { "\href{http://dx.doi.org/" doi * "}{" * swap$ * "}" * } + 'skip$ + if$ + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title + sentence.case.title + 'change.sentence.case + 'skip$ + if$ + entry.numbered number empty$ not and + { bbl.colon * number * } + 'skip$ + if$ + link.title + 'add.link + 'skip$ + if$ + } + if$ +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {is.digit} +{ duplicate$ empty$ + { pop$ #0 } + { chr.to.int$ + duplicate$ "0" chr.to.int$ < + { pop$ #0 } + { "9" chr.to.int$ > + { #0 } + { #1 } + if$ + } + if$ + } + if$ +} + +FUNCTION {is.number} +{ 's := + s empty$ + { #0 } + { s text.length$ 'charptr := + { charptr #0 > + s charptr #1 substring$ is.digit + and + } + { charptr #1 - 'charptr := } + while$ + charptr not + } + if$ +} + +FUNCTION {format.volume} +{ volume empty$ not + { volume is.number + { entry.lang lang.zh = + { "第 " volume * " 卷" * } + { "volume" volume tie.or.space.connect } + if$ + } + { volume } + if$ + } + { "" } + if$ +} + +FUNCTION {format.number} +{ number empty$ not + { number is.number + { entry.lang lang.zh = + { "第 " number * " 册" * } + { "number" number tie.or.space.connect } + if$ + } + { number } + if$ + } + { "" } + if$ +} + +FUNCTION {format.volume.number} +{ volume empty$ not + { format.volume } + { format.number } + if$ +} + +FUNCTION {format.title.vol.num} +{ title + sentence.case.title + 'change.sentence.case + 'skip$ + if$ + entry.numbered + { number empty$ not + { bbl.colon * number * } + 'skip$ + if$ + } + { format.volume.number 's := + s empty$ not + { bbl.colon * s * } + 'skip$ + if$ + } + if$ +} + +FUNCTION {format.series.vol.num.title} +{ format.volume.number 's := + series empty$ not + { series + sentence.case.title + 'change.sentence.case + 'skip$ + if$ + entry.numbered + { bbl.wide.space * } + { bbl.colon * + s empty$ not + { s * bbl.wide.space * } + 'skip$ + if$ + } + if$ + title * + sentence.case.title + 'change.sentence.case + 'skip$ + if$ + entry.numbered number empty$ not and + { bbl.colon * number * } + 'skip$ + if$ + } + { format.title.vol.num } + if$ + link.title + 'add.link + 'skip$ + if$ +} + +FUNCTION {format.booktitle.vol.num} +{ booktitle + entry.numbered + 'skip$ + { format.volume.number 's := + s empty$ not + { bbl.colon * s * } + 'skip$ + if$ + } + if$ +} + +FUNCTION {format.series.vol.num.booktitle} +{ format.volume.number 's := + series empty$ not + { series bbl.colon * + entry.numbered not s empty$ not and + { s * bbl.wide.space * } + 'skip$ + if$ + booktitle * + } + { format.booktitle.vol.num } + if$ + in.booktitle + { duplicate$ empty$ not entry.lang lang.en = and + { "In: " swap$ * } + 'skip$ + if$ + } + 'skip$ + if$ +} + +FUNCTION {remove.period} +{ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ 'tmp.str := + tmp.str "." = not + { s tmp.str * 's := } + 'skip$ + if$ + t #2 global.max$ substring$ 't := + } + while$ + s +} + +FUNCTION {abbreviate} +{ remove.period + 't := + t "l" change.case$ 's := + "" + s "physical review letters" = + { "Phys Rev Lett" } + 'skip$ + if$ + 's := + s empty$ + { t } + { pop$ s } + if$ +} + +FUNCTION {format.journal} +{ journal empty$ not + { journal + abbreviate.journal + 'abbreviate + 'skip$ + if$ + italic.journal entry.lang lang.en = and + 'italicize + 'skip$ + if$ + } + { "" } + if$ +} + +FUNCTION {set.entry.mark} +{ entry.mark empty$ not + 'pop$ + { mark empty$ not + { pop$ mark 'entry.mark := } + { 'entry.mark := } + if$ + } + if$ +} + +FUNCTION {format.mark} +{ show.mark + { entry.mark + show.medium.type + { medium empty$ not + { "/" * medium * } + { entry.is.electronic + { "/OL" * } + 'skip$ + if$ + } + if$ + } + 'skip$ + if$ + 'entry.mark := + "\allowbreak[" entry.mark * "]" * + } + { "" } + if$ +} + +FUNCTION {num.to.ordinal} +{ duplicate$ text.length$ 'charptr := + duplicate$ charptr #1 substring$ 's := + s "1" = + { "st" * } + { s "2" = + { "nd" * } + { s "3" = + { "rd" * } + { "th" * } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { edition is.number + { entry.lang lang.zh = + { edition " 版" * } + { edition num.to.ordinal " ed." * } + if$ + } + { entry.lang lang.en = + { edition change.sentence.case 's := + s "Revised" = s "Revised edition" = or + { "Rev. ed." } + { s " ed." *} + if$ + } + { edition } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.publisher} +{ publisher empty$ not + { publisher } + { school empty$ not + { school } + { organization empty$ not + { organization } + { institution empty$ not + { institution } + { "" } + if$ + } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.address.publisher} +{ address empty$ not + { address + format.publisher empty$ not + { bbl.colon * format.publisher * } + { entry.is.electronic not show.missing.address.publisher and + { bbl.colon * bbl.sine.nomine * } + 'skip$ + if$ + } + if$ + } + { entry.is.electronic not show.missing.address.publisher and + { format.publisher empty$ not + { bbl.sine.loco bbl.colon * format.publisher * } + { bbl.sine.loco.sine.nomine } + if$ + } + { format.publisher empty$ not + { format.publisher } + { "" } + if$ + } + if$ + } + if$ +} + +FUNCTION {extract.before.dash} +{ duplicate$ empty$ + { pop$ "" } + { 's := + #1 'charptr := + s text.length$ #1 + 'len := + { charptr len < + s charptr #1 substring$ "-" = not + and + } + { charptr #1 + 'charptr := } + while$ + s #1 charptr #1 - substring$ + } + if$ +} + +FUNCTION {extract.after.dash} +{ duplicate$ empty$ + { pop$ "" } + { 's := + #1 'charptr := + s text.length$ #1 + 'len := + { charptr len < + s charptr #1 substring$ "-" = not + and + } + { charptr #1 + 'charptr := } + while$ + { charptr len < + s charptr #1 substring$ "-" = + and + } + { charptr #1 + 'charptr := } + while$ + s charptr global.max$ substring$ + } + if$ +} + +FUNCTION {contains.dash} +{ duplicate$ empty$ + { pop$ #0 } + { 's := + { s empty$ not + s #1 #1 substring$ "-" = not + and + } + { s #2 global.max$ substring$ 's := } + while$ + s empty$ not + } + if$ +} + +FUNCTION {format.year} +{ year empty$ not + { year extract.before.dash } + { date empty$ not + { date extract.before.dash } + { "empty year in " cite$ * warning$ + urldate empty$ not + { "[" urldate extract.before.dash * "]" * } + { "" } + if$ + } + if$ + } + if$ + extra.label * +} + +FUNCTION {format.date} +{ type$ "patent" = type$ "newspaper" = or + date empty$ not and + { date } + { year } + if$ +} + +FUNCTION {format.editdate} +{ date empty$ not + { "\allowbreak(" date * ")" * } + { "" } + if$ +} + +FUNCTION {format.urldate} +{ urldate empty$ not entry.is.electronic and + { "\allowbreak[" urldate * "]" * } + { "" } + if$ +} + +FUNCTION {hyphenate} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { "-" * + { t #1 #1 substring$ "-" = } + { t #2 global.max$ substring$ 't := } + while$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages + only.start.page + 'extract.before.dash + 'hyphenate + if$ + } + if$ +} + +FUNCTION {format.journal.volume} +{ volume empty$ not + { bold.journal.volume + { "\textbf{" volume * "}" * } + { volume } + if$ + } + { "" } + if$ +} + +FUNCTION {format.journal.number} +{ number empty$ not + { "\penalty0 (" number * ")" * } + { "" } + if$ +} + +FUNCTION {format.journal.pages} +{ pages empty$ + { "" } + { space.before.pages + { ": " } + { ":\penalty0 " } + if$ + format.pages * + } + if$ +} + +FUNCTION {format.periodical.year.volume.number} +{ year empty$ not + { year extract.before.dash } + { "empty year in periodical " cite$ * warning$ } + if$ + volume empty$ not + { ", " * volume extract.before.dash * } + 'skip$ + if$ + number empty$ not + { "\penalty0 (" * number extract.before.dash * ")" * } + 'skip$ + if$ + year contains.dash + { "--" * + year extract.after.dash empty$ + volume extract.after.dash empty$ and + number extract.after.dash empty$ and not + { year extract.after.dash empty$ not + { year extract.after.dash * } + { year extract.before.dash * } + if$ + volume empty$ not + { ", " * volume extract.after.dash * } + 'skip$ + if$ + number empty$ not + { "\penalty0 (" * number extract.after.dash * ")" * } + 'skip$ + if$ + } + 'skip$ + if$ + } + 'skip$ + if$ +} + +FUNCTION {check.url} +{ url empty$ not + { "\url{" url * "}" * 'entry.url := + #1 'entry.is.electronic := + } + { howpublished empty$ not + { howpublished #1 #5 substring$ "\url{" = + { howpublished 'entry.url := + #1 'entry.is.electronic := + } + 'skip$ + if$ + } + { note empty$ not + { note #1 #5 substring$ "\url{" = + { note 'entry.url := + #1 'entry.is.electronic := + } + 'skip$ + if$ + } + 'skip$ + if$ + } + if$ + } + if$ +} + +FUNCTION {format.url} +{ entry.url +} + +FUNCTION {output.url} +{ entry.url empty$ not + { new.block + entry.url output + } + 'skip$ + if$ +} + +FUNCTION {check.doi} +{ doi empty$ not + { #1 'entry.is.electronic := } + 'skip$ + if$ +} + +FUNCTION {is.in.url} +{ 's := + s empty$ + { #1 } + { entry.url empty$ + { #0 } + { s text.length$ 'len := + entry.url text.length$ 'charptr := + { entry.url charptr len substring$ s = not + charptr #0 > + and + } + { charptr #1 - 'charptr := } + while$ + charptr + } + if$ + } + if$ +} + +FUNCTION {format.doi} +{ "" + doi empty$ not + { "" 's := + doi 't := + #0 'numnames := + { t empty$ not} + { t #1 #1 substring$ 'tmp.str := + tmp.str "," = tmp.str " " = or t #2 #1 substring$ empty$ or + { t #2 #1 substring$ empty$ + { s tmp.str * 's := } + 'skip$ + if$ + s empty$ s is.in.url or + 'skip$ + { numnames #1 + 'numnames := + numnames #1 > + { ", " * } + { "DOI: " * } + if$ + "\doi{" s * "}" * * + } + if$ + "" 's := + } + { s tmp.str * 's := } + if$ + t #2 global.max$ substring$ 't := + } + while$ + } + 'skip$ + if$ +} + +FUNCTION {output.doi} +{ doi empty$ not show.doi and + show.english.translation entry.lang lang.zh = and not and + { new.block + format.doi output + } + 'skip$ + if$ +} + +FUNCTION {check.electronic} +{ "" 'entry.url := + #0 'entry.is.electronic := + 'check.doi + 'skip$ + if$ + 'check.url + 'skip$ + if$ + medium empty$ not + { medium "MT" = medium "DK" = or medium "CD" = or medium "OL" = or + { #1 'entry.is.electronic := } + 'skip$ + if$ + } + 'skip$ + if$ +} + +FUNCTION {format.note} +{ note empty$ not show.note and + { note } + { "" } + if$ +} + +FUNCTION {output.translation} +{ show.english.translation entry.lang lang.zh = and + { translation empty$ not + { translation } + { "[English translation missing!]" } + if$ + " (in Chinese)" * output + write$ + format.doi duplicate$ empty$ not + { newline$ + write$ + } + 'pop$ + if$ + " \\" write$ + newline$ + "(" write$ + "" + before.all 'output.state := + } + 'skip$ + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ + year empty$ + and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {monograph} +{ output.bibitem + output.translation + author empty$ not + { format.authors } + { editor empty$ not + { format.editors } + { "empty author and editor in " cite$ * warning$ + bbl.anonymous + } + if$ + } + if$ + output + period.between.author.year + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + new.block + format.series.vol.num.title "title" output.check + "M" set.entry.mark + format.mark "" output.after + new.block + format.translators output + new.sentence + format.edition output + new.block + format.address.publisher output + format.pages bbl.colon output.after + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + output.translation + format.authors output + author format.key output + period.between.author.year + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + new.block + format.title "title" output.check + "M" set.entry.mark + format.mark "" output.after + new.block + format.translators output + new.slash + format.editors output + new.block + format.series.vol.num.booktitle "booktitle" output.check + new.block + format.edition output + new.block + format.address.publisher output + format.pages bbl.colon output.after + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {periodical} +{ output.bibitem + output.translation + format.authors output + author format.key output + period.between.author.year + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + new.block + format.title "title" output.check + "J" set.entry.mark + format.mark "" output.after + new.block + format.periodical.year.volume.number output + new.block + format.address.publisher output + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {article} +{ output.bibitem + output.translation + format.authors output + author format.key output + period.between.author.year + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + new.block + title.in.journal + { format.title "title" output.check + "J" set.entry.mark + format.mark "" output.after + new.block + } + 'skip$ + if$ + format.journal "journal" output.check + format.journal.volume output + format.journal.number "" output.after + format.journal.pages "" output.after + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {patent} +{ output.bibitem + output.translation + format.authors output + author format.key output + period.between.author.year + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + new.block + format.title "title" output.check + "P" set.entry.mark + format.mark "" output.after + new.block + format.date "year" output.check + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {electronic} +{ #1 #1 check.electronic + #1 'entry.is.electronic := + output.bibitem + output.translation + format.authors output + author format.key output + period.between.author.year + 'new.sentence + 'skip$ + if$ + format.year "year" output.check + new.block + format.series.vol.num.title "title" output.check + "EB" set.entry.mark + format.mark "" output.after + new.block + format.address.publisher output + format.pages bbl.colon output.after + format.editdate "" output.after + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {misc} +{ journal empty$ not + 'article + { booktitle empty$ not + 'incollection + { publisher empty$ not + 'monograph + { entry.is.electronic + 'electronic + { "Z" set.entry.mark + monograph + } + if$ + } + if$ + } + if$ + } + if$ + empty.misc.check +} + +FUNCTION {archive} +{ "A" set.entry.mark + misc +} + +FUNCTION {book} { monograph } + +FUNCTION {booklet} { book } + +FUNCTION {collection} +{ "G" set.entry.mark + monograph +} + +FUNCTION {database} +{ "DB" set.entry.mark + electronic +} + +FUNCTION {dataset} +{ "DS" set.entry.mark + electronic +} + +FUNCTION {inbook} { book } + +FUNCTION {inproceedings} +{ "C" set.entry.mark + incollection +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {map} +{ "CM" set.entry.mark + misc +} + +FUNCTION {manual} { monograph } + +FUNCTION {mastersthesis} +{ "D" set.entry.mark + monograph +} + +FUNCTION {newspaper} +{ "N" set.entry.mark + article +} + +FUNCTION {online} +{ "EB" set.entry.mark + electronic +} + +FUNCTION {phdthesis} { mastersthesis } + +FUNCTION {proceedings} +{ "C" set.entry.mark + monograph +} + +FUNCTION {software} +{ "CP" set.entry.mark + electronic +} + +FUNCTION {standard} +{ "S" set.entry.mark + misc +} + +FUNCTION {techreport} +{ "R" set.entry.mark + misc +} + +FUNCTION {unpublished} +{ "Z" set.entry.mark + misc +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}{, jj}{, ff}" format.name$ 't := + t get.str.lang 'name.lang := + name.lang lang.en = + { t #1 "{vv~}{ll}" format.name$} + { t #1 "{ll}{ff}" format.name$} + if$ + s num.names$ #1 > + { bbl.space * citation.et.al * } + 'skip$ + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.key.organization.label} +{ author empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.organization.label} +{ editor empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "collection" = + type$ "proceedings" = + or + { editor empty$ not + 'editor.key.organization.label + 'author.key.organization.label + if$ + } + 'author.key.label + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + format.year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.language.label} +{ entry.lang lang.zh = + { lang.zh.order } + { entry.lang lang.ja = + { lang.ja.order } + { entry.lang lang.en = + { lang.en.order } + { entry.lang lang.ru = + { lang.ru.order } + { lang.other.order } + if$ + } + if$ + } + if$ + } + if$ + int.to.chr$ +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { numnames #2 > nameptr #2 = and + { "zz" * year field.or.null * " " * } + 'skip$ + if$ + t sortify * + } + if$ + } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {anonymous.sort} +{ entry.lang lang.zh = + { "yi4 ming2" } + { "anon" } + if$ +} + +FUNCTION {warn.empty.key} +{ entry.lang lang.zh = + { "empty key in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {author.sort} +{ key empty$ + { warn.empty.key + author empty$ + { anonymous.sort } + { author sort.format.names } + if$ + } + { key sortify } + if$ +} + +FUNCTION {author.editor.sort} +{ key empty$ + { warn.empty.key + author empty$ + { editor empty$ + { anonymous.sort } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ + } + { key sortify } + if$ +} + +FUNCTION {author.organization.sort} +{ key empty$ + { warn.empty.key + author empty$ + { organization empty$ + { anonymous.sort } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ + } + { key sortify } + if$ +} + +FUNCTION {editor.organization.sort} +{ key empty$ + { warn.empty.key + editor empty$ + { organization empty$ + { anonymous.sort } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ + } + { key sortify } + if$ +} + +FUNCTION {presort} +{ set.entry.lang + set.entry.numbered + show.url show.doi check.electronic + calc.label + label sortify + " " + * + sort.language.label + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "collection" = + type$ "proceedings" = + or + 'editor.organization.sort + 'author.sort + if$ + } + if$ + * + " " + * + year field.or.null sortify + * + " " + * + cite$ + * + #1 entry.max$ substring$ + 'sort.label := + sort.label * + #1 entry.max$ substring$ + 'sort.key$ := +} + +STRINGS { longest.label last.label next.extra } + +INTEGERS { longest.label.width last.extra.num number.label } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := + #0 'number.label := +} + +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} + +FUNCTION {bib.sort.order} +{ sort.label 'sort.key$ := +} + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\providecommand{\natexlab}[1]{#1}" + write$ newline$ + "\providecommand{\url}[1]{#1}" + write$ newline$ + "\expandafter\ifx\csname urlstyle\endcsname\relax\else" + write$ newline$ + " \urlstyle{same}\fi" + write$ newline$ + show.doi + { "\expandafter\ifx\csname href\endcsname\relax" + write$ newline$ + " \DeclareUrlCommand\doi{\urlstyle{rm}}\else" + write$ newline$ + " \providecommand\doi[1]{\href{https://doi.org/#1}{\nolinkurl{#1}}}\fi" + write$ newline$ + } + 'skip$ + if$ +} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +READ + +EXECUTE {init.state.consts} + +EXECUTE {load.config} + +ITERATE {presort} + +SORT + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +ITERATE {bib.sort.order} + +SORT + +EXECUTE {begin.bib} + +ITERATE {call.type$} + +EXECUTE {end.bib} diff --git a/gbt7714-numerical.bst b/gbt7714-numerical.bst new file mode 100644 index 0000000..c8424d0 --- /dev/null +++ b/gbt7714-numerical.bst @@ -0,0 +1,1983 @@ +%% +%% This is file `gbt7714-numerical.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% gbt7714.dtx (with options: `2015,numerical') +%% ------------------------------------------------------------------- +%% GB/T 7714-2015 BibTeX Style +%% https://github.com/CTeX-org/gbt7714-bibtex-style +%% Version: 2020/03/14 v2.0.1 +%% ------------------------------------------------------------------- +%% Copyright (C) 2016-2020 by Zeping Lee +%% ------------------------------------------------------------------- +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% https://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% ------------------------------------------------------------------- +INTEGERS { + uppercase.name + max.num.authors + period.between.author.year + sentence.case.title + link.title + title.in.journal + show.mark + show.medium.type + slash.for.extraction + in.booktitle + abbreviate.journal + italic.journal + bold.journal.volume + show.missing.address.publisher + space.before.pages + only.start.page + show.url + show.doi + show.note + show.english.translation +} + +FUNCTION {load.config} +{ + #1 'uppercase.name := + #3 'max.num.authors := + #1 'sentence.case.title := + #0 'link.title := + #1 'title.in.journal := + #1 'show.mark := + #1 'show.medium.type := + #1 'slash.for.extraction := + #0 'in.booktitle := + #0 'abbreviate.journal := + #0 'italic.journal := + #0 'bold.journal.volume := + #1 'show.missing.address.publisher := + #0 'space.before.pages := + #0 'only.start.page := + #1 'show.url := + #1 'show.doi := + #0 'show.note := + #0 'show.english.translation := +} + +ENTRY + { address + author + booktitle + date + doi + edition + editor + howpublished + institution + journal + key + language + mark + medium + note + number + organization + pages + publisher + school + series + title + translator + translation + url + urldate + volume + year + } + { entry.lang entry.is.electronic entry.numbered } + { label extra.label sort.label short.list entry.mark entry.url } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash } + +INTEGERS { lang.zh lang.ja lang.en lang.ru lang.other } + +INTEGERS { charptr len } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'after.slash := + #3 'lang.zh := + #4 'lang.ja := + #1 'lang.en := + #2 'lang.ru := + #0 'lang.other := +} + +FUNCTION {bbl.anonymous} +{ entry.lang lang.zh = + { "佚名" } + { "Anon" } + if$ +} + +FUNCTION {bbl.space} +{ entry.lang lang.zh = + { "\ " } + { " " } + if$ +} + +FUNCTION {bbl.et.al} +{ entry.lang lang.zh = + { "等" } + { entry.lang lang.ja = + { "他" } + { entry.lang lang.ru = + { "идр" } + { "et~al." } + if$ + } + if$ + } + if$ +} + +FUNCTION {citation.et.al} +{ bbl.et.al } + +FUNCTION {bbl.colon} { ": " } + +FUNCTION {bbl.wide.space} { "\quad " } + +FUNCTION {bbl.slash} { "//\allowbreak " } + +FUNCTION {bbl.sine.loco} +{ entry.lang lang.zh = + { "[出版地不详]" } + { "[S.l.]" } + if$ +} + +FUNCTION {bbl.sine.nomine} +{ entry.lang lang.zh = + { "[出版者不详]" } + { "[s.n.]" } + if$ +} + +FUNCTION {bbl.sine.loco.sine.nomine} +{ entry.lang lang.zh = + { "[出版地不详: 出版者不详]" } + { "[S.l.: s.n.]" } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state after.slash = + { bbl.slash * write$ + newline$ + } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.after} +{ 't := + duplicate$ empty$ + 'pop$ + { 's := + output.state mid.sentence = + { t * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state after.slash = + { bbl.slash * write$ } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s + } + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + show.english.translation entry.lang lang.zh = and + { ")" + write$ + } + 'skip$ + if$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { output.state after.slash = + 'skip$ + { after.block 'output.state := } + if$ + } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { output.state after.slash = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ + } + if$ +} + +FUNCTION {new.slash} +{ output.state before.all = + 'skip$ + { slash.for.extraction + { after.slash 'output.state := } + { after.block 'output.state := } + if$ + } + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {italicize} +{ duplicate$ empty$ + { pop$ "" } + { "\textit{" swap$ * "}" * } + if$ +} + +INTEGERS { byte second.byte } + +INTEGERS { char.lang tmp.lang } + +STRINGS { tmp.str } + +FUNCTION {get.str.lang} +{ 'tmp.str := + lang.other 'tmp.lang := + #1 'charptr := + tmp.str text.length$ #1 + 'len := + { charptr len < } + { tmp.str charptr #1 substring$ chr.to.int$ 'byte := + byte #128 < + { charptr #1 + 'charptr := + byte #64 > byte #91 < and byte #96 > byte #123 < and or + { lang.en 'char.lang := } + { lang.other 'char.lang := } + if$ + } + { tmp.str charptr #1 + #1 substring$ chr.to.int$ 'second.byte := + byte #224 < + { charptr #2 + 'charptr := + byte #207 > byte #212 < and + byte #212 = second.byte #176 < and or + { lang.ru 'char.lang := } + { lang.other 'char.lang := } + if$ + } + { byte #240 < + { charptr #3 + 'charptr := + byte #227 > byte #234 < and + { lang.zh 'char.lang := } + { byte #227 = + { second.byte #143 > + { lang.zh 'char.lang := } + { second.byte #128 > second.byte #132 < and + { lang.ja 'char.lang := } + { lang.other 'char.lang := } + if$ + } + if$ + } + { byte #239 = + second.byte #163 > second.byte #172 < and and + { lang.zh 'char.lang := } + { lang.other 'char.lang := } + if$ + } + if$ + } + if$ + } + { charptr #4 + 'charptr := + byte #240 = second.byte #159 > and + { lang.zh 'char.lang := } + { lang.other 'char.lang := } + if$ + } + if$ + } + if$ + } + if$ + char.lang tmp.lang > + { char.lang 'tmp.lang := } + 'skip$ + if$ + } + while$ + tmp.lang +} + +FUNCTION {check.entry.lang} +{ author field.or.null + title field.or.null * + get.str.lang +} + +FUNCTION {set.entry.lang} +{ language empty$ + { check.entry.lang } + { language "english" = language "american" = or language "british" = or + { lang.en } + { language "chinese" = + { lang.zh } + { language "japanese" = + { lang.ja } + { language "russian" = + { lang.ru } + { check.entry.lang } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + 'entry.lang := +} + +FUNCTION {set.entry.numbered} +{ type$ "patent" = + type$ "standard" = or + type$ "techreport" = or + { #1 'entry.numbered := } + { #0 'entry.numbered := } + if$ +} + +INTEGERS { nameptr namesleft numnames name.lang } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := + nameptr max.num.authors > + { bbl.et.al + #1 'namesleft := + } + { t "others" = + { bbl.et.al } + { t get.str.lang 'name.lang := + name.lang lang.en = + { t #1 "{vv~}{ll}{~f{~}}" format.name$ + uppercase.name + { "u" change.case$ } + 'skip$ + if$ + t #1 "{, jj}" format.name$ * + } + { t #1 "{ll}{ff}" format.name$ } + if$ + } + if$ + } + if$ + nameptr #1 > + { ", " swap$ * * } + 'skip$ + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author empty$ not + { author format.names } + { "empty author in " cite$ * warning$ + "" + } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names } + if$ +} + +FUNCTION {format.translators} +{ translator empty$ + { "" } + { translator format.names + entry.lang lang.zh = + { translator num.names$ #3 > + { "译" * } + { ", 译" * } + if$ + } + 'skip$ + if$ + } + if$ +} + +FUNCTION {format.full.names} +{'s := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := + t get.str.lang 'name.lang := + name.lang lang.en = + { t #1 "{vv~}{ll}" format.name$ 't := } + { t #1 "{ll}{ff}" format.name$ 't := } + if$ + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.full} +{ author empty$ + { editor empty$ + { "" } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.full} +{ author empty$ + { "" } + { author format.full.names } + if$ +} + +FUNCTION {editor.full} +{ editor empty$ + { "" } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.full + { type$ "collection" = + type$ "proceedings" = + or + 'editor.full + 'author.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[" write$ + label ")" * + make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + 's := + s text.length$ 'charptr := + { charptr #0 > s charptr #1 substring$ "[" = not and } + { charptr #1 - 'charptr := } + while$ + charptr #0 > + { "{" s * "}" * } + { s } + if$ + "]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {change.sentence.case} +{ entry.lang lang.en = + { "t" change.case$ } + 'skip$ + if$ +} + +FUNCTION {add.link} +{ url empty$ not + { "\href{" url * "}{" * swap$ * "}" * } + { doi empty$ not + { "\href{http://dx.doi.org/" doi * "}{" * swap$ * "}" * } + 'skip$ + if$ + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title + sentence.case.title + 'change.sentence.case + 'skip$ + if$ + entry.numbered number empty$ not and + { bbl.colon * number * } + 'skip$ + if$ + link.title + 'add.link + 'skip$ + if$ + } + if$ +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {is.digit} +{ duplicate$ empty$ + { pop$ #0 } + { chr.to.int$ + duplicate$ "0" chr.to.int$ < + { pop$ #0 } + { "9" chr.to.int$ > + { #0 } + { #1 } + if$ + } + if$ + } + if$ +} + +FUNCTION {is.number} +{ 's := + s empty$ + { #0 } + { s text.length$ 'charptr := + { charptr #0 > + s charptr #1 substring$ is.digit + and + } + { charptr #1 - 'charptr := } + while$ + charptr not + } + if$ +} + +FUNCTION {format.volume} +{ volume empty$ not + { volume is.number + { entry.lang lang.zh = + { "第 " volume * " 卷" * } + { "volume" volume tie.or.space.connect } + if$ + } + { volume } + if$ + } + { "" } + if$ +} + +FUNCTION {format.number} +{ number empty$ not + { number is.number + { entry.lang lang.zh = + { "第 " number * " 册" * } + { "number" number tie.or.space.connect } + if$ + } + { number } + if$ + } + { "" } + if$ +} + +FUNCTION {format.volume.number} +{ volume empty$ not + { format.volume } + { format.number } + if$ +} + +FUNCTION {format.title.vol.num} +{ title + sentence.case.title + 'change.sentence.case + 'skip$ + if$ + entry.numbered + { number empty$ not + { bbl.colon * number * } + 'skip$ + if$ + } + { format.volume.number 's := + s empty$ not + { bbl.colon * s * } + 'skip$ + if$ + } + if$ +} + +FUNCTION {format.series.vol.num.title} +{ format.volume.number 's := + series empty$ not + { series + sentence.case.title + 'change.sentence.case + 'skip$ + if$ + entry.numbered + { bbl.wide.space * } + { bbl.colon * + s empty$ not + { s * bbl.wide.space * } + 'skip$ + if$ + } + if$ + title * + sentence.case.title + 'change.sentence.case + 'skip$ + if$ + entry.numbered number empty$ not and + { bbl.colon * number * } + 'skip$ + if$ + } + { format.title.vol.num } + if$ + link.title + 'add.link + 'skip$ + if$ +} + +FUNCTION {format.booktitle.vol.num} +{ booktitle + entry.numbered + 'skip$ + { format.volume.number 's := + s empty$ not + { bbl.colon * s * } + 'skip$ + if$ + } + if$ +} + +FUNCTION {format.series.vol.num.booktitle} +{ format.volume.number 's := + series empty$ not + { series bbl.colon * + entry.numbered not s empty$ not and + { s * bbl.wide.space * } + 'skip$ + if$ + booktitle * + } + { format.booktitle.vol.num } + if$ + in.booktitle + { duplicate$ empty$ not entry.lang lang.en = and + { "In: " swap$ * } + 'skip$ + if$ + } + 'skip$ + if$ +} + +FUNCTION {remove.period} +{ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ 'tmp.str := + tmp.str "." = not + { s tmp.str * 's := } + 'skip$ + if$ + t #2 global.max$ substring$ 't := + } + while$ + s +} + +FUNCTION {abbreviate} +{ remove.period + 't := + t "l" change.case$ 's := + "" + s "physical review letters" = + { "Phys Rev Lett" } + 'skip$ + if$ + 's := + s empty$ + { t } + { pop$ s } + if$ +} + +FUNCTION {format.journal} +{ journal empty$ not + { journal + abbreviate.journal + 'abbreviate + 'skip$ + if$ + italic.journal entry.lang lang.en = and + 'italicize + 'skip$ + if$ + } + { "" } + if$ +} + +FUNCTION {set.entry.mark} +{ entry.mark empty$ not + 'pop$ + { mark empty$ not + { pop$ mark 'entry.mark := } + { 'entry.mark := } + if$ + } + if$ +} + +FUNCTION {format.mark} +{ show.mark + { entry.mark + show.medium.type + { medium empty$ not + { "/" * medium * } + { entry.is.electronic + { "/OL" * } + 'skip$ + if$ + } + if$ + } + 'skip$ + if$ + 'entry.mark := + "\allowbreak[" entry.mark * "]" * + } + { "" } + if$ +} + +FUNCTION {num.to.ordinal} +{ duplicate$ text.length$ 'charptr := + duplicate$ charptr #1 substring$ 's := + s "1" = + { "st" * } + { s "2" = + { "nd" * } + { s "3" = + { "rd" * } + { "th" * } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { edition is.number + { entry.lang lang.zh = + { edition " 版" * } + { edition num.to.ordinal " ed." * } + if$ + } + { entry.lang lang.en = + { edition change.sentence.case 's := + s "Revised" = s "Revised edition" = or + { "Rev. ed." } + { s " ed." *} + if$ + } + { edition } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.publisher} +{ publisher empty$ not + { publisher } + { school empty$ not + { school } + { organization empty$ not + { organization } + { institution empty$ not + { institution } + { "" } + if$ + } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.address.publisher} +{ address empty$ not + { address + format.publisher empty$ not + { bbl.colon * format.publisher * } + { entry.is.electronic not show.missing.address.publisher and + { bbl.colon * bbl.sine.nomine * } + 'skip$ + if$ + } + if$ + } + { entry.is.electronic not show.missing.address.publisher and + { format.publisher empty$ not + { bbl.sine.loco bbl.colon * format.publisher * } + { bbl.sine.loco.sine.nomine } + if$ + } + { format.publisher empty$ not + { format.publisher } + { "" } + if$ + } + if$ + } + if$ +} + +FUNCTION {extract.before.dash} +{ duplicate$ empty$ + { pop$ "" } + { 's := + #1 'charptr := + s text.length$ #1 + 'len := + { charptr len < + s charptr #1 substring$ "-" = not + and + } + { charptr #1 + 'charptr := } + while$ + s #1 charptr #1 - substring$ + } + if$ +} + +FUNCTION {extract.after.dash} +{ duplicate$ empty$ + { pop$ "" } + { 's := + #1 'charptr := + s text.length$ #1 + 'len := + { charptr len < + s charptr #1 substring$ "-" = not + and + } + { charptr #1 + 'charptr := } + while$ + { charptr len < + s charptr #1 substring$ "-" = + and + } + { charptr #1 + 'charptr := } + while$ + s charptr global.max$ substring$ + } + if$ +} + +FUNCTION {contains.dash} +{ duplicate$ empty$ + { pop$ #0 } + { 's := + { s empty$ not + s #1 #1 substring$ "-" = not + and + } + { s #2 global.max$ substring$ 's := } + while$ + s empty$ not + } + if$ +} + +FUNCTION {format.year} +{ year empty$ not + { year extract.before.dash } + { date empty$ not + { date extract.before.dash } + { "empty year in " cite$ * warning$ + urldate empty$ not + { "[" urldate extract.before.dash * "]" * } + { "" } + if$ + } + if$ + } + if$ + extra.label * +} + +FUNCTION {format.date} +{ type$ "patent" = type$ "newspaper" = or + date empty$ not and + { date } + { year } + if$ +} + +FUNCTION {format.editdate} +{ date empty$ not + { "\allowbreak(" date * ")" * } + { "" } + if$ +} + +FUNCTION {format.urldate} +{ urldate empty$ not entry.is.electronic and + { "\allowbreak[" urldate * "]" * } + { "" } + if$ +} + +FUNCTION {hyphenate} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { "-" * + { t #1 #1 substring$ "-" = } + { t #2 global.max$ substring$ 't := } + while$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages + only.start.page + 'extract.before.dash + 'hyphenate + if$ + } + if$ +} + +FUNCTION {format.journal.volume} +{ volume empty$ not + { bold.journal.volume + { "\textbf{" volume * "}" * } + { volume } + if$ + } + { "" } + if$ +} + +FUNCTION {format.journal.number} +{ number empty$ not + { "\penalty0 (" number * ")" * } + { "" } + if$ +} + +FUNCTION {format.journal.pages} +{ pages empty$ + { "" } + { space.before.pages + { ": " } + { ":\penalty0 " } + if$ + format.pages * + } + if$ +} + +FUNCTION {format.periodical.year.volume.number} +{ year empty$ not + { year extract.before.dash } + { "empty year in periodical " cite$ * warning$ } + if$ + volume empty$ not + { ", " * volume extract.before.dash * } + 'skip$ + if$ + number empty$ not + { "\penalty0 (" * number extract.before.dash * ")" * } + 'skip$ + if$ + year contains.dash + { "--" * + year extract.after.dash empty$ + volume extract.after.dash empty$ and + number extract.after.dash empty$ and not + { year extract.after.dash empty$ not + { year extract.after.dash * } + { year extract.before.dash * } + if$ + volume empty$ not + { ", " * volume extract.after.dash * } + 'skip$ + if$ + number empty$ not + { "\penalty0 (" * number extract.after.dash * ")" * } + 'skip$ + if$ + } + 'skip$ + if$ + } + 'skip$ + if$ +} + +FUNCTION {check.url} +{ url empty$ not + { "\url{" url * "}" * 'entry.url := + #1 'entry.is.electronic := + } + { howpublished empty$ not + { howpublished #1 #5 substring$ "\url{" = + { howpublished 'entry.url := + #1 'entry.is.electronic := + } + 'skip$ + if$ + } + { note empty$ not + { note #1 #5 substring$ "\url{" = + { note 'entry.url := + #1 'entry.is.electronic := + } + 'skip$ + if$ + } + 'skip$ + if$ + } + if$ + } + if$ +} + +FUNCTION {format.url} +{ entry.url +} + +FUNCTION {output.url} +{ entry.url empty$ not + { new.block + entry.url output + } + 'skip$ + if$ +} + +FUNCTION {check.doi} +{ doi empty$ not + { #1 'entry.is.electronic := } + 'skip$ + if$ +} + +FUNCTION {is.in.url} +{ 's := + s empty$ + { #1 } + { entry.url empty$ + { #0 } + { s text.length$ 'len := + entry.url text.length$ 'charptr := + { entry.url charptr len substring$ s = not + charptr #0 > + and + } + { charptr #1 - 'charptr := } + while$ + charptr + } + if$ + } + if$ +} + +FUNCTION {format.doi} +{ "" + doi empty$ not + { "" 's := + doi 't := + #0 'numnames := + { t empty$ not} + { t #1 #1 substring$ 'tmp.str := + tmp.str "," = tmp.str " " = or t #2 #1 substring$ empty$ or + { t #2 #1 substring$ empty$ + { s tmp.str * 's := } + 'skip$ + if$ + s empty$ s is.in.url or + 'skip$ + { numnames #1 + 'numnames := + numnames #1 > + { ", " * } + { "DOI: " * } + if$ + "\doi{" s * "}" * * + } + if$ + "" 's := + } + { s tmp.str * 's := } + if$ + t #2 global.max$ substring$ 't := + } + while$ + } + 'skip$ + if$ +} + +FUNCTION {output.doi} +{ doi empty$ not show.doi and + show.english.translation entry.lang lang.zh = and not and + { new.block + format.doi output + } + 'skip$ + if$ +} + +FUNCTION {check.electronic} +{ "" 'entry.url := + #0 'entry.is.electronic := + 'check.doi + 'skip$ + if$ + 'check.url + 'skip$ + if$ + medium empty$ not + { medium "MT" = medium "DK" = or medium "CD" = or medium "OL" = or + { #1 'entry.is.electronic := } + 'skip$ + if$ + } + 'skip$ + if$ +} + +FUNCTION {format.note} +{ note empty$ not show.note and + { note } + { "" } + if$ +} + +FUNCTION {output.translation} +{ show.english.translation entry.lang lang.zh = and + { translation empty$ not + { translation } + { "[English translation missing!]" } + if$ + " (in Chinese)" * output + write$ + format.doi duplicate$ empty$ not + { newline$ + write$ + } + 'pop$ + if$ + " \\" write$ + newline$ + "(" write$ + "" + before.all 'output.state := + } + 'skip$ + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ + year empty$ + and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {monograph} +{ output.bibitem + output.translation + author empty$ not + { format.authors } + { editor empty$ not + { format.editors } + { "empty author and editor in " cite$ * warning$ + "" + } + if$ + } + if$ + output + new.block + format.series.vol.num.title "title" output.check + "M" set.entry.mark + format.mark "" output.after + new.block + format.translators output + new.sentence + format.edition output + new.block + format.address.publisher output + format.year "year" output.check + format.pages bbl.colon output.after + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + output.translation + format.authors output + author format.key output + new.block + format.title "title" output.check + "M" set.entry.mark + format.mark "" output.after + new.block + format.translators output + new.slash + format.editors output + new.block + format.series.vol.num.booktitle "booktitle" output.check + new.block + format.edition output + new.block + format.address.publisher output + format.year "year" output.check + format.pages bbl.colon output.after + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {periodical} +{ output.bibitem + output.translation + format.authors output + author format.key output + new.block + format.title "title" output.check + "J" set.entry.mark + format.mark "" output.after + new.block + format.periodical.year.volume.number output + new.block + format.address.publisher output + format.date "year" output.check + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {article} +{ output.bibitem + output.translation + format.authors output + author format.key output + new.block + title.in.journal + { format.title "title" output.check + "J" set.entry.mark + format.mark "" output.after + new.block + } + 'skip$ + if$ + format.journal "journal" output.check + format.date "year" output.check + format.journal.volume output + format.journal.number "" output.after + format.journal.pages "" output.after + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {patent} +{ output.bibitem + output.translation + format.authors output + author format.key output + new.block + format.title "title" output.check + "P" set.entry.mark + format.mark "" output.after + new.block + format.date "year" output.check + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {electronic} +{ #1 #1 check.electronic + #1 'entry.is.electronic := + output.bibitem + output.translation + format.authors output + author format.key output + new.block + format.series.vol.num.title "title" output.check + "EB" set.entry.mark + format.mark "" output.after + new.block + format.address.publisher output + date empty$ + { format.date output } + 'skip$ + if$ + format.pages bbl.colon output.after + format.editdate "" output.after + format.urldate "" output.after + output.url + output.doi + new.block + format.note output + fin.entry +} + +FUNCTION {misc} +{ journal empty$ not + 'article + { booktitle empty$ not + 'incollection + { publisher empty$ not + 'monograph + { entry.is.electronic + 'electronic + { "Z" set.entry.mark + monograph + } + if$ + } + if$ + } + if$ + } + if$ + empty.misc.check +} + +FUNCTION {archive} +{ "A" set.entry.mark + misc +} + +FUNCTION {book} { monograph } + +FUNCTION {booklet} { book } + +FUNCTION {collection} +{ "G" set.entry.mark + monograph +} + +FUNCTION {database} +{ "DB" set.entry.mark + electronic +} + +FUNCTION {dataset} +{ "DS" set.entry.mark + electronic +} + +FUNCTION {inbook} { book } + +FUNCTION {inproceedings} +{ "C" set.entry.mark + incollection +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {map} +{ "CM" set.entry.mark + misc +} + +FUNCTION {manual} { monograph } + +FUNCTION {mastersthesis} +{ "D" set.entry.mark + monograph +} + +FUNCTION {newspaper} +{ "N" set.entry.mark + article +} + +FUNCTION {online} +{ "EB" set.entry.mark + electronic +} + +FUNCTION {phdthesis} { mastersthesis } + +FUNCTION {proceedings} +{ "C" set.entry.mark + monograph +} + +FUNCTION {software} +{ "CP" set.entry.mark + electronic +} + +FUNCTION {standard} +{ "S" set.entry.mark + misc +} + +FUNCTION {techreport} +{ "R" set.entry.mark + misc +} + +FUNCTION {unpublished} +{ "Z" set.entry.mark + misc +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}{, jj}{, ff}" format.name$ 't := + t get.str.lang 'name.lang := + name.lang lang.en = + { t #1 "{vv~}{ll}" format.name$} + { t #1 "{ll}{ff}" format.name$} + if$ + s num.names$ #1 > + { bbl.space * citation.et.al * } + 'skip$ + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.key.organization.label} +{ author empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.organization.label} +{ editor empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "collection" = + type$ "proceedings" = + or + { editor empty$ not + 'editor.key.organization.label + 'author.key.organization.label + if$ + } + 'author.key.label + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + format.year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +INTEGERS { seq.num } + +FUNCTION {init.seq} +{ #0 'seq.num :=} + +FUNCTION {int.to.fix} +{ "000000000" swap$ int.to.str$ * + #-1 #10 substring$ +} + +FUNCTION {presort} +{ set.entry.lang + set.entry.numbered + show.url show.doi check.electronic + calc.label + label sortify + " " + * + seq.num #1 + 'seq.num := + seq.num int.to.fix + 'sort.label := + sort.label * + #1 entry.max$ substring$ + 'sort.key$ := +} + +STRINGS { longest.label last.label next.extra } + +INTEGERS { longest.label.width last.extra.num number.label } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := + #0 'number.label := +} + +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} + +FUNCTION {bib.sort.order} +{ sort.label 'sort.key$ := +} + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\providecommand{\natexlab}[1]{#1}" + write$ newline$ + "\providecommand{\url}[1]{#1}" + write$ newline$ + "\expandafter\ifx\csname urlstyle\endcsname\relax\else" + write$ newline$ + " \urlstyle{same}\fi" + write$ newline$ + show.doi + { "\expandafter\ifx\csname href\endcsname\relax" + write$ newline$ + " \DeclareUrlCommand\doi{\urlstyle{rm}}\else" + write$ newline$ + " \providecommand\doi[1]{\href{https://doi.org/#1}{\nolinkurl{#1}}}\fi" + write$ newline$ + } + 'skip$ + if$ +} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +READ + +EXECUTE {init.state.consts} + +EXECUTE {load.config} + +EXECUTE {init.seq} + +ITERATE {presort} + +SORT + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +ITERATE {bib.sort.order} + +SORT + +EXECUTE {begin.bib} + +ITERATE {call.type$} + +EXECUTE {end.bib} diff --git a/gbt7714.sty b/gbt7714.sty new file mode 100644 index 0000000..e2d7f36 --- /dev/null +++ b/gbt7714.sty @@ -0,0 +1,296 @@ +%% +%% This is file `gbt7714.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% gbt7714.dtx (with options: `package') +%% ------------------------------------------------------------------- +%% GB/T 7714-2015 BibTeX Style +%% https://github.com/CTeX-org/gbt7714-bibtex-style +%% Version: 2020/03/14 v2.0.1 +%% ------------------------------------------------------------------- +%% Copyright (C) 2016-2020 by Zeping Lee +%% ------------------------------------------------------------------- +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% https://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% ------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e}[1999/12/01] +\ProvidesPackage{gbt7714} + [2020/03/14 v2.0.1 GB/T 7714-2015 BibTeX Style] +\newif\ifgbt@legacy@interface +\newif\ifgbt@mmxv +\newif\ifgbt@numerical +\newif\ifgbt@super +\newcommand\gbt@obselete@option[1]{% + \PackageWarning{gbt7714}{The option "#1" is obselete}% +} +\DeclareOption{2015}{% + \gbt@obselete@option{2015}% + \gbt@legacy@interfacetrue + \gbt@mmxvtrue +} +\DeclareOption{2005}{% + \gbt@obselete@option{2005}% + \gbt@legacy@interfacetrue + \gbt@mmxvfalse +} +\DeclareOption{super}{% + \gbt@obselete@option{super}% + \gbt@legacy@interfacetrue + \gbt@numericaltrue + \gbt@supertrue +} +\DeclareOption{numbers}{% + \gbt@obselete@option{numbers}% + \gbt@legacy@interfacetrue + \gbt@numericaltrue + \gbt@superfalse +} +\DeclareOption{authoryear}{% + \gbt@obselete@option{authoryear}% + \gbt@legacy@interfacetrue + \gbt@numericalfalse +} +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{natbib}} +\ProcessOptions\relax +% \RequirePackage[compress]{natbib} +\setcitestyle{compress} +\RequirePackage{url} +\renewcommand\newblock{\space} +\newcommand\bibstyle@super{\bibpunct{[}{]}{,}{s}{,}{\textsuperscript{,}}} +\newcommand\bibstyle@numbers{\bibpunct{[}{]}{,}{n}{,}{,}} +\newcommand\bibstyle@authoryear{\bibpunct{(}{)}{;}{a}{,}{,}} +\newcommand\bibstyle@inline{\bibstyle@numbers} +\@namedef{bibstyle@gbt7714-numerical}{\bibstyle@super} +\@namedef{bibstyle@gbt7714-author-year}{\bibstyle@authoryear} +\@namedef{bibstyle@gbt7714-2005-numerical}{\bibstyle@super} +\@namedef{bibstyle@gbt7714-2005-author-year}{\bibstyle@authoryear} +\def\NAT@citexnum[#1][#2]#3{% + \NAT@reset@parser + \NAT@sort@cites{#3}% + \NAT@reset@citea + \@cite{\def\NAT@num{-1}\let\NAT@last@yr\relax\let\NAT@nm\@empty + \@for\@citeb:=\NAT@cite@list\do + {\@safe@activestrue + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \@safe@activesfalse + \@ifundefined{b@\@citeb\@extra@b@citeb}{% + {\reset@font\bfseries?} + \NAT@citeundefined\PackageWarning{natbib}% + {Citation `\@citeb' on page \thepage \space undefined}}% + {\let\NAT@last@num\NAT@num\let\NAT@last@nm\NAT@nm + \NAT@parse{\@citeb}% + \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{% + \let\NAT@name=\NAT@all@names + \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}% + \fi + \ifNAT@full\let\NAT@nm\NAT@all@names\else + \let\NAT@nm\NAT@name\fi + \ifNAT@swa + \@ifnum{\NAT@ctype>\@ne}{% + \@citea + \NAT@hyper@{\@ifnum{\NAT@ctype=\tw@}{\NAT@test{\NAT@ctype}}{\NAT@alias}}% + }{% + \@ifnum{\NAT@cmprs>\z@}{% + \NAT@ifcat@num\NAT@num + {\let\NAT@nm=\NAT@num}% + {\def\NAT@nm{-2}}% + \NAT@ifcat@num\NAT@last@num + {\@tempcnta=\NAT@last@num\relax}% + {\@tempcnta\m@ne}% + \@ifnum{\NAT@nm=\@tempcnta}{% + \@ifnum{\NAT@merge>\@ne}{}{\NAT@last@yr@mbox}% + }{% + \advance\@tempcnta by\@ne + \@ifnum{\NAT@nm=\@tempcnta}{% + % \ifx\NAT@last@yr\relax + % \def@NAT@last@yr{\@citea}% + % \else + % \def@NAT@last@yr{--\NAT@penalty}% + % \fi + \def@NAT@last@yr{-\NAT@penalty}% + }{% + \NAT@last@yr@mbox + }% + }% + }{% + \@tempswatrue + \@ifnum{\NAT@merge>\@ne}{\@ifnum{\NAT@last@num=\NAT@num\relax}{\@tempswafalse}{}}{}% + \if@tempswa\NAT@citea@mbox\fi + }% + }% + \NAT@def@citea + \else + \ifcase\NAT@ctype + \ifx\NAT@last@nm\NAT@nm \NAT@yrsep\NAT@penalty\NAT@space\else + \@citea \NAT@test{\@ne}\NAT@spacechar\NAT@mbox{\NAT@super@kern\NAT@@open}% + \fi + \if*#1*\else#1\NAT@spacechar\fi + \NAT@mbox{\NAT@hyper@{{\citenumfont{\NAT@num}}}}% + \NAT@def@citea@box + \or + \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}% + \or + \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}% + \or + \NAT@hyper@citea@space\NAT@alias + \fi + \fi + }% + }% + \@ifnum{\NAT@cmprs>\z@}{\NAT@last@yr}{}% + \ifNAT@swa\else + % \@ifnum{\NAT@ctype=\z@}{% + % \if*#2*\else\NAT@cmt#2\fi + % }{}% + \NAT@mbox{\NAT@@close}% + \@ifnum{\NAT@ctype=\z@}{% + \if*#2*\else\textsuperscript{#2}\fi + }{}% + \fi + }{#1}{#2}% +}% +\renewcommand\NAT@citesuper[3]{\ifNAT@swa + \if*#2*\else#2\NAT@spacechar\fi +\unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close\if*#3*\else#3\fi}% + \else #1\fi\endgroup} +\def\NAT@citex% + [#1][#2]#3{% + \NAT@reset@parser + \NAT@sort@cites{#3}% + \NAT@reset@citea + \@cite{\let\NAT@nm\@empty\let\NAT@year\@empty + \@for\@citeb:=\NAT@cite@list\do + {\@safe@activestrue + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \@safe@activesfalse + \@ifundefined{b@\@citeb\@extra@b@citeb}{\@citea% + {\reset@font\bfseries ?}\NAT@citeundefined + \PackageWarning{natbib}% + {Citation `\@citeb' on page \thepage \space undefined}\def\NAT@date{}}% + {\let\NAT@last@nm=\NAT@nm\let\NAT@last@yr=\NAT@year + \NAT@parse{\@citeb}% + \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{% + \let\NAT@name=\NAT@all@names + \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}% + \fi + \ifNAT@full\let\NAT@nm\NAT@all@names\else + \let\NAT@nm\NAT@name\fi + \ifNAT@swa\ifcase\NAT@ctype + \if\relax\NAT@date\relax + \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}\NAT@date}% + \else + \ifx\NAT@last@nm\NAT@nm\NAT@yrsep + \ifx\NAT@last@yr\NAT@year + \def\NAT@temp{{?}}% + \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}% + {Multiple citation on page \thepage: same authors and + year\MessageBreak without distinguishing extra + letter,\MessageBreak appears as question mark}\fi + \NAT@hyper@{\NAT@exlab}% + \else\unskip\NAT@spacechar + \NAT@hyper@{\NAT@date}% + \fi + \else + \@citea\NAT@hyper@{% + \NAT@nmfmt{\NAT@nm}% + \hyper@natlinkbreak{% + \NAT@aysep\NAT@spacechar}{\@citeb\@extra@b@citeb + }% + \NAT@date + }% + \fi + \fi + \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% + \or\@citea\NAT@hyper@{\NAT@date}% + \or\@citea\NAT@hyper@{\NAT@alias}% + \fi \NAT@def@citea + \else + \ifcase\NAT@ctype + \if\relax\NAT@date\relax + \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% + \else + \ifx\NAT@last@nm\NAT@nm\NAT@yrsep + \ifx\NAT@last@yr\NAT@year + \def\NAT@temp{{?}}% + \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}% + {Multiple citation on page \thepage: same authors and + year\MessageBreak without distinguishing extra + letter,\MessageBreak appears as question mark}\fi + \NAT@hyper@{\NAT@exlab}% + \else + \unskip\NAT@spacechar + \NAT@hyper@{\NAT@date}% + \fi + \else + \@citea\NAT@hyper@{% + \NAT@nmfmt{\NAT@nm}% + \hyper@natlinkbreak{\NAT@spacechar\NAT@@open\if*#1*\else#1\NAT@spacechar\fi}% + {\@citeb\@extra@b@citeb}% + \NAT@date + }% + \fi + \fi + \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% + \or\@citea\NAT@hyper@{\NAT@date}% + \or\@citea\NAT@hyper@{\NAT@alias}% + \fi + \if\relax\NAT@date\relax + \NAT@def@citea + \else + \NAT@def@citea@close + \fi + \fi + }}\ifNAT@swa\else + % \if*#2*\else\NAT@cmt#2\fi + \if\relax\NAT@date\relax\else\NAT@@close\fi + \if*#2*\else\textsuperscript{#2}\fi + \fi}{#1}{#2}} +\renewcommand\NAT@cite% + [3]{\ifNAT@swa\NAT@@open\if*#2*\else#2\NAT@spacechar\fi + #1\NAT@@close\if*#3*\else\textsuperscript{#3}\fi\else#1\fi\endgroup} +\renewcommand\@biblabel[1]{[#1]\hfill} +\g@addto@macro\UrlBreaks{% + \do0\do1\do2\do3\do4\do5\do6\do7\do8\do9% + \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M + \do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z + \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m + \do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z +} +\Urlmuskip=0mu plus 0.1mu +\newif\ifgbt@bib@style@written +\@ifpackageloaded{chapterbib}{}{% + \def\bibliography#1{% + \ifgbt@bib@style@written\else + \bibliographystyle{gbt7714-numerical}% + \fi + \if@filesw + \immediate\write\@auxout{\string\bibdata{\zap@space#1 \@empty}}% + \fi + \@input@{\jobname.bbl}} + \def\bibliographystyle#1{% + \gbt@bib@style@writtentrue + \ifx\@begindocumenthook\@undefined\else + \expandafter\AtBeginDocument + \fi + {\if@filesw + \immediate\write\@auxout{\string\bibstyle{#1}}% + \fi}% + }% +} +\ifgbt@legacy@interface + \ifgbt@numerical + \ifgbt@super\else + \citestyle{numbers} + \fi + \bibliographystyle{gbt7714-numerical} + \else + \bibliographystyle{gbt7714-author-year} + \fi +\fi diff --git a/main.pdf b/main.pdf new file mode 100644 index 0000000..843b189 Binary files /dev/null and b/main.pdf differ diff --git a/main.tex b/main.tex index 6988766..bad471f 100644 --- a/main.tex +++ b/main.tex @@ -1,7 +1,15 @@ % !Mode:: "TeX:UTF-8" \documentclass[master,openright,twoside,color,AutoFakeBold=true]{buaathesis} -\usepackage[UTF8]{ctex} +\usepackage{xcolor} +\usepackage{tikz} +\usetikzlibrary{arrows,shapes,chains} + +% 参考文献 +\usepackage{gbt7714} +% 参考文献输出方式,numerical为按照出现顺序,authoryear为按照作者姓名和年份 +\citestyle{numerical} +% \citestyle{authoryear} \begin{document} @@ -9,30 +17,30 @@ \include{data/com_info} \include{data/master/master_info} +% 中英封面、提名页、授权书 \maketitle - % 前言页眉页脚样式 \pagestyle{frontmatter} - % 摘要 \include{data/abstract} % 目录、插图目录、表格目录 \tableofcontents \listoffigures -% \listoftables +\listoftables % 符号表 \include{data/master/denotation} - % 正文页码样式 \mainmatter % 正文页眉页脚样式 \pagestyle{mainmatter} - % 正文 \include{data/chapter1-intro} -\include{data/chapter2-config} +\include{data/chapter2} +\include{data/chapter3} +\include{data/chapter4} +\include{data/chapter5} % \include{data/chapter3-download} % \include{data/chapter4-basic} % \include{data/chapter5-usage} @@ -41,18 +49,17 @@ % 参考文献 \include{data/reference} + % 附录 -\appendix -\include{data/appendix1-faq} -\include{data/appendix2-contactus} +% \appendix +% \include{data/appendix1-faq} +% \include{data/appendix2-contactus} % 附页标题样式 -\backmatter +% \backmatter % 附页 -\include{data/master/back1-achievement} -\include{data/master/back2-acknowledgement} -\include{data/master/back3-aboutauthor} - +% \include{data/master/back1-achievement} +% \include{data/master/back2-acknowledgement} +% \include{data/master/back3-aboutauthor} \end{document} -