[
  {
    "path": ".gitattributes",
    "content": "*.js linguist-language=Go\n*.css linguist-language=Go\n*.html linguist-language=Go\n*.c linguist-language=Go\n*.h linguist-language=Go\n"
  },
  {
    "path": "README.md",
    "content": "ontts\n==============\nontts 是语音在线合成服务\n\n## 编译\n\n##### GOPATH\n项目源文件需要放在$GOPATH下\n\n##### glide\n通过glide管理依赖，若没有安装glide，需先安装\n\nUbuntu下glide安装方法:\n``` sh\nsudo add-apt-repository ppa:masterminds/glide && sudo apt-get update\nsudo apt-get install glide\n```\n在源文件目录下执行以下命令下载依赖\n``` sh\nglide install\n```\n\n##### 编译\n``` sh\ngo build\n```\n\n##### 运行\n需要将libmsc.so加入环境变量\n``` sh\nmv xf/lib/libmsc.so /usr/local/lib/\nvi ~/.bashrc\n```\nexport LD_LIBRARY_PATH=/usr/local/lib\n\n\n## 使用示例\n##### 单次合成:\n``` sh\n./ontts -t \"云喇叭快递，快递小管家，您的快递到了，请于下午6点前到学校后门申通快递取件\" -o test.wav\n```\n\n##### 启动合成后台服务:\n``` sh\n./ontts -r \":6379\" -d /tmp/out\n```\n\n## 命令参数\n<pre>\n讯飞语音参数选项:\n    -tp <param>                 TTS合成参数[有默认值]\n    -lp <param>                 登录参数[有默认值]\n\n单次合成模式选项:\n    -t <text>                \t待合成的文本\n    -o <file>               \t音频输出路径 \n\n合成服务模式选项:\n    -d <dir>                    音频保存的目录 \n    -s <digit>                  合成速度级别(1-10),数值越小速度越快，越耗CPU[默认为1]\n    -r <addr>                   redis连接地址\n\n日志选项:\n    -l <file>                   日志输出路径[默认./ontts.log]\n    -ll <level>                 日志输出级别(debug,info,warn,error)\n\n其他:\n    -h                          查看帮助 \n</pre>\n\n## 目录\n<pre>\n── ontts\n   ├── glide.yaml (glide依赖配置)\n   ├── main.go (程序入口)\n   ├── README.md\n   ├── server (TTS合成主体逻辑的package)\n   │   └── server.go\n   ├── speed_test.go (速度测试)\n   └── xf (讯飞SDK的Go封装)\n       ├── doc (讯飞语音linux SDK相关参考)\n       ├── include (cgo需要用到的头文件)\n       ├── lib (动态链接库 SDK)\n       │   └── libmsc.so\n       ├── README.md\n       └── xf.go\n</pre>\n"
  },
  {
    "path": "glide.yaml",
    "content": "package: ontts\nimport:\n- package: github.com/imroc/log\n"
  },
  {
    "path": "main.go",
    "content": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"ontts/server\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/imroc/log\"\n)\n\nvar usageStr = `\nUsage: ontts [options]\n\n讯飞语音参数选项:\n    -tp <param>                 TTS合成参数[有默认值]\n    -lp <param>                 登录参数[有默认值]\n\n单次合成模式选项:\n    -t <text>                \t待合成的文本\n    -o <file>               \t音频输出路径 \n\n合成服务模式选项:\n    -d <dir>                    音频保存的目录 \n    -b <dir>                    音频备份的目录 \n    -s <digit>                  合成速度级别(1-10),数值越小速度越快，越耗CPU[默认为1]\n    -r <addr>                   redis连接地址\n    -rp <pass>                  redis密码\n\n日志选项:\n    -l <file>                   日志输出路径[默认./ontts.log]\n    -ll <level>                 日志输出级别(debug,info,warn,error)\n\n其他:\n    -h                          查看帮助 \n`\n\nfunc main() {\n\topts := &server.Options{}\n\n\tvar txt string\n\tvar out string\n\tvar help bool\n\tvar logFile string\n\tvar logLevel string\n\n\tflag.StringVar(&txt, \"t\", \"\", \"单次合成的文本\")\n\tflag.StringVar(&out, \"o\", \"\", \"单次合成的输出路径\")\n\tflag.StringVar(&logFile, \"l\", \"ontts.log\", \"日志输出路径\")\n\tflag.StringVar(&logLevel, \"ll\", \"debug\", \"日志输出级别\")\n\tflag.BoolVar(&help, \"h\", false, \"Help\")\n\n\tflag.StringVar(&opts.TTSParams, \"tp\", \"voice_name = xiaoqi, text_encoding = UTF8, sample_rate = 8000, speed = 50, volume = 50, pitch = 50, rdn = 2\", \"TTS合成参数\")\n\tflag.StringVar(&opts.LoginParams, \"lp\", \"appid = 5718a335, work_dir = .\", \"登录参数\")\n\tflag.StringVar(&opts.RedisAddr, \"r\", \":6379\", \"redis连接地址\")\n\tflag.StringVar(&opts.RedisPass, \"rp\", \"\", \"redis连接密码\")\n\tflag.StringVar(&opts.OutDir, \"d\", \"\", \"音频输出目录\")\n\tflag.StringVar(&opts.BackupDir, \"b\", \"\", \"音频保存目录\")\n\tflag.IntVar(&opts.Speed, \"s\", 1, \"合成速度\")\n\n\tflag.Parse()\n\n\tif help {\n\t\tfmt.Printf(\"%s\\n\", usageStr)\n\t\treturn\n\t}\n\n\terr := configureLog(logFile, logLevel)\n\tif err != nil {\n\t\tlog.Error(\"日志配置失败:%v\", err)\n\t\treturn\n\t}\n\n\ts := server.New(opts)\n\n\tif txt != \"\" { // 单次合成\n\t\tif out == \"\" {\n\t\t\tout = txt + \".wav\"\n\t\t}\n\t\tlog.Debug(\"合成文本:%q,输出:%s\", txt, out)\n\t\tif err = s.Once(txt, out); err != nil {\n\t\t\tlog.Error(\"%v\", err)\n\t\t\treturn\n\t\t}\n\t}\n\n\ts.Start()\n\n}\n\nfunc configureLog(logFile, logLevel string) error {\n\tlevel := log.DEBUG\n\n\tswitch strings.ToLower(logLevel) {\n\tcase \"debug\":\n\t\tlevel = log.DEBUG\n\tcase \"info\":\n\t\tlevel = log.INFO\n\tcase \"warn\":\n\t\tlevel = log.WARN\n\tcase \"error\":\n\t\tlevel = log.ERROR\n\t}\n\n\tfile, err := os.OpenFile(logFile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tlog.Set(level, file, log.Lshortfile|log.LstdFlags)\n\n\treturn nil\n}\n"
  },
  {
    "path": "server/server.go",
    "content": "package server\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"ontts/xf\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/redis\"\n\t\"github.com/imroc/log\"\n)\n\ntype Server struct {\n\topts *Options\n}\n\ntype Options struct {\n\tOutDir      string //音频输出目录\n\tBackupDir   string // 备份目录，文件输出成功之后，再将文件复制到备份目录\n\tLevel       int    //音频生成速度级别，越快越耗CPU，级别1~10,数字越小速度越快\n\tTTSParams   string\n\tLoginParams string\n\tRedisAddr   string\n\tRedisPass   string\n\tSpeed       int\n}\n\ntype Speech struct {\n\tId  string `json:\"id\"`\n\tTxt string `json:\"txt\"`\n}\n\nfunc New(opts *Options) *Server {\n\treturn &Server{\n\t\topts: opts,\n\t}\n}\n\nfunc (s *Server) Start() {\n\tvar c redis.Conn\n\tvar err error\n\tif s.opts.RedisPass == \"\" {\n\t\tc, err = redis.Dial(\"tcp\", s.opts.RedisAddr)\n\t} else {\n\t\tc, err = redis.Dial(\"tcp\", s.opts.RedisAddr, redis.DialPassword(s.opts.RedisPass))\n\t}\n\tif err != nil {\n\t\tlog.Error(\"failed to connect redis:%v\")\n\t\treturn\n\t}\n\tdefer c.Close()\n\n\tpsc := redis.PubSubConn{Conn: c}\n\n\terr = psc.Subscribe(\"tts\")\n\tif err != nil {\n\t\tlog.Error(\"failed to subscribe:%v\", err)\n\t\treturn\n\t}\n\n\tsub, ok := psc.Receive().(redis.Subscription)\n\tif !ok {\n\t\tlog.Error(\"first message is not subscription\")\n\t\treturn\n\t}\n\tif sub.Count == 0 {\n\t\tlog.Error(\"redis subscription count is 0\")\n\t\treturn\n\t}\n\n\terr = setXF(s.opts.Speed, s.opts.TTSParams, s.opts.LoginParams)\n\tif err != nil {\n\t\tlog.Error(\"failed to set xunfei params:%v\", err)\n\t\treturn\n\t}\n\n\tif s.opts.OutDir != \"\" && s.opts.OutDir[len(s.opts.OutDir)-1] != os.PathSeparator {\n\t\ts.opts.OutDir += string(os.PathSeparator)\n\t}\n\tif s.opts.BackupDir != \"\" && s.opts.BackupDir[len(s.opts.BackupDir)-1] != os.PathSeparator {\n\t\ts.opts.BackupDir += string(os.PathSeparator)\n\t}\n\n\tvar speech Speech\n\tfor {\n\t\tswitch n := psc.Receive().(type) {\n\t\tcase redis.Message:\n\t\t\terr := json.Unmarshal(n.Data, &speech)\n\t\t\tif err != nil {\n\t\t\t\tlog.Error(\"error unmarshal:%v\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif len(strings.Fields(speech.Txt)) == 0 { // 忽略空白字符串，会导致语音合成参数错误\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ttryN := 0\n\t\t\tttsFilename := s.opts.OutDir + speech.Id + \".wav\"\n\t\tTTS:\n\t\t\terr = xf.TextToSpeech(speech.Txt, ttsFilename)\n\t\t\tif err != nil {\n\t\t\t\ttryN++\n\t\t\t\tlog.Error(\"error convert:%v,tts ID:%s,TXT:%s\", err, speech.Id, speech.Txt)\n\t\t\t\tif tryN > 5 { // 多次重试失败，忽略此条语音的合成\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\ttime.Sleep(5 * time.Second)\n\t\t\t\tgoto TTS\n\t\t\t}\n\t\t\tlog.Debug(\"合成ID:%s,TXT:%s\", speech.Id, speech.Txt)\n\t\t\tif s.opts.BackupDir != \"\" {\n\t\t\t\tsrc, _err := os.Open(ttsFilename)\n\t\t\t\tif _err != nil {\n\t\t\t\t\tlog.Error(\"failed to open file %s:%v\", ttsFilename, _err)\n\t\t\t\t}\n\t\t\t\tfilename := s.opts.BackupDir + speech.Id + \".wav\"\n\t\t\t\tdst, _err := os.Create(filename)\n\t\t\t\tif _err != nil {\n\t\t\t\t\tlog.Error(\"failed to create file %s:%v\", filename, _err)\n\t\t\t\t} else {\n\t\t\t\t\t_, _err = io.Copy(dst, src)\n\t\t\t\t\tif _err != nil {\n\t\t\t\t\t\tlog.Error(\"failed to copy file %s->%s:%v\", ttsFilename, filename, _err)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase error:\n\t\t\tlog.Error(\"error redis message:%v\", n)\n\t\t\ttime.Sleep(10 * time.Second)\n\t\tdefault:\n\t\t\tlog.Warn(\"unknown message:%v\", n)\n\t\t}\n\t}\n\n}\n\nfunc (s *Server) Once(txt string, desPath string) error {\n\tlog.Debug(\"tts:%s,login:%s\", s.opts.TTSParams, s.opts.LoginParams)\n\txf.SetTTSParams(s.opts.TTSParams)\n\terr := xf.Login(s.opts.LoginParams)\n\tif err != nil {\n\t\treturn err\n\t}\n\t//不SetSleep,默认为0,单次合成以高性能模式\n\tlog.Debug(\"txt:%s,des_path:%s\", txt, desPath)\n\terr = xf.TextToSpeech(txt, desPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc setXF(speedLevel int, ttsParams, loginParams string) error {\n\tif speedLevel < 1 || speedLevel > 10 {\n\t\treturn fmt.Errorf(\"wrong speed level:%d,it should between 1 and 10\", speedLevel)\n\t}\n\n\tsleepTime := 15000 * (speedLevel - 1)\n\n\txf.SetSleep(sleepTime)\n\n\txf.SetTTSParams(ttsParams)\n\n\terr := xf.Login(loginParams)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "speed_test.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"math/rand\"\n\t\"ontts/xf\"\n\t\"os\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/imroc/log\"\n)\n\nfunc TestSpeed(t *testing.T) {\n\tfile, _ := os.OpenFile(\"test.log\", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)\n\tlog.Set(log.DEBUG, file, log.LstdFlags)\n\n\txf.SetTTSParams(\"voice_name = xiaoqi, text_encoding = UTF8, sample_rate = 8000, speed = 50, volume = 50, pitch = 50, rdn = 2\")\n\txf.SetSleep(0)\n\n\terr := xf.Login(\"appid = 5718a335, work_dir = .\")\n\n\tif err != nil {\n\t\tlog.Error(\"err:%v\", err)\n\t\treturn\n\t}\n\n\tnow := time.Now()\n\n\tvar txt string\n\tfor i := 1; i < 1000; i++ {\n\t\ttxt = getRandomString(r.Intn(21) + 40)\n\t\terr = xf.TextToSpeech(txt, fmt.Sprintf(\"/home/roc/wav/%d.wav\", i))\n\t\tif err != nil {\n\t\t\tlog.Error(\"err:%v\", err)\n\t\t\treturn\n\t\t}\n\t\tlog.Debug(\"已生成第%d个：%s，共用%f秒\", i, txt, time.Since(now).Seconds())\n\t}\n\n\tlog.Info(\"执行完毕,总消耗：%f秒\", time.Since(now).Seconds())\n\txf.Logout()\n\n}\n\nvar start rune = 0x4e00\nvar stop rune = 0x9fa5\nvar n int32 = int32(stop - start)\nvar r *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano()))\n\nfunc getRandomString(l int) string {\n\ts := make([]rune, l)\n\tfor i := 0; i < l; i++ {\n\t\ts[i] = rune(r.Int31n(n) + start)\n\t}\n\treturn string(s)\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/.travis.yml",
    "content": "language: go\nsudo: false\nservices:\n  - redis-server\n\ngo:\n  - 1.4\n  - 1.5\n  - 1.6\n  - 1.7\n  - tip\n\nscript:\n  - go get -t -v ./...\n  - diff -u <(echo -n) <(gofmt -d .)\n  - go vet $(go list ./... | grep -v /vendor/)\n  - go test -v -race ./...\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/README.markdown",
    "content": "Redigo\n======\n\n[![Build Status](https://travis-ci.org/garyburd/redigo.svg?branch=master)](https://travis-ci.org/garyburd/redigo)\n[![GoDoc](https://godoc.org/github.com/garyburd/redigo/redis?status.svg)](https://godoc.org/github.com/garyburd/redigo/redis)\n\nRedigo is a [Go](http://golang.org/) client for the [Redis](http://redis.io/) database.\n\nFeatures\n-------\n\n* A [Print-like](http://godoc.org/github.com/garyburd/redigo/redis#hdr-Executing_Commands) API with support for all Redis commands.\n* [Pipelining](http://godoc.org/github.com/garyburd/redigo/redis#hdr-Pipelining), including pipelined transactions.\n* [Publish/Subscribe](http://godoc.org/github.com/garyburd/redigo/redis#hdr-Publish_and_Subscribe).\n* [Connection pooling](http://godoc.org/github.com/garyburd/redigo/redis#Pool).\n* [Script helper type](http://godoc.org/github.com/garyburd/redigo/redis#Script) with optimistic use of EVALSHA.\n* [Helper functions](http://godoc.org/github.com/garyburd/redigo/redis#hdr-Reply_Helpers) for working with command replies.\n\nDocumentation\n-------------\n\n- [API Reference](http://godoc.org/github.com/garyburd/redigo/redis)\n- [FAQ](https://github.com/garyburd/redigo/wiki/FAQ)\n\nInstallation\n------------\n\nInstall Redigo using the \"go get\" command:\n\n    go get github.com/garyburd/redigo/redis\n\nThe Go distribution is Redigo's only dependency.\n\nRelated Projects\n----------------\n\n- [rafaeljusto/redigomock](https://godoc.org/github.com/rafaeljusto/redigomock) - A mock library for Redigo.\n- [chasex/redis-go-cluster](https://github.com/chasex/redis-go-cluster) - A Redis cluster client implementation.\n- [FZambia/go-sentinel](https://github.com/FZambia/go-sentinel) - Redis Sentinel support for Redigo\n- [PuerkitoBio/redisc](https://github.com/PuerkitoBio/redisc) - Redis Cluster client built on top of Redigo\n\nContributing\n------------\n\nSend email to Gary Burd (address in GitHub profile) before doing any work on Redigo.\n\nLicense\n-------\n\nRedigo is available under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html).\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/internal/commandinfo.go",
    "content": "// Copyright 2014 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage internal // import \"github.com/garyburd/redigo/internal\"\n\nimport (\n\t\"strings\"\n)\n\nconst (\n\tWatchState = 1 << iota\n\tMultiState\n\tSubscribeState\n\tMonitorState\n)\n\ntype CommandInfo struct {\n\tSet, Clear int\n}\n\nvar commandInfos = map[string]CommandInfo{\n\t\"WATCH\":      {Set: WatchState},\n\t\"UNWATCH\":    {Clear: WatchState},\n\t\"MULTI\":      {Set: MultiState},\n\t\"EXEC\":       {Clear: WatchState | MultiState},\n\t\"DISCARD\":    {Clear: WatchState | MultiState},\n\t\"PSUBSCRIBE\": {Set: SubscribeState},\n\t\"SUBSCRIBE\":  {Set: SubscribeState},\n\t\"MONITOR\":    {Set: MonitorState},\n}\n\nfunc init() {\n\tfor n, ci := range commandInfos {\n\t\tcommandInfos[strings.ToLower(n)] = ci\n\t}\n}\n\nfunc LookupCommandInfo(commandName string) CommandInfo {\n\tif ci, ok := commandInfos[commandName]; ok {\n\t\treturn ci\n\t}\n\treturn commandInfos[strings.ToUpper(commandName)]\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/internal/commandinfo_test.go",
    "content": "package internal\n\nimport \"testing\"\n\nfunc TestLookupCommandInfo(t *testing.T) {\n\tfor _, n := range []string{\"watch\", \"WATCH\", \"wAtch\"} {\n\t\tif LookupCommandInfo(n) == (CommandInfo{}) {\n\t\t\tt.Errorf(\"LookupCommandInfo(%q) = CommandInfo{}, expected non-zero value\", n)\n\t\t}\n\t}\n}\n\nfunc benchmarkLookupCommandInfo(b *testing.B, names ...string) {\n\tfor i := 0; i < b.N; i++ {\n\t\tfor _, c := range names {\n\t\t\tLookupCommandInfo(c)\n\t\t}\n\t}\n}\n\nfunc BenchmarkLookupCommandInfoCorrectCase(b *testing.B) {\n\tbenchmarkLookupCommandInfo(b, \"watch\", \"WATCH\", \"monitor\", \"MONITOR\")\n}\n\nfunc BenchmarkLookupCommandInfoMixedCase(b *testing.B) {\n\tbenchmarkLookupCommandInfo(b, \"wAtch\", \"WeTCH\", \"monItor\", \"MONiTOR\")\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/internal/redistest/testdb.go",
    "content": "// Copyright 2014 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Package redistest contains utilities for writing Redigo tests.\npackage redistest\n\nimport (\n\t\"errors\"\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/redis\"\n)\n\ntype testConn struct {\n\tredis.Conn\n}\n\nfunc (t testConn) Close() error {\n\t_, err := t.Conn.Do(\"SELECT\", \"9\")\n\tif err != nil {\n\t\treturn nil\n\t}\n\t_, err = t.Conn.Do(\"FLUSHDB\")\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn t.Conn.Close()\n}\n\n// Dial dials the local Redis server and selects database 9. To prevent\n// stomping on real data, DialTestDB fails if database 9 contains data. The\n// returned connection flushes database 9 on close.\nfunc Dial() (redis.Conn, error) {\n\tc, err := redis.DialTimeout(\"tcp\", \":6379\", 0, 1*time.Second, 1*time.Second)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t_, err = c.Do(\"SELECT\", \"9\")\n\tif err != nil {\n\t\tc.Close()\n\t\treturn nil, err\n\t}\n\n\tn, err := redis.Int(c.Do(\"DBSIZE\"))\n\tif err != nil {\n\t\tc.Close()\n\t\treturn nil, err\n\t}\n\n\tif n != 0 {\n\t\tc.Close()\n\t\treturn nil, errors.New(\"database #9 is not empty, test can not continue\")\n\t}\n\n\treturn testConn{c}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/conn.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n)\n\n// conn is the low-level implementation of Conn\ntype conn struct {\n\n\t// Shared\n\tmu      sync.Mutex\n\tpending int\n\terr     error\n\tconn    net.Conn\n\n\t// Read\n\treadTimeout time.Duration\n\tbr          *bufio.Reader\n\n\t// Write\n\twriteTimeout time.Duration\n\tbw           *bufio.Writer\n\n\t// Scratch space for formatting argument length.\n\t// '*' or '$', length, \"\\r\\n\"\n\tlenScratch [32]byte\n\n\t// Scratch space for formatting integers and floats.\n\tnumScratch [40]byte\n}\n\n// DialTimeout acts like Dial but takes timeouts for establishing the\n// connection to the server, writing a command and reading a reply.\n//\n// Deprecated: Use Dial with options instead.\nfunc DialTimeout(network, address string, connectTimeout, readTimeout, writeTimeout time.Duration) (Conn, error) {\n\treturn Dial(network, address,\n\t\tDialConnectTimeout(connectTimeout),\n\t\tDialReadTimeout(readTimeout),\n\t\tDialWriteTimeout(writeTimeout))\n}\n\n// DialOption specifies an option for dialing a Redis server.\ntype DialOption struct {\n\tf func(*dialOptions)\n}\n\ntype dialOptions struct {\n\treadTimeout  time.Duration\n\twriteTimeout time.Duration\n\tdial         func(network, addr string) (net.Conn, error)\n\tdb           int\n\tpassword     string\n}\n\n// DialReadTimeout specifies the timeout for reading a single command reply.\nfunc DialReadTimeout(d time.Duration) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.readTimeout = d\n\t}}\n}\n\n// DialWriteTimeout specifies the timeout for writing a single command.\nfunc DialWriteTimeout(d time.Duration) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.writeTimeout = d\n\t}}\n}\n\n// DialConnectTimeout specifies the timeout for connecting to the Redis server.\nfunc DialConnectTimeout(d time.Duration) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdialer := net.Dialer{Timeout: d}\n\t\tdo.dial = dialer.Dial\n\t}}\n}\n\n// DialNetDial specifies a custom dial function for creating TCP\n// connections. If this option is left out, then net.Dial is\n// used. DialNetDial overrides DialConnectTimeout.\nfunc DialNetDial(dial func(network, addr string) (net.Conn, error)) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.dial = dial\n\t}}\n}\n\n// DialDatabase specifies the database to select when dialing a connection.\nfunc DialDatabase(db int) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.db = db\n\t}}\n}\n\n// DialPassword specifies the password to use when connecting to\n// the Redis server.\nfunc DialPassword(password string) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.password = password\n\t}}\n}\n\n// Dial connects to the Redis server at the given network and\n// address using the specified options.\nfunc Dial(network, address string, options ...DialOption) (Conn, error) {\n\tdo := dialOptions{\n\t\tdial: net.Dial,\n\t}\n\tfor _, option := range options {\n\t\toption.f(&do)\n\t}\n\n\tnetConn, err := do.dial(network, address)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc := &conn{\n\t\tconn:         netConn,\n\t\tbw:           bufio.NewWriter(netConn),\n\t\tbr:           bufio.NewReader(netConn),\n\t\treadTimeout:  do.readTimeout,\n\t\twriteTimeout: do.writeTimeout,\n\t}\n\n\tif do.password != \"\" {\n\t\tif _, err := c.Do(\"AUTH\", do.password); err != nil {\n\t\t\tnetConn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif do.db != 0 {\n\t\tif _, err := c.Do(\"SELECT\", do.db); err != nil {\n\t\t\tnetConn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn c, nil\n}\n\nvar pathDBRegexp = regexp.MustCompile(`/(\\d*)\\z`)\n\n// DialURL connects to a Redis server at the given URL using the Redis\n// URI scheme. URLs should follow the draft IANA specification for the\n// scheme (https://www.iana.org/assignments/uri-schemes/prov/redis).\nfunc DialURL(rawurl string, options ...DialOption) (Conn, error) {\n\tu, err := url.Parse(rawurl)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif u.Scheme != \"redis\" {\n\t\treturn nil, fmt.Errorf(\"invalid redis URL scheme: %s\", u.Scheme)\n\t}\n\n\t// As per the IANA draft spec, the host defaults to localhost and\n\t// the port defaults to 6379.\n\thost, port, err := net.SplitHostPort(u.Host)\n\tif err != nil {\n\t\t// assume port is missing\n\t\thost = u.Host\n\t\tport = \"6379\"\n\t}\n\tif host == \"\" {\n\t\thost = \"localhost\"\n\t}\n\taddress := net.JoinHostPort(host, port)\n\n\tif u.User != nil {\n\t\tpassword, isSet := u.User.Password()\n\t\tif isSet {\n\t\t\toptions = append(options, DialPassword(password))\n\t\t}\n\t}\n\n\tmatch := pathDBRegexp.FindStringSubmatch(u.Path)\n\tif len(match) == 2 {\n\t\tdb := 0\n\t\tif len(match[1]) > 0 {\n\t\t\tdb, err = strconv.Atoi(match[1])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid database: %s\", u.Path[1:])\n\t\t\t}\n\t\t}\n\t\tif db != 0 {\n\t\t\toptions = append(options, DialDatabase(db))\n\t\t}\n\t} else if u.Path != \"\" {\n\t\treturn nil, fmt.Errorf(\"invalid database: %s\", u.Path[1:])\n\t}\n\n\treturn Dial(\"tcp\", address, options...)\n}\n\n// NewConn returns a new Redigo connection for the given net connection.\nfunc NewConn(netConn net.Conn, readTimeout, writeTimeout time.Duration) Conn {\n\treturn &conn{\n\t\tconn:         netConn,\n\t\tbw:           bufio.NewWriter(netConn),\n\t\tbr:           bufio.NewReader(netConn),\n\t\treadTimeout:  readTimeout,\n\t\twriteTimeout: writeTimeout,\n\t}\n}\n\nfunc (c *conn) Close() error {\n\tc.mu.Lock()\n\terr := c.err\n\tif c.err == nil {\n\t\tc.err = errors.New(\"redigo: closed\")\n\t\terr = c.conn.Close()\n\t}\n\tc.mu.Unlock()\n\treturn err\n}\n\nfunc (c *conn) fatal(err error) error {\n\tc.mu.Lock()\n\tif c.err == nil {\n\t\tc.err = err\n\t\t// Close connection to force errors on subsequent calls and to unblock\n\t\t// other reader or writer.\n\t\tc.conn.Close()\n\t}\n\tc.mu.Unlock()\n\treturn err\n}\n\nfunc (c *conn) Err() error {\n\tc.mu.Lock()\n\terr := c.err\n\tc.mu.Unlock()\n\treturn err\n}\n\nfunc (c *conn) writeLen(prefix byte, n int) error {\n\tc.lenScratch[len(c.lenScratch)-1] = '\\n'\n\tc.lenScratch[len(c.lenScratch)-2] = '\\r'\n\ti := len(c.lenScratch) - 3\n\tfor {\n\t\tc.lenScratch[i] = byte('0' + n%10)\n\t\ti -= 1\n\t\tn = n / 10\n\t\tif n == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\tc.lenScratch[i] = prefix\n\t_, err := c.bw.Write(c.lenScratch[i:])\n\treturn err\n}\n\nfunc (c *conn) writeString(s string) error {\n\tc.writeLen('$', len(s))\n\tc.bw.WriteString(s)\n\t_, err := c.bw.WriteString(\"\\r\\n\")\n\treturn err\n}\n\nfunc (c *conn) writeBytes(p []byte) error {\n\tc.writeLen('$', len(p))\n\tc.bw.Write(p)\n\t_, err := c.bw.WriteString(\"\\r\\n\")\n\treturn err\n}\n\nfunc (c *conn) writeInt64(n int64) error {\n\treturn c.writeBytes(strconv.AppendInt(c.numScratch[:0], n, 10))\n}\n\nfunc (c *conn) writeFloat64(n float64) error {\n\treturn c.writeBytes(strconv.AppendFloat(c.numScratch[:0], n, 'g', -1, 64))\n}\n\nfunc (c *conn) writeCommand(cmd string, args []interface{}) (err error) {\n\tc.writeLen('*', 1+len(args))\n\terr = c.writeString(cmd)\n\tfor _, arg := range args {\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch arg := arg.(type) {\n\t\tcase string:\n\t\t\terr = c.writeString(arg)\n\t\tcase []byte:\n\t\t\terr = c.writeBytes(arg)\n\t\tcase int:\n\t\t\terr = c.writeInt64(int64(arg))\n\t\tcase int64:\n\t\t\terr = c.writeInt64(arg)\n\t\tcase float64:\n\t\t\terr = c.writeFloat64(arg)\n\t\tcase bool:\n\t\t\tif arg {\n\t\t\t\terr = c.writeString(\"1\")\n\t\t\t} else {\n\t\t\t\terr = c.writeString(\"0\")\n\t\t\t}\n\t\tcase nil:\n\t\t\terr = c.writeString(\"\")\n\t\tdefault:\n\t\t\tvar buf bytes.Buffer\n\t\t\tfmt.Fprint(&buf, arg)\n\t\t\terr = c.writeBytes(buf.Bytes())\n\t\t}\n\t}\n\treturn err\n}\n\ntype protocolError string\n\nfunc (pe protocolError) Error() string {\n\treturn fmt.Sprintf(\"redigo: %s (possible server error or unsupported concurrent read by application)\", string(pe))\n}\n\nfunc (c *conn) readLine() ([]byte, error) {\n\tp, err := c.br.ReadSlice('\\n')\n\tif err == bufio.ErrBufferFull {\n\t\treturn nil, protocolError(\"long response line\")\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ti := len(p) - 2\n\tif i < 0 || p[i] != '\\r' {\n\t\treturn nil, protocolError(\"bad response line terminator\")\n\t}\n\treturn p[:i], nil\n}\n\n// parseLen parses bulk string and array lengths.\nfunc parseLen(p []byte) (int, error) {\n\tif len(p) == 0 {\n\t\treturn -1, protocolError(\"malformed length\")\n\t}\n\n\tif p[0] == '-' && len(p) == 2 && p[1] == '1' {\n\t\t// handle $-1 and $-1 null replies.\n\t\treturn -1, nil\n\t}\n\n\tvar n int\n\tfor _, b := range p {\n\t\tn *= 10\n\t\tif b < '0' || b > '9' {\n\t\t\treturn -1, protocolError(\"illegal bytes in length\")\n\t\t}\n\t\tn += int(b - '0')\n\t}\n\n\treturn n, nil\n}\n\n// parseInt parses an integer reply.\nfunc parseInt(p []byte) (interface{}, error) {\n\tif len(p) == 0 {\n\t\treturn 0, protocolError(\"malformed integer\")\n\t}\n\n\tvar negate bool\n\tif p[0] == '-' {\n\t\tnegate = true\n\t\tp = p[1:]\n\t\tif len(p) == 0 {\n\t\t\treturn 0, protocolError(\"malformed integer\")\n\t\t}\n\t}\n\n\tvar n int64\n\tfor _, b := range p {\n\t\tn *= 10\n\t\tif b < '0' || b > '9' {\n\t\t\treturn 0, protocolError(\"illegal bytes in length\")\n\t\t}\n\t\tn += int64(b - '0')\n\t}\n\n\tif negate {\n\t\tn = -n\n\t}\n\treturn n, nil\n}\n\nvar (\n\tokReply   interface{} = \"OK\"\n\tpongReply interface{} = \"PONG\"\n)\n\nfunc (c *conn) readReply() (interface{}, error) {\n\tline, err := c.readLine()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(line) == 0 {\n\t\treturn nil, protocolError(\"short response line\")\n\t}\n\tswitch line[0] {\n\tcase '+':\n\t\tswitch {\n\t\tcase len(line) == 3 && line[1] == 'O' && line[2] == 'K':\n\t\t\t// Avoid allocation for frequent \"+OK\" response.\n\t\t\treturn okReply, nil\n\t\tcase len(line) == 5 && line[1] == 'P' && line[2] == 'O' && line[3] == 'N' && line[4] == 'G':\n\t\t\t// Avoid allocation in PING command benchmarks :)\n\t\t\treturn pongReply, nil\n\t\tdefault:\n\t\t\treturn string(line[1:]), nil\n\t\t}\n\tcase '-':\n\t\treturn Error(string(line[1:])), nil\n\tcase ':':\n\t\treturn parseInt(line[1:])\n\tcase '$':\n\t\tn, err := parseLen(line[1:])\n\t\tif n < 0 || err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tp := make([]byte, n)\n\t\t_, err = io.ReadFull(c.br, p)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif line, err := c.readLine(); err != nil {\n\t\t\treturn nil, err\n\t\t} else if len(line) != 0 {\n\t\t\treturn nil, protocolError(\"bad bulk string format\")\n\t\t}\n\t\treturn p, nil\n\tcase '*':\n\t\tn, err := parseLen(line[1:])\n\t\tif n < 0 || err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tr := make([]interface{}, n)\n\t\tfor i := range r {\n\t\t\tr[i], err = c.readReply()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn r, nil\n\t}\n\treturn nil, protocolError(\"unexpected response line\")\n}\n\nfunc (c *conn) Send(cmd string, args ...interface{}) error {\n\tc.mu.Lock()\n\tc.pending += 1\n\tc.mu.Unlock()\n\tif c.writeTimeout != 0 {\n\t\tc.conn.SetWriteDeadline(time.Now().Add(c.writeTimeout))\n\t}\n\tif err := c.writeCommand(cmd, args); err != nil {\n\t\treturn c.fatal(err)\n\t}\n\treturn nil\n}\n\nfunc (c *conn) Flush() error {\n\tif c.writeTimeout != 0 {\n\t\tc.conn.SetWriteDeadline(time.Now().Add(c.writeTimeout))\n\t}\n\tif err := c.bw.Flush(); err != nil {\n\t\treturn c.fatal(err)\n\t}\n\treturn nil\n}\n\nfunc (c *conn) Receive() (reply interface{}, err error) {\n\tif c.readTimeout != 0 {\n\t\tc.conn.SetReadDeadline(time.Now().Add(c.readTimeout))\n\t}\n\tif reply, err = c.readReply(); err != nil {\n\t\treturn nil, c.fatal(err)\n\t}\n\t// When using pub/sub, the number of receives can be greater than the\n\t// number of sends. To enable normal use of the connection after\n\t// unsubscribing from all channels, we do not decrement pending to a\n\t// negative value.\n\t//\n\t// The pending field is decremented after the reply is read to handle the\n\t// case where Receive is called before Send.\n\tc.mu.Lock()\n\tif c.pending > 0 {\n\t\tc.pending -= 1\n\t}\n\tc.mu.Unlock()\n\tif err, ok := reply.(Error); ok {\n\t\treturn nil, err\n\t}\n\treturn\n}\n\nfunc (c *conn) Do(cmd string, args ...interface{}) (interface{}, error) {\n\tc.mu.Lock()\n\tpending := c.pending\n\tc.pending = 0\n\tc.mu.Unlock()\n\n\tif cmd == \"\" && pending == 0 {\n\t\treturn nil, nil\n\t}\n\n\tif c.writeTimeout != 0 {\n\t\tc.conn.SetWriteDeadline(time.Now().Add(c.writeTimeout))\n\t}\n\n\tif cmd != \"\" {\n\t\tif err := c.writeCommand(cmd, args); err != nil {\n\t\t\treturn nil, c.fatal(err)\n\t\t}\n\t}\n\n\tif err := c.bw.Flush(); err != nil {\n\t\treturn nil, c.fatal(err)\n\t}\n\n\tif c.readTimeout != 0 {\n\t\tc.conn.SetReadDeadline(time.Now().Add(c.readTimeout))\n\t}\n\n\tif cmd == \"\" {\n\t\treply := make([]interface{}, pending)\n\t\tfor i := range reply {\n\t\t\tr, e := c.readReply()\n\t\t\tif e != nil {\n\t\t\t\treturn nil, c.fatal(e)\n\t\t\t}\n\t\t\treply[i] = r\n\t\t}\n\t\treturn reply, nil\n\t}\n\n\tvar err error\n\tvar reply interface{}\n\tfor i := 0; i <= pending; i++ {\n\t\tvar e error\n\t\tif reply, e = c.readReply(); e != nil {\n\t\t\treturn nil, c.fatal(e)\n\t\t}\n\t\tif e, ok := reply.(Error); ok && err == nil {\n\t\t\terr = e\n\t\t}\n\t}\n\treturn reply, err\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/conn_test.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis_test\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"math\"\n\t\"net\"\n\t\"os\"\n\t\"reflect\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/redis\"\n)\n\ntype testConn struct {\n\tio.Reader\n\tio.Writer\n}\n\nfunc (*testConn) Close() error                       { return nil }\nfunc (*testConn) LocalAddr() net.Addr                { return nil }\nfunc (*testConn) RemoteAddr() net.Addr               { return nil }\nfunc (*testConn) SetDeadline(t time.Time) error      { return nil }\nfunc (*testConn) SetReadDeadline(t time.Time) error  { return nil }\nfunc (*testConn) SetWriteDeadline(t time.Time) error { return nil }\n\nfunc dialTestConn(r io.Reader, w io.Writer) redis.DialOption {\n\treturn redis.DialNetDial(func(net, addr string) (net.Conn, error) {\n\t\treturn &testConn{Reader: r, Writer: w}, nil\n\t})\n}\n\nvar writeTests = []struct {\n\targs     []interface{}\n\texpected string\n}{\n\t{\n\t\t[]interface{}{\"SET\", \"key\", \"value\"},\n\t\t\"*3\\r\\n$3\\r\\nSET\\r\\n$3\\r\\nkey\\r\\n$5\\r\\nvalue\\r\\n\",\n\t},\n\t{\n\t\t[]interface{}{\"SET\", \"key\", \"value\"},\n\t\t\"*3\\r\\n$3\\r\\nSET\\r\\n$3\\r\\nkey\\r\\n$5\\r\\nvalue\\r\\n\",\n\t},\n\t{\n\t\t[]interface{}{\"SET\", \"key\", byte(100)},\n\t\t\"*3\\r\\n$3\\r\\nSET\\r\\n$3\\r\\nkey\\r\\n$3\\r\\n100\\r\\n\",\n\t},\n\t{\n\t\t[]interface{}{\"SET\", \"key\", 100},\n\t\t\"*3\\r\\n$3\\r\\nSET\\r\\n$3\\r\\nkey\\r\\n$3\\r\\n100\\r\\n\",\n\t},\n\t{\n\t\t[]interface{}{\"SET\", \"key\", int64(math.MinInt64)},\n\t\t\"*3\\r\\n$3\\r\\nSET\\r\\n$3\\r\\nkey\\r\\n$20\\r\\n-9223372036854775808\\r\\n\",\n\t},\n\t{\n\t\t[]interface{}{\"SET\", \"key\", float64(1349673917.939762)},\n\t\t\"*3\\r\\n$3\\r\\nSET\\r\\n$3\\r\\nkey\\r\\n$21\\r\\n1.349673917939762e+09\\r\\n\",\n\t},\n\t{\n\t\t[]interface{}{\"SET\", \"key\", \"\"},\n\t\t\"*3\\r\\n$3\\r\\nSET\\r\\n$3\\r\\nkey\\r\\n$0\\r\\n\\r\\n\",\n\t},\n\t{\n\t\t[]interface{}{\"SET\", \"key\", nil},\n\t\t\"*3\\r\\n$3\\r\\nSET\\r\\n$3\\r\\nkey\\r\\n$0\\r\\n\\r\\n\",\n\t},\n\t{\n\t\t[]interface{}{\"ECHO\", true, false},\n\t\t\"*3\\r\\n$4\\r\\nECHO\\r\\n$1\\r\\n1\\r\\n$1\\r\\n0\\r\\n\",\n\t},\n}\n\nfunc TestWrite(t *testing.T) {\n\tfor _, tt := range writeTests {\n\t\tvar buf bytes.Buffer\n\t\tc, _ := redis.Dial(\"\", \"\", dialTestConn(nil, &buf))\n\t\terr := c.Send(tt.args[0].(string), tt.args[1:]...)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Send(%v) returned error %v\", tt.args, err)\n\t\t\tcontinue\n\t\t}\n\t\tc.Flush()\n\t\tactual := buf.String()\n\t\tif actual != tt.expected {\n\t\t\tt.Errorf(\"Send(%v) = %q, want %q\", tt.args, actual, tt.expected)\n\t\t}\n\t}\n}\n\nvar errorSentinel = &struct{}{}\n\nvar readTests = []struct {\n\treply    string\n\texpected interface{}\n}{\n\t{\n\t\t\"+OK\\r\\n\",\n\t\t\"OK\",\n\t},\n\t{\n\t\t\"+PONG\\r\\n\",\n\t\t\"PONG\",\n\t},\n\t{\n\t\t\"@OK\\r\\n\",\n\t\terrorSentinel,\n\t},\n\t{\n\t\t\"$6\\r\\nfoobar\\r\\n\",\n\t\t[]byte(\"foobar\"),\n\t},\n\t{\n\t\t\"$-1\\r\\n\",\n\t\tnil,\n\t},\n\t{\n\t\t\":1\\r\\n\",\n\t\tint64(1),\n\t},\n\t{\n\t\t\":-2\\r\\n\",\n\t\tint64(-2),\n\t},\n\t{\n\t\t\"*0\\r\\n\",\n\t\t[]interface{}{},\n\t},\n\t{\n\t\t\"*-1\\r\\n\",\n\t\tnil,\n\t},\n\t{\n\t\t\"*4\\r\\n$3\\r\\nfoo\\r\\n$3\\r\\nbar\\r\\n$5\\r\\nHello\\r\\n$5\\r\\nWorld\\r\\n\",\n\t\t[]interface{}{[]byte(\"foo\"), []byte(\"bar\"), []byte(\"Hello\"), []byte(\"World\")},\n\t},\n\t{\n\t\t\"*3\\r\\n$3\\r\\nfoo\\r\\n$-1\\r\\n$3\\r\\nbar\\r\\n\",\n\t\t[]interface{}{[]byte(\"foo\"), nil, []byte(\"bar\")},\n\t},\n\n\t{\n\t\t// \"x\" is not a valid length\n\t\t\"$x\\r\\nfoobar\\r\\n\",\n\t\terrorSentinel,\n\t},\n\t{\n\t\t// -2 is not a valid length\n\t\t\"$-2\\r\\n\",\n\t\terrorSentinel,\n\t},\n\t{\n\t\t// \"x\"  is not a valid integer\n\t\t\":x\\r\\n\",\n\t\terrorSentinel,\n\t},\n\t{\n\t\t// missing \\r\\n following value\n\t\t\"$6\\r\\nfoobar\",\n\t\terrorSentinel,\n\t},\n\t{\n\t\t// short value\n\t\t\"$6\\r\\nxx\",\n\t\terrorSentinel,\n\t},\n\t{\n\t\t// long value\n\t\t\"$6\\r\\nfoobarx\\r\\n\",\n\t\terrorSentinel,\n\t},\n}\n\nfunc TestRead(t *testing.T) {\n\tfor _, tt := range readTests {\n\t\tc, _ := redis.Dial(\"\", \"\", dialTestConn(strings.NewReader(tt.reply), nil))\n\t\tactual, err := c.Receive()\n\t\tif tt.expected == errorSentinel {\n\t\t\tif err == nil {\n\t\t\t\tt.Errorf(\"Receive(%q) did not return expected error\", tt.reply)\n\t\t\t}\n\t\t} else {\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"Receive(%q) returned error %v\", tt.reply, err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !reflect.DeepEqual(actual, tt.expected) {\n\t\t\t\tt.Errorf(\"Receive(%q) = %v, want %v\", tt.reply, actual, tt.expected)\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar testCommands = []struct {\n\targs     []interface{}\n\texpected interface{}\n}{\n\t{\n\t\t[]interface{}{\"PING\"},\n\t\t\"PONG\",\n\t},\n\t{\n\t\t[]interface{}{\"SET\", \"foo\", \"bar\"},\n\t\t\"OK\",\n\t},\n\t{\n\t\t[]interface{}{\"GET\", \"foo\"},\n\t\t[]byte(\"bar\"),\n\t},\n\t{\n\t\t[]interface{}{\"GET\", \"nokey\"},\n\t\tnil,\n\t},\n\t{\n\t\t[]interface{}{\"MGET\", \"nokey\", \"foo\"},\n\t\t[]interface{}{nil, []byte(\"bar\")},\n\t},\n\t{\n\t\t[]interface{}{\"INCR\", \"mycounter\"},\n\t\tint64(1),\n\t},\n\t{\n\t\t[]interface{}{\"LPUSH\", \"mylist\", \"foo\"},\n\t\tint64(1),\n\t},\n\t{\n\t\t[]interface{}{\"LPUSH\", \"mylist\", \"bar\"},\n\t\tint64(2),\n\t},\n\t{\n\t\t[]interface{}{\"LRANGE\", \"mylist\", 0, -1},\n\t\t[]interface{}{[]byte(\"bar\"), []byte(\"foo\")},\n\t},\n\t{\n\t\t[]interface{}{\"MULTI\"},\n\t\t\"OK\",\n\t},\n\t{\n\t\t[]interface{}{\"LRANGE\", \"mylist\", 0, -1},\n\t\t\"QUEUED\",\n\t},\n\t{\n\t\t[]interface{}{\"PING\"},\n\t\t\"QUEUED\",\n\t},\n\t{\n\t\t[]interface{}{\"EXEC\"},\n\t\t[]interface{}{\n\t\t\t[]interface{}{[]byte(\"bar\"), []byte(\"foo\")},\n\t\t\t\"PONG\",\n\t\t},\n\t},\n}\n\nfunc TestDoCommands(t *testing.T) {\n\tc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\tt.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer c.Close()\n\n\tfor _, cmd := range testCommands {\n\t\tactual, err := c.Do(cmd.args[0].(string), cmd.args[1:]...)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Do(%v) returned error %v\", cmd.args, err)\n\t\t\tcontinue\n\t\t}\n\t\tif !reflect.DeepEqual(actual, cmd.expected) {\n\t\t\tt.Errorf(\"Do(%v) = %v, want %v\", cmd.args, actual, cmd.expected)\n\t\t}\n\t}\n}\n\nfunc TestPipelineCommands(t *testing.T) {\n\tc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\tt.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer c.Close()\n\n\tfor _, cmd := range testCommands {\n\t\tif err := c.Send(cmd.args[0].(string), cmd.args[1:]...); err != nil {\n\t\t\tt.Fatalf(\"Send(%v) returned error %v\", cmd.args, err)\n\t\t}\n\t}\n\tif err := c.Flush(); err != nil {\n\t\tt.Errorf(\"Flush() returned error %v\", err)\n\t}\n\tfor _, cmd := range testCommands {\n\t\tactual, err := c.Receive()\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Receive(%v) returned error %v\", cmd.args, err)\n\t\t}\n\t\tif !reflect.DeepEqual(actual, cmd.expected) {\n\t\t\tt.Errorf(\"Receive(%v) = %v, want %v\", cmd.args, actual, cmd.expected)\n\t\t}\n\t}\n}\n\nfunc TestBlankCommmand(t *testing.T) {\n\tc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\tt.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer c.Close()\n\n\tfor _, cmd := range testCommands {\n\t\tif err := c.Send(cmd.args[0].(string), cmd.args[1:]...); err != nil {\n\t\t\tt.Fatalf(\"Send(%v) returned error %v\", cmd.args, err)\n\t\t}\n\t}\n\treply, err := redis.Values(c.Do(\"\"))\n\tif err != nil {\n\t\tt.Fatalf(\"Do() returned error %v\", err)\n\t}\n\tif len(reply) != len(testCommands) {\n\t\tt.Fatalf(\"len(reply)=%d, want %d\", len(reply), len(testCommands))\n\t}\n\tfor i, cmd := range testCommands {\n\t\tactual := reply[i]\n\t\tif !reflect.DeepEqual(actual, cmd.expected) {\n\t\t\tt.Errorf(\"Receive(%v) = %v, want %v\", cmd.args, actual, cmd.expected)\n\t\t}\n\t}\n}\n\nfunc TestRecvBeforeSend(t *testing.T) {\n\tc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\tt.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer c.Close()\n\tdone := make(chan struct{})\n\tgo func() {\n\t\tc.Receive()\n\t\tclose(done)\n\t}()\n\ttime.Sleep(time.Millisecond)\n\tc.Send(\"PING\")\n\tc.Flush()\n\t<-done\n\t_, err = c.Do(\"\")\n\tif err != nil {\n\t\tt.Fatalf(\"error=%v\", err)\n\t}\n}\n\nfunc TestError(t *testing.T) {\n\tc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\tt.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer c.Close()\n\n\tc.Do(\"SET\", \"key\", \"val\")\n\t_, err = c.Do(\"HSET\", \"key\", \"fld\", \"val\")\n\tif err == nil {\n\t\tt.Errorf(\"Expected err for HSET on string key.\")\n\t}\n\tif c.Err() != nil {\n\t\tt.Errorf(\"Conn has Err()=%v, expect nil\", c.Err())\n\t}\n\t_, err = c.Do(\"SET\", \"key\", \"val\")\n\tif err != nil {\n\t\tt.Errorf(\"Do(SET, key, val) returned error %v, expected nil.\", err)\n\t}\n}\n\nfunc TestReadTimeout(t *testing.T) {\n\tl, err := net.Listen(\"tcp\", \"127.0.0.1:0\")\n\tif err != nil {\n\t\tt.Fatalf(\"net.Listen returned %v\", err)\n\t}\n\tdefer l.Close()\n\n\tgo func() {\n\t\tfor {\n\t\t\tc, err := l.Accept()\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tgo func() {\n\t\t\t\ttime.Sleep(time.Second)\n\t\t\t\tc.Write([]byte(\"+OK\\r\\n\"))\n\t\t\t\tc.Close()\n\t\t\t}()\n\t\t}\n\t}()\n\n\t// Do\n\n\tc1, err := redis.Dial(l.Addr().Network(), l.Addr().String(), redis.DialReadTimeout(time.Millisecond))\n\tif err != nil {\n\t\tt.Fatalf(\"redis.Dial returned %v\", err)\n\t}\n\tdefer c1.Close()\n\n\t_, err = c1.Do(\"PING\")\n\tif err == nil {\n\t\tt.Fatalf(\"c1.Do() returned nil, expect error\")\n\t}\n\tif c1.Err() == nil {\n\t\tt.Fatalf(\"c1.Err() = nil, expect error\")\n\t}\n\n\t// Send/Flush/Receive\n\n\tc2, err := redis.Dial(l.Addr().Network(), l.Addr().String(), redis.DialReadTimeout(time.Millisecond))\n\tif err != nil {\n\t\tt.Fatalf(\"redis.Dial returned %v\", err)\n\t}\n\tdefer c2.Close()\n\n\tc2.Send(\"PING\")\n\tc2.Flush()\n\t_, err = c2.Receive()\n\tif err == nil {\n\t\tt.Fatalf(\"c2.Receive() returned nil, expect error\")\n\t}\n\tif c2.Err() == nil {\n\t\tt.Fatalf(\"c2.Err() = nil, expect error\")\n\t}\n}\n\nvar dialErrors = []struct {\n\trawurl        string\n\texpectedError string\n}{\n\t{\n\t\t\"localhost\",\n\t\t\"invalid redis URL scheme\",\n\t},\n\t// The error message for invalid hosts is diffferent in different\n\t// versions of Go, so just check that there is an error message.\n\t{\n\t\t\"redis://weird url\",\n\t\t\"\",\n\t},\n\t{\n\t\t\"redis://foo:bar:baz\",\n\t\t\"\",\n\t},\n\t{\n\t\t\"http://www.google.com\",\n\t\t\"invalid redis URL scheme: http\",\n\t},\n\t{\n\t\t\"redis://localhost:6379/abc123\",\n\t\t\"invalid database: abc123\",\n\t},\n}\n\nfunc TestDialURLErrors(t *testing.T) {\n\tfor _, d := range dialErrors {\n\t\t_, err := redis.DialURL(d.rawurl)\n\t\tif err == nil || !strings.Contains(err.Error(), d.expectedError) {\n\t\t\tt.Errorf(\"DialURL did not return expected error (expected %v to contain %s)\", err, d.expectedError)\n\t\t}\n\t}\n}\n\nfunc TestDialURLPort(t *testing.T) {\n\tcheckPort := func(network, address string) (net.Conn, error) {\n\t\tif address != \"localhost:6379\" {\n\t\t\tt.Errorf(\"DialURL did not set port to 6379 by default (got %v)\", address)\n\t\t}\n\t\treturn nil, nil\n\t}\n\t_, err := redis.DialURL(\"redis://localhost\", redis.DialNetDial(checkPort))\n\tif err != nil {\n\t\tt.Error(\"dial error:\", err)\n\t}\n}\n\nfunc TestDialURLHost(t *testing.T) {\n\tcheckHost := func(network, address string) (net.Conn, error) {\n\t\tif address != \"localhost:6379\" {\n\t\t\tt.Errorf(\"DialURL did not set host to localhost by default (got %v)\", address)\n\t\t}\n\t\treturn nil, nil\n\t}\n\t_, err := redis.DialURL(\"redis://:6379\", redis.DialNetDial(checkHost))\n\tif err != nil {\n\t\tt.Error(\"dial error:\", err)\n\t}\n}\n\nfunc TestDialURLPassword(t *testing.T) {\n\tvar buf bytes.Buffer\n\t_, err := redis.DialURL(\"redis://x:abc123@localhost\", dialTestConn(strings.NewReader(\"+OK\\r\\n\"), &buf))\n\tif err != nil {\n\t\tt.Error(\"dial error:\", err)\n\t}\n\texpected := \"*2\\r\\n$4\\r\\nAUTH\\r\\n$6\\r\\nabc123\\r\\n\"\n\tactual := buf.String()\n\tif actual != expected {\n\t\tt.Errorf(\"commands = %q, want %q\", actual, expected)\n\t}\n}\n\nfunc TestDialURLDatabase(t *testing.T) {\n\tvar buf3 bytes.Buffer\n\t_, err3 := redis.DialURL(\"redis://localhost/3\", dialTestConn(strings.NewReader(\"+OK\\r\\n\"), &buf3))\n\tif err3 != nil {\n\t\tt.Error(\"dial error:\", err3)\n\t}\n\texpected3 := \"*2\\r\\n$6\\r\\nSELECT\\r\\n$1\\r\\n3\\r\\n\"\n\tactual3 := buf3.String()\n\tif actual3 != expected3 {\n\t\tt.Errorf(\"commands = %q, want %q\", actual3, expected3)\n\t}\n\t// empty DB means 0\n\tvar buf0 bytes.Buffer\n\t_, err0 := redis.DialURL(\"redis://localhost/\", dialTestConn(strings.NewReader(\"+OK\\r\\n\"), &buf0))\n\tif err0 != nil {\n\t\tt.Error(\"dial error:\", err0)\n\t}\n\texpected0 := \"\"\n\tactual0 := buf0.String()\n\tif actual0 != expected0 {\n\t\tt.Errorf(\"commands = %q, want %q\", actual0, expected0)\n\t}\n}\n\n// Connect to local instance of Redis running on the default port.\nfunc ExampleDial() {\n\tc, err := redis.Dial(\"tcp\", \":6379\")\n\tif err != nil {\n\t\t// handle error\n\t}\n\tdefer c.Close()\n}\n\n// Connect to remote instance of Redis using a URL.\nfunc ExampleDialURL() {\n\tc, err := redis.DialURL(os.Getenv(\"REDIS_URL\"))\n\tif err != nil {\n\t\t// handle connection error\n\t}\n\tdefer c.Close()\n}\n\n// TextExecError tests handling of errors in a transaction. See\n// http://redis.io/topics/transactions for information on how Redis handles\n// errors in a transaction.\nfunc TestExecError(t *testing.T) {\n\tc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\tt.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer c.Close()\n\n\t// Execute commands that fail before EXEC is called.\n\n\tc.Do(\"DEL\", \"k0\")\n\tc.Do(\"ZADD\", \"k0\", 0, 0)\n\tc.Send(\"MULTI\")\n\tc.Send(\"NOTACOMMAND\", \"k0\", 0, 0)\n\tc.Send(\"ZINCRBY\", \"k0\", 0, 0)\n\tv, err := c.Do(\"EXEC\")\n\tif err == nil {\n\t\tt.Fatalf(\"EXEC returned values %v, expected error\", v)\n\t}\n\n\t// Execute commands that fail after EXEC is called. The first command\n\t// returns an error.\n\n\tc.Do(\"DEL\", \"k1\")\n\tc.Do(\"ZADD\", \"k1\", 0, 0)\n\tc.Send(\"MULTI\")\n\tc.Send(\"HSET\", \"k1\", 0, 0)\n\tc.Send(\"ZINCRBY\", \"k1\", 0, 0)\n\tv, err = c.Do(\"EXEC\")\n\tif err != nil {\n\t\tt.Fatalf(\"EXEC returned error %v\", err)\n\t}\n\n\tvs, err := redis.Values(v, nil)\n\tif err != nil {\n\t\tt.Fatalf(\"Values(v) returned error %v\", err)\n\t}\n\n\tif len(vs) != 2 {\n\t\tt.Fatalf(\"len(vs) == %d, want 2\", len(vs))\n\t}\n\n\tif _, ok := vs[0].(error); !ok {\n\t\tt.Fatalf(\"first result is type %T, expected error\", vs[0])\n\t}\n\n\tif _, ok := vs[1].([]byte); !ok {\n\t\tt.Fatalf(\"second result is type %T, expected []byte\", vs[1])\n\t}\n\n\t// Execute commands that fail after EXEC is called. The second command\n\t// returns an error.\n\n\tc.Do(\"ZADD\", \"k2\", 0, 0)\n\tc.Send(\"MULTI\")\n\tc.Send(\"ZINCRBY\", \"k2\", 0, 0)\n\tc.Send(\"HSET\", \"k2\", 0, 0)\n\tv, err = c.Do(\"EXEC\")\n\tif err != nil {\n\t\tt.Fatalf(\"EXEC returned error %v\", err)\n\t}\n\n\tvs, err = redis.Values(v, nil)\n\tif err != nil {\n\t\tt.Fatalf(\"Values(v) returned error %v\", err)\n\t}\n\n\tif len(vs) != 2 {\n\t\tt.Fatalf(\"len(vs) == %d, want 2\", len(vs))\n\t}\n\n\tif _, ok := vs[0].([]byte); !ok {\n\t\tt.Fatalf(\"first result is type %T, expected []byte\", vs[0])\n\t}\n\n\tif _, ok := vs[1].(error); !ok {\n\t\tt.Fatalf(\"second result is type %T, expected error\", vs[2])\n\t}\n}\n\nfunc BenchmarkDoEmpty(b *testing.B) {\n\tb.StopTimer()\n\tc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\tdefer c.Close()\n\tb.StartTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\tif _, err := c.Do(\"\"); err != nil {\n\t\t\tb.Fatal(err)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDoPing(b *testing.B) {\n\tb.StopTimer()\n\tc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\tdefer c.Close()\n\tb.StartTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\tif _, err := c.Do(\"PING\"); err != nil {\n\t\t\tb.Fatal(err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/doc.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Package redis is a client for the Redis database.\n//\n// The Redigo FAQ (https://github.com/garyburd/redigo/wiki/FAQ) contains more\n// documentation about this package.\n//\n// Connections\n//\n// The Conn interface is the primary interface for working with Redis.\n// Applications create connections by calling the Dial, DialWithTimeout or\n// NewConn functions. In the future, functions will be added for creating\n// sharded and other types of connections.\n//\n// The application must call the connection Close method when the application\n// is done with the connection.\n//\n// Executing Commands\n//\n// The Conn interface has a generic method for executing Redis commands:\n//\n//  Do(commandName string, args ...interface{}) (reply interface{}, err error)\n//\n// The Redis command reference (http://redis.io/commands) lists the available\n// commands. An example of using the Redis APPEND command is:\n//\n//  n, err := conn.Do(\"APPEND\", \"key\", \"value\")\n//\n// The Do method converts command arguments to binary strings for transmission\n// to the server as follows:\n//\n//  Go Type                 Conversion\n//  []byte                  Sent as is\n//  string                  Sent as is\n//  int, int64              strconv.FormatInt(v)\n//  float64                 strconv.FormatFloat(v, 'g', -1, 64)\n//  bool                    true -> \"1\", false -> \"0\"\n//  nil                     \"\"\n//  all other types         fmt.Print(v)\n//\n// Redis command reply types are represented using the following Go types:\n//\n//  Redis type              Go type\n//  error                   redis.Error\n//  integer                 int64\n//  simple string           string\n//  bulk string             []byte or nil if value not present.\n//  array                   []interface{} or nil if value not present.\n//\n// Use type assertions or the reply helper functions to convert from\n// interface{} to the specific Go type for the command result.\n//\n// Pipelining\n//\n// Connections support pipelining using the Send, Flush and Receive methods.\n//\n//  Send(commandName string, args ...interface{}) error\n//  Flush() error\n//  Receive() (reply interface{}, err error)\n//\n// Send writes the command to the connection's output buffer. Flush flushes the\n// connection's output buffer to the server. Receive reads a single reply from\n// the server. The following example shows a simple pipeline.\n//\n//  c.Send(\"SET\", \"foo\", \"bar\")\n//  c.Send(\"GET\", \"foo\")\n//  c.Flush()\n//  c.Receive() // reply from SET\n//  v, err = c.Receive() // reply from GET\n//\n// The Do method combines the functionality of the Send, Flush and Receive\n// methods. The Do method starts by writing the command and flushing the output\n// buffer. Next, the Do method receives all pending replies including the reply\n// for the command just sent by Do. If any of the received replies is an error,\n// then Do returns the error. If there are no errors, then Do returns the last\n// reply. If the command argument to the Do method is \"\", then the Do method\n// will flush the output buffer and receive pending replies without sending a\n// command.\n//\n// Use the Send and Do methods to implement pipelined transactions.\n//\n//  c.Send(\"MULTI\")\n//  c.Send(\"INCR\", \"foo\")\n//  c.Send(\"INCR\", \"bar\")\n//  r, err := c.Do(\"EXEC\")\n//  fmt.Println(r) // prints [1, 1]\n//\n// Concurrency\n//\n// Connections support one concurrent caller to the Receive method and one\n// concurrent caller to the Send and Flush methods. No other concurrency is\n// supported including concurrent calls to the Do method.\n//\n// For full concurrent access to Redis, use the thread-safe Pool to get, use\n// and release a connection from within a goroutine. Connections returned from\n// a Pool have the concurrency restrictions described in the previous\n// paragraph.\n//\n// Publish and Subscribe\n//\n// Use the Send, Flush and Receive methods to implement Pub/Sub subscribers.\n//\n//  c.Send(\"SUBSCRIBE\", \"example\")\n//  c.Flush()\n//  for {\n//      reply, err := c.Receive()\n//      if err != nil {\n//          return err\n//      }\n//      // process pushed message\n//  }\n//\n// The PubSubConn type wraps a Conn with convenience methods for implementing\n// subscribers. The Subscribe, PSubscribe, Unsubscribe and PUnsubscribe methods\n// send and flush a subscription management command. The receive method\n// converts a pushed message to convenient types for use in a type switch.\n//\n//  psc := redis.PubSubConn{c}\n//  psc.Subscribe(\"example\")\n//  for {\n//      switch v := psc.Receive().(type) {\n//      case redis.Message:\n//          fmt.Printf(\"%s: message: %s\\n\", v.Channel, v.Data)\n//      case redis.Subscription:\n//          fmt.Printf(\"%s: %s %d\\n\", v.Channel, v.Kind, v.Count)\n//      case error:\n//          return v\n//      }\n//  }\n//\n// Reply Helpers\n//\n// The Bool, Int, Bytes, String, Strings and Values functions convert a reply\n// to a value of a specific type. To allow convenient wrapping of calls to the\n// connection Do and Receive methods, the functions take a second argument of\n// type error.  If the error is non-nil, then the helper function returns the\n// error. If the error is nil, the function converts the reply to the specified\n// type:\n//\n//  exists, err := redis.Bool(c.Do(\"EXISTS\", \"foo\"))\n//  if err != nil {\n//      // handle error return from c.Do or type conversion error.\n//  }\n//\n// The Scan function converts elements of a array reply to Go types:\n//\n//  var value1 int\n//  var value2 string\n//  reply, err := redis.Values(c.Do(\"MGET\", \"key1\", \"key2\"))\n//  if err != nil {\n//      // handle error\n//  }\n//   if _, err := redis.Scan(reply, &value1, &value2); err != nil {\n//      // handle error\n//  }\npackage redis // import \"github.com/garyburd/redigo/redis\"\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/log.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n)\n\n// NewLoggingConn returns a logging wrapper around a connection.\nfunc NewLoggingConn(conn Conn, logger *log.Logger, prefix string) Conn {\n\tif prefix != \"\" {\n\t\tprefix = prefix + \".\"\n\t}\n\treturn &loggingConn{conn, logger, prefix}\n}\n\ntype loggingConn struct {\n\tConn\n\tlogger *log.Logger\n\tprefix string\n}\n\nfunc (c *loggingConn) Close() error {\n\terr := c.Conn.Close()\n\tvar buf bytes.Buffer\n\tfmt.Fprintf(&buf, \"%sClose() -> (%v)\", c.prefix, err)\n\tc.logger.Output(2, buf.String())\n\treturn err\n}\n\nfunc (c *loggingConn) printValue(buf *bytes.Buffer, v interface{}) {\n\tconst chop = 32\n\tswitch v := v.(type) {\n\tcase []byte:\n\t\tif len(v) > chop {\n\t\t\tfmt.Fprintf(buf, \"%q...\", v[:chop])\n\t\t} else {\n\t\t\tfmt.Fprintf(buf, \"%q\", v)\n\t\t}\n\tcase string:\n\t\tif len(v) > chop {\n\t\t\tfmt.Fprintf(buf, \"%q...\", v[:chop])\n\t\t} else {\n\t\t\tfmt.Fprintf(buf, \"%q\", v)\n\t\t}\n\tcase []interface{}:\n\t\tif len(v) == 0 {\n\t\t\tbuf.WriteString(\"[]\")\n\t\t} else {\n\t\t\tsep := \"[\"\n\t\t\tfin := \"]\"\n\t\t\tif len(v) > chop {\n\t\t\t\tv = v[:chop]\n\t\t\t\tfin = \"...]\"\n\t\t\t}\n\t\t\tfor _, vv := range v {\n\t\t\t\tbuf.WriteString(sep)\n\t\t\t\tc.printValue(buf, vv)\n\t\t\t\tsep = \", \"\n\t\t\t}\n\t\t\tbuf.WriteString(fin)\n\t\t}\n\tdefault:\n\t\tfmt.Fprint(buf, v)\n\t}\n}\n\nfunc (c *loggingConn) print(method, commandName string, args []interface{}, reply interface{}, err error) {\n\tvar buf bytes.Buffer\n\tfmt.Fprintf(&buf, \"%s%s(\", c.prefix, method)\n\tif method != \"Receive\" {\n\t\tbuf.WriteString(commandName)\n\t\tfor _, arg := range args {\n\t\t\tbuf.WriteString(\", \")\n\t\t\tc.printValue(&buf, arg)\n\t\t}\n\t}\n\tbuf.WriteString(\") -> (\")\n\tif method != \"Send\" {\n\t\tc.printValue(&buf, reply)\n\t\tbuf.WriteString(\", \")\n\t}\n\tfmt.Fprintf(&buf, \"%v)\", err)\n\tc.logger.Output(3, buf.String())\n}\n\nfunc (c *loggingConn) Do(commandName string, args ...interface{}) (interface{}, error) {\n\treply, err := c.Conn.Do(commandName, args...)\n\tc.print(\"Do\", commandName, args, reply, err)\n\treturn reply, err\n}\n\nfunc (c *loggingConn) Send(commandName string, args ...interface{}) error {\n\terr := c.Conn.Send(commandName, args...)\n\tc.print(\"Send\", commandName, args, nil, err)\n\treturn err\n}\n\nfunc (c *loggingConn) Receive() (interface{}, error) {\n\treply, err := c.Conn.Receive()\n\tc.print(\"Receive\", \"\", nil, reply, err)\n\treturn reply, err\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/pool.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"bytes\"\n\t\"container/list\"\n\t\"crypto/rand\"\n\t\"crypto/sha1\"\n\t\"errors\"\n\t\"io\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/internal\"\n)\n\nvar nowFunc = time.Now // for testing\n\n// ErrPoolExhausted is returned from a pool connection method (Do, Send,\n// Receive, Flush, Err) when the maximum number of database connections in the\n// pool has been reached.\nvar ErrPoolExhausted = errors.New(\"redigo: connection pool exhausted\")\n\nvar (\n\terrPoolClosed = errors.New(\"redigo: connection pool closed\")\n\terrConnClosed = errors.New(\"redigo: connection closed\")\n)\n\n// Pool maintains a pool of connections. The application calls the Get method\n// to get a connection from the pool and the connection's Close method to\n// return the connection's resources to the pool.\n//\n// The following example shows how to use a pool in a web application. The\n// application creates a pool at application startup and makes it available to\n// request handlers using a global variable. The pool configuration used here\n// is an example, not a recommendation.\n//\n//  func newPool(server, password string) *redis.Pool {\n//      return &redis.Pool{\n//          MaxIdle: 3,\n//          IdleTimeout: 240 * time.Second,\n//          Dial: func () (redis.Conn, error) {\n//              c, err := redis.Dial(\"tcp\", server)\n//              if err != nil {\n//                  return nil, err\n//              }\n//              if _, err := c.Do(\"AUTH\", password); err != nil {\n//                  c.Close()\n//                  return nil, err\n//              }\n//              return c, err\n//          },\n//          TestOnBorrow: func(c redis.Conn, t time.Time) error {\n//              if time.Since(t) < time.Minute {\n//                  return nil\n//              }\n//              _, err := c.Do(\"PING\")\n//              return err\n//          },\n//      }\n//  }\n//\n//  var (\n//      pool *redis.Pool\n//      redisServer = flag.String(\"redisServer\", \":6379\", \"\")\n//      redisPassword = flag.String(\"redisPassword\", \"\", \"\")\n//  )\n//\n//  func main() {\n//      flag.Parse()\n//      pool = newPool(*redisServer, *redisPassword)\n//      ...\n//  }\n//\n// A request handler gets a connection from the pool and closes the connection\n// when the handler is done:\n//\n//  func serveHome(w http.ResponseWriter, r *http.Request) {\n//      conn := pool.Get()\n//      defer conn.Close()\n//      ....\n//  }\n//\ntype Pool struct {\n\n\t// Dial is an application supplied function for creating and configuring a\n\t// connection.\n\t//\n\t// The connection returned from Dial must not be in a special state\n\t// (subscribed to pubsub channel, transaction started, ...).\n\tDial func() (Conn, error)\n\n\t// TestOnBorrow is an optional application supplied function for checking\n\t// the health of an idle connection before the connection is used again by\n\t// the application. Argument t is the time that the connection was returned\n\t// to the pool. If the function returns an error, then the connection is\n\t// closed.\n\tTestOnBorrow func(c Conn, t time.Time) error\n\n\t// Maximum number of idle connections in the pool.\n\tMaxIdle int\n\n\t// Maximum number of connections allocated by the pool at a given time.\n\t// When zero, there is no limit on the number of connections in the pool.\n\tMaxActive int\n\n\t// Close connections after remaining idle for this duration. If the value\n\t// is zero, then idle connections are not closed. Applications should set\n\t// the timeout to a value less than the server's timeout.\n\tIdleTimeout time.Duration\n\n\t// If Wait is true and the pool is at the MaxActive limit, then Get() waits\n\t// for a connection to be returned to the pool before returning.\n\tWait bool\n\n\t// mu protects fields defined below.\n\tmu     sync.Mutex\n\tcond   *sync.Cond\n\tclosed bool\n\tactive int\n\n\t// Stack of idleConn with most recently used at the front.\n\tidle list.List\n}\n\ntype idleConn struct {\n\tc Conn\n\tt time.Time\n}\n\n// NewPool creates a new pool.\n//\n// Deprecated: Initialize the Pool directory as shown in the example.\nfunc NewPool(newFn func() (Conn, error), maxIdle int) *Pool {\n\treturn &Pool{Dial: newFn, MaxIdle: maxIdle}\n}\n\n// Get gets a connection. The application must close the returned connection.\n// This method always returns a valid connection so that applications can defer\n// error handling to the first use of the connection. If there is an error\n// getting an underlying connection, then the connection Err, Do, Send, Flush\n// and Receive methods return that error.\nfunc (p *Pool) Get() Conn {\n\tc, err := p.get()\n\tif err != nil {\n\t\treturn errorConnection{err}\n\t}\n\treturn &pooledConnection{p: p, c: c}\n}\n\n// ActiveCount returns the number of active connections in the pool.\nfunc (p *Pool) ActiveCount() int {\n\tp.mu.Lock()\n\tactive := p.active\n\tp.mu.Unlock()\n\treturn active\n}\n\n// Close releases the resources used by the pool.\nfunc (p *Pool) Close() error {\n\tp.mu.Lock()\n\tidle := p.idle\n\tp.idle.Init()\n\tp.closed = true\n\tp.active -= idle.Len()\n\tif p.cond != nil {\n\t\tp.cond.Broadcast()\n\t}\n\tp.mu.Unlock()\n\tfor e := idle.Front(); e != nil; e = e.Next() {\n\t\te.Value.(idleConn).c.Close()\n\t}\n\treturn nil\n}\n\n// release decrements the active count and signals waiters. The caller must\n// hold p.mu during the call.\nfunc (p *Pool) release() {\n\tp.active -= 1\n\tif p.cond != nil {\n\t\tp.cond.Signal()\n\t}\n}\n\n// get prunes stale connections and returns a connection from the idle list or\n// creates a new connection.\nfunc (p *Pool) get() (Conn, error) {\n\tp.mu.Lock()\n\n\t// Prune stale connections.\n\n\tif timeout := p.IdleTimeout; timeout > 0 {\n\t\tfor i, n := 0, p.idle.Len(); i < n; i++ {\n\t\t\te := p.idle.Back()\n\t\t\tif e == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tic := e.Value.(idleConn)\n\t\t\tif ic.t.Add(timeout).After(nowFunc()) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp.idle.Remove(e)\n\t\t\tp.release()\n\t\t\tp.mu.Unlock()\n\t\t\tic.c.Close()\n\t\t\tp.mu.Lock()\n\t\t}\n\t}\n\n\tfor {\n\n\t\t// Get idle connection.\n\n\t\tfor i, n := 0, p.idle.Len(); i < n; i++ {\n\t\t\te := p.idle.Front()\n\t\t\tif e == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tic := e.Value.(idleConn)\n\t\t\tp.idle.Remove(e)\n\t\t\ttest := p.TestOnBorrow\n\t\t\tp.mu.Unlock()\n\t\t\tif test == nil || test(ic.c, ic.t) == nil {\n\t\t\t\treturn ic.c, nil\n\t\t\t}\n\t\t\tic.c.Close()\n\t\t\tp.mu.Lock()\n\t\t\tp.release()\n\t\t}\n\n\t\t// Check for pool closed before dialing a new connection.\n\n\t\tif p.closed {\n\t\t\tp.mu.Unlock()\n\t\t\treturn nil, errors.New(\"redigo: get on closed pool\")\n\t\t}\n\n\t\t// Dial new connection if under limit.\n\n\t\tif p.MaxActive == 0 || p.active < p.MaxActive {\n\t\t\tdial := p.Dial\n\t\t\tp.active += 1\n\t\t\tp.mu.Unlock()\n\t\t\tc, err := dial()\n\t\t\tif err != nil {\n\t\t\t\tp.mu.Lock()\n\t\t\t\tp.release()\n\t\t\t\tp.mu.Unlock()\n\t\t\t\tc = nil\n\t\t\t}\n\t\t\treturn c, err\n\t\t}\n\n\t\tif !p.Wait {\n\t\t\tp.mu.Unlock()\n\t\t\treturn nil, ErrPoolExhausted\n\t\t}\n\n\t\tif p.cond == nil {\n\t\t\tp.cond = sync.NewCond(&p.mu)\n\t\t}\n\t\tp.cond.Wait()\n\t}\n}\n\nfunc (p *Pool) put(c Conn, forceClose bool) error {\n\terr := c.Err()\n\tp.mu.Lock()\n\tif !p.closed && err == nil && !forceClose {\n\t\tp.idle.PushFront(idleConn{t: nowFunc(), c: c})\n\t\tif p.idle.Len() > p.MaxIdle {\n\t\t\tc = p.idle.Remove(p.idle.Back()).(idleConn).c\n\t\t} else {\n\t\t\tc = nil\n\t\t}\n\t}\n\n\tif c == nil {\n\t\tif p.cond != nil {\n\t\t\tp.cond.Signal()\n\t\t}\n\t\tp.mu.Unlock()\n\t\treturn nil\n\t}\n\n\tp.release()\n\tp.mu.Unlock()\n\treturn c.Close()\n}\n\ntype pooledConnection struct {\n\tp     *Pool\n\tc     Conn\n\tstate int\n}\n\nvar (\n\tsentinel     []byte\n\tsentinelOnce sync.Once\n)\n\nfunc initSentinel() {\n\tp := make([]byte, 64)\n\tif _, err := rand.Read(p); err == nil {\n\t\tsentinel = p\n\t} else {\n\t\th := sha1.New()\n\t\tio.WriteString(h, \"Oops, rand failed. Use time instead.\")\n\t\tio.WriteString(h, strconv.FormatInt(time.Now().UnixNano(), 10))\n\t\tsentinel = h.Sum(nil)\n\t}\n}\n\nfunc (pc *pooledConnection) Close() error {\n\tc := pc.c\n\tif _, ok := c.(errorConnection); ok {\n\t\treturn nil\n\t}\n\tpc.c = errorConnection{errConnClosed}\n\n\tif pc.state&internal.MultiState != 0 {\n\t\tc.Send(\"DISCARD\")\n\t\tpc.state &^= (internal.MultiState | internal.WatchState)\n\t} else if pc.state&internal.WatchState != 0 {\n\t\tc.Send(\"UNWATCH\")\n\t\tpc.state &^= internal.WatchState\n\t}\n\tif pc.state&internal.SubscribeState != 0 {\n\t\tc.Send(\"UNSUBSCRIBE\")\n\t\tc.Send(\"PUNSUBSCRIBE\")\n\t\t// To detect the end of the message stream, ask the server to echo\n\t\t// a sentinel value and read until we see that value.\n\t\tsentinelOnce.Do(initSentinel)\n\t\tc.Send(\"ECHO\", sentinel)\n\t\tc.Flush()\n\t\tfor {\n\t\t\tp, err := c.Receive()\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif p, ok := p.([]byte); ok && bytes.Equal(p, sentinel) {\n\t\t\t\tpc.state &^= internal.SubscribeState\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tc.Do(\"\")\n\tpc.p.put(c, pc.state != 0)\n\treturn nil\n}\n\nfunc (pc *pooledConnection) Err() error {\n\treturn pc.c.Err()\n}\n\nfunc (pc *pooledConnection) Do(commandName string, args ...interface{}) (reply interface{}, err error) {\n\tci := internal.LookupCommandInfo(commandName)\n\tpc.state = (pc.state | ci.Set) &^ ci.Clear\n\treturn pc.c.Do(commandName, args...)\n}\n\nfunc (pc *pooledConnection) Send(commandName string, args ...interface{}) error {\n\tci := internal.LookupCommandInfo(commandName)\n\tpc.state = (pc.state | ci.Set) &^ ci.Clear\n\treturn pc.c.Send(commandName, args...)\n}\n\nfunc (pc *pooledConnection) Flush() error {\n\treturn pc.c.Flush()\n}\n\nfunc (pc *pooledConnection) Receive() (reply interface{}, err error) {\n\treturn pc.c.Receive()\n}\n\ntype errorConnection struct{ err error }\n\nfunc (ec errorConnection) Do(string, ...interface{}) (interface{}, error) { return nil, ec.err }\nfunc (ec errorConnection) Send(string, ...interface{}) error              { return ec.err }\nfunc (ec errorConnection) Err() error                                     { return ec.err }\nfunc (ec errorConnection) Close() error                                   { return ec.err }\nfunc (ec errorConnection) Flush() error                                   { return ec.err }\nfunc (ec errorConnection) Receive() (interface{}, error)                  { return nil, ec.err }\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/pool_test.go",
    "content": "// Copyright 2011 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis_test\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"reflect\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/redis\"\n)\n\ntype poolTestConn struct {\n\td   *poolDialer\n\terr error\n\tredis.Conn\n}\n\nfunc (c *poolTestConn) Close() error {\n\tc.d.mu.Lock()\n\tc.d.open -= 1\n\tc.d.mu.Unlock()\n\treturn c.Conn.Close()\n}\n\nfunc (c *poolTestConn) Err() error { return c.err }\n\nfunc (c *poolTestConn) Do(commandName string, args ...interface{}) (interface{}, error) {\n\tif commandName == \"ERR\" {\n\t\tc.err = args[0].(error)\n\t\tcommandName = \"PING\"\n\t}\n\tif commandName != \"\" {\n\t\tc.d.commands = append(c.d.commands, commandName)\n\t}\n\treturn c.Conn.Do(commandName, args...)\n}\n\nfunc (c *poolTestConn) Send(commandName string, args ...interface{}) error {\n\tc.d.commands = append(c.d.commands, commandName)\n\treturn c.Conn.Send(commandName, args...)\n}\n\ntype poolDialer struct {\n\tmu       sync.Mutex\n\tt        *testing.T\n\tdialed   int\n\topen     int\n\tcommands []string\n\tdialErr  error\n}\n\nfunc (d *poolDialer) dial() (redis.Conn, error) {\n\td.mu.Lock()\n\td.dialed += 1\n\tdialErr := d.dialErr\n\td.mu.Unlock()\n\tif dialErr != nil {\n\t\treturn nil, d.dialErr\n\t}\n\tc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\td.mu.Lock()\n\td.open += 1\n\td.mu.Unlock()\n\treturn &poolTestConn{d: d, Conn: c}, nil\n}\n\nfunc (d *poolDialer) check(message string, p *redis.Pool, dialed, open int) {\n\td.mu.Lock()\n\tif d.dialed != dialed {\n\t\td.t.Errorf(\"%s: dialed=%d, want %d\", message, d.dialed, dialed)\n\t}\n\tif d.open != open {\n\t\td.t.Errorf(\"%s: open=%d, want %d\", message, d.open, open)\n\t}\n\tif active := p.ActiveCount(); active != open {\n\t\td.t.Errorf(\"%s: active=%d, want %d\", message, active, open)\n\t}\n\td.mu.Unlock()\n}\n\nfunc TestPoolReuse(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle: 2,\n\t\tDial:    d.dial,\n\t}\n\n\tfor i := 0; i < 10; i++ {\n\t\tc1 := p.Get()\n\t\tc1.Do(\"PING\")\n\t\tc2 := p.Get()\n\t\tc2.Do(\"PING\")\n\t\tc1.Close()\n\t\tc2.Close()\n\t}\n\n\td.check(\"before close\", p, 2, 2)\n\tp.Close()\n\td.check(\"after close\", p, 2, 0)\n}\n\nfunc TestPoolMaxIdle(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle: 2,\n\t\tDial:    d.dial,\n\t}\n\tdefer p.Close()\n\n\tfor i := 0; i < 10; i++ {\n\t\tc1 := p.Get()\n\t\tc1.Do(\"PING\")\n\t\tc2 := p.Get()\n\t\tc2.Do(\"PING\")\n\t\tc3 := p.Get()\n\t\tc3.Do(\"PING\")\n\t\tc1.Close()\n\t\tc2.Close()\n\t\tc3.Close()\n\t}\n\td.check(\"before close\", p, 12, 2)\n\tp.Close()\n\td.check(\"after close\", p, 12, 0)\n}\n\nfunc TestPoolError(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle: 2,\n\t\tDial:    d.dial,\n\t}\n\tdefer p.Close()\n\n\tc := p.Get()\n\tc.Do(\"ERR\", io.EOF)\n\tif c.Err() == nil {\n\t\tt.Errorf(\"expected c.Err() != nil\")\n\t}\n\tc.Close()\n\n\tc = p.Get()\n\tc.Do(\"ERR\", io.EOF)\n\tc.Close()\n\n\td.check(\".\", p, 2, 0)\n}\n\nfunc TestPoolClose(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle: 2,\n\t\tDial:    d.dial,\n\t}\n\tdefer p.Close()\n\n\tc1 := p.Get()\n\tc1.Do(\"PING\")\n\tc2 := p.Get()\n\tc2.Do(\"PING\")\n\tc3 := p.Get()\n\tc3.Do(\"PING\")\n\n\tc1.Close()\n\tif _, err := c1.Do(\"PING\"); err == nil {\n\t\tt.Errorf(\"expected error after connection closed\")\n\t}\n\n\tc2.Close()\n\tc2.Close()\n\n\tp.Close()\n\n\td.check(\"after pool close\", p, 3, 1)\n\n\tif _, err := c1.Do(\"PING\"); err == nil {\n\t\tt.Errorf(\"expected error after connection and pool closed\")\n\t}\n\n\tc3.Close()\n\n\td.check(\"after conn close\", p, 3, 0)\n\n\tc1 = p.Get()\n\tif _, err := c1.Do(\"PING\"); err == nil {\n\t\tt.Errorf(\"expected error after pool closed\")\n\t}\n}\n\nfunc TestPoolTimeout(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle:     2,\n\t\tIdleTimeout: 300 * time.Second,\n\t\tDial:        d.dial,\n\t}\n\tdefer p.Close()\n\n\tnow := time.Now()\n\tredis.SetNowFunc(func() time.Time { return now })\n\tdefer redis.SetNowFunc(time.Now)\n\n\tc := p.Get()\n\tc.Do(\"PING\")\n\tc.Close()\n\n\td.check(\"1\", p, 1, 1)\n\n\tnow = now.Add(p.IdleTimeout)\n\n\tc = p.Get()\n\tc.Do(\"PING\")\n\tc.Close()\n\n\td.check(\"2\", p, 2, 1)\n}\n\nfunc TestPoolConcurrenSendReceive(t *testing.T) {\n\tp := &redis.Pool{\n\t\tDial: redis.DialDefaultServer,\n\t}\n\tdefer p.Close()\n\n\tc := p.Get()\n\tdone := make(chan error, 1)\n\tgo func() {\n\t\t_, err := c.Receive()\n\t\tdone <- err\n\t}()\n\tc.Send(\"PING\")\n\tc.Flush()\n\terr := <-done\n\tif err != nil {\n\t\tt.Fatalf(\"Receive() returned error %v\", err)\n\t}\n\t_, err = c.Do(\"\")\n\tif err != nil {\n\t\tt.Fatalf(\"Do() returned error %v\", err)\n\t}\n\tc.Close()\n}\n\nfunc TestPoolBorrowCheck(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle:      2,\n\t\tDial:         d.dial,\n\t\tTestOnBorrow: func(redis.Conn, time.Time) error { return redis.Error(\"BLAH\") },\n\t}\n\tdefer p.Close()\n\n\tfor i := 0; i < 10; i++ {\n\t\tc := p.Get()\n\t\tc.Do(\"PING\")\n\t\tc.Close()\n\t}\n\td.check(\"1\", p, 10, 1)\n}\n\nfunc TestPoolMaxActive(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle:   2,\n\t\tMaxActive: 2,\n\t\tDial:      d.dial,\n\t}\n\tdefer p.Close()\n\n\tc1 := p.Get()\n\tc1.Do(\"PING\")\n\tc2 := p.Get()\n\tc2.Do(\"PING\")\n\n\td.check(\"1\", p, 2, 2)\n\n\tc3 := p.Get()\n\tif _, err := c3.Do(\"PING\"); err != redis.ErrPoolExhausted {\n\t\tt.Errorf(\"expected pool exhausted\")\n\t}\n\n\tc3.Close()\n\td.check(\"2\", p, 2, 2)\n\tc2.Close()\n\td.check(\"3\", p, 2, 2)\n\n\tc3 = p.Get()\n\tif _, err := c3.Do(\"PING\"); err != nil {\n\t\tt.Errorf(\"expected good channel, err=%v\", err)\n\t}\n\tc3.Close()\n\n\td.check(\"4\", p, 2, 2)\n}\n\nfunc TestPoolMonitorCleanup(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle:   2,\n\t\tMaxActive: 2,\n\t\tDial:      d.dial,\n\t}\n\tdefer p.Close()\n\n\tc := p.Get()\n\tc.Send(\"MONITOR\")\n\tc.Close()\n\n\td.check(\"\", p, 1, 0)\n}\n\nfunc TestPoolPubSubCleanup(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle:   2,\n\t\tMaxActive: 2,\n\t\tDial:      d.dial,\n\t}\n\tdefer p.Close()\n\n\tc := p.Get()\n\tc.Send(\"SUBSCRIBE\", \"x\")\n\tc.Close()\n\n\twant := []string{\"SUBSCRIBE\", \"UNSUBSCRIBE\", \"PUNSUBSCRIBE\", \"ECHO\"}\n\tif !reflect.DeepEqual(d.commands, want) {\n\t\tt.Errorf(\"got commands %v, want %v\", d.commands, want)\n\t}\n\td.commands = nil\n\n\tc = p.Get()\n\tc.Send(\"PSUBSCRIBE\", \"x*\")\n\tc.Close()\n\n\twant = []string{\"PSUBSCRIBE\", \"UNSUBSCRIBE\", \"PUNSUBSCRIBE\", \"ECHO\"}\n\tif !reflect.DeepEqual(d.commands, want) {\n\t\tt.Errorf(\"got commands %v, want %v\", d.commands, want)\n\t}\n\td.commands = nil\n}\n\nfunc TestPoolTransactionCleanup(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle:   2,\n\t\tMaxActive: 2,\n\t\tDial:      d.dial,\n\t}\n\tdefer p.Close()\n\n\tc := p.Get()\n\tc.Do(\"WATCH\", \"key\")\n\tc.Do(\"PING\")\n\tc.Close()\n\n\twant := []string{\"WATCH\", \"PING\", \"UNWATCH\"}\n\tif !reflect.DeepEqual(d.commands, want) {\n\t\tt.Errorf(\"got commands %v, want %v\", d.commands, want)\n\t}\n\td.commands = nil\n\n\tc = p.Get()\n\tc.Do(\"WATCH\", \"key\")\n\tc.Do(\"UNWATCH\")\n\tc.Do(\"PING\")\n\tc.Close()\n\n\twant = []string{\"WATCH\", \"UNWATCH\", \"PING\"}\n\tif !reflect.DeepEqual(d.commands, want) {\n\t\tt.Errorf(\"got commands %v, want %v\", d.commands, want)\n\t}\n\td.commands = nil\n\n\tc = p.Get()\n\tc.Do(\"WATCH\", \"key\")\n\tc.Do(\"MULTI\")\n\tc.Do(\"PING\")\n\tc.Close()\n\n\twant = []string{\"WATCH\", \"MULTI\", \"PING\", \"DISCARD\"}\n\tif !reflect.DeepEqual(d.commands, want) {\n\t\tt.Errorf(\"got commands %v, want %v\", d.commands, want)\n\t}\n\td.commands = nil\n\n\tc = p.Get()\n\tc.Do(\"WATCH\", \"key\")\n\tc.Do(\"MULTI\")\n\tc.Do(\"DISCARD\")\n\tc.Do(\"PING\")\n\tc.Close()\n\n\twant = []string{\"WATCH\", \"MULTI\", \"DISCARD\", \"PING\"}\n\tif !reflect.DeepEqual(d.commands, want) {\n\t\tt.Errorf(\"got commands %v, want %v\", d.commands, want)\n\t}\n\td.commands = nil\n\n\tc = p.Get()\n\tc.Do(\"WATCH\", \"key\")\n\tc.Do(\"MULTI\")\n\tc.Do(\"EXEC\")\n\tc.Do(\"PING\")\n\tc.Close()\n\n\twant = []string{\"WATCH\", \"MULTI\", \"EXEC\", \"PING\"}\n\tif !reflect.DeepEqual(d.commands, want) {\n\t\tt.Errorf(\"got commands %v, want %v\", d.commands, want)\n\t}\n\td.commands = nil\n}\n\nfunc startGoroutines(p *redis.Pool, cmd string, args ...interface{}) chan error {\n\terrs := make(chan error, 10)\n\tfor i := 0; i < cap(errs); i++ {\n\t\tgo func() {\n\t\t\tc := p.Get()\n\t\t\t_, err := c.Do(cmd, args...)\n\t\t\terrs <- err\n\t\t\tc.Close()\n\t\t}()\n\t}\n\n\t// Wait for goroutines to block.\n\ttime.Sleep(time.Second / 4)\n\n\treturn errs\n}\n\nfunc TestWaitPool(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle:   1,\n\t\tMaxActive: 1,\n\t\tDial:      d.dial,\n\t\tWait:      true,\n\t}\n\tdefer p.Close()\n\n\tc := p.Get()\n\terrs := startGoroutines(p, \"PING\")\n\td.check(\"before close\", p, 1, 1)\n\tc.Close()\n\ttimeout := time.After(2 * time.Second)\n\tfor i := 0; i < cap(errs); i++ {\n\t\tselect {\n\t\tcase err := <-errs:\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\tcase <-timeout:\n\t\t\tt.Fatalf(\"timeout waiting for blocked goroutine %d\", i)\n\t\t}\n\t}\n\td.check(\"done\", p, 1, 1)\n}\n\nfunc TestWaitPoolClose(t *testing.T) {\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle:   1,\n\t\tMaxActive: 1,\n\t\tDial:      d.dial,\n\t\tWait:      true,\n\t}\n\tdefer p.Close()\n\n\tc := p.Get()\n\tif _, err := c.Do(\"PING\"); err != nil {\n\t\tt.Fatal(err)\n\t}\n\terrs := startGoroutines(p, \"PING\")\n\td.check(\"before close\", p, 1, 1)\n\tp.Close()\n\ttimeout := time.After(2 * time.Second)\n\tfor i := 0; i < cap(errs); i++ {\n\t\tselect {\n\t\tcase err := <-errs:\n\t\t\tswitch err {\n\t\t\tcase nil:\n\t\t\t\tt.Fatal(\"blocked goroutine did not get error\")\n\t\t\tcase redis.ErrPoolExhausted:\n\t\t\t\tt.Fatal(\"blocked goroutine got pool exhausted error\")\n\t\t\t}\n\t\tcase <-timeout:\n\t\t\tt.Fatal(\"timeout waiting for blocked goroutine\")\n\t\t}\n\t}\n\tc.Close()\n\td.check(\"done\", p, 1, 0)\n}\n\nfunc TestWaitPoolCommandError(t *testing.T) {\n\ttestErr := errors.New(\"test\")\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle:   1,\n\t\tMaxActive: 1,\n\t\tDial:      d.dial,\n\t\tWait:      true,\n\t}\n\tdefer p.Close()\n\n\tc := p.Get()\n\terrs := startGoroutines(p, \"ERR\", testErr)\n\td.check(\"before close\", p, 1, 1)\n\tc.Close()\n\ttimeout := time.After(2 * time.Second)\n\tfor i := 0; i < cap(errs); i++ {\n\t\tselect {\n\t\tcase err := <-errs:\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\tcase <-timeout:\n\t\t\tt.Fatalf(\"timeout waiting for blocked goroutine %d\", i)\n\t\t}\n\t}\n\td.check(\"done\", p, cap(errs), 0)\n}\n\nfunc TestWaitPoolDialError(t *testing.T) {\n\ttestErr := errors.New(\"test\")\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle:   1,\n\t\tMaxActive: 1,\n\t\tDial:      d.dial,\n\t\tWait:      true,\n\t}\n\tdefer p.Close()\n\n\tc := p.Get()\n\terrs := startGoroutines(p, \"ERR\", testErr)\n\td.check(\"before close\", p, 1, 1)\n\n\td.dialErr = errors.New(\"dial\")\n\tc.Close()\n\n\tnilCount := 0\n\terrCount := 0\n\ttimeout := time.After(2 * time.Second)\n\tfor i := 0; i < cap(errs); i++ {\n\t\tselect {\n\t\tcase err := <-errs:\n\t\t\tswitch err {\n\t\t\tcase nil:\n\t\t\t\tnilCount++\n\t\t\tcase d.dialErr:\n\t\t\t\terrCount++\n\t\t\tdefault:\n\t\t\t\tt.Fatalf(\"expected dial error or nil, got %v\", err)\n\t\t\t}\n\t\tcase <-timeout:\n\t\t\tt.Fatalf(\"timeout waiting for blocked goroutine %d\", i)\n\t\t}\n\t}\n\tif nilCount != 1 {\n\t\tt.Errorf(\"expected one nil error, got %d\", nilCount)\n\t}\n\tif errCount != cap(errs)-1 {\n\t\tt.Errorf(\"expected %d dial errors, got %d\", cap(errs)-1, errCount)\n\t}\n\td.check(\"done\", p, cap(errs), 0)\n}\n\n// Borrowing requires us to iterate over the idle connections, unlock the pool,\n// and perform a blocking operation to check the connection still works. If\n// TestOnBorrow fails, we must reacquire the lock and continue iteration. This\n// test ensures that iteration will work correctly if multiple threads are\n// iterating simultaneously.\nfunc TestLocking_TestOnBorrowFails_PoolDoesntCrash(t *testing.T) {\n\tconst count = 100\n\n\t// First we'll Create a pool where the pilfering of idle connections fails.\n\td := poolDialer{t: t}\n\tp := &redis.Pool{\n\t\tMaxIdle:   count,\n\t\tMaxActive: count,\n\t\tDial:      d.dial,\n\t\tTestOnBorrow: func(c redis.Conn, t time.Time) error {\n\t\t\treturn errors.New(\"No way back into the real world.\")\n\t\t},\n\t}\n\tdefer p.Close()\n\n\t// Fill the pool with idle connections.\n\tconns := make([]redis.Conn, count)\n\tfor i := range conns {\n\t\tconns[i] = p.Get()\n\t}\n\tfor i := range conns {\n\t\tconns[i].Close()\n\t}\n\n\t// Spawn a bunch of goroutines to thrash the pool.\n\tvar wg sync.WaitGroup\n\twg.Add(count)\n\tfor i := 0; i < count; i++ {\n\t\tgo func() {\n\t\t\tc := p.Get()\n\t\t\tif c.Err() != nil {\n\t\t\t\tt.Errorf(\"pool get failed: %v\", c.Err())\n\t\t\t}\n\t\t\tc.Close()\n\t\t\twg.Done()\n\t\t}()\n\t}\n\twg.Wait()\n\tif d.dialed != count*2 {\n\t\tt.Errorf(\"Expected %d dials, got %d\", count*2, d.dialed)\n\t}\n}\n\nfunc BenchmarkPoolGet(b *testing.B) {\n\tb.StopTimer()\n\tp := redis.Pool{Dial: redis.DialDefaultServer, MaxIdle: 2}\n\tc := p.Get()\n\tif err := c.Err(); err != nil {\n\t\tb.Fatal(err)\n\t}\n\tc.Close()\n\tdefer p.Close()\n\tb.StartTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\tc = p.Get()\n\t\tc.Close()\n\t}\n}\n\nfunc BenchmarkPoolGetErr(b *testing.B) {\n\tb.StopTimer()\n\tp := redis.Pool{Dial: redis.DialDefaultServer, MaxIdle: 2}\n\tc := p.Get()\n\tif err := c.Err(); err != nil {\n\t\tb.Fatal(err)\n\t}\n\tc.Close()\n\tdefer p.Close()\n\tb.StartTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\tc = p.Get()\n\t\tif err := c.Err(); err != nil {\n\t\t\tb.Fatal(err)\n\t\t}\n\t\tc.Close()\n\t}\n}\n\nfunc BenchmarkPoolGetPing(b *testing.B) {\n\tb.StopTimer()\n\tp := redis.Pool{Dial: redis.DialDefaultServer, MaxIdle: 2}\n\tc := p.Get()\n\tif err := c.Err(); err != nil {\n\t\tb.Fatal(err)\n\t}\n\tc.Close()\n\tdefer p.Close()\n\tb.StartTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\tc = p.Get()\n\t\tif _, err := c.Do(\"PING\"); err != nil {\n\t\t\tb.Fatal(err)\n\t\t}\n\t\tc.Close()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/pubsub.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport \"errors\"\n\n// Subscription represents a subscribe or unsubscribe notification.\ntype Subscription struct {\n\n\t// Kind is \"subscribe\", \"unsubscribe\", \"psubscribe\" or \"punsubscribe\"\n\tKind string\n\n\t// The channel that was changed.\n\tChannel string\n\n\t// The current number of subscriptions for connection.\n\tCount int\n}\n\n// Message represents a message notification.\ntype Message struct {\n\n\t// The originating channel.\n\tChannel string\n\n\t// The message data.\n\tData []byte\n}\n\n// PMessage represents a pmessage notification.\ntype PMessage struct {\n\n\t// The matched pattern.\n\tPattern string\n\n\t// The originating channel.\n\tChannel string\n\n\t// The message data.\n\tData []byte\n}\n\n// Pong represents a pubsub pong notification.\ntype Pong struct {\n\tData string\n}\n\n// PubSubConn wraps a Conn with convenience methods for subscribers.\ntype PubSubConn struct {\n\tConn Conn\n}\n\n// Close closes the connection.\nfunc (c PubSubConn) Close() error {\n\treturn c.Conn.Close()\n}\n\n// Subscribe subscribes the connection to the specified channels.\nfunc (c PubSubConn) Subscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"SUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// PSubscribe subscribes the connection to the given patterns.\nfunc (c PubSubConn) PSubscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"PSUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// Unsubscribe unsubscribes the connection from the given channels, or from all\n// of them if none is given.\nfunc (c PubSubConn) Unsubscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"UNSUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// PUnsubscribe unsubscribes the connection from the given patterns, or from all\n// of them if none is given.\nfunc (c PubSubConn) PUnsubscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"PUNSUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// Ping sends a PING to the server with the specified data.\nfunc (c PubSubConn) Ping(data string) error {\n\tc.Conn.Send(\"PING\", data)\n\treturn c.Conn.Flush()\n}\n\n// Receive returns a pushed message as a Subscription, Message, PMessage, Pong\n// or error. The return value is intended to be used directly in a type switch\n// as illustrated in the PubSubConn example.\nfunc (c PubSubConn) Receive() interface{} {\n\treply, err := Values(c.Conn.Receive())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar kind string\n\treply, err = Scan(reply, &kind)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch kind {\n\tcase \"message\":\n\t\tvar m Message\n\t\tif _, err := Scan(reply, &m.Channel, &m.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn m\n\tcase \"pmessage\":\n\t\tvar pm PMessage\n\t\tif _, err := Scan(reply, &pm.Pattern, &pm.Channel, &pm.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn pm\n\tcase \"subscribe\", \"psubscribe\", \"unsubscribe\", \"punsubscribe\":\n\t\ts := Subscription{Kind: kind}\n\t\tif _, err := Scan(reply, &s.Channel, &s.Count); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn s\n\tcase \"pong\":\n\t\tvar p Pong\n\t\tif _, err := Scan(reply, &p.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn p\n\t}\n\treturn errors.New(\"redigo: unknown pubsub notification\")\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/pubsub_test.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis_test\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"sync\"\n\t\"testing\"\n\n\t\"github.com/garyburd/redigo/redis\"\n)\n\nfunc publish(channel, value interface{}) {\n\tc, err := dial()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tdefer c.Close()\n\tc.Do(\"PUBLISH\", channel, value)\n}\n\n// Applications can receive pushed messages from one goroutine and manage subscriptions from another goroutine.\nfunc ExamplePubSubConn() {\n\tc, err := dial()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tdefer c.Close()\n\tvar wg sync.WaitGroup\n\twg.Add(2)\n\n\tpsc := redis.PubSubConn{Conn: c}\n\n\t// This goroutine receives and prints pushed notifications from the server.\n\t// The goroutine exits when the connection is unsubscribed from all\n\t// channels or there is an error.\n\tgo func() {\n\t\tdefer wg.Done()\n\t\tfor {\n\t\t\tswitch n := psc.Receive().(type) {\n\t\t\tcase redis.Message:\n\t\t\t\tfmt.Printf(\"Message: %s %s\\n\", n.Channel, n.Data)\n\t\t\tcase redis.PMessage:\n\t\t\t\tfmt.Printf(\"PMessage: %s %s %s\\n\", n.Pattern, n.Channel, n.Data)\n\t\t\tcase redis.Subscription:\n\t\t\t\tfmt.Printf(\"Subscription: %s %s %d\\n\", n.Kind, n.Channel, n.Count)\n\t\t\t\tif n.Count == 0 {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\tcase error:\n\t\t\t\tfmt.Printf(\"error: %v\\n\", n)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n\n\t// This goroutine manages subscriptions for the connection.\n\tgo func() {\n\t\tdefer wg.Done()\n\n\t\tpsc.Subscribe(\"example\")\n\t\tpsc.PSubscribe(\"p*\")\n\n\t\t// The following function calls publish a message using another\n\t\t// connection to the Redis server.\n\t\tpublish(\"example\", \"hello\")\n\t\tpublish(\"example\", \"world\")\n\t\tpublish(\"pexample\", \"foo\")\n\t\tpublish(\"pexample\", \"bar\")\n\n\t\t// Unsubscribe from all connections. This will cause the receiving\n\t\t// goroutine to exit.\n\t\tpsc.Unsubscribe()\n\t\tpsc.PUnsubscribe()\n\t}()\n\n\twg.Wait()\n\n\t// Output:\n\t// Subscription: subscribe example 1\n\t// Subscription: psubscribe p* 2\n\t// Message: example hello\n\t// Message: example world\n\t// PMessage: p* pexample foo\n\t// PMessage: p* pexample bar\n\t// Subscription: unsubscribe example 1\n\t// Subscription: punsubscribe p* 0\n}\n\nfunc expectPushed(t *testing.T, c redis.PubSubConn, message string, expected interface{}) {\n\tactual := c.Receive()\n\tif !reflect.DeepEqual(actual, expected) {\n\t\tt.Errorf(\"%s = %v, want %v\", message, actual, expected)\n\t}\n}\n\nfunc TestPushed(t *testing.T) {\n\tpc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\tt.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer pc.Close()\n\n\tsc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\tt.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer sc.Close()\n\n\tc := redis.PubSubConn{Conn: sc}\n\n\tc.Subscribe(\"c1\")\n\texpectPushed(t, c, \"Subscribe(c1)\", redis.Subscription{Kind: \"subscribe\", Channel: \"c1\", Count: 1})\n\tc.Subscribe(\"c2\")\n\texpectPushed(t, c, \"Subscribe(c2)\", redis.Subscription{Kind: \"subscribe\", Channel: \"c2\", Count: 2})\n\tc.PSubscribe(\"p1\")\n\texpectPushed(t, c, \"PSubscribe(p1)\", redis.Subscription{Kind: \"psubscribe\", Channel: \"p1\", Count: 3})\n\tc.PSubscribe(\"p2\")\n\texpectPushed(t, c, \"PSubscribe(p2)\", redis.Subscription{Kind: \"psubscribe\", Channel: \"p2\", Count: 4})\n\tc.PUnsubscribe()\n\texpectPushed(t, c, \"Punsubscribe(p1)\", redis.Subscription{Kind: \"punsubscribe\", Channel: \"p1\", Count: 3})\n\texpectPushed(t, c, \"Punsubscribe()\", redis.Subscription{Kind: \"punsubscribe\", Channel: \"p2\", Count: 2})\n\n\tpc.Do(\"PUBLISH\", \"c1\", \"hello\")\n\texpectPushed(t, c, \"PUBLISH c1 hello\", redis.Message{Channel: \"c1\", Data: []byte(\"hello\")})\n\n\tc.Ping(\"hello\")\n\texpectPushed(t, c, `Ping(\"hello\")`, redis.Pong{Data: \"hello\"})\n\n\tc.Conn.Send(\"PING\")\n\tc.Conn.Flush()\n\texpectPushed(t, c, `Send(\"PING\")`, redis.Pong{})\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/redis.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\n// Error represents an error returned in a command reply.\ntype Error string\n\nfunc (err Error) Error() string { return string(err) }\n\n// Conn represents a connection to a Redis server.\ntype Conn interface {\n\t// Close closes the connection.\n\tClose() error\n\n\t// Err returns a non-nil value if the connection is broken. The returned\n\t// value is either the first non-nil value returned from the underlying\n\t// network connection or a protocol parsing error. Applications should\n\t// close broken connections.\n\tErr() error\n\n\t// Do sends a command to the server and returns the received reply.\n\tDo(commandName string, args ...interface{}) (reply interface{}, err error)\n\n\t// Send writes the command to the client's output buffer.\n\tSend(commandName string, args ...interface{}) error\n\n\t// Flush flushes the output buffer to the Redis server.\n\tFlush() error\n\n\t// Receive receives a single reply from the Redis server\n\tReceive() (reply interface{}, err error)\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/reply.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n)\n\n// ErrNil indicates that a reply value is nil.\nvar ErrNil = errors.New(\"redigo: nil returned\")\n\n// Int is a helper that converts a command reply to an integer. If err is not\n// equal to nil, then Int returns 0, err. Otherwise, Int converts the\n// reply to an int as follows:\n//\n//  Reply type    Result\n//  integer       int(reply), nil\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Int(reply interface{}, err error) (int, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\tx := int(reply)\n\t\tif int64(x) != reply {\n\t\t\treturn 0, strconv.ErrRange\n\t\t}\n\t\treturn x, nil\n\tcase []byte:\n\t\tn, err := strconv.ParseInt(string(reply), 10, 0)\n\t\treturn int(n), err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Int, got type %T\", reply)\n}\n\n// Int64 is a helper that converts a command reply to 64 bit integer. If err is\n// not equal to nil, then Int returns 0, err. Otherwise, Int64 converts the\n// reply to an int64 as follows:\n//\n//  Reply type    Result\n//  integer       reply, nil\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Int64(reply interface{}, err error) (int64, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\treturn reply, nil\n\tcase []byte:\n\t\tn, err := strconv.ParseInt(string(reply), 10, 64)\n\t\treturn n, err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Int64, got type %T\", reply)\n}\n\nvar errNegativeInt = errors.New(\"redigo: unexpected value for Uint64\")\n\n// Uint64 is a helper that converts a command reply to 64 bit integer. If err is\n// not equal to nil, then Int returns 0, err. Otherwise, Int64 converts the\n// reply to an int64 as follows:\n//\n//  Reply type    Result\n//  integer       reply, nil\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Uint64(reply interface{}, err error) (uint64, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\tif reply < 0 {\n\t\t\treturn 0, errNegativeInt\n\t\t}\n\t\treturn uint64(reply), nil\n\tcase []byte:\n\t\tn, err := strconv.ParseUint(string(reply), 10, 64)\n\t\treturn n, err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Uint64, got type %T\", reply)\n}\n\n// Float64 is a helper that converts a command reply to 64 bit float. If err is\n// not equal to nil, then Float64 returns 0, err. Otherwise, Float64 converts\n// the reply to an int as follows:\n//\n//  Reply type    Result\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Float64(reply interface{}, err error) (float64, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []byte:\n\t\tn, err := strconv.ParseFloat(string(reply), 64)\n\t\treturn n, err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Float64, got type %T\", reply)\n}\n\n// String is a helper that converts a command reply to a string. If err is not\n// equal to nil, then String returns \"\", err. Otherwise String converts the\n// reply to a string as follows:\n//\n//  Reply type      Result\n//  bulk string     string(reply), nil\n//  simple string   reply, nil\n//  nil             \"\",  ErrNil\n//  other           \"\",  error\nfunc String(reply interface{}, err error) (string, error) {\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []byte:\n\t\treturn string(reply), nil\n\tcase string:\n\t\treturn reply, nil\n\tcase nil:\n\t\treturn \"\", ErrNil\n\tcase Error:\n\t\treturn \"\", reply\n\t}\n\treturn \"\", fmt.Errorf(\"redigo: unexpected type for String, got type %T\", reply)\n}\n\n// Bytes is a helper that converts a command reply to a slice of bytes. If err\n// is not equal to nil, then Bytes returns nil, err. Otherwise Bytes converts\n// the reply to a slice of bytes as follows:\n//\n//  Reply type      Result\n//  bulk string     reply, nil\n//  simple string   []byte(reply), nil\n//  nil             nil, ErrNil\n//  other           nil, error\nfunc Bytes(reply interface{}, err error) ([]byte, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []byte:\n\t\treturn reply, nil\n\tcase string:\n\t\treturn []byte(reply), nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for Bytes, got type %T\", reply)\n}\n\n// Bool is a helper that converts a command reply to a boolean. If err is not\n// equal to nil, then Bool returns false, err. Otherwise Bool converts the\n// reply to boolean as follows:\n//\n//  Reply type      Result\n//  integer         value != 0, nil\n//  bulk string     strconv.ParseBool(reply)\n//  nil             false, ErrNil\n//  other           false, error\nfunc Bool(reply interface{}, err error) (bool, error) {\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\treturn reply != 0, nil\n\tcase []byte:\n\t\treturn strconv.ParseBool(string(reply))\n\tcase nil:\n\t\treturn false, ErrNil\n\tcase Error:\n\t\treturn false, reply\n\t}\n\treturn false, fmt.Errorf(\"redigo: unexpected type for Bool, got type %T\", reply)\n}\n\n// MultiBulk is a helper that converts an array command reply to a []interface{}.\n//\n// Deprecated: Use Values instead.\nfunc MultiBulk(reply interface{}, err error) ([]interface{}, error) { return Values(reply, err) }\n\n// Values is a helper that converts an array command reply to a []interface{}.\n// If err is not equal to nil, then Values returns nil, err. Otherwise, Values\n// converts the reply as follows:\n//\n//  Reply type      Result\n//  array           reply, nil\n//  nil             nil, ErrNil\n//  other           nil, error\nfunc Values(reply interface{}, err error) ([]interface{}, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []interface{}:\n\t\treturn reply, nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for Values, got type %T\", reply)\n}\n\n// Strings is a helper that converts an array command reply to a []string. If\n// err is not equal to nil, then Strings returns nil, err. Nil array items are\n// converted to \"\" in the output slice. Strings returns an error if an array\n// item is not a bulk string or nil.\nfunc Strings(reply interface{}, err error) ([]string, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []interface{}:\n\t\tresult := make([]string, len(reply))\n\t\tfor i := range reply {\n\t\t\tif reply[i] == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tp, ok := reply[i].([]byte)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"redigo: unexpected element type for Strings, got type %T\", reply[i])\n\t\t\t}\n\t\t\tresult[i] = string(p)\n\t\t}\n\t\treturn result, nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for Strings, got type %T\", reply)\n}\n\n// ByteSlices is a helper that converts an array command reply to a [][]byte.\n// If err is not equal to nil, then ByteSlices returns nil, err. Nil array\n// items are stay nil. ByteSlices returns an error if an array item is not a\n// bulk string or nil.\nfunc ByteSlices(reply interface{}, err error) ([][]byte, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []interface{}:\n\t\tresult := make([][]byte, len(reply))\n\t\tfor i := range reply {\n\t\t\tif reply[i] == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tp, ok := reply[i].([]byte)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"redigo: unexpected element type for ByteSlices, got type %T\", reply[i])\n\t\t\t}\n\t\t\tresult[i] = p\n\t\t}\n\t\treturn result, nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for ByteSlices, got type %T\", reply)\n}\n\n// Ints is a helper that converts an array command reply to a []int. If\n// err is not equal to nil, then Ints returns nil, err.\nfunc Ints(reply interface{}, err error) ([]int, error) {\n\tvar ints []int\n\tvalues, err := Values(reply, err)\n\tif err != nil {\n\t\treturn ints, err\n\t}\n\tif err := ScanSlice(values, &ints); err != nil {\n\t\treturn ints, err\n\t}\n\treturn ints, nil\n}\n\n// StringMap is a helper that converts an array of strings (alternating key, value)\n// into a map[string]string. The HGETALL and CONFIG GET commands return replies in this format.\n// Requires an even number of values in result.\nfunc StringMap(result interface{}, err error) (map[string]string, error) {\n\tvalues, err := Values(result, err)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(values)%2 != 0 {\n\t\treturn nil, errors.New(\"redigo: StringMap expects even number of values result\")\n\t}\n\tm := make(map[string]string, len(values)/2)\n\tfor i := 0; i < len(values); i += 2 {\n\t\tkey, okKey := values[i].([]byte)\n\t\tvalue, okValue := values[i+1].([]byte)\n\t\tif !okKey || !okValue {\n\t\t\treturn nil, errors.New(\"redigo: ScanMap key not a bulk string value\")\n\t\t}\n\t\tm[string(key)] = string(value)\n\t}\n\treturn m, nil\n}\n\n// IntMap is a helper that converts an array of strings (alternating key, value)\n// into a map[string]int. The HGETALL commands return replies in this format.\n// Requires an even number of values in result.\nfunc IntMap(result interface{}, err error) (map[string]int, error) {\n\tvalues, err := Values(result, err)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(values)%2 != 0 {\n\t\treturn nil, errors.New(\"redigo: IntMap expects even number of values result\")\n\t}\n\tm := make(map[string]int, len(values)/2)\n\tfor i := 0; i < len(values); i += 2 {\n\t\tkey, ok := values[i].([]byte)\n\t\tif !ok {\n\t\t\treturn nil, errors.New(\"redigo: ScanMap key not a bulk string value\")\n\t\t}\n\t\tvalue, err := Int(values[i+1], nil)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm[string(key)] = value\n\t}\n\treturn m, nil\n}\n\n// Int64Map is a helper that converts an array of strings (alternating key, value)\n// into a map[string]int64. The HGETALL commands return replies in this format.\n// Requires an even number of values in result.\nfunc Int64Map(result interface{}, err error) (map[string]int64, error) {\n\tvalues, err := Values(result, err)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(values)%2 != 0 {\n\t\treturn nil, errors.New(\"redigo: Int64Map expects even number of values result\")\n\t}\n\tm := make(map[string]int64, len(values)/2)\n\tfor i := 0; i < len(values); i += 2 {\n\t\tkey, ok := values[i].([]byte)\n\t\tif !ok {\n\t\t\treturn nil, errors.New(\"redigo: ScanMap key not a bulk string value\")\n\t\t}\n\t\tvalue, err := Int64(values[i+1], nil)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm[string(key)] = value\n\t}\n\treturn m, nil\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/reply_test.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis_test\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/garyburd/redigo/redis\"\n)\n\ntype valueError struct {\n\tv   interface{}\n\terr error\n}\n\nfunc ve(v interface{}, err error) valueError {\n\treturn valueError{v, err}\n}\n\nvar replyTests = []struct {\n\tname     interface{}\n\tactual   valueError\n\texpected valueError\n}{\n\t{\n\t\t\"ints([v1, v2])\",\n\t\tve(redis.Ints([]interface{}{[]byte(\"4\"), []byte(\"5\")}, nil)),\n\t\tve([]int{4, 5}, nil),\n\t},\n\t{\n\t\t\"ints(nil)\",\n\t\tve(redis.Ints(nil, nil)),\n\t\tve([]int(nil), redis.ErrNil),\n\t},\n\t{\n\t\t\"strings([v1, v2])\",\n\t\tve(redis.Strings([]interface{}{[]byte(\"v1\"), []byte(\"v2\")}, nil)),\n\t\tve([]string{\"v1\", \"v2\"}, nil),\n\t},\n\t{\n\t\t\"strings(nil)\",\n\t\tve(redis.Strings(nil, nil)),\n\t\tve([]string(nil), redis.ErrNil),\n\t},\n\t{\n\t\t\"byteslices([v1, v2])\",\n\t\tve(redis.ByteSlices([]interface{}{[]byte(\"v1\"), []byte(\"v2\")}, nil)),\n\t\tve([][]byte{[]byte(\"v1\"), []byte(\"v2\")}, nil),\n\t},\n\t{\n\t\t\"byteslices(nil)\",\n\t\tve(redis.ByteSlices(nil, nil)),\n\t\tve([][]byte(nil), redis.ErrNil),\n\t},\n\t{\n\t\t\"values([v1, v2])\",\n\t\tve(redis.Values([]interface{}{[]byte(\"v1\"), []byte(\"v2\")}, nil)),\n\t\tve([]interface{}{[]byte(\"v1\"), []byte(\"v2\")}, nil),\n\t},\n\t{\n\t\t\"values(nil)\",\n\t\tve(redis.Values(nil, nil)),\n\t\tve([]interface{}(nil), redis.ErrNil),\n\t},\n\t{\n\t\t\"float64(1.0)\",\n\t\tve(redis.Float64([]byte(\"1.0\"), nil)),\n\t\tve(float64(1.0), nil),\n\t},\n\t{\n\t\t\"float64(nil)\",\n\t\tve(redis.Float64(nil, nil)),\n\t\tve(float64(0.0), redis.ErrNil),\n\t},\n\t{\n\t\t\"uint64(1)\",\n\t\tve(redis.Uint64(int64(1), nil)),\n\t\tve(uint64(1), nil),\n\t},\n\t{\n\t\t\"uint64(-1)\",\n\t\tve(redis.Uint64(int64(-1), nil)),\n\t\tve(uint64(0), redis.ErrNegativeInt),\n\t},\n}\n\nfunc TestReply(t *testing.T) {\n\tfor _, rt := range replyTests {\n\t\tif rt.actual.err != rt.expected.err {\n\t\t\tt.Errorf(\"%s returned err %v, want %v\", rt.name, rt.actual.err, rt.expected.err)\n\t\t\tcontinue\n\t\t}\n\t\tif !reflect.DeepEqual(rt.actual.v, rt.expected.v) {\n\t\t\tt.Errorf(\"%s=%+v, want %+v\", rt.name, rt.actual.v, rt.expected.v)\n\t\t}\n\t}\n}\n\n// dial wraps DialDefaultServer() with a more suitable function name for examples.\nfunc dial() (redis.Conn, error) {\n\treturn redis.DialDefaultServer()\n}\n\nfunc ExampleBool() {\n\tc, err := dial()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tdefer c.Close()\n\n\tc.Do(\"SET\", \"foo\", 1)\n\texists, _ := redis.Bool(c.Do(\"EXISTS\", \"foo\"))\n\tfmt.Printf(\"%#v\\n\", exists)\n\t// Output:\n\t// true\n}\n\nfunc ExampleInt() {\n\tc, err := dial()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tdefer c.Close()\n\n\tc.Do(\"SET\", \"k1\", 1)\n\tn, _ := redis.Int(c.Do(\"GET\", \"k1\"))\n\tfmt.Printf(\"%#v\\n\", n)\n\tn, _ = redis.Int(c.Do(\"INCR\", \"k1\"))\n\tfmt.Printf(\"%#v\\n\", n)\n\t// Output:\n\t// 1\n\t// 2\n}\n\nfunc ExampleInts() {\n\tc, err := dial()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tdefer c.Close()\n\n\tc.Do(\"SADD\", \"set_with_integers\", 4, 5, 6)\n\tints, _ := redis.Ints(c.Do(\"SMEMBERS\", \"set_with_integers\"))\n\tfmt.Printf(\"%#v\\n\", ints)\n\t// Output:\n\t// []int{4, 5, 6}\n}\n\nfunc ExampleString() {\n\tc, err := dial()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tdefer c.Close()\n\n\tc.Do(\"SET\", \"hello\", \"world\")\n\ts, err := redis.String(c.Do(\"GET\", \"hello\"))\n\tfmt.Printf(\"%#v\\n\", s)\n\t// Output:\n\t// \"world\"\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/scan.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\nfunc ensureLen(d reflect.Value, n int) {\n\tif n > d.Cap() {\n\t\td.Set(reflect.MakeSlice(d.Type(), n, n))\n\t} else {\n\t\td.SetLen(n)\n\t}\n}\n\nfunc cannotConvert(d reflect.Value, s interface{}) error {\n\tvar sname string\n\tswitch s.(type) {\n\tcase string:\n\t\tsname = \"Redis simple string\"\n\tcase Error:\n\t\tsname = \"Redis error\"\n\tcase int64:\n\t\tsname = \"Redis integer\"\n\tcase []byte:\n\t\tsname = \"Redis bulk string\"\n\tcase []interface{}:\n\t\tsname = \"Redis array\"\n\tdefault:\n\t\tsname = reflect.TypeOf(s).String()\n\t}\n\treturn fmt.Errorf(\"cannot convert from %s to %s\", sname, d.Type())\n}\n\nfunc convertAssignBulkString(d reflect.Value, s []byte) (err error) {\n\tswitch d.Type().Kind() {\n\tcase reflect.Float32, reflect.Float64:\n\t\tvar x float64\n\t\tx, err = strconv.ParseFloat(string(s), d.Type().Bits())\n\t\td.SetFloat(x)\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tvar x int64\n\t\tx, err = strconv.ParseInt(string(s), 10, d.Type().Bits())\n\t\td.SetInt(x)\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tvar x uint64\n\t\tx, err = strconv.ParseUint(string(s), 10, d.Type().Bits())\n\t\td.SetUint(x)\n\tcase reflect.Bool:\n\t\tvar x bool\n\t\tx, err = strconv.ParseBool(string(s))\n\t\td.SetBool(x)\n\tcase reflect.String:\n\t\td.SetString(string(s))\n\tcase reflect.Slice:\n\t\tif d.Type().Elem().Kind() != reflect.Uint8 {\n\t\t\terr = cannotConvert(d, s)\n\t\t} else {\n\t\t\td.SetBytes(s)\n\t\t}\n\tdefault:\n\t\terr = cannotConvert(d, s)\n\t}\n\treturn\n}\n\nfunc convertAssignInt(d reflect.Value, s int64) (err error) {\n\tswitch d.Type().Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\td.SetInt(s)\n\t\tif d.Int() != s {\n\t\t\terr = strconv.ErrRange\n\t\t\td.SetInt(0)\n\t\t}\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tif s < 0 {\n\t\t\terr = strconv.ErrRange\n\t\t} else {\n\t\t\tx := uint64(s)\n\t\t\td.SetUint(x)\n\t\t\tif d.Uint() != x {\n\t\t\t\terr = strconv.ErrRange\n\t\t\t\td.SetUint(0)\n\t\t\t}\n\t\t}\n\tcase reflect.Bool:\n\t\td.SetBool(s != 0)\n\tdefault:\n\t\terr = cannotConvert(d, s)\n\t}\n\treturn\n}\n\nfunc convertAssignValue(d reflect.Value, s interface{}) (err error) {\n\tswitch s := s.(type) {\n\tcase []byte:\n\t\terr = convertAssignBulkString(d, s)\n\tcase int64:\n\t\terr = convertAssignInt(d, s)\n\tdefault:\n\t\terr = cannotConvert(d, s)\n\t}\n\treturn err\n}\n\nfunc convertAssignArray(d reflect.Value, s []interface{}) error {\n\tif d.Type().Kind() != reflect.Slice {\n\t\treturn cannotConvert(d, s)\n\t}\n\tensureLen(d, len(s))\n\tfor i := 0; i < len(s); i++ {\n\t\tif err := convertAssignValue(d.Index(i), s[i]); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc convertAssign(d interface{}, s interface{}) (err error) {\n\t// Handle the most common destination types using type switches and\n\t// fall back to reflection for all other types.\n\tswitch s := s.(type) {\n\tcase nil:\n\t\t// ingore\n\tcase []byte:\n\t\tswitch d := d.(type) {\n\t\tcase *string:\n\t\t\t*d = string(s)\n\t\tcase *int:\n\t\t\t*d, err = strconv.Atoi(string(s))\n\t\tcase *bool:\n\t\t\t*d, err = strconv.ParseBool(string(s))\n\t\tcase *[]byte:\n\t\t\t*d = s\n\t\tcase *interface{}:\n\t\t\t*d = s\n\t\tcase nil:\n\t\t\t// skip value\n\t\tdefault:\n\t\t\tif d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr {\n\t\t\t\terr = cannotConvert(d, s)\n\t\t\t} else {\n\t\t\t\terr = convertAssignBulkString(d.Elem(), s)\n\t\t\t}\n\t\t}\n\tcase int64:\n\t\tswitch d := d.(type) {\n\t\tcase *int:\n\t\t\tx := int(s)\n\t\t\tif int64(x) != s {\n\t\t\t\terr = strconv.ErrRange\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\t*d = x\n\t\tcase *bool:\n\t\t\t*d = s != 0\n\t\tcase *interface{}:\n\t\t\t*d = s\n\t\tcase nil:\n\t\t\t// skip value\n\t\tdefault:\n\t\t\tif d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr {\n\t\t\t\terr = cannotConvert(d, s)\n\t\t\t} else {\n\t\t\t\terr = convertAssignInt(d.Elem(), s)\n\t\t\t}\n\t\t}\n\tcase string:\n\t\tswitch d := d.(type) {\n\t\tcase *string:\n\t\t\t*d = string(s)\n\t\tdefault:\n\t\t\terr = cannotConvert(reflect.ValueOf(d), s)\n\t\t}\n\tcase []interface{}:\n\t\tswitch d := d.(type) {\n\t\tcase *[]interface{}:\n\t\t\t*d = s\n\t\tcase *interface{}:\n\t\t\t*d = s\n\t\tcase nil:\n\t\t\t// skip value\n\t\tdefault:\n\t\t\tif d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr {\n\t\t\t\terr = cannotConvert(d, s)\n\t\t\t} else {\n\t\t\t\terr = convertAssignArray(d.Elem(), s)\n\t\t\t}\n\t\t}\n\tcase Error:\n\t\terr = s\n\tdefault:\n\t\terr = cannotConvert(reflect.ValueOf(d), s)\n\t}\n\treturn\n}\n\n// Scan copies from src to the values pointed at by dest.\n//\n// The values pointed at by dest must be an integer, float, boolean, string,\n// []byte, interface{} or slices of these types. Scan uses the standard strconv\n// package to convert bulk strings to numeric and boolean types.\n//\n// If a dest value is nil, then the corresponding src value is skipped.\n//\n// If a src element is nil, then the corresponding dest value is not modified.\n//\n// To enable easy use of Scan in a loop, Scan returns the slice of src\n// following the copied values.\nfunc Scan(src []interface{}, dest ...interface{}) ([]interface{}, error) {\n\tif len(src) < len(dest) {\n\t\treturn nil, errors.New(\"redigo.Scan: array short\")\n\t}\n\tvar err error\n\tfor i, d := range dest {\n\t\terr = convertAssign(d, src[i])\n\t\tif err != nil {\n\t\t\terr = fmt.Errorf(\"redigo.Scan: cannot assign to dest %d: %v\", i, err)\n\t\t\tbreak\n\t\t}\n\t}\n\treturn src[len(dest):], err\n}\n\ntype fieldSpec struct {\n\tname      string\n\tindex     []int\n\tomitEmpty bool\n}\n\ntype structSpec struct {\n\tm map[string]*fieldSpec\n\tl []*fieldSpec\n}\n\nfunc (ss *structSpec) fieldSpec(name []byte) *fieldSpec {\n\treturn ss.m[string(name)]\n}\n\nfunc compileStructSpec(t reflect.Type, depth map[string]int, index []int, ss *structSpec) {\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tf := t.Field(i)\n\t\tswitch {\n\t\tcase f.PkgPath != \"\" && !f.Anonymous:\n\t\t\t// Ignore unexported fields.\n\t\tcase f.Anonymous:\n\t\t\t// TODO: Handle pointers. Requires change to decoder and\n\t\t\t// protection against infinite recursion.\n\t\t\tif f.Type.Kind() == reflect.Struct {\n\t\t\t\tcompileStructSpec(f.Type, depth, append(index, i), ss)\n\t\t\t}\n\t\tdefault:\n\t\t\tfs := &fieldSpec{name: f.Name}\n\t\t\ttag := f.Tag.Get(\"redis\")\n\t\t\tp := strings.Split(tag, \",\")\n\t\t\tif len(p) > 0 {\n\t\t\t\tif p[0] == \"-\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif len(p[0]) > 0 {\n\t\t\t\t\tfs.name = p[0]\n\t\t\t\t}\n\t\t\t\tfor _, s := range p[1:] {\n\t\t\t\t\tswitch s {\n\t\t\t\t\tcase \"omitempty\":\n\t\t\t\t\t\tfs.omitEmpty = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tpanic(fmt.Errorf(\"redigo: unknown field tag %s for type %s\", s, t.Name()))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\td, found := depth[fs.name]\n\t\t\tif !found {\n\t\t\t\td = 1 << 30\n\t\t\t}\n\t\t\tswitch {\n\t\t\tcase len(index) == d:\n\t\t\t\t// At same depth, remove from result.\n\t\t\t\tdelete(ss.m, fs.name)\n\t\t\t\tj := 0\n\t\t\t\tfor i := 0; i < len(ss.l); i++ {\n\t\t\t\t\tif fs.name != ss.l[i].name {\n\t\t\t\t\t\tss.l[j] = ss.l[i]\n\t\t\t\t\t\tj += 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tss.l = ss.l[:j]\n\t\t\tcase len(index) < d:\n\t\t\t\tfs.index = make([]int, len(index)+1)\n\t\t\t\tcopy(fs.index, index)\n\t\t\t\tfs.index[len(index)] = i\n\t\t\t\tdepth[fs.name] = len(index)\n\t\t\t\tss.m[fs.name] = fs\n\t\t\t\tss.l = append(ss.l, fs)\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar (\n\tstructSpecMutex  sync.RWMutex\n\tstructSpecCache  = make(map[reflect.Type]*structSpec)\n\tdefaultFieldSpec = &fieldSpec{}\n)\n\nfunc structSpecForType(t reflect.Type) *structSpec {\n\n\tstructSpecMutex.RLock()\n\tss, found := structSpecCache[t]\n\tstructSpecMutex.RUnlock()\n\tif found {\n\t\treturn ss\n\t}\n\n\tstructSpecMutex.Lock()\n\tdefer structSpecMutex.Unlock()\n\tss, found = structSpecCache[t]\n\tif found {\n\t\treturn ss\n\t}\n\n\tss = &structSpec{m: make(map[string]*fieldSpec)}\n\tcompileStructSpec(t, make(map[string]int), nil, ss)\n\tstructSpecCache[t] = ss\n\treturn ss\n}\n\nvar errScanStructValue = errors.New(\"redigo.ScanStruct: value must be non-nil pointer to a struct\")\n\n// ScanStruct scans alternating names and values from src to a struct. The\n// HGETALL and CONFIG GET commands return replies in this format.\n//\n// ScanStruct uses exported field names to match values in the response. Use\n// 'redis' field tag to override the name:\n//\n//      Field int `redis:\"myName\"`\n//\n// Fields with the tag redis:\"-\" are ignored.\n//\n// Integer, float, boolean, string and []byte fields are supported. Scan uses the\n// standard strconv package to convert bulk string values to numeric and\n// boolean types.\n//\n// If a src element is nil, then the corresponding field is not modified.\nfunc ScanStruct(src []interface{}, dest interface{}) error {\n\td := reflect.ValueOf(dest)\n\tif d.Kind() != reflect.Ptr || d.IsNil() {\n\t\treturn errScanStructValue\n\t}\n\td = d.Elem()\n\tif d.Kind() != reflect.Struct {\n\t\treturn errScanStructValue\n\t}\n\tss := structSpecForType(d.Type())\n\n\tif len(src)%2 != 0 {\n\t\treturn errors.New(\"redigo.ScanStruct: number of values not a multiple of 2\")\n\t}\n\n\tfor i := 0; i < len(src); i += 2 {\n\t\ts := src[i+1]\n\t\tif s == nil {\n\t\t\tcontinue\n\t\t}\n\t\tname, ok := src[i].([]byte)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"redigo.ScanStruct: key %d not a bulk string value\", i)\n\t\t}\n\t\tfs := ss.fieldSpec(name)\n\t\tif fs == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif err := convertAssignValue(d.FieldByIndex(fs.index), s); err != nil {\n\t\t\treturn fmt.Errorf(\"redigo.ScanStruct: cannot assign field %s: %v\", fs.name, err)\n\t\t}\n\t}\n\treturn nil\n}\n\nvar (\n\terrScanSliceValue = errors.New(\"redigo.ScanSlice: dest must be non-nil pointer to a struct\")\n)\n\n// ScanSlice scans src to the slice pointed to by dest. The elements the dest\n// slice must be integer, float, boolean, string, struct or pointer to struct\n// values.\n//\n// Struct fields must be integer, float, boolean or string values. All struct\n// fields are used unless a subset is specified using fieldNames.\nfunc ScanSlice(src []interface{}, dest interface{}, fieldNames ...string) error {\n\td := reflect.ValueOf(dest)\n\tif d.Kind() != reflect.Ptr || d.IsNil() {\n\t\treturn errScanSliceValue\n\t}\n\td = d.Elem()\n\tif d.Kind() != reflect.Slice {\n\t\treturn errScanSliceValue\n\t}\n\n\tisPtr := false\n\tt := d.Type().Elem()\n\tif t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Struct {\n\t\tisPtr = true\n\t\tt = t.Elem()\n\t}\n\n\tif t.Kind() != reflect.Struct {\n\t\tensureLen(d, len(src))\n\t\tfor i, s := range src {\n\t\t\tif s == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := convertAssignValue(d.Index(i), s); err != nil {\n\t\t\t\treturn fmt.Errorf(\"redigo.ScanSlice: cannot assign element %d: %v\", i, err)\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tss := structSpecForType(t)\n\tfss := ss.l\n\tif len(fieldNames) > 0 {\n\t\tfss = make([]*fieldSpec, len(fieldNames))\n\t\tfor i, name := range fieldNames {\n\t\t\tfss[i] = ss.m[name]\n\t\t\tif fss[i] == nil {\n\t\t\t\treturn fmt.Errorf(\"redigo.ScanSlice: ScanSlice bad field name %s\", name)\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(fss) == 0 {\n\t\treturn errors.New(\"redigo.ScanSlice: no struct fields\")\n\t}\n\n\tn := len(src) / len(fss)\n\tif n*len(fss) != len(src) {\n\t\treturn errors.New(\"redigo.ScanSlice: length not a multiple of struct field count\")\n\t}\n\n\tensureLen(d, n)\n\tfor i := 0; i < n; i++ {\n\t\td := d.Index(i)\n\t\tif isPtr {\n\t\t\tif d.IsNil() {\n\t\t\t\td.Set(reflect.New(t))\n\t\t\t}\n\t\t\td = d.Elem()\n\t\t}\n\t\tfor j, fs := range fss {\n\t\t\ts := src[i*len(fss)+j]\n\t\t\tif s == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := convertAssignValue(d.FieldByIndex(fs.index), s); err != nil {\n\t\t\t\treturn fmt.Errorf(\"redigo.ScanSlice: cannot assign element %d to field %s: %v\", i*len(fss)+j, fs.name, err)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Args is a helper for constructing command arguments from structured values.\ntype Args []interface{}\n\n// Add returns the result of appending value to args.\nfunc (args Args) Add(value ...interface{}) Args {\n\treturn append(args, value...)\n}\n\n// AddFlat returns the result of appending the flattened value of v to args.\n//\n// Maps are flattened by appending the alternating keys and map values to args.\n//\n// Slices are flattened by appending the slice elements to args.\n//\n// Structs are flattened by appending the alternating names and values of\n// exported fields to args. If v is a nil struct pointer, then nothing is\n// appended. The 'redis' field tag overrides struct field names. See ScanStruct\n// for more information on the use of the 'redis' field tag.\n//\n// Other types are appended to args as is.\nfunc (args Args) AddFlat(v interface{}) Args {\n\trv := reflect.ValueOf(v)\n\tswitch rv.Kind() {\n\tcase reflect.Struct:\n\t\targs = flattenStruct(args, rv)\n\tcase reflect.Slice:\n\t\tfor i := 0; i < rv.Len(); i++ {\n\t\t\targs = append(args, rv.Index(i).Interface())\n\t\t}\n\tcase reflect.Map:\n\t\tfor _, k := range rv.MapKeys() {\n\t\t\targs = append(args, k.Interface(), rv.MapIndex(k).Interface())\n\t\t}\n\tcase reflect.Ptr:\n\t\tif rv.Type().Elem().Kind() == reflect.Struct {\n\t\t\tif !rv.IsNil() {\n\t\t\t\targs = flattenStruct(args, rv.Elem())\n\t\t\t}\n\t\t} else {\n\t\t\targs = append(args, v)\n\t\t}\n\tdefault:\n\t\targs = append(args, v)\n\t}\n\treturn args\n}\n\nfunc flattenStruct(args Args, v reflect.Value) Args {\n\tss := structSpecForType(v.Type())\n\tfor _, fs := range ss.l {\n\t\tfv := v.FieldByIndex(fs.index)\n\t\tif fs.omitEmpty {\n\t\t\tvar empty = false\n\t\t\tswitch fv.Kind() {\n\t\t\tcase reflect.Array, reflect.Map, reflect.Slice, reflect.String:\n\t\t\t\tempty = fv.Len() == 0\n\t\t\tcase reflect.Bool:\n\t\t\t\tempty = !fv.Bool()\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\tempty = fv.Int() == 0\n\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t\t\tempty = fv.Uint() == 0\n\t\t\tcase reflect.Float32, reflect.Float64:\n\t\t\t\tempty = fv.Float() == 0\n\t\t\tcase reflect.Interface, reflect.Ptr:\n\t\t\t\tempty = fv.IsNil()\n\t\t\t}\n\t\t\tif empty {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\targs = append(args, fs.name, fv.Interface())\n\t}\n\treturn args\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/scan_test.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis_test\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/garyburd/redigo/redis\"\n)\n\nvar scanConversionTests = []struct {\n\tsrc  interface{}\n\tdest interface{}\n}{\n\t{[]byte(\"-inf\"), math.Inf(-1)},\n\t{[]byte(\"+inf\"), math.Inf(1)},\n\t{[]byte(\"0\"), float64(0)},\n\t{[]byte(\"3.14159\"), float64(3.14159)},\n\t{[]byte(\"3.14\"), float32(3.14)},\n\t{[]byte(\"-100\"), int(-100)},\n\t{[]byte(\"101\"), int(101)},\n\t{int64(102), int(102)},\n\t{[]byte(\"103\"), uint(103)},\n\t{int64(104), uint(104)},\n\t{[]byte(\"105\"), int8(105)},\n\t{int64(106), int8(106)},\n\t{[]byte(\"107\"), uint8(107)},\n\t{int64(108), uint8(108)},\n\t{[]byte(\"0\"), false},\n\t{int64(0), false},\n\t{[]byte(\"f\"), false},\n\t{[]byte(\"1\"), true},\n\t{int64(1), true},\n\t{[]byte(\"t\"), true},\n\t{\"hello\", \"hello\"},\n\t{[]byte(\"hello\"), \"hello\"},\n\t{[]byte(\"world\"), []byte(\"world\")},\n\t{[]interface{}{[]byte(\"foo\")}, []interface{}{[]byte(\"foo\")}},\n\t{[]interface{}{[]byte(\"foo\")}, []string{\"foo\"}},\n\t{[]interface{}{[]byte(\"hello\"), []byte(\"world\")}, []string{\"hello\", \"world\"}},\n\t{[]interface{}{[]byte(\"bar\")}, [][]byte{[]byte(\"bar\")}},\n\t{[]interface{}{[]byte(\"1\")}, []int{1}},\n\t{[]interface{}{[]byte(\"1\"), []byte(\"2\")}, []int{1, 2}},\n\t{[]interface{}{[]byte(\"1\"), []byte(\"2\")}, []float64{1, 2}},\n\t{[]interface{}{[]byte(\"1\")}, []byte{1}},\n\t{[]interface{}{[]byte(\"1\")}, []bool{true}},\n}\n\nfunc TestScanConversion(t *testing.T) {\n\tfor _, tt := range scanConversionTests {\n\t\tvalues := []interface{}{tt.src}\n\t\tdest := reflect.New(reflect.TypeOf(tt.dest))\n\t\tvalues, err := redis.Scan(values, dest.Interface())\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Scan(%v) returned error %v\", tt, err)\n\t\t\tcontinue\n\t\t}\n\t\tif !reflect.DeepEqual(tt.dest, dest.Elem().Interface()) {\n\t\t\tt.Errorf(\"Scan(%v) returned %v, want %v\", tt, dest.Elem().Interface(), tt.dest)\n\t\t}\n\t}\n}\n\nvar scanConversionErrorTests = []struct {\n\tsrc  interface{}\n\tdest interface{}\n}{\n\t{[]byte(\"1234\"), byte(0)},\n\t{int64(1234), byte(0)},\n\t{[]byte(\"-1\"), byte(0)},\n\t{int64(-1), byte(0)},\n\t{[]byte(\"junk\"), false},\n\t{redis.Error(\"blah\"), false},\n}\n\nfunc TestScanConversionError(t *testing.T) {\n\tfor _, tt := range scanConversionErrorTests {\n\t\tvalues := []interface{}{tt.src}\n\t\tdest := reflect.New(reflect.TypeOf(tt.dest))\n\t\tvalues, err := redis.Scan(values, dest.Interface())\n\t\tif err == nil {\n\t\t\tt.Errorf(\"Scan(%v) did not return error\", tt)\n\t\t}\n\t}\n}\n\nfunc ExampleScan() {\n\tc, err := dial()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tdefer c.Close()\n\n\tc.Send(\"HMSET\", \"album:1\", \"title\", \"Red\", \"rating\", 5)\n\tc.Send(\"HMSET\", \"album:2\", \"title\", \"Earthbound\", \"rating\", 1)\n\tc.Send(\"HMSET\", \"album:3\", \"title\", \"Beat\")\n\tc.Send(\"LPUSH\", \"albums\", \"1\")\n\tc.Send(\"LPUSH\", \"albums\", \"2\")\n\tc.Send(\"LPUSH\", \"albums\", \"3\")\n\tvalues, err := redis.Values(c.Do(\"SORT\", \"albums\",\n\t\t\"BY\", \"album:*->rating\",\n\t\t\"GET\", \"album:*->title\",\n\t\t\"GET\", \"album:*->rating\"))\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\n\tfor len(values) > 0 {\n\t\tvar title string\n\t\trating := -1 // initialize to illegal value to detect nil.\n\t\tvalues, err = redis.Scan(values, &title, &rating)\n\t\tif err != nil {\n\t\t\tfmt.Println(err)\n\t\t\treturn\n\t\t}\n\t\tif rating == -1 {\n\t\t\tfmt.Println(title, \"not-rated\")\n\t\t} else {\n\t\t\tfmt.Println(title, rating)\n\t\t}\n\t}\n\t// Output:\n\t// Beat not-rated\n\t// Earthbound 1\n\t// Red 5\n}\n\ntype s0 struct {\n\tX  int\n\tY  int `redis:\"y\"`\n\tBt bool\n}\n\ntype s1 struct {\n\tX  int    `redis:\"-\"`\n\tI  int    `redis:\"i\"`\n\tU  uint   `redis:\"u\"`\n\tS  string `redis:\"s\"`\n\tP  []byte `redis:\"p\"`\n\tB  bool   `redis:\"b\"`\n\tBt bool\n\tBf bool\n\ts0\n}\n\nvar scanStructTests = []struct {\n\ttitle string\n\treply []string\n\tvalue interface{}\n}{\n\t{\"basic\",\n\t\t[]string{\"i\", \"-1234\", \"u\", \"5678\", \"s\", \"hello\", \"p\", \"world\", \"b\", \"t\", \"Bt\", \"1\", \"Bf\", \"0\", \"X\", \"123\", \"y\", \"456\"},\n\t\t&s1{I: -1234, U: 5678, S: \"hello\", P: []byte(\"world\"), B: true, Bt: true, Bf: false, s0: s0{X: 123, Y: 456}},\n\t},\n}\n\nfunc TestScanStruct(t *testing.T) {\n\tfor _, tt := range scanStructTests {\n\n\t\tvar reply []interface{}\n\t\tfor _, v := range tt.reply {\n\t\t\treply = append(reply, []byte(v))\n\t\t}\n\n\t\tvalue := reflect.New(reflect.ValueOf(tt.value).Type().Elem())\n\n\t\tif err := redis.ScanStruct(reply, value.Interface()); err != nil {\n\t\t\tt.Fatalf(\"ScanStruct(%s) returned error %v\", tt.title, err)\n\t\t}\n\n\t\tif !reflect.DeepEqual(value.Interface(), tt.value) {\n\t\t\tt.Fatalf(\"ScanStruct(%s) returned %v, want %v\", tt.title, value.Interface(), tt.value)\n\t\t}\n\t}\n}\n\nfunc TestBadScanStructArgs(t *testing.T) {\n\tx := []interface{}{\"A\", \"b\"}\n\ttest := func(v interface{}) {\n\t\tif err := redis.ScanStruct(x, v); err == nil {\n\t\t\tt.Errorf(\"Expect error for ScanStruct(%T, %T)\", x, v)\n\t\t}\n\t}\n\n\ttest(nil)\n\n\tvar v0 *struct{}\n\ttest(v0)\n\n\tvar v1 int\n\ttest(&v1)\n\n\tx = x[:1]\n\tv2 := struct{ A string }{}\n\ttest(&v2)\n}\n\nvar scanSliceTests = []struct {\n\tsrc        []interface{}\n\tfieldNames []string\n\tok         bool\n\tdest       interface{}\n}{\n\t{\n\t\t[]interface{}{[]byte(\"1\"), nil, []byte(\"-1\")},\n\t\tnil,\n\t\ttrue,\n\t\t[]int{1, 0, -1},\n\t},\n\t{\n\t\t[]interface{}{[]byte(\"1\"), nil, []byte(\"2\")},\n\t\tnil,\n\t\ttrue,\n\t\t[]uint{1, 0, 2},\n\t},\n\t{\n\t\t[]interface{}{[]byte(\"-1\")},\n\t\tnil,\n\t\tfalse,\n\t\t[]uint{1},\n\t},\n\t{\n\t\t[]interface{}{[]byte(\"hello\"), nil, []byte(\"world\")},\n\t\tnil,\n\t\ttrue,\n\t\t[][]byte{[]byte(\"hello\"), nil, []byte(\"world\")},\n\t},\n\t{\n\t\t[]interface{}{[]byte(\"hello\"), nil, []byte(\"world\")},\n\t\tnil,\n\t\ttrue,\n\t\t[]string{\"hello\", \"\", \"world\"},\n\t},\n\t{\n\t\t[]interface{}{[]byte(\"a1\"), []byte(\"b1\"), []byte(\"a2\"), []byte(\"b2\")},\n\t\tnil,\n\t\ttrue,\n\t\t[]struct{ A, B string }{{\"a1\", \"b1\"}, {\"a2\", \"b2\"}},\n\t},\n\t{\n\t\t[]interface{}{[]byte(\"a1\"), []byte(\"b1\")},\n\t\tnil,\n\t\tfalse,\n\t\t[]struct{ A, B, C string }{{\"a1\", \"b1\", \"\"}},\n\t},\n\t{\n\t\t[]interface{}{[]byte(\"a1\"), []byte(\"b1\"), []byte(\"a2\"), []byte(\"b2\")},\n\t\tnil,\n\t\ttrue,\n\t\t[]*struct{ A, B string }{{\"a1\", \"b1\"}, {\"a2\", \"b2\"}},\n\t},\n\t{\n\t\t[]interface{}{[]byte(\"a1\"), []byte(\"b1\"), []byte(\"a2\"), []byte(\"b2\")},\n\t\t[]string{\"A\", \"B\"},\n\t\ttrue,\n\t\t[]struct{ A, C, B string }{{\"a1\", \"\", \"b1\"}, {\"a2\", \"\", \"b2\"}},\n\t},\n\t{\n\t\t[]interface{}{[]byte(\"a1\"), []byte(\"b1\"), []byte(\"a2\"), []byte(\"b2\")},\n\t\tnil,\n\t\tfalse,\n\t\t[]struct{}{},\n\t},\n}\n\nfunc TestScanSlice(t *testing.T) {\n\tfor _, tt := range scanSliceTests {\n\n\t\ttyp := reflect.ValueOf(tt.dest).Type()\n\t\tdest := reflect.New(typ)\n\n\t\terr := redis.ScanSlice(tt.src, dest.Interface(), tt.fieldNames...)\n\t\tif tt.ok != (err == nil) {\n\t\t\tt.Errorf(\"ScanSlice(%v, []%s, %v) returned error %v\", tt.src, typ, tt.fieldNames, err)\n\t\t\tcontinue\n\t\t}\n\t\tif tt.ok && !reflect.DeepEqual(dest.Elem().Interface(), tt.dest) {\n\t\t\tt.Errorf(\"ScanSlice(src, []%s) returned %#v, want %#v\", typ, dest.Elem().Interface(), tt.dest)\n\t\t}\n\t}\n}\n\nfunc ExampleScanSlice() {\n\tc, err := dial()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tdefer c.Close()\n\n\tc.Send(\"HMSET\", \"album:1\", \"title\", \"Red\", \"rating\", 5)\n\tc.Send(\"HMSET\", \"album:2\", \"title\", \"Earthbound\", \"rating\", 1)\n\tc.Send(\"HMSET\", \"album:3\", \"title\", \"Beat\", \"rating\", 4)\n\tc.Send(\"LPUSH\", \"albums\", \"1\")\n\tc.Send(\"LPUSH\", \"albums\", \"2\")\n\tc.Send(\"LPUSH\", \"albums\", \"3\")\n\tvalues, err := redis.Values(c.Do(\"SORT\", \"albums\",\n\t\t\"BY\", \"album:*->rating\",\n\t\t\"GET\", \"album:*->title\",\n\t\t\"GET\", \"album:*->rating\"))\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\n\tvar albums []struct {\n\t\tTitle  string\n\t\tRating int\n\t}\n\tif err := redis.ScanSlice(values, &albums); err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tfmt.Printf(\"%v\\n\", albums)\n\t// Output:\n\t// [{Earthbound 1} {Beat 4} {Red 5}]\n}\n\nvar argsTests = []struct {\n\ttitle    string\n\tactual   redis.Args\n\texpected redis.Args\n}{\n\t{\"struct ptr\",\n\t\tredis.Args{}.AddFlat(&struct {\n\t\t\tI  int               `redis:\"i\"`\n\t\t\tU  uint              `redis:\"u\"`\n\t\t\tS  string            `redis:\"s\"`\n\t\t\tP  []byte            `redis:\"p\"`\n\t\t\tM  map[string]string `redis:\"m\"`\n\t\t\tBt bool\n\t\t\tBf bool\n\t\t}{\n\t\t\t-1234, 5678, \"hello\", []byte(\"world\"), map[string]string{\"hello\": \"world\"}, true, false,\n\t\t}),\n\t\tredis.Args{\"i\", int(-1234), \"u\", uint(5678), \"s\", \"hello\", \"p\", []byte(\"world\"), \"m\", map[string]string{\"hello\": \"world\"}, \"Bt\", true, \"Bf\", false},\n\t},\n\t{\"struct\",\n\t\tredis.Args{}.AddFlat(struct{ I int }{123}),\n\t\tredis.Args{\"I\", 123},\n\t},\n\t{\"slice\",\n\t\tredis.Args{}.Add(1).AddFlat([]string{\"a\", \"b\", \"c\"}).Add(2),\n\t\tredis.Args{1, \"a\", \"b\", \"c\", 2},\n\t},\n\t{\"struct omitempty\",\n\t\tredis.Args{}.AddFlat(&struct {\n\t\t\tI  int               `redis:\"i,omitempty\"`\n\t\t\tU  uint              `redis:\"u,omitempty\"`\n\t\t\tS  string            `redis:\"s,omitempty\"`\n\t\t\tP  []byte            `redis:\"p,omitempty\"`\n\t\t\tM  map[string]string `redis:\"m,omitempty\"`\n\t\t\tBt bool              `redis:\"Bt,omitempty\"`\n\t\t\tBf bool              `redis:\"Bf,omitempty\"`\n\t\t}{\n\t\t\t0, 0, \"\", []byte{}, map[string]string{}, true, false,\n\t\t}),\n\t\tredis.Args{\"Bt\", true},\n\t},\n}\n\nfunc TestArgs(t *testing.T) {\n\tfor _, tt := range argsTests {\n\t\tif !reflect.DeepEqual(tt.actual, tt.expected) {\n\t\t\tt.Fatalf(\"%s is %v, want %v\", tt.title, tt.actual, tt.expected)\n\t\t}\n\t}\n}\n\nfunc ExampleArgs() {\n\tc, err := dial()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tdefer c.Close()\n\n\tvar p1, p2 struct {\n\t\tTitle  string `redis:\"title\"`\n\t\tAuthor string `redis:\"author\"`\n\t\tBody   string `redis:\"body\"`\n\t}\n\n\tp1.Title = \"Example\"\n\tp1.Author = \"Gary\"\n\tp1.Body = \"Hello\"\n\n\tif _, err := c.Do(\"HMSET\", redis.Args{}.Add(\"id1\").AddFlat(&p1)...); err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\n\tm := map[string]string{\n\t\t\"title\":  \"Example2\",\n\t\t\"author\": \"Steve\",\n\t\t\"body\":   \"Map\",\n\t}\n\n\tif _, err := c.Do(\"HMSET\", redis.Args{}.Add(\"id2\").AddFlat(m)...); err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\n\tfor _, id := range []string{\"id1\", \"id2\"} {\n\n\t\tv, err := redis.Values(c.Do(\"HGETALL\", id))\n\t\tif err != nil {\n\t\t\tfmt.Println(err)\n\t\t\treturn\n\t\t}\n\n\t\tif err := redis.ScanStruct(v, &p2); err != nil {\n\t\t\tfmt.Println(err)\n\t\t\treturn\n\t\t}\n\n\t\tfmt.Printf(\"%+v\\n\", p2)\n\t}\n\n\t// Output:\n\t// {Title:Example Author:Gary Body:Hello}\n\t// {Title:Example2 Author:Steve Body:Map}\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/script.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/hex\"\n\t\"io\"\n\t\"strings\"\n)\n\n// Script encapsulates the source, hash and key count for a Lua script. See\n// http://redis.io/commands/eval for information on scripts in Redis.\ntype Script struct {\n\tkeyCount int\n\tsrc      string\n\thash     string\n}\n\n// NewScript returns a new script object. If keyCount is greater than or equal\n// to zero, then the count is automatically inserted in the EVAL command\n// argument list. If keyCount is less than zero, then the application supplies\n// the count as the first value in the keysAndArgs argument to the Do, Send and\n// SendHash methods.\nfunc NewScript(keyCount int, src string) *Script {\n\th := sha1.New()\n\tio.WriteString(h, src)\n\treturn &Script{keyCount, src, hex.EncodeToString(h.Sum(nil))}\n}\n\nfunc (s *Script) args(spec string, keysAndArgs []interface{}) []interface{} {\n\tvar args []interface{}\n\tif s.keyCount < 0 {\n\t\targs = make([]interface{}, 1+len(keysAndArgs))\n\t\targs[0] = spec\n\t\tcopy(args[1:], keysAndArgs)\n\t} else {\n\t\targs = make([]interface{}, 2+len(keysAndArgs))\n\t\targs[0] = spec\n\t\targs[1] = s.keyCount\n\t\tcopy(args[2:], keysAndArgs)\n\t}\n\treturn args\n}\n\n// Do evaluates the script. Under the covers, Do optimistically evaluates the\n// script using the EVALSHA command. If the command fails because the script is\n// not loaded, then Do evaluates the script using the EVAL command (thus\n// causing the script to load).\nfunc (s *Script) Do(c Conn, keysAndArgs ...interface{}) (interface{}, error) {\n\tv, err := c.Do(\"EVALSHA\", s.args(s.hash, keysAndArgs)...)\n\tif e, ok := err.(Error); ok && strings.HasPrefix(string(e), \"NOSCRIPT \") {\n\t\tv, err = c.Do(\"EVAL\", s.args(s.src, keysAndArgs)...)\n\t}\n\treturn v, err\n}\n\n// SendHash evaluates the script without waiting for the reply. The script is\n// evaluated with the EVALSHA command. The application must ensure that the\n// script is loaded by a previous call to Send, Do or Load methods.\nfunc (s *Script) SendHash(c Conn, keysAndArgs ...interface{}) error {\n\treturn c.Send(\"EVALSHA\", s.args(s.hash, keysAndArgs)...)\n}\n\n// Send evaluates the script without waiting for the reply.\nfunc (s *Script) Send(c Conn, keysAndArgs ...interface{}) error {\n\treturn c.Send(\"EVAL\", s.args(s.src, keysAndArgs)...)\n}\n\n// Load loads the script without evaluating it.\nfunc (s *Script) Load(c Conn) error {\n\t_, err := c.Do(\"SCRIPT\", \"LOAD\", s.src)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/script_test.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis_test\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/redis\"\n)\n\nvar (\n\t// These variables are declared at package level to remove distracting\n\t// details from the examples.\n\tc     redis.Conn\n\treply interface{}\n\terr   error\n)\n\nfunc ExampleScript() {\n\t// Initialize a package-level variable with a script.\n\tvar getScript = redis.NewScript(1, `return redis.call('get', KEYS[1])`)\n\n\t// In a function, use the script Do method to evaluate the script. The Do\n\t// method optimistically uses the EVALSHA command. If the script is not\n\t// loaded, then the Do method falls back to the EVAL command.\n\treply, err = getScript.Do(c, \"foo\")\n}\n\nfunc TestScript(t *testing.T) {\n\tc, err := redis.DialDefaultServer()\n\tif err != nil {\n\t\tt.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer c.Close()\n\n\t// To test fall back in Do, we make script unique by adding comment with current time.\n\tscript := fmt.Sprintf(\"--%d\\nreturn {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}\", time.Now().UnixNano())\n\ts := redis.NewScript(2, script)\n\treply := []interface{}{[]byte(\"key1\"), []byte(\"key2\"), []byte(\"arg1\"), []byte(\"arg2\")}\n\n\tv, err := s.Do(c, \"key1\", \"key2\", \"arg1\", \"arg2\")\n\tif err != nil {\n\t\tt.Errorf(\"s.Do(c, ...) returned %v\", err)\n\t}\n\n\tif !reflect.DeepEqual(v, reply) {\n\t\tt.Errorf(\"s.Do(c, ..); = %v, want %v\", v, reply)\n\t}\n\n\terr = s.Load(c)\n\tif err != nil {\n\t\tt.Errorf(\"s.Load(c) returned %v\", err)\n\t}\n\n\terr = s.SendHash(c, \"key1\", \"key2\", \"arg1\", \"arg2\")\n\tif err != nil {\n\t\tt.Errorf(\"s.SendHash(c, ...) returned %v\", err)\n\t}\n\n\terr = c.Flush()\n\tif err != nil {\n\t\tt.Errorf(\"c.Flush() returned %v\", err)\n\t}\n\n\tv, err = c.Receive()\n\tif !reflect.DeepEqual(v, reply) {\n\t\tt.Errorf(\"s.SendHash(c, ..); c.Receive() = %v, want %v\", v, reply)\n\t}\n\n\terr = s.Send(c, \"key1\", \"key2\", \"arg1\", \"arg2\")\n\tif err != nil {\n\t\tt.Errorf(\"s.Send(c, ...) returned %v\", err)\n\t}\n\n\terr = c.Flush()\n\tif err != nil {\n\t\tt.Errorf(\"c.Flush() returned %v\", err)\n\t}\n\n\tv, err = c.Receive()\n\tif !reflect.DeepEqual(v, reply) {\n\t\tt.Errorf(\"s.Send(c, ..); c.Receive() = %v, want %v\", v, reply)\n\t}\n\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/test_test.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc SetNowFunc(f func() time.Time) {\n\tnowFunc = f\n}\n\nvar (\n\tErrNegativeInt = errNegativeInt\n\n\tserverPath     = flag.String(\"redis-server\", \"redis-server\", \"Path to redis server binary\")\n\tserverBasePort = flag.Int(\"redis-port\", 16379, \"Beginning of port range for test servers\")\n\tserverLogName  = flag.String(\"redis-log\", \"\", \"Write Redis server logs to `filename`\")\n\tserverLog      = ioutil.Discard\n\n\tdefaultServerMu  sync.Mutex\n\tdefaultServer    *Server\n\tdefaultServerErr error\n)\n\ntype Server struct {\n\tname string\n\tcmd  *exec.Cmd\n\tdone chan struct{}\n}\n\nfunc NewServer(name string, args ...string) (*Server, error) {\n\ts := &Server{\n\t\tname: name,\n\t\tcmd:  exec.Command(*serverPath, args...),\n\t\tdone: make(chan struct{}),\n\t}\n\n\tr, err := s.cmd.StdoutPipe()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = s.cmd.Start()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tready := make(chan error, 1)\n\tgo s.watch(r, ready)\n\n\tselect {\n\tcase err = <-ready:\n\tcase <-time.After(time.Second * 10):\n\t\terr = errors.New(\"timeout waiting for server to start\")\n\t}\n\n\tif err != nil {\n\t\ts.Stop()\n\t\treturn nil, err\n\t}\n\n\treturn s, nil\n}\n\nfunc (s *Server) watch(r io.Reader, ready chan error) {\n\tfmt.Fprintf(serverLog, \"%d START %s \\n\", s.cmd.Process.Pid, s.name)\n\tvar listening bool\n\tvar text string\n\tscn := bufio.NewScanner(r)\n\tfor scn.Scan() {\n\t\ttext = scn.Text()\n\t\tfmt.Fprintf(serverLog, \"%s\\n\", text)\n\t\tif !listening {\n\t\t\tif strings.Contains(text, \"The server is now ready to accept connections on port\") {\n\t\t\t\tlistening = true\n\t\t\t\tready <- nil\n\t\t\t}\n\t\t}\n\t}\n\tif !listening {\n\t\tready <- fmt.Errorf(\"server exited: %s\", text)\n\t}\n\ts.cmd.Wait()\n\tfmt.Fprintf(serverLog, \"%d STOP %s \\n\", s.cmd.Process.Pid, s.name)\n\tclose(s.done)\n}\n\nfunc (s *Server) Stop() {\n\ts.cmd.Process.Signal(os.Interrupt)\n\t<-s.done\n}\n\n// stopDefaultServer stops the server created by DialDefaultServer.\nfunc stopDefaultServer() {\n\tdefaultServerMu.Lock()\n\tdefer defaultServerMu.Unlock()\n\tif defaultServer != nil {\n\t\tdefaultServer.Stop()\n\t\tdefaultServer = nil\n\t}\n}\n\n// startDefaultServer starts the default server if not already running.\nfunc startDefaultServer() error {\n\tdefaultServerMu.Lock()\n\tdefer defaultServerMu.Unlock()\n\tif defaultServer != nil || defaultServerErr != nil {\n\t\treturn defaultServerErr\n\t}\n\tdefaultServer, defaultServerErr = NewServer(\n\t\t\"default\",\n\t\t\"--port\", strconv.Itoa(*serverBasePort),\n\t\t\"--save\", \"\",\n\t\t\"--appendonly\", \"no\")\n\treturn defaultServerErr\n}\n\n// DialDefaultServer starts the test server if not already started and dials a\n// connection to the server.\nfunc DialDefaultServer() (Conn, error) {\n\tif err := startDefaultServer(); err != nil {\n\t\treturn nil, err\n\t}\n\tc, err := Dial(\"tcp\", fmt.Sprintf(\":%d\", *serverBasePort), DialReadTimeout(1*time.Second), DialWriteTimeout(1*time.Second))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.Do(\"FLUSHDB\")\n\treturn c, nil\n}\n\nfunc TestMain(m *testing.M) {\n\tos.Exit(func() int {\n\t\tflag.Parse()\n\n\t\tvar f *os.File\n\t\tif *serverLogName != \"\" {\n\t\t\tvar err error\n\t\t\tf, err = os.OpenFile(*serverLogName, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0600)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"Error opening redis-log: %v\\n\", err)\n\t\t\t\treturn 1\n\t\t\t}\n\t\t\tdefer f.Close()\n\t\t\tserverLog = f\n\t\t}\n\n\t\tdefer stopDefaultServer()\n\n\t\treturn m.Run()\n\t}())\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redis/zpop_example_test.go",
    "content": "// Copyright 2013 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis_test\n\nimport (\n\t\"fmt\"\n\t\"github.com/garyburd/redigo/redis\"\n)\n\n// zpop pops a value from the ZSET key using WATCH/MULTI/EXEC commands.\nfunc zpop(c redis.Conn, key string) (result string, err error) {\n\n\tdefer func() {\n\t\t// Return connection to normal state on error.\n\t\tif err != nil {\n\t\t\tc.Do(\"DISCARD\")\n\t\t}\n\t}()\n\n\t// Loop until transaction is successful.\n\tfor {\n\t\tif _, err := c.Do(\"WATCH\", key); err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\tmembers, err := redis.Strings(c.Do(\"ZRANGE\", key, 0, 0))\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif len(members) != 1 {\n\t\t\treturn \"\", redis.ErrNil\n\t\t}\n\n\t\tc.Send(\"MULTI\")\n\t\tc.Send(\"ZREM\", key, members[0])\n\t\tqueued, err := c.Do(\"EXEC\")\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\tif queued != nil {\n\t\t\tresult = members[0]\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn result, nil\n}\n\n// zpopScript pops a value from a ZSET.\nvar zpopScript = redis.NewScript(1, `\n    local r = redis.call('ZRANGE', KEYS[1], 0, 0)\n    if r ~= nil then\n        r = r[1]\n        redis.call('ZREM', KEYS[1], r)\n    end\n    return r\n`)\n\n// This example implements ZPOP as described at\n// http://redis.io/topics/transactions using WATCH/MULTI/EXEC and scripting.\nfunc Example_zpop() {\n\tc, err := dial()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tdefer c.Close()\n\n\t// Add test data using a pipeline.\n\n\tfor i, member := range []string{\"red\", \"blue\", \"green\"} {\n\t\tc.Send(\"ZADD\", \"zset\", i, member)\n\t}\n\tif _, err := c.Do(\"\"); err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\n\t// Pop using WATCH/MULTI/EXEC\n\n\tv, err := zpop(c, \"zset\")\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tfmt.Println(v)\n\n\t// Pop using a script.\n\n\tv, err = redis.String(zpopScript.Do(c, \"zset\"))\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tfmt.Println(v)\n\n\t// Output:\n\t// red\n\t// blue\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redisx/connmux.go",
    "content": "// Copyright 2014 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redisx\n\nimport (\n\t\"errors\"\n\t\"sync\"\n\n\t\"github.com/garyburd/redigo/internal\"\n\t\"github.com/garyburd/redigo/redis\"\n)\n\n// ConnMux multiplexes one or more connections to a single underlying\n// connection. The ConnMux connections do not support concurrency, commands\n// that associate server side state with the connection or commands that put\n// the connection in a special mode.\ntype ConnMux struct {\n\tc redis.Conn\n\n\tsendMu sync.Mutex\n\tsendID uint\n\n\trecvMu   sync.Mutex\n\trecvID   uint\n\trecvWait map[uint]chan struct{}\n}\n\nfunc NewConnMux(c redis.Conn) *ConnMux {\n\treturn &ConnMux{c: c, recvWait: make(map[uint]chan struct{})}\n}\n\n// Get gets a connection. The application must close the returned connection.\nfunc (p *ConnMux) Get() redis.Conn {\n\tc := &muxConn{p: p}\n\tc.ids = c.buf[:0]\n\treturn c\n}\n\n// Close closes the underlying connection.\nfunc (p *ConnMux) Close() error {\n\treturn p.c.Close()\n}\n\ntype muxConn struct {\n\tp   *ConnMux\n\tids []uint\n\tbuf [8]uint\n}\n\nfunc (c *muxConn) send(flush bool, cmd string, args ...interface{}) error {\n\tif internal.LookupCommandInfo(cmd).Set != 0 {\n\t\treturn errors.New(\"command not supported by mux pool\")\n\t}\n\tp := c.p\n\tp.sendMu.Lock()\n\tid := p.sendID\n\tc.ids = append(c.ids, id)\n\tp.sendID++\n\terr := p.c.Send(cmd, args...)\n\tif flush {\n\t\terr = p.c.Flush()\n\t}\n\tp.sendMu.Unlock()\n\treturn err\n}\n\nfunc (c *muxConn) Send(cmd string, args ...interface{}) error {\n\treturn c.send(false, cmd, args...)\n}\n\nfunc (c *muxConn) Flush() error {\n\tp := c.p\n\tp.sendMu.Lock()\n\terr := p.c.Flush()\n\tp.sendMu.Unlock()\n\treturn err\n}\n\nfunc (c *muxConn) Receive() (interface{}, error) {\n\tif len(c.ids) == 0 {\n\t\treturn nil, errors.New(\"mux pool underflow\")\n\t}\n\n\tid := c.ids[0]\n\tc.ids = c.ids[1:]\n\tif len(c.ids) == 0 {\n\t\tc.ids = c.buf[:0]\n\t}\n\n\tp := c.p\n\tp.recvMu.Lock()\n\tif p.recvID != id {\n\t\tch := make(chan struct{})\n\t\tp.recvWait[id] = ch\n\t\tp.recvMu.Unlock()\n\t\t<-ch\n\t\tp.recvMu.Lock()\n\t\tif p.recvID != id {\n\t\t\tpanic(\"out of sync\")\n\t\t}\n\t}\n\n\tv, err := p.c.Receive()\n\n\tid++\n\tp.recvID = id\n\tch, ok := p.recvWait[id]\n\tif ok {\n\t\tdelete(p.recvWait, id)\n\t}\n\tp.recvMu.Unlock()\n\tif ok {\n\t\tch <- struct{}{}\n\t}\n\n\treturn v, err\n}\n\nfunc (c *muxConn) Close() error {\n\tvar err error\n\tif len(c.ids) == 0 {\n\t\treturn nil\n\t}\n\tc.Flush()\n\tfor _ = range c.ids {\n\t\t_, err = c.Receive()\n\t}\n\treturn err\n}\n\nfunc (c *muxConn) Do(cmd string, args ...interface{}) (interface{}, error) {\n\tif err := c.send(true, cmd, args...); err != nil {\n\t\treturn nil, err\n\t}\n\treturn c.Receive()\n}\n\nfunc (c *muxConn) Err() error {\n\treturn c.p.c.Err()\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redisx/connmux_test.go",
    "content": "// Copyright 2014 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redisx_test\n\nimport (\n\t\"net/textproto\"\n\t\"sync\"\n\t\"testing\"\n\n\t\"github.com/garyburd/redigo/internal/redistest\"\n\t\"github.com/garyburd/redigo/redis\"\n\t\"github.com/garyburd/redigo/redisx\"\n)\n\nfunc TestConnMux(t *testing.T) {\n\tc, err := redistest.Dial()\n\tif err != nil {\n\t\tt.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tm := redisx.NewConnMux(c)\n\tdefer m.Close()\n\n\tc1 := m.Get()\n\tc2 := m.Get()\n\tc1.Send(\"ECHO\", \"hello\")\n\tc2.Send(\"ECHO\", \"world\")\n\tc1.Flush()\n\tc2.Flush()\n\ts, err := redis.String(c1.Receive())\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif s != \"hello\" {\n\t\tt.Fatalf(\"echo returned %q, want %q\", s, \"hello\")\n\t}\n\ts, err = redis.String(c2.Receive())\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif s != \"world\" {\n\t\tt.Fatalf(\"echo returned %q, want %q\", s, \"world\")\n\t}\n\tc1.Close()\n\tc2.Close()\n}\n\nfunc TestConnMuxClose(t *testing.T) {\n\tc, err := redistest.Dial()\n\tif err != nil {\n\t\tt.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tm := redisx.NewConnMux(c)\n\tdefer m.Close()\n\n\tc1 := m.Get()\n\tc2 := m.Get()\n\n\tif err := c1.Send(\"ECHO\", \"hello\"); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif err := c1.Close(); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif err := c2.Send(\"ECHO\", \"world\"); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif err := c2.Flush(); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\ts, err := redis.String(c2.Receive())\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif s != \"world\" {\n\t\tt.Fatalf(\"echo returned %q, want %q\", s, \"world\")\n\t}\n\tc2.Close()\n}\n\nfunc BenchmarkConn(b *testing.B) {\n\tb.StopTimer()\n\tc, err := redistest.Dial()\n\tif err != nil {\n\t\tb.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer c.Close()\n\tb.StartTimer()\n\n\tfor i := 0; i < b.N; i++ {\n\t\tif _, err := c.Do(\"PING\"); err != nil {\n\t\t\tb.Fatal(err)\n\t\t}\n\t}\n}\n\nfunc BenchmarkConnMux(b *testing.B) {\n\tb.StopTimer()\n\tc, err := redistest.Dial()\n\tif err != nil {\n\t\tb.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tm := redisx.NewConnMux(c)\n\tdefer m.Close()\n\n\tb.StartTimer()\n\n\tfor i := 0; i < b.N; i++ {\n\t\tc := m.Get()\n\t\tif _, err := c.Do(\"PING\"); err != nil {\n\t\t\tb.Fatal(err)\n\t\t}\n\t\tc.Close()\n\t}\n}\n\nfunc BenchmarkPool(b *testing.B) {\n\tb.StopTimer()\n\n\tp := redis.Pool{Dial: redistest.Dial, MaxIdle: 1}\n\tdefer p.Close()\n\n\t// Fill the pool.\n\tc := p.Get()\n\tif err := c.Err(); err != nil {\n\t\tb.Fatal(err)\n\t}\n\tc.Close()\n\n\tb.StartTimer()\n\n\tfor i := 0; i < b.N; i++ {\n\t\tc := p.Get()\n\t\tif _, err := c.Do(\"PING\"); err != nil {\n\t\t\tb.Fatal(err)\n\t\t}\n\t\tc.Close()\n\t}\n}\n\nconst numConcurrent = 10\n\nfunc BenchmarkConnMuxConcurrent(b *testing.B) {\n\tb.StopTimer()\n\tc, err := redistest.Dial()\n\tif err != nil {\n\t\tb.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer c.Close()\n\n\tm := redisx.NewConnMux(c)\n\n\tvar wg sync.WaitGroup\n\twg.Add(numConcurrent)\n\n\tb.StartTimer()\n\n\tfor i := 0; i < numConcurrent; i++ {\n\t\tgo func() {\n\t\t\tdefer wg.Done()\n\t\t\tfor i := 0; i < b.N; i++ {\n\t\t\t\tc := m.Get()\n\t\t\t\tif _, err := c.Do(\"PING\"); err != nil {\n\t\t\t\t\tb.Fatal(err)\n\t\t\t\t}\n\t\t\t\tc.Close()\n\t\t\t}\n\t\t}()\n\t}\n\twg.Wait()\n}\n\nfunc BenchmarkPoolConcurrent(b *testing.B) {\n\tb.StopTimer()\n\n\tp := redis.Pool{Dial: redistest.Dial, MaxIdle: numConcurrent}\n\tdefer p.Close()\n\n\t// Fill the pool.\n\tconns := make([]redis.Conn, numConcurrent)\n\tfor i := range conns {\n\t\tc := p.Get()\n\t\tif err := c.Err(); err != nil {\n\t\t\tb.Fatal(err)\n\t\t}\n\t\tconns[i] = c\n\t}\n\tfor _, c := range conns {\n\t\tc.Close()\n\t}\n\n\tvar wg sync.WaitGroup\n\twg.Add(numConcurrent)\n\n\tb.StartTimer()\n\n\tfor i := 0; i < numConcurrent; i++ {\n\t\tgo func() {\n\t\t\tdefer wg.Done()\n\t\t\tfor i := 0; i < b.N; i++ {\n\t\t\t\tc := p.Get()\n\t\t\t\tif _, err := c.Do(\"PING\"); err != nil {\n\t\t\t\t\tb.Fatal(err)\n\t\t\t\t}\n\t\t\t\tc.Close()\n\t\t\t}\n\t\t}()\n\t}\n\twg.Wait()\n}\n\nfunc BenchmarkPipelineConcurrency(b *testing.B) {\n\tb.StopTimer()\n\tc, err := redistest.Dial()\n\tif err != nil {\n\t\tb.Fatalf(\"error connection to database, %v\", err)\n\t}\n\tdefer c.Close()\n\n\tvar wg sync.WaitGroup\n\twg.Add(numConcurrent)\n\n\tvar pipeline textproto.Pipeline\n\n\tb.StartTimer()\n\n\tfor i := 0; i < numConcurrent; i++ {\n\t\tgo func() {\n\t\t\tdefer wg.Done()\n\t\t\tfor i := 0; i < b.N; i++ {\n\t\t\t\tid := pipeline.Next()\n\t\t\t\tpipeline.StartRequest(id)\n\t\t\t\tc.Send(\"PING\")\n\t\t\t\tc.Flush()\n\t\t\t\tpipeline.EndRequest(id)\n\t\t\t\tpipeline.StartResponse(id)\n\t\t\t\t_, err := c.Receive()\n\t\t\t\tif err != nil {\n\t\t\t\t\tb.Fatal(err)\n\t\t\t\t}\n\t\t\t\tpipeline.EndResponse(id)\n\t\t\t}\n\t\t}()\n\t}\n\twg.Wait()\n}\n"
  },
  {
    "path": "vendor/github.com/garyburd/redigo/redisx/doc.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Package redisx contains experimental features for Redigo. Features in this\n// package may be modified or deleted at any time.\npackage redisx // import \"github.com/garyburd/redigo/redisx\"\n"
  },
  {
    "path": "vendor/github.com/imroc/log/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2016 roc\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/imroc/log/README.md",
    "content": "log\n==============\nlog is a logging framework of Go. see [API](https://godoc.org/github.com/imroc/log).\n\n## Features\n * light weight\n * easy to use\n * level logging support\n * flexible\n\n## Quick Start\n\n##### Installation\n``` sh\ngo get github.com/imroc/log\n```\n##### Simple Usage\n``` go\nimport (\n\t\"github.com/imroc/log\"\n)\n\nfunc main() {\n    // DEBUG < INFO < WARN < ERROR < FATAL\n    log.SetLevel(log.WARN) // level DEBUG and INFO will not output\n\tlog.Debug(\"%s message\", \"debug\")\n\tlog.Info(\"%s message\", \"info\")\n\tlog.Warn(\"%s message\", \"warn\")\n\tlog.Error(\"%s message\", \"error\")\n\tlog.Fatal(\"%s message\", \"fatal\")\n}\n```\noutput:\n``` \n2016/10/04 14:38:38 [WARN] warn message\n2016/10/04 14:38:38 [EROR] error message\n2016/10/04 14:38:38 [FATL] fatal message\n```\n##### More Control\n``` go\nfile, _ := os.OpenFile(\"test.log\", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)\nlog.Set(log.INFO, file, log.Llongfile|log.LstdFlags)\nlog.Debug(\"%s message\", \"debug\")\nlog.Info(\"%s message\", \"info\")\nlog.Warn(\"%s message\", \"warn\")\nlog.Error(\"%s message\", \"error\")\nlog.Fatal(\"%s message\", \"fatal\")\n```\noutput to test.log:\n```\n2016/10/04 15:04:00 [INFO] /home/cpwl/go/dev/src/test/test.go:13: info message\n2016/10/04 15:04:00 [WARN] /home/cpwl/go/dev/src/test/test.go:14: warn message\n2016/10/04 15:04:00 [EROR] /home/cpwl/go/dev/src/test/test.go:15: error message\n2016/10/04 15:04:00 [FATL] /home/cpwl/go/dev/src/test/test.go:16: fatal message\n```\n## LICENSE\nlog is is distributed under the terms of the MIT License.\n"
  },
  {
    "path": "vendor/github.com/imroc/log/log.go",
    "content": "package log\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\"\n\t\"sync\"\n\t\"time\"\n)\n\n// These flags define which text to prefix to each log entry generated by the Logger.\nconst (\n\t// Bits or'ed together to control what's printed.\n\t// There is no control over the order they appear (the order listed\n\t// here) or the format they present (as described in the comments).\n\t// The prefix is followed by a colon only when Llongfile or Lshortfile\n\t// is specified.\n\t// For example, flags Ldate | Ltime (or LstdFlags) produce,\n\t//\t2009/01/23 01:23:23 message\n\t// while flags Ldate | Ltime | Lmicroseconds | Llongfile produce,\n\t//\t2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message\n\tLdate         = 1 << iota     // the date in the local time zone: 2009/01/23\n\tLtime                         // the time in the local time zone: 01:23:23\n\tLmicroseconds                 // microsecond resolution: 01:23:23.123123.  assumes Ltime.\n\tLlongfile                     // full file name and line number: /a/b/c/d.go:23\n\tLshortfile                    // final file name element and line number: d.go:23. overrides Llongfile\n\tLUTC                          // if Ldate or Ltime is set, use UTC rather than the local time zone\n\tLstdFlags     = Ldate | Ltime // initial values for the standard logger\n)\n\n// log levels\nconst (\n\tDEBUG int = iota\n\tINFO\n\tWARN\n\tERROR\n\tFATAL\n)\n\n// Log level strings\nvar (\n\tlevelStrings = [...]string{\"[DEBG]\", \"[INFO]\", \"[WARN]\", \"[EROR]\", \"[FATL]\"}\n)\n\n// A Logger represents an active logging object that generates lines of\n// output to an io.Writer. Each logging operation makes a single call to\n// the Writer's Write method. A Logger can be used simultaneously from\n// multiple goroutines; it guarantees to serialize access to the Writer.\ntype Logger struct {\n\tlevel int        // log level\n\tmu    sync.Mutex // ensures atomic writes; protects the following fields\n\tflag  int        // properties\n\tout   io.Writer  // destination for output\n\tbuf   []byte     // for accumulating text to write\n}\n\n// Set sets the wirter,log level and flags.\nfunc Set(level int, out io.Writer, flag int) {\n\tif out == nil || level < DEBUG || level > FATAL {\n\t\tpanic(\"error logger arguments\")\n\t}\n\tstd = Logger{out: out, level: level, flag: flag}\n}\n\nvar std = Logger{out: os.Stderr, level: DEBUG, flag: LstdFlags}\n\n// Cheap integer to fixed-width decimal ASCII.  Give a negative width to avoid zero-padding.\nfunc itoa(buf *[]byte, i int, wid int) {\n\t// Assemble decimal in reverse order.\n\tvar b [20]byte\n\tbp := len(b) - 1\n\tfor i >= 10 || wid > 1 {\n\t\twid--\n\t\tq := i / 10\n\t\tb[bp] = byte('0' + i - q*10)\n\t\tbp--\n\t\ti = q\n\t}\n\t// i < 10\n\tb[bp] = byte('0' + i)\n\t*buf = append(*buf, b[bp:]...)\n}\n\nfunc (l *Logger) formatHeader(buf *[]byte, t time.Time, level string, file string, line int) {\n\tif l.flag&LUTC != 0 {\n\t\tt = t.UTC()\n\t}\n\tif l.flag&(Ldate|Ltime|Lmicroseconds) != 0 {\n\t\tif l.flag&Ldate != 0 {\n\t\t\tyear, month, day := t.Date()\n\t\t\titoa(buf, year, 4)\n\t\t\t*buf = append(*buf, '/')\n\t\t\titoa(buf, int(month), 2)\n\t\t\t*buf = append(*buf, '/')\n\t\t\titoa(buf, day, 2)\n\t\t\t*buf = append(*buf, ' ')\n\t\t}\n\t\tif l.flag&(Ltime|Lmicroseconds) != 0 {\n\t\t\thour, min, sec := t.Clock()\n\t\t\titoa(buf, hour, 2)\n\t\t\t*buf = append(*buf, ':')\n\t\t\titoa(buf, min, 2)\n\t\t\t*buf = append(*buf, ':')\n\t\t\titoa(buf, sec, 2)\n\t\t\tif l.flag&Lmicroseconds != 0 {\n\t\t\t\t*buf = append(*buf, '.')\n\t\t\t\titoa(buf, t.Nanosecond()/1e3, 6)\n\t\t\t}\n\t\t\t*buf = append(*buf, ' ')\n\t\t}\n\t}\n\n\t*buf = append(*buf, level...)\n\t*buf = append(*buf, ' ')\n\n\tif l.flag&(Lshortfile|Llongfile) != 0 {\n\t\tif l.flag&Lshortfile != 0 {\n\t\t\tshort := file\n\t\t\tfor i := len(file) - 1; i > 0; i-- {\n\t\t\t\tif file[i] == '/' {\n\t\t\t\t\tshort = file[i+1:]\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tfile = short\n\t\t}\n\t\t*buf = append(*buf, file...)\n\t\t*buf = append(*buf, ':')\n\t\titoa(buf, line, -1)\n\t\t*buf = append(*buf, \": \"...)\n\t}\n}\n\n// Output outputs the string of lv level to the writer.\nfunc (l *Logger) Output(lv int, s string) error {\n\tnow := time.Now() // get this early.\n\tvar file string\n\tvar line int\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\tif l.flag&(Lshortfile|Llongfile) != 0 {\n\t\t// release lock while getting caller info - it's expensive.\n\t\tl.mu.Unlock()\n\t\tvar ok bool\n\t\t_, file, line, ok = runtime.Caller(2)\n\t\tif !ok {\n\t\t\tfile = \"???\"\n\t\t\tline = 0\n\t\t}\n\t\tl.mu.Lock()\n\t}\n\tl.buf = l.buf[:0]\n\tl.formatHeader(&l.buf, now, levelStrings[lv], file, line)\n\tl.buf = append(l.buf, s...)\n\tif len(s) == 0 || s[len(s)-1] != '\\n' {\n\t\tl.buf = append(l.buf, '\\n')\n\t}\n\t_, err := l.out.Write(l.buf)\n\treturn err\n}\n\n// SetOutput sets the output destination for the standard logger.\nfunc SetOutput(w io.Writer) {\n\tif w == nil {\n\t\tpanic(\"output can not be nil\")\n\t}\n\tstd.mu.Lock()\n\tdefer std.mu.Unlock()\n\tstd.out = w\n}\n\n//SetLevel sets the log level for the standard logger.\nfunc SetLevel(level int) {\n\tif level < DEBUG || level > FATAL {\n\t\tpanic(\"wrong log level\")\n\t}\n\tstd.mu.Lock()\n\tdefer std.mu.Unlock()\n\tstd.level = level\n\n}\n\n// SetFlags sets the output flags for the standard logger.\nfunc SetFlags(flag int) {\n\tstd.flag = flag\n}\n\n// Debug output the debug info if currrent level is not less than DEBUG.\nfunc Debug(format string, a ...interface{}) {\n\tif DEBUG < std.level {\n\t\treturn\n\t}\n\tstd.Output(DEBUG, fmt.Sprintf(format, a...))\n}\n\n// Info output the debug info if currrent level is not less than INFO.\nfunc Info(format string, a ...interface{}) {\n\tif INFO < std.level {\n\t\treturn\n\t}\n\tstd.Output(INFO, fmt.Sprintf(format, a...))\n}\n\n// Warn output the debug info if currrent level is not less than WARN.\nfunc Warn(format string, a ...interface{}) {\n\tif WARN < std.level {\n\t\treturn\n\t}\n\tstd.Output(WARN, fmt.Sprintf(format, a...))\n}\n\n// Error output the debug info if currrent level is not less than ERROR.\nfunc Error(format string, a ...interface{}) {\n\tif ERROR < std.level {\n\t\treturn\n\t}\n\tstd.Output(ERROR, fmt.Sprintf(format, a...))\n}\n\n// Fatal output the debug info if currrent level is not less than Fatal.\nfunc Fatal(format string, a ...interface{}) {\n\tif FATAL < std.level {\n\t\treturn\n\t}\n\tstd.Output(FATAL, fmt.Sprintf(format, a...))\n}\n"
  },
  {
    "path": "xf/README.md",
    "content": "xf\n==============\nxf 是科大讯飞语音离线合成SDK的go封装.\n\n##注意\n使用该包的程序依赖 lib/libmsc.so 动态链接库文件，将其放入某路径并指定环境变量 LD_LIBRARY_PATH ,如：export LD_LIBRARY_PATH = /usr/local/lib\n\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/all__0_8js.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual/search/all_0.js 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_25539194184bab781b1c7ecd67774cd8.html\">search</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">变量</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">all_0.js 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\n变量</h2></td></tr>\n<tr class=\"memitem:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"all__0_8js.html#ad01a7523f103d6242ef9b0451861231e\">searchData</a></td></tr>\n<tr class=\"separator:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">变量说明</h2>\n<a class=\"anchor\" id=\"ad01a7523f103d6242ef9b0451861231e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var searchData</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<b>初始值:</b><div class=\"fragment\"><div class=\"line\">=</div>\n<div class=\"line\">[</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;msp_5fcmn_2eh&#39;</span>,[<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html&#39;</span>,1,<span class=\"stringliteral\">&#39;&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;mspgetparam&#39;</span>,[<span class=\"stringliteral\">&#39;MSPGetParam&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#a4d3fa0aad5e761cb2a2afe30ae2a9714&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;mspgetversion&#39;</span>,[<span class=\"stringliteral\">&#39;MSPGetVersion&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#a632008aeddf5eba09555920ce38686a4&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;msplogin&#39;</span>,[<span class=\"stringliteral\">&#39;MSPLogin&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#a137acfe684fe46cbe5baf19f7d4a7fcc&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;msplogout&#39;</span>,[<span class=\"stringliteral\">&#39;MSPLogout&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#a1e0f72cd113b4578afdf3d16ab34463e&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;mspsearch&#39;</span>,[<span class=\"stringliteral\">&#39;MSPSearch&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#ae7be2dd2c6ee318524621b952998c14d&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;mspuploaddata&#39;</span>,[<span class=\"stringliteral\">&#39;MSPUploadData&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#ada276fa6db4a66342d951820020e4e8f&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]]</div>\n<div class=\"line\">]</div>\n</div><!-- fragment -->\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/all__1_8js.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual/search/all_1.js 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_25539194184bab781b1c7ecd67774cd8.html\">search</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">变量</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">all_1.js 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\n变量</h2></td></tr>\n<tr class=\"memitem:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"all__1_8js.html#ad01a7523f103d6242ef9b0451861231e\">searchData</a></td></tr>\n<tr class=\"separator:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">变量说明</h2>\n<a class=\"anchor\" id=\"ad01a7523f103d6242ef9b0451861231e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var searchData</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<b>初始值:</b><div class=\"fragment\"><div class=\"line\">=</div>\n<div class=\"line\">[</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisr_2eh&#39;</span>,[<span class=\"stringliteral\">&#39;qisr.h&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html&#39;</span>,1,<span class=\"stringliteral\">&#39;&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisraudiowrite&#39;</span>,[<span class=\"stringliteral\">&#39;QISRAudioWrite&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html#a47fd2588fe834fa2d51fef1961d7aef4&#39;</span>,1,<span class=\"stringliteral\">&#39;qisr.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisrgetparam&#39;</span>,[<span class=\"stringliteral\">&#39;QISRGetParam&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html#a2081e3cad9a8155c15790a2476be7044&#39;</span>,1,<span class=\"stringliteral\">&#39;qisr.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisrgetresult&#39;</span>,[<span class=\"stringliteral\">&#39;QISRGetResult&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html#a2e7880db4792266a4d1439238c0b2c1b&#39;</span>,1,<span class=\"stringliteral\">&#39;qisr.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisrsessionbegin&#39;</span>,[<span class=\"stringliteral\">&#39;QISRSessionBegin&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html#aaec4a5779275e07c4f7405ed8d739416&#39;</span>,1,<span class=\"stringliteral\">&#39;qisr.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisrsessionend&#39;</span>,[<span class=\"stringliteral\">&#39;QISRSessionEnd&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html#ab50c4114e032100c4093ddd51329fecc&#39;</span>,1,<span class=\"stringliteral\">&#39;qisr.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfv_2eh&#39;</span>,[<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html&#39;</span>,1,<span class=\"stringliteral\">&#39;&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfvdatawrite&#39;</span>,[<span class=\"stringliteral\">&#39;QMFVDataWrite&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html#a081a01b2add2dfac3010ec7cd8ba5eac&#39;</span>,1,<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfvgetparam&#39;</span>,[<span class=\"stringliteral\">&#39;QMFVGetParam&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html#a7174d943c2f1691f6a8c717429d43f8d&#39;</span>,1,<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfvgetresult&#39;</span>,[<span class=\"stringliteral\">&#39;QMFVGetResult&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html#aa87716ad6b28326982626c0c6a6ffcbd&#39;</span>,1,<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfvsessionbegin&#39;</span>,[<span class=\"stringliteral\">&#39;QMFVSessionBegin&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html#adbe23b402d4c50b4c06f47ca26253be5&#39;</span>,1,<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfvsessionend&#39;</span>,[<span class=\"stringliteral\">&#39;QMFVSessionEnd&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html#ad4ea72dd39285348cf26c627d67c6b65&#39;</span>,1,<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qtts_2eh&#39;</span>,[<span class=\"stringliteral\">&#39;qtts.h&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html&#39;</span>,1,<span class=\"stringliteral\">&#39;&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qttsaudioget&#39;</span>,[<span class=\"stringliteral\">&#39;QTTSAudioGet&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html#a4e4f6bed4b9e4ea553aa00ccf539c22a&#39;</span>,1,<span class=\"stringliteral\">&#39;qtts.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qttsgetparam&#39;</span>,[<span class=\"stringliteral\">&#39;QTTSGetParam&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html#a0812612ff738a828490e4e3db59767e8&#39;</span>,1,<span class=\"stringliteral\">&#39;qtts.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qttssessionbegin&#39;</span>,[<span class=\"stringliteral\">&#39;QTTSSessionBegin&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html#a3fba4ad9599445073335851cc9479542&#39;</span>,1,<span class=\"stringliteral\">&#39;qtts.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qttssessionend&#39;</span>,[<span class=\"stringliteral\">&#39;QTTSSessionEnd&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html#a75d5047a2a889dbd890d116a6d0b550a&#39;</span>,1,<span class=\"stringliteral\">&#39;qtts.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qttstextput&#39;</span>,[<span class=\"stringliteral\">&#39;QTTSTextPut&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html#a5b7d146d6a35341d4d73efd720ae987b&#39;</span>,1,<span class=\"stringliteral\">&#39;qtts.h&#39;</span>]]]</div>\n<div class=\"line\">]</div>\n</div><!-- fragment -->\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/dir_25539194184bab781b1c7ecd67774cd8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual/search 目录参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_25539194184bab781b1c7ecd67774cd8.html\">search</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">search 目录参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\n文件</h2></td></tr>\n<tr class=\"memitem:all__0_8js\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">文件 &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"all__0_8js.html\">all_0.js</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:all__1_8js\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">文件 &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"all__1_8js.html\">all_1.js</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:files__0_8js\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">文件 &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"files__0_8js.html\">files_0.js</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:files__1_8js\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">文件 &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"files__1_8js.html\">files_1.js</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:functions__0_8js\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">文件 &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"functions__0_8js.html\">functions_0.js</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:functions__1_8js\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">文件 &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"functions__1_8js.html\">functions_1.js</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:search_8js\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">文件 &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"search_8js.html\">search.js</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:searchdata_8js\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">文件 &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"searchdata_8js.html\">searchdata.js</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual 目录参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">iFlytek MSC Reference Manual 目录参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\n目录</h2></td></tr>\n<tr class=\"memitem:dir_25539194184bab781b1c7ecd67774cd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">目录 &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_25539194184bab781b1c7ecd67774cd8.html\">search</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\n文件</h2></td></tr>\n<tr class=\"memitem:dynsections_8js\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">文件 &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dynsections_8js.html\">dynsections.js</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:jquery_8js\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">文件 &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html\">jquery.js</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/doxygen.css",
    "content": "/* The standard CSS for doxygen 1.8.9 */\n\nbody, table, div, p, dl {\n\tfont: 400 14px/22px Roboto,sans-serif;\n}\n\n/* @group Heading Levels */\n\nh1.groupheader {\n\tfont-size: 150%;\n}\n\n.title {\n\tfont: 400 14px/28px Roboto,sans-serif;\n\tfont-size: 150%;\n\tfont-weight: bold;\n\tmargin: 10px 2px;\n}\n\nh2.groupheader {\n\tborder-bottom: 1px solid #879ECB;\n\tcolor: #354C7B;\n\tfont-size: 150%;\n\tfont-weight: normal;\n\tmargin-top: 1.75em;\n\tpadding-top: 8px;\n\tpadding-bottom: 4px;\n\twidth: 100%;\n}\n\nh3.groupheader {\n\tfont-size: 100%;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\t-webkit-transition: text-shadow 0.5s linear;\n\t-moz-transition: text-shadow 0.5s linear;\n\t-ms-transition: text-shadow 0.5s linear;\n\t-o-transition: text-shadow 0.5s linear;\n\ttransition: text-shadow 0.5s linear;\n\tmargin-right: 15px;\n}\n\nh1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {\n\ttext-shadow: 0 0 15px cyan;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\ndiv.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n}\n\np.startli, p.startdd {\n\tmargin-top: 2px;\n}\n\np.starttd {\n\tmargin-top: 0px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n        font-size: 70%;\n        text-align: center;\n}\n\nh3.version {\n        font-size: 90%;\n        text-align: center;\n}\n\ndiv.qindex, div.navtab{\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #3D578C;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #4665A2;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #9CAFD4;\n\tcolor: #ffffff;\n\tborder: 1px double #869DCA;\n}\n\n.contents a.qindexHL:visited {\n        color: #ffffff;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code, a.code:visited, a.line, a.line:visited {\n\tcolor: #4665A2; \n}\n\na.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {\n\tcolor: #4665A2; \n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\npre.fragment {\n        border: 1px solid #C4CFE5;\n        background-color: #FBFCFD;\n        padding: 4px 6px;\n        margin: 4px 8px 4px 2px;\n        overflow: auto;\n        word-wrap: break-word;\n        font-size:  9pt;\n        line-height: 125%;\n        font-family: monospace, fixed;\n        font-size: 105%;\n}\n\ndiv.fragment {\n        padding: 4px 6px;\n        margin: 4px 8px 4px 2px;\n\tbackground-color: #FBFCFD;\n\tborder: 1px solid #C4CFE5;\n}\n\ndiv.line {\n\tfont-family: monospace, fixed;\n        font-size: 13px;\n\tmin-height: 13px;\n\tline-height: 1.0;\n\ttext-wrap: unrestricted;\n\twhite-space: -moz-pre-wrap; /* Moz */\n\twhite-space: -pre-wrap;     /* Opera 4-6 */\n\twhite-space: -o-pre-wrap;   /* Opera 7 */\n\twhite-space: pre-wrap;      /* CSS3  */\n\tword-wrap: break-word;      /* IE 5.5+ */\n\ttext-indent: -53px;\n\tpadding-left: 53px;\n\tpadding-bottom: 0px;\n\tmargin: 0px;\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\ndiv.line.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 10px cyan;\n}\n\n\nspan.lineno {\n\tpadding-right: 4px;\n\ttext-align: right;\n\tborder-right: 2px solid #0F0;\n\tbackground-color: #E8E8E8;\n        white-space: pre;\n}\nspan.lineno a {\n\tbackground-color: #D8D8D8;\n}\n\nspan.lineno a:hover {\n\tbackground-color: #C8C8C8;\n}\n\ndiv.ah, span.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #ffffff;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tpadding: 0.2em;\n\tborder: solid thin #333;\n\tborder-radius: 0.5em;\n\t-webkit-border-radius: .5em;\n\t-moz-border-radius: .5em;\n\tbox-shadow: 2px 2px 3px #999;\n\t-webkit-box-shadow: 2px 2px 3px #999;\n\t-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n\tbackground-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);\n}\n\ndiv.classindex ul {\n        list-style: none;\n        padding-left: 0;\n}\n\ndiv.classindex span.ai {\n        display: inline-block;\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tbackground-color: white;\n\tcolor: black;\n        margin: 0;\n}\n\ndiv.contents {\n\tmargin-top: 10px;\n\tmargin-left: 12px;\n\tmargin-right: 8px;\n}\n\ntd.indexkey {\n\tbackground-color: #EBEFF6;\n\tfont-weight: bold;\n\tborder: 1px solid #C4CFE5;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n        white-space: nowrap;\n        vertical-align: top;\n}\n\ntd.indexvalue {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #C4CFE5;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #EEF1F7;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\t\n}\n\nimg.formulaInl {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n        margin-top: 0px;\n        margin-bottom: 0px;\n        padding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\naddress.footer {\n\ttext-align: right;\n\tpadding-right: 12px;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit { \n\tcolor: #ff00ff \n}\n\nspan.vhdlchar { \n\tcolor: #000000 \n}\n\nspan.vhdlkeyword { \n\tcolor: #700070 \n}\n\nspan.vhdllogic { \n\tcolor: #ff0000 \n}\n\nblockquote {\n        background-color: #F7F8FB;\n        border-left: 2px solid #9CAFD4;\n        margin: 0 24px 0 4px;\n        padding: 0 12px 0 16px;\n}\n\n/* @end */\n\n/*\n.search {\n\tcolor: #003399;\n\tfont-weight: bold;\n}\n\nform.search {\n\tmargin-bottom: 0px;\n\tmargin-top: 0px;\n}\n\ninput.search {\n\tfont-size: 75%;\n\tcolor: #000080;\n\tfont-weight: normal;\n\tbackground-color: #e8eef2;\n}\n*/\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #A3B4D7;\n}\n\nth.dirtab {\n\tbackground: #EBEFF6;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0px;\n\tborder: none;\n\tborder-top: 1px solid #4A6AAA;\n}\n\nhr.footer {\n\theight: 1px;\n}\n\n/* @group Member Descriptions */\n\ntable.memberdecls {\n\tborder-spacing: 0px;\n\tpadding: 0px;\n}\n\n.memberdecls td, .fieldtable tr {\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\n.memberdecls td.glow, .fieldtable tr.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 15px cyan;\n}\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #F9FAFC;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memSeparator {\n        border-bottom: 1px solid #DEE4F0;\n        line-height: 1px;\n        margin: 0px;\n        padding: 0px;\n}\n\n.memItemLeft, .memTemplItemLeft {\n        white-space: nowrap;\n}\n\n.memItemRight {\n\twidth: 100%;\n}\n\n.memTemplParams {\n\tcolor: #4665A2;\n        white-space: nowrap;\n\tfont-size: 80%;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n/* Styles for detailed member documentation */\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #4665A2;\n\tfont-weight: normal;\n\tmargin-left: 9px;\n}\n\n.memnav {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.mempage {\n\twidth: 100%;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n\tmargin-right: 5px;\n        -webkit-transition: box-shadow 0.5s linear;\n        -moz-transition: box-shadow 0.5s linear;\n        -ms-transition: box-shadow 0.5s linear;\n        -o-transition: box-shadow 0.5s linear;\n        transition: box-shadow 0.5s linear;\n        display: table !important;\n        width: 100%;\n}\n\n.memitem.glow {\n         box-shadow: 0 0 15px cyan;\n}\n\n.memname {\n        font-weight: bold;\n        margin-left: 6px;\n}\n\n.memname td {\n\tvertical-align: bottom;\n}\n\n.memproto, dl.reflist dt {\n        border-top: 1px solid #A8B8D9;\n        border-left: 1px solid #A8B8D9;\n        border-right: 1px solid #A8B8D9;\n        padding: 6px 0px 6px 0px;\n        color: #253555;\n        font-weight: bold;\n        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n        /* opera specific markup */\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        /* firefox specific markup */\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        -moz-border-radius-topright: 4px;\n        -moz-border-radius-topleft: 4px;\n        /* webkit specific markup */\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        -webkit-border-top-right-radius: 4px;\n        -webkit-border-top-left-radius: 4px;\n\n}\n\n.memdoc, dl.reflist dd {\n        border-bottom: 1px solid #A8B8D9;      \n        border-left: 1px solid #A8B8D9;      \n        border-right: 1px solid #A8B8D9; \n        padding: 6px 10px 2px 10px;\n        background-color: #FBFCFD;\n        border-top-width: 0;\n        background-image:url('nav_g.png');\n        background-repeat:repeat-x;\n        background-color: #FFFFFF;\n        /* opera specific markup */\n        border-bottom-left-radius: 4px;\n        border-bottom-right-radius: 4px;\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        /* firefox specific markup */\n        -moz-border-radius-bottomleft: 4px;\n        -moz-border-radius-bottomright: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        /* webkit specific markup */\n        -webkit-border-bottom-left-radius: 4px;\n        -webkit-border-bottom-right-radius: 4px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\ndl.reflist dt {\n        padding: 5px;\n}\n\ndl.reflist dd {\n        margin: 0px 0px 10px 0px;\n        padding: 5px;\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n.paramname code {\n        line-height: 14px;\n}\n\n.params, .retval, .exception, .tparams {\n        margin-left: 0px;\n        padding-left: 0px;\n}       \n\n.params .paramname, .retval .paramname {\n        font-weight: bold;\n        vertical-align: top;\n}\n        \n.params .paramtype {\n        font-style: italic;\n        vertical-align: top;\n}       \n        \n.params .paramdir {\n        font-family: \"courier new\",courier,monospace;\n        vertical-align: top;\n}\n\ntable.mlabels {\n\tborder-spacing: 0px;\n}\n\ntd.mlabels-left {\n\twidth: 100%;\n\tpadding: 0px;\n}\n\ntd.mlabels-right {\n\tvertical-align: bottom;\n\tpadding: 0px;\n\twhite-space: nowrap;\n}\n\nspan.mlabels {\n        margin-left: 8px;\n}\n\nspan.mlabel {\n        background-color: #728DC1;\n        border-top:1px solid #5373B4;\n        border-left:1px solid #5373B4;\n        border-right:1px solid #C4CFE5;\n        border-bottom:1px solid #C4CFE5;\n\ttext-shadow: none;\n\tcolor: white;\n\tmargin-right: 4px;\n\tpadding: 2px 3px;\n\tborder-radius: 3px;\n\tfont-size: 7pt;\n\twhite-space: nowrap;\n\tvertical-align: middle;\n}\n\n\n\n/* @end */\n\n/* these are for tree view inside a (index) page */\n\ndiv.directory {\n        margin: 10px 0px;\n        border-top: 1px solid #9CAFD4;\n        border-bottom: 1px solid #9CAFD4;\n        width: 100%;\n}\n\n.directory table {\n        border-collapse:collapse;\n}\n\n.directory td {\n        margin: 0px;\n        padding: 0px;\n\tvertical-align: top;\n}\n\n.directory td.entry {\n        white-space: nowrap;\n        padding-right: 6px;\n\tpadding-top: 3px;\n}\n\n.directory td.entry a {\n        outline:none;\n}\n\n.directory td.entry a img {\n        border: none;\n}\n\n.directory td.desc {\n        width: 100%;\n        padding-left: 6px;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n\tborder-left: 1px solid rgba(0,0,0,0.05);\n}\n\n.directory tr.even {\n\tpadding-left: 6px;\n\tbackground-color: #F7F8FB;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n.directory .levels {\n        white-space: nowrap;\n        width: 100%;\n        text-align: right;\n        font-size: 9pt;\n}\n\n.directory .levels span {\n        cursor: pointer;\n        padding-left: 2px;\n        padding-right: 2px;\n\tcolor: #3D578C;\n}\n\n.arrow {\n    color: #9CAFD4;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    cursor: pointer;\n    font-size: 80%;\n    display: inline-block;\n    width: 16px;\n    height: 22px;\n}\n\n.icon {\n    font-family: Arial, Helvetica;\n    font-weight: bold;\n    font-size: 12px;\n    height: 14px;\n    width: 16px;\n    display: inline-block;\n    background-color: #728DC1;\n    color: white;\n    text-align: center;\n    border-radius: 4px;\n    margin-left: 2px;\n    margin-right: 2px;\n}\n\n.icona {\n    width: 24px;\n    height: 22px;\n    display: inline-block;\n}\n\n.iconfopen {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderopen.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.iconfclosed {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderclosed.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.icondoc {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('doc.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\ntable.directory {\n    font: 400 14px Roboto,sans-serif;\n}\n\n/* @end */\n\ndiv.dynheader {\n        margin-top: 8px;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\naddress {\n\tfont-style: normal;\n\tcolor: #2A3D61;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n        margin-top: 4px;\n        margin-bottom: 4px;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n}\n\ntable.fieldtable {\n        /*width: 100%;*/\n        margin-bottom: 10px;\n        border: 1px solid #A8B8D9;\n        border-spacing: 0px;\n        -moz-border-radius: 4px;\n        -webkit-border-radius: 4px;\n        border-radius: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n}\n\n.fieldtable td, .fieldtable th {\n        padding: 3px 7px 2px;\n}\n\n.fieldtable td.fieldtype, .fieldtable td.fieldname {\n        white-space: nowrap;\n        border-right: 1px solid #A8B8D9;\n        border-bottom: 1px solid #A8B8D9;\n        vertical-align: top;\n}\n\n.fieldtable td.fieldname {\n        padding-top: 3px;\n}\n\n.fieldtable td.fielddoc {\n        border-bottom: 1px solid #A8B8D9;\n        /*width: 100%;*/\n}\n\n.fieldtable td.fielddoc p:first-child {\n        margin-top: 0px;\n}       \n        \n.fieldtable td.fielddoc p:last-child {\n        margin-bottom: 2px;\n}\n\n.fieldtable tr:last-child td {\n        border-bottom: none;\n}\n\n.fieldtable th {\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n        font-size: 90%;\n        color: #253555;\n        padding-bottom: 4px;\n        padding-top: 5px;\n        text-align:left;\n        -moz-border-radius-topleft: 4px;\n        -moz-border-radius-topright: 4px;\n        -webkit-border-top-left-radius: 4px;\n        -webkit-border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        border-top-right-radius: 4px;\n        border-bottom: 1px solid #A8B8D9;\n}\n\n\n.tabsearch {\n\ttop: 0px;\n\tleft: 10px;\n\theight: 36px;\n\tbackground-image: url('tab_b.png');\n\tz-index: 101;\n\toverflow: hidden;\n\tfont-size: 13px;\n}\n\n.navpath ul\n{\n\tfont-size: 11px;\n\tbackground-image:url('tab_b.png');\n\tbackground-repeat:repeat-x;\n\tbackground-position: 0 -5px;\n\theight:30px;\n\tline-height:30px;\n\tcolor:#8AA0CC;\n\tborder:solid 1px #C2CDE4;\n\toverflow:hidden;\n\tmargin:0px;\n\tpadding:0px;\n}\n\n.navpath li\n{\n\tlist-style-type:none;\n\tfloat:left;\n\tpadding-left:10px;\n\tpadding-right:15px;\n\tbackground-image:url('bc_s.png');\n\tbackground-repeat:no-repeat;\n\tbackground-position:right;\n\tcolor:#364D7C;\n}\n\n.navpath li.navelem a\n{\n\theight:32px;\n\tdisplay:block;\n\ttext-decoration: none;\n\toutline: none;\n\tcolor: #283A5D;\n\tfont-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n\ttext-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n\ttext-decoration: none;        \n}\n\n.navpath li.navelem a:hover\n{\n\tcolor:#6884BD;\n}\n\n.navpath li.footer\n{\n        list-style-type:none;\n        float:right;\n        padding-left:10px;\n        padding-right:15px;\n        background-image:none;\n        background-repeat:no-repeat;\n        background-position:right;\n        color:#364D7C;\n        font-size: 8pt;\n}\n\n\ndiv.summary\n{\n\tfloat: right;\n\tfont-size: 8pt;\n\tpadding-right: 5px;\n\twidth: 50%;\n\ttext-align: right;\n}       \n\ndiv.summary a\n{\n\twhite-space: nowrap;\n}\n\ndiv.ingroups\n{\n\tfont-size: 8pt;\n\twidth: 50%;\n\ttext-align: left;\n}\n\ndiv.ingroups a\n{\n\twhite-space: nowrap;\n}\n\ndiv.header\n{\n        background-image:url('nav_h.png');\n        background-repeat:repeat-x;\n\tbackground-color: #F9FAFC;\n\tmargin:  0px;\n\tborder-bottom: 1px solid #C4CFE5;\n}\n\ndiv.headertitle\n{\n\tpadding: 5px 5px 5px 10px;\n}\n\ndl\n{\n        padding: 0 0 0 10px;\n}\n\n/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */\ndl.section\n{\n\tmargin-left: 0px;\n\tpadding-left: 0px;\n}\n\ndl.note\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #D0C000;\n}\n\ndl.warning, dl.attention\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #FF0000;\n}\n\ndl.pre, dl.post, dl.invariant\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #00D000;\n}\n\ndl.deprecated\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #505050;\n}\n\ndl.todo\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #00C0E0;\n}\n\ndl.test\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #3030E0;\n}\n\ndl.bug\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #C08050;\n}\n\ndl.section dd {\n\tmargin-bottom: 6px;\n}\n\n\n#projectlogo\n{\n\ttext-align: center;\n\tvertical-align: bottom;\n\tborder-collapse: separate;\n}\n \n#projectlogo img\n{ \n\tborder: 0px none;\n}\n \n#projectname\n{\n\tfont: 300% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 2px 0px;\n}\n    \n#projectbrief\n{\n\tfont: 120% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#projectnumber\n{\n\tfont: 50% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#titlearea\n{\n\tpadding: 0px;\n\tmargin: 0px;\n\twidth: 100%;\n\tborder-bottom: 1px solid #5373B4;\n}\n\n.image\n{\n        text-align: center;\n}\n\n.dotgraph\n{\n        text-align: center;\n}\n\n.mscgraph\n{\n        text-align: center;\n}\n\n.diagraph\n{\n        text-align: center;\n}\n\n.caption\n{\n\tfont-weight: bold;\n}\n\ndiv.zoom\n{\n\tborder: 1px solid #90A5CE;\n}\n\ndl.citelist {\n        margin-bottom:50px;\n}\n\ndl.citelist dt {\n        color:#334975;\n        float:left;\n        font-weight:bold;\n        margin-right:10px;\n        padding:5px;\n}\n\ndl.citelist dd {\n        margin:2px 0;\n        padding:5px 0;\n}\n\ndiv.toc {\n        padding: 14px 25px;\n        background-color: #F4F6FA;\n        border: 1px solid #D8DFEE;\n        border-radius: 7px 7px 7px 7px;\n        float: right;\n        height: auto;\n        margin: 0 20px 10px 10px;\n        width: 200px;\n}\n\ndiv.toc li {\n        background: url(\"bdwn.png\") no-repeat scroll 0 5px transparent;\n        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;\n        margin-top: 5px;\n        padding-left: 10px;\n        padding-top: 2px;\n}\n\ndiv.toc h3 {\n        font: bold 12px/1.2 Arial,FreeSans,sans-serif;\n\tcolor: #4665A2;\n        border-bottom: 0 none;\n        margin: 0;\n}\n\ndiv.toc ul {\n        list-style: none outside none;\n        border: medium none;\n        padding: 0px;\n}       \n\ndiv.toc li.level1 {\n        margin-left: 0px;\n}\n\ndiv.toc li.level2 {\n        margin-left: 15px;\n}\n\ndiv.toc li.level3 {\n        margin-left: 30px;\n}\n\ndiv.toc li.level4 {\n        margin-left: 45px;\n}\n\n.inherit_header {\n        font-weight: bold;\n        color: gray;\n        cursor: pointer;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.inherit_header td {\n        padding: 6px 0px 2px 5px;\n}\n\n.inherit {\n        display: none;\n}\n\ntr.heading h2 {\n        margin-top: 12px;\n        margin-bottom: 4px;\n}\n\n/* tooltip related style info */\n\n.ttc {\n        position: absolute;\n        display: none;\n}\n\n#powerTip {\n\tcursor: default;\n\twhite-space: nowrap;\n\tbackground-color: white;\n\tborder: 1px solid gray;\n\tborder-radius: 4px 4px 4px 4px;\n\tbox-shadow: 1px 1px 7px gray;\n\tdisplay: none;\n\tfont-size: smaller;\n\tmax-width: 80%;\n\topacity: 0.9;\n\tpadding: 1ex 1em 1em;\n\tposition: absolute;\n\tz-index: 2147483647;\n}\n\n#powerTip div.ttdoc {\n        color: grey;\n\tfont-style: italic;\n}\n\n#powerTip div.ttname a {\n        font-weight: bold;\n}\n\n#powerTip div.ttname {\n        font-weight: bold;\n}\n\n#powerTip div.ttdeci {\n        color: #006318;\n}\n\n#powerTip div {\n        margin: 0px;\n        padding: 0px;\n        font: 12px/16px Roboto,sans-serif;\n}\n\n#powerTip:before, #powerTip:after {\n\tcontent: \"\";\n\tposition: absolute;\n\tmargin: 0px;\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.w:after,  #powerTip.w:before,\n#powerTip.e:after,  #powerTip.e:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.nw:after, #powerTip.nw:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n}\n\n#powerTip.n:after,  #powerTip.s:after,\n#powerTip.w:after,  #powerTip.e:after,\n#powerTip.nw:after, #powerTip.ne:after,\n#powerTip.sw:after, #powerTip.se:after {\n\tborder-color: rgba(255, 255, 255, 0);\n}\n\n#powerTip.n:before,  #powerTip.s:before,\n#powerTip.w:before,  #powerTip.e:before,\n#powerTip.nw:before, #powerTip.ne:before,\n#powerTip.sw:before, #powerTip.se:before {\n\tborder-color: rgba(128, 128, 128, 0);\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.nw:after, #powerTip.nw:before {\n\ttop: 100%;\n}\n\n#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {\n\tborder-top-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n#powerTip.n:before {\n\tborder-top-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n#powerTip.n:after, #powerTip.n:before {\n\tleft: 50%;\n}\n\n#powerTip.nw:after, #powerTip.nw:before {\n\tright: 14px;\n}\n\n#powerTip.ne:after, #powerTip.ne:before {\n\tleft: 14px;\n}\n\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tbottom: 100%;\n}\n\n#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {\n\tborder-bottom-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n\n#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {\n\tborder-bottom-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n\n#powerTip.s:after, #powerTip.s:before {\n\tleft: 50%;\n}\n\n#powerTip.sw:after, #powerTip.sw:before {\n\tright: 14px;\n}\n\n#powerTip.se:after, #powerTip.se:before {\n\tleft: 14px;\n}\n\n#powerTip.e:after, #powerTip.e:before {\n\tleft: 100%;\n}\n#powerTip.e:after {\n\tborder-left-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.e:before {\n\tborder-left-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#powerTip.w:after, #powerTip.w:before {\n\tright: 100%;\n}\n#powerTip.w:after {\n\tborder-right-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.w:before {\n\tborder-right-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n@media print\n{\n  #top { display: none; }\n  #side-nav { display: none; }\n  #nav-path { display: none; }\n  body { overflow:visible; }\n  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }\n  .summary { display: none; }\n  .memitem { page-break-inside: avoid; }\n  #doc-content\n  {\n    margin-left:0 !important;\n    height:auto !important;\n    width:auto !important;\n    overflow:inherit;\n    display:inline;\n  }\n}\n\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/dynsections.js",
    "content": "function toggleVisibility(linkObj)\n{\n var base = $(linkObj).attr('id');\n var summary = $('#'+base+'-summary');\n var content = $('#'+base+'-content');\n var trigger = $('#'+base+'-trigger');\n var src=$(trigger).attr('src');\n if (content.is(':visible')===true) {\n   content.hide();\n   summary.show();\n   $(linkObj).addClass('closed').removeClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');\n } else {\n   content.show();\n   summary.hide();\n   $(linkObj).removeClass('closed').addClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');\n } \n return false;\n}\n\nfunction updateStripes()\n{\n  $('table.directory tr').\n       removeClass('even').filter(':visible:even').addClass('even');\n}\n\nfunction toggleLevel(level)\n{\n  $('table.directory tr').each(function() {\n    var l = this.id.split('_').length-1;\n    var i = $('#img'+this.id.substring(3));\n    var a = $('#arr'+this.id.substring(3));\n    if (l<level+1) {\n      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');\n      a.html('&#9660;');\n      $(this).show();\n    } else if (l==level+1) {\n      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');\n      a.html('&#9658;');\n      $(this).show();\n    } else {\n      $(this).hide();\n    }\n  });\n  updateStripes();\n}\n\nfunction toggleFolder(id)\n{\n  // the clicked row\n  var currentRow = $('#row_'+id);\n\n  // all rows after the clicked row\n  var rows = currentRow.nextAll(\"tr\");\n\n  var re = new RegExp('^row_'+id+'\\\\d+_$', \"i\"); //only one sub\n\n  // only match elements AFTER this one (can't hide elements before)\n  var childRows = rows.filter(function() { return this.id.match(re); });\n\n  // first row is visible we are HIDING\n  if (childRows.filter(':first').is(':visible')===true) {\n    // replace down arrow by right arrow for current row\n    var currentRowSpans = currentRow.find(\"span\");\n    currentRowSpans.filter(\".iconfopen\").removeClass(\"iconfopen\").addClass(\"iconfclosed\");\n    currentRowSpans.filter(\".arrow\").html('&#9658;');\n    rows.filter(\"[id^=row_\"+id+\"]\").hide(); // hide all children\n  } else { // we are SHOWING\n    // replace right arrow by down arrow for current row\n    var currentRowSpans = currentRow.find(\"span\");\n    currentRowSpans.filter(\".iconfclosed\").removeClass(\"iconfclosed\").addClass(\"iconfopen\");\n    currentRowSpans.filter(\".arrow\").html('&#9660;');\n    // replace down arrows by right arrows for child rows\n    var childRowsSpans = childRows.find(\"span\");\n    childRowsSpans.filter(\".iconfopen\").removeClass(\"iconfopen\").addClass(\"iconfclosed\");\n    childRowsSpans.filter(\".arrow\").html('&#9658;');\n    childRows.show(); //show all children\n  }\n  updateStripes();\n}\n\n\nfunction toggleInherit(id)\n{\n  var rows = $('tr.inherit.'+id);\n  var img = $('tr.inherit_header.'+id+' img');\n  var src = $(img).attr('src');\n  if (rows.filter(':first').is(':visible')===true) {\n    rows.css('display','none');\n    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');\n  } else {\n    rows.css('display','table-row'); // using show() causes jump in firefox\n    $(img).attr('src',src.substring(0,src.length-10)+'open.png');\n  }\n}\n\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/dynsections_8js.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual/dynsections.js 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">函数</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">dynsections.js 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\n函数</h2></td></tr>\n<tr class=\"memitem:a1922c462474df7dfd18741c961d59a25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dynsections_8js.html#a1922c462474df7dfd18741c961d59a25\">toggleVisibility</a> (linkObj)</td></tr>\n<tr class=\"separator:a1922c462474df7dfd18741c961d59a25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8f7493ad859d4fbf2523917511ee7177\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dynsections_8js.html#a8f7493ad859d4fbf2523917511ee7177\">updateStripes</a> ()</td></tr>\n<tr class=\"separator:a8f7493ad859d4fbf2523917511ee7177\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a19f577cc1ba571396a85bb1f48bf4df2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dynsections_8js.html#a19f577cc1ba571396a85bb1f48bf4df2\">toggleLevel</a> (level)</td></tr>\n<tr class=\"separator:a19f577cc1ba571396a85bb1f48bf4df2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af244da4527af2d845dca04f5656376cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dynsections_8js.html#af244da4527af2d845dca04f5656376cd\">toggleFolder</a> (id)</td></tr>\n<tr class=\"separator:af244da4527af2d845dca04f5656376cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac057b640b17ff32af11ced151c9305b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dynsections_8js.html#ac057b640b17ff32af11ced151c9305b4\">toggleInherit</a> (id)</td></tr>\n<tr class=\"separator:ac057b640b17ff32af11ced151c9305b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">函数说明</h2>\n<a class=\"anchor\" id=\"af244da4527af2d845dca04f5656376cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function toggleFolder </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>id</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac057b640b17ff32af11ced151c9305b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function toggleInherit </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>id</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a19f577cc1ba571396a85bb1f48bf4df2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function toggleLevel </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>level</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1922c462474df7dfd18741c961d59a25\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function toggleVisibility </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>linkObj</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8f7493ad859d4fbf2523917511ee7177\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function updateStripes </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/files.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: 文件列表</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">文件列表</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">这里列出了所有文件，并附带简要说明:</div><div class=\"directory\">\n<div class=\"levels\">[详情级别 <span onclick=\"javascript:toggleLevel(1);\">1</span><span onclick=\"javascript:toggleLevel(2);\">2</span><span onclick=\"javascript:toggleLevel(3);\">3</span>]</div><table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_0_\" class=\"arrow\" onclick=\"toggleFolder('0_')\">&#9660;</span><span id=\"img_0_\" class=\"iconfopen\" onclick=\"toggleFolder('0_')\">&#160;</span><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\" target=\"_self\">iFlytek MSC Reference Manual</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_0_0_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_0_0_\" class=\"arrow\" onclick=\"toggleFolder('0_0_')\">&#9660;</span><span id=\"img_0_0_\" class=\"iconfopen\" onclick=\"toggleFolder('0_0_')\">&#160;</span><a class=\"el\" href=\"dir_25539194184bab781b1c7ecd67774cd8.html\" target=\"_self\">search</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_0_0_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><span class=\"icondoc\"></span><a class=\"el\" href=\"all__0_8js.html\" target=\"_self\">all_0.js</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_0_0_1_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><span class=\"icondoc\"></span><a class=\"el\" href=\"all__1_8js.html\" target=\"_self\">all_1.js</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_0_0_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><span class=\"icondoc\"></span><a class=\"el\" href=\"files__0_8js.html\" target=\"_self\">files_0.js</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_0_0_3_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><span class=\"icondoc\"></span><a class=\"el\" href=\"files__1_8js.html\" target=\"_self\">files_1.js</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_0_0_4_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><span class=\"icondoc\"></span><a class=\"el\" href=\"functions__0_8js.html\" target=\"_self\">functions_0.js</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_0_0_5_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><span class=\"icondoc\"></span><a class=\"el\" href=\"functions__1_8js.html\" target=\"_self\">functions_1.js</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_0_0_6_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><span class=\"icondoc\"></span><a class=\"el\" href=\"search_8js.html\" target=\"_self\">search.js</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_0_0_7_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><span class=\"icondoc\"></span><a class=\"el\" href=\"searchdata_8js.html\" target=\"_self\">searchdata.js</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_0_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><span class=\"icondoc\"></span><a class=\"el\" href=\"dynsections_8js.html\" target=\"_self\">dynsections.js</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_0_2_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><span class=\"icondoc\"></span><a class=\"el\" href=\"jquery_8js.html\" target=\"_self\">jquery.js</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"msp__cmn_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"msp__cmn_8h.html\" target=\"_self\">msp_cmn.h</a></td><td class=\"desc\">Mobile Speech Platform Common Interface Header File </td></tr>\n<tr id=\"row_2_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"qisr_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"qisr_8h.html\" target=\"_self\">qisr.h</a></td><td class=\"desc\">IFLY Speech Recognizer Header File </td></tr>\n<tr id=\"row_3_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"qmfv_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"qmfv_8h.html\" target=\"_self\">qmfv.h</a></td><td class=\"desc\">IFLY Speech Recognizer Header File </td></tr>\n<tr id=\"row_4_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"qtts_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"qtts_8h.html\" target=\"_self\">qtts.h</a></td><td class=\"desc\">IFLY Speech Synthesizer Header File </td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/files__0_8js.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual/search/files_0.js 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_25539194184bab781b1c7ecd67774cd8.html\">search</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">变量</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">files_0.js 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\n变量</h2></td></tr>\n<tr class=\"memitem:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"files__0_8js.html#ad01a7523f103d6242ef9b0451861231e\">searchData</a></td></tr>\n<tr class=\"separator:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">变量说明</h2>\n<a class=\"anchor\" id=\"ad01a7523f103d6242ef9b0451861231e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var searchData</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<b>初始值:</b><div class=\"fragment\"><div class=\"line\">=</div>\n<div class=\"line\">[</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;msp_5fcmn_2eh&#39;</span>,[<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html&#39;</span>,1,<span class=\"stringliteral\">&#39;&#39;</span>]]]</div>\n<div class=\"line\">]</div>\n</div><!-- fragment -->\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/files__1_8js.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual/search/files_1.js 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_25539194184bab781b1c7ecd67774cd8.html\">search</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">变量</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">files_1.js 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\n变量</h2></td></tr>\n<tr class=\"memitem:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"files__1_8js.html#ad01a7523f103d6242ef9b0451861231e\">searchData</a></td></tr>\n<tr class=\"separator:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">变量说明</h2>\n<a class=\"anchor\" id=\"ad01a7523f103d6242ef9b0451861231e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var searchData</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<b>初始值:</b><div class=\"fragment\"><div class=\"line\">=</div>\n<div class=\"line\">[</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisr_2eh&#39;</span>,[<span class=\"stringliteral\">&#39;qisr.h&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html&#39;</span>,1,<span class=\"stringliteral\">&#39;&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfv_2eh&#39;</span>,[<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html&#39;</span>,1,<span class=\"stringliteral\">&#39;&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qtts_2eh&#39;</span>,[<span class=\"stringliteral\">&#39;qtts.h&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html&#39;</span>,1,<span class=\"stringliteral\">&#39;&#39;</span>]]]</div>\n<div class=\"line\">]</div>\n</div><!-- fragment -->\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/functions__0_8js.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual/search/functions_0.js 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_25539194184bab781b1c7ecd67774cd8.html\">search</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">变量</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">functions_0.js 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\n变量</h2></td></tr>\n<tr class=\"memitem:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"functions__0_8js.html#ad01a7523f103d6242ef9b0451861231e\">searchData</a></td></tr>\n<tr class=\"separator:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">变量说明</h2>\n<a class=\"anchor\" id=\"ad01a7523f103d6242ef9b0451861231e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var searchData</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<b>初始值:</b><div class=\"fragment\"><div class=\"line\">=</div>\n<div class=\"line\">[</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;mspgetparam&#39;</span>,[<span class=\"stringliteral\">&#39;MSPGetParam&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#a4d3fa0aad5e761cb2a2afe30ae2a9714&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;mspgetversion&#39;</span>,[<span class=\"stringliteral\">&#39;MSPGetVersion&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#a632008aeddf5eba09555920ce38686a4&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;msplogin&#39;</span>,[<span class=\"stringliteral\">&#39;MSPLogin&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#a137acfe684fe46cbe5baf19f7d4a7fcc&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;msplogout&#39;</span>,[<span class=\"stringliteral\">&#39;MSPLogout&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#a1e0f72cd113b4578afdf3d16ab34463e&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;mspsearch&#39;</span>,[<span class=\"stringliteral\">&#39;MSPSearch&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#ae7be2dd2c6ee318524621b952998c14d&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;mspuploaddata&#39;</span>,[<span class=\"stringliteral\">&#39;MSPUploadData&#39;</span>,[<span class=\"stringliteral\">&#39;../msp__cmn_8h.html#ada276fa6db4a66342d951820020e4e8f&#39;</span>,1,<span class=\"stringliteral\">&#39;msp_cmn.h&#39;</span>]]]</div>\n<div class=\"line\">]</div>\n</div><!-- fragment -->\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/functions__1_8js.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual/search/functions_1.js 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_25539194184bab781b1c7ecd67774cd8.html\">search</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">变量</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">functions_1.js 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\n变量</h2></td></tr>\n<tr class=\"memitem:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"functions__1_8js.html#ad01a7523f103d6242ef9b0451861231e\">searchData</a></td></tr>\n<tr class=\"separator:ad01a7523f103d6242ef9b0451861231e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">变量说明</h2>\n<a class=\"anchor\" id=\"ad01a7523f103d6242ef9b0451861231e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var searchData</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<b>初始值:</b><div class=\"fragment\"><div class=\"line\">=</div>\n<div class=\"line\">[</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisraudiowrite&#39;</span>,[<span class=\"stringliteral\">&#39;QISRAudioWrite&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html#a47fd2588fe834fa2d51fef1961d7aef4&#39;</span>,1,<span class=\"stringliteral\">&#39;qisr.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisrgetparam&#39;</span>,[<span class=\"stringliteral\">&#39;QISRGetParam&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html#a2081e3cad9a8155c15790a2476be7044&#39;</span>,1,<span class=\"stringliteral\">&#39;qisr.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisrgetresult&#39;</span>,[<span class=\"stringliteral\">&#39;QISRGetResult&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html#a2e7880db4792266a4d1439238c0b2c1b&#39;</span>,1,<span class=\"stringliteral\">&#39;qisr.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisrsessionbegin&#39;</span>,[<span class=\"stringliteral\">&#39;QISRSessionBegin&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html#aaec4a5779275e07c4f7405ed8d739416&#39;</span>,1,<span class=\"stringliteral\">&#39;qisr.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qisrsessionend&#39;</span>,[<span class=\"stringliteral\">&#39;QISRSessionEnd&#39;</span>,[<span class=\"stringliteral\">&#39;../qisr_8h.html#ab50c4114e032100c4093ddd51329fecc&#39;</span>,1,<span class=\"stringliteral\">&#39;qisr.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfvdatawrite&#39;</span>,[<span class=\"stringliteral\">&#39;QMFVDataWrite&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html#a081a01b2add2dfac3010ec7cd8ba5eac&#39;</span>,1,<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfvgetparam&#39;</span>,[<span class=\"stringliteral\">&#39;QMFVGetParam&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html#a7174d943c2f1691f6a8c717429d43f8d&#39;</span>,1,<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfvgetresult&#39;</span>,[<span class=\"stringliteral\">&#39;QMFVGetResult&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html#aa87716ad6b28326982626c0c6a6ffcbd&#39;</span>,1,<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfvsessionbegin&#39;</span>,[<span class=\"stringliteral\">&#39;QMFVSessionBegin&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html#adbe23b402d4c50b4c06f47ca26253be5&#39;</span>,1,<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qmfvsessionend&#39;</span>,[<span class=\"stringliteral\">&#39;QMFVSessionEnd&#39;</span>,[<span class=\"stringliteral\">&#39;../qmfv_8h.html#ad4ea72dd39285348cf26c627d67c6b65&#39;</span>,1,<span class=\"stringliteral\">&#39;qmfv.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qttsaudioget&#39;</span>,[<span class=\"stringliteral\">&#39;QTTSAudioGet&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html#a4e4f6bed4b9e4ea553aa00ccf539c22a&#39;</span>,1,<span class=\"stringliteral\">&#39;qtts.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qttsgetparam&#39;</span>,[<span class=\"stringliteral\">&#39;QTTSGetParam&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html#a0812612ff738a828490e4e3db59767e8&#39;</span>,1,<span class=\"stringliteral\">&#39;qtts.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qttssessionbegin&#39;</span>,[<span class=\"stringliteral\">&#39;QTTSSessionBegin&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html#a3fba4ad9599445073335851cc9479542&#39;</span>,1,<span class=\"stringliteral\">&#39;qtts.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qttssessionend&#39;</span>,[<span class=\"stringliteral\">&#39;QTTSSessionEnd&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html#a75d5047a2a889dbd890d116a6d0b550a&#39;</span>,1,<span class=\"stringliteral\">&#39;qtts.h&#39;</span>]]],</div>\n<div class=\"line\">  [<span class=\"stringliteral\">&#39;qttstextput&#39;</span>,[<span class=\"stringliteral\">&#39;QTTSTextPut&#39;</span>,[<span class=\"stringliteral\">&#39;../qtts_8h.html#a5b7d146d6a35341d4d73efd720ae987b&#39;</span>,1,<span class=\"stringliteral\">&#39;qtts.h&#39;</span>]]]</div>\n<div class=\"line\">]</div>\n</div><!-- fragment -->\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/globals.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: 文件成员</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"globals.html\"><span>全部</span></a></li>\n      <li><a href=\"globals_func.html\"><span>函数</span></a></li>\n      <li><a href=\"globals_vars.html\"><span>变量</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"#index_a\"><span>a</span></a></li>\n      <li><a href=\"#index_b\"><span>b</span></a></li>\n      <li><a href=\"#index_c\"><span>c</span></a></li>\n      <li><a href=\"#index_e\"><span>e</span></a></li>\n      <li><a href=\"#index_g\"><span>g</span></a></li>\n      <li><a href=\"#index_i\"><span>i</span></a></li>\n      <li><a href=\"#index_k\"><span>k</span></a></li>\n      <li><a href=\"#index_l\"><span>l</span></a></li>\n      <li><a href=\"#index_m\"><span>m</span></a></li>\n      <li><a href=\"#index_p\"><span>p</span></a></li>\n      <li><a href=\"#index_q\"><span>q</span></a></li>\n      <li><a href=\"#index_s\"><span>s</span></a></li>\n      <li><a href=\"#index_t\"><span>t</span></a></li>\n      <li><a href=\"#index_u\"><span>u</span></a></li>\n      <li class=\"current\"><a href=\"#index_z\"><span>z</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">这里列出了所有文件成员,并附带其所属的文件:</div>\n\n<h3><a class=\"anchor\" id=\"index_a\"></a>- a -</h3><ul>\n<li>aD\n: <a class=\"el\" href=\"jquery_8js.html#ad223f5fba68c41c1236671ac5c5b0fcb\">jquery.js</a>\n</li>\n<li>aM\n: <a class=\"el\" href=\"jquery_8js.html#a8cc6111a5def3ea889157d13fb9a9672\">jquery.js</a>\n</li>\n<li>ap\n: <a class=\"el\" href=\"jquery_8js.html#a6ddf393cc7f9a8828e197bb0d9916c44\">jquery.js</a>\n</li>\n<li>aQ\n: <a class=\"el\" href=\"jquery_8js.html#a79eb58dc6cdf0aef563d5dc1ded27df5\">jquery.js</a>\n</li>\n<li>au\n: <a class=\"el\" href=\"jquery_8js.html#a4fd8ddfab07c8d7c7cae0ab0e052cad3\">jquery.js</a>\n</li>\n<li>aZ\n: <a class=\"el\" href=\"jquery_8js.html#ac87125cdee1a5e57da4ef619af49bc7d\">jquery.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_b\"></a>- b -</h3><ul>\n<li>b\n: <a class=\"el\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">jquery.js</a>\n</li>\n<li>bb\n: <a class=\"el\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">jquery.js</a>\n</li>\n<li>bq\n: <a class=\"el\" href=\"jquery_8js.html#af6ee77c71b2c89bdb365145ac5ad1219\">jquery.js</a>\n</li>\n<li>bs\n: <a class=\"el\" href=\"jquery_8js.html#ae77642f8ef73fb9c20c2a737d956acda\">jquery.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_c\"></a>- c -</h3><ul>\n<li>c\n: <a class=\"el\" href=\"jquery_8js.html#abce695e0af988ece0826d9ad59b8160d\">jquery.js</a>\n</li>\n<li>convertToId()\n: <a class=\"el\" href=\"search_8js.html#a196a29bd5a5ee7cd5b485e0753a49e57\">search.js</a>\n</li>\n<li>createResults()\n: <a class=\"el\" href=\"search_8js.html#a6b2c651120de3ed1dcf0d85341d51895\">search.js</a>\n</li>\n<li>css\n: <a class=\"el\" href=\"jquery_8js.html#a89ad527fcd82c01ebb587332f5b4fcd4\">jquery.js</a>\n</li>\n<li>curCSS\n: <a class=\"el\" href=\"jquery_8js.html#a88b21f8ba3af86d6981b1da520ece33b\">jquery.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_e\"></a>- e -</h3><ul>\n<li>each()\n: <a class=\"el\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">jquery.js</a>\n</li>\n<li>extend()\n: <a class=\"el\" href=\"jquery_8js.html#a5fb206c91c64d1be35fde236706eab86\">jquery.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_g\"></a>- g -</h3><ul>\n<li>getXPos()\n: <a class=\"el\" href=\"search_8js.html#a76d24aea0009f892f8ccc31d941c0a2b\">search.js</a>\n</li>\n<li>getYPos()\n: <a class=\"el\" href=\"search_8js.html#a8d7b405228661d7b6216b6925d2b8a69\">search.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_i\"></a>- i -</h3><ul>\n<li>if()\n: <a class=\"el\" href=\"jquery_8js.html#a9db6d45a025ad692282fe23e69eeba43\">jquery.js</a>\n</li>\n<li>indexSectionLabels\n: <a class=\"el\" href=\"searchdata_8js.html#a529972e449c82dc118cbbd3bcf50c44d\">searchdata.js</a>\n</li>\n<li>indexSectionNames\n: <a class=\"el\" href=\"searchdata_8js.html#a77149ceed055c6c6ce40973b5bdc19ad\">searchdata.js</a>\n</li>\n<li>indexSectionsWithContent\n: <a class=\"el\" href=\"searchdata_8js.html#a6250af3c9b54dee6efc5f55f40c78126\">searchdata.js</a>\n</li>\n<li>init_search()\n: <a class=\"el\" href=\"search_8js.html#ae95ec7d5d450d0a8d6928a594798aaf4\">search.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_k\"></a>- k -</h3><ul>\n<li>k\n: <a class=\"el\" href=\"jquery_8js.html#ab26645c014aa005ecedef329ecf58c99\">jquery.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_l\"></a>- l -</h3><ul>\n<li>L\n: <a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">jquery.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_m\"></a>- m -</h3><ul>\n<li>MSPGetParam()\n: <a class=\"el\" href=\"msp__cmn_8h.html#a4d3fa0aad5e761cb2a2afe30ae2a9714\">msp_cmn.h</a>\n</li>\n<li>MSPGetVersion()\n: <a class=\"el\" href=\"msp__cmn_8h.html#a632008aeddf5eba09555920ce38686a4\">msp_cmn.h</a>\n</li>\n<li>MSPLogin()\n: <a class=\"el\" href=\"msp__cmn_8h.html#a137acfe684fe46cbe5baf19f7d4a7fcc\">msp_cmn.h</a>\n</li>\n<li>MSPLogout()\n: <a class=\"el\" href=\"msp__cmn_8h.html#a1e0f72cd113b4578afdf3d16ab34463e\">msp_cmn.h</a>\n</li>\n<li>MSPSearch()\n: <a class=\"el\" href=\"msp__cmn_8h.html#ae7be2dd2c6ee318524621b952998c14d\">msp_cmn.h</a>\n</li>\n<li>MSPUploadData()\n: <a class=\"el\" href=\"msp__cmn_8h.html#ada276fa6db4a66342d951820020e4e8f\">msp_cmn.h</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>p()\n: <a class=\"el\" href=\"jquery_8js.html#a2335e57f79b6acfb6de59c235dc8a83e\">jquery.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_q\"></a>- q -</h3><ul>\n<li>QISRAudioWrite()\n: <a class=\"el\" href=\"qisr_8h.html#a47fd2588fe834fa2d51fef1961d7aef4\">qisr.h</a>\n</li>\n<li>QISRGetParam()\n: <a class=\"el\" href=\"qisr_8h.html#a2081e3cad9a8155c15790a2476be7044\">qisr.h</a>\n</li>\n<li>QISRGetResult()\n: <a class=\"el\" href=\"qisr_8h.html#a2e7880db4792266a4d1439238c0b2c1b\">qisr.h</a>\n</li>\n<li>QISRSessionBegin()\n: <a class=\"el\" href=\"qisr_8h.html#aaec4a5779275e07c4f7405ed8d739416\">qisr.h</a>\n</li>\n<li>QISRSessionEnd()\n: <a class=\"el\" href=\"qisr_8h.html#ab50c4114e032100c4093ddd51329fecc\">qisr.h</a>\n</li>\n<li>QMFVDataWrite()\n: <a class=\"el\" href=\"qmfv_8h.html#a081a01b2add2dfac3010ec7cd8ba5eac\">qmfv.h</a>\n</li>\n<li>QMFVGetParam()\n: <a class=\"el\" href=\"qmfv_8h.html#a7174d943c2f1691f6a8c717429d43f8d\">qmfv.h</a>\n</li>\n<li>QMFVGetResult()\n: <a class=\"el\" href=\"qmfv_8h.html#aa87716ad6b28326982626c0c6a6ffcbd\">qmfv.h</a>\n</li>\n<li>QMFVSessionBegin()\n: <a class=\"el\" href=\"qmfv_8h.html#adbe23b402d4c50b4c06f47ca26253be5\">qmfv.h</a>\n</li>\n<li>QMFVSessionEnd()\n: <a class=\"el\" href=\"qmfv_8h.html#ad4ea72dd39285348cf26c627d67c6b65\">qmfv.h</a>\n</li>\n<li>QTTSAudioGet()\n: <a class=\"el\" href=\"qtts_8h.html#a4e4f6bed4b9e4ea553aa00ccf539c22a\">qtts.h</a>\n</li>\n<li>QTTSGetParam()\n: <a class=\"el\" href=\"qtts_8h.html#a0812612ff738a828490e4e3db59767e8\">qtts.h</a>\n</li>\n<li>QTTSSessionBegin()\n: <a class=\"el\" href=\"qtts_8h.html#a3fba4ad9599445073335851cc9479542\">qtts.h</a>\n</li>\n<li>QTTSSessionEnd()\n: <a class=\"el\" href=\"qtts_8h.html#a75d5047a2a889dbd890d116a6d0b550a\">qtts.h</a>\n</li>\n<li>QTTSTextPut()\n: <a class=\"el\" href=\"qtts_8h.html#a5b7d146d6a35341d4d73efd720ae987b\">qtts.h</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>SearchBox()\n: <a class=\"el\" href=\"search_8js.html#a52066106482f8136aa9e0ec859e8188f\">search.js</a>\n</li>\n<li>searchData\n: <a class=\"el\" href=\"all__0_8js.html#ad01a7523f103d6242ef9b0451861231e\">all_0.js</a>\n, <a class=\"el\" href=\"functions__1_8js.html#ad01a7523f103d6242ef9b0451861231e\">functions_1.js</a>\n, <a class=\"el\" href=\"all__1_8js.html#ad01a7523f103d6242ef9b0451861231e\">all_1.js</a>\n, <a class=\"el\" href=\"files__0_8js.html#ad01a7523f103d6242ef9b0451861231e\">files_0.js</a>\n, <a class=\"el\" href=\"functions__0_8js.html#ad01a7523f103d6242ef9b0451861231e\">functions_0.js</a>\n, <a class=\"el\" href=\"files__1_8js.html#ad01a7523f103d6242ef9b0451861231e\">files_1.js</a>\n</li>\n<li>SearchResults()\n: <a class=\"el\" href=\"search_8js.html#a9189b9f7a32b6bc78240f40348f7fe03\">search.js</a>\n</li>\n<li>setClassAttr()\n: <a class=\"el\" href=\"search_8js.html#a499422fc054a5278ae32801ec0082c56\">search.js</a>\n</li>\n<li>setKeyActions()\n: <a class=\"el\" href=\"search_8js.html#a98192fa2929bb8e4b0a890a4909ab9b2\">search.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>toggleFolder()\n: <a class=\"el\" href=\"dynsections_8js.html#af244da4527af2d845dca04f5656376cd\">dynsections.js</a>\n</li>\n<li>toggleInherit()\n: <a class=\"el\" href=\"dynsections_8js.html#ac057b640b17ff32af11ced151c9305b4\">dynsections.js</a>\n</li>\n<li>toggleLevel()\n: <a class=\"el\" href=\"dynsections_8js.html#a19f577cc1ba571396a85bb1f48bf4df2\">dynsections.js</a>\n</li>\n<li>toggleVisibility()\n: <a class=\"el\" href=\"dynsections_8js.html#a1922c462474df7dfd18741c961d59a25\">dynsections.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_u\"></a>- u -</h3><ul>\n<li>updateStripes()\n: <a class=\"el\" href=\"dynsections_8js.html#a8f7493ad859d4fbf2523917511ee7177\">dynsections.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_z\"></a>- z -</h3><ul>\n<li>Z\n: <a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">jquery.js</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/globals_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: 文件成员</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"globals.html\"><span>全部</span></a></li>\n      <li class=\"current\"><a href=\"globals_func.html\"><span>函数</span></a></li>\n      <li><a href=\"globals_vars.html\"><span>变量</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow4\" class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"#index_b\"><span>b</span></a></li>\n      <li><a href=\"#index_c\"><span>c</span></a></li>\n      <li><a href=\"#index_e\"><span>e</span></a></li>\n      <li><a href=\"#index_g\"><span>g</span></a></li>\n      <li><a href=\"#index_i\"><span>i</span></a></li>\n      <li><a href=\"#index_m\"><span>m</span></a></li>\n      <li><a href=\"#index_p\"><span>p</span></a></li>\n      <li><a href=\"#index_q\"><span>q</span></a></li>\n      <li><a href=\"#index_s\"><span>s</span></a></li>\n      <li><a href=\"#index_t\"><span>t</span></a></li>\n      <li class=\"current\"><a href=\"#index_u\"><span>u</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a class=\"anchor\" id=\"index_b\"></a>- b -</h3><ul>\n<li>b()\n: <a class=\"el\" href=\"jquery_8js.html#a2fa551895933fae935a0a6b87282241d\">jquery.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_c\"></a>- c -</h3><ul>\n<li>convertToId()\n: <a class=\"el\" href=\"search_8js.html#a196a29bd5a5ee7cd5b485e0753a49e57\">search.js</a>\n</li>\n<li>createResults()\n: <a class=\"el\" href=\"search_8js.html#a6b2c651120de3ed1dcf0d85341d51895\">search.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_e\"></a>- e -</h3><ul>\n<li>each()\n: <a class=\"el\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">jquery.js</a>\n</li>\n<li>extend()\n: <a class=\"el\" href=\"jquery_8js.html#a5fb206c91c64d1be35fde236706eab86\">jquery.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_g\"></a>- g -</h3><ul>\n<li>getXPos()\n: <a class=\"el\" href=\"search_8js.html#a76d24aea0009f892f8ccc31d941c0a2b\">search.js</a>\n</li>\n<li>getYPos()\n: <a class=\"el\" href=\"search_8js.html#a8d7b405228661d7b6216b6925d2b8a69\">search.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_i\"></a>- i -</h3><ul>\n<li>if()\n: <a class=\"el\" href=\"jquery_8js.html#a9db6d45a025ad692282fe23e69eeba43\">jquery.js</a>\n</li>\n<li>init_search()\n: <a class=\"el\" href=\"search_8js.html#ae95ec7d5d450d0a8d6928a594798aaf4\">search.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_m\"></a>- m -</h3><ul>\n<li>MSPGetParam()\n: <a class=\"el\" href=\"msp__cmn_8h.html#a4d3fa0aad5e761cb2a2afe30ae2a9714\">msp_cmn.h</a>\n</li>\n<li>MSPGetVersion()\n: <a class=\"el\" href=\"msp__cmn_8h.html#a632008aeddf5eba09555920ce38686a4\">msp_cmn.h</a>\n</li>\n<li>MSPLogin()\n: <a class=\"el\" href=\"msp__cmn_8h.html#a137acfe684fe46cbe5baf19f7d4a7fcc\">msp_cmn.h</a>\n</li>\n<li>MSPLogout()\n: <a class=\"el\" href=\"msp__cmn_8h.html#a1e0f72cd113b4578afdf3d16ab34463e\">msp_cmn.h</a>\n</li>\n<li>MSPSearch()\n: <a class=\"el\" href=\"msp__cmn_8h.html#ae7be2dd2c6ee318524621b952998c14d\">msp_cmn.h</a>\n</li>\n<li>MSPUploadData()\n: <a class=\"el\" href=\"msp__cmn_8h.html#ada276fa6db4a66342d951820020e4e8f\">msp_cmn.h</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>p()\n: <a class=\"el\" href=\"jquery_8js.html#a2335e57f79b6acfb6de59c235dc8a83e\">jquery.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_q\"></a>- q -</h3><ul>\n<li>QISRAudioWrite()\n: <a class=\"el\" href=\"qisr_8h.html#a47fd2588fe834fa2d51fef1961d7aef4\">qisr.h</a>\n</li>\n<li>QISRGetParam()\n: <a class=\"el\" href=\"qisr_8h.html#a2081e3cad9a8155c15790a2476be7044\">qisr.h</a>\n</li>\n<li>QISRGetResult()\n: <a class=\"el\" href=\"qisr_8h.html#a2e7880db4792266a4d1439238c0b2c1b\">qisr.h</a>\n</li>\n<li>QISRSessionBegin()\n: <a class=\"el\" href=\"qisr_8h.html#aaec4a5779275e07c4f7405ed8d739416\">qisr.h</a>\n</li>\n<li>QISRSessionEnd()\n: <a class=\"el\" href=\"qisr_8h.html#ab50c4114e032100c4093ddd51329fecc\">qisr.h</a>\n</li>\n<li>QMFVDataWrite()\n: <a class=\"el\" href=\"qmfv_8h.html#a081a01b2add2dfac3010ec7cd8ba5eac\">qmfv.h</a>\n</li>\n<li>QMFVGetParam()\n: <a class=\"el\" href=\"qmfv_8h.html#a7174d943c2f1691f6a8c717429d43f8d\">qmfv.h</a>\n</li>\n<li>QMFVGetResult()\n: <a class=\"el\" href=\"qmfv_8h.html#aa87716ad6b28326982626c0c6a6ffcbd\">qmfv.h</a>\n</li>\n<li>QMFVSessionBegin()\n: <a class=\"el\" href=\"qmfv_8h.html#adbe23b402d4c50b4c06f47ca26253be5\">qmfv.h</a>\n</li>\n<li>QMFVSessionEnd()\n: <a class=\"el\" href=\"qmfv_8h.html#ad4ea72dd39285348cf26c627d67c6b65\">qmfv.h</a>\n</li>\n<li>QTTSAudioGet()\n: <a class=\"el\" href=\"qtts_8h.html#a4e4f6bed4b9e4ea553aa00ccf539c22a\">qtts.h</a>\n</li>\n<li>QTTSGetParam()\n: <a class=\"el\" href=\"qtts_8h.html#a0812612ff738a828490e4e3db59767e8\">qtts.h</a>\n</li>\n<li>QTTSSessionBegin()\n: <a class=\"el\" href=\"qtts_8h.html#a3fba4ad9599445073335851cc9479542\">qtts.h</a>\n</li>\n<li>QTTSSessionEnd()\n: <a class=\"el\" href=\"qtts_8h.html#a75d5047a2a889dbd890d116a6d0b550a\">qtts.h</a>\n</li>\n<li>QTTSTextPut()\n: <a class=\"el\" href=\"qtts_8h.html#a5b7d146d6a35341d4d73efd720ae987b\">qtts.h</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>SearchBox()\n: <a class=\"el\" href=\"search_8js.html#a52066106482f8136aa9e0ec859e8188f\">search.js</a>\n</li>\n<li>SearchResults()\n: <a class=\"el\" href=\"search_8js.html#a9189b9f7a32b6bc78240f40348f7fe03\">search.js</a>\n</li>\n<li>setClassAttr()\n: <a class=\"el\" href=\"search_8js.html#a499422fc054a5278ae32801ec0082c56\">search.js</a>\n</li>\n<li>setKeyActions()\n: <a class=\"el\" href=\"search_8js.html#a98192fa2929bb8e4b0a890a4909ab9b2\">search.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>toggleFolder()\n: <a class=\"el\" href=\"dynsections_8js.html#af244da4527af2d845dca04f5656376cd\">dynsections.js</a>\n</li>\n<li>toggleInherit()\n: <a class=\"el\" href=\"dynsections_8js.html#ac057b640b17ff32af11ced151c9305b4\">dynsections.js</a>\n</li>\n<li>toggleLevel()\n: <a class=\"el\" href=\"dynsections_8js.html#a19f577cc1ba571396a85bb1f48bf4df2\">dynsections.js</a>\n</li>\n<li>toggleVisibility()\n: <a class=\"el\" href=\"dynsections_8js.html#a1922c462474df7dfd18741c961d59a25\">dynsections.js</a>\n</li>\n</ul>\n\n\n<h3><a class=\"anchor\" id=\"index_u\"></a>- u -</h3><ul>\n<li>updateStripes()\n: <a class=\"el\" href=\"dynsections_8js.html#a8f7493ad859d4fbf2523917511ee7177\">dynsections.js</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/globals_vars.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: 文件成员</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n  <div id=\"navrow3\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"globals.html\"><span>全部</span></a></li>\n      <li><a href=\"globals_func.html\"><span>函数</span></a></li>\n      <li class=\"current\"><a href=\"globals_vars.html\"><span>变量</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;<ul>\n<li>aD\n: <a class=\"el\" href=\"jquery_8js.html#ad223f5fba68c41c1236671ac5c5b0fcb\">jquery.js</a>\n</li>\n<li>aM\n: <a class=\"el\" href=\"jquery_8js.html#a8cc6111a5def3ea889157d13fb9a9672\">jquery.js</a>\n</li>\n<li>ap\n: <a class=\"el\" href=\"jquery_8js.html#a6ddf393cc7f9a8828e197bb0d9916c44\">jquery.js</a>\n</li>\n<li>aQ\n: <a class=\"el\" href=\"jquery_8js.html#a79eb58dc6cdf0aef563d5dc1ded27df5\">jquery.js</a>\n</li>\n<li>au\n: <a class=\"el\" href=\"jquery_8js.html#a4fd8ddfab07c8d7c7cae0ab0e052cad3\">jquery.js</a>\n</li>\n<li>aZ\n: <a class=\"el\" href=\"jquery_8js.html#ac87125cdee1a5e57da4ef619af49bc7d\">jquery.js</a>\n</li>\n<li>b\n: <a class=\"el\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">jquery.js</a>\n</li>\n<li>bb\n: <a class=\"el\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">jquery.js</a>\n</li>\n<li>bq\n: <a class=\"el\" href=\"jquery_8js.html#af6ee77c71b2c89bdb365145ac5ad1219\">jquery.js</a>\n</li>\n<li>bs\n: <a class=\"el\" href=\"jquery_8js.html#ae77642f8ef73fb9c20c2a737d956acda\">jquery.js</a>\n</li>\n<li>c\n: <a class=\"el\" href=\"jquery_8js.html#abce695e0af988ece0826d9ad59b8160d\">jquery.js</a>\n</li>\n<li>css\n: <a class=\"el\" href=\"jquery_8js.html#a89ad527fcd82c01ebb587332f5b4fcd4\">jquery.js</a>\n</li>\n<li>curCSS\n: <a class=\"el\" href=\"jquery_8js.html#a88b21f8ba3af86d6981b1da520ece33b\">jquery.js</a>\n</li>\n<li>indexSectionLabels\n: <a class=\"el\" href=\"searchdata_8js.html#a529972e449c82dc118cbbd3bcf50c44d\">searchdata.js</a>\n</li>\n<li>indexSectionNames\n: <a class=\"el\" href=\"searchdata_8js.html#a77149ceed055c6c6ce40973b5bdc19ad\">searchdata.js</a>\n</li>\n<li>indexSectionsWithContent\n: <a class=\"el\" href=\"searchdata_8js.html#a6250af3c9b54dee6efc5f55f40c78126\">searchdata.js</a>\n</li>\n<li>k\n: <a class=\"el\" href=\"jquery_8js.html#ab26645c014aa005ecedef329ecf58c99\">jquery.js</a>\n</li>\n<li>L\n: <a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">jquery.js</a>\n</li>\n<li>searchData\n: <a class=\"el\" href=\"all__0_8js.html#ad01a7523f103d6242ef9b0451861231e\">all_0.js</a>\n, <a class=\"el\" href=\"all__1_8js.html#ad01a7523f103d6242ef9b0451861231e\">all_1.js</a>\n, <a class=\"el\" href=\"files__0_8js.html#ad01a7523f103d6242ef9b0451861231e\">files_0.js</a>\n, <a class=\"el\" href=\"files__1_8js.html#ad01a7523f103d6242ef9b0451861231e\">files_1.js</a>\n, <a class=\"el\" href=\"functions__0_8js.html#ad01a7523f103d6242ef9b0451861231e\">functions_0.js</a>\n, <a class=\"el\" href=\"functions__1_8js.html#ad01a7523f103d6242ef9b0451861231e\">functions_1.js</a>\n</li>\n<li>Z\n: <a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">jquery.js</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: 首页</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"index.html\"><span>首页</span></a></li>\n      <li><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">MSC for Windows&amp;Linux API 文档</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v1.7.1\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n * Copyright 2011, The Dojo Foundation\n * Released under the MIT, BSD, and GPL Licenses.\n *\n * Date: Mon Nov 21 21:11:03 2011 -0500\n */\n(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,bM=/\\S/,bI=/^\\s+/,bE=/\\s+$/,bA=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,bN=/^[\\],:{}\\s]*$/,bW=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,bJ=/(?:^|:|,)(?:\\s*\\[)+/g,by=/(webkit)[ \\/]([\\w.]+)/,bR=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,bQ=/(msie) ([\\w.]+)/,bS=/(mozilla)(?:.*? rv:([\\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+\"\").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0===\"body\"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0===\"string\"){if(b0.charAt(0)===\"<\"&&b0.charAt(b0.length-1)===\">\"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:\"\",jquery:\"1.7.1\",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3===\"find\"){b2.selector=this.selector+(this.selector?\" \":\"\")+b0}else{if(b3){b2.selector=this.selector+\".\"+b3+\"(\"+b0+\")\"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),\"slice\",bK.call(arguments).join(\",\"))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5===\"boolean\"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!==\"object\"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger(\"ready\").off(\"ready\")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks(\"once memory\");if(av.readyState===\"complete\"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener(\"DOMContentLoaded\",e,false);bb.addEventListener(\"load\",bF.ready,false)}else{if(av.attachEvent){av.attachEvent(\"onreadystatechange\",e);bb.attachEvent(\"onload\",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)===\"function\"},isArray:Array.isArray||function(b0){return bF.type(b0)===\"array\"},isWindow:function(b0){return b0&&typeof b0===\"object\"&&\"setInterval\" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||\"object\"},isPlainObject:function(b2){if(!b2||bF.type(b2)!==\"object\"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,\"constructor\")&&!bG.call(b2.constructor.prototype,\"isPrototypeOf\")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!==\"string\"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,\"@\").replace(bP,\"]\").replace(bJ,\"\"))){return(new Function(\"return \"+b0))()}bF.error(\"Invalid JSON: \"+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,\"text/xml\")}else{b0=new ActiveXObject(\"Microsoft.XMLDOM\");b0.async=\"false\";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName(\"parsererror\").length){bF.error(\"Invalid XML: \"+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb[\"eval\"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,\"ms-\").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?\"\":bO.call(b0)}:function(b0){return b0==null?\"\":b0.toString().replace(bI,\"\").replace(bE,\"\")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2===\"string\"||b2===\"function\"||b2===\"regexp\"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length===\"number\"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1===\"number\"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3===\"string\"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8===\"object\"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf(\"compatible\")<0&&bS.exec(b1)||[];return{browser:b0[1]||\"\",version:b0[2]||\"0\"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(b1,b0){bx[\"[object \"+b0+\"]\"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test(\"\\xA0\")){bI=/^[\\s\\xA0]+/;bE=/[\\s\\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener(\"DOMContentLoaded\",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState===\"complete\"){av.detachEvent(\"onreadystatechange\",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll(\"left\")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH===\"array\"){bE(bI)}else{if(bH===\"function\"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks(\"once memory\"),bw=b.Callbacks(\"once memory\"),bv=b.Callbacks(\"memory\"),e=\"pending\",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,\"resolve\"],fail:[bE,\"reject\"],progress:[bD,\"notify\"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+\"With\"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+\"With\"]=bA[bz].fireWith}bB.done(function(){e=\"resolved\"},bw.disable,bv.lock).fail(function(){e=\"rejected\"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement(\"div\"),bH=av.documentElement;bv.setAttribute(\"className\",\"t\");bv.innerHTML=\"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\";bI=bv.getElementsByTagName(\"*\");bF=bv.getElementsByTagName(\"a\")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement(\"select\");bx=bG.appendChild(av.createElement(\"option\"));bE=bv.getElementsByTagName(\"input\")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName(\"tbody\").length,htmlSerialize:!!bv.getElementsByTagName(\"link\").length,style:/top/.test(bF.getAttribute(\"style\")),hrefNormalized:(bF.getAttribute(\"href\")===\"/a\"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value===\"on\"),optSelected:bx.selected,getSetAttribute:bv.className!==\"t\",enctype:!!av.createElement(\"form\").enctype,html5Clone:av.createElement(\"nav\").cloneNode(true).outerHTML!==\"<:nav></:nav>\",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent(\"onclick\",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent(\"onclick\")}bE=av.createElement(\"input\");bE.value=\"t\";bE.setAttribute(\"type\",\"radio\");bJ.radioValue=bE.value===\"t\";bE.setAttribute(\"checked\",\"checked\");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML=\"\";if(bb.getComputedStyle){bA=av.createElement(\"div\");bA.style.width=\"0\";bA.style.marginRight=\"0\";bv.style.width=\"2px\";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB=\"on\"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,\"return;\");bw=(typeof bv[bB]===\"function\")}bJ[by+\"Bubbles\"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName(\"body\")[0];if(!bQ){return}bL=1;bS=\"position:absolute;top:0;left:0;width:1px;height:1px;margin:0;\";bR=\"visibility:hidden;border:0;\";e=\"style='\"+bS+\"border:5px solid #000;padding:0;'\";bP=\"<div \"+e+\"><div></div></div><table \"+e+\" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\";bM=av.createElement(\"div\");bM.style.cssText=bR+\"width:0;height:0;position:static;top:0;margin-top:\"+bL+\"px\";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement(\"div\");bM.appendChild(bv);bv.innerHTML=\"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\";bz=bv.getElementsByTagName(\"td\");bw=(bz[0].offsetHeight===0);bz[0].style.display=\"\";bz[1].style.display=\"none\";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML=\"\";bv.style.width=bv.style.paddingLeft=\"1px\";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!==\"undefined\"){bv.style.display=\"inline\";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display=\"\";bv.innerHTML=\"<div style='width:4px;'></div>\";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position=\"fixed\";bV.style.top=\"20px\";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top=\"\";bU.style.overflow=\"hidden\";bU.style.position=\"relative\";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\\{.*\\}|\\[.*\\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:\"jQuery\"+(b.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:true,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv===\"string\",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv===\"events\";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv===\"object\"||typeof bv===\"function\"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(\" \")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute(\"classid\")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by===\"undefined\"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],\"parsedAttrs\")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf(\"data-\")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],\"parsedAttrs\",true)}}return bz}else{if(typeof by===\"object\"){return this.each(function(){b.data(this,by)})}}bB=by.split(\".\");bB[1]=bB[1]?\".\"+bB[1]:\"\";if(bA===L){bz=this.triggerHandler(\"getData\"+bB[1]+\"!\",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler(\"setData\"+bB[1]+\"!\",bD);b.data(this,by,bA);bC.triggerHandler(\"changeData\"+bB[1]+\"!\",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv=\"data-\"+bw.replace(aA,\"-$1\").toLowerCase();by=bx.getAttribute(bv);if(typeof by===\"string\"){try{by=by===\"true\"?true:by===\"false\"?false:by===\"null\"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e===\"data\"&&b.isEmptyObject(bv[e])){continue}if(e!==\"toJSON\"){return false}}return true}function bi(by,bx,bA){var bw=bx+\"defer\",bv=bx+\"queue\",e=bx+\"mark\",bz=b._data(by,bw);if(bz&&(bA===\"queue\"||!b._data(by,bv))&&(bA===\"mark\"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||\"fx\")+\"mark\";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||\"fx\";var e=bv+\"mark\",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,\"mark\")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||\"fx\")+\"queue\";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||\"fx\";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw===\"inprogress\"){bw=bv.shift()}if(bw){if(bx===\"fx\"){bv.unshift(\"inprogress\")}b._data(by,bx+\".run\",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+\"queue \"+bx+\".run\",true);bi(by,bx,\"queue\")}}});b.fn.extend({queue:function(e,bv){if(typeof e!==\"string\"){bv=e;e=\"fx\"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e===\"fx\"&&bw[0]!==\"inprogress\"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||\"fx\";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(bD,bw){if(typeof bD!==\"string\"){bw=bD;bD=L}bD=bD||\"fx\";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+\"defer\",bA=bD+\"queue\",bC=bD+\"mark\",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks(\"once memory\"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\\n\\t\\r]/g,af=/\\s+/,aU=/\\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by===\"string\"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=\" \"+bx.className+\" \";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(\" \"+bA[bB]+\" \")){bz+=bA[bB]+\" \"}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz===\"string\")||bz===L){bA=(bz||\"\").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(\" \"+by.className+\" \").replace(aP,\" \");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(\" \"+bA[bB]+\" \",\" \")}by.className=b.trim(bx)}else{by.className=\"\"}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv===\"boolean\";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw===\"string\"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?\"addClass\":\"removeClass\"](bA)}}else{if(bw===\"undefined\"||bw===\"boolean\"){if(this.className){b._data(this,\"__className__\",this.className)}this.className=this.className||bx===false?\"\":b._data(this,\"__className__\")||\"\"}}})},hasClass:function(e){var bx=\" \"+e+\" \",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(\" \"+this[bw].className+\" \").replace(aP,\" \").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&\"get\" in e&&(bv=e.get(bw,\"value\"))!==L){return bv}bv=bw.value;return typeof bv===\"string\"?bv.replace(aU,\"\"):bv==null?\"\":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=\"\"}else{if(typeof bB===\"number\"){bB+=\"\"}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?\"\":bC+\"\"})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!(\"set\" in e)||e.set(this,bB,\"value\")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type===\"select-one\";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute(\"disabled\")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,\"optgroup\"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find(\"option\").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute===\"undefined\"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&\"set\" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,\"\"+bB);return bB}}}else{if(e&&\"get\" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,\"\");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error(\"type property can't be changed\")}else{if(!b.support.radioValue&&bv===\"radio\"&&b.nodeName(e,\"input\")){var bw=e.value;e.setAttribute(\"type\",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,\"button\")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,\"button\")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&\"set\" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&\"get\" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode(\"tabindex\");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!==\"boolean\"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!==\"\":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+\"\")}};b.attrHooks.tabindex.set=be.set;b.each([\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===\"\"){bw.setAttribute(e,\"auto\");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===\"\"){bw=\"false\"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each([\"href\",\"src\",\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=\"\"+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype=\"encoding\"}if(!b.support.checkOn){b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]={get:function(e){return e.getAttribute(\"value\")===null?\"on\":e.value}}})}b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\\.]*)?(?:\\.(.+))?$/,J=/\\bhover(\\.\\S+)?\\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||\"\").toLowerCase();bv[3]=bv[3]&&new RegExp(\"(?:^|\\\\s)\"+bv[3]+\"(?:\\\\s|$)\")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv[\"class\"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,\"mouseenter$1 mouseleave$1\")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!==\"undefined\"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(\" \");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||\"\").split(\".\").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(\".\")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent(\"on\"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||\"\")).split(\" \");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp(\"(^|\\\\.)\"+bC.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH===\"**\"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,[\"events\",\"handle\"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf(\"!\")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(\".\")>=0){bx=bG.split(\".\");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv===\"object\"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(\".\");bv.namespace_re=bv.namespace?new RegExp(\"(^|\\\\.)\"+bx.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;by=bG.indexOf(\":\")<0?\"on\"+bG:\"\";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,\"events\")||{})[bv.type]&&b._data(bH,\"handle\");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG===\"click\"&&b.nodeName(bA,\"a\"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!==\"focus\"&&bG!==\"blur\")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,\"events\")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type===\"click\")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:\"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent(\"on\"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,\"form\")){return false}b.event.add(this,\"click._submit keypress._submit\",function(bx){var bw=bx.target,bv=b.nodeName(bw,\"input\")||b.nodeName(bw,\"button\")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,\"submit._submit\",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate(\"submit\",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,\"form\")){return false}b.event.remove(this,\"._submit\")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\"){b.event.add(this,\"propertychange._change\",function(e){if(e.originalEvent.propertyName===\"checked\"){this._just_changed=true}});b.event.add(this,\"click._change\",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate(\"change\",this,e,true)}})}return false}b.event.add(this,\"beforeactivate._change\",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,\"change._change\",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate(\"change\",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!==\"radio\"&&e.type!==\"checkbox\")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,\"._change\");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:\"focusin\",blur:\"focusout\"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw===\"object\"){if(typeof e!==\"string\"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e===\"string\"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+\".\"+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw===\"object\"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e===\"function\"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||\"**\",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,\"**\"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,\"lastToggle\"+bx.guid)||0)%bw;b._data(this,\"lastToggle\"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each((\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\").split(\" \"),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});\n/*!\n * Sizzle CSS Selector Engine\n *  Copyright 2011, The Dojo Foundation\n *  Released under the MIT, BSD, and GPL Licenses.\n *  More information: http://sizzlejs.com/\n */\n(function(){var bH=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,bC=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\\\/g,bO=/\\r\\n/g,bQ=/\\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!==\"string\"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec(\"\");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]===\"~\"||bW[0]===\"+\")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=\"\"}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)===\"[object Array]\"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!==\"\\\\\"){bT[1]=(bT[1]||\"\").replace(bK,\"\");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],\"\");break}}}}if(!bW){bW=typeof e.getElementsByTagName!==\"undefined\"?e.getElementsByTagName(\"*\"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)===\"\\\\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],\"\");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR=\"\";if(e){if(e===1||e===9){if(typeof bU.textContent===\"string\"){return bU.textContent}else{if(typeof bU.innerText===\"string\"){return bU.innerText.replace(bO,\"\")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,NAME:/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(e){return e.getAttribute(\"href\")},type:function(e){return e.getAttribute(\"type\")}},relative:{\"+\":function(bW,bR){var bT=typeof bR===\"string\",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},\">\":function(bW,bR){var bV,bU=typeof bR===\"string\",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},\"\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"parentNode\",bR,bS,bT,bU,bV)},\"~\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"previousSibling\",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!==\"undefined\"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!==\"undefined\"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute(\"name\")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!==\"undefined\"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=\" \"+bT[1].replace(bK,\"\")+\" \";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(\" \"+bV.className+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,\"\")},TAG:function(bR,e){return bR[1].replace(bK,\"\").toLowerCase()},CHILD:function(e){if(e[1]===\"nth\"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\\+|\\s*/g,\"\");var bR=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(e[2]===\"even\"&&\"2n\"||e[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(e[2])&&\"0n+\"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,\"\");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||\"\").replace(bK,\"\");if(bU[2]===\"~=\"){bU[4]=\" \"+bU[4]+\" \"}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]===\"not\"){if((bH.exec(bU[3])||\"\").length>1||/^\\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!==\"hidden\"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute(\"type\"),bR=bS.type;return bS.nodeName.toLowerCase()===\"input\"&&\"text\"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"radio\"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===e.type},file:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"file\"===e.type},password:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"password\"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"submit\"===bR.type},image:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"image\"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"reset\"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e===\"input\"&&\"button\"===bR.type||e===\"button\"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e===\"contains\"){return(bS.textContent||bS.innerText||bw([bS])||\"\").indexOf(bX[3])>=0}else{if(e===\"not\"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case\"only\":case\"first\":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX===\"first\"){return true}bR=bS;case\"last\":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case\"nth\":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute(\"id\")===e},TAG:function(bR,e){return(e===\"*\"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(\" \"+(bR.className||bR.getAttribute(\"class\"))+\" \").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+\"\",bU=bT[2],bR=bT[4];return e==null?bU===\"!=\":!bU&&by.attr?e!=null:bU===\"=\"?bW===bR:bU===\"*=\"?bW.indexOf(bR)>=0:bU===\"~=\"?(\" \"+bW+\" \").indexOf(bR)>=0:!bR?bW&&e!==false:bU===\"!=\"?bW!==bR:bU===\"^=\"?bW.indexOf(bR)===0:bU===\"$=\"?bW.substr(bW.length-bR.length)===bR:bU===\"|=\"?bW===bR||bW.substr(0,bR.length+1)===bR+\"-\":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return\"\\\\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\\[]*\\])(?![^\\(]*\\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+bE.match[bz].source.replace(/\\\\(\\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)===\"[object Array]\"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length===\"number\"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement(\"div\"),bS=\"script\"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML=\"<a name='\"+bS+\"'/>\";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!==\"undefined\"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!==\"undefined\"&&bT.getAttributeNode(\"id\").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!==\"undefined\"&&bV.getAttributeNode(\"id\");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement(\"div\");e.appendChild(av.createComment(\"\"));if(e.getElementsByTagName(\"*\").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]===\"*\"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML=\"<a href='#'></a>\";if(e.firstChild&&typeof e.firstChild.getAttribute!==\"undefined\"&&e.firstChild.getAttribute(\"href\")!==\"#\"){bE.attrHandle.href=function(bR){return bR.getAttribute(\"href\",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement(\"div\"),bS=\"__sizzle__\";bT.innerHTML=\"<p class='TEST'></p>\";if(bT.querySelectorAll&&bT.querySelectorAll(\".TEST\").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4===\"body\"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!==\"object\"){var bW=bV,bX=bV.getAttribute(\"id\"),bU=bX||bS,b6=bV.parentNode,b5=/^\\s*[+~]/.test(b4);if(!bX){bV.setAttribute(\"id\",bU)}else{bU=bU.replace(/'/g,\"\\\\$&\")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll(\"[id='\"+bU+\"'] \"+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute(\"id\")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement(\"div\"),\"div\"),bR=false;try{bS.call(av.documentElement,\"[test!='']:sizzle\")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement(\"div\");e.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(!e.getElementsByClassName||e.getElementsByClassName(\"e\").length===0){return}e.lastChild.className=\"e\";if(e.getElementsByClassName(\"e\").length===1){return}bE.order.splice(1,0,\"CLASS\");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!==\"undefined\"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!==\"string\"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!==\"HTML\":false};var bM=function(bS,e,bW){var bV,bX=[],bU=\"\",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,\"\")}bS=bE.relative[bS]?bS+\"*\":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[\":\"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!==\"string\"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack(\"\",\"find\",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),\"not\",e)},filter:function(e){return this.pushStack(aG(this,e,true),\"filter\",e)},is:function(e){return !!e&&(typeof e===\"string\"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!==\"string\"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,\"closest\",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e===\"string\"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e===\"string\"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,\"parentNode\")},parentsUntil:function(bv,e,bw){return b.dir(bv,\"parentNode\",bw)},next:function(e){return b.nth(e,2,\"nextSibling\")},prev:function(e){return b.nth(e,2,\"previousSibling\")},nextAll:function(e){return b.dir(e,\"nextSibling\")},prevAll:function(e){return b.dir(e,\"previousSibling\")},nextUntil:function(bv,e,bw){return b.dir(bv,\"nextSibling\",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,\"previousSibling\",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw===\"string\"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(\",\"))}});b.extend({filter:function(bw,e,bv){if(bv){bw=\":not(\"+bw+\")\"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw===\"string\"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split(\"|\"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR=\"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",ag=/ jQuery\\d+=\"(?:\\d+|null)\"/g,ar=/^\\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,d=/<([\\w:]+)/,w=/<tbody/i,W=/<|&#?\\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp(\"<(?:\"+aR+\")\",\"i\"),o=/checked\\s*(?:[^=]|=\\s*.checked.)/i,bm=/\\/(java|ecma)script/i,aN=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,ax={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],area:[1,\"<map>\",\"</map>\"],_default:[0,\"\",\"\"]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,\"div<div>\",\"</div>\"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!==\"object\"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,\"body\")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,\"before\",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,\"after\",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName(\"*\"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName(\"*\"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,\"\"):null}else{if(typeof bx===\"string\"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||[\"\",\"\"])[1].toLowerCase()]){bx=bx.replace(R,\"<$1></$2>\");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName(\"*\"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!==\"string\"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),\"replaceWith\",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC===\"string\"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,\"tr\");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,\"table\")?(e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?\".\":\"\")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw===\"object\"){e.outerHTML=bv.outerHTML}else{if(bw===\"input\"&&(bv.type===\"checkbox\"||bv.type===\"radio\")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw===\"option\"){e.selected=bv.defaultSelected}else{if(bw===\"input\"||bw===\"textarea\"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB===\"string\"&&bB.length<512&&bA===av&&bB.charAt(0)===\"<\"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!==\"undefined\"){return e.getElementsByTagName(\"*\")}else{if(typeof e.querySelectorAll!==\"undefined\"){return e.querySelectorAll(\"*\")}else{return[]}}}function az(e){if(e.type===\"checkbox\"||e.type===\"radio\"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||\"\").toLowerCase();if(bv===\"input\"){az(e)}else{if(bv!==\"script\"&&typeof e.getElementsByTagName!==\"undefined\"){b.grep(e.getElementsByTagName(\"input\"),az)}}}function al(e){var bv=av.createElement(\"div\");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test(\"<\"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement===\"undefined\"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz===\"number\"){bz+=\"\"}if(!bz){continue}if(typeof bz===\"string\"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,\"<$1></$2>\");var bK=(d.exec(bz)||[\"\",\"\"])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement(\"div\");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK===\"table\"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===\"<table>\"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],\"tbody\")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)===\"number\"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],\"script\")&&(!bI[bE].type||bI[bE].type.toLowerCase()===\"text/javascript\")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName(\"script\"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:\"script\"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||\"\").replace(aN,\"/*$0*/\"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\\([^)]*\\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\\d+(?:px)?$/i,bn=/^-?\\d/,I=/^([\\-+])=([\\-+.\\de]+)/,a7={position:\"absolute\",visibility:\"hidden\",display:\"block\"},an=[\"Left\",\"Right\"],a1=[\"Top\",\"Bottom\"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,\"opacity\",\"opacity\");return e===\"\"?\"1\":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{\"float\":b.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC===\"string\"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC=\"number\"}if(bD==null||bC===\"number\"&&isNaN(bD)){return}if(bC===\"number\"&&!b.cssNumber[bz]){bD+=\"px\"}if(!bE||!(\"set\" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&\"get\" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx===\"cssFloat\"){bx=\"float\"}if(e&&\"get\" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each([\"height\",\"width\"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+\"px\"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||\"\")?(parseFloat(RegExp.$1)/100)+\"\":e?\"1\":\"\"},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?\"alpha(opacity=\"+bz*100+\")\":\"\",bw=bv&&bv.filter||bx.filter||\"\";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,\"\"))===\"\"){bx.removeAttribute(\"filter\");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+\" \"+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:\"inline-block\"},function(){if(bv){e=Z(bw,\"margin-right\",\"marginRight\")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,\"-$1\").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===\"\"&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw===\"fontSize\"?\"1em\":(bv||0);bv=bx.pixelLeft+\"px\";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===\"\"?\"auto\":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw===\"width\"?by.offsetWidth:by.offsetHeight,bz=bw===\"width\"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!==\"border\"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,\"padding\"+bz[bx]))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}}}return bA+\"px\"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,\"padding\"+bz[bx]))||0;if(bv!==\"padding\"){bA+=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+\"px\"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,\"display\"))===\"none\")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\\[\\]$/,bs=/\\r?\\n/g,bq=/#.*$/,aD=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\\/\\//,M=/\\?/,a6=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,q=/^(?:select|textarea)/i,h=/\\s+/,br=/([?&])_=[^&]*/,K=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=[\"*/\"]+[\"*\"];try{aE=bl.href}catch(aw){aE=av.createElement(\"a\");aE.href=\"\";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!==\"string\"){bA=by;by=\"*\"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\\+/.test(bv);if(bC){bv=bv.substr(1)||\"*\"}bB=e[bv]=e[bv]||[];bB[bC?\"unshift\":\"push\"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC===\"string\"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx[\"*\"]){bC=aW(bv,bE,bz,bD,\"*\",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!==\"string\"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(\" \");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx=\"GET\";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz===\"object\"){bz=b.param(bz,b.ajaxSettings.traditional);bx=\"POST\"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:\"html\",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b(\"<div>\").append(bD.replace(a6,\"\")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,\"\\r\\n\")}}):{name:bv.name,value:bw.replace(bs,\"\\r\\n\")}}).get()}});b.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each([\"get\",\"post\"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,\"script\")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,\"json\")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:true,async:true,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":bb.String,\"text html\":true,\"text json\":b.parseJSON,\"text xml\":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz===\"object\"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks(\"once memory\"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||\"abort\";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||\"\";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader(\"Last-Modified\"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader(\"Etag\"))){b.etag[bC]=b2}}if(bZ===304){bX=\"notmodified\";bT=true}else{try{b4=G(bD,bY);bX=\"success\";bT=true}catch(b1){bX=\"parsererror\";b3=b1}}}else{b3=bX;if(!bX||bZ){bX=\"error\";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=\"\"+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger(\"ajax\"+(bT?\"Success\":\"Error\"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger(\"ajaxComplete\",[bJ,bD]);if(!(--b.active)){b.event.trigger(\"ajaxStop\")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+\"\").replace(bq,\"\").replace(c,s[1]+\"//\");bD.dataTypes=b.trim(bD.dataType||\"*\").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]===\"http:\"?80:443))!=(s[3]||(s[1]===\"http:\"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!==\"string\"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger(\"ajaxStart\")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?\"&\":\"?\")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,\"$1_=\"+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?\"&\":\"?\")+\"_=\"+bv:\"\")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader(\"Content-Type\",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader(\"If-Modified-Since\",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader(\"If-None-Match\",b.etag[bC])}}bJ.setRequestHeader(\"Accept\",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!==\"*\"?\", \"+aV+\"; q=0.01\":\"\"):bD.accepts[\"*\"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,\"No Transport\")}else{bJ.readyState=1;if(bw){bG.trigger(\"ajaxSend\",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort(\"timeout\")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+\"=\"+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join(\"&\").replace(k,\"+\")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+\"[\"+(typeof bz===\"object\"||b.isArray(bz)?bA:\"\")+\"]\",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by===\"object\"){for(var e in by){v(bw+\"[\"+e+\"]\",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]===\"*\"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader(\"content-type\")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+\" \"+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE===\"string\"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC===\"*\"){bC=bx}else{if(bx!==\"*\"&&bx!==bC){by=bx+\" \"+bC;bF=bG[by]||bG[\"* \"+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(\" \");if(bB[0]===bx||bB[0]===\"*\"){e=bG[bB[1]+\" \"+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error(\"No conversion from \"+by.replace(\" \",\" to \"))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\\=)\\?(&|$)|\\?\\?/i;b.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return b.expando+\"_\"+(aC++)}});b.ajaxPrefilter(\"json jsonp\",function(bD,bA,bC){var bx=bD.contentType===\"application/x-www-form-urlencoded\"&&(typeof bD.data===\"string\");if(bD.dataTypes[0]===\"jsonp\"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv=\"$1\"+bw+\"$2\";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\\?/.test(e)?\"&\":\"?\")+bD.jsonp+\"=\"+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters[\"script json\"]=function(){if(!bB){b.error(bw+\" was not called\")}return bB[0]};bD.dataTypes[0]=\"json\";return\"script\"}});b.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter(\"script\",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type=\"GET\";e.global=false}});b.ajaxTransport(\"script\",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName(\"head\")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement(\"script\");e.async=\"async\";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,\"success\")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&(\"withCredentials\" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB[\"X-Requested-With\"]){bB[\"X-Requested-With\"]=\"XMLHttpRequest\"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=\"\"}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,a3,aH=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0(\"show\",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,\"olddisplay\")&&by===\"none\"){by=bw.style.display=\"\"}if(by===\"\"&&b.css(bw,\"display\")===\"none\"){b._data(bw,\"olddisplay\",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===\"\"||by===\"none\"){bw.style.display=b._data(bw,\"olddisplay\")||\"\"}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0(\"hide\",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,\"display\");if(by!==\"none\"&&!b._data(bw,\"olddisplay\")){b._data(bw,\"olddisplay\",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display=\"none\"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw===\"boolean\";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(\":hidden\");b(this)[by?\"show\":\"hide\"]()})}else{this.animate(a0(\"toggle\",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(\":hidden\"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||\"swing\"}if(bF===\"hide\"&&bI||bF===\"show\"&&!bI){return bE.complete.call(this)}if(bK&&(bB===\"height\"||bB===\"width\")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,\"display\")===\"inline\"&&b.css(this,\"float\")===\"none\"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)===\"inline\"){this.style.display=\"inline-block\"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow=\"hidden\"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,\"toggle\"+bD)||(bF===\"toggle\"?bI?\"show\":\"hide\":0);if(bA){b._data(this,\"toggle\"+bD,bA===\"show\"?\"hide\":\"show\");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?\"\":\"px\");if(bL!==\"px\"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]===\"-=\"?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,\"\")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!==\"string\"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||\"fx\",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(\".run\")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+\".run\"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0(\"show\",1),slideUp:a0(\"hide\",1),slideToggle:a0(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw===\"object\"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration===\"number\"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue=\"fx\"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv===\"auto\"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?\"\":\"px\");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,\"fxshow\"+e.prop)===L){b._data(e.elem,\"fxshow\"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,\"fxshow\"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each([\"\",\"X\",\"Y\"],function(bC,bD){bz.style[\"overflow\"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,\"fxshow\"+bA,true);b.removeData(bz,\"toggle\"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,\"opacity\",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each([\"width\",\"height\"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b(\"<\"+bx+\">\").appendTo(e),bw=bv.css(\"display\");bv.remove();if(bw===\"none\"||bw===\"\"){if(!a8){a8=av.createElement(\"iframe\");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode===\"CSS1Compat\"?\"<!doctype html>\":\"\")+\"<html><body>\");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,\"display\");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if(\"getBoundingClientRect\" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position===\"fixed\"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!==\"visible\"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position===\"relative\"||e.position===\"static\"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position===\"fixed\"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,\"marginTop\"))||0;bv+=parseFloat(b.css(e,\"marginLeft\"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,\"position\");if(bB===\"static\"){bx.style.position=\"relative\"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,\"top\"),bE=b.css(bx,\"left\"),bF=(bB===\"absolute\"||bB===\"fixed\")&&b.inArray(\"auto\",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if(\"using\" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,\"marginTop\"))||0;bx.left-=parseFloat(b.css(bw,\"marginLeft\"))||0;e.top+=parseFloat(b.css(bv[0],\"borderTopWidth\"))||0;e.left+=parseFloat(b.css(bv[0],\"borderLeftWidth\"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,\"position\")===\"static\")){e=e.offsetParent}return e})}});b.each([\"Left\",\"Top\"],function(bv,e){var bw=\"scroll\"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?(\"pageXOffset\" in by)?by[bv?\"pageYOffset\":\"pageXOffset\"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each([\"Height\",\"Width\"],function(bv,e){var bw=e.toLowerCase();b.fn[\"inner\"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,\"padding\")):this[bw]():null};b.fn[\"outer\"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?\"margin\":\"border\")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement[\"client\"+e],bx=bA.document.body;return bA.document.compatMode===\"CSS1Compat\"&&bB||bx&&bx[\"client\"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement[\"client\"+e],bA.body[\"scroll\"+e],bA.documentElement[\"scroll\"+e],bA.body[\"offset\"+e],bA.documentElement[\"offset\"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz===\"string\"?bz:bz+\"px\")}}}}});bb.jQuery=bb.$=b;if(typeof define===\"function\"&&define.amd&&define.amd.jQuery){define(\"jquery\",[],function(){return b})}})(window);/*!\n * jQuery UI 1.8.18\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI\n */\n(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:\"1.8.18\",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e===\"number\"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css(\"position\")))||(/absolute/).test(this.css(\"position\"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,\"position\",1))&&(/(auto|scroll)/).test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0)}return(/fixed/).test(this.css(\"position\"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css(\"zIndex\",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css(\"position\");if(e===\"absolute\"||e===\"relative\"||e===\"fixed\"){g=parseInt(f.css(\"zIndex\"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?\"selectstart\":\"mousedown\")+\".ui-disableSelection\",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(\".ui-disableSelection\")}});a.each([\"Width\",\"Height\"],function(g,e){var f=e===\"Width\"?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,\"padding\"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,\"border\"+this+\"Width\",true))||0}if(n){l-=parseFloat(a.curCSS(m,\"margin\"+this,true))||0}});return l}a.fn[\"inner\"+e]=function(i){if(i===d){return k[\"inner\"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+\"px\")})};a.fn[\"outer\"+e]=function(i,l){if(typeof i!==\"number\"){return k[\"outer\"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+\"px\")})}});function c(g,e){var j=g.nodeName.toLowerCase();if(\"area\"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!==\"map\"){return false}f=a(\"img[usemap=#\"+h+\"]\")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:\"a\"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,\"visibility\")===\"hidden\"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[\":\"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,\"tabindex\")))},tabbable:function(g){var e=a.attr(g,\"tabindex\"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement(\"div\"));f.offsetHeight;a.extend(f.style,{minHeight:\"100px\",height:\"auto\",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart=\"onselectstart\" in f;e.removeChild(f).style.display=\"none\"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css(\"overflow\")===\"hidden\"){return false}var e=(f&&f===\"left\")?\"scrollLeft\":\"scrollTop\",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!\n * jQuery UI Widget 1.8.18\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Widget\n */\n(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler(\"remove\")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b(\"*\",this).add([this]).each(function(){try{b(this).triggerHandler(\"remove\")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(\".\")[0],j;f=f.split(\".\")[1];j=g+\"-\"+f;if(!e){e=h;h=b.Widget}b.expr[\":\"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i===\"string\",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)===\"_\"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind(\"remove.\"+this.widgetName,function(){e.destroy()});this._create();this._trigger(\"create\");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind(\".\"+this.widgetName).removeData(this.widgetName);this.widget().unbind(\".\"+this.widgetName).removeAttr(\"aria-disabled\").removeClass(this.widgetBaseClass+\"-disabled ui-state-disabled\")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f===\"string\"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e===\"disabled\"){this.widget()[f?\"addClass\":\"removeClass\"](this.widgetBaseClass+\"-disabled ui-state-disabled\").attr(\"aria-disabled\",f)}return this},enable:function(){return this._setOption(\"disabled\",false)},disable:function(){return this._setOption(\"disabled\",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!\n * jQuery UI Mouse 1.8.18\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Mouse\n *\n * Depends:\n *\tjquery.ui.widget.js\n */\n(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget(\"ui.mouse\",{options:{cancel:\":input,option\",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind(\"mousedown.\"+this.widgetName,function(e){return d._mouseDown(e)}).bind(\"click.\"+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+\".preventClickEvent\")){b.removeData(e.target,d.widgetName+\".preventClickEvent\");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel==\"string\"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+\".preventClickEvent\")){b.removeData(f.target,this.widgetName+\".preventClickEvent\")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+\".preventClickEvent\",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget(\"ui.resizable\",c.ui.mouse,{widgetEventPrefix:\"resize\",options:{alsoResize:false,animate:false,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:\"e,s,se\",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass(\"ui-resizable\");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||\"ui-resizable-helper\":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class=\"ui-wrapper\" style=\"overflow: hidden;\"></div>').css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")}));this.element=this.element.parent().data(\"resizable\",this.element.data(\"resizable\"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css(\"marginLeft\"),marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css(\"resize\");this.originalElement.css(\"resize\",\"none\");this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"}));this.originalElement.css({margin:this.originalElement.css(\"margin\")});this._proportionallyResize()}this.handles=k.handles||(!c(\".ui-resizable-handle\",this.element).length?\"e,s,se\":{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"});if(this.handles.constructor==String){if(this.handles==\"all\"){this.handles=\"n,e,s,w,se,sw,ne,nw\"}var l=this.handles.split(\",\");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e=\"ui-resizable-\"+j;var h=c('<div class=\"ui-resizable-handle '+e+'\"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if(\"se\"==j){h.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\")}this.handles[j]=\".ui-resizable-\"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=[\"padding\",/ne|nw|n/.test(n)?\"Top\":/se|sw|s/.test(n)?\"Bottom\":/^e$/.test(n)?\"Right\":\"Left\"].join(\"\");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(\".ui-resizable-handle\",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:\"se\"}});if(k.autoHide){this._handles.hide();c(this.element).addClass(\"ui-resizable-autohide\").hover(function(){if(k.disabled){return}c(this).removeClass(\"ui-resizable-autohide\");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass(\"ui-resizable-autohide\");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css(\"position\"),width:f.outerWidth(),height:f.outerHeight(),top:f.css(\"top\"),left:f.css(\"left\")})).remove()}this.originalElement.css(\"resize\",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(\".ui-draggable\")||(/absolute/).test(e.css(\"position\"))){e.css({position:\"absolute\",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css(\"left\")),h=b(this.helper.css(\"top\"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio==\"number\")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(\".ui-resizable-\"+this.axis).css(\"cursor\");c(\"body\").css(\"cursor\",i==\"auto\"?this.axis+\"-resize\":i);e.addClass(\"ui-resizable-resizing\");this._propagate(\"start\",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate(\"resize\",e);h.css({top:this.position.top+\"px\",left:this.position.left+\"px\",width:this.size.width+\"px\",height:this.size.height+\"px\"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger(\"resize\",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],\"left\")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css(\"left\"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css(\"top\"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c(\"body\").css(\"cursor\",\"auto\");this.element.removeClass(\"ui-resizable-resizing\");this._propagate(\"stop\",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e==\"sw\"){h.left=j.left+(f.width-h.width);h.top=null}if(e==\"nw\"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css(\"borderTopWidth\"),h.css(\"borderRightWidth\"),h.css(\"borderBottomWidth\"),h.css(\"borderLeftWidth\")],j=[h.css(\"paddingTop\"),h.css(\"paddingRight\"),h.css(\"paddingBottom\"),h.css(\"paddingLeft\")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(\":hidden\")||c(g).parents(\":hidden\").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style=\"overflow:hidden;\"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:\"absolute\",left:this.elementOffset.left-g+\"px\",top:this.elementOffset.top-g+\"px\",zIndex:++i.zIndex});this.helper.appendTo(\"body\").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!=\"resize\"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:\"1.8.18\"});c.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(f,g){var e=c(this).data(\"resizable\"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data(\"resizable-alsoresize\",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css(\"left\"),10),top:parseInt(k.css(\"top\"),10)})})};if(typeof(i.alsoResize)==\"object\"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data(\"resizable\"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data(\"resizable-alsoresize\"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)==\"object\"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData(\"resizable-alsoresize\")}});c.ui.plugin.add(\"resizable\",\"animate\",{stop:function(i,n){var p=c(this).data(\"resizable\"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],\"left\")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css(\"left\"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css(\"top\"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css(\"width\"),10),height:parseInt(p.element.css(\"height\"),10),top:parseInt(p.element.css(\"top\"),10),left:parseInt(p.element.css(\"left\"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate(\"resize\",i)}})}});c.ui.plugin.add(\"resizable\",\"containment\",{start:function(f,r){var t=c(this).data(\"resizable\"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(p,o){i[p]=b(n.css(\"padding\"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,\"left\")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data(\"resizable\"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css(\"position\"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css(\"position\"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data(\"resizable\"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css(\"position\"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css(\"position\"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add(\"resizable\",\"ghost\",{start:function(g,h){var e=c(this).data(\"resizable\"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:\"block\",position:\"relative\",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(typeof i.ghost==\"string\"?i.ghost:\"\");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data(\"resizable\"),h=e.options;if(e.ghost){e.ghost.css({position:\"relative\",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data(\"resizable\"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add(\"resizable\",\"grid\",{resize:function(e,m){var p=c(this).data(\"resizable\"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid==\"number\"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!\n * jQuery hashchange event - v1.3 - 7/21/2010\n * http://benalman.com/projects/jquery-hashchange-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n(function($,e,b){var c=\"hashchange\",h=document,f,g=$.event.special,i=h.documentMode,d=\"on\"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return\"#\"+j.replace(/^[^#]*#?(.*)$/,\"$1\")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,\"\")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex=\"-1\" title=\"empty\"/>').hide().one(\"load\",function(){r||l(a());n()}).attr(\"src\",r||\"javascript:0\").insertAfter(\"body\")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName===\"title\"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain=\"'+t+'\"<\\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:\"xy\",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),[\"iframe\",\"#document\",\"html\",\"body\"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode==\"BackCompat\"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e==\"object\"){d=e;e=0}if(typeof d==\"function\"){d={onAfter:d}}if(f==\"max\"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is(\"html,body\");switch(typeof k){case\"number\":case\"string\":if(/^([+-]=)?\\d+(\\.\\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case\"object\":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(\"\"),function(q,r){var s=r==\"x\"?\"Left\":\"Top\",u=s.toLowerCase(),p=\"scroll\"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css(\"margin\"+s))||0;g[p]-=parseInt(k.css(\"border\"+s+\"Width\"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r==\"x\"?\"width\":\"height\"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)==\"%\"?parseFloat(t)/100*n:t}if(/^\\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i==\"x\"?\"Width\":\"Height\",e=\"scroll\"+h;if(!c(j).is(\"html,body\")){return j[e]-c(j)[h.toLowerCase()]()}var g=\"client\"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d==\"object\"?d:{top:d,left:d}}})(jQuery);/*!\n PowerTip - v1.2.0 - 2013-04-03\n http://stevenbenner.github.com/jquery-powertip/\n Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).\n Released under MIT license.\n https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt\n*/\n(function(a){if(typeof define===\"function\"&&define.amd){define([\"jquery\"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k(\"body\");var n=\"displayController\",e=\"hasActiveHover\",d=\"forcedOpen\",u=\"hasMouseMove\",f=\"mouseOnToPopup\",g=\"originalTitle\",y=\"powertip\",o=\"powertipjq\",l=\"powertiptarget\",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)===\"string\"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr(\"title\");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr(\"title\")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({\"mouseenter.powertip\":function J(P){k.powerTip.show(this,P)},\"mouseleave.powertip\":function L(){k.powerTip.hide(this)},\"focus.powertip\":function K(){k.powerTip.show(this)},\"blur.powertip\":function H(){k.powerTip.hide(this,true)},\"keydown.powertip\":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:\"powerTip\",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:\"n\",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:[\"n\",\"ne\",\"nw\",\"s\"],e:[\"e\",\"ne\",\"se\",\"w\",\"nw\",\"sw\",\"n\",\"s\",\"e\"],s:[\"s\",\"se\",\"sw\",\"n\"],w:[\"w\",\"nw\",\"sw\",\"e\",\"ne\",\"se\",\"n\",\"s\",\"w\"],nw:[\"nw\",\"w\",\"sw\",\"n\",\"s\",\"se\",\"nw\"],ne:[\"ne\",\"e\",\"se\",\"n\",\"s\",\"sw\",\"ne\"],sw:[\"sw\",\"w\",\"nw\",\"s\",\"n\",\"ne\",\"sw\"],se:[\"se\",\"e\",\"ne\",\"s\",\"n\",\"nw\",\"se\"],\"nw-alt\":[\"nw-alt\",\"n\",\"ne-alt\",\"sw-alt\",\"s\",\"se-alt\",\"w\",\"e\"],\"ne-alt\":[\"ne-alt\",\"n\",\"nw-alt\",\"se-alt\",\"s\",\"sw-alt\",\"e\",\"w\"],\"sw-alt\":[\"sw-alt\",\"s\",\"se-alt\",\"nw-alt\",\"n\",\"ne-alt\",\"w\",\"e\"],\"se-alt\":[\"se-alt\",\"s\",\"sw-alt\",\"ne-alt\",\"n\",\"nw-alt\",\"e\",\"w\"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(\".powertip\").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr(\"title\",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top=\"auto\";F.left=\"auto\";F.right=\"auto\";F.bottom=\"auto\";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split(\"-\")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case\"n\":N.set(\"left\",I.left-(J/2));N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"e\":N.set(\"left\",I.left+P);N.set(\"top\",I.top-(O/2));break;case\"s\":N.set(\"left\",I.left-(J/2));N.set(\"top\",I.top+P);break;case\"w\":N.set(\"top\",I.top-(O/2));N.set(\"right\",c.windowWidth-I.left+P);break;case\"nw\":N.set(\"bottom\",c.windowHeight-I.top+P);N.set(\"right\",c.windowWidth-I.left-20);break;case\"nw-alt\":N.set(\"left\",I.left);N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"ne\":N.set(\"left\",I.left-20);N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"ne-alt\":N.set(\"bottom\",c.windowHeight-I.top+P);N.set(\"right\",c.windowWidth-I.left);break;case\"sw\":N.set(\"top\",I.top+P);N.set(\"right\",c.windowWidth-I.left-20);break;case\"sw-alt\":N.set(\"left\",I.left);N.set(\"top\",I.top+P);break;case\"se\":N.set(\"left\",I.left-20);N.set(\"top\",I.top+P);break;case\"se-alt\":N.set(\"top\",I.top+P);N.set(\"right\",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case\"n\":M=O.left+N/2;L=O.top;break;case\"e\":M=O.left+N;L=O.top+I/2;break;case\"s\":M=O.left+N/2;L=O.top+I;break;case\"w\":M=O.left;L=O.top+I/2;break;case\"nw\":M=O.left;L=O.top;break;case\"ne\":M=O.left+N;L=O.top;break;case\"sw\":M=O.left;L=O.top+I;break;case\"se\":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest(\"svg\")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=[\"nw\",\"n\",\"ne\",\"e\",\"se\",\"s\",\"sw\",\"w\"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k(\"#\"+Q.popupId);if(O.length===0){O=k(\"<div/>\",{id:Q.popupId});if(w.length===0){w=k(\"body\")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on(\"mousemove\",M);s.on(\"scroll\",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger(\"powerTipPreRender\");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger(\"powerTipRender\");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger(\"powerTipOpen\")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set(\"top\",c.currentY+Q.offset);T.set(\"left\",c.currentX+Q.offset);O.css(T);R.trigger(\"powerTipClose\")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set(\"top\",c.currentY+Q.offset);U.set(\"left\",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set(\"left\",c.windowWidth-R)}else{if(S===p.bottom){U.set(\"top\",c.scrollTop+c.windowHeight-V)}}}else{U.set(\"left\",c.currentX-R-Q.offset);U.set(\"top\",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set(\"top\",0);V.set(\"left\",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(\":disabled\")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(\":focus\")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on(\"mousemove\",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k(\"#\"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/jquery_8js.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual/jquery.js 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">函数</a> &#124;\n<a href=\"#var-members\">变量</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">jquery.js 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\n函数</h2></td></tr>\n<tr class=\"memitem:a5fb206c91c64d1be35fde236706eab86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"jquery_8js.html#a2fa551895933fae935a0a6b87282241d\">b</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a5fb206c91c64d1be35fde236706eab86\">extend</a> ({cssHooks:{opacity:{get:function(bw, bv){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bv){var e=<a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a>(bw,&quot;opacity&quot;,&quot;opacity&quot;);return e===&quot;&quot;?&quot;1&quot;:e}else{return bw.style.opacity}}}}, cssNumber:{fillOpacity:true, fontWeight:true, lineHeight:true, opacity:true, orphans:true, widows:true, zIndex:true, zoom:true}, cssProps:{&quot;float&quot;:b.support.cssFloat?&quot;cssFloat&quot;:&quot;styleFloat&quot;}, style:function(bx, bw, bD, by){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB, bC, bz=b.camelCase(bw), bv=bx.style, bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bD!==<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){bC=typeof bD;<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bC===&quot;string&quot;&amp;&amp;(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(<a class=\"el\" href=\"jquery_8js.html#a89ad527fcd82c01ebb587332f5b4fcd4\">b.css</a>(bx, bw));bC=&quot;number&quot;}if(bD==null||bC===&quot;number&quot;&amp;&amp;isNaN(bD)){return}<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bC===&quot;number&quot;&amp;&amp;!b.cssNumber[bz]){bD+=&quot;px&quot;}if(!bE||!(&quot;set&quot;in bE)||(bD=bE.set(bx, bD))!==<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){try{bv[bw]=bD}catch(bA){}}}else{<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bE &amp;&amp;&quot;get&quot;in bE &amp;&amp;(bB=bE.get(bx, false, by))!==<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){return bB}return bv[bw]}}, css:function(by, bx, bv){var bw, e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bx===&quot;cssFloat&quot;){bx=&quot;float&quot;}if(e &amp;&amp;&quot;get&quot;in e &amp;&amp;(bw=e.get(by, true, bv))!==<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){return bw}else{<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(<a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a>){return <a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a>(by, bx)}}}, swap:function(bx, bw, by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}})</td></tr>\n<tr class=\"separator:a5fb206c91c64d1be35fde236706eab86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a871ff39db627c54c710a3e9909b8234c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"jquery_8js.html#a2fa551895933fae935a0a6b87282241d\">b</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a> ([&quot;height&quot;,&quot;width&quot;], function(bv, e){b.cssHooks[e]={get:function(by, bx, bw){var bz;<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bx){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(by.offsetWidth!==0){return <a class=\"el\" href=\"jquery_8js.html#a2335e57f79b6acfb6de59c235dc8a83e\">p</a>(by, e, bw)}else{b.swap(by, a7, function(){bz=<a class=\"el\" href=\"jquery_8js.html#a2335e57f79b6acfb6de59c235dc8a83e\">p</a>(by, e, bw)})}return bz}}, set:function(bw, bx){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bc.test(bx)){bx=parseFloat(bx);<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bx &gt;=0){return bx+&quot;px&quot;}}else{return bx}}}})</td></tr>\n<tr class=\"separator:a871ff39db627c54c710a3e9909b8234c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9db6d45a025ad692282fe23e69eeba43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a9db6d45a025ad692282fe23e69eeba43\">if</a> (!b.support.opacity)</td></tr>\n<tr class=\"separator:a9db6d45a025ad692282fe23e69eeba43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2fa551895933fae935a0a6b87282241d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a2fa551895933fae935a0a6b87282241d\">b</a> (function(){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw, bv){var e;b.swap(bw,{display:&quot;inline-block&quot;}, function(){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bv){e=<a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a>(bw,&quot;margin-right&quot;,&quot;marginRight&quot;)}else{e=bw.style.marginRight}});return e}}}})</td></tr>\n<tr class=\"separator:a2fa551895933fae935a0a6b87282241d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a30d3d2cd5b567c9f31b2aa30b9cb3bb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a30d3d2cd5b567c9f31b2aa30b9cb3bb8\">if</a> (av.defaultView &amp;&amp;av.defaultView.getComputedStyle)</td></tr>\n<tr class=\"separator:a30d3d2cd5b567c9f31b2aa30b9cb3bb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2c54bd8ed7482e89d19331ba61fe221c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a2c54bd8ed7482e89d19331ba61fe221c\">if</a> (av.documentElement.currentStyle)</td></tr>\n<tr class=\"separator:a2c54bd8ed7482e89d19331ba61fe221c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2335e57f79b6acfb6de59c235dc8a83e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a2335e57f79b6acfb6de59c235dc8a83e\">p</a> (by, bw, bv)</td></tr>\n<tr class=\"separator:a2335e57f79b6acfb6de59c235dc8a83e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a42cbfadee2b4749e8f699ea8d745a0e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a> (b.expr &amp;&amp;b.expr.filters)</td></tr>\n<tr class=\"separator:a42cbfadee2b4749e8f699ea8d745a0e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\n变量</h2></td></tr>\n<tr class=\"memitem:a1d6558865876e1c8cca029fce41a4bdb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a></td></tr>\n<tr class=\"separator:a1d6558865876e1c8cca029fce41a4bdb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a38ee4c0b5f4fe2a18d0c783af540d253\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a> {var av=bb.document,bu=bb.navigator,bl=bb.location</td></tr>\n<tr class=\"separator:a38ee4c0b5f4fe2a18d0c783af540d253\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa4026ad5544b958e54ce5e106fa1c805\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a></td></tr>\n<tr class=\"separator:aa4026ad5544b958e54ce5e106fa1c805\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fd8ddfab07c8d7c7cae0ab0e052cad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a4fd8ddfab07c8d7c7cae0ab0e052cad3\">au</a> =/opacity=([^)]*)/,z=/([A-<a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a>]|^ms)/g,bc=/^-?\\d+(?:px)?$/i,bn=/^-?\\d/,I=/^([\\-+])=([\\-+.\\de]+)/,a7={position:&quot;absolute&quot;,visibility:&quot;hidden&quot;,display:&quot;block&quot;},an=[&quot;Left&quot;,&quot;Right&quot;],a1=[&quot;Top&quot;,&quot;Bottom&quot;],Z,aI,aX</td></tr>\n<tr class=\"separator:a4fd8ddfab07c8d7c7cae0ab0e052cad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a89ad527fcd82c01ebb587332f5b4fcd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"jquery_8js.html#a2fa551895933fae935a0a6b87282241d\">b</a> fn&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a89ad527fcd82c01ebb587332f5b4fcd4\">css</a> =function(e,bv){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(arguments.length===2&amp;&amp;bv===<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>?b.style(bx,bw,by):b.css(bx,bw)})}</td></tr>\n<tr class=\"separator:a89ad527fcd82c01ebb587332f5b4fcd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a88b21f8ba3af86d6981b1da520ece33b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"jquery_8js.html#a2fa551895933fae935a0a6b87282241d\">b</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a88b21f8ba3af86d6981b1da520ece33b\">curCSS</a> =<a class=\"el\" href=\"jquery_8js.html#a89ad527fcd82c01ebb587332f5b4fcd4\">b.css</a></td></tr>\n<tr class=\"separator:a88b21f8ba3af86d6981b1da520ece33b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adc18d83abfd9f87d396e8fd6b6ac0fe1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a> =aI||aX</td></tr>\n<tr class=\"separator:adc18d83abfd9f87d396e8fd6b6ac0fe1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab26645c014aa005ecedef329ecf58c99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#ab26645c014aa005ecedef329ecf58c99\">k</a> =/%20/g</td></tr>\n<tr class=\"separator:ab26645c014aa005ecedef329ecf58c99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ddf393cc7f9a8828e197bb0d9916c44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a6ddf393cc7f9a8828e197bb0d9916c44\">ap</a> =/\\[\\]$/</td></tr>\n<tr class=\"separator:a6ddf393cc7f9a8828e197bb0d9916c44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae77642f8ef73fb9c20c2a737d956acda\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#ae77642f8ef73fb9c20c2a737d956acda\">bs</a> =/\\r?\\n/g</td></tr>\n<tr class=\"separator:ae77642f8ef73fb9c20c2a737d956acda\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af6ee77c71b2c89bdb365145ac5ad1219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#af6ee77c71b2c89bdb365145ac5ad1219\">bq</a> =/#.*$/</td></tr>\n<tr class=\"separator:af6ee77c71b2c89bdb365145ac5ad1219\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad223f5fba68c41c1236671ac5c5b0fcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#ad223f5fba68c41c1236671ac5c5b0fcb\">aD</a> =/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg</td></tr>\n<tr class=\"separator:ad223f5fba68c41c1236671ac5c5b0fcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac87125cdee1a5e57da4ef619af49bc7d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#ac87125cdee1a5e57da4ef619af49bc7d\">aZ</a> =/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i</td></tr>\n<tr class=\"separator:ac87125cdee1a5e57da4ef619af49bc7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8cc6111a5def3ea889157d13fb9a9672\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a8cc6111a5def3ea889157d13fb9a9672\">aM</a> =/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/</td></tr>\n<tr class=\"separator:a8cc6111a5def3ea889157d13fb9a9672\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a79eb58dc6cdf0aef563d5dc1ded27df5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#a79eb58dc6cdf0aef563d5dc1ded27df5\">aQ</a> =/^(?:GET|HEAD)$/</td></tr>\n<tr class=\"separator:a79eb58dc6cdf0aef563d5dc1ded27df5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abce695e0af988ece0826d9ad59b8160d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"jquery_8js.html#abce695e0af988ece0826d9ad59b8160d\">c</a></td></tr>\n<tr class=\"separator:abce695e0af988ece0826d9ad59b8160d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">函数说明</h2>\n<a class=\"anchor\" id=\"a2fa551895933fae935a0a6b87282241d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">b </td>\n          <td>(</td>\n          <td class=\"paramtype\">function(){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw, bv){var e;b.swap(bw,{display:&quot;inline-block&quot;}, function(){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bv){e=<a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a>(bw,&quot;margin-right&quot;,&quot;marginRight&quot;)}else{e=bw.style.marginRight}});return e}}}}&#160;</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a871ff39db627c54c710a3e9909b8234c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"jquery_8js.html#a2fa551895933fae935a0a6b87282241d\">b</a> each </td>\n          <td>(</td>\n          <td class=\"paramtype\">function(bv, e){b.cssHooks[e]={get:function(by, bx, bw){var bz;<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bx){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(by.offsetWidth!==0){return <a class=\"el\" href=\"jquery_8js.html#a2335e57f79b6acfb6de59c235dc8a83e\">p</a>(by, e, bw)}else{b.swap(by, a7, function(){bz=<a class=\"el\" href=\"jquery_8js.html#a2335e57f79b6acfb6de59c235dc8a83e\">p</a>(by, e, bw)})}return bz}}, set:function(bw, bx){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bc.test(bx)){bx=parseFloat(bx);<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bx &gt;=0){return bx+&quot;px&quot;}}else{return bx}}}}&#160;</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5fb206c91c64d1be35fde236706eab86\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"jquery_8js.html#a2fa551895933fae935a0a6b87282241d\">b</a> extend </td>\n          <td>(</td>\n          <td class=\"paramtype\">{cssHooks:{opacity:{get:function(bw, bv){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bv){var e=<a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a>(bw,&quot;opacity&quot;,&quot;opacity&quot;);return e===&quot;&quot;?&quot;1&quot;:e}else{return bw.style.opacity}}}}, cssNumber:{fillOpacity:true, fontWeight:true, lineHeight:true, opacity:true, orphans:true, widows:true, zIndex:true, zoom:true}, cssProps:{&quot;float&quot;:b.support.cssFloat?&quot;cssFloat&quot;:&quot;styleFloat&quot;}, style:function(bx, bw, bD, by){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB, bC, bz=b.camelCase(bw), bv=bx.style, bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bD!==<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){bC=typeof bD;<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bC===&quot;string&quot;&amp;&amp;(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(<a class=\"el\" href=\"jquery_8js.html#a89ad527fcd82c01ebb587332f5b4fcd4\">b.css</a>(bx, bw));bC=&quot;number&quot;}if(bD==null||bC===&quot;number&quot;&amp;&amp;isNaN(bD)){return}<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bC===&quot;number&quot;&amp;&amp;!b.cssNumber[bz]){bD+=&quot;px&quot;}if(!bE||!(&quot;set&quot;in bE)||(bD=bE.set(bx, bD))!==<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){try{bv[bw]=bD}catch(bA){}}}else{<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bE &amp;&amp;&quot;get&quot;in bE &amp;&amp;(bB=bE.get(bx, false, by))!==<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){return bB}return bv[bw]}}, css:function(by, bx, bv){var bw, e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(bx===&quot;cssFloat&quot;){bx=&quot;float&quot;}if(e &amp;&amp;&quot;get&quot;in e &amp;&amp;(bw=e.get(by, true, bv))!==<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){return bw}else{<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(<a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a>){return <a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a>(by, bx)}}}, swap:function(bx, bw, by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}}&#160;</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2c54bd8ed7482e89d19331ba61fe221c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">if </td>\n          <td>(</td>\n          <td class=\"paramtype\">av.documentElement.&#160;</td>\n          <td class=\"paramname\"><em>currentStyle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a30d3d2cd5b567c9f31b2aa30b9cb3bb8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">if </td>\n          <td>(</td>\n          <td class=\"paramtype\">av.defaultView &amp;&amp;av.defaultView.&#160;</td>\n          <td class=\"paramname\"><em>getComputedStyle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a42cbfadee2b4749e8f699ea8d745a0e4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">if </td>\n          <td>(</td>\n          <td class=\"paramtype\">b.expr &amp;&amp;b.expr.&#160;</td>\n          <td class=\"paramname\"><em>filters</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9db6d45a025ad692282fe23e69eeba43\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">if </td>\n          <td>(</td>\n          <td class=\"paramtype\">!b.support.&#160;</td>\n          <td class=\"paramname\"><em>opacity</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2335e57f79b6acfb6de59c235dc8a83e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function p </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>by</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>bw</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>bv</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<h2 class=\"groupheader\">变量说明</h2>\n<a class=\"anchor\" id=\"ad223f5fba68c41c1236671ac5c5b0fcb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var aD =/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8cc6111a5def3ea889157d13fb9a9672\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var aM =/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6ddf393cc7f9a8828e197bb0d9916c44\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var ap =/\\[\\]$/</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a79eb58dc6cdf0aef563d5dc1ded27df5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var aQ =/^(?:GET|HEAD)$/</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4fd8ddfab07c8d7c7cae0ab0e052cad3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var au =/opacity=([^)]*)/,z=/([A-<a class=\"el\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a>]|^ms)/g,bc=/^-?\\d+(?:px)?$/i,bn=/^-?\\d/,I=/^([\\-+])=([\\-+.\\de]+)/,a7={position:&quot;absolute&quot;,visibility:&quot;hidden&quot;,display:&quot;block&quot;},an=[&quot;Left&quot;,&quot;Right&quot;],a1=[&quot;Top&quot;,&quot;Bottom&quot;],Z,aI,aX</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac87125cdee1a5e57da4ef619af49bc7d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var aZ =/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa4026ad5544b958e54ce5e106fa1c805\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var b</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<b>初始值:</b><div class=\"fragment\"><div class=\"line\">=(<span class=\"keyword\">function</span>(){var bF=<span class=\"keyword\">function</span>(b0,b1){<span class=\"keywordflow\">return</span> <span class=\"keyword\">new</span> bF.fn.init(b0,b1,bD)},bU=<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.jQuery,bH=<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.$,bD,bY=/^(?:[^#&lt;]*(&lt;[\\w\\W]+&gt;)[^&gt;]*$|#([\\w\\-]*)$)/,bM=/\\S/,bI=/^\\s+/,bE=/\\s+$/,bA=/^&lt;(\\w+)\\s*\\/?&gt;(?:&lt;\\/\\1&gt;)?$/,bN=/^[\\],:{}\\s]*$/,bW=/\\\\(?:[<span class=\"stringliteral\">&quot;\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/&quot;</span>[^<span class=\"stringliteral\">&quot;\\\\\\n\\r]*&quot;</span>|<span class=\"keyword\">true</span>|<span class=\"keyword\">false</span>|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,bJ=/(?:^|:|,)(?:\\s*\\[)+/g,by=/(webkit)[ \\/]([\\w.]+)/,bR=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,bQ=/(msie) ([\\w.]+)/,bS=/(mozilla)(?:.*? rv:([\\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=<span class=\"keyword\">function</span>(b0,b1){<span class=\"keywordflow\">return</span>(b1+<span class=\"stringliteral\">&quot;&quot;</span>).toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:<span class=\"keyword\">function</span>(b0,b4,b3){var b2,b5,b1,b6;<span class=\"keywordflow\">if</span>(!b0){<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>}<span class=\"keywordflow\">if</span>(b0.nodeType){this.context=<span class=\"keyword\">this</span>[0]=b0;this.length=1;<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>}<span class=\"keywordflow\">if</span>(b0===<span class=\"stringliteral\">&quot;body&quot;</span>&amp;&amp;!b4&amp;&amp;av.body){this.context=av;<span class=\"keyword\">this</span>[0]=av.body;this.selector=b0;this.length=1;<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>}<span class=\"keywordflow\">if</span>(typeof b0===<span class=\"stringliteral\">&quot;string&quot;</span>){<span class=\"keywordflow\">if</span>(b0.charAt(0)===<span class=\"stringliteral\">&quot;&lt;&quot;</span>&amp;&amp;b0.charAt(b0.length-1)===<span class=\"stringliteral\">&quot;&gt;&quot;</span>&amp;&amp;b0.length&gt;=3){b2=[null,b0,null]}<span class=\"keywordflow\">else</span>{b2=bY.exec(b0)}<span class=\"keywordflow\">if</span>(b2&amp;&amp;(b2[1]||!b4)){<span class=\"keywordflow\">if</span>(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);<span class=\"keywordflow\">if</span>(b1){<span class=\"keywordflow\">if</span>(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,<span class=\"keyword\">true</span>)}<span class=\"keywordflow\">else</span>{b0=[b6.createElement(b1[1])]}}<span class=\"keywordflow\">else</span>{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}<span class=\"keywordflow\">return</span> bF.merge(<span class=\"keyword\">this</span>,b0)}<span class=\"keywordflow\">else</span>{b5=av.getElementById(b2[2]);<span class=\"keywordflow\">if</span>(b5&amp;&amp;b5.parentNode){<span class=\"keywordflow\">if</span>(b5.id!==b2[2]){<span class=\"keywordflow\">return</span> b3.find(b0)}this.length=1;<span class=\"keyword\">this</span>[0]=b5}this.context=av;this.selector=b0;<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(!b4||b4.jquery){<span class=\"keywordflow\">return</span>(b4||b3).find(b0)}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">return</span> this.constructor(b4).find(b0)}}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bF.isFunction(b0)){<span class=\"keywordflow\">return</span> b3.ready(b0)}}<span class=\"keywordflow\">if</span>(b0.selector!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){this.selector=b0.selector;this.context=b0.context}<span class=\"keywordflow\">return</span> bF.makeArray(b0,<span class=\"keyword\">this</span>)},selector:<span class=\"stringliteral\">&quot;&quot;</span>,jquery:<span class=\"stringliteral\">&quot;1.7.1&quot;</span>,length:0,size:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> this.length},toArray:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> bK.call(<span class=\"keyword\">this</span>,0)},<span class=\"keyword\">get</span>:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">return</span> b0==null?this.toArray():(b0&lt;0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();<span class=\"keywordflow\">if</span>(bF.isArray(b1)){bz.apply(b2,b1)}<span class=\"keywordflow\">else</span>{bF.merge(b2,b1)}b2.prevObject=<span class=\"keyword\">this</span>;b2.context=this.context;<span class=\"keywordflow\">if</span>(b3===<span class=\"stringliteral\">&quot;find&quot;</span>){b2.selector=this.selector+(this.selector?<span class=\"stringliteral\">&quot; &quot;</span>:<span class=\"stringliteral\">&quot;&quot;</span>)+b0}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(b3){b2.selector=this.selector+<span class=\"stringliteral\">&quot;.&quot;</span>+b3+<span class=\"stringliteral\">&quot;(&quot;</span>+b0+<span class=\"stringliteral\">&quot;)&quot;</span>}}<span class=\"keywordflow\">return</span> b2},<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>:<span class=\"keyword\">function</span>(b1,b0){<span class=\"keywordflow\">return</span> bF.each(<span class=\"keyword\">this</span>,b1,b0)},ready:<span class=\"keyword\">function</span>(b0){bF.bindReady();bC.add(b0);<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},eq:<span class=\"keyword\">function</span>(b0){b0=+b0;<span class=\"keywordflow\">return</span> b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){<span class=\"keywordflow\">return</span> this.eq(0)},last:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> this.eq(-1)},slice:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> this.pushStack(bK.apply(<span class=\"keyword\">this</span>,arguments),<span class=\"stringliteral\">&quot;slice&quot;</span>,bK.call(arguments).join(<span class=\"stringliteral\">&quot;,&quot;</span>))},map:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">return</span> this.pushStack(bF.map(<span class=\"keyword\">this</span>,<span class=\"keyword\">function</span>(b2,b1){return b0.call(b2,b1,b2)}))},end:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=<span class=\"keyword\">function</span>(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=<span class=\"keyword\">false</span>;<span class=\"keywordflow\">if</span>(typeof b5===<span class=\"stringliteral\">&quot;boolean&quot;</span>){b8=b5;b5=arguments[1]||{};b4=2}<span class=\"keywordflow\">if</span>(typeof b5!==<span class=\"stringliteral\">&quot;object&quot;</span>&amp;&amp;!bF.isFunction(b5)){b5={}}<span class=\"keywordflow\">if</span>(b3===b4){b5=<span class=\"keyword\">this</span>;--b4}<span class=\"keywordflow\">for</span>(;b4&lt;b3;b4++){<span class=\"keywordflow\">if</span>((b9=arguments[b4])!=null){<span class=\"keywordflow\">for</span>(b2 in b9){b0=b5[b2];b1=b9[b2];<span class=\"keywordflow\">if</span>(b5===b1){<span class=\"keywordflow\">continue</span>}<span class=\"keywordflow\">if</span>(b8&amp;&amp;b1&amp;&amp;(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){<span class=\"keywordflow\">if</span>(b6){b6=<span class=\"keyword\">false</span>;b7=b0&amp;&amp;bF.isArray(b0)?b0:[]}<span class=\"keywordflow\">else</span>{b7=b0&amp;&amp;bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(b1!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){b5[b2]=b1}}}}}<span class=\"keywordflow\">return</span> b5};bF.extend({noConflict:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.$===bF){<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.$=bH}<span class=\"keywordflow\">if</span>(b0&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.jQuery===bF){<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.jQuery=bU}<span class=\"keywordflow\">return</span> bF},isReady:<span class=\"keyword\">false</span>,readyWait:1,holdReady:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">if</span>(b0){bF.readyWait++}<span class=\"keywordflow\">else</span>{bF.ready(<span class=\"keyword\">true</span>)}},ready:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">if</span>((b0===<span class=\"keyword\">true</span>&amp;&amp;!--bF.readyWait)||(b0!==<span class=\"keyword\">true</span>&amp;&amp;!bF.isReady)){<span class=\"keywordflow\">if</span>(!av.body){<span class=\"keywordflow\">return</span> setTimeout(bF.ready,1)}bF.isReady=<span class=\"keyword\">true</span>;<span class=\"keywordflow\">if</span>(b0!==<span class=\"keyword\">true</span>&amp;&amp;--bF.readyWait&gt;0){<span class=\"keywordflow\">return</span>}bC.fireWith(av,[bF]);<span class=\"keywordflow\">if</span>(bF.fn.trigger){bF(av).trigger(<span class=\"stringliteral\">&quot;ready&quot;</span>).off(<span class=\"stringliteral\">&quot;ready&quot;</span>)}}},bindReady:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(bC){<span class=\"keywordflow\">return</span>}bC=bF.Callbacks(<span class=\"stringliteral\">&quot;once memory&quot;</span>);<span class=\"keywordflow\">if</span>(av.readyState===<span class=\"stringliteral\">&quot;complete&quot;</span>){<span class=\"keywordflow\">return</span> setTimeout(bF.ready,1)}<span class=\"keywordflow\">if</span>(av.addEventListener){av.addEventListener(<span class=\"stringliteral\">&quot;DOMContentLoaded&quot;</span>,e,<span class=\"keyword\">false</span>);<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.addEventListener(<span class=\"stringliteral\">&quot;load&quot;</span>,bF.ready,<span class=\"keyword\">false</span>)}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(av.attachEvent){av.attachEvent(<span class=\"stringliteral\">&quot;onreadystatechange&quot;</span>,e);<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.attachEvent(<span class=\"stringliteral\">&quot;onload&quot;</span>,bF.ready);var b0=<span class=\"keyword\">false</span>;<span class=\"keywordflow\">try</span>{b0=<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.frameElement==null}<span class=\"keywordflow\">catch</span>(b1){}<span class=\"keywordflow\">if</span>(av.documentElement.doScroll&amp;&amp;b0){bw()}}}},isFunction:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">return</span> bF.type(b0)===<span class=\"stringliteral\">&quot;function&quot;</span>},isArray:Array.isArray||<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">return</span> bF.type(b0)===<span class=\"stringliteral\">&quot;array&quot;</span>},isWindow:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">return</span> b0&amp;&amp;typeof b0===<span class=\"stringliteral\">&quot;object&quot;</span>&amp;&amp;<span class=\"stringliteral\">&quot;setInterval&quot;</span> in b0},isNumeric:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">return</span> !isNaN(parseFloat(b0))&amp;&amp;isFinite(b0)},type:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">return</span> b0==null?String(b0):bx[bL.call(b0)]||<span class=\"stringliteral\">&quot;object&quot;</span>},isPlainObject:function(b2){<span class=\"keywordflow\">if</span>(!b2||bF.type(b2)!==<span class=\"stringliteral\">&quot;object&quot;</span>||b2.nodeType||bF.isWindow(b2)){<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>}<span class=\"keywordflow\">try</span>{<span class=\"keywordflow\">if</span>(b2.constructor&amp;&amp;!bG.call(b2,<span class=\"stringliteral\">&quot;constructor&quot;</span>)&amp;&amp;!bG.call(b2.constructor.prototype,<span class=\"stringliteral\">&quot;isPrototypeOf&quot;</span>)){<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>}}<span class=\"keywordflow\">catch</span>(b1){<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>}var b0;<span class=\"keywordflow\">for</span>(b0 in b2){}<span class=\"keywordflow\">return</span> b0===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>||bG.call(b2,b0)},isEmptyObject:<span class=\"keyword\">function</span>(b1){<span class=\"keywordflow\">for</span>(var b0 in b1){<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>}<span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>},error:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">throw</span> <span class=\"keyword\">new</span> Error(b0)},parseJSON:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">if</span>(typeof b0!==<span class=\"stringliteral\">&quot;string&quot;</span>||!b0){<span class=\"keywordflow\">return</span> null}b0=bF.trim(b0);<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.JSON&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.JSON.parse){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.JSON.parse(b0)}<span class=\"keywordflow\">if</span>(bN.test(b0.replace(bW,<span class=\"stringliteral\">&quot;@&quot;</span>).replace(bP,<span class=\"stringliteral\">&quot;]&quot;</span>).replace(bJ,<span class=\"stringliteral\">&quot;&quot;</span>))){<span class=\"keywordflow\">return</span>(<span class=\"keyword\">new</span> Function(<span class=\"stringliteral\">&quot;return &quot;</span>+b0))()}bF.error(<span class=\"stringliteral\">&quot;Invalid JSON: &quot;</span>+b0)},parseXML:<span class=\"keyword\">function</span>(b2){var b0,b1;<span class=\"keywordflow\">try</span>{<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.DOMParser){b1=<span class=\"keyword\">new</span> DOMParser();b0=b1.parseFromString(b2,<span class=\"stringliteral\">&quot;text/xml&quot;</span>)}<span class=\"keywordflow\">else</span>{b0=<span class=\"keyword\">new</span> ActiveXObject(<span class=\"stringliteral\">&quot;Microsoft.XMLDOM&quot;</span>);b0.async=<span class=\"stringliteral\">&quot;false&quot;</span>;b0.loadXML(b2)}}<span class=\"keywordflow\">catch</span>(b3){b0=<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>}<span class=\"keywordflow\">if</span>(!b0||!b0.documentElement||b0.getElementsByTagName(<span class=\"stringliteral\">&quot;parsererror&quot;</span>).length){bF.error(<span class=\"stringliteral\">&quot;Invalid XML: &quot;</span>+b2)}<span class=\"keywordflow\">return</span> b0},noop:<span class=\"keyword\">function</span>(){},globalEval:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">if</span>(b0&amp;&amp;bM.test(b0)){(<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.execScript||<span class=\"keyword\">function</span>(b1){<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>[<span class=\"stringliteral\">&quot;eval&quot;</span>].call(<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>,b1)})(b0)}},camelCase:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">return</span> b0.replace(bZ,<span class=\"stringliteral\">&quot;ms-&quot;</span>).replace(bB,bT)},nodeName:<span class=\"keyword\">function</span>(b1,b0){<span class=\"keywordflow\">return</span> b1.nodeName&amp;&amp;b1.nodeName.toUpperCase()===b0.toUpperCase()},<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>:<span class=\"keyword\">function</span>(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>||bF.isFunction(b3);<span class=\"keywordflow\">if</span>(b2){<span class=\"keywordflow\">if</span>(b0){<span class=\"keywordflow\">for</span>(b1 in b3){<span class=\"keywordflow\">if</span>(b6.apply(b3[b1],b2)===<span class=\"keyword\">false</span>){<span class=\"keywordflow\">break</span>}}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">for</span>(;b4&lt;b5;){<span class=\"keywordflow\">if</span>(b6.apply(b3[b4++],b2)===<span class=\"keyword\">false</span>){<span class=\"keywordflow\">break</span>}}}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(b0){<span class=\"keywordflow\">for</span>(b1 in b3){<span class=\"keywordflow\">if</span>(b6.call(b3[b1],b1,b3[b1])===<span class=\"keyword\">false</span>){<span class=\"keywordflow\">break</span>}}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">for</span>(;b4&lt;b5;){<span class=\"keywordflow\">if</span>(b6.call(b3[b4],b4,b3[b4++])===<span class=\"keyword\">false</span>){<span class=\"keywordflow\">break</span>}}}}<span class=\"keywordflow\">return</span> b3},trim:bO?<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">return</span> b0==null?<span class=\"stringliteral\">&quot;&quot;</span>:bO.call(b0)}:<span class=\"keyword\">function</span>(b0){<span class=\"keywordflow\">return</span> b0==null?<span class=\"stringliteral\">&quot;&quot;</span>:b0.toString().replace(bI,<span class=\"stringliteral\">&quot;&quot;</span>).replace(bE,<span class=\"stringliteral\">&quot;&quot;</span>)},makeArray:<span class=\"keyword\">function</span>(b3,b1){var b0=b1||[];<span class=\"keywordflow\">if</span>(b3!=null){var b2=bF.type(b3);<span class=\"keywordflow\">if</span>(b3.length==null||b2===<span class=\"stringliteral\">&quot;string&quot;</span>||b2===<span class=\"stringliteral\">&quot;function&quot;</span>||b2===<span class=\"stringliteral\">&quot;regexp&quot;</span>||bF.isWindow(b3)){bz.call(b0,b3)}<span class=\"keywordflow\">else</span>{bF.merge(b0,b3)}}<span class=\"keywordflow\">return</span> b0},inArray:<span class=\"keyword\">function</span>(b2,b3,b1){var b0;<span class=\"keywordflow\">if</span>(b3){<span class=\"keywordflow\">if</span>(bv){<span class=\"keywordflow\">return</span> bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1&lt;0?Math.max(0,b0+b1):b1:0;<span class=\"keywordflow\">for</span>(;b1&lt;b0;b1++){<span class=\"keywordflow\">if</span>(b1 in b3&amp;&amp;b3[b1]===b2){<span class=\"keywordflow\">return</span> b1}}}<span class=\"keywordflow\">return</span> -1},merge:<span class=\"keyword\">function</span>(b4,b2){var b3=b4.length,b1=0;<span class=\"keywordflow\">if</span>(typeof b2.length===<span class=\"stringliteral\">&quot;number&quot;</span>){<span class=\"keywordflow\">for</span>(var b0=b2.length;b1&lt;b0;b1++){b4[b3++]=b2[b1]}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">while</span>(b2[b1]!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){b4[b3++]=b2[b1++]}}b4.length=b3;<span class=\"keywordflow\">return</span> b4},grep:<span class=\"keyword\">function</span>(b1,b6,b0){var b2=[],b5;b0=!!b0;<span class=\"keywordflow\">for</span>(var b3=0,b4=b1.length;b3&lt;b4;b3++){b5=!!b6(b1[b3],b3);<span class=\"keywordflow\">if</span>(b0!==b5){b2.push(b1[b3])}}<span class=\"keywordflow\">return</span> b2},map:<span class=\"keyword\">function</span>(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>&amp;&amp;typeof b1===<span class=\"stringliteral\">&quot;number&quot;</span>&amp;&amp;((b1&gt;0&amp;&amp;b0[0]&amp;&amp;b0[b1-1])||b1===0||bF.isArray(b0));<span class=\"keywordflow\">if</span>(b3){<span class=\"keywordflow\">for</span>(;b2&lt;b1;b2++){b5=b7(b0[b2],b2,b8);<span class=\"keywordflow\">if</span>(b5!=null){b4[b4.length]=b5}}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">for</span>(b6 in b0){b5=b7(b0[b6],b6,b8);<span class=\"keywordflow\">if</span>(b5!=null){b4[b4.length]=b5}}}<span class=\"keywordflow\">return</span> b4.concat.apply([],b4)},guid:1,proxy:<span class=\"keyword\">function</span>(b4,b3){<span class=\"keywordflow\">if</span>(typeof b3===<span class=\"stringliteral\">&quot;string&quot;</span>){var b2=b4[b3];b3=b4;b4=b2}<span class=\"keywordflow\">if</span>(!bF.isFunction(b4)){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>}var b0=bK.call(arguments,2),b1=<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;<span class=\"keywordflow\">return</span> b1},access:<span class=\"keyword\">function</span>(b0,b8,b6,b2,b5,b7){var b1=b0.length;<span class=\"keywordflow\">if</span>(typeof b8===<span class=\"stringliteral\">&quot;object&quot;</span>){<span class=\"keywordflow\">for</span>(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}<span class=\"keywordflow\">return</span> b0}<span class=\"keywordflow\">if</span>(b6!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){b2=!b7&amp;&amp;b2&amp;&amp;bF.isFunction(b6);<span class=\"keywordflow\">for</span>(var b4=0;b4&lt;b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}<span class=\"keywordflow\">return</span> b0}<span class=\"keywordflow\">return</span> b1?b5(b0[0],b8):<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>},now:function(){<span class=\"keywordflow\">return</span>(<span class=\"keyword\">new</span> Date()).getTime()},uaMatch:<span class=\"keyword\">function</span>(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf(<span class=\"stringliteral\">&quot;compatible&quot;</span>)&lt;0&amp;&amp;bS.exec(b1)||[];<span class=\"keywordflow\">return</span>{browser:b0[1]||<span class=\"stringliteral\">&quot;&quot;</span>,version:b0[2]||<span class=\"stringliteral\">&quot;0&quot;</span>}},sub:<span class=\"keyword\">function</span>(){<span class=\"keyword\">function</span> b0(b3,b4){<span class=\"keywordflow\">return</span> <span class=\"keyword\">new</span> b0.fn.init(b3,b4)}bF.extend(<span class=\"keyword\">true</span>,b0,<span class=\"keyword\">this</span>);b0.superclass=<span class=\"keyword\">this</span>;b0.fn=b0.prototype=<span class=\"keyword\">this</span>();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=<span class=\"keyword\">function</span> b2(b3,b4){<span class=\"keywordflow\">if</span>(b4&amp;&amp;b4 instanceof bF&amp;&amp;!(b4 instanceof b0)){b4=b0(b4)}<span class=\"keywordflow\">return</span> bF.fn.init.call(<span class=\"keyword\">this</span>,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);<span class=\"keywordflow\">return</span> b0},browser:{}});bF.each(<span class=\"stringliteral\">&quot;Boolean Number String Function Array Date RegExp Object&quot;</span>.split(<span class=\"stringliteral\">&quot; &quot;</span>),<span class=\"keyword\">function</span>(b1,b0){bx[<span class=\"stringliteral\">&quot;[object &quot;</span>+b0+<span class=\"stringliteral\">&quot;]&quot;</span>]=b0.toLowerCase()});bV=bF.uaMatch(bX);<span class=\"keywordflow\">if</span>(bV.browser){bF.browser[bV.browser]=<span class=\"keyword\">true</span>;bF.browser.version=bV.version}<span class=\"keywordflow\">if</span>(bF.browser.webkit){bF.browser.safari=<span class=\"keyword\">true</span>}<span class=\"keywordflow\">if</span>(bM.test(<span class=\"stringliteral\">&quot;\\xA0&quot;</span>)){bI=/^[\\s\\xA0]+/;bE=/[\\s\\xA0]+$/}bD=bF(av);<span class=\"keywordflow\">if</span>(av.addEventListener){e=<span class=\"keyword\">function</span>(){av.removeEventListener(<span class=\"stringliteral\">&quot;DOMContentLoaded&quot;</span>,e,<span class=\"keyword\">false</span>);bF.ready()}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(av.attachEvent){e=<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(av.readyState===<span class=\"stringliteral\">&quot;complete&quot;</span>){av.detachEvent(<span class=\"stringliteral\">&quot;onreadystatechange&quot;</span>,e);bF.ready()}}}}<span class=\"keyword\">function</span> bw(){<span class=\"keywordflow\">if</span>(bF.isReady){<span class=\"keywordflow\">return</span>}<span class=\"keywordflow\">try</span>{av.documentElement.doScroll(<span class=\"stringliteral\">&quot;left&quot;</span>)}<span class=\"keywordflow\">catch</span>(b0){setTimeout(bw,1);<span class=\"keywordflow\">return</span>}bF.ready()}<span class=\"keywordflow\">return</span> bF})();var a2={};<span class=\"keyword\">function</span> X(e){var bv=a2[e]={},bw,bx;e=e.split(/\\s+/);<span class=\"keywordflow\">for</span>(bw=0,bx=e.length;bw&lt;bx;bw++){bv[e[bw]]=<span class=\"keyword\">true</span>}<span class=\"keywordflow\">return</span> bv}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Callbacks=<span class=\"keyword\">function</span>(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=<span class=\"keyword\">function</span>(bF){var bG,bJ,bI,bH,bK;<span class=\"keywordflow\">for</span>(bG=0,bJ=bF.length;bG&lt;bJ;bG++){bI=bF[bG];bH=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.type(bI);<span class=\"keywordflow\">if</span>(bH===<span class=\"stringliteral\">&quot;array&quot;</span>){bE(bI)}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bH===<span class=\"stringliteral\">&quot;function&quot;</span>){<span class=\"keywordflow\">if</span>(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=<span class=\"keyword\">function</span>(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=<span class=\"keyword\">true</span>;bA=bv||0;bv=0;bz=bB.length;<span class=\"keywordflow\">for</span>(;bB&amp;&amp;bA&lt;bz;bA++){<span class=\"keywordflow\">if</span>(bB[bA].apply(bG,bF)===<span class=\"keyword\">false</span>&amp;&amp;bw.stopOnFalse){bx=<span class=\"keyword\">true</span>;<span class=\"keywordflow\">break</span>}}by=<span class=\"keyword\">false</span>;<span class=\"keywordflow\">if</span>(bB){<span class=\"keywordflow\">if</span>(!bw.once){<span class=\"keywordflow\">if</span>(bC&amp;&amp;bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bx===<span class=\"keyword\">true</span>){bD.disable()}<span class=\"keywordflow\">else</span>{bB=[]}}}},bD={add:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(bB){var bF=bB.length;bE(arguments);<span class=\"keywordflow\">if</span>(by){bz=bB.length}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bx&amp;&amp;bx!==<span class=\"keyword\">true</span>){bv=bF;e(bx[0],bx[1])}}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},<span class=\"keyword\">remove</span>:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(bB){var bF=arguments,bH=0,bI=bF.length;<span class=\"keywordflow\">for</span>(;bH&lt;bI;bH++){<span class=\"keywordflow\">for</span>(var bG=0;bG&lt;bB.length;bG++){<span class=\"keywordflow\">if</span>(bF[bH]===bB[bG]){<span class=\"keywordflow\">if</span>(by){<span class=\"keywordflow\">if</span>(bG&lt;=bz){bz--;<span class=\"keywordflow\">if</span>(bG&lt;=bA){bA--}}}bB.splice(bG--,1);<span class=\"keywordflow\">if</span>(bw.unique){<span class=\"keywordflow\">break</span>}}}}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},has:<span class=\"keyword\">function</span>(bG){<span class=\"keywordflow\">if</span>(bB){var bF=0,bH=bB.length;<span class=\"keywordflow\">for</span>(;bF&lt;bH;bF++){<span class=\"keywordflow\">if</span>(bG===bB[bF]){<span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>}}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>},empty:<span class=\"keyword\">function</span>(){bB=[];<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},disable:<span class=\"keyword\">function</span>(){bB=bC=bx=<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>;<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},disabled:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> !bB},lock:<span class=\"keyword\">function</span>(){bC=<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>;<span class=\"keywordflow\">if</span>(!bx||bx===<span class=\"keyword\">true</span>){bD.disable()}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},locked:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> !bC},fireWith:<span class=\"keyword\">function</span>(bG,bF){<span class=\"keywordflow\">if</span>(bC){<span class=\"keywordflow\">if</span>(by){<span class=\"keywordflow\">if</span>(!bw.once){bC.push([bG,bF])}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(!(bw.once&amp;&amp;bx)){e(bG,bF)}}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},fire:<span class=\"keyword\">function</span>(){bD.fireWith(<span class=\"keyword\">this</span>,arguments);<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},fired:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> !!bx}};<span class=\"keywordflow\">return</span> bD};var aJ=[].slice;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend({Deferred:<span class=\"keyword\">function</span>(by){var bx=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Callbacks(<span class=\"stringliteral\">&quot;once memory&quot;</span>),bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Callbacks(<span class=\"stringliteral\">&quot;once memory&quot;</span>),bv=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Callbacks(<span class=\"stringliteral\">&quot;memory&quot;</span>),e=<span class=\"stringliteral\">&quot;pending&quot;</span>,bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> e},isResolved:bx.fired,isRejected:bw.fired,then:<span class=\"keyword\">function</span>(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},always:<span class=\"keyword\">function</span>(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},pipe:<span class=\"keyword\">function</span>(bF,bE,bD){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Deferred(<span class=\"keyword\">function</span>(bG){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.each({done:[bF,<span class=\"stringliteral\">&quot;resolve&quot;</span>],fail:[bE,<span class=\"stringliteral\">&quot;reject&quot;</span>],progress:[bD,<span class=\"stringliteral\">&quot;notify&quot;</span>]},<span class=\"keyword\">function</span>(bI,bL){var bH=bL[0],bK=bL[1],bJ;<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(bH)){bB[bI](<span class=\"keyword\">function</span>(){bJ=bH.apply(<span class=\"keyword\">this</span>,arguments);<span class=\"keywordflow\">if</span>(bJ&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}<span class=\"keywordflow\">else</span>{bG[bK+<span class=\"stringliteral\">&quot;With&quot;</span>](<span class=\"keyword\">this</span>===bB?bG:<span class=\"keyword\">this</span>,[bJ])}})}<span class=\"keywordflow\">else</span>{bB[bI](bG[bK])}})}).promise()},promise:<span class=\"keyword\">function</span>(bE){<span class=\"keywordflow\">if</span>(bE==null){bE=bC}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">for</span>(var bD in bC){bE[bD]=bC[bD]}}<span class=\"keywordflow\">return</span> bE}},bB=bC.promise({}),bz;<span class=\"keywordflow\">for</span>(bz in bA){bB[bz]=bA[bz].fire;bB[bz+<span class=\"stringliteral\">&quot;With&quot;</span>]=bA[bz].fireWith}bB.done(<span class=\"keyword\">function</span>(){e=<span class=\"stringliteral\">&quot;resolved&quot;</span>},bw.disable,bv.lock).fail(<span class=\"keyword\">function</span>(){e=<span class=\"stringliteral\">&quot;rejected&quot;</span>},bx.disable,bv.lock);<span class=\"keywordflow\">if</span>(by){by.call(bB,bB)}<span class=\"keywordflow\">return</span> bB},when:<span class=\"keyword\">function</span>(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=<span class=\"keyword\">new</span> Array(e),bw=e,by=e,bC=e&lt;=1&amp;&amp;bA&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(bA.promise)?bA:<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Deferred(),bE=bC.promise();<span class=\"keyword\">function</span> bD(bF){<span class=\"keywordflow\">return</span> <span class=\"keyword\">function</span>(bG){bx[bF]=arguments.length&gt;1?aJ.call(arguments,0):bG;<span class=\"keywordflow\">if</span>(!(--bw)){bC.resolveWith(bC,bx)}}}<span class=\"keyword\">function</span> bz(bF){<span class=\"keywordflow\">return</span> <span class=\"keyword\">function</span>(bG){bB[bF]=arguments.length&gt;1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}<span class=\"keywordflow\">if</span>(e&gt;1){<span class=\"keywordflow\">for</span>(;bv&lt;e;bv++){<span class=\"keywordflow\">if</span>(bx[bv]&amp;&amp;bx[bv].promise&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}<span class=\"keywordflow\">else</span>{--bw}}<span class=\"keywordflow\">if</span>(!bw){bC.resolveWith(bC,bx)}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}<span class=\"keywordflow\">return</span> bE}});<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support=(<span class=\"keyword\">function</span>(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement(<span class=\"stringliteral\">&quot;div&quot;</span>),bH=av.documentElement;bv.setAttribute(<span class=\"stringliteral\">&quot;className&quot;</span>,<span class=\"stringliteral\">&quot;t&quot;</span>);bv.innerHTML=<span class=\"stringliteral\">&quot;   &lt;link/&gt;&lt;table&gt;&lt;/table&gt;&lt;a href=&#39;/a&#39; style=&#39;top:1px;float:left;opacity:.55;&#39;&gt;a&lt;/a&gt;&lt;input type=&#39;checkbox&#39;/&gt;&quot;</span>;bI=bv.getElementsByTagName(<span class=\"stringliteral\">&quot;*&quot;</span>);bF=bv.getElementsByTagName(<span class=\"stringliteral\">&quot;a&quot;</span>)[0];<span class=\"keywordflow\">if</span>(!bI||!bI.length||!bF){<span class=\"keywordflow\">return</span>{}}bG=av.createElement(<span class=\"stringliteral\">&quot;select&quot;</span>);bx=bG.appendChild(av.createElement(<span class=\"stringliteral\">&quot;option&quot;</span>));bE=bv.getElementsByTagName(<span class=\"stringliteral\">&quot;input&quot;</span>)[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName(<span class=\"stringliteral\">&quot;tbody&quot;</span>).length,htmlSerialize:!!bv.getElementsByTagName(<span class=\"stringliteral\">&quot;link&quot;</span>).length,style:/top/.test(bF.getAttribute(<span class=\"stringliteral\">&quot;style&quot;</span>)),hrefNormalized:(bF.getAttribute(<span class=\"stringliteral\">&quot;href&quot;</span>)===<span class=\"stringliteral\">&quot;/a&quot;</span>),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value===<span class=\"stringliteral\">&quot;on&quot;</span>),optSelected:bx.selected,getSetAttribute:bv.className!==<span class=\"stringliteral\">&quot;t&quot;</span>,enctype:!!av.createElement(<span class=\"stringliteral\">&quot;form&quot;</span>).enctype,html5Clone:av.createElement(<span class=\"stringliteral\">&quot;nav&quot;</span>).cloneNode(<span class=\"keyword\">true</span>).outerHTML!==<span class=\"stringliteral\">&quot;&lt;:nav&gt;&lt;/:nav&gt;&quot;</span>,submitBubbles:<span class=\"keyword\">true</span>,changeBubbles:<span class=\"keyword\">true</span>,focusinBubbles:<span class=\"keyword\">false</span>,deleteExpando:<span class=\"keyword\">true</span>,noCloneEvent:<span class=\"keyword\">true</span>,inlineBlockNeedsLayout:<span class=\"keyword\">false</span>,shrinkWrapBlocks:<span class=\"keyword\">false</span>,reliableMarginRight:<span class=\"keyword\">true</span>};bE.checked=<span class=\"keyword\">true</span>;bJ.noCloneChecked=bE.cloneNode(<span class=\"keyword\">true</span>).checked;bG.disabled=<span class=\"keyword\">true</span>;bJ.optDisabled=!bx.disabled;<span class=\"keywordflow\">try</span>{<span class=\"keyword\">delete</span> bv.test}<span class=\"keywordflow\">catch</span>(bC){bJ.deleteExpando=<span class=\"keyword\">false</span>}<span class=\"keywordflow\">if</span>(!bv.addEventListener&amp;&amp;bv.attachEvent&amp;&amp;bv.fireEvent){bv.attachEvent(<span class=\"stringliteral\">&quot;onclick&quot;</span>,<span class=\"keyword\">function</span>(){bJ.noCloneEvent=<span class=\"keyword\">false</span>});bv.cloneNode(<span class=\"keyword\">true</span>).fireEvent(<span class=\"stringliteral\">&quot;onclick&quot;</span>)}bE=av.createElement(<span class=\"stringliteral\">&quot;input&quot;</span>);bE.value=<span class=\"stringliteral\">&quot;t&quot;</span>;bE.setAttribute(<span class=\"stringliteral\">&quot;type&quot;</span>,<span class=\"stringliteral\">&quot;radio&quot;</span>);bJ.radioValue=bE.value===<span class=\"stringliteral\">&quot;t&quot;</span>;bE.setAttribute(<span class=\"stringliteral\">&quot;checked&quot;</span>,<span class=\"stringliteral\">&quot;checked&quot;</span>);bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(<span class=\"keyword\">true</span>).cloneNode(<span class=\"keyword\">true</span>).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML=<span class=\"stringliteral\">&quot;&quot;</span>;<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.getComputedStyle){bA=av.createElement(<span class=\"stringliteral\">&quot;div&quot;</span>);bA.style.width=<span class=\"stringliteral\">&quot;0&quot;</span>;bA.style.marginRight=<span class=\"stringliteral\">&quot;0&quot;</span>;bv.style.width=<span class=\"stringliteral\">&quot;2px&quot;</span>;bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}<span class=\"keywordflow\">if</span>(bv.attachEvent){<span class=\"keywordflow\">for</span>(by in {submit:1,change:1,focusin:1}){bB=<span class=\"stringliteral\">&quot;on&quot;</span>+by;bw=(bB in bv);<span class=\"keywordflow\">if</span>(!bw){bv.setAttribute(bB,<span class=\"stringliteral\">&quot;return;&quot;</span>);bw=(typeof bv[bB]===<span class=\"stringliteral\">&quot;function&quot;</span>)}bJ[by+<span class=\"stringliteral\">&quot;Bubbles&quot;</span>]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">function</span>(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName(<span class=\"stringliteral\">&quot;body&quot;</span>)[0];<span class=\"keywordflow\">if</span>(!bQ){<span class=\"keywordflow\">return</span>}bL=1;bS=<span class=\"stringliteral\">&quot;position:absolute;top:0;left:0;width:1px;height:1px;margin:0;&quot;</span>;bR=<span class=\"stringliteral\">&quot;visibility:hidden;border:0;&quot;</span>;e=<span class=\"stringliteral\">&quot;style=&#39;&quot;</span>+bS+<span class=\"stringliteral\">&quot;border:5px solid #000;padding:0;&#39;&quot;</span>;bP=<span class=\"stringliteral\">&quot;&lt;div &quot;</span>+e+<span class=\"stringliteral\">&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;table &quot;</span>+e+<span class=\"stringliteral\">&quot; cellpadding=&#39;0&#39; cellspacing=&#39;0&#39;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&quot;</span>;bM=av.createElement(<span class=\"stringliteral\">&quot;div&quot;</span>);bM.style.cssText=bR+<span class=\"stringliteral\">&quot;width:0;height:0;position:static;top:0;margin-top:&quot;</span>+bL+<span class=\"stringliteral\">&quot;px&quot;</span>;bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement(<span class=\"stringliteral\">&quot;div&quot;</span>);bM.appendChild(bv);bv.innerHTML=<span class=\"stringliteral\">&quot;&lt;table&gt;&lt;tr&gt;&lt;td style=&#39;padding:0;border:0;display:none&#39;&gt;&lt;/td&gt;&lt;td&gt;t&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&quot;</span>;bz=bv.getElementsByTagName(<span class=\"stringliteral\">&quot;td&quot;</span>);bw=(bz[0].offsetHeight===0);bz[0].style.display=<span class=\"stringliteral\">&quot;&quot;</span>;bz[1].style.display=<span class=\"stringliteral\">&quot;none&quot;</span>;bJ.reliableHiddenOffsets=bw&amp;&amp;(bz[0].offsetHeight===0);bv.innerHTML=<span class=\"stringliteral\">&quot;&quot;</span>;bv.style.width=bv.style.paddingLeft=<span class=\"stringliteral\">&quot;1px&quot;</span>;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.boxModel=bJ.boxModel=bv.offsetWidth===2;<span class=\"keywordflow\">if</span>(typeof bv.style.zoom!==<span class=\"stringliteral\">&quot;undefined&quot;</span>){bv.style.display=<span class=\"stringliteral\">&quot;inline&quot;</span>;bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display=<span class=\"stringliteral\">&quot;&quot;</span>;bv.innerHTML=<span class=\"stringliteral\">&quot;&lt;div style=&#39;width:4px;&#39;&gt;&lt;/div&gt;&quot;</span>;bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position=<span class=\"stringliteral\">&quot;fixed&quot;</span>;bV.style.top=<span class=\"stringliteral\">&quot;20px&quot;</span>;bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top=<span class=\"stringliteral\">&quot;&quot;</span>;bU.style.overflow=<span class=\"stringliteral\">&quot;hidden&quot;</span>;bU.style.position=<span class=\"stringliteral\">&quot;relative&quot;</span>;bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend(bJ,bO)});<span class=\"keywordflow\">return</span> bJ})();var aS=/^(?:\\{.*\\}|\\[.*\\])$/,aA=/([A-<a class=\"code\" href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a>])/g;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend({cache:{},uuid:0,expando:<span class=\"stringliteral\">&quot;jQuery&quot;</span>+(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fn.jquery+Math.random()).replace(/\\D/g,<span class=\"stringliteral\">&quot;&quot;</span>),noData:{embed:<span class=\"keyword\">true</span>,<span class=\"keywordtype\">object</span>:<span class=\"stringliteral\">&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot;</span>,applet:<span class=\"keyword\">true</span>},hasData:<span class=\"keyword\">function</span>(e){e=e.nodeType?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.cache[e[<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expando]]:e[<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expando];<span class=\"keywordflow\">return</span> !!e&amp;&amp;!S(e)},data:<span class=\"keyword\">function</span>(bx,bv,bz,by){<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.acceptData(bx)){<span class=\"keywordflow\">return</span>}var bG,bA,bD,bE=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expando,bC=typeof bv===<span class=\"stringliteral\">&quot;string&quot;</span>,bF=bx.nodeType,e=bF?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.cache:bx,bw=bF?bx[bE]:bx[bE]&amp;&amp;bE,bB=bv===<span class=\"stringliteral\">&quot;events&quot;</span>;<span class=\"keywordflow\">if</span>((!bw||!e[bw]||(!bB&amp;&amp;!by&amp;&amp;!e[bw].data))&amp;&amp;bC&amp;&amp;bz===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){<span class=\"keywordflow\">return</span>}<span class=\"keywordflow\">if</span>(!bw){<span class=\"keywordflow\">if</span>(bF){bx[bE]=bw=++<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.uuid}<span class=\"keywordflow\">else</span>{bw=bE}}<span class=\"keywordflow\">if</span>(!e[bw]){e[bw]={};<span class=\"keywordflow\">if</span>(!bF){e[bw].toJSON=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.noop}}<span class=\"keywordflow\">if</span>(typeof bv===<span class=\"stringliteral\">&quot;object&quot;</span>||typeof bv===<span class=\"stringliteral\">&quot;function&quot;</span>){<span class=\"keywordflow\">if</span>(by){e[bw]=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend(e[bw],bv)}<span class=\"keywordflow\">else</span>{e[bw].data=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend(e[bw].data,bv)}}bG=bA=e[bw];<span class=\"keywordflow\">if</span>(!by){<span class=\"keywordflow\">if</span>(!bA.data){bA.data={}}bA=bA.data}<span class=\"keywordflow\">if</span>(bz!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){bA[<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.camelCase(bv)]=bz}<span class=\"keywordflow\">if</span>(bB&amp;&amp;!bA[bv]){<span class=\"keywordflow\">return</span> bG.events}<span class=\"keywordflow\">if</span>(bC){bD=bA[bv];<span class=\"keywordflow\">if</span>(bD==null){bD=bA[<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.camelCase(bv)]}}<span class=\"keywordflow\">else</span>{bD=bA}<span class=\"keywordflow\">return</span> bD},removeData:<span class=\"keyword\">function</span>(bx,bv,by){<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.acceptData(bx)){<span class=\"keywordflow\">return</span>}var bB,bA,bz,bC=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expando,bD=bx.nodeType,e=bD?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.cache:bx,bw=bD?bx[bC]:bC;<span class=\"keywordflow\">if</span>(!e[bw]){<span class=\"keywordflow\">return</span>}<span class=\"keywordflow\">if</span>(bv){bB=by?e[bw]:e[bw].data;<span class=\"keywordflow\">if</span>(bB){<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isArray(bv)){<span class=\"keywordflow\">if</span>(bv in bB){bv=[bv]}<span class=\"keywordflow\">else</span>{bv=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.camelCase(bv);<span class=\"keywordflow\">if</span>(bv in bB){bv=[bv]}<span class=\"keywordflow\">else</span>{bv=bv.split(<span class=\"stringliteral\">&quot; &quot;</span>)}}}<span class=\"keywordflow\">for</span>(bA=0,bz=bv.length;bA&lt;bz;bA++){<span class=\"keyword\">delete</span> bB[bv[bA]]}<span class=\"keywordflow\">if</span>(!(by?S:<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isEmptyObject)(bB)){<span class=\"keywordflow\">return</span>}}}<span class=\"keywordflow\">if</span>(!by){<span class=\"keyword\">delete</span> e[bw].data;<span class=\"keywordflow\">if</span>(!S(e[bw])){<span class=\"keywordflow\">return</span>}}<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.deleteExpando||!e.setInterval){<span class=\"keyword\">delete</span> e[bw]}<span class=\"keywordflow\">else</span>{e[bw]=null}<span class=\"keywordflow\">if</span>(bD){<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.deleteExpando){<span class=\"keyword\">delete</span> bx[bC]}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bx.removeAttribute){bx.removeAttribute(bC)}<span class=\"keywordflow\">else</span>{bx[bC]=null}}}},_data:<span class=\"keyword\">function</span>(bv,e,bw){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.data(bv,e,bw,<span class=\"keyword\">true</span>)},acceptData:<span class=\"keyword\">function</span>(bv){<span class=\"keywordflow\">if</span>(bv.nodeName){var e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.noData[bv.nodeName.toLowerCase()];<span class=\"keywordflow\">if</span>(e){<span class=\"keywordflow\">return</span> !(e===<span class=\"keyword\">true</span>||bv.getAttribute(<span class=\"stringliteral\">&quot;classid&quot;</span>)!==e)}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>}});<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fn.extend({data:<span class=\"keyword\">function</span>(by,bA){var bB,e,bw,bz=null;<span class=\"keywordflow\">if</span>(typeof by===<span class=\"stringliteral\">&quot;undefined&quot;</span>){<span class=\"keywordflow\">if</span>(this.length){bz=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.data(<span class=\"keyword\">this</span>[0]);<span class=\"keywordflow\">if</span>(<span class=\"keyword\">this</span>[0].nodeType===1&amp;&amp;!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(<span class=\"keyword\">this</span>[0],<span class=\"stringliteral\">&quot;parsedAttrs&quot;</span>)){e=<span class=\"keyword\">this</span>[0].attributes;<span class=\"keywordflow\">for</span>(var bx=0,bv=e.length;bx&lt;bv;bx++){bw=e[bx].name;<span class=\"keywordflow\">if</span>(bw.indexOf(<span class=\"stringliteral\">&quot;data-&quot;</span>)===0){bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.camelCase(bw.substring(5));a5(<span class=\"keyword\">this</span>[0],bw,bz[bw])}}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(<span class=\"keyword\">this</span>[0],<span class=\"stringliteral\">&quot;parsedAttrs&quot;</span>,<span class=\"keyword\">true</span>)}}<span class=\"keywordflow\">return</span> bz}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(typeof by===<span class=\"stringliteral\">&quot;object&quot;</span>){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.data(<span class=\"keyword\">this</span>,by)})}}bB=by.split(<span class=\"stringliteral\">&quot;.&quot;</span>);bB[1]=bB[1]?<span class=\"stringliteral\">&quot;.&quot;</span>+bB[1]:<span class=\"stringliteral\">&quot;&quot;</span>;<span class=\"keywordflow\">if</span>(bA===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){bz=this.triggerHandler(<span class=\"stringliteral\">&quot;getData&quot;</span>+bB[1]+<span class=\"stringliteral\">&quot;!&quot;</span>,[bB[0]]);<span class=\"keywordflow\">if</span>(bz===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>&amp;&amp;this.length){bz=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.data(<span class=\"keyword\">this</span>[0],by);bz=a5(<span class=\"keyword\">this</span>[0],by,bz)}<span class=\"keywordflow\">return</span> bz===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>&amp;&amp;bB[1]?this.data(bB[0]):bz}else{<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){var bC=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>),bD=[bB[0],bA];bC.triggerHandler(<span class=\"stringliteral\">&quot;setData&quot;</span>+bB[1]+<span class=\"stringliteral\">&quot;!&quot;</span>,bD);<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.data(<span class=\"keyword\">this</span>,by,bA);bC.triggerHandler(<span class=\"stringliteral\">&quot;changeData&quot;</span>+bB[1]+<span class=\"stringliteral\">&quot;!&quot;</span>,bD)})}},removeData:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.removeData(<span class=\"keyword\">this</span>,e)})}});<span class=\"keyword\">function</span> a5(bx,bw,by){<span class=\"keywordflow\">if</span>(by===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>&amp;&amp;bx.nodeType===1){var bv=<span class=\"stringliteral\">&quot;data-&quot;</span>+bw.replace(aA,<span class=\"stringliteral\">&quot;-$1&quot;</span>).toLowerCase();by=bx.getAttribute(bv);<span class=\"keywordflow\">if</span>(typeof by===<span class=\"stringliteral\">&quot;string&quot;</span>){<span class=\"keywordflow\">try</span>{by=by===<span class=\"stringliteral\">&quot;true&quot;</span>?<span class=\"keyword\">true</span>:by===<span class=\"stringliteral\">&quot;false&quot;</span>?<span class=\"keyword\">false</span>:by===<span class=\"stringliteral\">&quot;null&quot;</span>?null:<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isNumeric(by)?parseFloat(by):aS.test(by)?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.parseJSON(by):by}catch(bz){}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.data(bx,bw,by)}<span class=\"keywordflow\">else</span>{by=<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>}}<span class=\"keywordflow\">return</span> by}<span class=\"keyword\">function</span> S(bv){<span class=\"keywordflow\">for</span>(var e in bv){<span class=\"keywordflow\">if</span>(e===<span class=\"stringliteral\">&quot;data&quot;</span>&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isEmptyObject(bv[e])){<span class=\"keywordflow\">continue</span>}<span class=\"keywordflow\">if</span>(e!==<span class=\"stringliteral\">&quot;toJSON&quot;</span>){<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>}<span class=\"keyword\">function</span> bi(by,bx,bA){var bw=bx+<span class=\"stringliteral\">&quot;defer&quot;</span>,bv=bx+<span class=\"stringliteral\">&quot;queue&quot;</span>,e=bx+<span class=\"stringliteral\">&quot;mark&quot;</span>,bz=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(by,bw);<span class=\"keywordflow\">if</span>(bz&amp;&amp;(bA===<span class=\"stringliteral\">&quot;queue&quot;</span>||!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(by,bv))&amp;&amp;(bA===<span class=\"stringliteral\">&quot;mark&quot;</span>||!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(by,e))){setTimeout(<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(by,bv)&amp;&amp;!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(by,e)){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.removeData(by,bw,<span class=\"keyword\">true</span>);bz.fire()}},0)}}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend({_mark:function(bv,e){if(bv){e=(e||<span class=\"stringliteral\">&quot;fx&quot;</span>)+<span class=\"stringliteral\">&quot;mark&quot;</span>;b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:<span class=\"keyword\">function</span>(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}<span class=\"keywordflow\">if</span>(bx){bv=bv||<span class=\"stringliteral\">&quot;fx&quot;</span>;var e=bv+<span class=\"stringliteral\">&quot;mark&quot;</span>,bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}<span class=\"keywordflow\">else</span>{b.removeData(bx,e,true);bi(bx,bv,<span class=\"stringliteral\">&quot;mark&quot;</span>)}}},queue:<span class=\"keyword\">function</span>(bv,e,bx){var bw;<span class=\"keywordflow\">if</span>(bv){e=(e||<span class=\"stringliteral\">&quot;fx&quot;</span>)+<span class=\"stringliteral\">&quot;queue&quot;</span>;bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(bv,e);<span class=\"keywordflow\">if</span>(bx){<span class=\"keywordflow\">if</span>(!bw||<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isArray(bx)){bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(bv,e,<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.makeArray(bx))}<span class=\"keywordflow\">else</span>{bw.push(bx)}}<span class=\"keywordflow\">return</span> bw||[]}},dequeue:<span class=\"keyword\">function</span>(by,bx){bx=bx||<span class=\"stringliteral\">&quot;fx&quot;</span>;var bv=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.queue(by,bx),bw=bv.shift(),e={};<span class=\"keywordflow\">if</span>(bw===<span class=\"stringliteral\">&quot;inprogress&quot;</span>){bw=bv.shift()}<span class=\"keywordflow\">if</span>(bw){<span class=\"keywordflow\">if</span>(bx===<span class=\"stringliteral\">&quot;fx&quot;</span>){bv.unshift(<span class=\"stringliteral\">&quot;inprogress&quot;</span>)}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(by,bx+<span class=\"stringliteral\">&quot;.run&quot;</span>,e);bw.call(by,<span class=\"keyword\">function</span>(){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.dequeue(by,bx)},e)}<span class=\"keywordflow\">if</span>(!bv.length){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.removeData(by,bx+<span class=\"stringliteral\">&quot;queue &quot;</span>+bx+<span class=\"stringliteral\">&quot;.run&quot;</span>,<span class=\"keyword\">true</span>);bi(by,bx,<span class=\"stringliteral\">&quot;queue&quot;</span>)}}});<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fn.extend({queue:<span class=\"keyword\">function</span>(e,bv){<span class=\"keywordflow\">if</span>(typeof e!==<span class=\"stringliteral\">&quot;string&quot;</span>){bv=e;e=<span class=\"stringliteral\">&quot;fx&quot;</span>}<span class=\"keywordflow\">if</span>(bv===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.queue(<span class=\"keyword\">this</span>[0],e)}<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){var bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.queue(<span class=\"keyword\">this</span>,e,bv);<span class=\"keywordflow\">if</span>(e===<span class=\"stringliteral\">&quot;fx&quot;</span>&amp;&amp;bw[0]!==<span class=\"stringliteral\">&quot;inprogress&quot;</span>){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.dequeue(<span class=\"keyword\">this</span>,e)}})},dequeue:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.dequeue(<span class=\"keyword\">this</span>,e)})},delay:<span class=\"keyword\">function</span>(bv,e){bv=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fx?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fx.speeds[bv]||bv:bv;e=e||<span class=\"stringliteral\">&quot;fx&quot;</span>;<span class=\"keywordflow\">return</span> this.queue(e,<span class=\"keyword\">function</span>(bx,bw){var by=setTimeout(bx,bv);bw.stop=<span class=\"keyword\">function</span>(){clearTimeout(by)}})},clearQueue:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> this.queue(e||<span class=\"stringliteral\">&quot;fx&quot;</span>,[])},promise:<span class=\"keyword\">function</span>(bD,bw){<span class=\"keywordflow\">if</span>(typeof bD!==<span class=\"stringliteral\">&quot;string&quot;</span>){bw=bD;bD=<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>}bD=bD||<span class=\"stringliteral\">&quot;fx&quot;</span>;var e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Deferred(),bv=<span class=\"keyword\">this</span>,by=bv.length,bB=1,bz=bD+<span class=\"stringliteral\">&quot;defer&quot;</span>,bA=bD+<span class=\"stringliteral\">&quot;queue&quot;</span>,bC=bD+<span class=\"stringliteral\">&quot;mark&quot;</span>,bx;<span class=\"keyword\">function</span> bE(){<span class=\"keywordflow\">if</span>(!(--bB)){e.resolveWith(bv,[bv])}}<span class=\"keywordflow\">while</span>(by--){<span class=\"keywordflow\">if</span>((bx=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.data(bv[by],bz,<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>,<span class=\"keyword\">true</span>)||(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.data(bv[by],bA,<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>,<span class=\"keyword\">true</span>)||<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.data(bv[by],bC,<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>,<span class=\"keyword\">true</span>))&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.data(bv[by],bz,<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Callbacks(<span class=\"stringliteral\">&quot;once memory&quot;</span>),<span class=\"keyword\">true</span>))){bB++;bx.add(bE)}}bE();<span class=\"keywordflow\">return</span> e.promise()}});var aP=/[\\n\\t\\r]/g,af=/\\s+/,aU=/\\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|<span class=\"keywordtype\">object</span>|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.getSetAttribute,be,aY,aF;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:<span class=\"keyword\">function</span>(e){return this.each(function(){b.removeAttr(this,e)})},prop:<span class=\"keyword\">function</span>(e,bv){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.access(<span class=\"keyword\">this</span>,e,bv,<span class=\"keyword\">true</span>,<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.prop)},removeProp:<span class=\"keyword\">function</span>(e){e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.propFix[e]||e;<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">try</span>{<span class=\"keyword\">this</span>[e]=<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>;<span class=\"keyword\">delete</span> <span class=\"keyword\">this</span>[e]}<span class=\"keywordflow\">catch</span>(bv){}})},addClass:<span class=\"keyword\">function</span>(by){var bA,bw,bv,bx,bz,bB,e;<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(by)){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(bC){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>).addClass(by.call(<span class=\"keyword\">this</span>,bC,<span class=\"keyword\">this</span>.className))})}<span class=\"keywordflow\">if</span>(by&amp;&amp;typeof by===<span class=\"stringliteral\">&quot;string&quot;</span>){bA=by.split(af);<span class=\"keywordflow\">for</span>(bw=0,bv=this.length;bw&lt;bv;bw++){bx=<span class=\"keyword\">this</span>[bw];<span class=\"keywordflow\">if</span>(bx.nodeType===1){<span class=\"keywordflow\">if</span>(!bx.className&amp;&amp;bA.length===1){bx.className=by}<span class=\"keywordflow\">else</span>{bz=<span class=\"stringliteral\">&quot; &quot;</span>+bx.className+<span class=\"stringliteral\">&quot; &quot;</span>;<span class=\"keywordflow\">for</span>(bB=0,e=bA.length;bB&lt;e;bB++){<span class=\"keywordflow\">if</span>(!~bz.indexOf(<span class=\"stringliteral\">&quot; &quot;</span>+bA[bB]+<span class=\"stringliteral\">&quot; &quot;</span>)){bz+=bA[bB]+<span class=\"stringliteral\">&quot; &quot;</span>}}bx.className=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.trim(bz)}}}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},removeClass:<span class=\"keyword\">function</span>(bz){var bA,bw,bv,by,bx,bB,e;<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(bz)){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(bC){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>).removeClass(bz.call(<span class=\"keyword\">this</span>,bC,<span class=\"keyword\">this</span>.className))})}<span class=\"keywordflow\">if</span>((bz&amp;&amp;typeof bz===<span class=\"stringliteral\">&quot;string&quot;</span>)||bz===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){bA=(bz||<span class=\"stringliteral\">&quot;&quot;</span>).split(af);<span class=\"keywordflow\">for</span>(bw=0,bv=this.length;bw&lt;bv;bw++){by=<span class=\"keyword\">this</span>[bw];<span class=\"keywordflow\">if</span>(by.nodeType===1&amp;&amp;by.className){<span class=\"keywordflow\">if</span>(bz){bx=(<span class=\"stringliteral\">&quot; &quot;</span>+by.className+<span class=\"stringliteral\">&quot; &quot;</span>).replace(aP,<span class=\"stringliteral\">&quot; &quot;</span>);<span class=\"keywordflow\">for</span>(bB=0,e=bA.length;bB&lt;e;bB++){bx=bx.replace(<span class=\"stringliteral\">&quot; &quot;</span>+bA[bB]+<span class=\"stringliteral\">&quot; &quot;</span>,<span class=\"stringliteral\">&quot; &quot;</span>)}by.className=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.trim(bx)}<span class=\"keywordflow\">else</span>{by.className=<span class=\"stringliteral\">&quot;&quot;</span>}}}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},toggleClass:<span class=\"keyword\">function</span>(bx,bv){var bw=typeof bx,e=typeof bv===<span class=\"stringliteral\">&quot;boolean&quot;</span>;<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(bx)){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(by){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>).toggleClass(bx.call(<span class=\"keyword\">this</span>,by,<span class=\"keyword\">this</span>.className,bv),bv)})}<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(bw===<span class=\"stringliteral\">&quot;string&quot;</span>){var bA,bz=0,by=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>),bB=bv,bC=bx.split(af);<span class=\"keywordflow\">while</span>((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?<span class=\"stringliteral\">&quot;addClass&quot;</span>:<span class=\"stringliteral\">&quot;removeClass&quot;</span>](bA)}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bw===<span class=\"stringliteral\">&quot;undefined&quot;</span>||bw===<span class=\"stringliteral\">&quot;boolean&quot;</span>){<span class=\"keywordflow\">if</span>(this.className){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;__className__&quot;</span>,this.className)}this.className=this.className||bx===<span class=\"keyword\">false</span>?<span class=\"stringliteral\">&quot;&quot;</span>:<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;__className__&quot;</span>)||<span class=\"stringliteral\">&quot;&quot;</span>}}})},hasClass:<span class=\"keyword\">function</span>(e){var bx=<span class=\"stringliteral\">&quot; &quot;</span>+e+<span class=\"stringliteral\">&quot; &quot;</span>,bw=0,bv=this.length;<span class=\"keywordflow\">for</span>(;bw&lt;bv;bw++){<span class=\"keywordflow\">if</span>(<span class=\"keyword\">this</span>[bw].nodeType===1&amp;&amp;(<span class=\"stringliteral\">&quot; &quot;</span>+<span class=\"keyword\">this</span>[bw].className+<span class=\"stringliteral\">&quot; &quot;</span>).replace(aP,<span class=\"stringliteral\">&quot; &quot;</span>).indexOf(bx)&gt;-1){<span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>},val:<span class=\"keyword\">function</span>(bx){var e,bv,by,bw=<span class=\"keyword\">this</span>[0];<span class=\"keywordflow\">if</span>(!arguments.length){<span class=\"keywordflow\">if</span>(bw){e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.valHooks[bw.nodeName.toLowerCase()]||<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.valHooks[bw.type];<span class=\"keywordflow\">if</span>(e&amp;&amp;<span class=\"stringliteral\">&quot;get&quot;</span> in e&amp;&amp;(bv=e.get(bw,<span class=\"stringliteral\">&quot;value&quot;</span>))!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){<span class=\"keywordflow\">return</span> bv}bv=bw.value;<span class=\"keywordflow\">return</span> typeof bv===<span class=\"stringliteral\">&quot;string&quot;</span>?bv.replace(aU,<span class=\"stringliteral\">&quot;&quot;</span>):bv==null?<span class=\"stringliteral\">&quot;&quot;</span>:bv}<span class=\"keywordflow\">return</span>}by=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(bx);<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(bA){var bz=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>),bB;<span class=\"keywordflow\">if</span>(this.nodeType!==1){<span class=\"keywordflow\">return</span>}<span class=\"keywordflow\">if</span>(by){bB=bx.call(<span class=\"keyword\">this</span>,bA,bz.val())}<span class=\"keywordflow\">else</span>{bB=bx}<span class=\"keywordflow\">if</span>(bB==null){bB=<span class=\"stringliteral\">&quot;&quot;</span>}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(typeof bB===<span class=\"stringliteral\">&quot;number&quot;</span>){bB+=<span class=\"stringliteral\">&quot;&quot;</span>}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isArray(bB)){bB=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.map(bB,<span class=\"keyword\">function</span>(bC){<span class=\"keywordflow\">return</span> bC==null?<span class=\"stringliteral\">&quot;&quot;</span>:bC+<span class=\"stringliteral\">&quot;&quot;</span>})}}}e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.valHooks[<span class=\"keyword\">this</span>.nodeName.toLowerCase()]||<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.valHooks[this.type];<span class=\"keywordflow\">if</span>(!e||!(<span class=\"stringliteral\">&quot;set&quot;</span> in e)||e.set(<span class=\"keyword\">this</span>,bB,<span class=\"stringliteral\">&quot;value&quot;</span>)===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){this.value=bB}})}});<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend({valHooks:{option:{<span class=\"keyword\">get</span>:<span class=\"keyword\">function</span>(e){var bv=e.attributes.value;<span class=\"keywordflow\">return</span> !bv||bv.specified?e.value:e.text}},select:{<span class=\"keyword\">get</span>:<span class=\"keyword\">function</span>(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type===<span class=\"stringliteral\">&quot;select-one&quot;</span>;<span class=\"keywordflow\">if</span>(by&lt;0){<span class=\"keywordflow\">return</span> null}bv=bw?by:0;bz=bw?by+1:bC.length;<span class=\"keywordflow\">for</span>(;bv&lt;bz;bv++){bx=bC[bv];<span class=\"keywordflow\">if</span>(bx.selected&amp;&amp;(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.optDisabled?!bx.disabled:bx.getAttribute(<span class=\"stringliteral\">&quot;disabled&quot;</span>)===null)&amp;&amp;(!bx.parentNode.disabled||!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(bx.parentNode,<span class=\"stringliteral\">&quot;optgroup&quot;</span>))){bA=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(bx).val();<span class=\"keywordflow\">if</span>(bw){<span class=\"keywordflow\">return</span> bA}bB.push(bA)}}<span class=\"keywordflow\">if</span>(bw&amp;&amp;!bB.length&amp;&amp;bC.length){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(bC[by]).val()}<span class=\"keywordflow\">return</span> bB},set:<span class=\"keyword\">function</span>(bv,bw){var e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.makeArray(bw);<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(bv).find(<span class=\"stringliteral\">&quot;option&quot;</span>).each(<span class=\"keyword\">function</span>(){this.selected=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.inArray(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>).val(),e)&gt;=0});<span class=\"keywordflow\">if</span>(!e.length){bv.selectedIndex=-1}<span class=\"keywordflow\">return</span> e}}},attrFn:{val:<span class=\"keyword\">true</span>,<a class=\"code\" href=\"jquery_8js.html#a89ad527fcd82c01ebb587332f5b4fcd4\">css</a>:<span class=\"keyword\">true</span>,html:<span class=\"keyword\">true</span>,text:<span class=\"keyword\">true</span>,data:<span class=\"keyword\">true</span>,width:<span class=\"keyword\">true</span>,height:<span class=\"keyword\">true</span>,offset:<span class=\"keyword\">true</span>},attr:<span class=\"keyword\">function</span>(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;<span class=\"keywordflow\">if</span>(!bA||bv===3||bv===8||bv===2){<span class=\"keywordflow\">return</span>}<span class=\"keywordflow\">if</span>(bz&amp;&amp;bx in <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrFn){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(bA)[bx](bB)}<span class=\"keywordflow\">if</span>(typeof bA.getAttribute===<span class=\"stringliteral\">&quot;undefined&quot;</span>){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.prop(bA,bx,bB)}by=bv!==1||!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isXMLDoc(bA);<span class=\"keywordflow\">if</span>(by){bx=bx.toLowerCase();e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrHooks[bx]||(ao.test(bx)?aY:be)}<span class=\"keywordflow\">if</span>(bB!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){<span class=\"keywordflow\">if</span>(bB===null){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.removeAttr(bA,bx);<span class=\"keywordflow\">return</span>}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(e&amp;&amp;<span class=\"stringliteral\">&quot;set&quot;</span> in e&amp;&amp;by&amp;&amp;(bw=e.set(bA,bB,bx))!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){<span class=\"keywordflow\">return</span> bw}<span class=\"keywordflow\">else</span>{bA.setAttribute(bx,<span class=\"stringliteral\">&quot;&quot;</span>+bB);<span class=\"keywordflow\">return</span> bB}}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(e&amp;&amp;<span class=\"stringliteral\">&quot;get&quot;</span> in e&amp;&amp;by&amp;&amp;(bw=e.get(bA,bx))!==null){<span class=\"keywordflow\">return</span> bw}<span class=\"keywordflow\">else</span>{bw=bA.getAttribute(bx);<span class=\"keywordflow\">return</span> bw===null?<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>:bw}}},removeAttr:<span class=\"keyword\">function</span>(bx,bz){var by,bA,bv,e,bw=0;<span class=\"keywordflow\">if</span>(bz&amp;&amp;bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;<span class=\"keywordflow\">for</span>(;bw&lt;e;bw++){bv=bA[bw];<span class=\"keywordflow\">if</span>(bv){by=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.propFix[bv]||bv;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attr(bx,bv,<span class=\"stringliteral\">&quot;&quot;</span>);bx.removeAttribute(F?bv:by);<span class=\"keywordflow\">if</span>(ao.test(bv)&amp;&amp;by in bx){bx[by]=<span class=\"keyword\">false</span>}}}}},attrHooks:{type:{set:<span class=\"keyword\">function</span>(e,bv){<span class=\"keywordflow\">if</span>(g.test(e.nodeName)&amp;&amp;e.parentNode){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.error(<span class=\"stringliteral\">&quot;type property can&#39;t be changed&quot;</span>)}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.radioValue&amp;&amp;bv===<span class=\"stringliteral\">&quot;radio&quot;</span>&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(e,<span class=\"stringliteral\">&quot;input&quot;</span>)){var bw=e.value;e.setAttribute(<span class=\"stringliteral\">&quot;type&quot;</span>,bv);<span class=\"keywordflow\">if</span>(bw){e.value=bw}<span class=\"keywordflow\">return</span> bv}}}},value:{<span class=\"keyword\">get</span>:<span class=\"keyword\">function</span>(bv,e){<span class=\"keywordflow\">if</span>(be&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(bv,<span class=\"stringliteral\">&quot;button&quot;</span>)){<span class=\"keywordflow\">return</span> be.get(bv,e)}<span class=\"keywordflow\">return</span> e in bv?bv.value:null},set:<span class=\"keyword\">function</span>(bv,bw,e){<span class=\"keywordflow\">if</span>(be&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(bv,<span class=\"stringliteral\">&quot;button&quot;</span>)){<span class=\"keywordflow\">return</span> be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:<span class=\"stringliteral\">&quot;tabIndex&quot;</span>,readonly:<span class=\"stringliteral\">&quot;readOnly&quot;</span>,<span class=\"stringliteral\">&quot;for&quot;</span>:<span class=\"stringliteral\">&quot;htmlFor&quot;</span>,<span class=\"stringliteral\">&quot;class&quot;</span>:<span class=\"stringliteral\">&quot;className&quot;</span>,maxlength:<span class=\"stringliteral\">&quot;maxLength&quot;</span>,cellspacing:<span class=\"stringliteral\">&quot;cellSpacing&quot;</span>,cellpadding:<span class=\"stringliteral\">&quot;cellPadding&quot;</span>,rowspan:<span class=\"stringliteral\">&quot;rowSpan&quot;</span>,colspan:<span class=\"stringliteral\">&quot;colSpan&quot;</span>,usemap:<span class=\"stringliteral\">&quot;useMap&quot;</span>,frameborder:<span class=\"stringliteral\">&quot;frameBorder&quot;</span>,contenteditable:<span class=\"stringliteral\">&quot;contentEditable&quot;</span>},prop:<span class=\"keyword\">function</span>(bz,bx,bA){var bw,e,by,bv=bz.nodeType;<span class=\"keywordflow\">if</span>(!bz||bv===3||bv===8||bv===2){<span class=\"keywordflow\">return</span>}by=bv!==1||!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isXMLDoc(bz);<span class=\"keywordflow\">if</span>(by){bx=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.propFix[bx]||bx;e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.propHooks[bx]}<span class=\"keywordflow\">if</span>(bA!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){<span class=\"keywordflow\">if</span>(e&amp;&amp;<span class=\"stringliteral\">&quot;set&quot;</span> in e&amp;&amp;(bw=e.set(bz,bA,bx))!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){<span class=\"keywordflow\">return</span> bw}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">return</span>(bz[bx]=bA)}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(e&amp;&amp;<span class=\"stringliteral\">&quot;get&quot;</span> in e&amp;&amp;(bw=e.get(bz,bx))!==null){<span class=\"keywordflow\">return</span> bw}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">return</span> bz[bx]}}},propHooks:{tabIndex:{<span class=\"keyword\">get</span>:<span class=\"keyword\">function</span>(bv){var e=bv.getAttributeNode(<span class=\"stringliteral\">&quot;tabindex&quot;</span>);<span class=\"keywordflow\">return</span> e&amp;&amp;e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&amp;&amp;bv.href?0:<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>}}}});<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrHooks.tabindex=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.propHooks.tabIndex;aY={<span class=\"keyword\">get</span>:<span class=\"keyword\">function</span>(bv,e){var bx,bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.prop(bv,e);<span class=\"keywordflow\">return</span> bw===<span class=\"keyword\">true</span>||typeof bw!==<span class=\"stringliteral\">&quot;boolean&quot;</span>&amp;&amp;(bx=bv.getAttributeNode(e))&amp;&amp;bx.nodeValue!==<span class=\"keyword\">false</span>?e.toLowerCase():<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>},set:<span class=\"keyword\">function</span>(bv,bx,e){var bw;<span class=\"keywordflow\">if</span>(bx===<span class=\"keyword\">false</span>){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.removeAttr(bv,e)}<span class=\"keywordflow\">else</span>{bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.propFix[e]||e;<span class=\"keywordflow\">if</span>(bw in bv){bv[bw]=<span class=\"keyword\">true</span>}bv.setAttribute(e,e.toLowerCase())}<span class=\"keywordflow\">return</span> e}};<span class=\"keywordflow\">if</span>(!F){aF={name:<span class=\"keyword\">true</span>,<span class=\"keywordtype\">id</span>:<span class=\"keyword\">true</span>};be=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.valHooks.button={<span class=\"keyword\">get</span>:<span class=\"keyword\">function</span>(bw,bv){var e;e=bw.getAttributeNode(bv);<span class=\"keywordflow\">return</span> e&amp;&amp;(aF[bv]?e.nodeValue!==<span class=\"stringliteral\">&quot;&quot;</span>:e.specified)?e.nodeValue:<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>},set:<span class=\"keyword\">function</span>(bw,bx,bv){var e=bw.getAttributeNode(bv);<span class=\"keywordflow\">if</span>(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}<span class=\"keywordflow\">return</span>(e.nodeValue=bx+<span class=\"stringliteral\">&quot;&quot;</span>)}};<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrHooks.tabindex.set=be.set;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.each([<span class=\"stringliteral\">&quot;width&quot;</span>,<span class=\"stringliteral\">&quot;height&quot;</span>],<span class=\"keyword\">function</span>(bv,e){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrHooks[e]=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrHooks[e],{set:function(bw,bx){if(bx===<span class=\"stringliteral\">&quot;&quot;</span>){bw.setAttribute(e,<span class=\"stringliteral\">&quot;auto&quot;</span>);return bx}}})});<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrHooks.contenteditable={<span class=\"keyword\">get</span>:be.get,set:<span class=\"keyword\">function</span>(bv,bw,e){<span class=\"keywordflow\">if</span>(bw===<span class=\"stringliteral\">&quot;&quot;</span>){bw=<span class=\"stringliteral\">&quot;false&quot;</span>}be.set(bv,bw,e)}}}<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.hrefNormalized){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.each([<span class=\"stringliteral\">&quot;href&quot;</span>,<span class=\"stringliteral\">&quot;src&quot;</span>,<span class=\"stringliteral\">&quot;width&quot;</span>,<span class=\"stringliteral\">&quot;height&quot;</span>],<span class=\"keyword\">function</span>(bv,e){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrHooks[e]=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.style){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrHooks.style={<span class=\"keyword\">get</span>:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> e.style.cssText.toLowerCase()||<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>},set:<span class=\"keyword\">function</span>(e,bv){<span class=\"keywordflow\">return</span>(e.style.cssText=<span class=\"stringliteral\">&quot;&quot;</span>+bv)}}}<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.optSelected){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.propHooks.selected=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.enctype){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.propFix.enctype=<span class=\"stringliteral\">&quot;encoding&quot;</span>}<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.checkOn){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.each([<span class=\"stringliteral\">&quot;radio&quot;</span>,<span class=\"stringliteral\">&quot;checkbox&quot;</span>],<span class=\"keyword\">function</span>(){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.valHooks[<span class=\"keyword\">this</span>]={<span class=\"keyword\">get</span>:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> e.getAttribute(<span class=\"stringliteral\">&quot;value&quot;</span>)===null?<span class=\"stringliteral\">&quot;on&quot;</span>:e.value}}})}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.each([<span class=\"stringliteral\">&quot;radio&quot;</span>,<span class=\"stringliteral\">&quot;checkbox&quot;</span>],<span class=\"keyword\">function</span>(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)&gt;=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\\.]*)?(?:\\.(.+))?$/,J=/\\bhover(\\.\\S+)?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">\\b</a>/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,Y=<span class=\"keyword\">function</span>(e){var bv=U.exec(e);<span class=\"keywordflow\">if</span>(bv){bv[1]=(bv[1]||<span class=\"stringliteral\">&quot;&quot;</span>).toLowerCase();bv[3]=bv[3]&amp;&amp;<span class=\"keyword\">new</span> RegExp(<span class=\"stringliteral\">&quot;(?:^|\\\\s)&quot;</span>+bv[3]+<span class=\"stringliteral\">&quot;(?:\\\\s|$)&quot;</span>)}<span class=\"keywordflow\">return</span> bv},j=<span class=\"keyword\">function</span>(bw,e){var bv=bw.attributes||{};<span class=\"keywordflow\">return</span>((!e[1]||bw.nodeName.toLowerCase()===e[1])&amp;&amp;(!e[2]||(bv.id||{}).value===e[2])&amp;&amp;(!e[3]||e[3].test((bv[<span class=\"stringliteral\">&quot;class&quot;</span>]||{}).value)))},bt=<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.special.hover?e:e.replace(J,<span class=\"stringliteral\">&quot;mouseenter$1 mouseleave$1&quot;</span>)};<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event={add:<span class=\"keyword\">function</span>(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;<span class=\"keywordflow\">if</span>(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(bx))){<span class=\"keywordflow\">return</span>}<span class=\"keywordflow\">if</span>(bJ.handler){bv=bJ;bJ=bv.handler}<span class=\"keywordflow\">if</span>(!bJ.guid){bJ.guid=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.guid++}bK=bD.events;<span class=\"keywordflow\">if</span>(!bK){bD.events=bK={}}bB=bD.handle;<span class=\"keywordflow\">if</span>(!bB){bD.handle=bB=<span class=\"keyword\">function</span>(bL){<span class=\"keywordflow\">return</span> typeof <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>!==<span class=\"stringliteral\">&quot;undefined&quot;</span>&amp;&amp;(!bL||<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.triggered!==bL.type)?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.dispatch.apply(bB.elem,arguments):<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>};bB.elem=bx}bC=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.trim(bt(bC)).split(<span class=\"stringliteral\">&quot; &quot;</span>);<span class=\"keywordflow\">for</span>(bI=0;bI&lt;bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||<span class=\"stringliteral\">&quot;&quot;</span>).split(<span class=\"stringliteral\">&quot;.&quot;</span>).sort();bE=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.special[bF]||{};bG=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),<span class=\"keyword\">namespace</span>:e.join(<span class=\"stringliteral\">&quot;.&quot;</span>)},bv);bw=bK[bF];<span class=\"keywordflow\">if</span>(!bw){bw=bK[bF]=[];bw.delegateCount=0;<span class=\"keywordflow\">if</span>(!bE.setup||bE.setup.call(bx,bA,e,bB)===<span class=\"keyword\">false</span>){<span class=\"keywordflow\">if</span>(bx.addEventListener){bx.addEventListener(bF,bB,<span class=\"keyword\">false</span>)}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bx.attachEvent){bx.attachEvent(<span class=\"stringliteral\">&quot;on&quot;</span>+bF,bB)}}}}<span class=\"keywordflow\">if</span>(bE.add){bE.add.call(bx,bG);<span class=\"keywordflow\">if</span>(!bG.handler.guid){bG.handler.guid=bJ.guid}}<span class=\"keywordflow\">if</span>(by){bw.splice(bw.delegateCount++,0,bG)}<span class=\"keywordflow\">else</span>{bw.push(bG)}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.global[bF]=<span class=\"keyword\">true</span>}bx=null},global:{},<span class=\"keyword\">remove</span>:<span class=\"keyword\">function</span>(bJ,bE,bv,bH,bB){var bI=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.hasData(bJ)&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;<span class=\"keywordflow\">if</span>(!bI||!(bw=bI.events)){<span class=\"keywordflow\">return</span>}bE=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.trim(bt(bE||<span class=\"stringliteral\">&quot;&quot;</span>)).split(<span class=\"stringliteral\">&quot; &quot;</span>);<span class=\"keywordflow\">for</span>(bF=0;bF&lt;bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];<span class=\"keywordflow\">if</span>(!bz){<span class=\"keywordflow\">for</span>(bz in bw){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.remove(bJ,bz+bE[bF],bv,bH,<span class=\"keyword\">true</span>)}<span class=\"keywordflow\">continue</span>}by=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?<span class=\"keyword\">new</span> RegExp(<span class=\"stringliteral\">&quot;(^|\\\\.)&quot;</span>+bC.split(<span class=\"stringliteral\">&quot;.&quot;</span>).sort().join(<span class=\"stringliteral\">&quot;\\\\.(?:.*\\\\.)?&quot;</span>)+<span class=\"stringliteral\">&quot;(\\\\.|$)&quot;</span>):null;<span class=\"keywordflow\">for</span>(bG=0;bG&lt;bD.length;bG++){e=bD[bG];<span class=\"keywordflow\">if</span>((bB||bL===e.origType)&amp;&amp;(!bv||bv.guid===e.guid)&amp;&amp;(!bC||bC.test(e.namespace))&amp;&amp;(!bH||bH===e.selector||bH===<span class=\"stringliteral\">&quot;**&quot;</span>&amp;&amp;e.selector)){bD.splice(bG--,1);<span class=\"keywordflow\">if</span>(e.selector){bD.delegateCount--}<span class=\"keywordflow\">if</span>(by.remove){by.remove.call(bJ,e)}}}<span class=\"keywordflow\">if</span>(bD.length===0&amp;&amp;bA!==bD.length){<span class=\"keywordflow\">if</span>(!by.teardown||by.teardown.call(bJ,bC)===<span class=\"keyword\">false</span>){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.removeEvent(bJ,bz,bI.handle)}<span class=\"keyword\">delete</span> bw[bz]}}<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isEmptyObject(bw)){bK=bI.handle;<span class=\"keywordflow\">if</span>(bK){bK.elem=null}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.removeData(bJ,[<span class=\"stringliteral\">&quot;events&quot;</span>,<span class=\"stringliteral\">&quot;handle&quot;</span>],<span class=\"keyword\">true</span>)}},customEvent:{getData:<span class=\"keyword\">true</span>,setData:<span class=\"keyword\">true</span>,changeData:<span class=\"keyword\">true</span>},trigger:<span class=\"keyword\">function</span>(bv,bD,bA,bJ){<span class=\"keywordflow\">if</span>(bA&amp;&amp;(bA.nodeType===3||bA.nodeType===8)){<span class=\"keywordflow\">return</span>}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;<span class=\"keywordflow\">if</span>(T.test(bG+<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.triggered)){<span class=\"keywordflow\">return</span>}<span class=\"keywordflow\">if</span>(bG.indexOf(<span class=\"stringliteral\">&quot;!&quot;</span>)&gt;=0){bG=bG.slice(0,-1);bw=<span class=\"keyword\">true</span>}<span class=\"keywordflow\">if</span>(bG.indexOf(<span class=\"stringliteral\">&quot;.&quot;</span>)&gt;=0){bx=bG.split(<span class=\"stringliteral\">&quot;.&quot;</span>);bG=bx.shift();bx.sort()}<span class=\"keywordflow\">if</span>((!bA||<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.customEvent[bG])&amp;&amp;!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.global[bG]){<span class=\"keywordflow\">return</span>}bv=typeof bv===<span class=\"stringliteral\">&quot;object&quot;</span>?bv[<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expando]?bv:<span class=\"keyword\">new</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Event(bG,bv):<span class=\"keyword\">new</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Event(bG);bv.type=bG;bv.isTrigger=<span class=\"keyword\">true</span>;bv.exclusive=bw;bv.namespace=bx.join(<span class=\"stringliteral\">&quot;.&quot;</span>);bv.namespace_re=bv.namespace?<span class=\"keyword\">new</span> RegExp(<span class=\"stringliteral\">&quot;(^|\\\\.)&quot;</span>+bx.join(<span class=\"stringliteral\">&quot;\\\\.(?:.*\\\\.)?&quot;</span>)+<span class=\"stringliteral\">&quot;(\\\\.|$)&quot;</span>):null;by=bG.indexOf(<span class=\"stringliteral\">&quot;:&quot;</span>)&lt;0?<span class=\"stringliteral\">&quot;on&quot;</span>+bG:<span class=\"stringliteral\">&quot;&quot;</span>;<span class=\"keywordflow\">if</span>(!bA){e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.cache;<span class=\"keywordflow\">for</span>(bC in e){<span class=\"keywordflow\">if</span>(e[bC].events&amp;&amp;e[bC].events[bG]){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.trigger(bv,bD,e[bC].handle.elem,<span class=\"keyword\">true</span>)}}<span class=\"keywordflow\">return</span>}bv.result=<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>;<span class=\"keywordflow\">if</span>(!bv.target){bv.target=bA}bD=bD!=null?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.makeArray(bD):[];bD.unshift(bv);bF=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.special[bG]||{};<span class=\"keywordflow\">if</span>(bF.trigger&amp;&amp;bF.trigger.apply(bA,bD)===<span class=\"keyword\">false</span>){<span class=\"keywordflow\">return</span>}bB=[[bA,bF.bindType||bG]];<span class=\"keywordflow\">if</span>(!bJ&amp;&amp;!bF.noBubble&amp;&amp;!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;<span class=\"keywordflow\">for</span>(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}<span class=\"keywordflow\">if</span>(bz&amp;&amp;bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>,bI])}}<span class=\"keywordflow\">for</span>(bC=0;bC&lt;bB.length&amp;&amp;!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(bH,<span class=\"stringliteral\">&quot;events&quot;</span>)||{})[bv.type]&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(bH,<span class=\"stringliteral\">&quot;handle&quot;</span>);<span class=\"keywordflow\">if</span>(bE){bE.apply(bH,bD)}bE=by&amp;&amp;bH[by];<span class=\"keywordflow\">if</span>(bE&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.acceptData(bH)&amp;&amp;bE.apply(bH,bD)===<span class=\"keyword\">false</span>){bv.preventDefault()}}bv.type=bG;<span class=\"keywordflow\">if</span>(!bJ&amp;&amp;!bv.isDefaultPrevented()){<span class=\"keywordflow\">if</span>((!bF._default||bF._default.apply(bA.ownerDocument,bD)===<span class=\"keyword\">false</span>)&amp;&amp;!(bG===<span class=\"stringliteral\">&quot;click&quot;</span>&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(bA,<span class=\"stringliteral\">&quot;a&quot;</span>))&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.acceptData(bA)){<span class=\"keywordflow\">if</span>(by&amp;&amp;bA[bG]&amp;&amp;((bG!==<span class=\"stringliteral\">&quot;focus&quot;</span>&amp;&amp;bG!==<span class=\"stringliteral\">&quot;blur&quot;</span>)||bv.target.offsetWidth!==0)&amp;&amp;!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isWindow(bA)){bz=bA[by];<span class=\"keywordflow\">if</span>(bz){bA[by]=null}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.triggered=bG;bA[bG]();<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.triggered=<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>;<span class=\"keywordflow\">if</span>(bz){bA[by]=bz}}}}<span class=\"keywordflow\">return</span> bv.result},dispatch:<span class=\"keyword\">function</span>(e){e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.fix(e||<a class=\"code\" href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a>.event);var bz=((<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;events&quot;</span>)||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&amp;&amp;!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=<span class=\"keyword\">this</span>;<span class=\"keywordflow\">if</span>(bA&amp;&amp;!e.target.disabled&amp;&amp;!(e.button&amp;&amp;e.type===<span class=\"stringliteral\">&quot;click&quot;</span>)){bx=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>);bx.context=this.ownerDocument||<span class=\"keyword\">this</span>;<span class=\"keywordflow\">for</span>(bK=e.target;bK!=<span class=\"keyword\">this</span>;bK=bK.parentNode||<span class=\"keyword\">this</span>){bE={};bD=[];bx[0]=bK;<span class=\"keywordflow\">for</span>(bC=0;bC&lt;bA;bC++){bI=bz[bC];bw=bI.selector;<span class=\"keywordflow\">if</span>(bE[bw]===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}<a class=\"code\" href=\"jquery_8js.html#a9db6d45a025ad692282fe23e69eeba43\">if</a>(bE[bw]){bD.push(bI)}}<span class=\"keywordflow\">if</span>(bD.length){bH.push({elem:bK,matches:bD})}}}<span class=\"keywordflow\">if</span>(bz.length&gt;bA){bH.push({elem:<span class=\"keyword\">this</span>,matches:bz.slice(bA)})}<span class=\"keywordflow\">for</span>(bC=0;bC&lt;bH.length&amp;&amp;!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;<span class=\"keywordflow\">for</span>(bB=0;bB&lt;bv.matches.length&amp;&amp;!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];<span class=\"keywordflow\">if</span>(by||(!e.namespace&amp;&amp;!bI.namespace)||e.namespace_re&amp;&amp;e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);<span class=\"keywordflow\">if</span>(bF!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){e.result=bF;<span class=\"keywordflow\">if</span>(bF===<span class=\"keyword\">false</span>){e.preventDefault();e.stopPropagation()}}}}}<span class=\"keywordflow\">return</span> e.result},props:<span class=\"stringliteral\">&quot;attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which&quot;</span>.split(<span class=\"stringliteral\">&quot; &quot;</span>),fixHooks:{},keyHooks:{props:<span class=\"stringliteral\">&quot;char charCode key keyCode&quot;</span>.split(<span class=\"stringliteral\">&quot; &quot;</span>),filter:<span class=\"keyword\">function</span>(bv,e){<span class=\"keywordflow\">if</span>(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}<span class=\"keywordflow\">return</span> bv}},mouseHooks:{props:<span class=\"stringliteral\">&quot;button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement&quot;</span>.split(<span class=\"stringliteral\">&quot; &quot;</span>),filter:<span class=\"keyword\">function</span>(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;<span class=\"keywordflow\">if</span>(bx.pageX==null&amp;&amp;bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&amp;&amp;bz.scrollLeft||e&amp;&amp;e.scrollLeft||0)-(bz&amp;&amp;bz.clientLeft||e&amp;&amp;e.clientLeft||0);bx.pageY=bw.clientY+(bz&amp;&amp;bz.scrollTop||e&amp;&amp;e.scrollTop||0)-(bz&amp;&amp;bz.clientTop||e&amp;&amp;e.clientTop||0)}<span class=\"keywordflow\">if</span>(!bx.relatedTarget&amp;&amp;bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}<span class=\"keywordflow\">if</span>(!bx.which&amp;&amp;bv!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){bx.which=(bv&amp;1?1:(bv&amp;2?3:(bv&amp;4?2:0)))}<span class=\"keywordflow\">return</span> bx}},fix:<span class=\"keyword\">function</span>(bw){<span class=\"keywordflow\">if</span>(bw[<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expando]){<span class=\"keywordflow\">return</span> bw}var bv,bz,e=bw,bx=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Event(e);<span class=\"keywordflow\">for</span>(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}<span class=\"keywordflow\">if</span>(!bw.target){bw.target=e.srcElement||av}<span class=\"keywordflow\">if</span>(bw.target.nodeType===3){bw.target=bw.target.parentNode}<span class=\"keywordflow\">if</span>(bw.metaKey===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){bw.metaKey=bw.ctrlKey}<span class=\"keywordflow\">return</span> bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.bindReady},load:{noBubble:<span class=\"keyword\">true</span>},focus:{delegateType:<span class=\"stringliteral\">&quot;focusin&quot;</span>},blur:{delegateType:<span class=\"stringliteral\">&quot;focusout&quot;</span>},beforeunload:{setup:<span class=\"keyword\">function</span>(bw,bv,e){<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isWindow(<span class=\"keyword\">this</span>)){this.onbeforeunload=e}},teardown:<span class=\"keyword\">function</span>(bv,e){<span class=\"keywordflow\">if</span>(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:<span class=\"keyword\">function</span>(bw,by,bx,bv){var bz=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend(<span class=\"keyword\">new</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Event(),bx,{type:bw,isSimulated:<span class=\"keyword\">true</span>,originalEvent:{}});<span class=\"keywordflow\">if</span>(bv){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.trigger(bz,null,by)}<span class=\"keywordflow\">else</span>{<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.dispatch.call(by,bz)}<span class=\"keywordflow\">if</span>(bz.isDefaultPrevented()){bx.preventDefault()}}};<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.handle=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.dispatch;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.removeEvent=av.removeEventListener?<span class=\"keyword\">function</span>(bv,e,bw){<span class=\"keywordflow\">if</span>(bv.removeEventListener){bv.removeEventListener(e,bw,<span class=\"keyword\">false</span>)}}:<span class=\"keyword\">function</span>(bv,e,bw){<span class=\"keywordflow\">if</span>(bv.detachEvent){bv.detachEvent(<span class=\"stringliteral\">&quot;on&quot;</span>+e,bw)}};<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Event=<span class=\"keyword\">function</span>(bv,e){<span class=\"keywordflow\">if</span>(!(<span class=\"keyword\">this</span> instanceof <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Event)){<span class=\"keywordflow\">return</span> <span class=\"keyword\">new</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Event(bv,e)}<span class=\"keywordflow\">if</span>(bv&amp;&amp;bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===<span class=\"keyword\">false</span>||bv.getPreventDefault&amp;&amp;bv.getPreventDefault())?i:bk}<span class=\"keywordflow\">else</span>{this.type=bv}<span class=\"keywordflow\">if</span>(e){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend(<span class=\"keyword\">this</span>,e)}this.timeStamp=bv&amp;&amp;bv.timeStamp||<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.now();<span class=\"keyword\">this</span>[<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expando]=<span class=\"keyword\">true</span>};<span class=\"keyword\">function</span> bk(){<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>}<span class=\"keyword\">function</span> i(){<span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.Event.prototype={preventDefault:<span class=\"keyword\">function</span>(){this.isDefaultPrevented=i;var bv=this.originalEvent;<span class=\"keywordflow\">if</span>(!bv){<span class=\"keywordflow\">return</span>}<span class=\"keywordflow\">if</span>(bv.preventDefault){bv.preventDefault()}<span class=\"keywordflow\">else</span>{bv.returnValue=<span class=\"keyword\">false</span>}},stopPropagation:<span class=\"keyword\">function</span>(){this.isPropagationStopped=i;var bv=this.originalEvent;<span class=\"keywordflow\">if</span>(!bv){<span class=\"keywordflow\">return</span>}<span class=\"keywordflow\">if</span>(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=<span class=\"keyword\">true</span>},stopImmediatePropagation:<span class=\"keyword\">function</span>(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.each({mouseenter:<span class=\"stringliteral\">&quot;mouseover&quot;</span>,mouseleave:<span class=\"stringliteral\">&quot;mouseout&quot;</span>},<span class=\"keyword\">function</span>(bv,e){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.special[bv]={delegateType:e,bindType:e,handle:<span class=\"keyword\">function</span>(bz){var bB=<span class=\"keyword\">this</span>,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;<span class=\"keywordflow\">if</span>(!bA||(bA!==bB&amp;&amp;!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(<span class=\"keyword\">this</span>,arguments);bz.type=e}<span class=\"keywordflow\">return</span> bx}}});<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.submitBubbles){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.special.submit={setup:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;form&quot;</span>)){<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.add(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;click._submit keypress._submit&quot;</span>,<span class=\"keyword\">function</span>(bx){var bw=bx.target,bv=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(bw,<span class=\"stringliteral\">&quot;input&quot;</span>)||<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(bw,<span class=\"stringliteral\">&quot;button&quot;</span>)?bw.form:<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>;<span class=\"keywordflow\">if</span>(bv&amp;&amp;!bv._submit_attached){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.add(bv,<span class=\"stringliteral\">&quot;submit._submit&quot;</span>,<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">if</span>(this.parentNode&amp;&amp;!e.isTrigger){b.event.simulate(<span class=\"stringliteral\">&quot;submit&quot;</span>,this.parentNode,e,true)}});bv._submit_attached=<span class=\"keyword\">true</span>}})},teardown:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;form&quot;</span>)){<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.remove(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;._submit&quot;</span>)}}}<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.changeBubbles){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.special.change={setup:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(bd.test(<span class=\"keyword\">this</span>.nodeName)){<span class=\"keywordflow\">if</span>(this.type===<span class=\"stringliteral\">&quot;checkbox&quot;</span>||this.type===<span class=\"stringliteral\">&quot;radio&quot;</span>){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.add(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;propertychange._change&quot;</span>,<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">if</span>(e.originalEvent.propertyName===<span class=\"stringliteral\">&quot;checked&quot;</span>){this._just_changed=true}});<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.add(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;click._change&quot;</span>,<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">if</span>(this._just_changed&amp;&amp;!e.isTrigger){this._just_changed=false;b.event.simulate(<span class=\"stringliteral\">&quot;change&quot;</span>,this,e,true)}})}<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.add(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;beforeactivate._change&quot;</span>,<span class=\"keyword\">function</span>(bw){var bv=bw.target;if(bd.test(bv.nodeName)&amp;&amp;!bv._change_attached){b.event.add(bv,<span class=\"stringliteral\">&quot;change._change&quot;</span>,function(e){if(this.parentNode&amp;&amp;!e.isSimulated&amp;&amp;!e.isTrigger){b.event.simulate(<span class=\"stringliteral\">&quot;change&quot;</span>,this.parentNode,e,true)}});bv._change_attached=true}})},handle:<span class=\"keyword\">function</span>(bv){var e=bv.target;<span class=\"keywordflow\">if</span>(<span class=\"keyword\">this</span>!==e||bv.isSimulated||bv.isTrigger||(e.type!==<span class=\"stringliteral\">&quot;radio&quot;</span>&amp;&amp;e.type!==<span class=\"stringliteral\">&quot;checkbox&quot;</span>)){<span class=\"keywordflow\">return</span> bv.handleObj.handler.apply(<span class=\"keyword\">this</span>,arguments)}},teardown:<span class=\"keyword\">function</span>(){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.remove(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;._change&quot;</span>);<span class=\"keywordflow\">return</span> bd.test(this.nodeName)}}}<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.focusinBubbles){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.each({focus:<span class=\"stringliteral\">&quot;focusin&quot;</span>,blur:<span class=\"stringliteral\">&quot;focusout&quot;</span>},<span class=\"keyword\">function</span>(bx,e){var bv=0,bw=<span class=\"keyword\">function</span>(by){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.simulate(e,by.target,<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.fix(by),<span class=\"keyword\">true</span>)};<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.special[e]={setup:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(bv++===0){av.addEventListener(bx,bw,<span class=\"keyword\">true</span>)}},teardown:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(--bv===0){av.removeEventListener(bx,bw,<span class=\"keyword\">true</span>)}}}})}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw===<span class=\"stringliteral\">&quot;object&quot;</span>){if(typeof e!==<span class=\"stringliteral\">&quot;string&quot;</span>){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&amp;&amp;by==null){by=e;bz=e=L}else{if(by==null){if(typeof e===<span class=\"stringliteral\">&quot;string&quot;</span>){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:<span class=\"keyword\">function</span>(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:<span class=\"keyword\">function</span>(bw,e,by){if(bw&amp;&amp;bw.preventDefault&amp;&amp;bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+<span class=\"stringliteral\">&quot;.&quot;</span>+bv.namespace:bv.type,bv.selector,bv.handler);return this}<span class=\"keywordflow\">if</span>(typeof bw===<span class=\"stringliteral\">&quot;object&quot;</span>){for(var bx in bw){this.off(bx,e,bw[bx])}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>}<span class=\"keywordflow\">if</span>(e===<span class=\"keyword\">false</span>||typeof e===<span class=\"stringliteral\">&quot;function&quot;</span>){by=e;e=<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>}<span class=\"keywordflow\">if</span>(by===<span class=\"keyword\">false</span>){by=bk}<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.remove(<span class=\"keyword\">this</span>,bw,by,e)})},bind:<span class=\"keyword\">function</span>(e,bw,bv){<span class=\"keywordflow\">return</span> this.on(e,null,bw,bv)},unbind:<span class=\"keyword\">function</span>(e,bv){<span class=\"keywordflow\">return</span> this.off(e,null,bv)},live:<span class=\"keyword\">function</span>(e,bw,bv){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(this.context).on(e,this.selector,bw,bv);<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},die:<span class=\"keyword\">function</span>(e,bv){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(this.context).off(e,this.selector||<span class=\"stringliteral\">&quot;**&quot;</span>,bv);<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},delegate:<span class=\"keyword\">function</span>(e,bv,bx,bw){<span class=\"keywordflow\">return</span> this.on(bv,e,bx,bw)},undelegate:<span class=\"keyword\">function</span>(e,bv,bw){<span class=\"keywordflow\">return</span> arguments.length==1?this.off(e,<span class=\"stringliteral\">&quot;**&quot;</span>):this.off(bv,e,bw)},trigger:function(e,bv){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.trigger(e,bv,<span class=\"keyword\">this</span>)})},triggerHandler:<span class=\"keyword\">function</span>(e,bv){<span class=\"keywordflow\">if</span>(<span class=\"keyword\">this</span>[0]){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.trigger(e,bv,<span class=\"keyword\">this</span>[0],<span class=\"keyword\">true</span>)}},toggle:<span class=\"keyword\">function</span>(bx){var bv=arguments,e=bx.guid||<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.guid++,bw=0,by=<span class=\"keyword\">function</span>(bz){var bA=(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;lastToggle&quot;</span>+bx.guid)||0)%bw;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;lastToggle&quot;</span>+bx.guid,bA+1);bz.preventDefault();<span class=\"keywordflow\">return</span> bv[bA].apply(<span class=\"keyword\">this</span>,arguments)||<span class=\"keyword\">false</span>};by.guid=e;<span class=\"keywordflow\">while</span>(bw&lt;bv.length){bv[bw++].guid=e}<span class=\"keywordflow\">return</span> this.click(by)},hover:<span class=\"keyword\">function</span>(e,bv){<span class=\"keywordflow\">return</span> this.mouseenter(e).mouseleave(bv||e)}});<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.each((<span class=\"stringliteral\">&quot;blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu&quot;</span>).split(<span class=\"stringliteral\">&quot; &quot;</span>),<span class=\"keyword\">function</span>(bv,e){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fn[e]=<span class=\"keyword\">function</span>(bx,bw){<span class=\"keywordflow\">if</span>(bw==null){bw=bx;bx=null}<span class=\"keywordflow\">return</span> arguments.length&gt;0?this.on(e,null,bx,bw):this.trigger(e)};<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrFn){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attrFn[e]=<span class=\"keyword\">true</span>}<span class=\"keywordflow\">if</span>(aO.test(e)){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.fixHooks[e]=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.keyHooks}<span class=\"keywordflow\">if</span>(bf.test(e)){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.fixHooks[e]=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.mouseHooks}});</div>\n<div class=\"line\"></div>\n<div class=\"line\">(<span class=\"keyword\">function</span>(){var bH=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|[<span class=\"stringliteral\">&#39;&quot;][^&#39;</span><span class=\"stringliteral\">&quot;]*[&#39;&quot;</span>]|[^\\[\\]<span class=\"stringliteral\">&#39;&quot;]+)+\\]|\\\\.|[^ &gt;+~,(\\[\\\\]+)+|[&gt;+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,bC=&quot;sizcache&quot;+(Math.random()+&quot;&quot;).replace(&quot;.&quot;,&quot;&quot;),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\\\/g,bO=/\\r\\n/g,bQ=/\\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&amp;&amp;e.nodeType!==9){return[]}if(!bV||typeof bV!==&quot;string&quot;){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec(&quot;&quot;);bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length&gt;1&amp;&amp;bD.exec(bV)){if(bW.length===2&amp;&amp;bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&amp;&amp;bW.length&gt;1&amp;&amp;e.nodeType===9&amp;&amp;!bT&amp;&amp;bE.match.ID.test(bW[0])&amp;&amp;!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&amp;&amp;(bW[0]===&quot;~&quot;||bW[0]===&quot;+&quot;)&amp;&amp;e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length&gt;0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=&quot;&quot;}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)===&quot;[object Array]&quot;){if(!bU){bY.push.apply(bY,b6)}else{if(e&amp;&amp;e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&amp;&amp;(b6[bX]===true||b6[bX].nodeType===1&amp;&amp;by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&amp;&amp;b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e&lt;bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length&gt;0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS&lt;bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!==&quot;\\\\&quot;){bT[1]=(bT[1]||&quot;&quot;).replace(bK,&quot;&quot;);bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],&quot;&quot;);break}}}}if(!bW){bW=typeof e.getElementsByTagName!==&quot;undefined&quot;?e.getElementsByTagName(&quot;*&quot;):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&amp;&amp;b0[0]&amp;&amp;by.isXML(b0[0]);while(b1&amp;&amp;b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&amp;&amp;bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)===&quot;\\\\&quot;){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&amp;&amp;b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],&quot;&quot;);if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error(&quot;Syntax error, unrecognized expression: &quot;+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR=&quot;&quot;;if(e){if(e===1||e===9){if(typeof bU.textContent===&quot;string&quot;){return bU.textContent}else{if(typeof bU.innerText===&quot;string&quot;){return bU.innerText.replace(bO,&quot;&quot;)}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:[&quot;ID&quot;,&quot;NAME&quot;,&quot;TAG&quot;],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,NAME:/\\[name=[&#39;</span><span class=\"stringliteral\">&quot;]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)[&#39;&quot;</span>]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:([<span class=\"stringliteral\">&#39;&quot;])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\(([&#39;</span><span class=\"stringliteral\">&quot;]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{&quot;</span><span class=\"keyword\">class</span><span class=\"stringliteral\">&quot;:&quot;</span>className<span class=\"stringliteral\">&quot;,&quot;</span><span class=\"keywordflow\">for</span><span class=\"stringliteral\">&quot;:&quot;</span>htmlFor<span class=\"stringliteral\">&quot;},attrHandle:{href:function(e){return e.getAttribute(&quot;</span>href<span class=\"stringliteral\">&quot;)},type:function(e){return e.getAttribute(&quot;</span>type<span class=\"stringliteral\">&quot;)}},relative:{&quot;</span>+<span class=\"stringliteral\">&quot;:function(bW,bR){var bT=typeof bR===&quot;</span><span class=\"keywordtype\">string</span><span class=\"stringliteral\">&quot;,bV=bT&amp;&amp;!bQ.test(bR),bX=bT&amp;&amp;!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS&lt;e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&amp;&amp;bU.nodeType!==1){}bW[bS]=bX||bU&amp;&amp;bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},&quot;</span>&gt;<span class=\"stringliteral\">&quot;:function(bW,bR){var bV,bU=typeof bR===&quot;</span><span class=\"keywordtype\">string</span><span class=\"stringliteral\">&quot;,bS=0,e=bW.length;if(bU&amp;&amp;!bQ.test(bR)){bR=bR.toLowerCase();for(;bS&lt;e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS&lt;e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},&quot;</span><span class=\"stringliteral\">&quot;:function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===&quot;</span><span class=\"keywordtype\">string</span><span class=\"stringliteral\">&quot;&amp;&amp;!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(&quot;</span>parentNode<span class=\"stringliteral\">&quot;,bR,bS,bT,bU,bV)},&quot;</span>~<span class=\"stringliteral\">&quot;:function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===&quot;</span><span class=\"keywordtype\">string</span><span class=\"stringliteral\">&quot;&amp;&amp;!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(&quot;</span>previousSibling<span class=\"stringliteral\">&quot;,bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!==&quot;</span>undefined<span class=\"stringliteral\">&quot;&amp;&amp;!bT){var e=bS.getElementById(bR[1]);return e&amp;&amp;e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!==&quot;</span>undefined<span class=\"stringliteral\">&quot;){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT&lt;e;bT++){if(bU[bT].getAttribute(&quot;</span>name<span class=\"stringliteral\">&quot;)===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!==&quot;</span>undefined<span class=\"stringliteral\">&quot;){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=&quot;</span> <span class=\"stringliteral\">&quot;+bT[1].replace(bK,&quot;</span><span class=\"stringliteral\">&quot;)+&quot;</span> <span class=\"stringliteral\">&quot;;if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&amp;&amp;(&quot;</span> <span class=\"stringliteral\">&quot;+bV.className+&quot;</span> <span class=\"stringliteral\">&quot;).replace(/[\\t\\n\\r]/g,&quot;</span> <span class=\"stringliteral\">&quot;).indexOf(bT)&gt;=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,&quot;</span><span class=\"stringliteral\">&quot;)},TAG:function(bR,e){return bR[1].replace(bK,&quot;</span><span class=\"stringliteral\">&quot;).toLowerCase()},CHILD:function(e){if(e[1]===&quot;</span>nth<span class=\"stringliteral\">&quot;){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\\+|\\s*/g,&quot;</span><span class=\"stringliteral\">&quot;);var bR=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(e[2]===&quot;</span>even<span class=\"stringliteral\">&quot;&amp;&amp;&quot;</span>2n<span class=\"stringliteral\">&quot;||e[2]===&quot;</span>odd<span class=\"stringliteral\">&quot;&amp;&amp;&quot;</span>2n+1<span class=\"stringliteral\">&quot;||!/\\D/.test(e[2])&amp;&amp;&quot;</span>0n+<span class=\"stringliteral\">&quot;+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,&quot;</span><span class=\"stringliteral\">&quot;);if(!bW&amp;&amp;bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||&quot;</span><span class=\"stringliteral\">&quot;).replace(bK,&quot;</span><span class=\"stringliteral\">&quot;);if(bU[2]===&quot;</span>~=<span class=\"stringliteral\">&quot;){bU[4]=&quot;</span> <span class=\"stringliteral\">&quot;+bU[4]+&quot;</span> <span class=\"stringliteral\">&quot;}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]===&quot;</span>not<span class=\"stringliteral\">&quot;){if((bH.exec(bU[3])||&quot;</span><span class=\"stringliteral\">&quot;).length&gt;1||/^\\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&amp;&amp;e.type!==&quot;</span>hidden<span class=\"stringliteral\">&quot;},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute(&quot;</span>type<span class=\"stringliteral\">&quot;),bR=bS.type;return bS.nodeName.toLowerCase()===&quot;</span>input<span class=\"stringliteral\">&quot;&amp;&amp;&quot;</span>text<span class=\"stringliteral\">&quot;===bR&amp;&amp;(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()===&quot;</span>input<span class=\"stringliteral\">&quot;&amp;&amp;&quot;</span>radio<span class=\"stringliteral\">&quot;===e.type},checkbox:function(e){return e.nodeName.toLowerCase()===&quot;</span>input<span class=\"stringliteral\">&quot;&amp;&amp;&quot;</span>checkbox<span class=\"stringliteral\">&quot;===e.type},file:function(e){return e.nodeName.toLowerCase()===&quot;</span>input<span class=\"stringliteral\">&quot;&amp;&amp;&quot;</span>file<span class=\"stringliteral\">&quot;===e.type},password:function(e){return e.nodeName.toLowerCase()===&quot;</span>input<span class=\"stringliteral\">&quot;&amp;&amp;&quot;</span>password<span class=\"stringliteral\">&quot;===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e===&quot;</span>input<span class=\"stringliteral\">&quot;||e===&quot;</span>button<span class=\"stringliteral\">&quot;)&amp;&amp;&quot;</span>submit<span class=\"stringliteral\">&quot;===bR.type},image:function(e){return e.nodeName.toLowerCase()===&quot;</span>input<span class=\"stringliteral\">&quot;&amp;&amp;&quot;</span>image<span class=\"stringliteral\">&quot;===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e===&quot;</span>input<span class=\"stringliteral\">&quot;||e===&quot;</span>button<span class=\"stringliteral\">&quot;)&amp;&amp;&quot;</span>reset<span class=\"stringliteral\">&quot;===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e===&quot;</span>input<span class=\"stringliteral\">&quot;&amp;&amp;&quot;</span>button<span class=\"stringliteral\">&quot;===bR.type||e===&quot;</span>button<span class=\"stringliteral\">&quot;},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR&lt;e[3]-0},gt:function(bS,bR,e){return bR&gt;e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e===&quot;</span>contains<span class=\"stringliteral\">&quot;){return(bS.textContent||bS.innerText||bw([bS])||&quot;</span><span class=\"stringliteral\">&quot;).indexOf(bX[3])&gt;=0}else{if(e===&quot;</span>not<span class=\"stringliteral\">&quot;){var bT=bX[3];for(var bV=0,bU=bT.length;bV&lt;bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case&quot;</span>only<span class=\"stringliteral\">&quot;:case&quot;</span>first<span class=\"stringliteral\">&quot;:while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX===&quot;</span>first<span class=\"stringliteral\">&quot;){return true}bR=bS;case&quot;</span>last<span class=\"stringliteral\">&quot;:while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case&quot;</span>nth<span class=\"stringliteral\">&quot;:bT=bU[2];b0=bU[3];if(bT===1&amp;&amp;b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&amp;&amp;(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&amp;&amp;bY/bT&gt;=0)}}},ID:function(bR,e){return bR.nodeType===1&amp;&amp;bR.getAttribute(&quot;</span><span class=\"keywordtype\">id</span><span class=\"stringliteral\">&quot;)===e},TAG:function(bR,e){return(e===&quot;</span>*<span class=\"stringliteral\">&quot;&amp;&amp;bR.nodeType===1)||!!bR.nodeName&amp;&amp;bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(&quot;</span> <span class=\"stringliteral\">&quot;+(bR.className||bR.getAttribute(&quot;</span><span class=\"keyword\">class</span><span class=\"stringliteral\">&quot;))+&quot;</span> <span class=\"stringliteral\">&quot;).indexOf(e)&gt;-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+&quot;</span><span class=\"stringliteral\">&quot;,bU=bT[2],bR=bT[4];return e==null?bU===&quot;</span>!=<span class=\"stringliteral\">&quot;:!bU&amp;&amp;by.attr?e!=null:bU===&quot;</span>=<span class=\"stringliteral\">&quot;?bW===bR:bU===&quot;</span>*=<span class=\"stringliteral\">&quot;?bW.indexOf(bR)&gt;=0:bU===&quot;</span>~=<span class=\"stringliteral\">&quot;?(&quot;</span> <span class=\"stringliteral\">&quot;+bW+&quot;</span> <span class=\"stringliteral\">&quot;).indexOf(bR)&gt;=0:!bR?bW&amp;&amp;e!==false:bU===&quot;</span>!=<span class=\"stringliteral\">&quot;?bW!==bR:bU===&quot;</span>^=<span class=\"stringliteral\">&quot;?bW.indexOf(bR)===0:bU===&quot;</span>$=<span class=\"stringliteral\">&quot;?bW.substr(bW.length-bR.length)===bR:bU===&quot;</span>|=<span class=\"stringliteral\">&quot;?bW===bR||bW.substr(0,bR.length+1)===bR+&quot;</span>-<span class=\"stringliteral\">&quot;:false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return&quot;</span>\\\\<span class=\"stringliteral\">&quot;+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\\[]*\\])(?![^\\(]*\\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+bE.match[bz].source.replace(/\\\\(\\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)===&quot;</span>[<span class=\"keywordtype\">object</span> Array]<span class=\"stringliteral\">&quot;){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length===&quot;</span>number<span class=\"stringliteral\">&quot;){for(var e=bU.length;bS&lt;e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&amp;4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&amp;&amp;bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT&lt;bV&amp;&amp;bT&lt;bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement(&quot;</span>div<span class=\"stringliteral\">&quot;),bS=&quot;</span>script<span class=\"stringliteral\">&quot;+(new Date()).getTime(),e=av.documentElement;bR.innerHTML=&quot;</span>&lt;a name=<span class=\"stringliteral\">&#39;&quot;+bS+&quot;&#39;</span>/&gt;<span class=\"stringliteral\">&quot;;e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!==&quot;</span>undefined<span class=\"stringliteral\">&quot;&amp;&amp;!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!==&quot;</span>undefined<span class=\"stringliteral\">&quot;&amp;&amp;bT.getAttributeNode(&quot;</span><span class=\"keywordtype\">id</span><span class=\"stringliteral\">&quot;).nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!==&quot;</span>undefined<span class=\"stringliteral\">&quot;&amp;&amp;bV.getAttributeNode(&quot;</span><span class=\"keywordtype\">id</span><span class=\"stringliteral\">&quot;);return bV.nodeType===1&amp;&amp;bU&amp;&amp;bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement(&quot;</span>div<span class=\"stringliteral\">&quot;);e.appendChild(av.createComment(&quot;</span><span class=\"stringliteral\">&quot;));if(e.getElementsByTagName(&quot;</span>*<span class=\"stringliteral\">&quot;).length&gt;0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]===&quot;</span>*<span class=\"stringliteral\">&quot;){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML=&quot;</span>&lt;a href=<span class=\"charliteral\">&#39;#&#39;</span>&gt;&lt;/a&gt;<span class=\"stringliteral\">&quot;;if(e.firstChild&amp;&amp;typeof e.firstChild.getAttribute!==&quot;</span>undefined<span class=\"stringliteral\">&quot;&amp;&amp;e.firstChild.getAttribute(&quot;</span>href<span class=\"stringliteral\">&quot;)!==&quot;</span>#<span class=\"stringliteral\">&quot;){bE.attrHandle.href=function(bR){return bR.getAttribute(&quot;</span>href<span class=\"stringliteral\">&quot;,2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement(&quot;</span>div<span class=\"stringliteral\">&quot;),bS=&quot;</span>__sizzle__<span class=\"stringliteral\">&quot;;bT.innerHTML=&quot;</span>&lt;<a class=\"code\" href=\"jquery_8js.html#a2335e57f79b6acfb6de59c235dc8a83e\">p</a> <span class=\"keyword\">class</span>=<span class=\"stringliteral\">&#39;TEST&#39;</span>&gt;&lt;/p&gt;<span class=\"stringliteral\">&quot;;if(bT.querySelectorAll&amp;&amp;bT.querySelectorAll(&quot;</span>.TEST<span class=\"stringliteral\">&quot;).length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&amp;&amp;!by.isXML(bV)){var b2=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b4);if(b2&amp;&amp;(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&amp;&amp;bE.find.CLASS&amp;&amp;bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4===&quot;</span>body<span class=\"stringliteral\">&quot;&amp;&amp;bV.body){return bF([bV.body],bZ)}else{if(b2&amp;&amp;b2[3]){var bY=bV.getElementById(b2[3]);if(bY&amp;&amp;bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&amp;&amp;bV.nodeName.toLowerCase()!==&quot;</span><span class=\"keywordtype\">object</span><span class=\"stringliteral\">&quot;){var bW=bV,bX=bV.getAttribute(&quot;</span><span class=\"keywordtype\">id</span><span class=\"stringliteral\">&quot;),bU=bX||bS,b6=bV.parentNode,b5=/^\\s*[+~]/.test(b4);if(!bX){bV.setAttribute(&quot;</span><span class=\"keywordtype\">id</span><span class=\"stringliteral\">&quot;,bU)}else{bU=bU.replace(/&#39;/g,&quot;</span>\\\\$&amp;<span class=\"stringliteral\">&quot;)}if(b5&amp;&amp;b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll(&quot;</span>[<span class=\"keywordtype\">id</span>=<span class=\"stringliteral\">&#39;&quot;+bU+&quot;&#39;</span>] <span class=\"stringliteral\">&quot;+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute(&quot;</span><span class=\"keywordtype\">id</span><span class=\"stringliteral\">&quot;)}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement(&quot;</span>div<span class=\"stringliteral\">&quot;),&quot;</span>div<span class=\"stringliteral\">&quot;),bR=false;try{bS.call(av.documentElement,&quot;</span>[test!=<span class=\"stringliteral\">&#39;&#39;</span>]:sizzle<span class=\"stringliteral\">&quot;)}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\\=\\s*([^&#39;&quot;</span>\\]]*)\\s*\\]/g,<span class=\"stringliteral\">&quot;=&#39;$1&#39;]&quot;</span>);<span class=\"keywordflow\">if</span>(!by.isXML(bW)){<span class=\"keywordflow\">try</span>{<span class=\"keywordflow\">if</span>(bR||!bE.match.PSEUDO.test(bY)&amp;&amp;!/!=/.test(bY)){var bV=bS.call(bW,bY);<span class=\"keywordflow\">if</span>(bV||!bU||bW.document&amp;&amp;bW.document.nodeType!==11){<span class=\"keywordflow\">return</span> bV}}}<span class=\"keywordflow\">catch</span>(bX){}}<span class=\"keywordflow\">return</span> by(bY,null,null,[bW]).length&gt;0}}})();(<span class=\"keyword\">function</span>(){var e=av.createElement(<span class=\"stringliteral\">&quot;div&quot;</span>);e.innerHTML=<span class=\"stringliteral\">&quot;&lt;div class=&#39;test e&#39;&gt;&lt;/div&gt;&lt;div class=&#39;test&#39;&gt;&lt;/div&gt;&quot;</span>;<span class=\"keywordflow\">if</span>(!e.getElementsByClassName||e.getElementsByClassName(<span class=\"stringliteral\">&quot;e&quot;</span>).length===0){<span class=\"keywordflow\">return</span>}e.lastChild.className=<span class=\"stringliteral\">&quot;e&quot;</span>;<span class=\"keywordflow\">if</span>(e.getElementsByClassName(<span class=\"stringliteral\">&quot;e&quot;</span>).length===1){<span class=\"keywordflow\">return</span>}bE.order.splice(1,0,<span class=\"stringliteral\">&quot;CLASS&quot;</span>);bE.find.CLASS=<span class=\"keyword\">function</span>(bR,bS,bT){<span class=\"keywordflow\">if</span>(typeof bS.getElementsByClassName!==<span class=\"stringliteral\">&quot;undefined&quot;</span>&amp;&amp;!bT){<span class=\"keywordflow\">return</span> bS.getElementsByClassName(bR[1])}};e=null})();<span class=\"keyword\">function</span> bv(bR,bW,bV,bZ,bX,bY){<span class=\"keywordflow\">for</span>(var bT=0,bS=bZ.length;bT&lt;bS;bT++){var e=bZ[bT];<span class=\"keywordflow\">if</span>(e){var bU=<span class=\"keyword\">false</span>;e=e[bR];<span class=\"keywordflow\">while</span>(e){<span class=\"keywordflow\">if</span>(e[bC]===bV){bU=bZ[e.sizset];<span class=\"keywordflow\">break</span>}<span class=\"keywordflow\">if</span>(e.nodeType===1&amp;&amp;!bY){e[bC]=bV;e.sizset=bT}<span class=\"keywordflow\">if</span>(e.nodeName.toLowerCase()===bW){bU=e;<span class=\"keywordflow\">break</span>}e=e[bR]}bZ[bT]=bU}}}<span class=\"keyword\">function</span> bN(bR,bW,bV,bZ,bX,bY){<span class=\"keywordflow\">for</span>(var bT=0,bS=bZ.length;bT&lt;bS;bT++){var e=bZ[bT];<span class=\"keywordflow\">if</span>(e){var bU=<span class=\"keyword\">false</span>;e=e[bR];<span class=\"keywordflow\">while</span>(e){<span class=\"keywordflow\">if</span>(e[bC]===bV){bU=bZ[e.sizset];<span class=\"keywordflow\">break</span>}<span class=\"keywordflow\">if</span>(e.nodeType===1){<span class=\"keywordflow\">if</span>(!bY){e[bC]=bV;e.sizset=bT}<span class=\"keywordflow\">if</span>(typeof bW!==<span class=\"stringliteral\">&quot;string&quot;</span>){<span class=\"keywordflow\">if</span>(e===bW){bU=<span class=\"keyword\">true</span>;<span class=\"keywordflow\">break</span>}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(by.filter(bW,[e]).length&gt;0){bU=e;<span class=\"keywordflow\">break</span>}}}e=e[bR]}bZ[bT]=bU}}}<span class=\"keywordflow\">if</span>(av.documentElement.contains){by.contains=<span class=\"keyword\">function</span>(bR,e){<span class=\"keywordflow\">return</span> bR!==e&amp;&amp;(bR.contains?bR.contains(e):<span class=\"keyword\">true</span>)}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(av.documentElement.compareDocumentPosition){by.contains=<span class=\"keyword\">function</span>(bR,e){<span class=\"keywordflow\">return</span> !!(bR.compareDocumentPosition(e)&amp;16)}}<span class=\"keywordflow\">else</span>{by.contains=<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>}}}by.isXML=<span class=\"keyword\">function</span>(e){var bR=(e?e.ownerDocument||e:0).documentElement;<span class=\"keywordflow\">return</span> bR?bR.nodeName!==<span class=\"stringliteral\">&quot;HTML&quot;</span>:<span class=\"keyword\">false</span>};var bM=<span class=\"keyword\">function</span>(bS,e,bW){var bV,bX=[],bU=<span class=\"stringliteral\">&quot;&quot;</span>,bY=e.nodeType?[e]:e;<span class=\"keywordflow\">while</span>((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,<span class=\"stringliteral\">&quot;&quot;</span>)}bS=bE.relative[bS]?bS+<span class=\"stringliteral\">&quot;*&quot;</span>:bS;<span class=\"keywordflow\">for</span>(var bT=0,bR=bY.length;bT&lt;bR;bT++){by(bS,bY[bT],bX,bW)}<span class=\"keywordflow\">return</span> by.filter(bU,bX)};by.attr=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.attr;by.selectors.attrMap={};<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.find=by;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expr=by.selectors;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expr[<span class=\"stringliteral\">&quot;:&quot;</span>]=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expr.filters;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.unique=by.uniqueSort;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.text=by.getText;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isXMLDoc=by.isXML;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,H=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expr.match.POS,ay={children:<span class=\"keyword\">true</span>,contents:<span class=\"keyword\">true</span>,next:<span class=\"keyword\">true</span>,prev:<span class=\"keyword\">true</span>};<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fn.extend({find:<span class=\"keyword\">function</span>(e){var bw=<span class=\"keyword\">this</span>,by,bv;<span class=\"keywordflow\">if</span>(typeof e!==<span class=\"stringliteral\">&quot;string&quot;</span>){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(e).filter(<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">for</span>(by=0,bv=bw.length;by&lt;bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack(<span class=\"stringliteral\">&quot;&quot;</span>,<span class=\"stringliteral\">&quot;find&quot;</span>,e),bA,bB,bz;<span class=\"keywordflow\">for</span>(by=0,bv=this.length;by&lt;bv;by++){bA=bx.length;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.find(e,<span class=\"keyword\">this</span>[by],bx);<span class=\"keywordflow\">if</span>(by&gt;0){<span class=\"keywordflow\">for</span>(bB=bA;bB&lt;bx.length;bB++){<span class=\"keywordflow\">for</span>(bz=0;bz&lt;bA;bz++){<span class=\"keywordflow\">if</span>(bx[bz]===bx[bB]){bx.splice(bB--,1);<span class=\"keywordflow\">break</span>}}}}}<span class=\"keywordflow\">return</span> bx},has:<span class=\"keyword\">function</span>(bv){var e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(bv);<span class=\"keywordflow\">return</span> this.filter(<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">for</span>(var bx=0,bw=e.length;bx&lt;bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> this.pushStack(aG(<span class=\"keyword\">this</span>,e,<span class=\"keyword\">false</span>),<span class=\"stringliteral\">&quot;not&quot;</span>,e)},filter:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> this.pushStack(aG(<span class=\"keyword\">this</span>,e,<span class=\"keyword\">true</span>),<span class=\"stringliteral\">&quot;filter&quot;</span>,e)},is:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> !!e&amp;&amp;(typeof e===<span class=\"stringliteral\">&quot;string&quot;</span>?H.test(e)?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(e,this.context).index(<span class=\"keyword\">this</span>[0])&gt;=0:<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.filter(e,<span class=\"keyword\">this</span>).length&gt;0:this.filter(e).length&gt;0)},closest:<span class=\"keyword\">function</span>(by,bx){var bv=[],bw,e,bz=<span class=\"keyword\">this</span>[0];<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isArray(by)){var bB=1;<span class=\"keywordflow\">while</span>(bz&amp;&amp;bz.ownerDocument&amp;&amp;bz!==bx){<span class=\"keywordflow\">for</span>(bw=0;bw&lt;by.length;bw++){<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}<span class=\"keywordflow\">return</span> bv}var bA=H.test(by)||typeof by!==<span class=\"stringliteral\">&quot;string&quot;</span>?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(by,bx||this.context):0;<span class=\"keywordflow\">for</span>(bw=0,e=this.length;bw&lt;e;bw++){bz=<span class=\"keyword\">this</span>[bw];<span class=\"keywordflow\">while</span>(bz){<span class=\"keywordflow\">if</span>(bA?bA.index(bz)&gt;-1:<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.find.matchesSelector(bz,by)){bv.push(bz);<span class=\"keywordflow\">break</span>}<span class=\"keywordflow\">else</span>{bz=bz.parentNode;<span class=\"keywordflow\">if</span>(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){<span class=\"keywordflow\">break</span>}}}}bv=bv.length&gt;1?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.unique(bv):bv;<span class=\"keywordflow\">return</span> this.pushStack(bv,<span class=\"stringliteral\">&quot;closest&quot;</span>,by)},index:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">if</span>(!e){<span class=\"keywordflow\">return</span>(<span class=\"keyword\">this</span>[0]&amp;&amp;<span class=\"keyword\">this</span>[0].parentNode)?this.prevAll().length:-1}<span class=\"keywordflow\">if</span>(typeof e===<span class=\"stringliteral\">&quot;string&quot;</span>){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.inArray(<span class=\"keyword\">this</span>[0],<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(e))}<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.inArray(e.jquery?e[0]:e,<span class=\"keyword\">this</span>)},add:<span class=\"keyword\">function</span>(e,bv){var bx=typeof e===<span class=\"stringliteral\">&quot;string&quot;</span>?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(e,bv):<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.makeArray(e&amp;&amp;e.nodeType?[e]:e),bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.merge(this.get(),bx);<span class=\"keywordflow\">return</span> this.pushStack(C(bx[0])||C(bw[0])?bw:<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.unique(bw))},andSelf:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> this.add(this.prevObject)}});<span class=\"keyword\">function</span> C(e){<span class=\"keywordflow\">return</span> !e||!e.parentNode||e.parentNode.nodeType===11}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.each({parent:<span class=\"keyword\">function</span>(bv){var e=bv.parentNode;<span class=\"keywordflow\">return</span> e&amp;&amp;e.nodeType!==11?e:null},parents:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.dir(e,<span class=\"stringliteral\">&quot;parentNode&quot;</span>)},parentsUntil:<span class=\"keyword\">function</span>(bv,e,bw){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.dir(bv,<span class=\"stringliteral\">&quot;parentNode&quot;</span>,bw)},next:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nth(e,2,<span class=\"stringliteral\">&quot;nextSibling&quot;</span>)},prev:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nth(e,2,<span class=\"stringliteral\">&quot;previousSibling&quot;</span>)},nextAll:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.dir(e,<span class=\"stringliteral\">&quot;nextSibling&quot;</span>)},prevAll:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.dir(e,<span class=\"stringliteral\">&quot;previousSibling&quot;</span>)},nextUntil:<span class=\"keyword\">function</span>(bv,e,bw){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.dir(bv,<span class=\"stringliteral\">&quot;nextSibling&quot;</span>,bw)},prevUntil:<span class=\"keyword\">function</span>(bv,e,bw){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.dir(bv,<span class=\"stringliteral\">&quot;previousSibling&quot;</span>,bw)},siblings:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.sibling(e.parentNode.firstChild,e)},children:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.sibling(e.firstChild)},contents:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(e,<span class=\"stringliteral\">&quot;iframe&quot;</span>)?e.contentDocument||e.contentWindow.document:<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.makeArray(e.childNodes)}},<span class=\"keyword\">function</span>(e,bv){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fn[e]=<span class=\"keyword\">function</span>(by,bw){var bx=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.map(<span class=\"keyword\">this</span>,bv,by);<span class=\"keywordflow\">if</span>(!ab.test(e)){bw=by}<span class=\"keywordflow\">if</span>(bw&amp;&amp;typeof bw===<span class=\"stringliteral\">&quot;string&quot;</span>){bx=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.filter(bw,bx)}bx=this.length&gt;1&amp;&amp;!ay[e]?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.unique(bx):bx;<span class=\"keywordflow\">if</span>((this.length&gt;1||a9.test(bw))&amp;&amp;aq.test(e)){bx=bx.reverse()}<span class=\"keywordflow\">return</span> this.pushStack(bx,e,P.call(arguments).join(<span class=\"stringliteral\">&quot;,&quot;</span>))}});<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend({filter:<span class=\"keyword\">function</span>(bw,e,bv){<span class=\"keywordflow\">if</span>(bv){bw=<span class=\"stringliteral\">&quot;:not(&quot;</span>+bw+<span class=\"stringliteral\">&quot;)&quot;</span>}<span class=\"keywordflow\">return</span> e.length===1?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.find.matchesSelector(e[0],bw)?[e[0]]:[]:<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.find.matches(bw,e)},dir:<span class=\"keyword\">function</span>(bw,bv,by){var e=[],bx=bw[bv];<span class=\"keywordflow\">while</span>(bx&amp;&amp;bx.nodeType!==9&amp;&amp;(by===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>||bx.nodeType!==1||!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(bx).is(by))){<span class=\"keywordflow\">if</span>(bx.nodeType===1){e.push(bx)}bx=bx[bv]}<span class=\"keywordflow\">return</span> e},nth:<span class=\"keyword\">function</span>(by,e,bw,bx){e=e||1;var bv=0;<span class=\"keywordflow\">for</span>(;by;by=by[bw]){<span class=\"keywordflow\">if</span>(by.nodeType===1&amp;&amp;++bv===e){<span class=\"keywordflow\">break</span>}}<span class=\"keywordflow\">return</span> by},sibling:<span class=\"keyword\">function</span>(bw,bv){var e=[];<span class=\"keywordflow\">for</span>(;bw;bw=bw.nextSibling){<span class=\"keywordflow\">if</span>(bw.nodeType===1&amp;&amp;bw!==bv){e.push(bw)}}<span class=\"keywordflow\">return</span> e}});<span class=\"keyword\">function</span> aG(bx,bw,e){bw=bw||0;<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(bw)){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.grep(bx,<span class=\"keyword\">function</span>(bz,by){var bA=!!bw.call(bz,by,bz);<span class=\"keywordflow\">return</span> bA===e})}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bw.nodeType){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.grep(bx,<span class=\"keyword\">function</span>(bz,by){<span class=\"keywordflow\">return</span>(bz===bw)===e})}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(typeof bw===<span class=\"stringliteral\">&quot;string&quot;</span>){var bv=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.grep(bx,<span class=\"keyword\">function</span>(by){<span class=\"keywordflow\">return</span> by.nodeType===1});<span class=\"keywordflow\">if</span>(bp.test(bw)){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.filter(bw,bv,!e)}<span class=\"keywordflow\">else</span>{bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.filter(bw,bv)}}}}<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.grep(bx,<span class=\"keyword\">function</span>(bz,by){<span class=\"keywordflow\">return</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.inArray(bz,bw)&gt;=0)===e})}<span class=\"keyword\">function</span> a(e){var bw=aR.split(<span class=\"stringliteral\">&quot;|&quot;</span>),bv=e.createDocumentFragment();<span class=\"keywordflow\">if</span>(bv.createElement){<span class=\"keywordflow\">while</span>(bw.length){bv.createElement(bw.pop())}}<span class=\"keywordflow\">return</span> bv}var aR=<span class=\"stringliteral\">&quot;abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video&quot;</span>,ag=/ jQuery\\d+=<span class=\"stringliteral\">&quot;(?:\\d+|null)&quot;</span>/g,ar=/^\\s+/,R=/&lt;(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^&gt;]*)\\/&gt;/ig,d=/&lt;([\\w:]+)/,w=/&lt;tbody/i,W=/&lt;|&amp;#?\\w+;/,ae=/&lt;(?:script|style)/i,O=/&lt;(?:script|<span class=\"keywordtype\">object</span>|embed|option|style)/i,ah=<span class=\"keyword\">new</span> RegExp(<span class=\"stringliteral\">&quot;&lt;(?:&quot;</span>+aR+<span class=\"stringliteral\">&quot;)&quot;</span>,<span class=\"stringliteral\">&quot;i&quot;</span>),o=/checked\\s*(?:[^=]|=\\s*.checked.)/i,bm=/\\/(java|ecma)script/i,aN=/^\\s*&lt;!(?:\\[CDATA\\[|\\-\\-)/,ax={option:[1,<span class=\"stringliteral\">&quot;&lt;select multiple=&#39;multiple&#39;&gt;&quot;</span>,<span class=\"stringliteral\">&quot;&lt;/select&gt;&quot;</span>],legend:[1,<span class=\"stringliteral\">&quot;&lt;fieldset&gt;&quot;</span>,<span class=\"stringliteral\">&quot;&lt;/fieldset&gt;&quot;</span>],thead:[1,<span class=\"stringliteral\">&quot;&lt;table&gt;&quot;</span>,<span class=\"stringliteral\">&quot;&lt;/table&gt;&quot;</span>],tr:[2,<span class=\"stringliteral\">&quot;&lt;table&gt;&lt;tbody&gt;&quot;</span>,<span class=\"stringliteral\">&quot;&lt;/tbody&gt;&lt;/table&gt;&quot;</span>],td:[3,<span class=\"stringliteral\">&quot;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&quot;</span>,<span class=\"stringliteral\">&quot;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&quot;</span>],col:[2,<span class=\"stringliteral\">&quot;&lt;table&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;colgroup&gt;&quot;</span>,<span class=\"stringliteral\">&quot;&lt;/colgroup&gt;&lt;/table&gt;&quot;</span>],area:[1,<span class=\"stringliteral\">&quot;&lt;map&gt;&quot;</span>,<span class=\"stringliteral\">&quot;&lt;/map&gt;&quot;</span>],_default:[0,<span class=\"stringliteral\">&quot;&quot;</span>,<span class=\"stringliteral\">&quot;&quot;</span>]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.htmlSerialize){ax._default=[1,<span class=\"stringliteral\">&quot;div&lt;div&gt;&quot;</span>,<span class=\"stringliteral\">&quot;&lt;/div&gt;&quot;</span>]}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fn.extend({text:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(e)){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(bw){var bv=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>);bv.text(e.call(<span class=\"keyword\">this</span>,bw,bv.text()))})}<span class=\"keywordflow\">if</span>(typeof e!==<span class=\"stringliteral\">&quot;object&quot;</span>&amp;&amp;e!==<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){<span class=\"keywordflow\">return</span> this.empty().append((<span class=\"keyword\">this</span>[0]&amp;&amp;<span class=\"keyword\">this</span>[0].ownerDocument||av).createTextNode(e))}<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.text(<span class=\"keyword\">this</span>)},wrapAll:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(e)){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(bw){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>).wrapAll(e.call(<span class=\"keyword\">this</span>,bw))})}<span class=\"keywordflow\">if</span>(<span class=\"keyword\">this</span>[0]){var bv=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(e,<span class=\"keyword\">this</span>[0].ownerDocument).eq(0).clone(<span class=\"keyword\">true</span>);<span class=\"keywordflow\">if</span>(<span class=\"keyword\">this</span>[0].parentNode){bv.insertBefore(<span class=\"keyword\">this</span>[0])}bv.map(<span class=\"keyword\">function</span>(){var bw=<span class=\"keyword\">this</span>;<span class=\"keywordflow\">while</span>(bw.firstChild&amp;&amp;bw.firstChild.nodeType===1){bw=bw.firstChild}<span class=\"keywordflow\">return</span> bw}).append(<span class=\"keyword\">this</span>)}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},wrapInner:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(e)){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(bv){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>).wrapInner(e.call(<span class=\"keyword\">this</span>,bv))})}<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){var bv=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>),bw=bv.contents();<span class=\"keywordflow\">if</span>(bw.length){bw.wrapAll(e)}<span class=\"keywordflow\">else</span>{bv.append(e)}})},wrap:<span class=\"keyword\">function</span>(e){var bv=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(e);<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(bw){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>).wrapAll(bv?e.call(<span class=\"keyword\">this</span>,bw):e)})},unwrap:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> this.parent().each(<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;body&quot;</span>)){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>).replaceWith(this.childNodes)}}).end()},append:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> this.domManip(arguments,<span class=\"keyword\">true</span>,<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">if</span>(this.nodeType===1){this.appendChild(e)}})},prepend:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> this.domManip(arguments,<span class=\"keyword\">true</span>,<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">if</span>(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(<span class=\"keyword\">this</span>[0]&amp;&amp;<span class=\"keyword\">this</span>[0].parentNode){<span class=\"keywordflow\">return</span> this.domManip(arguments,<span class=\"keyword\">false</span>,<span class=\"keyword\">function</span>(bv){this.parentNode.insertBefore(bv,<span class=\"keyword\">this</span>)})}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(arguments.length){var e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.clean(arguments);e.push.apply(e,this.toArray());<span class=\"keywordflow\">return</span> this.pushStack(e,<span class=\"stringliteral\">&quot;before&quot;</span>,arguments)}}},after:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">if</span>(<span class=\"keyword\">this</span>[0]&amp;&amp;<span class=\"keyword\">this</span>[0].parentNode){<span class=\"keywordflow\">return</span> this.domManip(arguments,<span class=\"keyword\">false</span>,<span class=\"keyword\">function</span>(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(arguments.length){var e=this.pushStack(<span class=\"keyword\">this</span>,<span class=\"stringliteral\">&quot;after&quot;</span>,arguments);e.push.apply(e,<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.clean(arguments));<span class=\"keywordflow\">return</span> e}}},<span class=\"keyword\">remove</span>:<span class=\"keyword\">function</span>(e,bx){<span class=\"keywordflow\">for</span>(var bv=0,bw;(bw=<span class=\"keyword\">this</span>[bv])!=null;bv++){<span class=\"keywordflow\">if</span>(!e||<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.filter(e,[bw]).length){<span class=\"keywordflow\">if</span>(!bx&amp;&amp;bw.nodeType===1){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.cleanData(bw.getElementsByTagName(<span class=\"stringliteral\">&quot;*&quot;</span>));<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.cleanData([bw])}<span class=\"keywordflow\">if</span>(bw.parentNode){bw.parentNode.removeChild(bw)}}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},empty:<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">for</span>(var e=0,bv;(bv=<span class=\"keyword\">this</span>[e])!=null;e++){<span class=\"keywordflow\">if</span>(bv.nodeType===1){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.cleanData(bv.getElementsByTagName(<span class=\"stringliteral\">&quot;*&quot;</span>))}<span class=\"keywordflow\">while</span>(bv.firstChild){bv.removeChild(bv.firstChild)}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},clone:<span class=\"keyword\">function</span>(bv,e){bv=bv==null?<span class=\"keyword\">false</span>:bv;e=e==null?bv:e;<span class=\"keywordflow\">return</span> this.map(<span class=\"keyword\">function</span>(){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.clone(<span class=\"keyword\">this</span>,bv,e)})},html:<span class=\"keyword\">function</span>(bx){<span class=\"keywordflow\">if</span>(bx===<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>[0]&amp;&amp;<span class=\"keyword\">this</span>[0].nodeType===1?<span class=\"keyword\">this</span>[0].innerHTML.replace(ag,<span class=\"stringliteral\">&quot;&quot;</span>):null}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(typeof bx===<span class=\"stringliteral\">&quot;string&quot;</span>&amp;&amp;!ae.test(bx)&amp;&amp;(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.leadingWhitespace||!ar.test(bx))&amp;&amp;!ax[(d.exec(bx)||[<span class=\"stringliteral\">&quot;&quot;</span>,<span class=\"stringliteral\">&quot;&quot;</span>])[1].toLowerCase()]){bx=bx.replace(R,<span class=\"stringliteral\">&quot;&lt;$1&gt;&lt;/$2&gt;&quot;</span>);<span class=\"keywordflow\">try</span>{<span class=\"keywordflow\">for</span>(var bw=0,bv=this.length;bw&lt;bv;bw++){<span class=\"keywordflow\">if</span>(<span class=\"keyword\">this</span>[bw].nodeType===1){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.cleanData(<span class=\"keyword\">this</span>[bw].getElementsByTagName(<span class=\"stringliteral\">&quot;*&quot;</span>));<span class=\"keyword\">this</span>[bw].innerHTML=bx}}}<span class=\"keywordflow\">catch</span>(by){this.empty().append(bx)}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(bx)){this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(bz){var e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>);e.html(bx.call(<span class=\"keyword\">this</span>,bz,e.html()))})}<span class=\"keywordflow\">else</span>{this.empty().append(bx)}}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>},replaceWith:<span class=\"keyword\">function</span>(e){<span class=\"keywordflow\">if</span>(<span class=\"keyword\">this</span>[0]&amp;&amp;<span class=\"keyword\">this</span>[0].parentNode){<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(e)){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(bx){var bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>),bv=bw.html();bw.replaceWith(e.call(<span class=\"keyword\">this</span>,bx,bv))})}<span class=\"keywordflow\">if</span>(typeof e!==<span class=\"stringliteral\">&quot;string&quot;</span>){e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(e).detach()}<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){var bw=this.nextSibling,bv=this.parentNode;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>).remove();<span class=\"keywordflow\">if</span>(bw){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(bw).before(e)}<span class=\"keywordflow\">else</span>{<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(bv).append(e)}})}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">return</span> this.length?this.pushStack(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(e)?e():e),<span class=\"stringliteral\">&quot;replaceWith&quot;</span>,e):this}},detach:function(e){<span class=\"keywordflow\">return</span> this.<span class=\"keyword\">remove</span>(e,<span class=\"keyword\">true</span>)},domManip:<span class=\"keyword\">function</span>(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.checkClone&amp;&amp;arguments.length===3&amp;&amp;typeof bC===<span class=\"stringliteral\">&quot;string&quot;</span>&amp;&amp;o.test(bC)){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>).domManip(bB,bF,bE,<span class=\"keyword\">true</span>)})}<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isFunction(bC)){<span class=\"keywordflow\">return</span> this.<a class=\"code\" href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a>(<span class=\"keyword\">function</span>(bH){var bG=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(<span class=\"keyword\">this</span>);bB[0]=bC.call(<span class=\"keyword\">this</span>,bH,bF?bG.html():<a class=\"code\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>);bG.domManip(bB,bF,bE)})}<span class=\"keywordflow\">if</span>(<span class=\"keyword\">this</span>[0]){bD=bC&amp;&amp;bC.parentNode;<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.parentNode&amp;&amp;bD&amp;&amp;bD.nodeType===11&amp;&amp;bD.childNodes.length===<span class=\"keyword\">this</span>.length){bx={fragment:bD}}<span class=\"keywordflow\">else</span>{bx=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.buildFragment(bB,<span class=\"keyword\">this</span>,bv)}bA=bx.fragment;<span class=\"keywordflow\">if</span>(bA.childNodes.length===1){by=bA=bA.firstChild}<span class=\"keywordflow\">else</span>{by=bA.firstChild}<span class=\"keywordflow\">if</span>(by){bF=bF&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(by,<span class=\"stringliteral\">&quot;tr&quot;</span>);<span class=\"keywordflow\">for</span>(var bw=0,e=this.length,bz=e-1;bw&lt;e;bw++){bE.call(bF?ba(<span class=\"keyword\">this</span>[bw],by):<span class=\"keyword\">this</span>[bw],bx.cacheable||(e&gt;1&amp;&amp;bw&lt;bz)?<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.clone(bA,<span class=\"keyword\">true</span>,<span class=\"keyword\">true</span>):bA)}}<span class=\"keywordflow\">if</span>(bv.length){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.each(bv,bo)}}<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>}});<span class=\"keyword\">function</span> ba(e,bv){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(e,<span class=\"stringliteral\">&quot;table&quot;</span>)?(e.getElementsByTagName(<span class=\"stringliteral\">&quot;tbody&quot;</span>)[0]||e.appendChild(e.ownerDocument.createElement(<span class=\"stringliteral\">&quot;tbody&quot;</span>))):e}<span class=\"keyword\">function</span> t(bB,bv){<span class=\"keywordflow\">if</span>(bv.nodeType!==1||!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.hasData(bB)){<span class=\"keywordflow\">return</span>}var by,bx,e,bA=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(bB),bz=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>._data(bv,bA),bw=bA.events;<span class=\"keywordflow\">if</span>(bw){<span class=\"keyword\">delete</span> bz.handle;bz.events={};<span class=\"keywordflow\">for</span>(by in bw){<span class=\"keywordflow\">for</span>(bx=0,e=bw[by].length;bx&lt;e;bx++){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.add(bv,by+(bw[by][bx].<span class=\"keyword\">namespace</span>?<span class=\"stringliteral\">&quot;.&quot;</span>:<span class=\"stringliteral\">&quot;&quot;</span>)+bw[by][bx].<span class=\"keyword\">namespace</span>,bw[by][bx],bw[by][bx].data)}}}<span class=\"keywordflow\">if</span>(bz.data){bz.data=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend({},bz.data)}}<span class=\"keyword\">function</span> ai(bv,e){var bw;<span class=\"keywordflow\">if</span>(e.nodeType!==1){<span class=\"keywordflow\">return</span>}<span class=\"keywordflow\">if</span>(e.clearAttributes){e.clearAttributes()}<span class=\"keywordflow\">if</span>(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();<span class=\"keywordflow\">if</span>(bw===<span class=\"stringliteral\">&quot;object&quot;</span>){e.outerHTML=bv.outerHTML}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bw===<span class=\"stringliteral\">&quot;input&quot;</span>&amp;&amp;(bv.type===<span class=\"stringliteral\">&quot;checkbox&quot;</span>||bv.type===<span class=\"stringliteral\">&quot;radio&quot;</span>)){<span class=\"keywordflow\">if</span>(bv.checked){e.defaultChecked=e.checked=bv.checked}<span class=\"keywordflow\">if</span>(e.value!==bv.value){e.value=bv.value}}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bw===<span class=\"stringliteral\">&quot;option&quot;</span>){e.selected=bv.defaultSelected}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bw===<span class=\"stringliteral\">&quot;input&quot;</span>||bw===<span class=\"stringliteral\">&quot;textarea&quot;</span>){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expando)}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.buildFragment=<span class=\"keyword\">function</span>(bz,bx,bv){var by,e,bw,bA,bB=bz[0];<span class=\"keywordflow\">if</span>(bx&amp;&amp;bx[0]){bA=bx[0].ownerDocument||bx[0]}<span class=\"keywordflow\">if</span>(!bA.createDocumentFragment){bA=av}<span class=\"keywordflow\">if</span>(bz.length===1&amp;&amp;typeof bB===<span class=\"stringliteral\">&quot;string&quot;</span>&amp;&amp;bB.length&lt;512&amp;&amp;bA===av&amp;&amp;bB.charAt(0)===<span class=\"stringliteral\">&quot;&lt;&quot;</span>&amp;&amp;!O.test(bB)&amp;&amp;(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.checkClone||!o.test(bB))&amp;&amp;(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.html5Clone||!ah.test(bB))){e=<span class=\"keyword\">true</span>;bw=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fragments[bB];<span class=\"keywordflow\">if</span>(bw&amp;&amp;bw!==1){by=bw}}<span class=\"keywordflow\">if</span>(!by){by=bA.createDocumentFragment();<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.clean(bz,bA,by,bv)}<span class=\"keywordflow\">if</span>(e){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fragments[bB]=bw?by:1}<span class=\"keywordflow\">return</span>{fragment:by,cacheable:e}};<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fragments={};<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.each({appendTo:<span class=\"stringliteral\">&quot;append&quot;</span>,prependTo:<span class=\"stringliteral\">&quot;prepend&quot;</span>,insertBefore:<span class=\"stringliteral\">&quot;before&quot;</span>,insertAfter:<span class=\"stringliteral\">&quot;after&quot;</span>,replaceAll:<span class=\"stringliteral\">&quot;replaceWith&quot;</span>},<span class=\"keyword\">function</span>(e,bv){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.fn[e]=<span class=\"keyword\">function</span>(bw){var bz=[],bC=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(bw),bB=this.length===1&amp;&amp;<span class=\"keyword\">this</span>[0].parentNode;<span class=\"keywordflow\">if</span>(bB&amp;&amp;bB.nodeType===11&amp;&amp;bB.childNodes.length===1&amp;&amp;bC.length===1){bC[bv](<span class=\"keyword\">this</span>[0]);<span class=\"keywordflow\">return</span> <span class=\"keyword\">this</span>}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">for</span>(var bA=0,bx=bC.length;bA&lt;bx;bA++){var by=(bA&gt;0?this.clone(<span class=\"keyword\">true</span>):this).get();<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>(bC[bA])[bv](by);bz=bz.concat(by)}<span class=\"keywordflow\">return</span> this.pushStack(bz,e,bC.selector)}}});<span class=\"keyword\">function</span> bg(e){<span class=\"keywordflow\">if</span>(typeof e.getElementsByTagName!==<span class=\"stringliteral\">&quot;undefined&quot;</span>){<span class=\"keywordflow\">return</span> e.getElementsByTagName(<span class=\"stringliteral\">&quot;*&quot;</span>)}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(typeof e.querySelectorAll!==<span class=\"stringliteral\">&quot;undefined&quot;</span>){<span class=\"keywordflow\">return</span> e.querySelectorAll(<span class=\"stringliteral\">&quot;*&quot;</span>)}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">return</span>[]}}}<span class=\"keyword\">function</span> az(e){<span class=\"keywordflow\">if</span>(e.type===<span class=\"stringliteral\">&quot;checkbox&quot;</span>||e.type===<span class=\"stringliteral\">&quot;radio&quot;</span>){e.defaultChecked=e.checked}}<span class=\"keyword\">function</span> E(e){var bv=(e.nodeName||<span class=\"stringliteral\">&quot;&quot;</span>).toLowerCase();<span class=\"keywordflow\">if</span>(bv===<span class=\"stringliteral\">&quot;input&quot;</span>){az(e)}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bv!==<span class=\"stringliteral\">&quot;script&quot;</span>&amp;&amp;typeof e.getElementsByTagName!==<span class=\"stringliteral\">&quot;undefined&quot;</span>){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.grep(e.getElementsByTagName(<span class=\"stringliteral\">&quot;input&quot;</span>),az)}}}<span class=\"keyword\">function</span> al(e){var bv=av.createElement(<span class=\"stringliteral\">&quot;div&quot;</span>);ac.appendChild(bv);bv.innerHTML=e.outerHTML;<span class=\"keywordflow\">return</span> bv.firstChild}<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.extend({clone:<span class=\"keyword\">function</span>(by,bA,bw){var e,bv,bx,bz=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.html5Clone||!ah.test(<span class=\"stringliteral\">&quot;&lt;&quot;</span>+by.nodeName)?by.cloneNode(<span class=\"keyword\">true</span>):al(by);<span class=\"keywordflow\">if</span>((!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.noCloneEvent||!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.noCloneChecked)&amp;&amp;(by.nodeType===1||by.nodeType===11)&amp;&amp;!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);<span class=\"keywordflow\">for</span>(bx=0;e[bx];++bx){<span class=\"keywordflow\">if</span>(bv[bx]){ai(e[bx],bv[bx])}}}<span class=\"keywordflow\">if</span>(bA){t(by,bz);<span class=\"keywordflow\">if</span>(bw){e=bg(by);bv=bg(bz);<span class=\"keywordflow\">for</span>(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;<span class=\"keywordflow\">return</span> bz},clean:<span class=\"keyword\">function</span>(bw,by,bH,bA){var bF;by=by||av;<span class=\"keywordflow\">if</span>(typeof by.createElement===<span class=\"stringliteral\">&quot;undefined&quot;</span>){by=by.ownerDocument||by[0]&amp;&amp;by[0].ownerDocument||av}var bI=[],bB;<span class=\"keywordflow\">for</span>(var bE=0,bz;(bz=bw[bE])!=null;bE++){<span class=\"keywordflow\">if</span>(typeof bz===<span class=\"stringliteral\">&quot;number&quot;</span>){bz+=<span class=\"stringliteral\">&quot;&quot;</span>}<span class=\"keywordflow\">if</span>(!bz){<span class=\"keywordflow\">continue</span>}<span class=\"keywordflow\">if</span>(typeof bz===<span class=\"stringliteral\">&quot;string&quot;</span>){<span class=\"keywordflow\">if</span>(!W.test(bz)){bz=by.createTextNode(bz)}<span class=\"keywordflow\">else</span>{bz=bz.replace(R,<span class=\"stringliteral\">&quot;&lt;$1&gt;&lt;/$2&gt;&quot;</span>);var bK=(d.exec(bz)||[<span class=\"stringliteral\">&quot;&quot;</span>,<span class=\"stringliteral\">&quot;&quot;</span>])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement(<span class=\"stringliteral\">&quot;div&quot;</span>);<span class=\"keywordflow\">if</span>(by===av){ac.appendChild(bv)}<span class=\"keywordflow\">else</span>{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];<span class=\"keywordflow\">while</span>(bD--){bv=bv.lastChild}<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.tbody){var e=w.test(bz),bC=bK===<span class=\"stringliteral\">&quot;table&quot;</span>&amp;&amp;!e?bv.firstChild&amp;&amp;bv.firstChild.childNodes:bx[1]===<span class=\"stringliteral\">&quot;&lt;table&gt;&quot;</span>&amp;&amp;!e?bv.childNodes:[];<span class=\"keywordflow\">for</span>(bB=bC.length-1;bB&gt;=0;--bB){<span class=\"keywordflow\">if</span>(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(bC[bB],<span class=\"stringliteral\">&quot;tbody&quot;</span>)&amp;&amp;!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.leadingWhitespace&amp;&amp;ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;<span class=\"keywordflow\">if</span>(!<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.appendChecked){<span class=\"keywordflow\">if</span>(bz[0]&amp;&amp;typeof(bG=bz.length)===<span class=\"stringliteral\">&quot;number&quot;</span>){<span class=\"keywordflow\">for</span>(bB=0;bB&lt;bG;bB++){E(bz[bB])}}<span class=\"keywordflow\">else</span>{E(bz)}}<span class=\"keywordflow\">if</span>(bz.nodeType){bI.push(bz)}<span class=\"keywordflow\">else</span>{bI=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.merge(bI,bz)}}<span class=\"keywordflow\">if</span>(bH){bF=<span class=\"keyword\">function</span>(bL){<span class=\"keywordflow\">return</span> !bL.type||bm.test(bL.type)};<span class=\"keywordflow\">for</span>(bE=0;bI[bE];bE++){<span class=\"keywordflow\">if</span>(bA&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.nodeName(bI[bE],<span class=\"stringliteral\">&quot;script&quot;</span>)&amp;&amp;(!bI[bE].type||bI[bE].type.toLowerCase()===<span class=\"stringliteral\">&quot;text/javascript&quot;</span>)){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bI[bE].nodeType===1){var bJ=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.grep(bI[bE].getElementsByTagName(<span class=\"stringliteral\">&quot;script&quot;</span>),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}<span class=\"keywordflow\">return</span> bI},cleanData:<span class=\"keyword\">function</span>(bv){var by,bw,e=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.cache,bB=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.special,bA=<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.support.deleteExpando;<span class=\"keywordflow\">for</span>(var bz=0,bx;(bx=bv[bz])!=null;bz++){<span class=\"keywordflow\">if</span>(bx.nodeName&amp;&amp;<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.noData[bx.nodeName.toLowerCase()]){<span class=\"keywordflow\">continue</span>}bw=bx[<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expando];<span class=\"keywordflow\">if</span>(bw){by=e[bw];<span class=\"keywordflow\">if</span>(by&amp;&amp;by.events){<span class=\"keywordflow\">for</span>(var bC in by.events){<span class=\"keywordflow\">if</span>(bB[bC]){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.event.remove(bx,bC)}<span class=\"keywordflow\">else</span>{<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.removeEvent(bx,bC,by.handle)}}<span class=\"keywordflow\">if</span>(by.handle){by.handle.elem=null}}<span class=\"keywordflow\">if</span>(bA){<span class=\"keyword\">delete</span> bx[<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expando]}<span class=\"keywordflow\">else</span>{<span class=\"keywordflow\">if</span>(bx.removeAttribute){bx.removeAttribute(<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.expando)}}<span class=\"keyword\">delete</span> e[bw]}}}});<span class=\"keyword\">function</span> bo(e,bv){<span class=\"keywordflow\">if</span>(bv.src){<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.ajax({url:bv.src,async:<span class=\"keyword\">false</span>,dataType:<span class=\"stringliteral\">&quot;script&quot;</span>})}<span class=\"keywordflow\">else</span>{<a class=\"code\" href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a>.globalEval((bv.text||bv.textContent||bv.innerHTML||<span class=\"stringliteral\">&quot;&quot;</span>).replace(aN,<span class=\"stringliteral\">&quot;/*$0*/&quot;</span>))}<span class=\"keywordflow\">if</span>(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\\([^)]*\\)/i</div>\n<div class=\"ttc\" id=\"jquery_8js_html_a2335e57f79b6acfb6de59c235dc8a83e\"><div class=\"ttname\"><a href=\"jquery_8js.html#a2335e57f79b6acfb6de59c235dc8a83e\">p</a></div><div class=\"ttdeci\">function p(by, bw, bv)</div><div class=\"ttdef\"><b>Definition:</b> jquery.js:23</div></div>\n<div class=\"ttc\" id=\"jquery_8js_html_a89ad527fcd82c01ebb587332f5b4fcd4\"><div class=\"ttname\"><a href=\"jquery_8js.html#a89ad527fcd82c01ebb587332f5b4fcd4\">css</a></div><div class=\"ttdeci\">b fn css</div><div class=\"ttdef\"><b>Definition:</b> jquery.js:23</div></div>\n<div class=\"ttc\" id=\"jquery_8js_html_a9db6d45a025ad692282fe23e69eeba43\"><div class=\"ttname\"><a href=\"jquery_8js.html#a9db6d45a025ad692282fe23e69eeba43\">if</a></div><div class=\"ttdeci\">if(!b.support.opacity)</div><div class=\"ttdef\"><b>Definition:</b> jquery.js:23</div></div>\n<div class=\"ttc\" id=\"jquery_8js_html_a38ee4c0b5f4fe2a18d0c783af540d253\"><div class=\"ttname\"><a href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a></div><div class=\"ttdeci\">function L</div><div class=\"ttdef\"><b>Definition:</b> jquery.js:16</div></div>\n<div class=\"ttc\" id=\"jquery_8js_html_a871ff39db627c54c710a3e9909b8234c\"><div class=\"ttname\"><a href=\"jquery_8js.html#a871ff39db627c54c710a3e9909b8234c\">each</a></div><div class=\"ttdeci\">b each([&quot;height&quot;,&quot;width&quot;], function(bv, e){b.cssHooks[e]={get:function(by, bx, bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by, e, bw)}else{b.swap(by, a7, function(){bz=p(by, e, bw)})}return bz}}, set:function(bw, bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx &gt;=0){return bx+&quot;px&quot;}}else{return bx}}}})</div></div>\n<div class=\"ttc\" id=\"jquery_8js_html_a1d6558865876e1c8cca029fce41a4bdb\"><div class=\"ttname\"><a href=\"jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb\">bb</a></div><div class=\"ttdeci\">function bb</div><div class=\"ttdef\"><b>Definition:</b> jquery.js:16</div></div>\n<div class=\"ttc\" id=\"jquery_8js_html_aa4026ad5544b958e54ce5e106fa1c805\"><div class=\"ttname\"><a href=\"jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805\">b</a></div><div class=\"ttdeci\">var b</div><div class=\"ttdef\"><b>Definition:</b> jquery.js:16</div></div>\n<div class=\"ttc\" id=\"jquery_8js_html_adc18d83abfd9f87d396e8fd6b6ac0fe1\"><div class=\"ttname\"><a href=\"jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1\">Z</a></div><div class=\"ttdeci\">Z</div><div class=\"ttdef\"><b>Definition:</b> jquery.js:23</div></div>\n</div><!-- fragment -->\n</div>\n</div>\n<a class=\"anchor\" id=\"a1d6558865876e1c8cca029fce41a4bdb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function bb</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>jQuery JavaScript Library v1.7.1 <a href=\"http://jquery.com/\">http://jquery.com/</a></p>\n<p>Copyright 2011, John Resig Dual licensed under the MIT or GPL Version 2 licenses. <a href=\"http://jquery.org/license\">http://jquery.org/license</a></p>\n<p>Includes Sizzle.js <a href=\"http://sizzlejs.com/\">http://sizzlejs.com/</a> Copyright 2011, The Dojo Foundation Released under the MIT, BSD, and GPL Licenses.</p>\n<p>Date: Mon Nov 21 21:11:03 2011 -0500 </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af6ee77c71b2c89bdb365145ac5ad1219\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var bq =/#.*$/</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae77642f8ef73fb9c20c2a737d956acda\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var bs =/\\r?\\n/g</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"abce695e0af988ece0826d9ad59b8160d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var c</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<b>初始值:</b><div class=\"fragment\"><div class=\"line\">=/^\\/\\</div>\n<div class=\"line\"> * jQuery UI 1.8.18</div>\n<div class=\"line\"> *</div>\n<div class=\"line\"> * Copyright 2011</div>\n</div><!-- fragment -->\n</div>\n</div>\n<a class=\"anchor\" id=\"a89ad527fcd82c01ebb587332f5b4fcd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"jquery_8js.html#a2fa551895933fae935a0a6b87282241d\">b</a> fn css =function(e,bv){<a class=\"el\" href=\"jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4\">if</a>(arguments.length===2&amp;&amp;bv===<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==<a class=\"el\" href=\"jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253\">L</a>?b.style(bx,bw,by):b.css(bx,bw)})}</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a88b21f8ba3af86d6981b1da520ece33b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"jquery_8js.html#a2fa551895933fae935a0a6b87282241d\">b</a> curCSS =<a class=\"el\" href=\"jquery_8js.html#a89ad527fcd82c01ebb587332f5b4fcd4\">b.css</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab26645c014aa005ecedef329ecf58c99\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var k =/%20/g</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a38ee4c0b5f4fe2a18d0c783af540d253\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function L {var av=bb.document,bu=bb.navigator,bl=bb.location</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"adc18d83abfd9f87d396e8fd6b6ac0fe1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Z =aI||aX</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/msp__cmn_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: msp_cmn.h 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">函数</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">msp_cmn.h 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Mobile Speech Platform Common Interface Header File.  \n<a href=\"#details\">更多...</a></p>\n\n<p><a href=\"msp__cmn_8h_source.html\">浏览源代码.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\n函数</h2></td></tr>\n<tr class=\"memitem:a137acfe684fe46cbe5baf19f7d4a7fcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"msp__cmn_8h.html#a137acfe684fe46cbe5baf19f7d4a7fcc\">MSPLogin</a> (const char *usr, const char *pwd, const char *params)</td></tr>\n<tr class=\"memdesc:a137acfe684fe46cbe5baf19f7d4a7fcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">初始化msc，用户登录。  <a href=\"#a137acfe684fe46cbe5baf19f7d4a7fcc\">更多...</a><br /></td></tr>\n<tr class=\"separator:a137acfe684fe46cbe5baf19f7d4a7fcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ada276fa6db4a66342d951820020e4e8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"msp__cmn_8h.html#ada276fa6db4a66342d951820020e4e8f\">MSPUploadData</a> (const char *dataName, void *data, unsigned int dataLen, const char *params, int *errorCode)</td></tr>\n<tr class=\"memdesc:ada276fa6db4a66342d951820020e4e8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">用户数据上传。  <a href=\"#ada276fa6db4a66342d951820020e4e8f\">更多...</a><br /></td></tr>\n<tr class=\"separator:ada276fa6db4a66342d951820020e4e8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae7be2dd2c6ee318524621b952998c14d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"msp__cmn_8h.html#ae7be2dd2c6ee318524621b952998c14d\">MSPSearch</a> (const char *params, const char *text, unsigned int *dataLen, int *errorCode)</td></tr>\n<tr class=\"memdesc:ae7be2dd2c6ee318524621b952998c14d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">文本搜索。  <a href=\"#ae7be2dd2c6ee318524621b952998c14d\">更多...</a><br /></td></tr>\n<tr class=\"separator:ae7be2dd2c6ee318524621b952998c14d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1e0f72cd113b4578afdf3d16ab34463e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"msp__cmn_8h.html#a1e0f72cd113b4578afdf3d16ab34463e\">MSPLogout</a> ()</td></tr>\n<tr class=\"memdesc:a1e0f72cd113b4578afdf3d16ab34463e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">退出登录。  <a href=\"#a1e0f72cd113b4578afdf3d16ab34463e\">更多...</a><br /></td></tr>\n<tr class=\"separator:a1e0f72cd113b4578afdf3d16ab34463e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4d3fa0aad5e761cb2a2afe30ae2a9714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"msp__cmn_8h.html#a4d3fa0aad5e761cb2a2afe30ae2a9714\">MSPGetParam</a> (const char *paramName, char *paramValue, unsigned int *valueLen)</td></tr>\n<tr class=\"memdesc:a4d3fa0aad5e761cb2a2afe30ae2a9714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">获取MSC的设置信息  <a href=\"#a4d3fa0aad5e761cb2a2afe30ae2a9714\">更多...</a><br /></td></tr>\n<tr class=\"separator:a4d3fa0aad5e761cb2a2afe30ae2a9714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a632008aeddf5eba09555920ce38686a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"msp__cmn_8h.html#a632008aeddf5eba09555920ce38686a4\">MSPGetVersion</a> (const char *verName, int *errorCode)</td></tr>\n<tr class=\"memdesc:a632008aeddf5eba09555920ce38686a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">获取MSC或本地引擎版本信息  <a href=\"#a632008aeddf5eba09555920ce38686a4\">更多...</a><br /></td></tr>\n<tr class=\"separator:a632008aeddf5eba09555920ce38686a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">详细描述</h2>\n<div class=\"textblock\"><p>Mobile Speech Platform Common Interface Header File. </p>\n<p>This file contains the quick common programming interface (API) declarations of MSP. Developer can include this file in your project to build applications. For more information, please read the developer guide.</p>\n<p>Use of this software is subject to certain restrictions and limitations set forth in a license agreement entered into between iFLYTEK, Co,LTD. and the licensee of this software. Please refer to the license agreement for license use rights and restrictions.</p>\n<p>Copyright (C) 1999 - 2015 by iFLYTEK, Co,LTD. All rights reserved.</p>\n<dl class=\"section author\"><dt>作者</dt><dd>MSC </dd></dl>\n<dl class=\"section version\"><dt>版本</dt><dd>5.0 </dd></dl>\n<dl class=\"section date\"><dt>日期</dt><dd>2015/03/19</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd></dd></dl>\n<p><b>History:</b><br />\n </p><table class=\"doxtable\">\n<tr>\n<th>Version </th><th>Date </th><th>Author </th><th>Notes </th></tr>\n<tr>\n<td>5.0 </td><td>2015/03/19 </td><td>MSC </td><td>Create this file </td></tr>\n</table>\n</div><h2 class=\"groupheader\">函数说明</h2>\n<a class=\"anchor\" id=\"a4d3fa0aad5e761cb2a2afe30ae2a9714\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI MSPGetParam </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>paramName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>paramValue</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int *&#160;</td>\n          <td class=\"paramname\"><em>valueLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>获取MSC的设置信息 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">paramName[in]</td><td>参数名，一次调用只支持查询一个参数。参数如下： <table class=\"doxtable\">\n<tr>\n<th>参数</th><th>描述 </th></tr>\n<tr>\n<td>upflow</td><td>上行数据量 </td></tr>\n<tr>\n<td>downflow</td><td>下行数据量 </td></tr>\n</table>\n</td></tr>\n    <tr><td class=\"paramname\">paramValue[in/out]</td><td>输入:buffer首地址<br />\n输出:向该buffer写入获取到的信息 </td></tr>\n    <tr><td class=\"paramname\">valueLen[in/out]</td><td>输入:buffer的大小<br />\n输出:信息实际长度(不含'\\0') </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。</dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>以查询上行流量为例，获取到的是当前累计的上行流量。下行流量查询与此相似。 </dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">const char* para_name = \"upflow\";\nchar para_value[32] = {'\\0'};\nunsigned int value_len = 32;\nint ret = MSPGetParam (para_name, para_value, &amp;value_len);\nif(MSP_SUCCESS != ret)\n{\n    printf(\"MSPGetParam failed, error code is: %d\", ret);\n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a632008aeddf5eba09555920ce38686a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* MSPAPI MSPGetVersion </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>verName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>errorCode</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>获取MSC或本地引擎版本信息 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">verName[in]</td><td>参数名，一次调用只支持查询一个参数。参数如下： <table class=\"doxtable\">\n<tr>\n<th>参数</th><th>描述 </th></tr>\n<tr>\n<td>ver_msc</td><td>MSC版本号 </td></tr>\n<tr>\n<td>ver_asr</td><td>离线识别版本号，目前不支持 </td></tr>\n<tr>\n<td>ver_tts</td><td>离线合成版本号 </td></tr>\n<tr>\n<td>ver_ivw</td><td>离线唤醒版本号 </td></tr>\n</table>\n</td></tr>\n    <tr><td class=\"paramname\">errorCode[out]</td><td>如果函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>成功返回缓冲区指针，失败或数据不存在返回NULL。 </dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd></dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a137acfe684fe46cbe5baf19f7d4a7fcc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI MSPLogin </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>usr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>pwd</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>params</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>初始化msc，用户登录。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">usr[in]</td><td>此参数保留，传入NULL即可。 </td></tr>\n    <tr><td class=\"paramname\">pwd[in]</td><td>此参数保留，传入NULL即可。 </td></tr>\n    <tr><td class=\"paramname\">params[in]</td><td>参见下表: <table class=\"doxtable\">\n<tr>\n<th>参数 </th><th>参数说明 </th><th>是否必要  </th></tr>\n<tr>\n<td>appid </td><td>应用ID。SDK申请成功后获取到的appid。申请SDK请前往<a href=\"http://open.voicecloud.cn\" target=\"_blank\">http://open.voicecloud.cn</a> </td><td>是  </td></tr>\n<tr>\n<td>app.name </td><td>描述应用的一个名字。用户所传的参数值必须和注册资料的对应项一致 </td><td>否  </td></tr>\n<tr>\n<td>app.path </td><td>应用程序的路径。用户所传的参数值必须和语音云申请时所填资料中的对应项一致 </td><td>否  </td></tr>\n<tr>\n<td>auth_id </td><td><b>mfv业务用户标识，此参数仅在mfv业务下使用,由长度不超过64位的字母、下划线、数字组成</b></td><td>是  </td></tr>\n</table>\n</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>使用其他接口前必须先调用MSPLogin，可以在应用程序启动时调用。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">const char* usr = NULL;\nconst char* pwd = NULL;\nconst char* lgi_param = \"appid = ********\";\nint ret = MSPLogin(usr, pwd, lgi_param);\nif( MSP_SUCCESS != ret )\n{\n    printf( \"MSPLogin failed, error code is: %d\", ret );\n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1e0f72cd113b4578afdf3d16ab34463e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI MSPLogout </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>退出登录。 </p>\n<dl class=\"section return\"><dt>返回</dt><dd>如果函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。</dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>本接口和MSPLogin配合使用。确保其他接口调用结束之后调用MSPLogout，否则结果不可预期。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">int ret = MSPLogout( );\nif(MSP_SUCCESS != ret)\n{\n    printf(\"MSPLogout failed, error code is: %d\", ret);\n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae7be2dd2c6ee318524621b952998c14d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* MSPAPI MSPSearch </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>params</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>text</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int *&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>errorCode</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>文本搜索。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">params[in]</td><td>参见下表: <table class=\"doxtable\">\n<tr>\n<th>参数 </th><th>参数说明 </th><th>值  </th></tr>\n<tr>\n<td>nlp_version </td><td>语义版本 </td><td>1.0：老版本语义,返回结果为xml格式<br />\n2.0：新版本语义,场景比1.0支持的更多,返回结果为原生json<br />\n默认为1.0  </td></tr>\n</table>\n</td></tr>\n    <tr><td class=\"paramname\">text[in]</td><td>上传文本,文本须为UTF-8编码。 </td></tr>\n    <tr><td class=\"paramname\">dataLen[in]</td><td>上传文本长度(如果是字符串，则不包含'\\0')。 </td></tr>\n    <tr><td class=\"paramname\">errorCode[out]</td><td>如果函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>成功返回缓冲区指针，失败或数据不存在返回NULL。 </dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">FILE * fw = NULL;\nFILE * fr = NULL;\nint txtSize = 0;\nunsigned int str_len=0;\nchar *text = NULL;\nconst char * rec_text=NULL;\nif(NULL==(fr=fopen(\"source.txt\",\"rb\")))\n{\n    ...   //错误处理\n}\nif(NULL != fr)\n{\n    fseek(fr, 0, SEEK_END);\n    txtSize = ftell(fr);\n    fseek(fr, 0, SEEK_SET);\n    text = (char *)malloc(txtSize);\n    fread((void *)text, txtSize, 1, fr);\n    text[txtSize] = '\\0';\n    fclose(fr);\n    fr = NULL;\n}\nstr_len = strlen(text);\nrec_text = MSPSearch(\"nlp_version=2.0\",text,&amp;str_len,&amp;ret);\nif(MSP_SUCCESS !=ret)\n{\n    printf(\"MSPSearch failed ,error code is:%d\\n\",ret);\n}\nif(NULL==(fw=fopen(\"result.txt\",\"wb\")))\n{\n    ...//错误处理\n}\nif(1!=fwrite(rec_text,strlen(rec_text),1,fw))\n{\n    printf(\"file write error\\n\");\n}\nfclose(fw);\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ada276fa6db4a66342d951820020e4e8f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* MSPAPI MSPUploadData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>dataName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>params</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>errorCode</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>用户数据上传。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">dataName[in]</td><td>数据名称字符串。 </td></tr>\n    <tr><td class=\"paramname\">data[in]</td><td>待上传数据缓冲区的起始地址。 </td></tr>\n    <tr><td class=\"paramname\">dataLen[in]</td><td>数据长度(如果是字符串，则不包含'\\0')。 </td></tr>\n    <tr><td class=\"paramname\">params[in]</td><td>目前支持以下四种。具体如下: <table class=\"doxtable\">\n<tr>\n<th>参数 </th><th>功能 </th><th>应用业务 </th><th>文件编码  </th></tr>\n<tr>\n<td>\"sub = uup,dtt = userword\" </td><td>上传用户词表 </td><td>iat </td><td>UTF-8  </td></tr>\n<tr>\n<td>\"sub = uup,dtt = contact\" </td><td>上传联系人 </td><td>iat </td><td>UTF-8  </td></tr>\n<tr>\n<td>\"sub = asr,dtt = abnf\"或<br />\n\"sub = asr,dtt = xml\" </td><td>上传识别语法 </td><td>asr </td><td>UTF-8或GB2312  </td></tr>\n<tr>\n<td>\"sub = asr\" </td><td>上传关键词 </td><td>asr </td><td>UTF-8  </td></tr>\n</table>\n<b>语法详见:</b><a href=\"http://club.voicecloud.cn/forum.php?mod=viewthread&amp;tid=7595\" target=\"_blank\">http://club.voicecloud.cn/forum.php?mod=viewthread&amp;tid=7595</a><br />\n </td></tr>\n    <tr><td class=\"paramname\">errorCode[out]</td><td>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>上传成功后，联系人、用户词表功能返回值NULL，识别语法、关键词功能会返回一个字符串格式的ID，该ID是此次上传数据的唯一标识。上传的数据会被永久保存，需要使用时，只要在相应接口传入对应ID即可。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">const char* dataname = \"userword\";\nconst char* params = \"sub=uup,dtt=userword\";\nconst char* result = NULL;\nchar* data = NULL;\nint data_len = 0;\nFILE* fp = fopen(\"userwords.txt \", \"rb\");\nif(NULL==fp)\n{\n    ...   //错误处理\n}\nfseek(fp, 0, SEEK_END);\ndata_len = ftell(fp);\nfseek(fp, 0, SEEK_SET);\ndata = (char*)malloc(data_len+1);\nif(NULL==data)\n{\n    ...   //错误处理\n}\ndata_len = fread(data,1,data_len,fp);\nif(data_len == 0)\n{\n    ...   //错误处理\n}\ndata[data_len] = '\\0';\nresult = MSPUploadData( dataName, data, data_len, params, &amp;errorcode);\nif( MSP_SUCCESS != errorcode )\n{\n    printf( \"MSPUploadData failed, error code is: %d\", ret );\n}\nfclose(fp);\n.</pre> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/msp__cmn_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: msp_cmn.h 源文件</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">msp_cmn.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"msp__cmn_8h.html\">浏览该文件的文档.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"msp__cmn_8h.html#a137acfe684fe46cbe5baf19f7d4a7fcc\">MSPLogin</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* usr, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* pwd, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* params);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* MSPAPI <a class=\"code\" href=\"msp__cmn_8h.html#ada276fa6db4a66342d951820020e4e8f\">MSPUploadData</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* dataName, <span class=\"keywordtype\">void</span>* data, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> dataLen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* params, <span class=\"keywordtype\">int</span>* errorCode);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* MSPAPI <a class=\"code\" href=\"msp__cmn_8h.html#ae7be2dd2c6ee318524621b952998c14d\">MSPSearch</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* params, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* text, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>* dataLen, <span class=\"keywordtype\">int</span>* errorCode);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"msp__cmn_8h.html#a1e0f72cd113b4578afdf3d16ab34463e\">MSPLogout</a>();</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"msp__cmn_8h.html#a4d3fa0aad5e761cb2a2afe30ae2a9714\">MSPGetParam</a>( <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> *paramName, <span class=\"keywordtype\">char</span> *paramValue, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> *valueLen );</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160; <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* MSPAPI <a class=\"code\" href=\"msp__cmn_8h.html#a632008aeddf5eba09555920ce38686a4\">MSPGetVersion</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> *verName, <span class=\"keywordtype\">int</span> *errorCode);</div>\n<div class=\"ttc\" id=\"msp__cmn_8h_html_ada276fa6db4a66342d951820020e4e8f\"><div class=\"ttname\"><a href=\"msp__cmn_8h.html#ada276fa6db4a66342d951820020e4e8f\">MSPUploadData</a></div><div class=\"ttdeci\">const char *MSPAPI MSPUploadData(const char *dataName, void *data, unsigned int dataLen, const char *params, int *errorCode)</div><div class=\"ttdoc\">用户数据上传。 </div></div>\n<div class=\"ttc\" id=\"msp__cmn_8h_html_a137acfe684fe46cbe5baf19f7d4a7fcc\"><div class=\"ttname\"><a href=\"msp__cmn_8h.html#a137acfe684fe46cbe5baf19f7d4a7fcc\">MSPLogin</a></div><div class=\"ttdeci\">int MSPAPI MSPLogin(const char *usr, const char *pwd, const char *params)</div><div class=\"ttdoc\">初始化msc，用户登录。 </div></div>\n<div class=\"ttc\" id=\"msp__cmn_8h_html_ae7be2dd2c6ee318524621b952998c14d\"><div class=\"ttname\"><a href=\"msp__cmn_8h.html#ae7be2dd2c6ee318524621b952998c14d\">MSPSearch</a></div><div class=\"ttdeci\">const char *MSPAPI MSPSearch(const char *params, const char *text, unsigned int *dataLen, int *errorCode)</div><div class=\"ttdoc\">文本搜索。 </div></div>\n<div class=\"ttc\" id=\"msp__cmn_8h_html_a4d3fa0aad5e761cb2a2afe30ae2a9714\"><div class=\"ttname\"><a href=\"msp__cmn_8h.html#a4d3fa0aad5e761cb2a2afe30ae2a9714\">MSPGetParam</a></div><div class=\"ttdeci\">int MSPAPI MSPGetParam(const char *paramName, char *paramValue, unsigned int *valueLen)</div><div class=\"ttdoc\">获取MSC的设置信息 </div></div>\n<div class=\"ttc\" id=\"msp__cmn_8h_html_a1e0f72cd113b4578afdf3d16ab34463e\"><div class=\"ttname\"><a href=\"msp__cmn_8h.html#a1e0f72cd113b4578afdf3d16ab34463e\">MSPLogout</a></div><div class=\"ttdeci\">int MSPAPI MSPLogout()</div><div class=\"ttdoc\">退出登录。 </div></div>\n<div class=\"ttc\" id=\"msp__cmn_8h_html_a632008aeddf5eba09555920ce38686a4\"><div class=\"ttname\"><a href=\"msp__cmn_8h.html#a632008aeddf5eba09555920ce38686a4\">MSPGetVersion</a></div><div class=\"ttdeci\">const char *MSPAPI MSPGetVersion(const char *verName, int *errorCode)</div><div class=\"ttdoc\">获取MSC或本地引擎版本信息 </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/qisr_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: qisr.h 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">函数</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">qisr.h 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>iFLY Speech Recognizer Header File  \n<a href=\"#details\">更多...</a></p>\n\n<p><a href=\"qisr_8h_source.html\">浏览源代码.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\n函数</h2></td></tr>\n<tr class=\"memitem:aaec4a5779275e07c4f7405ed8d739416\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qisr_8h.html#aaec4a5779275e07c4f7405ed8d739416\">QISRSessionBegin</a> (const char *grammarList, const char *params, int *errorCode)</td></tr>\n<tr class=\"memdesc:aaec4a5779275e07c4f7405ed8d739416\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">开始一次语音识别。  <a href=\"#aaec4a5779275e07c4f7405ed8d739416\">更多...</a><br /></td></tr>\n<tr class=\"separator:aaec4a5779275e07c4f7405ed8d739416\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a47fd2588fe834fa2d51fef1961d7aef4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qisr_8h.html#a47fd2588fe834fa2d51fef1961d7aef4\">QISRAudioWrite</a> (const char *sessionID, const void *waveData, unsigned int waveLen, int audioStatus, int *epStatus, int *recogStatus)</td></tr>\n<tr class=\"memdesc:a47fd2588fe834fa2d51fef1961d7aef4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">写入本次识别的音频。  <a href=\"#a47fd2588fe834fa2d51fef1961d7aef4\">更多...</a><br /></td></tr>\n<tr class=\"separator:a47fd2588fe834fa2d51fef1961d7aef4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e7880db4792266a4d1439238c0b2c1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qisr_8h.html#a2e7880db4792266a4d1439238c0b2c1b\">QISRGetResult</a> (const char *sessionID, int *rsltStatus, int waitTime, int *errorCode)</td></tr>\n<tr class=\"memdesc:a2e7880db4792266a4d1439238c0b2c1b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">获取识别结果。  <a href=\"#a2e7880db4792266a4d1439238c0b2c1b\">更多...</a><br /></td></tr>\n<tr class=\"separator:a2e7880db4792266a4d1439238c0b2c1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab50c4114e032100c4093ddd51329fecc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qisr_8h.html#ab50c4114e032100c4093ddd51329fecc\">QISRSessionEnd</a> (const char *sessionID, const char *hints)</td></tr>\n<tr class=\"memdesc:ab50c4114e032100c4093ddd51329fecc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">结束本次语音识别。  <a href=\"#ab50c4114e032100c4093ddd51329fecc\">更多...</a><br /></td></tr>\n<tr class=\"separator:ab50c4114e032100c4093ddd51329fecc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2081e3cad9a8155c15790a2476be7044\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qisr_8h.html#a2081e3cad9a8155c15790a2476be7044\">QISRGetParam</a> (const char *sessionID, const char *paramName, char *paramValue, unsigned int *valueLen)</td></tr>\n<tr class=\"memdesc:a2081e3cad9a8155c15790a2476be7044\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">获取当次语音识别信息，如上行流量、下行流量等。  <a href=\"#a2081e3cad9a8155c15790a2476be7044\">更多...</a><br /></td></tr>\n<tr class=\"separator:a2081e3cad9a8155c15790a2476be7044\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">详细描述</h2>\n<div class=\"textblock\"><p>iFLY Speech Recognizer Header File </p>\n<p>This file contains the quick application programming interface (API) declarations of ISR. Developer can include this file in your project to build applications. For more information, please read the developer guide.</p>\n<p>Use of this software is subject to certain restrictions and limitations set forth in a license agreement entered into between iFLYTEK, Co,LTD. and the licensee of this software. Please refer to the license agreement for license use rights and restrictions.</p>\n<p>Copyright (C) 1999 - 2015 by iFLYTEK, Co,LTD. All rights reserved.</p>\n<dl class=\"section author\"><dt>作者</dt><dd>MSC </dd></dl>\n<dl class=\"section version\"><dt>版本</dt><dd>5.0 </dd></dl>\n<dl class=\"section date\"><dt>日期</dt><dd>2015/03/19</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd></dd></dl>\n<p><b>History:</b><br />\n </p><table class=\"doxtable\">\n<tr>\n<th>Version </th><th>Date </th><th>Author </th><th>Notes </th></tr>\n<tr>\n<td>5.0 </td><td>2015/03/19 </td><td>MSC </td><td>Create this file </td></tr>\n</table>\n</div><h2 class=\"groupheader\">函数说明</h2>\n<a class=\"anchor\" id=\"a47fd2588fe834fa2d51fef1961d7aef4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI QISRAudioWrite </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const void *&#160;</td>\n          <td class=\"paramname\"><em>waveData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>waveLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>audioStatus</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>epStatus</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>recogStatus</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>写入本次识别的音频。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QISRSessionBegin返回的句柄。 </td></tr>\n    <tr><td class=\"paramname\">waveData[in]</td><td>音频数据缓冲区起始地址。 </td></tr>\n    <tr><td class=\"paramname\">waveLen[in]</td><td>音频数据长度,单位字节。 </td></tr>\n    <tr><td class=\"paramname\">audioStatus[in]</td><td>用来告知MSC音频发送是否完成，典型值如下： <table class=\"doxtable\">\n<tr>\n<th>枚举常量 </th><th>描述  </th></tr>\n<tr>\n<td>MSP_AUDIO_SAMPLE_FIRST = 1 </td><td>第一块音频  </td></tr>\n<tr>\n<td>MSP_AUDIO_SAMPLE_CONTINUE = 2 </td><td>还有后继音频  </td></tr>\n<tr>\n<td>MSP_AUDIO_SAMPLE_LAST = 4 </td><td>最后一块音频  </td></tr>\n</table>\n</td></tr>\n    <tr><td class=\"paramname\">epStatus[out]</td><td>端点检测（End-point detected）器所处的状态,可能的值如下： <table class=\"doxtable\">\n<tr>\n<th>枚举常量 </th><th>描述  </th></tr>\n<tr>\n<td>MSP_EP_LOOKING_FOR_SPEECH = 0 </td><td>还没有检测到音频的前端点  </td></tr>\n<tr>\n<td>MSP_EP_IN_SPEECH = 1 </td><td>已经检测到了音频前端点，正在进行正常的音频处理  </td></tr>\n<tr>\n<td>MSP_EP_AFTER_SPEECH = 3 </td><td>检测到音频的后端点，后继的音频会被MSC忽略  </td></tr>\n<tr>\n<td>MSP_EP_TIMEOUT = 4 </td><td>超时  </td></tr>\n<tr>\n<td>MSP_EP_ERROR = 5 </td><td>出现错误  </td></tr>\n<tr>\n<td>MSP_EP_MAX_SPEECH = 6 </td><td>音频过大  </td></tr>\n</table>\n<b>注意：当epStatus大于等于3时,用户应当停止写入音频的操作,否则写入MSC的音频会被忽略。</b> </td></tr>\n    <tr><td class=\"paramname\">recogStatus[out]</td><td>识别器返回的状态，提醒用户及时开始\\停止获取识别结果。典型值如下： <table class=\"doxtable\">\n<tr>\n<th>枚举常量 </th><th>描述  </th></tr>\n<tr>\n<td>MSP_REC_STATUS_SUCCESS = 0 </td><td>识别成功，有识别结果返回  </td></tr>\n<tr>\n<td>MSP_REC_STATUS_NO_MATCH = 1 </td><td>识别结束，没有识别结果  </td></tr>\n<tr>\n<td>MSP_REC_STATUS_INCOMPLETE = 2 </td><td>正在识别  </td></tr>\n<tr>\n<td>MSP_REC_STATUS_COMPLETE = 5 </td><td>识别结束，有识别结果返回  </td></tr>\n</table>\n</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>本接口需不断调用，直到音频全部写入为止。上传音频时，需更新audioStatus的值。具体来说:<br />\n<b>当写入首块音频时,将audioStatus置为MSP_AUDIO_SAMPLE_FIRST<br />\n当写入最后一块音频时,将audioStatus置为MSP_AUDIO_SAMPLE_LAST<br />\n其余情况下,将audioStatus置为MSP_AUDIO_SAMPLE_CONTINUE</b><br />\n同时，需定时检查两个变量：epStatus和rsltStatus。具体来说:<br />\n<b>当epStatus显示已检测到后端点时，MSC已不再接收音频，应及时停止音频写入<br />\n当rsltStatus显示有识别结果返回时，即可从MSC缓存中获取结果</b></dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">char audio_data[5120] ={'\\0'};\nunsigned int   audio_len = 0;\nint audio_status = 2;\nint ep_status = 0;\nint rec_status = 0;\nint ret = 0;\nwhile(MSP_AUDIO_SAMPLE_LAST != audio_status )\n{\n    // 读取音频到缓冲区audio_data中,设置音频长度audio_len,音频状态audio_status。\n    ret = QISRAudioWrite( sessionID, audio_data, audio_len, audio_status, &amp;ep_status, &amp;rec_status );\n    if( MSP_SUCCESS != ret )\n    {\n        printf( \"QISRAudioWrite failed, error code is: %d\", ret );\n        break;\n    }\n    else if(MSP_EP_AFTER_SPEECH == ep_status )//检测到音频后端点,停止写入音频 \n    {\n        printf( \"end point of speech has been detected!\" );\n        break;\n    }\n    //如果是实时采集音频,可以省略此操作。5KB大小的16KPCM持续的时间是160毫秒 \n    Sleep( 160 );  \n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2081e3cad9a8155c15790a2476be7044\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI QISRGetParam </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>paramName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>paramValue</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int *&#160;</td>\n          <td class=\"paramname\"><em>valueLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>获取当次语音识别信息，如上行流量、下行流量等。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QISRSessionEnd返回的句柄，如果为NULL，获取MSC的设置信息。 </td></tr>\n    <tr><td class=\"paramname\">paramName[in]</td><td>参数名，一次调用只支持查询一个参数。参数如下： <table class=\"doxtable\">\n<tr>\n<th>参数</th><th>描述 </th></tr>\n<tr>\n<td>sid</td><td>服务端会话ID，长度为32字节 </td></tr>\n<tr>\n<td>upflow</td><td>上行数据量，单位字节 </td></tr>\n<tr>\n<td>downflow</td><td>下行数据量，单位字节 </td></tr>\n<tr>\n<td>volume</td><td>最近一次写入的音频的音量 </td></tr>\n</table>\n</td></tr>\n    <tr><td class=\"paramname\">paramValue[in/out]</td><td>输入:buffer首地址<br />\n输出:向该buffer写入获取到的信息 </td></tr>\n    <tr><td class=\"paramname\">valueLen[in/out]</td><td>输入:buffer的大小，valueLen大小需根据结果大小做调整<br />\n输出:<b>信息实际长度(不含’\\0’),长度需+1</b> </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>以查询上行流量为例，获取到的是本次识别当前累计的上行流量。下行流量查询与此相似。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">const char * para_name = \"sid\";\nchar para_value[33] = {'\\0'};\nunsigned int value_len = 33;\nint ret = QISRGetParam ( sessionID, para_name, para_value, &amp;value_len );\nif( MSP_SUCCESS != ret )\n{\n    printf( \"QISRGetParam failed, error code is: %d\", ret );\n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2e7880db4792266a4d1439238c0b2c1b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* MSPAPI QISRGetResult </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>rsltStatus</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>waitTime</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>errorCode</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>获取识别结果。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QISRSessionBegin返回的句柄。 </td></tr>\n    <tr><td class=\"paramname\">rsltStatus[out]</td><td>识别结果的状态,其取值范围和含义请参考QISRAudioWrite的参数recogStatus。 </td></tr>\n    <tr><td class=\"paramname\">waitTime[in]</td><td>此参数做保留用。 </td></tr>\n    <tr><td class=\"paramname\">errorCode[out]</td><td>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数执行成功且有识别结果时，返回结果字符串指针；其他情况(失败或无结果)返回NULL。</dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>当写入音频过程中已经有部分识别结果返回时，可以获取结果。在音频写入完毕后，用户需反复调用此接口，直到识别结果获取完毕（rlstStatus值为5）或返回错误码。<br />\n<b>注意：如果某次成功调用后暂未获得识别结果，请将当前线程sleep一段时间，以防频繁调用浪费CPU资源。</b></dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">char rslt_str[2048] ={'\\0'};\nconst char* rec_result = NULL;\nint rslt_status = 0;\nint ret = 0;\nwhile(MSP_REC_STATUS_COMPLETE != rslt_status )\n{\n    rec_result = QISRGetResult ( sessionID, &amp;rslt_status, 5000, &amp;ret );\n    if( MSP_SUCCESS != ret )\n    {\n        printf( \"QISRGetResult failed, error code is: %d\", ret );\n        break;\n    }\n    if( NULL != rec_result )\n    {\n        strcat( rslt_str, rec_result );//用户可以用其他的方式保存识别结果\n        continue;\n    }\n    //sleep一下很有必要,防止MSC端无缓存的识别结果时浪费CPU资源\n    Sleep( 200 );\n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aaec4a5779275e07c4f7405ed8d739416\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* MSPAPI QISRSessionBegin </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>grammarList</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>params</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>errorCode</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>开始一次语音识别。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">grammarList[in]</td><td>进行连续语音识别(sub=iat)时，此参数设为NULL。进行关键字、语法识别(sub=asr)时，上传方式如下： <table class=\"doxtable\">\n<tr>\n<th>类型 </th><th>说明  </th></tr>\n<tr>\n<td>关键词识别 </td><td>传入调用MSPUploadData接口上传关键词的返回值。关键词会永久生效。  </td></tr>\n<tr>\n<td>语法识别 </td><td>除上述方法外，也可在此处传入语法字符串指针，并在params参数中添加\"grammartype=abnf\"或\" grammartype=xml\"。<br />\n此方法仅在本次识别有效。 </td></tr>\n</table>\n</td></tr>\n    <tr><td class=\"paramname\">params[in]</td><td>本次识别参数，可设置的参数列表如下: <table class=\"doxtable\">\n<tr>\n<th>参数 </th><th>参数说明 </th><th>值  </th></tr>\n<tr>\n<td>sub </td><td>本次识别请求的类型 </td><td>iat:连续语音识别<br />\nasr:语法、关键词识别。默认为iat  </td></tr>\n<tr>\n<td>ptt </td><td>添加标点符号(<b>仅sub=iat时有效</b>) </td><td>0:无标点符号;1:有标点符号。默认为1  </td></tr>\n<tr>\n<td>sch </td><td>是否使用语义功能(<b>仅sub=iat时有效</b>) </td><td>0:不使用语义;1:使用语义。默认为0  </td></tr>\n<tr>\n<td>nlp_version </td><td>语义版本(<b>仅在使用语义功能时有效</b>) </td><td>1.0:老版本语义,返回结果为xml格式;2.0:新版本语义,场景比1.0支持的更多,返回结果为原生json,默认为1.0  </td></tr>\n<tr>\n<td>aue </td><td>音频编码格式和压缩等级 </td><td>编码算法：raw；speex；speex-wb；<br />\n编码等级：raw：无等级。speex系列：0-10；<br />\n默认为speex-wb;7<br />\n<b>speex对应sample_rate=8000<br />\nspeex-wb对应sample_rate=16000</b>  </td></tr>\n<tr>\n<td>sample_rate </td><td>音频格式 </td><td>8000<br />\n16000<br />\n默认为16000  </td></tr>\n<tr>\n<td>result_encoding </td><td>识别结果字符串所用编码格式 </td><td>gb2312;utf8;unicode<br />\n不同的格式支持不同的编码：<br />\nplain:utf8<br />\nxml:gb2312, utf8, unicode<br />\njson:utf8  </td></tr>\n<tr>\n<td>grammartype </td><td>语法类型(<b>仅sub=asr时有效</b>) </td><td>abnf<br />\nxml  </td></tr>\n<tr>\n<td>vad_bos </td><td>允许头部静音的最长时间 </td><td>0-10000毫秒。默认为1000<br />\n如果静音时长超过了此值，则认为用户此次无有效音频输入。此参数仅在打开VAD功能时有效。  </td></tr>\n<tr>\n<td>vad_eos </td><td>允许尾部静音的最长时间 </td><td>0-10000毫秒。默认为2000<br />\n如果尾部静音时长超过了此值，则认为用户音频已经结束，此参数仅在打开VAD功能时有效。  </td></tr>\n<tr>\n<td>result_type </td><td>识别结果格式 </td><td>sub=asr时：支持plain,xml,json<br />\nsub=iat时：支持plain,json  </td></tr>\n<tr>\n<td>domain </td><td>领域 </td><td>iat：连续语音识别<br />\nasr：语法、关键词识别<br />\nsearch：热词<br />\nvideo：视频<br />\npoi：地名<br />\nmusic：音乐<br />\n默认为iat。<br />\n<b>注意：sub=asr时，domain只能为asr</b> </td></tr>\n<tr>\n<td>language </td><td>语言 </td><td>zh_cn:简体中文<br />\nzh_tw:繁体中文<br />\nen_us:英语<br />\n默认为zh_cn  </td></tr>\n<tr>\n<td>accent </td><td>口音 </td><td>mandarin:普通话<br />\ncantonese:粤语<br />\n默认为mandarin  </td></tr>\n</table>\n<b>注意:没有默认值的参数必须由外部设定其值</b><br />\n </td></tr>\n    <tr><td class=\"paramname\">errorCode[out]</td><td>函数调用成功则其值为MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回字符串格式的sessionID，失败返回NULL。sessionID是本次识别的句柄。</dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>参数只在当次识别中生效。<br />\n<b>当使用连续语音识别(sub=iat)时，为了保证识别结果的个性化，可调用MSPUploadData接口上传联系人、用户词表。用法请参照MSPUploadData接口。</b></dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">const char * params = \"sub=iat,aue=speex-wb;7,result_type=plain,result_encoding=utf8,language=zh_cn,\n                      accent=mandarin,sample_rate=16000,domain=music,vad_bos=1000,vad_eos=1000\";\nint    ret = 0;\nconst char* sessionID = QISRSessionBegin( NULL, params, &amp;ret );\nif( MSP_SUCCESS != ret )\n{\n    printf( \"QISRSessionBegin failed, error code is: %d\", ret );\n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab50c4114e032100c4093ddd51329fecc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI QISRSessionEnd </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>hints</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>结束本次语音识别。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QISRSessionBegin返回的句柄。 </td></tr>\n    <tr><td class=\"paramname\">hints[in]</td><td>结束本次语音识别的原因描述，为用户自定义内容。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>本接口和QISRSessionBegin对应,调用此接口后，该句柄对应的相关资源（参数、语法、音频、实例等）都会被释放，用户不应再使用该句柄。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">int ret = QISRSessionEnd ( sessionID, \"normal end\" );\nif( MSP_SUCCESS != ret )\n{\n    printf( \"QISRSessionEnd failed, error code is: %d\", ret );\n}\nsessionID = NULL;</pre> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/qisr_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: qisr.h 源文件</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">qisr.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"qisr_8h.html\">浏览该文件的文档.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* MSPAPI <a class=\"code\" href=\"qisr_8h.html#aaec4a5779275e07c4f7405ed8d739416\">QISRSessionBegin</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* grammarList, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* params, <span class=\"keywordtype\">int</span>* errorCode);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"qisr_8h.html#a47fd2588fe834fa2d51fef1961d7aef4\">QISRAudioWrite</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keyword\">const</span> <span class=\"keywordtype\">void</span>* waveData, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> waveLen, <span class=\"keywordtype\">int</span> audioStatus, <span class=\"keywordtype\">int</span> *epStatus, <span class=\"keywordtype\">int</span> *recogStatus);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> * MSPAPI <a class=\"code\" href=\"qisr_8h.html#a2e7880db4792266a4d1439238c0b2c1b\">QISRGetResult</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keywordtype\">int</span>* rsltStatus, <span class=\"keywordtype\">int</span> waitTime, <span class=\"keywordtype\">int</span> *errorCode);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"qisr_8h.html#ab50c4114e032100c4093ddd51329fecc\">QISRSessionEnd</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* hints);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"qisr_8h.html#a2081e3cad9a8155c15790a2476be7044\">QISRGetParam</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* paramName, <span class=\"keywordtype\">char</span>* paramValue, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>* valueLen);</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;</div>\n<div class=\"ttc\" id=\"qisr_8h_html_ab50c4114e032100c4093ddd51329fecc\"><div class=\"ttname\"><a href=\"qisr_8h.html#ab50c4114e032100c4093ddd51329fecc\">QISRSessionEnd</a></div><div class=\"ttdeci\">int MSPAPI QISRSessionEnd(const char *sessionID, const char *hints)</div><div class=\"ttdoc\">结束本次语音识别。 </div></div>\n<div class=\"ttc\" id=\"qisr_8h_html_aaec4a5779275e07c4f7405ed8d739416\"><div class=\"ttname\"><a href=\"qisr_8h.html#aaec4a5779275e07c4f7405ed8d739416\">QISRSessionBegin</a></div><div class=\"ttdeci\">const char *MSPAPI QISRSessionBegin(const char *grammarList, const char *params, int *errorCode)</div><div class=\"ttdoc\">开始一次语音识别。 </div></div>\n<div class=\"ttc\" id=\"qisr_8h_html_a2e7880db4792266a4d1439238c0b2c1b\"><div class=\"ttname\"><a href=\"qisr_8h.html#a2e7880db4792266a4d1439238c0b2c1b\">QISRGetResult</a></div><div class=\"ttdeci\">const char *MSPAPI QISRGetResult(const char *sessionID, int *rsltStatus, int waitTime, int *errorCode)</div><div class=\"ttdoc\">获取识别结果。 </div></div>\n<div class=\"ttc\" id=\"qisr_8h_html_a47fd2588fe834fa2d51fef1961d7aef4\"><div class=\"ttname\"><a href=\"qisr_8h.html#a47fd2588fe834fa2d51fef1961d7aef4\">QISRAudioWrite</a></div><div class=\"ttdeci\">int MSPAPI QISRAudioWrite(const char *sessionID, const void *waveData, unsigned int waveLen, int audioStatus, int *epStatus, int *recogStatus)</div><div class=\"ttdoc\">写入本次识别的音频。 </div></div>\n<div class=\"ttc\" id=\"qisr_8h_html_a2081e3cad9a8155c15790a2476be7044\"><div class=\"ttname\"><a href=\"qisr_8h.html#a2081e3cad9a8155c15790a2476be7044\">QISRGetParam</a></div><div class=\"ttdeci\">int MSPAPI QISRGetParam(const char *sessionID, const char *paramName, char *paramValue, unsigned int *valueLen)</div><div class=\"ttdoc\">获取当次语音识别信息，如上行流量、下行流量等。 </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/qmfv_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: qmfv.h 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">函数</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">qmfv.h 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>iFLY Speech Recognizer Header File  \n<a href=\"#details\">更多...</a></p>\n\n<p><a href=\"qmfv_8h_source.html\">浏览源代码.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\n函数</h2></td></tr>\n<tr class=\"memitem:adbe23b402d4c50b4c06f47ca26253be5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qmfv_8h.html#adbe23b402d4c50b4c06f47ca26253be5\">QMFVSessionBegin</a> (const char *params, int *errorCode)</td></tr>\n<tr class=\"memdesc:adbe23b402d4c50b4c06f47ca26253be5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">开始一次身份验证。  <a href=\"#adbe23b402d4c50b4c06f47ca26253be5\">更多...</a><br /></td></tr>\n<tr class=\"separator:adbe23b402d4c50b4c06f47ca26253be5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a081a01b2add2dfac3010ec7cd8ba5eac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qmfv_8h.html#a081a01b2add2dfac3010ec7cd8ba5eac\">QMFVDataWrite</a> (const char *sessionID, const char *params, const void *data, unsigned int dataLen, int *resultStatus)</td></tr>\n<tr class=\"memdesc:a081a01b2add2dfac3010ec7cd8ba5eac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">写入本次身份验证的数据。  <a href=\"#a081a01b2add2dfac3010ec7cd8ba5eac\">更多...</a><br /></td></tr>\n<tr class=\"separator:a081a01b2add2dfac3010ec7cd8ba5eac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa87716ad6b28326982626c0c6a6ffcbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const void *MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qmfv_8h.html#aa87716ad6b28326982626c0c6a6ffcbd\">QMFVGetResult</a> (const char *sessionID, unsigned int *resultLen, int *resultStatus, int *errorCode)</td></tr>\n<tr class=\"memdesc:aa87716ad6b28326982626c0c6a6ffcbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">获取身份验证结果。  <a href=\"#aa87716ad6b28326982626c0c6a6ffcbd\">更多...</a><br /></td></tr>\n<tr class=\"separator:aa87716ad6b28326982626c0c6a6ffcbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7174d943c2f1691f6a8c717429d43f8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qmfv_8h.html#a7174d943c2f1691f6a8c717429d43f8d\">QMFVGetParam</a> (const char *sessionID, const char *paramName, char *paramValue, unsigned int *valueLen)</td></tr>\n<tr class=\"memdesc:a7174d943c2f1691f6a8c717429d43f8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">获取当次身份验证信息，如上行流量、下行流量等。  <a href=\"#a7174d943c2f1691f6a8c717429d43f8d\">更多...</a><br /></td></tr>\n<tr class=\"separator:a7174d943c2f1691f6a8c717429d43f8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad4ea72dd39285348cf26c627d67c6b65\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qmfv_8h.html#ad4ea72dd39285348cf26c627d67c6b65\">QMFVSessionEnd</a> (const char *sessionID, const char *hints)</td></tr>\n<tr class=\"memdesc:ad4ea72dd39285348cf26c627d67c6b65\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">结束本次身份验证。  <a href=\"#ad4ea72dd39285348cf26c627d67c6b65\">更多...</a><br /></td></tr>\n<tr class=\"separator:ad4ea72dd39285348cf26c627d67c6b65\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">详细描述</h2>\n<div class=\"textblock\"><p>iFLY Speech Recognizer Header File </p>\n<p>This file contains the quick application programming interface (API) declarations of MFV. Developer can include this file in your project to build applications. For more information, please read the developer guide.</p>\n<p>Use of this software is subject to certain restrictions and limitations set forth in a license agreement entered into between iFLYTEK, Co,LTD. and the licensee of this software. Please refer to the license agreement for license use rights and restrictions.</p>\n<p>Copyright (C) 1999 - 2015 by iFLYTEK, Co,LTD. All rights reserved.</p>\n<dl class=\"section author\"><dt>作者</dt><dd>MSC </dd></dl>\n<dl class=\"section version\"><dt>版本</dt><dd>5.0 </dd></dl>\n<dl class=\"section date\"><dt>日期</dt><dd>2015/02/10</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd></dd></dl>\n<p><b>History:</b><br />\n </p><table class=\"doxtable\">\n<tr>\n<th>Version </th><th>Date </th><th>Author </th><th>Notes </th></tr>\n<tr>\n<td>5.0 </td><td>2015/02/10 </td><td>MSC </td><td>Create this file </td></tr>\n</table>\n</div><h2 class=\"groupheader\">函数说明</h2>\n<a class=\"anchor\" id=\"a081a01b2add2dfac3010ec7cd8ba5eac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI QMFVDataWrite </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>params</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const void *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>resultStatus</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>写入本次身份验证的数据。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QMFVSessionBegin返回的句柄。 </td></tr>\n    <tr><td class=\"paramname\">params[in]</td><td>传入的参数列表，支持以下参数： <table class=\"doxtable\">\n<tr>\n<th>应用领域 </th><th>参数 </th><th>参数说明 </th><th>值  </th></tr>\n<tr>\n<td>通用 </td><td>data_status </td><td>数据当前状态 </td><td>1：第一块数据<br />\n2：追加数据(后继数据)<br />\n4：最后一块数据<br />\n无默认值  </td></tr>\n<tr>\n<td>通用 </td><td>ssub </td><td>子业务类型，如：声纹、人脸、指纹、虹膜 </td><td>ivp: 声纹业务<br />\nifr：人脸业务<br />\n无默认值  </td></tr>\n<tr>\n<td>人脸业务(ssub=ifr)</td><td>sst</td><td>会话类型,描述不同人脸功能</td><td>enroll:注册<br />\nverify:确认<br />\ndelete:删除模型<br />\n无默认值  </td></tr>\n<tr>\n<td>人脸业务(ssub=ifr)</td><td>data_format</td><td>图片数据格式</td><td>jpg(默认值)<br />\npng<br />\nbmp  </td></tr>\n<tr>\n<td>人脸业务(ssub=ifr)</td><td>data_encoding</td><td>图片数据压缩编码</td><td>raw(默认值),MSC不对传入的图片数据进行压缩 </td></tr>\n<tr>\n<td>声纹业务(ssub=ivp)</td><td>sst</td><td>会话类型,描述不同声纹功能</td><td>enroll:注册<br />\nverify:确认<br />\ndelete:删除模型<br />\nquery:查询<br />\ndownload:下载<br />\n<b>删除，查询，下载不需要QMFVDataWrite写入数据，data = NULL，datalen = 0即可</b><br />\n无默认值  </td></tr>\n<tr>\n<td>声纹业务(ssub=ivp)</td><td>rgn</td><td>注册时表示注册所需的音频条数<br />\n数字密码下载时表示数字串的数目</td><td>[2,9]<br />\n无默认值 </td></tr>\n<tr>\n<td>声纹业务(ssub=ivp)</td><td>ptxt</td><td>指定声纹密码训练时使用的声纹密码内容</td><td>从服务端下载，比如数字密码所需的数字串,&lt;bt&gt;无默认值 </td></tr>\n<tr>\n<td>声纹业务(ssub=ivp)</td><td>pwdt</td><td>指定声纹密码训练时使用的声纹密码类型</td><td>1:文本密码<br />\n2:自由说<br />\n3:数字密码<br />\n无默认值 </td></tr>\n<tr>\n<td>声纹业务(ssub=ivp)</td><td>fin</td><td>取消本次注册</td><td>0或false(默认值):不取消<br />\n 1或true:取消本次注册  </td></tr>\n<tr>\n<td>声纹业务(ssub=ivp)</td><td>vad_enable</td><td>是否启用VAD处理</td><td>0或false:不开启<br />\n1或true(默认值):开启 </td></tr>\n<tr>\n<td>声纹业务(ssub=ivp)</td><td>vad_bos</td><td>如果头部静音长度超过了此值，则认为用户此次无有效音频输入。此参数仅在打开VAD功能时有效。</td><td>[0,30000]<br />\n默认值10000ms </td></tr>\n<tr>\n<td>声纹业务(ssub=ivp)</td><td>vad_eos</td><td>如果尾部静音长度超过了此值，则认为用户音频已经结束，此参数仅在打开VAD功能时有效。</td><td>[0,30000]<br />\n默认值2000ms </td></tr>\n<tr>\n<td>声纹业务(ssub=ivp)</td><td>data_format</td><td>在声纹业务中作为音频采样率</td><td>16000(默认值)<br />\n8000 </td></tr>\n<tr>\n<td>声纹业务(ssub=ivp)</td><td>data_encoding</td><td>音频编码格式和压缩等级</td><td>编码算法：raw；speex；speex-wb；<br />\n编码等级：raw：无等级。speex系列：0-10；<br />\n默认为speex-wb;7<br />\n<b>speex对应sample_rate=8000<br />\nspeex-wb对应sample_rate=16000</b>  </td></tr>\n</table>\n<b>注意:没有默认值的参数必须由外部设定其值</b><br />\n </td></tr>\n    <tr><td class=\"paramname\">data[in]</td><td>身份验证数据缓冲区起始地址。 </td></tr>\n    <tr><td class=\"paramname\">dataLen[in]</td><td>身份验证数据长度,单位字节。 </td></tr>\n    <tr><td class=\"paramname\">resultStatus[out]</td><td>识别器返回的状态，提醒用户及时开始\\停止获取识别结果。典型值如下： <table class=\"doxtable\">\n<tr>\n<th>枚举常量 </th><th>描述  </th></tr>\n<tr>\n<td>MSP_REC_STATUS_SUCCESS = 0 </td><td>身份验证成功，有结果返回  </td></tr>\n<tr>\n<td>MSP_REC_STATUS_NO_MATCH = 1 </td><td>身份验证结束，没有结果  </td></tr>\n<tr>\n<td>MSP_REC_STATUS_INCOMPLETE = 2 </td><td>正在身份验证  </td></tr>\n<tr>\n<td>MSP_REC_STATUS_COMPLETE = 5 </td><td>身份验证结束，有结果返回  </td></tr>\n</table>\n</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd></dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a7174d943c2f1691f6a8c717429d43f8d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI QMFVGetParam </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>paramName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>paramValue</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int *&#160;</td>\n          <td class=\"paramname\"><em>valueLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>获取当次身份验证信息，如上行流量、下行流量等。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QMFVSessionEnd返回的句柄，如果为NULL，获取MSC的设置信息。 </td></tr>\n    <tr><td class=\"paramname\">paramName[in]</td><td>参数名，一次调用只支持查询一个参数。参数如下： <table class=\"doxtable\">\n<tr>\n<th>参数</th><th>描述 </th></tr>\n<tr>\n<td>sid</td><td>服务端会话ID，长度为32字节 </td></tr>\n<tr>\n<td>upflow</td><td>上行数据量，单位字节 </td></tr>\n<tr>\n<td>downflow</td><td>下行数据量，单位字节 </td></tr>\n<tr>\n<td>ivp_sret</td><td>声纹错误码，长度为6字节 </td></tr>\n<tr>\n<td>ifr_sret</td><td>人脸错误码，长度为6字节 </td></tr>\n<tr>\n<td>volume</td><td>最近一次写入的音频的音量 </td></tr>\n</table>\n</td></tr>\n    <tr><td class=\"paramname\">paramValue[in/out]</td><td>输入:buffer首地址<br />\n输出:向该buffer写入获取到的信息 </td></tr>\n    <tr><td class=\"paramname\">valueLen[in/out]</td><td>输入:buffer的大小，valueLen大小需根据结果大小做调整<br />\n输出:<b>信息实际长度(不含’\\0’),长度需+1</b> </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>以查询上行流量为例，获取到的是本次身份验证当前累计的上行流量。下行流量查询与此相似。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">const char * para_name = \"sid\";\nchar para_value[33] = {'\\0'};\nunsigned int value_len = 33;\nint ret = QMFVGetParam ( sessionID, para_name, para_value, &amp;value_len );\nif( MSP_SUCCESS != ret )\n{\n    printf( \"QMFVGetParam failed, error code is: %d\", ret );\n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa87716ad6b28326982626c0c6a6ffcbd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const void* MSPAPI QMFVGetResult </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int *&#160;</td>\n          <td class=\"paramname\"><em>resultLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>resultStatus</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>errorCode</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>获取身份验证结果。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QMFVSessionBegin返回的句柄。 </td></tr>\n    <tr><td class=\"paramname\">resultLen[out]</td><td>身份验证结果的长度。 </td></tr>\n    <tr><td class=\"paramname\">resultStatus[out]</td><td>身份验证结果的状态,其取值范围和含义请参考QMFVAudioWrite的参数resultStatus。 </td></tr>\n    <tr><td class=\"paramname\">errorCode[out]</td><td>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数执行成功且有身份验证结果时，返回结果字符串指针；其他情况(失败或无结果)返回NULL。 </dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>当删除人脸模型时，不会有结果返回，当删除声纹时，如果删除成功会返回“true”。 </dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd></dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"adbe23b402d4c50b4c06f47ca26253be5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* MSPAPI QMFVSessionBegin </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>params</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>errorCode</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>开始一次身份验证。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">params[in]</td><td>传入的参数列表，支持以下参数： <table class=\"doxtable\">\n<tr>\n<th>参数 </th><th>参数说明 </th><th>值  </th></tr>\n<tr>\n<td>sub </td><td>请求业务类型 </td><td>mfv  </td></tr>\n<tr>\n<td>scene_mode </td><td>场景参数，仅在mfv业务下使用 </td><td>gen：通用场景(注册、查询、删除)<br />\nvfy：融合验证场景<br />\n无默认值  </td></tr>\n<tr>\n<td>vcm </td><td>融合验证模式，仅在融合验证场景下使用</td><td>sin：single，单一生物特征数据验证 <br />\nmix：mix，混合生物特征数据验证,一次sessionbegin <br />\n agi：agility，灵活生物特征数据验证，用户可以在设定的生命周期内至少进行一种生物特征数据的验证，可根据实际情况灵活调整,一次特征验证调用一次sessionbegin。<br />\n无默认值  </td></tr>\n<tr>\n<td>scenes </td><td>特征场景,用来说明本次会话涉及的子业务</td><td>ivp,ifr,ivp|ifr(或者ifr|ivp)<br />\n<b>两个场景都存在时:1.写入数据的顺序要与场景顺序一致,2.删除或混合注册时，一个场景业务失败不会影响另一个,无默认值</b>  </td></tr>\n<tr>\n<td>afc </td><td>确认周期（affirmance cycle）,用户设置的确认超时时间，仅在灵活融合验证（vcm=agi），场景特征为scenes=ifr|ivp或ifr|ivp下使用 </td><td>0~43200<br />\n无默认值  </td></tr>\n</table>\n<b>注意:没有默认值的参数必须由外部设定其值</b><br />\n </td></tr>\n    <tr><td class=\"paramname\">errorCode[out]</td><td>函数调用成功则其值为MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回字符串格式的sessionID，失败返回NULL。sessionID是本次识别的句柄。 </dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd><b>调用mfv业务需要注意，MSPLogin接口需要传入auth_id</b> </dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd></dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad4ea72dd39285348cf26c627d67c6b65\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI QMFVSessionEnd </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>hints</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>结束本次身份验证。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QMFVSessionBegin返回的句柄。 </td></tr>\n    <tr><td class=\"paramname\">hints[in]</td><td>结束本次身份验证的原因描述，为用户自定义内容。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>本接口和QMFVSessionBegin对应,调用此接口后，该句柄对应的相关资源（参数、语法、音频、实例等）都会被释放，用户不应再使用该句柄。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">int ret = QMFVSessionEnd ( sessionID, \"normal end\" );\nif( MSP_SUCCESS != ret )\n{\n    printf( \"QMFVSessionEnd failed, error code is: %d\", ret );\n}\nsessionID = NULL;</pre> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/qmfv_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: qmfv.h 源文件</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">qmfv.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"qmfv_8h.html\">浏览该文件的文档.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* MSPAPI <a class=\"code\" href=\"qmfv_8h.html#adbe23b402d4c50b4c06f47ca26253be5\">QMFVSessionBegin</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* params, <span class=\"keywordtype\">int</span>* errorCode);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"qmfv_8h.html#a081a01b2add2dfac3010ec7cd8ba5eac\">QMFVDataWrite</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* params, <span class=\"keyword\">const</span> <span class=\"keywordtype\">void</span>* data, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> dataLen, <span class=\"keywordtype\">int</span> *resultStatus);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">void</span> * MSPAPI <a class=\"code\" href=\"qmfv_8h.html#aa87716ad6b28326982626c0c6a6ffcbd\">QMFVGetResult</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>* resultLen, <span class=\"keywordtype\">int</span>* resultStatus, <span class=\"keywordtype\">int</span> *errorCode);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"qmfv_8h.html#a7174d943c2f1691f6a8c717429d43f8d\">QMFVGetParam</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* paramName, <span class=\"keywordtype\">char</span>* paramValue, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>* valueLen);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"qmfv_8h.html#ad4ea72dd39285348cf26c627d67c6b65\">QMFVSessionEnd</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* hints);</div>\n<div class=\"ttc\" id=\"qmfv_8h_html_ad4ea72dd39285348cf26c627d67c6b65\"><div class=\"ttname\"><a href=\"qmfv_8h.html#ad4ea72dd39285348cf26c627d67c6b65\">QMFVSessionEnd</a></div><div class=\"ttdeci\">int MSPAPI QMFVSessionEnd(const char *sessionID, const char *hints)</div><div class=\"ttdoc\">结束本次身份验证。 </div></div>\n<div class=\"ttc\" id=\"qmfv_8h_html_adbe23b402d4c50b4c06f47ca26253be5\"><div class=\"ttname\"><a href=\"qmfv_8h.html#adbe23b402d4c50b4c06f47ca26253be5\">QMFVSessionBegin</a></div><div class=\"ttdeci\">const char *MSPAPI QMFVSessionBegin(const char *params, int *errorCode)</div><div class=\"ttdoc\">开始一次身份验证。 </div></div>\n<div class=\"ttc\" id=\"qmfv_8h_html_a081a01b2add2dfac3010ec7cd8ba5eac\"><div class=\"ttname\"><a href=\"qmfv_8h.html#a081a01b2add2dfac3010ec7cd8ba5eac\">QMFVDataWrite</a></div><div class=\"ttdeci\">int MSPAPI QMFVDataWrite(const char *sessionID, const char *params, const void *data, unsigned int dataLen, int *resultStatus)</div><div class=\"ttdoc\">写入本次身份验证的数据。 </div></div>\n<div class=\"ttc\" id=\"qmfv_8h_html_a7174d943c2f1691f6a8c717429d43f8d\"><div class=\"ttname\"><a href=\"qmfv_8h.html#a7174d943c2f1691f6a8c717429d43f8d\">QMFVGetParam</a></div><div class=\"ttdeci\">int MSPAPI QMFVGetParam(const char *sessionID, const char *paramName, char *paramValue, unsigned int *valueLen)</div><div class=\"ttdoc\">获取当次身份验证信息，如上行流量、下行流量等。 </div></div>\n<div class=\"ttc\" id=\"qmfv_8h_html_aa87716ad6b28326982626c0c6a6ffcbd\"><div class=\"ttname\"><a href=\"qmfv_8h.html#aa87716ad6b28326982626c0c6a6ffcbd\">QMFVGetResult</a></div><div class=\"ttdeci\">const void *MSPAPI QMFVGetResult(const char *sessionID, unsigned int *resultLen, int *resultStatus, int *errorCode)</div><div class=\"ttdoc\">获取身份验证结果。 </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/qtts_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: qtts.h 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">函数</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">qtts.h 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>iFLY Speech Synthesizer Header File  \n<a href=\"#details\">更多...</a></p>\n\n<p><a href=\"qtts_8h_source.html\">浏览源代码.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\n函数</h2></td></tr>\n<tr class=\"memitem:a3fba4ad9599445073335851cc9479542\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qtts_8h.html#a3fba4ad9599445073335851cc9479542\">QTTSSessionBegin</a> (const char *params, int *errorCode)</td></tr>\n<tr class=\"memdesc:a3fba4ad9599445073335851cc9479542\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">开始一次语音合成，分配语音合成资源。  <a href=\"#a3fba4ad9599445073335851cc9479542\">更多...</a><br /></td></tr>\n<tr class=\"separator:a3fba4ad9599445073335851cc9479542\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5b7d146d6a35341d4d73efd720ae987b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qtts_8h.html#a5b7d146d6a35341d4d73efd720ae987b\">QTTSTextPut</a> (const char *sessionID, const char *textString, unsigned int textLen, const char *params)</td></tr>\n<tr class=\"memdesc:a5b7d146d6a35341d4d73efd720ae987b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">写入待合成的文本。  <a href=\"#a5b7d146d6a35341d4d73efd720ae987b\">更多...</a><br /></td></tr>\n<tr class=\"separator:a5b7d146d6a35341d4d73efd720ae987b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4e4f6bed4b9e4ea553aa00ccf539c22a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const void *MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qtts_8h.html#a4e4f6bed4b9e4ea553aa00ccf539c22a\">QTTSAudioGet</a> (const char *sessionID, unsigned int *audioLen, int *synthStatus, int *errorCode)</td></tr>\n<tr class=\"memdesc:a4e4f6bed4b9e4ea553aa00ccf539c22a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">获取合成音频。  <a href=\"#a4e4f6bed4b9e4ea553aa00ccf539c22a\">更多...</a><br /></td></tr>\n<tr class=\"separator:a4e4f6bed4b9e4ea553aa00ccf539c22a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0812612ff738a828490e4e3db59767e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qtts_8h.html#a0812612ff738a828490e4e3db59767e8\">QTTSGetParam</a> (const char *sessionID, const char *paramName, char *paramValue, unsigned int *valueLen)</td></tr>\n<tr class=\"memdesc:a0812612ff738a828490e4e3db59767e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">获取当前语音合成信息，如当前合成音频对应文本结束位置、上行流量、下行流量等。  <a href=\"#a0812612ff738a828490e4e3db59767e8\">更多...</a><br /></td></tr>\n<tr class=\"separator:a0812612ff738a828490e4e3db59767e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a75d5047a2a889dbd890d116a6d0b550a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int MSPAPI&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"qtts_8h.html#a75d5047a2a889dbd890d116a6d0b550a\">QTTSSessionEnd</a> (const char *sessionID, const char *hints)</td></tr>\n<tr class=\"memdesc:a75d5047a2a889dbd890d116a6d0b550a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">结束本次语音合成。  <a href=\"#a75d5047a2a889dbd890d116a6d0b550a\">更多...</a><br /></td></tr>\n<tr class=\"separator:a75d5047a2a889dbd890d116a6d0b550a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">详细描述</h2>\n<div class=\"textblock\"><p>iFLY Speech Synthesizer Header File </p>\n<p>This file contains the quick application programming interface (API) declarations of TTS. Developer can include this file in your project to build applications. For more information, please read the developer guide.</p>\n<p>Use of this software is subject to certain restrictions and limitations set forth in a license agreement entered into between iFLYTEK, Co,LTD. and the licensee of this software. Please refer to the license agreement for license use rights and restrictions.</p>\n<p>Copyright (C) 1999 - 2015 by iFLYTEK, Co,LTD. All rights reserved.</p>\n<dl class=\"section author\"><dt>作者</dt><dd>MSC </dd></dl>\n<dl class=\"section version\"><dt>版本</dt><dd>5.0 </dd></dl>\n<dl class=\"section date\"><dt>日期</dt><dd>2015/03/19</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd></dd></dl>\n<p><b>History:</b><br />\n </p><table class=\"doxtable\">\n<tr>\n<th>Version </th><th>Date </th><th>Author </th><th>Notes </th></tr>\n<tr>\n<td>5.0 </td><td>2015/03/19 </td><td>MSC </td><td>Create this file </td></tr>\n</table>\n</div><h2 class=\"groupheader\">函数说明</h2>\n<a class=\"anchor\" id=\"a4e4f6bed4b9e4ea553aa00ccf539c22a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const void* MSPAPI QTTSAudioGet </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int *&#160;</td>\n          <td class=\"paramname\"><em>audioLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>synthStatus</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>errorCode</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>获取合成音频。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QTTSSessionBegin返回的句柄。 </td></tr>\n    <tr><td class=\"paramname\">audioLen[out]</td><td>合成音频长度,单位字节。 </td></tr>\n    <tr><td class=\"paramname\">synthStatus[out]</td><td>合成音频状态,可能的值如下： <table class=\"doxtable\">\n<tr>\n<th>枚举常量 </th><th>描述  </th></tr>\n<tr>\n<td>MSP_TTS_FLAG_STILL_HAVE_DATA = 1 </td><td>音频未取完，还有后继音频  </td></tr>\n<tr>\n<td>MSP_TTS_FLAG_DATA_END = 2 </td><td>音频已经取完  </td></tr>\n</table>\n</td></tr>\n    <tr><td class=\"paramname\">errorCode[out]</td><td>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功且有音频数据时返回非空指针。调用失败或无音频数据时，返回NULL。</dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>用户需要反复获取音频，直到音频获取完毕或函数调用失败。在重复获取音频时，如果暂未获得音频数据，需要将当前线程sleep一段时间，以防频繁调用浪费CPU资源。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">FILE* fp = fopen(\"tts.pcm\", \"wb\");\nwhile (1)\n{\n    const void * data = QTTSAudioGet(sessionID, &amp;audio_len, &amp;synth_status, &amp;ret);\n    if (NULL != data)\n    {\n        fwrite(data, audio_len, 1, fp);\n    }\n    if (MSP_TTS_FLAG_DATA_END == synth_status || MSP_SUCCESS != ret)\n    {\n        break;\n    }\n}\nfclose(fp);\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0812612ff738a828490e4e3db59767e8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI QTTSGetParam </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>paramName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>paramValue</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int *&#160;</td>\n          <td class=\"paramname\"><em>valueLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>获取当前语音合成信息，如当前合成音频对应文本结束位置、上行流量、下行流量等。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QTTSSessionBegin返回的句柄，如果为NULL，获取MSC的设置信息。 </td></tr>\n    <tr><td class=\"paramname\">paramName[in]</td><td>参数名，一次调用只支持查询一个参数。参数如下： <table class=\"doxtable\">\n<tr>\n<th>参数</th><th>描述 </th></tr>\n<tr>\n<td>sid</td><td>服务端会话ID，长度为32字节 </td></tr>\n<tr>\n<td>upflow</td><td>上行数据量，单位字节 </td></tr>\n<tr>\n<td>downflow</td><td>下行数据量，单位字节 </td></tr>\n<tr>\n<td>volume</td><td>最近一次写入的音频的音量 </td></tr>\n<tr>\n<td>ced</td><td>当前合成音频对应文本结束位置 </td></tr>\n</table>\n</td></tr>\n    <tr><td class=\"paramname\">paramValue[in/out]</td><td>输入:buffer首地址<br />\n输出:向该buffer写入获取到的信息 </td></tr>\n    <tr><td class=\"paramname\">valueLen[in/out]</td><td>输入:buffer的大小，valueLen大小需根据结果大小做调整<br />\n输出:<b>信息实际长度(不含’\\0’),长度需+1</b> </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。</dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>以查询上行流量为例，获取到的是本次合成当前累计的上行流量。下行流量查询与此相似。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">const char * para_name = \"sid\";\nchar para_value[33] = {'\\0'};\nunsigned int value_len = 33;\nint ret = QTTSGetParam ( sessionID, para_name, para_value, &amp;value_len );\nif( MSP_SUCCESS != ret )\n{\n    printf( “QTTSGetParam failed, error code is: %d”, ret );\n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3fba4ad9599445073335851cc9479542\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* MSPAPI QTTSSessionBegin </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>params</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&#160;</td>\n          <td class=\"paramname\"><em>errorCode</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>开始一次语音合成，分配语音合成资源。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">params[in]</td><td>传入的参数列表，支持以下参数： <table class=\"doxtable\">\n<tr>\n<th>参数 </th><th>参数说明 </th><th>值  </th></tr>\n<tr>\n<td>voice_name </td><td>发音人。如男声、女声、童声等。 </td><td>详见《发音人》列表  </td></tr>\n<tr>\n<td>speed </td><td>合成音频语速 </td><td>0-100之间的整数，数值越大语速越快。默认为50  </td></tr>\n<tr>\n<td>volume </td><td>合成音频音量 </td><td>0-100之间的整数，数值越大音量越大。默认为50  </td></tr>\n<tr>\n<td>pitch </td><td>合成音频音调 </td><td>0-100之间的整数，数值越大音调越高。默认为50  </td></tr>\n<tr>\n<td>text_encoding </td><td>合成文本编码 </td><td>GB2312；GBK；BIG5；UNICODE；GB18030；UTF8  </td></tr>\n<tr>\n<td>background_sound </td><td>合成音频中的背景音 </td><td>0：无背景音乐 1：有背景音乐。默认为0  </td></tr>\n<tr>\n<td>aue </td><td>音频编码格式和压缩等级 </td><td>编码算法：raw；speex；speex-wb；<br />\n编码等级：raw：无等级。speex系列：0-10；<br />\n默认为speex-wb;7<br />\n<b>speex对应sample_rate=8000<br />\nspeex-wb对应sample_rate=16000</b>  </td></tr>\n<tr>\n<td>sample_rate </td><td>合成音频格式 </td><td>8000<br />\n16000<br />\n默认为16000  </td></tr>\n<tr>\n<td>ttp </td><td>合成文本类型 </td><td>text: 普通格式文本；ssml：ssml格式文本。默认为text  </td></tr>\n<tr>\n<td>rdn </td><td>合成音频数字发音 </td><td>0：数值优先,1：完全数值,2：完全字符串，3：字符串优先。<br />\n默认为0  </td></tr>\n</table>\n<b>注意:没有默认值的参数必须由外部设定其值</b><br />\n <b>发音人列表:</b><br />\n <table class=\"doxtable\">\n<tr>\n<th>发音人 </th><th>参数名称 </th><th>语种/方言 </th><th>音色 </th></tr>\n<tr>\n<td>小燕 </td><td>xiaoyan </td><td>普通话 </td><td>青年女声 </td></tr>\n<tr>\n<td>燕平 </td><td>yanping </td><td>普通话 </td><td>青年女声 </td></tr>\n<tr>\n<td>宇峰 </td><td>yufeng </td><td>普通话 </td><td>青年男声 </td></tr>\n<tr>\n<td>晓婧 </td><td>jinger </td><td>普通话 </td><td>青年女声 </td></tr>\n<tr>\n<td>唐老鸭 </td><td>donaldduck </td><td>普通话 </td><td>卡通 </td></tr>\n<tr>\n<td>许小宝 </td><td>babyxu </td><td>普通话 </td><td>童声 </td></tr>\n<tr>\n<td>楠楠 </td><td>nannan </td><td>普通话 </td><td>童声 </td></tr>\n<tr>\n<td>晓梦 </td><td>xiaomeng </td><td>普通话 </td><td>青年女声 </td></tr>\n<tr>\n<td>晓琳 </td><td>xiaolin </td><td>台湾普通话 </td><td>青年女声 </td></tr>\n<tr>\n<td>晓倩 </td><td>xiaoqian </td><td>东北话 </td><td>青年女声 </td></tr>\n<tr>\n<td>晓蓉 </td><td>xiaorong </td><td>四川话 </td><td>青年女声 </td></tr>\n<tr>\n<td>小坤 </td><td>xiaokun </td><td>河南话 </td><td>青年男声 </td></tr>\n<tr>\n<td>小强 </td><td>xiaoqiang </td><td>湖南话 </td><td>青年男声 </td></tr>\n<tr>\n<td>晓美 </td><td>xiaomei </td><td>粤语 </td><td>青年女声 </td></tr>\n<tr>\n<td>大龙 </td><td>dalong </td><td>粤语 </td><td>青年男声 </td></tr>\n<tr>\n<td>Catherine </td><td>catherine </td><td>美式纯英文 </td><td>青年女声 </td></tr>\n<tr>\n<td>John </td><td>john </td><td>美式纯英文 </td><td>青年男声 </td></tr>\n<tr>\n<td>henry </td><td>henry </td><td>英文 </td><td>青年男声 </td></tr>\n<tr>\n<td>玛丽安 </td><td>Mariane </td><td>法语 </td><td>青年女声 </td></tr>\n<tr>\n<td>阿拉本 </td><td>Allabent </td><td>俄罗斯语 </td><td>青年女声 </td></tr>\n<tr>\n<td>加芙列拉 </td><td>Gabriela </td><td>西班牙语 </td><td>青年女声 </td></tr>\n<tr>\n<td>艾伯哈 </td><td>Abha </td><td>印地语 </td><td>青年女声 </td></tr>\n<tr>\n<td>小云 </td><td>XiaoYun </td><td>越南语 </td><td>青年女声 </td></tr>\n</table>\n</td></tr>\n    <tr><td class=\"paramname\">errorCode[out]</td><td>调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回字符串格式的sessionID，失败返回NULL。sessionID是本次合成的句柄。</dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>参数只在本次合成中生效。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">const char * ssb_param = \"voice_name = xiaoyan, aue = speex-wb;7, sample_rate = 16000, speed = 50, volume = 50, pitch = 50, rdn = 2\";\nint ret = -1;\nconst char * sessionID = QTTSSessionBegin( ssb_param, &amp;ret );\nif( MSP_SUCCESS != ret )\n{\n    printf( “QTTSSessionBegin failed, error code is: %d”, ret );\n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a75d5047a2a889dbd890d116a6d0b550a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI QTTSSessionEnd </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>hints</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>结束本次语音合成。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QTTSSessionBegin返回的句柄。 </td></tr>\n    <tr><td class=\"paramname\">hints[in]</td><td>结束本次语音合成的原因描述，为用户自定义内容。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回MSP_SUCCESS，否则返回错误代码，<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。 </dd></dl>\n<dl class=\"section remark\"><dt>备注</dt><dd>本接口和QTTSSessionBegin对应，调用此接口后，该句柄对应的相关资源（参数，合成文本，实例等）都会被释放，用户不应再使用该句柄。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">int ret = QTTSSessionEnd ( sessionID, “normal end” );\nif( MSP_SUCCESS != ret )\n{\n    printf( “QTTSSessionEnd failed, error code is: %d”, ret );\n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5b7d146d6a35341d4d73efd720ae987b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int MSPAPI QTTSTextPut </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>sessionID</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>textString</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>textLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>params</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>写入待合成的文本。 </p>\n<dl class=\"params\"><dt>参数</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sessionID[in]</td><td>由QTTSSessionBegin返回的句柄。 </td></tr>\n    <tr><td class=\"paramname\">textString[in]</td><td>字符串指针。指向待合成的文本字符串。 </td></tr>\n    <tr><td class=\"paramname\">textLen[in]</td><td>合成文本长度,最大支持8192个字节（不含’\\0’）。 </td></tr>\n    <tr><td class=\"paramname\">params[in]</td><td>本次合成所用的参数，只对本次合成的文本有效。 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>返回</dt><dd>函数调用成功返回MSP_SUCCESS，否则返回错误代码。<a href=\"http://open.voicecloud.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&amp;anchor=Y29udGl0bGU2Ng==\" target=\"_blank\">详见错误码列表</a>。</dd></dl>\n<dl class=\"section see\"><dt>参见</dt><dd><pre class=\"fragment\">const char* src_text = “科大讯飞股份有限公司”;\nunsigned int text_len = strlen(src_text); //textLen参数为合成文本所占字节数\nint ret = QTTSTextPut( sessionID, src_text, text_len, NULL );\nif( MSP_SUCCESS != ret )\n{\n    printf( “QTTSTextPut failed, error code is: %d”, ret );\n}\n.</pre> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/qtts_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: qtts.h 源文件</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">qtts.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"qtts_8h.html\">浏览该文件的文档.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* MSPAPI <a class=\"code\" href=\"qtts_8h.html#a3fba4ad9599445073335851cc9479542\">QTTSSessionBegin</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* params, <span class=\"keywordtype\">int</span>* errorCode);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"qtts_8h.html#a5b7d146d6a35341d4d73efd720ae987b\">QTTSTextPut</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* textString, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> textLen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* params);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">void</span>* MSPAPI <a class=\"code\" href=\"qtts_8h.html#a4e4f6bed4b9e4ea553aa00ccf539c22a\">QTTSAudioGet</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>* audioLen, <span class=\"keywordtype\">int</span>* synthStatus, <span class=\"keywordtype\">int</span>* errorCode);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"qtts_8h.html#a0812612ff738a828490e4e3db59767e8\">QTTSGetParam</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* paramName, <span class=\"keywordtype\">char</span>* paramValue, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>* valueLen);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"keywordtype\">int</span> MSPAPI <a class=\"code\" href=\"qtts_8h.html#a75d5047a2a889dbd890d116a6d0b550a\">QTTSSessionEnd</a>(<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* sessionID, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* hints);</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"comment\">//const char* MSPAPI QTTSAudioInfo(const char* sessionID,int* errorCode);</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;</div>\n<div class=\"ttc\" id=\"qtts_8h_html_a3fba4ad9599445073335851cc9479542\"><div class=\"ttname\"><a href=\"qtts_8h.html#a3fba4ad9599445073335851cc9479542\">QTTSSessionBegin</a></div><div class=\"ttdeci\">const char *MSPAPI QTTSSessionBegin(const char *params, int *errorCode)</div><div class=\"ttdoc\">开始一次语音合成，分配语音合成资源。 </div></div>\n<div class=\"ttc\" id=\"qtts_8h_html_a4e4f6bed4b9e4ea553aa00ccf539c22a\"><div class=\"ttname\"><a href=\"qtts_8h.html#a4e4f6bed4b9e4ea553aa00ccf539c22a\">QTTSAudioGet</a></div><div class=\"ttdeci\">const void *MSPAPI QTTSAudioGet(const char *sessionID, unsigned int *audioLen, int *synthStatus, int *errorCode)</div><div class=\"ttdoc\">获取合成音频。 </div></div>\n<div class=\"ttc\" id=\"qtts_8h_html_a75d5047a2a889dbd890d116a6d0b550a\"><div class=\"ttname\"><a href=\"qtts_8h.html#a75d5047a2a889dbd890d116a6d0b550a\">QTTSSessionEnd</a></div><div class=\"ttdeci\">int MSPAPI QTTSSessionEnd(const char *sessionID, const char *hints)</div><div class=\"ttdoc\">结束本次语音合成。 </div></div>\n<div class=\"ttc\" id=\"qtts_8h_html_a0812612ff738a828490e4e3db59767e8\"><div class=\"ttname\"><a href=\"qtts_8h.html#a0812612ff738a828490e4e3db59767e8\">QTTSGetParam</a></div><div class=\"ttdeci\">int MSPAPI QTTSGetParam(const char *sessionID, const char *paramName, char *paramValue, unsigned int *valueLen)</div><div class=\"ttdoc\">获取当前语音合成信息，如当前合成音频对应文本结束位置、上行流量、下行流量等。 </div></div>\n<div class=\"ttc\" id=\"qtts_8h_html_a5b7d146d6a35341d4d73efd720ae987b\"><div class=\"ttname\"><a href=\"qtts_8h.html#a5b7d146d6a35341d4d73efd720ae987b\">QTTSTextPut</a></div><div class=\"ttdeci\">int MSPAPI QTTSTextPut(const char *sessionID, const char *textString, unsigned int textLen, const char *params)</div><div class=\"ttdoc\">写入待合成的文本。 </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_0.js",
    "content": "var searchData=\n[\n  ['ad',['aD',['../jquery_8js.html#ad223f5fba68c41c1236671ac5c5b0fcb',1,'jquery.js']]],\n  ['all_5f0_2ejs',['all_0.js',['../all__0_8js.html',1,'']]],\n  ['all_5f1_2ejs',['all_1.js',['../all__1_8js.html',1,'']]],\n  ['am',['aM',['../jquery_8js.html#a8cc6111a5def3ea889157d13fb9a9672',1,'jquery.js']]],\n  ['ap',['ap',['../jquery_8js.html#a6ddf393cc7f9a8828e197bb0d9916c44',1,'jquery.js']]],\n  ['aq',['aQ',['../jquery_8js.html#a79eb58dc6cdf0aef563d5dc1ded27df5',1,'jquery.js']]],\n  ['au',['au',['../jquery_8js.html#a4fd8ddfab07c8d7c7cae0ab0e052cad3',1,'jquery.js']]],\n  ['az',['aZ',['../jquery_8js.html#ac87125cdee1a5e57da4ef619af49bc7d',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_1.js",
    "content": "var searchData=\n[\n  ['b',['b',['../jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805',1,'b():&#160;jquery.js'],['../jquery_8js.html#a2fa551895933fae935a0a6b87282241d',1,'b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw, bv){var e;b.swap(bw,{display:&quot;inline-block&quot;}, function(){if(bv){e=Z(bw,&quot;margin-right&quot;,&quot;marginRight&quot;)}else{e=bw.style.marginRight}});return e}}}}):&#160;jquery.js']]],\n  ['bb',['bb',['../jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb',1,'jquery.js']]],\n  ['bq',['bq',['../jquery_8js.html#af6ee77c71b2c89bdb365145ac5ad1219',1,'jquery.js']]],\n  ['bs',['bs',['../jquery_8js.html#ae77642f8ef73fb9c20c2a737d956acda',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_10.js",
    "content": "var searchData=\n[\n  ['updatestripes',['updateStripes',['../dynsections_8js.html#a8f7493ad859d4fbf2523917511ee7177',1,'dynsections.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_11.js",
    "content": "var searchData=\n[\n  ['z',['Z',['../jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_2.js",
    "content": "var searchData=\n[\n  ['c',['c',['../jquery_8js.html#abce695e0af988ece0826d9ad59b8160d',1,'jquery.js']]],\n  ['converttoid',['convertToId',['../search_8js.html#a196a29bd5a5ee7cd5b485e0753a49e57',1,'search.js']]],\n  ['createresults',['createResults',['../search_8js.html#a6b2c651120de3ed1dcf0d85341d51895',1,'search.js']]],\n  ['css',['css',['../jquery_8js.html#a89ad527fcd82c01ebb587332f5b4fcd4',1,'jquery.js']]],\n  ['curcss',['curCSS',['../jquery_8js.html#a88b21f8ba3af86d6981b1da520ece33b',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_3.js",
    "content": "var searchData=\n[\n  ['dynsections_2ejs',['dynsections.js',['../dynsections_8js.html',1,'']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_4.js",
    "content": "var searchData=\n[\n  ['each',['each',['../jquery_8js.html#a871ff39db627c54c710a3e9909b8234c',1,'jquery.js']]],\n  ['extend',['extend',['../jquery_8js.html#a5fb206c91c64d1be35fde236706eab86',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_5.js",
    "content": "var searchData=\n[\n  ['files_5f0_2ejs',['files_0.js',['../files__0_8js.html',1,'']]],\n  ['files_5f1_2ejs',['files_1.js',['../files__1_8js.html',1,'']]],\n  ['functions_5f0_2ejs',['functions_0.js',['../functions__0_8js.html',1,'']]],\n  ['functions_5f1_2ejs',['functions_1.js',['../functions__1_8js.html',1,'']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_6.js",
    "content": "var searchData=\n[\n  ['getxpos',['getXPos',['../search_8js.html#a76d24aea0009f892f8ccc31d941c0a2b',1,'search.js']]],\n  ['getypos',['getYPos',['../search_8js.html#a8d7b405228661d7b6216b6925d2b8a69',1,'search.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_7.js",
    "content": "var searchData=\n[\n  ['if',['if',['../jquery_8js.html#a9db6d45a025ad692282fe23e69eeba43',1,'if(!b.support.opacity):&#160;jquery.js'],['../jquery_8js.html#a30d3d2cd5b567c9f31b2aa30b9cb3bb8',1,'if(av.defaultView &amp;&amp;av.defaultView.getComputedStyle):&#160;jquery.js'],['../jquery_8js.html#a2c54bd8ed7482e89d19331ba61fe221c',1,'if(av.documentElement.currentStyle):&#160;jquery.js'],['../jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4',1,'if(b.expr &amp;&amp;b.expr.filters):&#160;jquery.js']]],\n  ['indexsectionlabels',['indexSectionLabels',['../searchdata_8js.html#a529972e449c82dc118cbbd3bcf50c44d',1,'searchdata.js']]],\n  ['indexsectionnames',['indexSectionNames',['../searchdata_8js.html#a77149ceed055c6c6ce40973b5bdc19ad',1,'searchdata.js']]],\n  ['indexsectionswithcontent',['indexSectionsWithContent',['../searchdata_8js.html#a6250af3c9b54dee6efc5f55f40c78126',1,'searchdata.js']]],\n  ['init_5fsearch',['init_search',['../search_8js.html#ae95ec7d5d450d0a8d6928a594798aaf4',1,'search.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_8.js",
    "content": "var searchData=\n[\n  ['jquery_2ejs',['jquery.js',['../jquery_8js.html',1,'']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_9.js",
    "content": "var searchData=\n[\n  ['k',['k',['../jquery_8js.html#ab26645c014aa005ecedef329ecf58c99',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_a.js",
    "content": "var searchData=\n[\n  ['l',['L',['../jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_b.js",
    "content": "var searchData=\n[\n  ['msp_5fcmn_2eh',['msp_cmn.h',['../msp__cmn_8h.html',1,'']]],\n  ['mspgetparam',['MSPGetParam',['../msp__cmn_8h.html#a4d3fa0aad5e761cb2a2afe30ae2a9714',1,'msp_cmn.h']]],\n  ['mspgetversion',['MSPGetVersion',['../msp__cmn_8h.html#a632008aeddf5eba09555920ce38686a4',1,'msp_cmn.h']]],\n  ['msplogin',['MSPLogin',['../msp__cmn_8h.html#a137acfe684fe46cbe5baf19f7d4a7fcc',1,'msp_cmn.h']]],\n  ['msplogout',['MSPLogout',['../msp__cmn_8h.html#a1e0f72cd113b4578afdf3d16ab34463e',1,'msp_cmn.h']]],\n  ['mspsearch',['MSPSearch',['../msp__cmn_8h.html#ae7be2dd2c6ee318524621b952998c14d',1,'msp_cmn.h']]],\n  ['mspuploaddata',['MSPUploadData',['../msp__cmn_8h.html#ada276fa6db4a66342d951820020e4e8f',1,'msp_cmn.h']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_c.js",
    "content": "var searchData=\n[\n  ['p',['p',['../jquery_8js.html#a2335e57f79b6acfb6de59c235dc8a83e',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_d.js",
    "content": "var searchData=\n[\n  ['qisr_2eh',['qisr.h',['../qisr_8h.html',1,'']]],\n  ['qisraudiowrite',['QISRAudioWrite',['../qisr_8h.html#a47fd2588fe834fa2d51fef1961d7aef4',1,'qisr.h']]],\n  ['qisrgetparam',['QISRGetParam',['../qisr_8h.html#a2081e3cad9a8155c15790a2476be7044',1,'qisr.h']]],\n  ['qisrgetresult',['QISRGetResult',['../qisr_8h.html#a2e7880db4792266a4d1439238c0b2c1b',1,'qisr.h']]],\n  ['qisrsessionbegin',['QISRSessionBegin',['../qisr_8h.html#aaec4a5779275e07c4f7405ed8d739416',1,'qisr.h']]],\n  ['qisrsessionend',['QISRSessionEnd',['../qisr_8h.html#ab50c4114e032100c4093ddd51329fecc',1,'qisr.h']]],\n  ['qmfv_2eh',['qmfv.h',['../qmfv_8h.html',1,'']]],\n  ['qmfvdatawrite',['QMFVDataWrite',['../qmfv_8h.html#a081a01b2add2dfac3010ec7cd8ba5eac',1,'qmfv.h']]],\n  ['qmfvgetparam',['QMFVGetParam',['../qmfv_8h.html#a7174d943c2f1691f6a8c717429d43f8d',1,'qmfv.h']]],\n  ['qmfvgetresult',['QMFVGetResult',['../qmfv_8h.html#aa87716ad6b28326982626c0c6a6ffcbd',1,'qmfv.h']]],\n  ['qmfvsessionbegin',['QMFVSessionBegin',['../qmfv_8h.html#adbe23b402d4c50b4c06f47ca26253be5',1,'qmfv.h']]],\n  ['qmfvsessionend',['QMFVSessionEnd',['../qmfv_8h.html#ad4ea72dd39285348cf26c627d67c6b65',1,'qmfv.h']]],\n  ['qtts_2eh',['qtts.h',['../qtts_8h.html',1,'']]],\n  ['qttsaudioget',['QTTSAudioGet',['../qtts_8h.html#a4e4f6bed4b9e4ea553aa00ccf539c22a',1,'qtts.h']]],\n  ['qttsgetparam',['QTTSGetParam',['../qtts_8h.html#a0812612ff738a828490e4e3db59767e8',1,'qtts.h']]],\n  ['qttssessionbegin',['QTTSSessionBegin',['../qtts_8h.html#a3fba4ad9599445073335851cc9479542',1,'qtts.h']]],\n  ['qttssessionend',['QTTSSessionEnd',['../qtts_8h.html#a75d5047a2a889dbd890d116a6d0b550a',1,'qtts.h']]],\n  ['qttstextput',['QTTSTextPut',['../qtts_8h.html#a5b7d146d6a35341d4d73efd720ae987b',1,'qtts.h']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_e.js",
    "content": "var searchData=\n[\n  ['search_2ejs',['search.js',['../search_8js.html',1,'']]],\n  ['searchbox',['SearchBox',['../search_8js.html#a52066106482f8136aa9e0ec859e8188f',1,'search.js']]],\n  ['searchdata',['searchData',['../all__0_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;all_0.js'],['../all__1_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;all_1.js'],['../files__0_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;files_0.js'],['../files__1_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;files_1.js'],['../functions__0_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;functions_0.js'],['../functions__1_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;functions_1.js']]],\n  ['searchdata_2ejs',['searchdata.js',['../searchdata_8js.html',1,'']]],\n  ['searchresults',['SearchResults',['../search_8js.html#a9189b9f7a32b6bc78240f40348f7fe03',1,'search.js']]],\n  ['setclassattr',['setClassAttr',['../search_8js.html#a499422fc054a5278ae32801ec0082c56',1,'search.js']]],\n  ['setkeyactions',['setKeyActions',['../search_8js.html#a98192fa2929bb8e4b0a890a4909ab9b2',1,'search.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/all_f.js",
    "content": "var searchData=\n[\n  ['togglefolder',['toggleFolder',['../dynsections_8js.html#af244da4527af2d845dca04f5656376cd',1,'dynsections.js']]],\n  ['toggleinherit',['toggleInherit',['../dynsections_8js.html#ac057b640b17ff32af11ced151c9305b4',1,'dynsections.js']]],\n  ['togglelevel',['toggleLevel',['../dynsections_8js.html#a19f577cc1ba571396a85bb1f48bf4df2',1,'dynsections.js']]],\n  ['togglevisibility',['toggleVisibility',['../dynsections_8js.html#a1922c462474df7dfd18741c961d59a25',1,'dynsections.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_0.js",
    "content": "var searchData=\n[\n  ['all_5f0_2ejs',['all_0.js',['../all__0_8js.html',1,'']]],\n  ['all_5f1_2ejs',['all_1.js',['../all__1_8js.html',1,'']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_1.js",
    "content": "var searchData=\n[\n  ['dynsections_2ejs',['dynsections.js',['../dynsections_8js.html',1,'']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_2.js",
    "content": "var searchData=\n[\n  ['files_5f0_2ejs',['files_0.js',['../files__0_8js.html',1,'']]],\n  ['files_5f1_2ejs',['files_1.js',['../files__1_8js.html',1,'']]],\n  ['functions_5f0_2ejs',['functions_0.js',['../functions__0_8js.html',1,'']]],\n  ['functions_5f1_2ejs',['functions_1.js',['../functions__1_8js.html',1,'']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_3.js",
    "content": "var searchData=\n[\n  ['jquery_2ejs',['jquery.js',['../jquery_8js.html',1,'']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_4.js",
    "content": "var searchData=\n[\n  ['msp_5fcmn_2eh',['msp_cmn.h',['../msp__cmn_8h.html',1,'']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_5.js",
    "content": "var searchData=\n[\n  ['qisr_2eh',['qisr.h',['../qisr_8h.html',1,'']]],\n  ['qmfv_2eh',['qmfv.h',['../qmfv_8h.html',1,'']]],\n  ['qtts_2eh',['qtts.h',['../qtts_8h.html',1,'']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/files_6.js",
    "content": "var searchData=\n[\n  ['search_2ejs',['search.js',['../search_8js.html',1,'']]],\n  ['searchdata_2ejs',['searchdata.js',['../searchdata_8js.html',1,'']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_0.js",
    "content": "var searchData=\n[\n  ['b',['b',['../jquery_8js.html#a2fa551895933fae935a0a6b87282241d',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_1.js",
    "content": "var searchData=\n[\n  ['converttoid',['convertToId',['../search_8js.html#a196a29bd5a5ee7cd5b485e0753a49e57',1,'search.js']]],\n  ['createresults',['createResults',['../search_8js.html#a6b2c651120de3ed1dcf0d85341d51895',1,'search.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_2.js",
    "content": "var searchData=\n[\n  ['each',['each',['../jquery_8js.html#a871ff39db627c54c710a3e9909b8234c',1,'jquery.js']]],\n  ['extend',['extend',['../jquery_8js.html#a5fb206c91c64d1be35fde236706eab86',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_3.js",
    "content": "var searchData=\n[\n  ['getxpos',['getXPos',['../search_8js.html#a76d24aea0009f892f8ccc31d941c0a2b',1,'search.js']]],\n  ['getypos',['getYPos',['../search_8js.html#a8d7b405228661d7b6216b6925d2b8a69',1,'search.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_4.js",
    "content": "var searchData=\n[\n  ['if',['if',['../jquery_8js.html#a9db6d45a025ad692282fe23e69eeba43',1,'if(!b.support.opacity):&#160;jquery.js'],['../jquery_8js.html#a30d3d2cd5b567c9f31b2aa30b9cb3bb8',1,'if(av.defaultView &amp;&amp;av.defaultView.getComputedStyle):&#160;jquery.js'],['../jquery_8js.html#a2c54bd8ed7482e89d19331ba61fe221c',1,'if(av.documentElement.currentStyle):&#160;jquery.js'],['../jquery_8js.html#a42cbfadee2b4749e8f699ea8d745a0e4',1,'if(b.expr &amp;&amp;b.expr.filters):&#160;jquery.js']]],\n  ['init_5fsearch',['init_search',['../search_8js.html#ae95ec7d5d450d0a8d6928a594798aaf4',1,'search.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_5.js",
    "content": "var searchData=\n[\n  ['mspgetparam',['MSPGetParam',['../msp__cmn_8h.html#a4d3fa0aad5e761cb2a2afe30ae2a9714',1,'msp_cmn.h']]],\n  ['mspgetversion',['MSPGetVersion',['../msp__cmn_8h.html#a632008aeddf5eba09555920ce38686a4',1,'msp_cmn.h']]],\n  ['msplogin',['MSPLogin',['../msp__cmn_8h.html#a137acfe684fe46cbe5baf19f7d4a7fcc',1,'msp_cmn.h']]],\n  ['msplogout',['MSPLogout',['../msp__cmn_8h.html#a1e0f72cd113b4578afdf3d16ab34463e',1,'msp_cmn.h']]],\n  ['mspsearch',['MSPSearch',['../msp__cmn_8h.html#ae7be2dd2c6ee318524621b952998c14d',1,'msp_cmn.h']]],\n  ['mspuploaddata',['MSPUploadData',['../msp__cmn_8h.html#ada276fa6db4a66342d951820020e4e8f',1,'msp_cmn.h']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_6.js",
    "content": "var searchData=\n[\n  ['p',['p',['../jquery_8js.html#a2335e57f79b6acfb6de59c235dc8a83e',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_7.js",
    "content": "var searchData=\n[\n  ['qisraudiowrite',['QISRAudioWrite',['../qisr_8h.html#a47fd2588fe834fa2d51fef1961d7aef4',1,'qisr.h']]],\n  ['qisrgetparam',['QISRGetParam',['../qisr_8h.html#a2081e3cad9a8155c15790a2476be7044',1,'qisr.h']]],\n  ['qisrgetresult',['QISRGetResult',['../qisr_8h.html#a2e7880db4792266a4d1439238c0b2c1b',1,'qisr.h']]],\n  ['qisrsessionbegin',['QISRSessionBegin',['../qisr_8h.html#aaec4a5779275e07c4f7405ed8d739416',1,'qisr.h']]],\n  ['qisrsessionend',['QISRSessionEnd',['../qisr_8h.html#ab50c4114e032100c4093ddd51329fecc',1,'qisr.h']]],\n  ['qmfvdatawrite',['QMFVDataWrite',['../qmfv_8h.html#a081a01b2add2dfac3010ec7cd8ba5eac',1,'qmfv.h']]],\n  ['qmfvgetparam',['QMFVGetParam',['../qmfv_8h.html#a7174d943c2f1691f6a8c717429d43f8d',1,'qmfv.h']]],\n  ['qmfvgetresult',['QMFVGetResult',['../qmfv_8h.html#aa87716ad6b28326982626c0c6a6ffcbd',1,'qmfv.h']]],\n  ['qmfvsessionbegin',['QMFVSessionBegin',['../qmfv_8h.html#adbe23b402d4c50b4c06f47ca26253be5',1,'qmfv.h']]],\n  ['qmfvsessionend',['QMFVSessionEnd',['../qmfv_8h.html#ad4ea72dd39285348cf26c627d67c6b65',1,'qmfv.h']]],\n  ['qttsaudioget',['QTTSAudioGet',['../qtts_8h.html#a4e4f6bed4b9e4ea553aa00ccf539c22a',1,'qtts.h']]],\n  ['qttsgetparam',['QTTSGetParam',['../qtts_8h.html#a0812612ff738a828490e4e3db59767e8',1,'qtts.h']]],\n  ['qttssessionbegin',['QTTSSessionBegin',['../qtts_8h.html#a3fba4ad9599445073335851cc9479542',1,'qtts.h']]],\n  ['qttssessionend',['QTTSSessionEnd',['../qtts_8h.html#a75d5047a2a889dbd890d116a6d0b550a',1,'qtts.h']]],\n  ['qttstextput',['QTTSTextPut',['../qtts_8h.html#a5b7d146d6a35341d4d73efd720ae987b',1,'qtts.h']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_8.js",
    "content": "var searchData=\n[\n  ['searchbox',['SearchBox',['../search_8js.html#a52066106482f8136aa9e0ec859e8188f',1,'search.js']]],\n  ['searchresults',['SearchResults',['../search_8js.html#a9189b9f7a32b6bc78240f40348f7fe03',1,'search.js']]],\n  ['setclassattr',['setClassAttr',['../search_8js.html#a499422fc054a5278ae32801ec0082c56',1,'search.js']]],\n  ['setkeyactions',['setKeyActions',['../search_8js.html#a98192fa2929bb8e4b0a890a4909ab9b2',1,'search.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_9.js",
    "content": "var searchData=\n[\n  ['togglefolder',['toggleFolder',['../dynsections_8js.html#af244da4527af2d845dca04f5656376cd',1,'dynsections.js']]],\n  ['toggleinherit',['toggleInherit',['../dynsections_8js.html#ac057b640b17ff32af11ced151c9305b4',1,'dynsections.js']]],\n  ['togglelevel',['toggleLevel',['../dynsections_8js.html#a19f577cc1ba571396a85bb1f48bf4df2',1,'dynsections.js']]],\n  ['togglevisibility',['toggleVisibility',['../dynsections_8js.html#a1922c462474df7dfd18741c961d59a25',1,'dynsections.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/functions_a.js",
    "content": "var searchData=\n[\n  ['updatestripes',['updateStripes',['../dynsections_8js.html#a8f7493ad859d4fbf2523917511ee7177',1,'dynsections.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/nomatches.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/search.css",
    "content": "/*---------------- Search Box */\n\n#FSearchBox {\n    float: left;\n}\n\n#MSearchBox {\n    white-space : nowrap;\n    position: absolute;\n    float: none;\n    display: inline;\n    margin-top: 8px;\n    right: 0px;\n    width: 170px;\n    z-index: 102;\n    background-color: white;\n}\n\n#MSearchBox .left\n{\n    display:block;\n    position:absolute;\n    left:10px;\n    width:20px;\n    height:19px;\n    background:url('search_l.png') no-repeat;\n    background-position:right;\n}\n\n#MSearchSelect {\n    display:block;\n    position:absolute;\n    width:20px;\n    height:19px;\n}\n\n.left #MSearchSelect {\n    left:4px;\n}\n\n.right #MSearchSelect {\n    right:5px;\n}\n\n#MSearchField {\n    display:block;\n    position:absolute;\n    height:19px;\n    background:url('search_m.png') repeat-x;\n    border:none;\n    width:111px;\n    margin-left:20px;\n    padding-left:4px;\n    color: #909090;\n    outline: none;\n    font: 9pt Arial, Verdana, sans-serif;\n}\n\n#FSearchBox #MSearchField {\n    margin-left:15px;\n}\n\n#MSearchBox .right {\n    display:block;\n    position:absolute;\n    right:10px;\n    top:0px;\n    width:20px;\n    height:19px;\n    background:url('search_r.png') no-repeat;\n    background-position:left;\n}\n\n#MSearchClose {\n    display: none;\n    position: absolute;\n    top: 4px;\n    background : none;\n    border: none;\n    margin: 0px 4px 0px 0px;\n    padding: 0px 0px;\n    outline: none;\n}\n\n.left #MSearchClose {\n    left: 6px;\n}\n\n.right #MSearchClose {\n    right: 2px;\n}\n\n.MSearchBoxActive #MSearchField {\n    color: #000000;\n}\n\n/*---------------- Search filter selection */\n\n#MSearchSelectWindow {\n    display: none;\n    position: absolute;\n    left: 0; top: 0;\n    border: 1px solid #90A5CE;\n    background-color: #F9FAFC;\n    z-index: 1;\n    padding-top: 4px;\n    padding-bottom: 4px;\n    -moz-border-radius: 4px;\n    -webkit-border-top-left-radius: 4px;\n    -webkit-border-top-right-radius: 4px;\n    -webkit-border-bottom-left-radius: 4px;\n    -webkit-border-bottom-right-radius: 4px;\n    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\n.SelectItem {\n    font: 8pt Arial, Verdana, sans-serif;\n    padding-left:  2px;\n    padding-right: 12px;\n    border: 0px;\n}\n\nspan.SelectionMark {\n    margin-right: 4px;\n    font-family: monospace;\n    outline-style: none;\n    text-decoration: none;\n}\n\na.SelectItem {\n    display: block;\n    outline-style: none;\n    color: #000000; \n    text-decoration: none;\n    padding-left:   6px;\n    padding-right: 12px;\n}\n\na.SelectItem:focus,\na.SelectItem:active {\n    color: #000000; \n    outline-style: none;\n    text-decoration: none;\n}\n\na.SelectItem:hover {\n    color: #FFFFFF;\n    background-color: #3D578C;\n    outline-style: none;\n    text-decoration: none;\n    cursor: pointer;\n    display: block;\n}\n\n/*---------------- Search results window */\n\niframe#MSearchResults {\n    width: 60ex;\n    height: 15em;\n}\n\n#MSearchResultsWindow {\n    display: none;\n    position: absolute;\n    left: 0; top: 0;\n    border: 1px solid #000;\n    background-color: #EEF1F7;\n}\n\n/* ----------------------------------- */\n\n\n#SRIndex {\n    clear:both; \n    padding-bottom: 15px;\n}\n\n.SREntry {\n    font-size: 10pt;\n    padding-left: 1ex;\n}\n\n.SRPage .SREntry {\n    font-size: 8pt;\n    padding: 1px 5px;\n}\n\nbody.SRPage {\n    margin: 5px 2px;\n}\n\n.SRChildren {\n    padding-left: 3ex; padding-bottom: .5em \n}\n\n.SRPage .SRChildren {\n    display: none;\n}\n\n.SRSymbol {\n    font-weight: bold; \n    color: #425E97;\n    font-family: Arial, Verdana, sans-serif;\n    text-decoration: none;\n    outline: none;\n}\n\na.SRScope {\n    display: block;\n    color: #425E97; \n    font-family: Arial, Verdana, sans-serif;\n    text-decoration: none;\n    outline: none;\n}\n\na.SRSymbol:focus, a.SRSymbol:active,\na.SRScope:focus, a.SRScope:active {\n    text-decoration: underline;\n}\n\nspan.SRScope {\n    padding-left: 4px;\n}\n\n.SRPage .SRStatus {\n    padding: 2px 5px;\n    font-size: 8pt;\n    font-style: italic;\n}\n\n.SRResult {\n    display: none;\n}\n\nDIV.searchresults {\n    margin-left: 10px;\n    margin-right: 10px;\n}\n\n/*---------------- External search page results */\n\n.searchresult {\n    background-color: #F0F3F8;\n}\n\n.pages b {\n   color: white;\n   padding: 5px 5px 3px 5px;\n   background-image: url(\"../tab_a.png\");\n   background-repeat: repeat-x;\n   text-shadow: 0 1px 1px #000000;\n}\n\n.pages {\n    line-height: 17px;\n    margin-left: 4px;\n    text-decoration: none;\n}\n\n.hl {\n    font-weight: bold;\n}\n\n#searchresults {\n    margin-bottom: 20px;\n}\n\n.searchpages {\n    margin-top: 10px;\n}\n\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/search.js",
    "content": "function convertToId(search)\n{\n  var result = '';\n  for (i=0;i<search.length;i++)\n  {\n    var c = search.charAt(i);\n    var cn = c.charCodeAt(0);\n    if (c.match(/[a-z0-9\\u0080-\\uFFFF]/))\n    {\n      result+=c;\n    }\n    else if (cn<16)\n    {\n      result+=\"_0\"+cn.toString(16);\n    }\n    else\n    {\n      result+=\"_\"+cn.toString(16);\n    }\n  }\n  return result;\n}\n\nfunction getXPos(item)\n{\n  var x = 0;\n  if (item.offsetWidth)\n  {\n    while (item && item!=document.body)\n    {\n      x   += item.offsetLeft;\n      item = item.offsetParent;\n    }\n  }\n  return x;\n}\n\nfunction getYPos(item)\n{\n  var y = 0;\n  if (item.offsetWidth)\n  {\n     while (item && item!=document.body)\n     {\n       y   += item.offsetTop;\n       item = item.offsetParent;\n     }\n  }\n  return y;\n}\n\n/* A class handling everything associated with the search panel.\n\n   Parameters:\n   name - The name of the global variable that will be\n          storing this instance.  Is needed to be able to set timeouts.\n   resultPath - path to use for external files\n*/\nfunction SearchBox(name, resultsPath, inFrame, label)\n{\n  if (!name || !resultsPath) {  alert(\"Missing parameters to SearchBox.\"); }\n\n  // ---------- Instance variables\n  this.name                  = name;\n  this.resultsPath           = resultsPath;\n  this.keyTimeout            = 0;\n  this.keyTimeoutLength      = 500;\n  this.closeSelectionTimeout = 300;\n  this.lastSearchValue       = \"\";\n  this.lastResultsPage       = \"\";\n  this.hideTimeout           = 0;\n  this.searchIndex           = 0;\n  this.searchActive          = false;\n  this.insideFrame           = inFrame;\n  this.searchLabel           = label;\n\n  // ----------- DOM Elements\n\n  this.DOMSearchField = function()\n  {  return document.getElementById(\"MSearchField\");  }\n\n  this.DOMSearchSelect = function()\n  {  return document.getElementById(\"MSearchSelect\");  }\n\n  this.DOMSearchSelectWindow = function()\n  {  return document.getElementById(\"MSearchSelectWindow\");  }\n\n  this.DOMPopupSearchResults = function()\n  {  return document.getElementById(\"MSearchResults\");  }\n\n  this.DOMPopupSearchResultsWindow = function()\n  {  return document.getElementById(\"MSearchResultsWindow\");  }\n\n  this.DOMSearchClose = function()\n  {  return document.getElementById(\"MSearchClose\"); }\n\n  this.DOMSearchBox = function()\n  {  return document.getElementById(\"MSearchBox\");  }\n\n  // ------------ Event Handlers\n\n  // Called when focus is added or removed from the search field.\n  this.OnSearchFieldFocus = function(isActive)\n  {\n    this.Activate(isActive);\n  }\n\n  this.OnSearchSelectShow = function()\n  {\n    var searchSelectWindow = this.DOMSearchSelectWindow();\n    var searchField        = this.DOMSearchSelect();\n\n    if (this.insideFrame)\n    {\n      var left = getXPos(searchField);\n      var top  = getYPos(searchField);\n      left += searchField.offsetWidth + 6;\n      top += searchField.offsetHeight;\n\n      // show search selection popup\n      searchSelectWindow.style.display='block';\n      left -= searchSelectWindow.offsetWidth;\n      searchSelectWindow.style.left =  left + 'px';\n      searchSelectWindow.style.top  =  top  + 'px';\n    }\n    else\n    {\n      var left = getXPos(searchField);\n      var top  = getYPos(searchField);\n      top += searchField.offsetHeight;\n\n      // show search selection popup\n      searchSelectWindow.style.display='block';\n      searchSelectWindow.style.left =  left + 'px';\n      searchSelectWindow.style.top  =  top  + 'px';\n    }\n\n    // stop selection hide timer\n    if (this.hideTimeout)\n    {\n      clearTimeout(this.hideTimeout);\n      this.hideTimeout=0;\n    }\n    return false; // to avoid \"image drag\" default event\n  }\n\n  this.OnSearchSelectHide = function()\n  {\n    this.hideTimeout = setTimeout(this.name +\".CloseSelectionWindow()\",\n                                  this.closeSelectionTimeout);\n  }\n\n  // Called when the content of the search field is changed.\n  this.OnSearchFieldChange = function(evt)\n  {\n    if (this.keyTimeout) // kill running timer\n    {\n      clearTimeout(this.keyTimeout);\n      this.keyTimeout = 0;\n    }\n\n    var e  = (evt) ? evt : window.event; // for IE\n    if (e.keyCode==40 || e.keyCode==13)\n    {\n      if (e.shiftKey==1)\n      {\n        this.OnSearchSelectShow();\n        var win=this.DOMSearchSelectWindow();\n        for (i=0;i<win.childNodes.length;i++)\n        {\n          var child = win.childNodes[i]; // get span within a\n          if (child.className=='SelectItem')\n          {\n            child.focus();\n            return;\n          }\n        }\n        return;\n      }\n      else if (window.frames.MSearchResults.searchResults)\n      {\n        var elem = window.frames.MSearchResults.searchResults.NavNext(0);\n        if (elem) elem.focus();\n      }\n    }\n    else if (e.keyCode==27) // Escape out of the search field\n    {\n      this.DOMSearchField().blur();\n      this.DOMPopupSearchResultsWindow().style.display = 'none';\n      this.DOMSearchClose().style.display = 'none';\n      this.lastSearchValue = '';\n      this.Activate(false);\n      return;\n    }\n\n    // strip whitespaces\n    var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n\n    if (searchValue != this.lastSearchValue) // search value has changed\n    {\n      if (searchValue != \"\") // non-empty search\n      {\n        // set timer for search update\n        this.keyTimeout = setTimeout(this.name + '.Search()',\n                                     this.keyTimeoutLength);\n      }\n      else // empty search field\n      {\n        this.DOMPopupSearchResultsWindow().style.display = 'none';\n        this.DOMSearchClose().style.display = 'none';\n        this.lastSearchValue = '';\n      }\n    }\n  }\n\n  this.SelectItemCount = function(id)\n  {\n    var count=0;\n    var win=this.DOMSearchSelectWindow();\n    for (i=0;i<win.childNodes.length;i++)\n    {\n      var child = win.childNodes[i]; // get span within a\n      if (child.className=='SelectItem')\n      {\n        count++;\n      }\n    }\n    return count;\n  }\n\n  this.SelectItemSet = function(id)\n  {\n    var i,j=0;\n    var win=this.DOMSearchSelectWindow();\n    for (i=0;i<win.childNodes.length;i++)\n    {\n      var child = win.childNodes[i]; // get span within a\n      if (child.className=='SelectItem')\n      {\n        var node = child.firstChild;\n        if (j==id)\n        {\n          node.innerHTML='&#8226;';\n        }\n        else\n        {\n          node.innerHTML='&#160;';\n        }\n        j++;\n      }\n    }\n  }\n\n  // Called when an search filter selection is made.\n  // set item with index id as the active item\n  this.OnSelectItem = function(id)\n  {\n    this.searchIndex = id;\n    this.SelectItemSet(id);\n    var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n    if (searchValue!=\"\" && this.searchActive) // something was found -> do a search\n    {\n      this.Search();\n    }\n  }\n\n  this.OnSearchSelectKey = function(evt)\n  {\n    var e = (evt) ? evt : window.event; // for IE\n    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down\n    {\n      this.searchIndex++;\n      this.OnSelectItem(this.searchIndex);\n    }\n    else if (e.keyCode==38 && this.searchIndex>0) // Up\n    {\n      this.searchIndex--;\n      this.OnSelectItem(this.searchIndex);\n    }\n    else if (e.keyCode==13 || e.keyCode==27)\n    {\n      this.OnSelectItem(this.searchIndex);\n      this.CloseSelectionWindow();\n      this.DOMSearchField().focus();\n    }\n    return false;\n  }\n\n  // --------- Actions\n\n  // Closes the results window.\n  this.CloseResultsWindow = function()\n  {\n    this.DOMPopupSearchResultsWindow().style.display = 'none';\n    this.DOMSearchClose().style.display = 'none';\n    this.Activate(false);\n  }\n\n  this.CloseSelectionWindow = function()\n  {\n    this.DOMSearchSelectWindow().style.display = 'none';\n  }\n\n  // Performs a search.\n  this.Search = function()\n  {\n    this.keyTimeout = 0;\n\n    // strip leading whitespace\n    var searchValue = this.DOMSearchField().value.replace(/^ +/, \"\");\n\n    var code = searchValue.toLowerCase().charCodeAt(0);\n    var idxChar = searchValue.substr(0, 1).toLowerCase();\n    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair\n    {\n      idxChar = searchValue.substr(0, 2);\n    }\n\n    var resultsPage;\n    var resultsPageWithSearch;\n    var hasResultsPage;\n\n    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);\n    if (idx!=-1)\n    {\n       var hexCode=idx.toString(16);\n       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';\n       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);\n       hasResultsPage = true;\n    }\n    else // nothing available for this search term\n    {\n       resultsPage = this.resultsPath + '/nomatches.html';\n       resultsPageWithSearch = resultsPage;\n       hasResultsPage = false;\n    }\n\n    window.frames.MSearchResults.location = resultsPageWithSearch;\n    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();\n\n    if (domPopupSearchResultsWindow.style.display!='block')\n    {\n       var domSearchBox = this.DOMSearchBox();\n       this.DOMSearchClose().style.display = 'inline';\n       if (this.insideFrame)\n       {\n         var domPopupSearchResults = this.DOMPopupSearchResults();\n         domPopupSearchResultsWindow.style.position = 'relative';\n         domPopupSearchResultsWindow.style.display  = 'block';\n         var width = document.body.clientWidth - 8; // the -8 is for IE :-(\n         domPopupSearchResultsWindow.style.width    = width + 'px';\n         domPopupSearchResults.style.width          = width + 'px';\n       }\n       else\n       {\n         var domPopupSearchResults = this.DOMPopupSearchResults();\n         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;\n         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;\n         domPopupSearchResultsWindow.style.display = 'block';\n         left -= domPopupSearchResults.offsetWidth;\n         domPopupSearchResultsWindow.style.top     = top  + 'px';\n         domPopupSearchResultsWindow.style.left    = left + 'px';\n       }\n    }\n\n    this.lastSearchValue = searchValue;\n    this.lastResultsPage = resultsPage;\n  }\n\n  // -------- Activation Functions\n\n  // Activates or deactivates the search panel, resetting things to\n  // their default values if necessary.\n  this.Activate = function(isActive)\n  {\n    if (isActive || // open it\n        this.DOMPopupSearchResultsWindow().style.display == 'block'\n       )\n    {\n      this.DOMSearchBox().className = 'MSearchBoxActive';\n\n      var searchField = this.DOMSearchField();\n\n      if (searchField.value == this.searchLabel) // clear \"Search\" term upon entry\n      {\n        searchField.value = '';\n        this.searchActive = true;\n      }\n    }\n    else if (!isActive) // directly remove the panel\n    {\n      this.DOMSearchBox().className = 'MSearchBoxInactive';\n      this.DOMSearchField().value   = this.searchLabel;\n      this.searchActive             = false;\n      this.lastSearchValue          = ''\n      this.lastResultsPage          = '';\n    }\n  }\n}\n\n// -----------------------------------------------------------------------\n\n// The class that handles everything on the search results page.\nfunction SearchResults(name)\n{\n    // The number of matches from the last run of <Search()>.\n    this.lastMatchCount = 0;\n    this.lastKey = 0;\n    this.repeatOn = false;\n\n    // Toggles the visibility of the passed element ID.\n    this.FindChildElement = function(id)\n    {\n      var parentElement = document.getElementById(id);\n      var element = parentElement.firstChild;\n\n      while (element && element!=parentElement)\n      {\n        if (element.nodeName == 'DIV' && element.className == 'SRChildren')\n        {\n          return element;\n        }\n\n        if (element.nodeName == 'DIV' && element.hasChildNodes())\n        {\n           element = element.firstChild;\n        }\n        else if (element.nextSibling)\n        {\n           element = element.nextSibling;\n        }\n        else\n        {\n          do\n          {\n            element = element.parentNode;\n          }\n          while (element && element!=parentElement && !element.nextSibling);\n\n          if (element && element!=parentElement)\n          {\n            element = element.nextSibling;\n          }\n        }\n      }\n    }\n\n    this.Toggle = function(id)\n    {\n      var element = this.FindChildElement(id);\n      if (element)\n      {\n        if (element.style.display == 'block')\n        {\n          element.style.display = 'none';\n        }\n        else\n        {\n          element.style.display = 'block';\n        }\n      }\n    }\n\n    // Searches for the passed string.  If there is no parameter,\n    // it takes it from the URL query.\n    //\n    // Always returns true, since other documents may try to call it\n    // and that may or may not be possible.\n    this.Search = function(search)\n    {\n      if (!search) // get search word from URL\n      {\n        search = window.location.search;\n        search = search.substring(1);  // Remove the leading '?'\n        search = unescape(search);\n      }\n\n      search = search.replace(/^ +/, \"\"); // strip leading spaces\n      search = search.replace(/ +$/, \"\"); // strip trailing spaces\n      search = search.toLowerCase();\n      search = convertToId(search);\n\n      var resultRows = document.getElementsByTagName(\"div\");\n      var matches = 0;\n\n      var i = 0;\n      while (i < resultRows.length)\n      {\n        var row = resultRows.item(i);\n        if (row.className == \"SRResult\")\n        {\n          var rowMatchName = row.id.toLowerCase();\n          rowMatchName = rowMatchName.replace(/^sr\\d*_/, ''); // strip 'sr123_'\n\n          if (search.length<=rowMatchName.length &&\n             rowMatchName.substr(0, search.length)==search)\n          {\n            row.style.display = 'block';\n            matches++;\n          }\n          else\n          {\n            row.style.display = 'none';\n          }\n        }\n        i++;\n      }\n      document.getElementById(\"Searching\").style.display='none';\n      if (matches == 0) // no results\n      {\n        document.getElementById(\"NoMatches\").style.display='block';\n      }\n      else // at least one result\n      {\n        document.getElementById(\"NoMatches\").style.display='none';\n      }\n      this.lastMatchCount = matches;\n      return true;\n    }\n\n    // return the first item with index index or higher that is visible\n    this.NavNext = function(index)\n    {\n      var focusItem;\n      while (1)\n      {\n        var focusName = 'Item'+index;\n        focusItem = document.getElementById(focusName);\n        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n        {\n          break;\n        }\n        else if (!focusItem) // last element\n        {\n          break;\n        }\n        focusItem=null;\n        index++;\n      }\n      return focusItem;\n    }\n\n    this.NavPrev = function(index)\n    {\n      var focusItem;\n      while (1)\n      {\n        var focusName = 'Item'+index;\n        focusItem = document.getElementById(focusName);\n        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n        {\n          break;\n        }\n        else if (!focusItem) // last element\n        {\n          break;\n        }\n        focusItem=null;\n        index--;\n      }\n      return focusItem;\n    }\n\n    this.ProcessKeys = function(e)\n    {\n      if (e.type == \"keydown\")\n      {\n        this.repeatOn = false;\n        this.lastKey = e.keyCode;\n      }\n      else if (e.type == \"keypress\")\n      {\n        if (!this.repeatOn)\n        {\n          if (this.lastKey) this.repeatOn = true;\n          return false; // ignore first keypress after keydown\n        }\n      }\n      else if (e.type == \"keyup\")\n      {\n        this.lastKey = 0;\n        this.repeatOn = false;\n      }\n      return this.lastKey!=0;\n    }\n\n    this.Nav = function(evt,itemIndex)\n    {\n      var e  = (evt) ? evt : window.event; // for IE\n      if (e.keyCode==13) return true;\n      if (!this.ProcessKeys(e)) return false;\n\n      if (this.lastKey==38) // Up\n      {\n        var newIndex = itemIndex-1;\n        var focusItem = this.NavPrev(newIndex);\n        if (focusItem)\n        {\n          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);\n          if (child && child.style.display == 'block') // children visible\n          {\n            var n=0;\n            var tmpElem;\n            while (1) // search for last child\n            {\n              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);\n              if (tmpElem)\n              {\n                focusItem = tmpElem;\n              }\n              else // found it!\n              {\n                break;\n              }\n              n++;\n            }\n          }\n        }\n        if (focusItem)\n        {\n          focusItem.focus();\n        }\n        else // return focus to search field\n        {\n           parent.document.getElementById(\"MSearchField\").focus();\n        }\n      }\n      else if (this.lastKey==40) // Down\n      {\n        var newIndex = itemIndex+1;\n        var focusItem;\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem && elem.style.display == 'block') // children visible\n        {\n          focusItem = document.getElementById('Item'+itemIndex+'_c0');\n        }\n        if (!focusItem) focusItem = this.NavNext(newIndex);\n        if (focusItem)  focusItem.focus();\n      }\n      else if (this.lastKey==39) // Right\n      {\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem) elem.style.display = 'block';\n      }\n      else if (this.lastKey==37) // Left\n      {\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem) elem.style.display = 'none';\n      }\n      else if (this.lastKey==27) // Escape\n      {\n        parent.searchBox.CloseResultsWindow();\n        parent.document.getElementById(\"MSearchField\").focus();\n      }\n      else if (this.lastKey==13) // Enter\n      {\n        return true;\n      }\n      return false;\n    }\n\n    this.NavChild = function(evt,itemIndex,childIndex)\n    {\n      var e  = (evt) ? evt : window.event; // for IE\n      if (e.keyCode==13) return true;\n      if (!this.ProcessKeys(e)) return false;\n\n      if (this.lastKey==38) // Up\n      {\n        if (childIndex>0)\n        {\n          var newIndex = childIndex-1;\n          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();\n        }\n        else // already at first child, jump to parent\n        {\n          document.getElementById('Item'+itemIndex).focus();\n        }\n      }\n      else if (this.lastKey==40) // Down\n      {\n        var newIndex = childIndex+1;\n        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);\n        if (!elem) // last child, jump to parent next parent\n        {\n          elem = this.NavNext(itemIndex+1);\n        }\n        if (elem)\n        {\n          elem.focus();\n        }\n      }\n      else if (this.lastKey==27) // Escape\n      {\n        parent.searchBox.CloseResultsWindow();\n        parent.document.getElementById(\"MSearchField\").focus();\n      }\n      else if (this.lastKey==13) // Enter\n      {\n        return true;\n      }\n      return false;\n    }\n}\n\nfunction setKeyActions(elem,action)\n{\n  elem.setAttribute('onkeydown',action);\n  elem.setAttribute('onkeypress',action);\n  elem.setAttribute('onkeyup',action);\n}\n\nfunction setClassAttr(elem,attr)\n{\n  elem.setAttribute('class',attr);\n  elem.setAttribute('className',attr);\n}\n\nfunction createResults()\n{\n  var results = document.getElementById(\"SRResults\");\n  for (var e=0; e<searchData.length; e++)\n  {\n    var id = searchData[e][0];\n    var srResult = document.createElement('div');\n    srResult.setAttribute('id','SR_'+id);\n    setClassAttr(srResult,'SRResult');\n    var srEntry = document.createElement('div');\n    setClassAttr(srEntry,'SREntry');\n    var srLink = document.createElement('a');\n    srLink.setAttribute('id','Item'+e);\n    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');\n    setClassAttr(srLink,'SRSymbol');\n    srLink.innerHTML = searchData[e][1][0];\n    srEntry.appendChild(srLink);\n    if (searchData[e][1].length==2) // single result\n    {\n      srLink.setAttribute('href',searchData[e][1][1][0]);\n      if (searchData[e][1][1][1])\n      {\n       srLink.setAttribute('target','_parent');\n      }\n      var srScope = document.createElement('span');\n      setClassAttr(srScope,'SRScope');\n      srScope.innerHTML = searchData[e][1][1][2];\n      srEntry.appendChild(srScope);\n    }\n    else // multiple results\n    {\n      srLink.setAttribute('href','javascript:searchResults.Toggle(\"SR_'+id+'\")');\n      var srChildren = document.createElement('div');\n      setClassAttr(srChildren,'SRChildren');\n      for (var c=0; c<searchData[e][1].length-1; c++)\n      {\n        var srChild = document.createElement('a');\n        srChild.setAttribute('id','Item'+e+'_c'+c);\n        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');\n        setClassAttr(srChild,'SRScope');\n        srChild.setAttribute('href',searchData[e][1][c+1][0]);\n        if (searchData[e][1][c+1][1])\n        {\n         srChild.setAttribute('target','_parent');\n        }\n        srChild.innerHTML = searchData[e][1][c+1][2];\n        srChildren.appendChild(srChild);\n      }\n      srEntry.appendChild(srChildren);\n    }\n    srResult.appendChild(srEntry);\n    results.appendChild(srResult);\n  }\n}\n\nfunction init_search()\n{\n  var results = document.getElementById(\"MSearchSelectWindow\");\n  for (var key in indexSectionLabels)\n  {\n    var link = document.createElement('a');\n    link.setAttribute('class','SelectItem');\n    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');\n    link.href='javascript:void(0)';\n    link.innerHTML='<span class=\"SelectionMark\">&#160;</span>'+indexSectionLabels[key];\n    results.appendChild(link);\n  }\n  searchBox.OnSelectItem(0);\n}\n\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/searchdata.js",
    "content": "var indexSectionsWithContent =\n{\n  0: \"abcdefgijklmpqstuz\",\n  1: \"adfjmqs\",\n  2: \"bcegimpqstu\",\n  3: \"abciklsz\"\n};\n\nvar indexSectionNames =\n{\n  0: \"all\",\n  1: \"files\",\n  2: \"functions\",\n  3: \"variables\"\n};\n\nvar indexSectionLabels =\n{\n  0: \"全部\",\n  1: \"文件\",\n  2: \"函数\",\n  3: \"变量\"\n};\n\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_0.js",
    "content": "var searchData=\n[\n  ['ad',['aD',['../jquery_8js.html#ad223f5fba68c41c1236671ac5c5b0fcb',1,'jquery.js']]],\n  ['am',['aM',['../jquery_8js.html#a8cc6111a5def3ea889157d13fb9a9672',1,'jquery.js']]],\n  ['ap',['ap',['../jquery_8js.html#a6ddf393cc7f9a8828e197bb0d9916c44',1,'jquery.js']]],\n  ['aq',['aQ',['../jquery_8js.html#a79eb58dc6cdf0aef563d5dc1ded27df5',1,'jquery.js']]],\n  ['au',['au',['../jquery_8js.html#a4fd8ddfab07c8d7c7cae0ab0e052cad3',1,'jquery.js']]],\n  ['az',['aZ',['../jquery_8js.html#ac87125cdee1a5e57da4ef619af49bc7d',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_1.js",
    "content": "var searchData=\n[\n  ['b',['b',['../jquery_8js.html#aa4026ad5544b958e54ce5e106fa1c805',1,'jquery.js']]],\n  ['bb',['bb',['../jquery_8js.html#a1d6558865876e1c8cca029fce41a4bdb',1,'jquery.js']]],\n  ['bq',['bq',['../jquery_8js.html#af6ee77c71b2c89bdb365145ac5ad1219',1,'jquery.js']]],\n  ['bs',['bs',['../jquery_8js.html#ae77642f8ef73fb9c20c2a737d956acda',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_2.js",
    "content": "var searchData=\n[\n  ['c',['c',['../jquery_8js.html#abce695e0af988ece0826d9ad59b8160d',1,'jquery.js']]],\n  ['css',['css',['../jquery_8js.html#a89ad527fcd82c01ebb587332f5b4fcd4',1,'jquery.js']]],\n  ['curcss',['curCSS',['../jquery_8js.html#a88b21f8ba3af86d6981b1da520ece33b',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_3.js",
    "content": "var searchData=\n[\n  ['indexsectionlabels',['indexSectionLabels',['../searchdata_8js.html#a529972e449c82dc118cbbd3bcf50c44d',1,'searchdata.js']]],\n  ['indexsectionnames',['indexSectionNames',['../searchdata_8js.html#a77149ceed055c6c6ce40973b5bdc19ad',1,'searchdata.js']]],\n  ['indexsectionswithcontent',['indexSectionsWithContent',['../searchdata_8js.html#a6250af3c9b54dee6efc5f55f40c78126',1,'searchdata.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_4.js",
    "content": "var searchData=\n[\n  ['k',['k',['../jquery_8js.html#ab26645c014aa005ecedef329ecf58c99',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_5.js",
    "content": "var searchData=\n[\n  ['l',['L',['../jquery_8js.html#a38ee4c0b5f4fe2a18d0c783af540d253',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_6.js",
    "content": "var searchData=\n[\n  ['searchdata',['searchData',['../all__0_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;all_0.js'],['../all__1_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;all_1.js'],['../files__0_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;files_0.js'],['../files__1_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;files_1.js'],['../functions__0_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;functions_0.js'],['../functions__1_8js.html#ad01a7523f103d6242ef9b0451861231e',1,'searchData():&#160;functions_1.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">载入中...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">搜索中...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">未找到</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search/variables_7.js",
    "content": "var searchData=\n[\n  ['z',['Z',['../jquery_8js.html#adc18d83abfd9f87d396e8fd6b6ac0fe1',1,'jquery.js']]]\n];\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/search_8js.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual/search/search.js 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_25539194184bab781b1c7ecd67774cd8.html\">search</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">函数</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">search.js 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\n函数</h2></td></tr>\n<tr class=\"memitem:a196a29bd5a5ee7cd5b485e0753a49e57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"search_8js.html#a196a29bd5a5ee7cd5b485e0753a49e57\">convertToId</a> (search)</td></tr>\n<tr class=\"separator:a196a29bd5a5ee7cd5b485e0753a49e57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a76d24aea0009f892f8ccc31d941c0a2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"search_8js.html#a76d24aea0009f892f8ccc31d941c0a2b\">getXPos</a> (item)</td></tr>\n<tr class=\"separator:a76d24aea0009f892f8ccc31d941c0a2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d7b405228661d7b6216b6925d2b8a69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"search_8js.html#a8d7b405228661d7b6216b6925d2b8a69\">getYPos</a> (item)</td></tr>\n<tr class=\"separator:a8d7b405228661d7b6216b6925d2b8a69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a52066106482f8136aa9e0ec859e8188f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"search_8js.html#a52066106482f8136aa9e0ec859e8188f\">SearchBox</a> (name, resultsPath, inFrame, label)</td></tr>\n<tr class=\"separator:a52066106482f8136aa9e0ec859e8188f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9189b9f7a32b6bc78240f40348f7fe03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"search_8js.html#a9189b9f7a32b6bc78240f40348f7fe03\">SearchResults</a> (name)</td></tr>\n<tr class=\"separator:a9189b9f7a32b6bc78240f40348f7fe03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a98192fa2929bb8e4b0a890a4909ab9b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"search_8js.html#a98192fa2929bb8e4b0a890a4909ab9b2\">setKeyActions</a> (elem, action)</td></tr>\n<tr class=\"separator:a98192fa2929bb8e4b0a890a4909ab9b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a499422fc054a5278ae32801ec0082c56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"search_8js.html#a499422fc054a5278ae32801ec0082c56\">setClassAttr</a> (elem, attr)</td></tr>\n<tr class=\"separator:a499422fc054a5278ae32801ec0082c56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6b2c651120de3ed1dcf0d85341d51895\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"search_8js.html#a6b2c651120de3ed1dcf0d85341d51895\">createResults</a> ()</td></tr>\n<tr class=\"separator:a6b2c651120de3ed1dcf0d85341d51895\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae95ec7d5d450d0a8d6928a594798aaf4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">function&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"search_8js.html#ae95ec7d5d450d0a8d6928a594798aaf4\">init_search</a> ()</td></tr>\n<tr class=\"separator:ae95ec7d5d450d0a8d6928a594798aaf4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">函数说明</h2>\n<a class=\"anchor\" id=\"a196a29bd5a5ee7cd5b485e0753a49e57\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function convertToId </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>search</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6b2c651120de3ed1dcf0d85341d51895\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function createResults </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a76d24aea0009f892f8ccc31d941c0a2b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function getXPos </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>item</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8d7b405228661d7b6216b6925d2b8a69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function getYPos </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>item</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae95ec7d5d450d0a8d6928a594798aaf4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function init_search </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a52066106482f8136aa9e0ec859e8188f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function SearchBox </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>name</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>resultsPath</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>inFrame</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>label</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9189b9f7a32b6bc78240f40348f7fe03\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function SearchResults </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>name</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a499422fc054a5278ae32801ec0082c56\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function setClassAttr </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>elem</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>attr</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a98192fa2929bb8e4b0a890a4909ab9b2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">function setKeyActions </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>elem</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>action</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/searchdata_8js.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.9\"/>\n<title>MSC for Windows&amp;Linux API: iFlytek MSC Reference Manual/search/searchdata.js 文件参考</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">MSC for Windows&amp;Linux API\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- 制作者 Doxygen 1.8.9 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'搜索');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>首页</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>文件</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"搜索\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>文件列表</span></a></li>\n      <li><a href=\"globals.html\"><span>文件成员</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_9a65024ac0a05d9abfc2bb6c7ff8f818.html\">iFlytek MSC Reference Manual</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_25539194184bab781b1c7ecd67774cd8.html\">search</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">变量</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">searchdata.js 文件参考</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\n变量</h2></td></tr>\n<tr class=\"memitem:a6250af3c9b54dee6efc5f55f40c78126\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"searchdata_8js.html#a6250af3c9b54dee6efc5f55f40c78126\">indexSectionsWithContent</a></td></tr>\n<tr class=\"separator:a6250af3c9b54dee6efc5f55f40c78126\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a77149ceed055c6c6ce40973b5bdc19ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"searchdata_8js.html#a77149ceed055c6c6ce40973b5bdc19ad\">indexSectionNames</a></td></tr>\n<tr class=\"separator:a77149ceed055c6c6ce40973b5bdc19ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a529972e449c82dc118cbbd3bcf50c44d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">var&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"searchdata_8js.html#a529972e449c82dc118cbbd3bcf50c44d\">indexSectionLabels</a></td></tr>\n<tr class=\"separator:a529972e449c82dc118cbbd3bcf50c44d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">变量说明</h2>\n<a class=\"anchor\" id=\"a529972e449c82dc118cbbd3bcf50c44d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var indexSectionLabels</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<b>初始值:</b><div class=\"fragment\"><div class=\"line\">=</div>\n<div class=\"line\">{</div>\n<div class=\"line\">  0: <span class=\"stringliteral\">&quot;全部&quot;</span>,</div>\n<div class=\"line\">  1: <span class=\"stringliteral\">&quot;文件&quot;</span>,</div>\n<div class=\"line\">  2: <span class=\"stringliteral\">&quot;函数&quot;</span></div>\n<div class=\"line\">}</div>\n</div><!-- fragment -->\n</div>\n</div>\n<a class=\"anchor\" id=\"a77149ceed055c6c6ce40973b5bdc19ad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var indexSectionNames</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<b>初始值:</b><div class=\"fragment\"><div class=\"line\">=</div>\n<div class=\"line\">{</div>\n<div class=\"line\">  0: <span class=\"stringliteral\">&quot;all&quot;</span>,</div>\n<div class=\"line\">  1: <span class=\"stringliteral\">&quot;files&quot;</span>,</div>\n<div class=\"line\">  2: <span class=\"stringliteral\">&quot;functions&quot;</span></div>\n<div class=\"line\">}</div>\n</div><!-- fragment -->\n</div>\n</div>\n<a class=\"anchor\" id=\"a6250af3c9b54dee6efc5f55f40c78126\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">var indexSectionsWithContent</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<b>初始值:</b><div class=\"fragment\"><div class=\"line\">=</div>\n<div class=\"line\">{</div>\n<div class=\"line\">  0: <span class=\"stringliteral\">&quot;mq&quot;</span>,</div>\n<div class=\"line\">  1: <span class=\"stringliteral\">&quot;mq&quot;</span>,</div>\n<div class=\"line\">  2: <span class=\"stringliteral\">&quot;mq&quot;</span></div>\n<div class=\"line\">}</div>\n</div><!-- fragment -->\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n生成于 2016年 八月 28日 星期日 20:43:39 , 为 MSC for Windows&amp;Linux API使用  &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.9\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "xf/doc/iFlytek MSC Reference Manual/tabs.css",
    "content": ".tabs, .tabs2, .tabs3 {\n    background-image: url('tab_b.png');\n    width: 100%;\n    z-index: 101;\n    font-size: 13px;\n    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n}\n\n.tabs2 {\n    font-size: 10px;\n}\n.tabs3 {\n    font-size: 9px;\n}\n\n.tablist {\n    margin: 0;\n    padding: 0;\n    display: table;\n}\n\n.tablist li {\n    float: left;\n    display: table-cell;\n    background-image: url('tab_b.png');\n    line-height: 36px;\n    list-style: none;\n}\n\n.tablist a {\n    display: block;\n    padding: 0 20px;\n    font-weight: bold;\n    background-image:url('tab_s.png');\n    background-repeat:no-repeat;\n    background-position:right;\n    color: #283A5D;\n    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n    text-decoration: none;\n    outline: none;\n}\n\n.tabs3 .tablist a {\n    padding: 0 10px;\n}\n\n.tablist a:hover {\n    background-image: url('tab_h.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n    text-decoration: none;\n}\n\n.tablist li.current a {\n    background-image: url('tab_a.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n}\n"
  },
  {
    "path": "xf/doc/tts_sample/32bit_make.sh",
    "content": "#编译32位可执行文件\nmake clean;make\n#设置libmsc.so库搜索路径\nexport LD_LIBRARY_PATH=$(pwd)/../../libs/x86/\n"
  },
  {
    "path": "xf/doc/tts_sample/64bit_make.sh",
    "content": "#编译64位可执行文件\nmake clean;make LINUX64=1\n#设置libmsc.so库搜索路径\nexport LD_LIBRARY_PATH=$(pwd)/../../libs/x64/\n"
  },
  {
    "path": "xf/doc/tts_sample/Makefile",
    "content": "#common makefile header\r\n\r\nDIR_INC = ../../include\r\nDIR_BIN = ../../bin\r\nDIR_LIB = ../../libs\r\n\r\nTARGET\t= tts_sample\r\nBIN_TARGET = $(DIR_BIN)/$(TARGET)\r\n\r\nCROSS_COMPILE = \r\nCFLAGS = -g -Wall -I$(DIR_INC)\r\n\r\nifdef LINUX64\r\nLDFLAGS := -L$(DIR_LIB)/x64\r\nelse\r\nLDFLAGS := -L$(DIR_LIB)/x86 \r\nendif\r\nLDFLAGS += -lmsc -lrt -ldl -lpthread\r\n\r\nOBJECTS := $(patsubst %.c,%.o,$(wildcard *.c))\r\n\r\n$(BIN_TARGET) : $(OBJECTS)\r\n\t$(CROSS_COMPILE)gcc $(CFLAGS) $^ -o $@ $(LDFLAGS)\r\n\r\n%.o : %.c\r\n\t$(CROSS_COMPILE)gcc -c $(CFLAGS) $< -o $@\r\nclean:\r\n\t@rm -f *.o $(BIN_TARGET)\r\n\r\n.PHONY:clean\r\n\r\n#common makefile foot\r\n"
  },
  {
    "path": "xf/doc/tts_sample/tts_sample.c",
    "content": "﻿/*\r\n* 语音合成（Text To Speech，TTS）技术能够自动将任意文字实时转换为连续的\r\n* 自然语音，是一种能够在任何时间、任何地点，向任何人提供语音信息服务的\r\n* 高效便捷手段，非常符合信息时代海量数据、动态更新和个性化查询的需求。\r\n*/\r\n\r\n#include <stdio.h>\r\n#include <string.h>\r\n#include <stdlib.h>\r\n#include <unistd.h>\r\n\r\n#include \"qtts.h\"\r\n#include \"msp_cmn.h\"\r\n#include \"msp_errors.h\"\r\n\r\n/* wav音频头部格式 */\r\ntypedef struct _wave_pcm_hdr\r\n{\r\n\tchar            riff[4];                // = \"RIFF\"\r\n\tint\t\tsize_8;                 // = FileSize - 8\r\n\tchar            wave[4];                // = \"WAVE\"\r\n\tchar            fmt[4];                 // = \"fmt \"\r\n\tint\t\tfmt_size;\t\t// = 下一个结构体的大小 : 16\r\n\r\n\tshort int       format_tag;             // = PCM : 1\r\n\tshort int       channels;               // = 通道数 : 1\r\n\tint\t\tsamples_per_sec;        // = 采样率 : 8000 | 6000 | 11025 | 16000\r\n\tint\t\tavg_bytes_per_sec;      // = 每秒字节数 : samples_per_sec * bits_per_sample / 8\r\n\tshort int       block_align;            // = 每采样点字节数 : wBitsPerSample / 8\r\n\tshort int       bits_per_sample;        // = 量化比特数: 8 | 16\r\n\r\n\tchar            data[4];                // = \"data\";\r\n\tint\t\tdata_size;              // = 纯数据长度 : FileSize - 44 \r\n} wave_pcm_hdr;\r\n\r\n/* 默认wav音频头部数据 */\r\nwave_pcm_hdr default_wav_hdr = \r\n{\r\n\t{ 'R', 'I', 'F', 'F' },\r\n\t0,\r\n\t{'W', 'A', 'V', 'E'},\r\n\t{'f', 'm', 't', ' '},\r\n\t16,\r\n\t1,\r\n\t1,\r\n\t16000,\r\n\t32000,\r\n\t2,\r\n\t16,\r\n\t{'d', 'a', 't', 'a'},\r\n\t0  \r\n};\r\n/* 文本合成 */\r\nint text_to_speech(const char* src_text, const char* des_path, const char* params)\r\n{\r\n\tint          ret          = -1;\r\n\tFILE*        fp           = NULL;\r\n\tconst char*  sessionID    = NULL;\r\n\tunsigned int audio_len    = 0;\r\n\twave_pcm_hdr wav_hdr      = default_wav_hdr;\r\n\tint          synth_status = MSP_TTS_FLAG_STILL_HAVE_DATA;\r\n\r\n\tif (NULL == src_text || NULL == des_path)\r\n\t{\r\n\t\tprintf(\"params is error!\\n\");\r\n\t\treturn ret;\r\n\t}\r\n\tfp = fopen(des_path, \"wb\");\r\n\tif (NULL == fp)\r\n\t{\r\n\t\tprintf(\"open %s error.\\n\", des_path);\r\n\t\treturn ret;\r\n\t}\r\n\t/* 开始合成 */\r\n\tsessionID = QTTSSessionBegin(params, &ret);\r\n\tif (MSP_SUCCESS != ret)\r\n\t{\r\n\t\tprintf(\"QTTSSessionBegin failed, error code: %d.\\n\", ret);\r\n\t\tfclose(fp);\r\n\t\treturn ret;\r\n\t}\r\n\tret = QTTSTextPut(sessionID, src_text, (unsigned int)strlen(src_text), NULL);\r\n\tif (MSP_SUCCESS != ret)\r\n\t{\r\n\t\tprintf(\"QTTSTextPut failed, error code: %d.\\n\",ret);\r\n\t\tQTTSSessionEnd(sessionID, \"TextPutError\");\r\n\t\tfclose(fp);\r\n\t\treturn ret;\r\n\t}\r\n\tprintf(\"正在合成 ...\\n\");\r\n\tfwrite(&wav_hdr, sizeof(wav_hdr) ,1, fp); //添加wav音频头，使用采样率为16000\r\n\twhile (1) \r\n\t{\r\n\t\t/* 获取合成音频 */\r\n\t\tconst void* data = QTTSAudioGet(sessionID, &audio_len, &synth_status, &ret);\r\n\t\tif (MSP_SUCCESS != ret)\r\n\t\t\tbreak;\r\n\t\tif (NULL != data)\r\n\t\t{\r\n\t\t\tfwrite(data, audio_len, 1, fp);\r\n\t\t    wav_hdr.data_size += audio_len; //计算data_size大小\r\n\t\t}\r\n\t\tif (MSP_TTS_FLAG_DATA_END == synth_status)\r\n\t\t\tbreak;\r\n\t\tprintf(\">\");\r\n\t\tusleep(150*1000); //防止频繁占用CPU\r\n\t}//合成状态synth_status取值请参阅《讯飞语音云API文档》\r\n\tprintf(\"\\n\");\r\n\tif (MSP_SUCCESS != ret)\r\n\t{\r\n\t\tprintf(\"QTTSAudioGet failed, error code: %d.\\n\",ret);\r\n\t\tQTTSSessionEnd(sessionID, \"AudioGetError\");\r\n\t\tfclose(fp);\r\n\t\treturn ret;\r\n\t}\r\n\t/* 修正wav文件头数据的大小 */\r\n\twav_hdr.size_8 += wav_hdr.data_size + (sizeof(wav_hdr) - 8);\r\n\t\r\n\t/* 将修正过的数据写回文件头部,音频文件为wav格式 */\r\n\tfseek(fp, 4, 0);\r\n\tfwrite(&wav_hdr.size_8,sizeof(wav_hdr.size_8), 1, fp); //写入size_8的值\r\n\tfseek(fp, 40, 0); //将文件指针偏移到存储data_size值的位置\r\n\tfwrite(&wav_hdr.data_size,sizeof(wav_hdr.data_size), 1, fp); //写入data_size的值\r\n\tfclose(fp);\r\n\tfp = NULL;\r\n\t/* 合成完毕 */\r\n\tret = QTTSSessionEnd(sessionID, \"Normal\");\r\n\tif (MSP_SUCCESS != ret)\r\n\t{\r\n\t\tprintf(\"QTTSSessionEnd failed, error code: %d.\\n\",ret);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\nint main(int argc, char* argv[])\r\n{\r\n\tint         ret                  = MSP_SUCCESS;\r\n\tconst char* login_params         = \"appid = 5808ae7e, work_dir = .\";//登录参数,appid与msc库绑定,请勿随意改动\r\n\t/*\r\n\t* rdn:           合成音频数字发音方式\r\n\t* volume:        合成音频的音量\r\n\t* pitch:         合成音频的音调\r\n\t* speed:         合成音频对应的语速\r\n\t* voice_name:    合成发音人\r\n\t* sample_rate:   合成音频采样率\r\n\t* text_encoding: 合成文本编码格式\r\n\t*\r\n\t* 详细参数说明请参阅《讯飞语音云MSC--API文档》\r\n\t*/\r\n\tconst char* session_begin_params = \"voice_name = xiaoyan, text_encoding = utf8, sample_rate = 16000, speed = 50, volume = 50, pitch = 50, rdn = 2\";\r\n\tconst char* filename             = \"tts_sample.wav\"; //合成的语音文件名称\r\n\tconst char* text                 = \"亲爱的用户，您好，这是一个语音合成示例，感谢您对科大讯飞语音技术的支持！科大讯飞是亚太地区最大的语音上市公司，股票代码：002230\"; //合成文本\r\n\r\n\t/* 用户登录 */\r\n\tret = MSPLogin(NULL, NULL, login_params);//第一个参数是用户名，第二个参数是密码，第三个参数是登录参数，用户名和密码可在http://open.voicecloud.cn注册获取\r\n\tif (MSP_SUCCESS != ret)\r\n\t{\r\n\t\tprintf(\"MSPLogin failed, error code: %d.\\n\", ret);\r\n\t\tgoto exit ;//登录失败，退出登录\r\n\t}\r\n\tprintf(\"\\n###########################################################################\\n\");\r\n\tprintf(\"## 语音合成（Text To Speech，TTS）技术能够自动将任意文字实时转换为连续的 ##\\n\");\r\n\tprintf(\"## 自然语音，是一种能够在任何时间、任何地点，向任何人提供语音信息服务的  ##\\n\");\r\n\tprintf(\"## 高效便捷手段，非常符合信息时代海量数据、动态更新和个性化查询的需求。  ##\\n\");\r\n\tprintf(\"###########################################################################\\n\\n\");\r\n\t/* 文本合成 */\r\n\tprintf(\"开始合成 ...\\n\");\r\n\tret = text_to_speech(text, filename, session_begin_params);\r\n\tif (MSP_SUCCESS != ret)\r\n\t{\r\n\t\tprintf(\"text_to_speech failed, error code: %d.\\n\", ret);\r\n\t}\r\n\tprintf(\"合成完毕\\n\");\r\n\r\nexit:\r\n\tprintf(\"按任意键退出 ...\\n\");\r\n\tgetchar();\r\n\tMSPLogout(); //退出登录\r\n\r\n\treturn 0;\r\n}\r\n\r\n"
  },
  {
    "path": "xf/include/convert.h",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <unistd.h>\n#include <sys/time.h>\n\n#include \"qtts.h\"\n#include \"msp_cmn.h\"\n#include \"msp_errors.h\"\n\n// wav音频头部格式\ntypedef struct _wave_pcm_hdr\n{\n\tchar            riff[4];                // = \"RIFF\"\n\tint\t\t\t\tsize_8;                 // = FileSize - 8\n\tchar            wave[4];                // = \"WAVE\"\n\tchar            fmt[4];                 // = \"fmt \"\n\tint\t\t\t\tfmt_size;\t\t\t\t// = 下一个结构体的大小 : 16\n\n\tshort int       format_tag;             // = PCM : 1\n\tshort int       channels;               // = 通道数 : 1\n\tint\t\t\t\tsamples_per_sec;        // = 采样率 : 8000 | 6000 | 11025 | 16000\n\tint\t\t\t\tavg_bytes_per_sec;      // = 每秒字节数 : samples_per_sec * bits_per_sample / 8\n\tshort int       block_align;            // = 每采样点字节数 : wBitsPerSample / 8\n\tshort int       bits_per_sample;        // = 量化比特数: 8 | 16\n\n\tchar            data[4];                // = \"data\";\n\tint\t\t\t\tdata_size;              // = 纯数据长度 : FileSize - 44\n} wave_pcm_hdr;\n\n// 默认wav音频头部数据\nwave_pcm_hdr default_wav_hdr =\n{\n\t{ 'R', 'I', 'F', 'F' },\n\t0,\n\t{'W', 'A', 'V', 'E'},\n\t{'f', 'm', 't', ' '},\n\t16,\n\t1,\n\t1,\n\t8000,\n\t16000,\n\t2,\n\t16,\n\t{'d', 'a', 't', 'a'},\n\t0\n};\n\n\n// 文本合成\nint text_to_speech(const char* src_text, const char* des_path, const char* params, int sleep_time)\n{\n\tint          ret          = -1;\n\tFILE*        fp           = NULL;\n\tconst char*  sessionID    = NULL;\n\tunsigned int audio_len    = 0;\n\twave_pcm_hdr wav_hdr      = default_wav_hdr;\n\tint          synth_status = MSP_TTS_FLAG_STILL_HAVE_DATA;\n\n\n\tif (NULL == src_text || NULL == des_path)\n\t{\n\t\treturn ret;\n\t}\n\tfp = fopen(des_path, \"wb\");\n\tif (NULL == fp)\n\t{\n\t\treturn ret;\n\t}\n\t//开始合成\n\tsessionID = QTTSSessionBegin(params, &ret);\n\tif (MSP_SUCCESS != ret)\n\t{\n\t\tfclose(fp);\n\t\treturn ret;\n\t}\n\tret = QTTSTextPut(sessionID, src_text, (unsigned int)strlen(src_text), NULL);\n\tif (MSP_SUCCESS != ret)\n\t{\n\t\tQTTSSessionEnd(sessionID, \"TextPutError\");\n\t\tfclose(fp);\n\t\treturn ret;\n\t}\n\tfwrite(&wav_hdr, sizeof(wav_hdr) ,1, fp); //添加wav音频头，使用采样率为8000\n\n\twhile (1)\n        {\n                /* 获取合成音频 */\n                const void* data = QTTSAudioGet(sessionID, &audio_len, &synth_status, &ret);\n                if (MSP_SUCCESS != ret)\n                        break;\n                if (NULL != data)\n                {\n                        fwrite(data, audio_len, 1, fp);\n                    wav_hdr.data_size += audio_len; //计算data_size大小\n                }\n                if (MSP_TTS_FLAG_DATA_END == synth_status)\n                        break;\n                usleep(sleep_time); //防止频繁占用CPU\n        }//合成状态synth_status取值请参阅《讯飞语音云API文档》\n\n\tif (MSP_SUCCESS != ret)\n\t{\n\t\tQTTSSessionEnd(sessionID, \"AudioGetError\");\n\t\tfclose(fp);\n\t\treturn ret;\n\t}\n\t// 修正wav文件头数据的大小\n\twav_hdr.size_8 += wav_hdr.data_size + (sizeof(wav_hdr) - 8);\n\n\t// 将修正过的数据写回文件头部,音频文件为wav格式\n\tfseek(fp, 4, 0);\n\tfwrite(&wav_hdr.size_8,sizeof(wav_hdr.size_8), 1, fp); //写入size_8的值\n\tfseek(fp, 40, 0); //将文件指针偏移到存储data_size值的位置\n\tfwrite(&wav_hdr.data_size,sizeof(wav_hdr.data_size), 1, fp); //写入data_size的值\n\tfclose(fp);\n\tfp = NULL;\n\t// 合成完毕\n\tret = QTTSSessionEnd(sessionID, \"Normal\");\n\treturn ret;\n}\n\n"
  },
  {
    "path": "xf/include/msp_cmn.h",
    "content": "/**\r\n * @file    msp_cmn.h\r\n * @brief   Mobile Speech Platform Common Interface Header File\r\n * \r\n *  This file contains the quick common programming interface (API) declarations \r\n *  of MSP. Developer can include this file in your project to build applications.\r\n *  For more information, please read the developer guide.\r\n \r\n *  Use of this software is subject to certain restrictions and limitations set\r\n *  forth in a license agreement entered into between iFLYTEK, Co,LTD.\r\n *  and the licensee of this software.  Please refer to the license\r\n *  agreement for license use rights and restrictions.\r\n *\r\n *  Copyright (C)    1999 - 2012 by ANHUI USTC iFLYTEK, Co,LTD.\r\n *                   All rights reserved.\r\n * \r\n * @author  Speech Dept. iFLYTEK.\r\n * @version 1.0\r\n * @date    2012/09/01\r\n * \r\n * @see        \r\n * \r\n * History:\r\n * index    version        date            author        notes\r\n * 0        1.0            2012/09/01      MSC40        Create this file\r\n */\r\n\r\n#ifndef __MSP_CMN_H__\r\n#define __MSP_CMN_H__\r\n\r\n#include \"msp_types.h\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif /* C++ */\r\n//#ifdef MSP_WCHAR_SUPPORT\r\n/** \r\n * @fn\t\tWchar2Mbytes\r\n * @brief\twchar to mbytes\r\n * \r\n *  User login.\r\n * \r\n * @return\tint MSPAPI\t\t\t\t- Return 0 in success, otherwise return error code.\r\n * @param\tconst wchar_t* wcstr\t- [in] Null-terminated source string(wchar_t *).\r\n * @param\tchar* mbstr\t\t\t\t- [in] Destination string(char *).\r\n * @param   int len\t\t\t\t\t- [in] The maximum number of bytes that can be stored in the multibyte output string.\r\n * @see\t\t\r\n */\r\n\r\nchar *Wchar2Mbytes(const wchar_t* wcstr);\r\n\r\n/** \r\n * @fn\t\tMbytes2Wchar\r\n * @brief\tmbytes to wchar\r\n * \r\n *  User login.\r\n * \r\n * @return\tint MSPAPI\t\t\t\t- Return 0 in success, otherwise return error code.\r\n * @param\tconst char* mbstr\t\t- [in] Null-terminated source string(char *).\r\n * @param\twchar_t* wcstr\t\t\t- [in] Destination string(wchar_t *).\r\n * @param   int wlen\t\t\t\t- [in] The maximum number of multibyte characters to convert.\r\n * @see\t\t\r\n */\r\nwchar_t *Mbytes2Wchar(const char *mbstr);\r\n\r\n//#endif /*MSP_WCHAR_SUPPORT*/\r\n\r\n/** \r\n * @fn\t\tMSPLogin\r\n * @brief\tuser login interface\r\n * \r\n *  User login.\r\n * \r\n * @return\tint MSPAPI\t\t\t- Return 0 in success, otherwise return error code.\r\n * @param\tconst char* usr\t\t- [in] user name.\r\n * @param\tconst char* pwd\t\t- [in] password.\r\n * @param\tconst char* params\t- [in] parameters when user login.\r\n * @see\t\t\r\n */\r\nint MSPAPI MSPLogin(const char* usr, const char* pwd, const char* params);\ntypedef int (MSPAPI *Proc_MSPLogin)(const char* usr, const char* pwd, const char* params);\r\n//#ifdef MSP_WCHAR_SUPPORT\r\nint MSPAPI MSPLoginW(const wchar_t* usr, const wchar_t* pwd, const wchar_t* params);\r\ntypedef int (MSPAPI *Proc_MSPLoginW)(const wchar_t* usr, const wchar_t* pwd, const wchar_t* params);\r\n//#endif/*MSP_WCHAR_SUPPORT*/\r\n/** \r\n * @fn\t\tMSPLogout\r\n * @brief\tuser logout interface\r\n * \r\n *  User logout\r\n * \r\n * @return\tint MSPAPI\t\t\t- Return 0 in success, otherwise return error code.\r\n * @see\t\t\r\n */\r\nint MSPAPI MSPLogout();\r\ntypedef int (MSPAPI *Proc_MSPLogout)();\r\n//#ifdef MSP_WCHAR_SUPPORT\r\nint MSPAPI MSPLogoutW();\r\ntypedef int (MSPAPI *Proc_MSPLogoutW)();\r\n//#endif/*MSP_WCHAR_SUPPORT*/\r\n/** \r\n * @fn\t\tMSPUpload\r\n * @brief\tUpload User Specific Data\r\n * \r\n *  Upload data such as user config, custom grammar, etc.\r\n * \r\n * @return\tint MSPAPI\t\t\t\t- Return 0 in success, otherwise return error code.\r\n * @param\tconst char* dataName\t- [in] data name, should be unique to diff other data.\r\n * @param\tconst char* params\t\t- [in] parameters about uploading data.\r\n * @param\tconst char* dataID\t\t- [in] id of the data to be operated.\r\n * @see\t\t\r\n */\r\nint MSPAPI MSPUpload( const char* dataName, const char* params, const char* dataID);\r\ntypedef int (MSPAPI* Proc_MSPUpload)( const char* dataName, const char* params, const char* dataID);\r\n\r\n/** \r\n * @fn\t\tMSPDownload\r\n * @brief\tDownload User Specific Data\r\n * \r\n *  Download data such as user config, etc.\r\n * \r\n * @return\tint MSPAPI\t\t\t\t- Return 0 in success, otherwise return error code.\r\n * @param\tconst char* params\t\t- [in] parameters about data to be downloaded.\r\n * @see\t\t\r\n */\r\ntypedef int (*DownloadStatusCB)(int errorCode, long param1, const void *param2, void *userData);\r\ntypedef int (*DownloadResultCB)(const void *data, long dataLen, void *userData);\r\nint MSPAPI MSPDownload(const char* dataName, const char* params, DownloadStatusCB statusCb, DownloadResultCB resultCb, void*userData);\r\ntypedef int (MSPAPI* Proc_MSPDownload)(const char* dataName, const char* params, DownloadStatusCB statusCb, DownloadResultCB resultCb, void*userData);\r\nint MSPAPI MSPDownloadW(const wchar_t* wdataName, const wchar_t* wparams, DownloadStatusCB statusCb, DownloadResultCB resultCb, void*userData);\r\ntypedef int (MSPAPI* Proc_MSPDownloadW) (const wchar_t* wdataName, const wchar_t* wparams, DownloadStatusCB statusCb, DownloadResultCB resultCb, void*userData);\r\n\r\n/** \r\n * @fn\t\tMSPAppendData\r\n * @brief\tAppend Data.\r\n * \r\n *  Write data to msc, such as data to be uploaded, searching text, etc.\r\n * \r\n * @return\tint MSPAPI\t\t\t\t\t- Return 0 in success, otherwise return error code.\r\n * @param\tvoid* data\t\t\t\t\t- [in] the data buffer pointer, data could be binary.\r\n * @param\tunsigned int dataLen\t\t- [in] length of data.\r\n * @param\tunsigned int dataStatus\t\t- [in] data status, 2: first or continuous, 4: last.\r\n * @see\t\t\r\n */\r\nint MSPAPI MSPAppendData(void* data, unsigned int dataLen, unsigned int dataStatus);\r\ntypedef int (MSPAPI* Proc_MSPAppendData)(void* data, unsigned int dataLen, unsigned int dataStatus);\r\n\r\n/** \r\n * @fn\t\tMSPGetResult\r\n * @brief\tGet Result\r\n * \r\n *  Get result of uploading, downloading or searching, etc.\r\n * \r\n * @return\tconst char* MSPAPI\t\t- Return result of uploading, downloading or searching, etc.\r\n * @param\tint* rsltLen\t\t\t- [out] Length of result returned.\r\n * @param\tint* rsltStatus\t\t\t- [out] Status of result returned.\r\n * @param\tint* errorCode\t\t\t- [out] Return 0 in success, otherwise return error code.\r\n * @see\t\t\r\n */\r\nconst char* MSPAPI MSPGetResult(unsigned int* rsltLen, int* rsltStatus, int *errorCode);\r\ntypedef const char * (MSPAPI *Proc_MSPGetResult)(unsigned int* rsltLen, int* rsltStatus, int *errorCode);\r\n\r\n/** \r\n * @fn\t\tMSPSetParam\r\n * @brief\tset params of msc\r\n * \r\n *  set param of msc\r\n * \r\n * @return\tint\t- Return 0 if success, otherwise return errcode.\r\n * @param\tconst char* paramName\t- [in] param name.\r\n * @param\tconst char* paramValue\t- [in] param value\r\n * @see\t\t\r\n */\r\nint MSPAPI MSPSetParam( const char* paramName, const char* paramValue );\r\ntypedef int (MSPAPI *Proc_MSPSetParam)(const char* paramName, const char* paramValue);\r\n\r\n/** \r\n * @fn\t\tMSPGetParam\r\n * @brief\tget params of msc\r\n * \r\n *  get param of msc\r\n * \r\n * @return\tint\t- Return 0 if success, otherwise return errcode.\r\n * @param\tconst char* paramName\t- [in] param name.\r\n * @param\tconst char* paramValue\t- [out] param value\r\n * @param\tconst char* valueLen\t- [in/out] param value (buffer) length\r\n * @see\t\t\r\n */\r\nint MSPAPI MSPGetParam( const char *paramName, char *paramValue, unsigned int *valueLen );\r\ntypedef int (MSPAPI *Proc_MSPGetParam)( const char *paramName, char *paramValue, unsigned int *valueLen );\r\n\r\n/** \r\n * @fn\t\tMSPUploadData\r\n * @brief\tUpload User Specific Data\r\n * \r\n *  Upload data such as user config, custom grammar, etc.\r\n * \r\n * @return\tconst char* MSPAPI\t\t- data id returned by Server, used for special command.\r\n * @param\tconst char* dataName\t- [in] data name, should be unique to diff other data.\r\n * @param\tvoid* data\t\t\t\t- [in] the data buffer pointer, data could be binary.\r\n * @param\tunsigned int dataLen\t- [in] length of data.\r\n * @param\tconst char* params\t\t- [in] parameters about uploading data.\r\n * @param\tint* errorCode\t\t\t- [out] Return 0 in success, otherwise return error code.\r\n * @see\t\t\r\n */\r\nconst char* MSPAPI MSPUploadData(const char* dataName, void* data, unsigned int dataLen, const char* params, int* errorCode);\r\ntypedef const char* (MSPAPI* Proc_MSPUploadData)(const char* dataName, void* data, unsigned int dataLen, const char* params, int* errorCode);\r\n\r\n/** \r\n * @fn\t\tMSPDownloadData\r\n * @brief\tDownload User Specific Data\r\n * \r\n *  Download data such as user config, etc.\r\n * \r\n * @return\tconst void*\tMSPAPI\t\t- received data buffer pointer, data could be binary, NULL if failed or data does not exsit.\r\n * @param\tconst char* params\t\t- [in] parameters about data to be downloaded.\r\n * @param\tunsigned int* dataLen\t- [out] length of received data.\r\n * @param\tint* errorCode\t\t\t- [out] Return 0 in success, otherwise return error code.\r\n * @see\t\t\r\n */\r\nconst void* MSPAPI MSPDownloadData(const char* params, unsigned int* dataLen, int* errorCode);\r\ntypedef const void* (MSPAPI* Proc_MSPDownloadData)(const char* params, unsigned int* dataLen, int* errorCode);\r\n//#ifdef MSP_WCHAR_SUPPORT\r\nconst void* MSPAPI MSPDownloadDataW(const wchar_t* params, unsigned int* dataLen, int* errorCode);\r\ntypedef const void* (MSPAPI* Proc_MSPDownloadDataW)(const wchar_t* params, unsigned int* dataLen, int* errorCode);\r\n//#endif/*MSP_WCHAR_SUPPORT*/\r\n/** \r\n * @fn\t\tMSPSearch\r\n * @brief\tSearch text for result\r\n * \r\n *  Search text content, and got text result\r\n * \r\n * @return\tconst void*\tMSPAPI\t\t- received data buffer pointer, data could be binary, NULL if failed or data does not exsit.\r\n * @param\tconst char* params\t\t- [in] parameters about data to be downloaded.\r\n * @param\tunsigned int* dataLen\t- [out] length of received data.\r\n * @param\tint* errorCode\t\t\t- [out] Return 0 in success, otherwise return error code.\r\n * @see\t\t\r\n */\r\nconst char* MSPAPI MSPSearch(const char* params, const char* text, unsigned int* dataLen, int* errorCode);\r\ntypedef const char* (MSPAPI* Proc_MSPSearch)(const char* params, const char* text, unsigned int* dataLen, int* errorCode);\r\n\r\n\r\n\r\ntypedef int (*NLPSearchCB)(const char *sessionID, int errorCode, int status, const void* result, long rsltLen, void *userData);\r\nconst char* MSPAPI MSPNlpSearch(const char* params, const char* text, unsigned int textLen, int *errorCode, NLPSearchCB callback, void *userData);\r\ntypedef const char* (MSPAPI* Proc_MSPNlpSearch)(const char* params, const char* text, unsigned int textLen, int *errorCode, NLPSearchCB callback, void *userData);\r\nint MSPAPI MSPNlpSchCancel(const char *sessionID, const char *hints);\r\n\r\n/** \r\n * @fn\t\tMSPRegisterNotify\r\n * @brief\tRegister a Callback\r\n * \r\n *  Register a Callback\r\n * \r\n * @return\tint                     -\r\n * @param\tmsp_status_ntf_handler statusCb\t\t- [in] notify handler\r\n * @param\tvoid *userData                   \t- [in] userData\r\n * @see\t\t\r\n */\r\ntypedef void ( *msp_status_ntf_handler)( int type, int status, int param1, const void *param2, void *userData );\r\nint MSPAPI MSPRegisterNotify( msp_status_ntf_handler statusCb, void *userData );\r\ntypedef const char* (MSPAPI* Proc_MSPRegisterNotify)( msp_status_ntf_handler statusCb, void *userData );\r\n\r\n/**\r\n * @fn\t\tMSPGetVersion\r\n * @brief\tGet version of MSC or Local Engine\r\n *\r\n * Get version of MSC or Local Engine\r\n * \r\n * @return\tconst char * MSPAPI\t\t- Return version value if success, NULL if fail.\r\n * @param\tconst char *verName\t\t- [in] version name, could be \"msc\", \"aitalk\", \"aisound\", \"ivw\".\r\n * @param\tint *errorCode\t\t\t- [out] Return 0 in success, otherwise return error code.\r\n * @see\r\n */\r\nconst char* MSPAPI MSPGetVersion(const char *verName, int *errorCode);\r\ntypedef const char* (MSPAPI * Proc_MSPGetVersion)(const char *verName, int *errorCode);\r\n\r\n#ifdef __cplusplus\r\n} /* extern \"C\" */\t\r\n#endif /* C++ */\r\n\r\n#endif /* __MSP_CMN_H__ */\r\n"
  },
  {
    "path": "xf/include/msp_errors.h",
    "content": "#ifndef __MSP_ERRORS_H__\r\n#define __MSP_ERRORS_H__\r\n\r\n#define MSP_HTTP_ERROR(x) ((x) + MSP_ERROR_HTTP_BASE )\r\n\r\nenum\r\n{\r\n\tMSP_SUCCESS\t\t\t\t\t\t\t\t= 0,\r\n\tMSP_ERROR_FAIL\t\t\t\t\t\t\t= -1,\r\n\tMSP_ERROR_EXCEPTION\t\t\t\t\t\t= -2,\r\n\r\n\t/* General errors 10100(0x2774) */\r\n\tMSP_ERROR_GENERAL\t\t\t\t\t\t= 10100, \t/* 0x2774 */\r\n\tMSP_ERROR_OUT_OF_MEMORY\t\t\t\t\t= 10101, \t/* 0x2775 */\r\n\tMSP_ERROR_FILE_NOT_FOUND\t\t\t\t= 10102, \t/* 0x2776 */\r\n\tMSP_ERROR_NOT_SUPPORT\t\t\t\t\t= 10103, \t/* 0x2777 */\r\n\tMSP_ERROR_NOT_IMPLEMENT\t\t\t\t\t= 10104, \t/* 0x2778 */\r\n\tMSP_ERROR_ACCESS\t\t\t\t\t\t= 10105, \t/* 0x2779 */\r\n\tMSP_ERROR_INVALID_PARA\t\t\t\t\t= 10106, \t/* 0x277A */  /* ȱٲ */\r\n\tMSP_ERROR_INVALID_PARA_VALUE\t\t\t= 10107, \t/* 0x277B */  /* Чֵ */\r\n\tMSP_ERROR_INVALID_HANDLE\t\t\t\t= 10108, \t/* 0x277C */\r\n\tMSP_ERROR_INVALID_DATA\t\t\t\t\t= 10109, \t/* 0x277D */\r\n\tMSP_ERROR_NO_LICENSE\t\t\t\t\t= 10110, \t/* 0x277E */  /* Ȩ */\r\n\tMSP_ERROR_NOT_INIT\t\t\t\t\t\t= 10111, \t/* 0x277F */  /* δʼ, */\r\n\tMSP_ERROR_NULL_HANDLE\t\t\t\t\t= 10112, \t/* 0x2780 */\r\n    MSP_ERROR_OVERFLOW\t\t\t\t\t\t= 10113, \t/* 0x2781 */  /* ûģ(10), */\r\n                                                                      /* ֻڲʱһûвע */\r\n\tMSP_ERROR_TIME_OUT\t\t\t\t\t\t= 10114, \t/* 0x2782 */  /* ʱ */\r\n\tMSP_ERROR_OPEN_FILE\t\t\t\t\t\t= 10115, \t/* 0x2783 */\r\n\tMSP_ERROR_NOT_FOUND\t\t\t\t\t\t= 10116, \t/* 0x2784 */  /* ݿģͲ */\r\n\tMSP_ERROR_NO_ENOUGH_BUFFER\t\t\t\t= 10117, \t/* 0x2785 */\r\n\tMSP_ERROR_NO_DATA\t\t\t\t\t\t= 10118, \t/* 0x2786 */  /* ӿͻ˶Ƶλȡʱ */\r\n\tMSP_ERROR_NO_MORE_DATA\t\t\t\t\t= 10119, \t/* 0x2787 */\r\n\tMSP_ERROR_NO_RESPONSE_DATA\t\t\t\t= 10120, \t/* 0x2788 */\r\n\tMSP_ERROR_ALREADY_EXIST\t\t\t\t\t= 10121, \t/* 0x2789 */  /* ݿģѴ */\r\n\tMSP_ERROR_LOAD_MODULE\t\t\t\t\t= 10122, \t/* 0x278A */\r\n\tMSP_ERROR_BUSY\t\t\t\t\t\t\t= 10123, \t/* 0x278B */\r\n\tMSP_ERROR_INVALID_CONFIG\t\t\t\t= 10124, \t/* 0x278C */\r\n\tMSP_ERROR_VERSION_CHECK                 = 10125, \t/* 0x278D */\r\n\tMSP_ERROR_CANCELED\t\t\t\t\t\t= 10126, \t/* 0x278E */\r\n\tMSP_ERROR_INVALID_MEDIA_TYPE\t\t\t= 10127, \t/* 0x278F */\r\n\tMSP_ERROR_CONFIG_INITIALIZE\t\t\t\t= 10128, \t/* 0x2790 */\r\n\tMSP_ERROR_CREATE_HANDLE\t\t\t\t\t= 10129, \t/* 0x2791 */\r\n\tMSP_ERROR_CODING_LIB_NOT_LOAD\t\t\t= 10130, \t/* 0x2792 */\r\n\tMSP_ERROR_USER_CANCELLED\t\t\t\t= 10131, \t/* 0x2793 */\r\n\tMSP_ERROR_INVALID_OPERATION\t\t\t\t= 10132, \t/* 0x2794 */\r\n\tMSP_ERROR_MESSAGE_NOT_COMPLETE\t\t\t= 10133,\t/* 0x2795 */   /* flash */\r\n\tMSP_ERROR_NO_EID\t\t\t\t\t\t= 10134,\t/* 0x2795 */\r\n\tMSP_ERROE_OVER_REQ                      = 10135,    /* 0x2797 */   /* client Redundancy request */\r\n\tMSP_ERROR_USER_ACTIVE_ABORT             = 10136,    /* 0x2798 */   /* user abort */\r\n\tMSP_ERROR_BUSY_GRMBUILDING              = 10137,    /* 0x2799 */\r\n\tMSP_ERROR_BUSY_LEXUPDATING              = 10138,    /* 0x279A */\r\n\tMSP_ERROR_SESSION_RESET\t                = 10139,    /* 0x279B */   /* mscֹỰ׼ش */\r\n\tMSP_ERROR_BOS_TIMEOUT                   = 10140,    /* 0x279C */   /* VADǰ˵㳬ʱ */\r\n\tMSP_ERROR_STREAM_FILTER\t\t\t\t\t= 10141,\t/* 0X279D */   /* AIUIǰStream */\r\n\r\n\t/* Error codes of network 10200(0x27D8)*/\r\n\tMSP_ERROR_NET_GENERAL\t\t\t\t\t= 10200, \t/* 0x27D8 */\r\n\tMSP_ERROR_NET_OPENSOCK         \t\t\t= 10201, \t/* 0x27D9 */   /* Open socket */\r\n\tMSP_ERROR_NET_CONNECTSOCK      \t\t\t= 10202, \t/* 0x27DA */   /* Connect socket */\r\n\tMSP_ERROR_NET_ACCEPTSOCK       \t\t\t= 10203, \t/* 0x27DB */   /* Accept socket */\r\n\tMSP_ERROR_NET_SENDSOCK         \t\t\t= 10204, \t/* 0x27DC */   /* Send socket data */\r\n\tMSP_ERROR_NET_RECVSOCK         \t\t\t= 10205, \t/* 0x27DD */   /* Recv socket data */\r\n\tMSP_ERROR_NET_INVALIDSOCK      \t\t\t= 10206, \t/* 0x27DE */   /* Invalid socket handle */\r\n\tMSP_ERROR_NET_BADADDRESS       \t\t\t= 10207, \t/* 0x27EF */   /* Bad network address */\r\n\tMSP_ERROR_NET_BINDSEQUENCE     \t\t\t= 10208, \t/* 0x27E0 */   /* Bind after listen/connect */\r\n\tMSP_ERROR_NET_NOTOPENSOCK      \t\t\t= 10209, \t/* 0x27E1 */   /* Socket is not opened */\r\n\tMSP_ERROR_NET_NOTBIND         \t\t\t= 10210, \t/* 0x27E2 */   /* Socket is not bind to an address */\r\n\tMSP_ERROR_NET_NOTLISTEN        \t\t\t= 10211, \t/* 0x27E3 */   /* Socket is not listening */\r\n\tMSP_ERROR_NET_CONNECTCLOSE     \t\t\t= 10212, \t/* 0x27E4 */   /* The other side of connection is closed */\r\n\tMSP_ERROR_NET_NOTDGRAMSOCK     \t\t\t= 10213, \t/* 0x27E5 */   /* The socket is not datagram type */\r\n\tMSP_ERROR_NET_DNS     \t\t\t\t\t= 10214, \t/* 0x27E6 */   /* domain name is invalid or dns server does not function well */\r\n\tMSP_ERROR_NET_INIT     \t\t\t\t\t= 10215, \t/* 0x27E7 */   /* ssl ctx create failed */\r\n\r\n\t/*nfl error*/\r\n\tMSP_ERROR_NFL_INNER_ERROR               = 10216,    /* NFL inner error */\r\n\tMSP_ERROR_MSS_TIME_OUT                  = 10217,    /* MSS TIMEOUT */\r\n\tMSP_ERROT_CLIENT_TIME_OUT               = 10218,    /* CLIENT TIMEOUT */\r\n\tMSP_ERROR_CLIENT_CLOSE                  = 10219,    /* CLIENT CLOSED CONNECTION */\r\n\t\r\n\tMSP_ERROR_CLIENT_AREA_CHANGE\t\t\t= 10220,\r\n\tMSP_ERROR_NET_SSL_HANDSHAKE\t\t\t\t= 10221,\r\n\tMSP_ERROR_NET_INVALID_ROOT_CERT\t\t\t= 10222,\r\n\tMSP_ERROR_NET_INVALID_CLIENT_CERT\t\t= 10223,\r\n\tMSP_ERROR_NET_INVALID_SERVER_CERT\t\t= 10224,\r\n\tMSP_ERROR_NET_INVALID_KEY\t\t\t\t= 10225,\r\n\tMSP_ERROR_NET_CERT_VERIFY_FAILED\t\t= 10226,\r\n\t\r\n\t/* Error codes of mssp message 10300(0x283C) */\r\n\tMSP_ERROR_MSG_GENERAL\t\t\t\t\t= 10300, \t/* 0x283C */\r\n\tMSP_ERROR_MSG_PARSE_ERROR\t\t\t\t= 10301, \t/* 0x283D */\r\n\tMSP_ERROR_MSG_BUILD_ERROR\t\t\t\t= 10302, \t/* 0x283E */\r\n\tMSP_ERROR_MSG_PARAM_ERROR\t\t\t\t= 10303, \t/* 0x283F */\r\n\tMSP_ERROR_MSG_CONTENT_EMPTY\t\t\t\t= 10304, \t/* 0x2840 */\r\n\tMSP_ERROR_MSG_INVALID_CONTENT_TYPE\t\t= 10305, \t/* 0x2841 */\r\n\tMSP_ERROR_MSG_INVALID_CONTENT_LENGTH\t= 10306, \t/* 0x2842 */\r\n\tMSP_ERROR_MSG_INVALID_CONTENT_ENCODE\t= 10307, \t/* 0x2843 */\r\n\tMSP_ERROR_MSG_INVALID_KEY\t\t\t\t= 10308, \t/* 0x2844 */\r\n\tMSP_ERROR_MSG_KEY_EMPTY\t\t\t\t\t= 10309, \t/* 0x2845 */\r\n\tMSP_ERROR_MSG_SESSION_ID_EMPTY\t\t\t= 10310, \t/* 0x2846 */   /* ỰIDΪ */\r\n\tMSP_ERROR_MSG_LOGIN_ID_EMPTY\t\t\t= 10311, \t/* 0x2847 */   /* ƵIDΪ */\r\n\tMSP_ERROR_MSG_SYNC_ID_EMPTY\t\t\t\t= 10312, \t/* 0x2848 */\r\n\tMSP_ERROR_MSG_APP_ID_EMPTY\t\t\t\t= 10313, \t/* 0x2849 */\r\n\tMSP_ERROR_MSG_EXTERN_ID_EMPTY\t\t\t= 10314, \t/* 0x284A */\r\n\tMSP_ERROR_MSG_INVALID_CMD\t\t\t\t= 10315, \t/* 0x284B */\r\n\tMSP_ERROR_MSG_INVALID_SUBJECT\t\t\t= 10316, \t/* 0x284C */\r\n\tMSP_ERROR_MSG_INVALID_VERSION\t\t\t= 10317, \t/* 0x284D */\r\n\tMSP_ERROR_MSG_NO_CMD\t\t\t\t\t= 10318, \t/* 0x284E */\r\n\tMSP_ERROR_MSG_NO_SUBJECT\t\t\t\t= 10319, \t/* 0x284F */\r\n\tMSP_ERROR_MSG_NO_VERSION\t\t\t\t= 10320, \t/* 0x2850 */\r\n\tMSP_ERROR_MSG_MSSP_EMPTY\t\t\t\t= 10321, \t/* 0x2851 */\r\n\tMSP_ERROR_MSG_NEW_RESPONSE\t\t\t\t= 10322, \t/* 0x2852 */\r\n\tMSP_ERROR_MSG_NEW_CONTENT\t\t\t\t= 10323, \t/* 0x2853 */\r\n\tMSP_ERROR_MSG_INVALID_SESSION_ID\t\t= 10324, \t/* 0x2854 */   /* ЧĻỰID(sid) */\r\n\tMSP_ERROR_MSG_INVALID_CONTENT\t\t\t= 10325, \t/* 0x2855 */\r\n\r\n\t/* Error codes of DataBase 10400(0x28A0)*/\r\n\tMSP_ERROR_DB_GENERAL\t\t\t\t\t= 10400, \t/* 0x28A0 */   /* ݿ쳣 */\r\n\tMSP_ERROR_DB_EXCEPTION\t\t\t\t\t= 10401, \t/* 0x28A1 */\r\n\tMSP_ERROR_DB_NO_RESULT\t\t\t\t\t= 10402, \t/* 0x28A2 */   /* redisûҵỰID(sid) */\r\n\tMSP_ERROR_DB_INVALID_USER\t\t\t\t= 10403, \t/* 0x28A3 */\r\n\tMSP_ERROR_DB_INVALID_PWD\t\t\t\t= 10404, \t/* 0x28A4 */\r\n\tMSP_ERROR_DB_CONNECT\t\t\t\t\t= 10405, \t/* 0x28A5 */\r\n\tMSP_ERROR_DB_INVALID_SQL\t\t\t\t= 10406, \t/* 0x28A6 */\r\n\tMSP_ERROR_DB_INVALID_APPID\t\t\t\t= 10407,\t/* 0x28A7 */\r\n\tMSP_ERROR_DB_NO_UID\t\t\t\t\t\t= 10408,\r\n\r\n\t/* Error codes of Resource 10500(0x2904)*/\r\n\tMSP_ERROR_RES_GENERAL\t\t\t\t\t= 10500, \t/* 0x2904 */\r\n\tMSP_ERROR_RES_LOAD          \t\t\t= 10501, \t/* 0x2905 */   /* Load resource */\r\n\tMSP_ERROR_RES_FREE          \t\t\t= 10502, \t/* 0x2906 */   /* Free resource */\r\n\tMSP_ERROR_RES_MISSING       \t\t\t= 10503, \t/* 0x2907 */   /* Resource File Missing */\r\n\tMSP_ERROR_RES_INVALID_NAME  \t\t\t= 10504, \t/* 0x2908 */   /* Invalid resource file name */\r\n\tMSP_ERROR_RES_INVALID_ID    \t\t\t= 10505, \t/* 0x2909 */   /* Invalid resource ID */\r\n\tMSP_ERROR_RES_INVALID_IMG   \t\t\t= 10506, \t/* 0x290A */   /* Invalid resource image pointer */\r\n\tMSP_ERROR_RES_WRITE         \t\t\t= 10507, \t/* 0x290B */   /* Write read-only resource */\r\n\tMSP_ERROR_RES_LEAK          \t\t\t= 10508, \t/* 0x290C */   /* Resource leak out */\r\n\tMSP_ERROR_RES_HEAD          \t\t\t= 10509, \t/* 0x290D */   /* Resource head currupt */\r\n\tMSP_ERROR_RES_DATA          \t\t\t= 10510, \t/* 0x290E */   /* Resource data currupt */\r\n\tMSP_ERROR_RES_SKIP          \t\t\t= 10511, \t/* 0x290F */   /* Resource file skipped */\r\n\r\n\t/* Error codes of TTS 10600(0x2968)*/\r\n\tMSP_ERROR_TTS_GENERAL\t\t\t\t\t= 10600, \t/* 0x2968 */\r\n\tMSP_ERROR_TTS_TEXTEND          \t\t\t= 10601, \t/* 0x2969 */  /* Meet text end */\r\n\tMSP_ERROR_TTS_TEXT_EMPTY\t\t\t\t= 10602, \t/* 0x296A */  /* no synth text */\r\n\tMSP_ERROR_TTS_LTTS_ERROR\t\t\t\t= 10603, \t/* 0x296B */\r\n\r\n\t/* Error codes of Recognizer 10700(0x29CC) */\r\n\tMSP_ERROR_REC_GENERAL\t\t\t\t\t= 10700, \t/* 0x29CC */  /* 쳣 */\r\n\tMSP_ERROR_REC_INACTIVE\t\t\t\t\t= 10701, \t/* 0x29CD */\r\n\tMSP_ERROR_REC_GRAMMAR_ERROR\t\t\t\t= 10702, \t/* 0x29CE */\r\n\tMSP_ERROR_REC_NO_ACTIVE_GRAMMARS\t\t= 10703, \t/* 0x29CF */\r\n\tMSP_ERROR_REC_DUPLICATE_GRAMMAR\t\t\t= 10704, \t/* 0x29D0 */\r\n\tMSP_ERROR_REC_INVALID_MEDIA_TYPE\t\t= 10705, \t/* 0x29D1 */\r\n\tMSP_ERROR_REC_INVALID_LANGUAGE\t\t\t= 10706, \t/* 0x29D2 */\r\n\tMSP_ERROR_REC_URI_NOT_FOUND\t\t\t\t= 10707, \t/* 0x29D3 */\r\n\tMSP_ERROR_REC_URI_TIMEOUT\t\t\t\t= 10708, \t/* 0x29D4 */\r\n\tMSP_ERROR_REC_URI_FETCH_ERROR\t\t\t= 10709, \t/* 0x29D5 */\r\n\tMSP_ERROR_REC_PROC_MOD\t\t\t\t\t= 10710,\t/* 0x29D6 */\r\n\r\n\r\n\t/* Error codes of Speech Detector 10800(0x2A30) */\r\n\tMSP_ERROR_EP_GENERAL\t\t\t\t\t= 10800, \t/* 0x2A30 */\r\n\tMSP_ERROR_EP_NO_SESSION_NAME            = 10801, \t/* 0x2A31 */\r\n\tMSP_ERROR_EP_INACTIVE                   = 10802, \t/* 0x2A32 */\r\n\tMSP_ERROR_EP_INITIALIZED                = 10803, \t/* 0x2A33 */\r\n\r\n\t/* Error codes of TUV */  \r\n\tMSP_ERROR_TUV_GENERAL\t\t\t\t\t= 10900, \t/* 0x2A94 */\r\n\tMSP_ERROR_TUV_GETHIDPARAM        \t\t= 10901, \t/* 0x2A95 */   /* Get Busin Param huanid*/\r\n\tMSP_ERROR_TUV_TOKEN      \t\t\t\t= 10902, \t/* 0x2A96 */   /* Get Token */\r\n\tMSP_ERROR_TUV_CFGFILE\t\t\t\t\t= 10903, \t/* 0x2A97 */   /* Open cfg file */ \r\n\tMSP_ERROR_TUV_RECV_CONTENT              = 10904, \t/* 0x2A98 */   /* received content is error */\r\n\tMSP_ERROR_TUV_VERFAIL      \t\t\t    = 10905, \t/* 0x2A99 */   /* Verify failure */\r\n\r\n\t/* Error codes of IMTV */\r\n\tMSP_ERROR_LOGIN_SUCCESS\t\t\t\t\t= 11000, \t/* 0x2AF8 */   /* ɹ */\r\n\tMSP_ERROR_LOGIN_NO_LICENSE        \t    = 11001, \t/* 0x2AF9 */   /* ôûҪ */\r\n\tMSP_ERROR_LOGIN_SESSIONID_INVALID\t\t= 11002, \t/* 0x2AFA */   /* SessionIdʧЧҪµ¼֤ͨ */ \r\n\tMSP_ERROR_LOGIN_SESSIONID_ERROR\t\t\t= 11003, \t/* 0x2AFB */   /* SessionIdΪգ߷Ƿ */\r\n\tMSP_ERROR_LOGIN_UNLOGIN\t\t  \t\t\t= 11004, \t/* 0x2AFC */   /* δ¼֤ͨ */\r\n\tMSP_ERROR_LOGIN_INVALID_USER\t  \t\t= 11005, \t/* 0x2AFD */   /* ûIDЧ */\r\n\tMSP_ERROR_LOGIN_INVALID_PWD\t\t  \t\t= 11006, \t/* 0x2AFE */   /* ûЧ */\r\n\tMSP_ERROR_LOGIN_SYSTEM_ERROR            = 11099, \t/* 0x2B5B */   /* ϵͳ */\r\n\r\n\t/* Error codes of HCR */\r\n\tMSP_ERROR_HCR_GENERAL\t\t\t\t\t= 11100,\r\n\tMSP_ERROR_HCR_RESOURCE_NOT_EXIST\t\t= 11101,\r\n\tMSP_ERROR_HCR_CREATE\t\t\t\t\t= 11102,\r\n\tMSP_ERROR_HCR_DESTROY\t\t\t\t\t= 11103,\r\n\tMSP_ERROR_HCR_START\t\t\t\t\t\t= 11104,\r\n\tMSP_ERROR_HCR_APPEND_STROKES\t\t\t= 11105,\r\n\tMSP_ERROR_HCR_INIT                      = 11106,\r\n\tMSP_ERROR_HCR_POINT_DECODE              = 11107,\r\n\tMSP_ERROR_HCR_DISPATCH                  = 11108,\r\n\tMSP_ERROR_HCR_GETRESULT                 = 11109,\r\n\tMSP_ERROR_HCR_RESOURCE\t\t            = 11110,\r\n\t\r\n\t/* Error Codes using in local engine */\r\n\tMSP_ERROR_AUTH_NO_LICENSE\t\t\t\t= 11200,\t/* 0x2BC0 */   /* Ȩ */\r\n\tMSP_ERROR_AUTH_NO_ENOUGH_LICENSE\t\t= 11201,\t/* 0x2BC1 */   /* Ȩ */\r\n\tMSP_ERROR_AUTH_INVALID_LICENSE\t\t    = 11202,\t/* 0x2BC2 */   /* ЧȨ */\r\n\tMSP_ERROR_AUTH_LICENSE_EXPIRED\t\t\t= 11203,\t/* 0x2BC3 */   /* Ȩ */\r\n\tMSP_ERROR_AUTH_NEED_MORE_DATA           = 11204,    /* 0x2BC4 */   /* 豸Ϣ */\r\n\tMSP_ERROR_AUTH_LICENSE_TO_BE_EXPIRED\t= 11205,\t/* 0x2BC5 */   /* ȨڣԴ */\r\n\tMSP_ERROR_AUTH_INVALID_MACHINE_ID       = 11206,    /* 0x2BC6 */   /* ЧĻ */\r\n\tMSP_ERROR_AUTH_LOCAL_ASR_FORBIDDEN \t    = 11207,    /* 0x2BC7 */   /* ֹʹñʶ */\r\n\tMSP_ERROR_AUTH_LOCAL_TTS_FORBIDDEN      = 11208,    /* 0x2BC8 */   /* ֹʹñغϳ */\r\n\tMSP_ERROR_AUTH_LOCAL_IVW_FORBIDDEN      = 11209,    /* 0x2BC9 */   /* ֹʹñػ */\r\n\tMSP_ERROR_AUTH_APPID_NOT_MATCH\t\t\t= 11210,\t/* 0x2BCA */   /* ԴappidӦappidƥ */\r\n\tMSP_ERROR_AUTH_UID_NOT_MATCH\t\t\t= 11211,\t/* 0x2BCB */   /* Դuid͵¼ûuidƥ */\r\n\tMSP_ERROR_AUTH_TRIAL_EXPIRED\t\t\t= 11212,\t/* 0x2BCC */   /* Դ */\r\n\tMSP_ERROR_AUTH_LOCAL_IFD_FORBIDDEN      = 11213,    /* 0x2BC9 */   /* ֹʹñ */\r\n\r\n\t/*Error Codes of Authorization*/\r\n\tMSP_ERROR_AUTH_DVC_NO_LICENSE\t\t\t\t= 11300,\r\n\tMSP_ERROR_AUTH_DVC_NO_ENOUGH_LICENSE\t\t= 11301,\r\n\tMSP_ERROR_AUTH_DVC_INVALID_LICENSE\t\t    = 11302,\r\n\tMSP_ERROR_AUTH_DVC_LICENSE_EXPIRED\t\t\t= 11303,\r\n\tMSP_ERROR_AUTH_DVC_NEED_MORE_DATA           = 11304,\r\n\tMSP_ERROR_AUTH_DVC_LICENSE_TO_BE_EXPIRED\t= 11305,\r\n\tMSP_ERROR_AUTH_DVC_EXCEED_LICENSE\t\t\t= 11306,\t\t\t\t   \r\n\r\n\t/* Error codes of Ise */\r\n     \r\n\tMSP_ERROR_ASE_EXCEP_SILENCE  \t\t        = 11401,             \r\n\tMSP_ERROR_ASE_EXCEP_SNRATIO  \t\t        = 11402,             \r\n\tMSP_ERROR_ASE_EXCEP_PAPERDATA  \t            = 11403,           \r\n\tMSP_ERROR_ASE_EXCEP_PAPERCONTENTS \t        = 11404,        \r\n\tMSP_ERROR_ASE_EXCEP_NOTMONO    \t            = 11405,           \r\n\tMSP_ERROR_ASE_EXCEP_OTHERS  \t\t        = 11406,              \r\n\tMSP_ERROR_ASE_EXCEP_PAPERFMT \t\t        = 11407,             \r\n\tMSP_ERROR_ASE_EXCEP_ULISTWORD  \t            = 11408,\r\n\t\r\n    /* Error codes of IVP */\r\n    MSP_ERROR_IVP_GENERAL                   = 11600,            //  ں쳣\r\n    MSP_ERROR_IVP_EXTRA_RGN_SOPPORT         = 11601,            //  עʱдƵ(9)\r\n    MSP_ERROR_IVP_TRUNCATED                 = 11602,            //  Ƶط(źŲεķ̫󣬶ϵͳԷΧ)¼Ƶ\r\n    MSP_ERROR_IVP_MUCH_NOISE                = 11603,            //  Ƶȹ\r\n    MSP_ERROR_IVP_TOO_LOW                   = 11604,            //  Ƶ\r\n    MSP_ERROR_IVP_ZERO_AUDIO                = 11605,            //  Ƶ\r\n    MSP_ERROR_IVP_UTTER_TOO_SHORT           = 11606,            //  Ƶ̫\r\n    MSP_ERROR_IVP_TEXT_NOT_MATCH            = 11607,            //  1.Ƶıƥ䣬ԭ1.(ڰ¼֮ǰ)\r\n                                                                //  2.¼¼ƵƵг 3.ȷʵƥ\"\r\n    MSP_ERROR_IVP_NO_ENOUGH_AUDIO           = 11608,            //  Ƶע˵дƵֲʱᱨߵ߼Ƶ\r\n    MSP_ERROR_IVP_MODEL_NOT_FOUND_IN_HBASE  = 11610,            //  ģhbaseûҵ\r\n    \r\n    /* Error codes of Face */\r\n    \r\n\tMSP_ERROR_IFR_NOT_FACE_IMAGE\t\t\t= 11700,\t\t\t//\tӦ20200       \r\n\tMSP_ERROR_FACE_IMAGE_FULL_LEFT\t\t\t= 11701,\t\t\t//\t󣬶Ӧ20201\r\n\tMSP_ERROR_FACE_IMAGE_FULL_RIGHT\t\t\t= 11702,\t\t\t//\tңӦ20202\r\n\tMSP_ERROR_IMAGE_CLOCKWISE_WHIRL\t\t\t= 11703,\t\t\t//\t˳ʱתӦ20203\r\n\tMSP_ERROR_IMAGE_COUNTET_CLOCKWISE_WHIRL\t= 11704,\t\t\t//\tʱתӦ20204\r\n\tMSP_ERROR_VALID_IMAGE_SIZE\t\t\t\t= 11705,\t\t\t//\tͼƬС쳣 Ӧ20205\r\n\tMSP_ERROR_ILLUMINATION\t\t\t\t\t= 11706,\t\t\t//\t쳣Ӧ20206\r\n\tMSP_ERROR_FACE_OCCULTATION\t\t\t\t= 11707,\t\t    //\tڵӦ20207\r\n\tMSP_ERROR_FACE_INVALID_MODEL\t\t\t= 11708,\t\t\t//\tǷģݣӦ20208\r\n\tMSP_ERROR_FUSION_INVALID_INPUT_TYPE\t\t= 11709,\t\t\t//\tͷǷӦ20300\r\n\tMSP_ERROR_FUSION_NO_ENOUGH_DATA\t\t\t= 11710,\t\t\t//\tݲӦ20301\r\n\tMSP_ERROR_FUSION_ENOUGH_DATA\t\t\t= 11711,\t\t\t//\tݹ࣬Ӧ20302\r\n\r\n\t/*Error Codes of AIUI*/\t\r\n\tMSP_ERROR_AIUI_CID_EXPIRED\t\t\t\t= 11800,\r\n\t\r\n\t/* Error codes of http 12000(0x2EE0) */\r\n\tMSP_ERROR_HTTP_BASE\t\t\t\t\t\t= 12000,\t/* 0x2EE0 */\r\n\tMSP_ERROR_HTTP_400\t\t\t\t\t\t= 12400,\r\n\tMSP_ERROR_HTTP_401\t\t\t\t\t\t= 12401,\r\n\tMSP_ERROR_HTTP_402\t\t\t\t\t\t= 12402,\r\n\tMSP_ERROR_HTTP_403\t\t\t\t\t\t= 12403,\r\n\tMSP_ERROR_HTTP_404\t\t\t\t\t\t= 12404,\r\n\tMSP_ERROR_HTTP_405\t\t\t\t\t\t= 12405,\r\n\tMSP_ERROR_HTTP_406\t\t\t\t\t\t= 12406,\r\n\tMSP_ERROR_HTTP_407\t\t\t\t\t\t= 12407,\r\n\tMSP_ERROR_HTTP_408\t\t\t\t\t\t= 12408,\r\n\tMSP_ERROR_HTTP_409\t\t\t\t\t\t= 12409,\r\n\tMSP_ERROR_HTTP_410\t\t\t\t\t\t= 12410,\r\n\tMSP_ERROR_HTTP_411\t\t\t\t\t\t= 12411,\r\n\tMSP_ERROR_HTTP_412\t\t\t\t\t\t= 12412,\r\n\tMSP_ERROR_HTTP_413\t\t\t\t\t\t= 12413,\r\n\tMSP_ERROR_HTTP_414\t\t\t\t\t\t= 12414,\r\n\tMSP_ERROR_HTTP_415\t\t\t\t\t\t= 12415,\r\n\tMSP_ERROR_HTTP_416\t\t\t\t\t\t= 12416,\r\n\tMSP_ERROR_HTTP_417\t\t\t\t\t\t= 12417,\r\n\tMSP_ERROR_HTTP_500\t\t\t\t\t\t= 12500,\r\n\tMSP_ERROR_HTTP_501\t\t\t\t\t\t= 12501,\r\n\tMSP_ERROR_HTTP_502\t\t\t\t\t\t= 12502,\r\n\tMSP_ERROR_HTTP_503\t\t\t\t\t\t= 12503,\r\n\tMSP_ERROR_HTTP_504\t\t\t\t\t\t= 12504,\r\n\tMSP_ERROR_HTTP_505\t\t\t\t\t\t= 12505,\r\n\t/*Error codes of ISV */\r\n\tMSP_ERROR_ISV_NO_USER                   = 13000,\t/* 32C8 */    /* the user doesn't exist */\r\n\r\n\t/* Error codes of Lua scripts */\r\n\tMSP_ERROR_LUA_BASE\t\t\t\t\t\t= 14000,    /* 0x36B0 */\r\n\tMSP_ERROR_LUA_YIELD\t\t\t\t\t\t= 14001,\t/* 0x36B1 */\r\n\tMSP_ERROR_LUA_ERRRUN\t\t\t\t\t= 14002,\t/* 0x36B2 */\r\n\tMSP_ERROR_LUA_ERRSYNTAX\t\t\t\t\t= 14003,\t/* 0x36B3 */\r\n\tMSP_ERROR_LUA_ERRMEM\t\t\t\t\t= 14004,\t/* 0x36B4 */\r\n\tMSP_ERROR_LUA_ERRERR\t\t\t\t\t= 14005,\t/* 0x36B5 */\r\n\tMSP_ERROR_LUA_INVALID_PARAM\t\t\t\t= 14006,\t/* 0x36B6 */\r\n\r\n\t/* Error codes of MMP */\r\n\tMSP_ERROR_MMP_BASE\t\t\t\t\t\t= 15000,    /* 0x3A98 */\r\n\tMSP_ERROR_MMP_MYSQL_INITFAIL\t\t\t= 15001,\t/* 0x3A99 */\r\n\tMSP_ERROR_MMP_REDIS_INITFAIL\t\t\t= 15002,\t/* 0x3A9A */\r\n\tMSP_ERROR_MMP_NETDSS_INITFAIL\t\t\t= 15003,\t/* 0x3A9B */\r\n\tMSP_ERROR_MMP_TAIR_INITFAIL\t\t\t\t= 15004,\t/* 0x3A9C */\t\r\n\tMSP_ERROR_MMP_MAIL_SESSION_FAIL\t\t\t= 15006,\t/* 0x3A9E */\t/* ʼ½ʱỰ*/\r\n\tMSP_ERROR_MMP_MAIL_LOGON_FAIL\t\t\t= 15007,\t/* 0x3A9F */\t/* ʼ½ʱܾ½*/\r\n\tMSP_ERROR_MMP_MAIL_USER_ILLEGAL\t\t\t= 15008,\t/* 0x3AA0 */\t/* ʼ½ʱûǷ*/\r\n\tMSP_ERROR_MMP_MAIL_PWD_ERR\t\t\t\t= 15009,\t/* 0x3AA1 */\t/* ʼ½ʱ*/\r\n\tMSP_ERROR_MMP_MAIL_SOCKET_ERR\t\t\t= 15010,\t/* 0x3AA2 */\t/* ʼ͹׽ִ*/\r\n\tMSP_ERROR_MMP_MAIL_INIT_FAIL\t\t\t= 15011,\t/* 0x3AA3 */\t/* ʼʼ*/\r\n\tMSP_ERROR_MMP_STORE_MNR_NO_INIT\t\t\t= 15012,\t/* 0x3AA4 */\t/* store_managerδʼʼʧ*/\r\n\tMSP_ERROR_MMP_STORE_MNR_POOL_FULL\t\t= 15013,\t/* 0x3AA5 */\t/* store_managerӳ*/\r\n\tMSP_ERROR_MMP_STRATGY_PARAM_ILLEGAL\t\t= 15014,\t/* 0x3AA6 */\t/* ԱʽǷ*/\r\n\tMSP_ERROR_MMP_STRATGY_PARAM_TOOLOOG\t\t= 15015,\t/* 0x3AA7 */\t/* Աʽ̫*/\r\n\tMSP_ERROR_MMP_PARAM_NULL\t\t\t\t= 15016,\t/* 0x3AA8 */\t/* Ϊ*/\r\n\tMSP_ERROR_MMP_ERR_MORE_TOTAL\t\t\t= 15017,\t/* 0x3AA9 */\t/* pmsݿдܱݣ > ܴ*/\r\n\tMSP_ERROR_MMP_PROC_THRESHOLD\t\t\t= 15018,\t/* 0x3AAA */\t/* ̼طֵô*/\r\n\tMSP_ERROR_MMP_SERVER_THRESHOLD\t\t\t= 15019,\t/* 0x3AAB */\t/* طֵô*/\r\n\tMSP_ERROR_MMP_PYTHON_NO_EXIST\t\t\t= 15020,    /* 0x3AAC */\t/* pythonűļ */\r\n\tMSP_ERROR_MMP_PYTHON_IMPORT_FAILED\t\t= 15021,\t/* 0x3AAD */\t/* pythonű */\r\n\tMSP_ERROR_MMP_PYTHON_BAD_FUNC\t\t\t= 15022,\t/* 0x3AAE */\t/* pythonűʽ */\r\n\tMSP_ERROR_MMP_DB_DATA_ILLEGAL\t\t\t= 15023,\t/* 0x3AAF */\t/* ݿеݸʽ */\r\n\tMSP_ERROR_MMP_REDIS_NOT_CONN\t\t\t= 15024,\t/* 0x3AB0 */\t/* redisûӵ */\r\n\tMSP_ERROR_MMP_PMA_NOT_FOUND_STRATEGY\t= 15025,\t/* 0x3AB1 */\t/* ûҵ */\r\n\tMSP_ERROR_MMP_TAIR_CONNECT\t\t\t\t= 15026,\t/* 0x3AB2 */\t/* tairȺʧ */\r\n\tMSP_ERROR_MMP_PMC_SERVINFO_INVALID\t\t= 15027,\t/* Ox3AB3 */\t/* pmcķϢѾЧ */\r\n\tMSP_ERROR_MMP_ALARM_GROUP_NULL\t\t\t= 15028,\t/* Ox3AB4 */\t/* ĶűʼΪ */\r\n\tMSP_ERROR_MMP_ALARM_CONTXT_NULL\t\t\t= 15029,\t/* Ox3AB5 */\t/* ıΪ */\t\r\n\r\n\t/* Error codes of MSC(lmod loader) */\r\n\tMSP_ERROR_LMOD_BASE\t\t\t\t\t\t= 16000,\t/* 0x3E80 */\r\n\tMSP_ERROR_LMOD_NOT_FOUND\t\t\t\t= 16001,\t/* 0x3E81 */\t/* ûҵlmodļ */\r\n\tMSP_ERROR_LMOD_UNEXPECTED_BIN\t\t\t= 16002,\t/* 0x3E82 */\t/* Чlmod */\r\n\tMSP_ERROR_LMOD_LOADCODE\t\t\t\t\t= 16003,\t/* 0x3E83 */\t/* lmodָʧ */\r\n\tMSP_ERROR_LMOD_PRECALL\t\t\t\t\t= 16004,\t/* 0x3E84 */\t/* ʼlmodʧ */\r\n\tMSP_ERROR_LMOD_RUNTIME_EXCEPTION\t\t= 16005,\t/* 0x3E85 */\t/* lmodʱ쳣 */\r\n\tMSP_ERROR_LMOD_ALREADY_LOADED\t\t\t= 16006,\t/* 0x3E86 */\t/* lmodظ */\r\n\r\n\t// Error code of Third Business\r\n\tMSP_ERROR_BIZ_BASE\t\t\t\t\t\t = 17000,\t/* 0x4268 */\t/* ҵ */\r\n\t\r\n\t//Error of Nginx errlog file increase exception\r\n\tMSP_ERROR_NGX_LOG_MORE_TOTEL_SIZE        = 18000,\t\t\t\t    /*nginx־С쳣*/\r\n\t\r\n\t//Error of Flash client when network checking\r\n\tMSP_ERROR_FLASH_NETWORK_CONNECT_FIALED   = 19000,\t\t\t\t\t/*flashʧ*/\r\n\tMSP_ERROR_FLASH_NETWORK_CHECK_FIALED     = 19001,\t\t\t\t\t/*flashӦ쳣Ϣ*/\r\n\tMSP_ERROR_FLASH_NETWORK_CHECK_TIMEOUT    = 19002,\t\t\t\t    /*flash糬ʱ*/\r\n\tMSP_ERROR_FLASH_NETWORK_CLOSED_EXCEPTION = 19003,                   /*flash쳣ر*/\r\n\t\r\n\t/*Error Code Of Speech plus*/\r\n\t\r\n\tSPEECH_ERROR_NO_NETWORK \t\t\t\t               = 20001, /* Ч*/\r\n\tSPEECH_ERROR_NETWORK_TIMEOUT \t\t\t               = 20002, /* ӳʱ*/\r\n\tSPEECH_ERROR_NET_EXPECTION\t\t\t\t               = 20003, /* 쳣*/\r\n\tSPEECH_ERROR_INVALID_RESULT\t\t\t                   = 20004, /* ЧĽ*/\r\n\tSPEECH_ERROR_NO_MATCH \t\t\t\t\t               = 20005, /* ƥ */\r\n\tSPEECH_ERROR_AUDIO_RECORD \t\t\t\t               = 20006, /* ¼ʧ */\r\n\tSPEECH_ERROR_NO_SPPECH \t\t\t\t                   = 20007, /* δ⵽*/\r\n                                                           \r\n\tSPEECH_ERROR_SPEECH_TIMEOUT \t\t\t               = 20008, /* Ƶ볬ʱ*/\r\n\tSPEECH_ERROR_EMPTY_UTTERANCE \t\t\t               = 20009, /* Чı */\r\n\tSPEECH_ERROR_FILE_ACCESS \t\t\t\t               = 20010, /* ļдʧ */\r\n\tSPEECH_ERROR_PLAY_MEDIA \t\t\t\t               = 20011, /* Ƶʧ */\r\n                                                           \r\n\tSPEECH_ERROR_INVALID_PARAM \t\t\t                   = 20012, /* ЧĲ*/\r\n\tSPEECH_ERROR_TEXT_OVERFLOW\t\t\t\t               = 20013, /* ı */\r\n\tSPEECH_ERROR_INVALID_DATA \t\t\t\t               = 20014, /* Ч */\r\n\tSPEECH_ERROR_LOGIN\t\t\t\t\t\t               = 20015, /* ûδ½*/\r\n\tSPEECH_ERROR_PERMISSION_DENIED \t\t                   = 20016, /* ЧȨ */\r\n\tSPEECH_ERROR_INTERRUPT \t\t\t\t                   = 20017, /* 쳣 */\r\n                                                           \r\n    SPEECH_ERROR_VERSION_LOWER                             = 20018, /* 汾 */\r\n\tSPEECH_CLIENT_ERROR_ISUSING\t\t\t\t\t\t\t   = 20019, /* ¼ռ(iOSƽ̨) */\r\n\tSPEECH_ERROR_SYSTEM_PREINSTALL                         = 20020, /* ϵͳԤð汾 */\r\n\tSPEECH_ERROR_UNSATISFIED_LINK \t\t\t\t\t\t   = 20021, /* δʵֵNative */\r\n   \tSPEECH_ERROR_UNKNOWN                                   = 20999, /* δ֪ */\r\n                                                           \r\n\t                                                       \r\n\tSPEECH_ERROR_COMPONENT_NOT_INSTALLED                   = 21001, /* ûаװ */\r\n\tSPEECH_ERROR_ENGINE_NOT_SUPPORTED                      = 21002, /* 治֧ */\r\n\tSPEECH_ERROR_ENGINE_INIT_FAIL                          = 21003, /* ʼʧ */\r\n\tSPEECH_ERROR_ENGINE_CALL_FAIL                          = 21004, /* ʧ */\r\n\tSPEECH_ERROR_ENGINE_BUSY\t                           = 21005, /* 深æ */ \r\n                                                           \r\n\tSPEECH_ERROR_LOCAL_NO_INIT                             = 22001, /* δʼ */              \r\n\tSPEECH_ERROR_LOCAL_RESOURCE                            = 22002, /* Դ */   \t              \r\n\tSPEECH_ERROR_LOCAL_ENGINE                              = 22003, /* ڲ */   \t       \r\n\tSPEECH_ERROR_IVW_INTERRUPT \t\t\t                   = 22004, /* ػ汻쳣 */ \r\n\t\r\n\t\r\n\t/*Error Code Of Local iflytek Engines*/\r\n\r\n\t/*Error Code Of AiTalk*/\r\n\t\r\n\t/*Error Code Of AiTalk Operation*/\r\n\tSPEECH_SUCCESS                                         = 0    , // ivErr_OK                  = 0 /*ɹ״̬*/ \r\n\r\n\tSPEECH_ERROR_ASR_CLIENT                                = 23000, /*ͻӦó*///?????????\r\n\tSPEECH_ERROR_ASR_INVALID_PARA                          = 23001, /*ЧĲ*/\r\n\tSPEECH_ERROR_ASR_INVALID_PARA_VALUE                    = 23002, /*ЧĲֵ*/\r\n\tSPEECH_ERROR_ASR_OUT_OF_MEMORY                         = 23003, /*ڴľ*/\r\n\tSPEECH_ERROR_ASR_CREATE_HANDLE_FAILED                  = 23004, /*ʧ*/\r\n\tSPEECH_ERROR_ASR_ENGINE_INIT_FAILED                    = 23005, /*ʼʧ*/\r\n\tSPEECH_ERROR_ASR_ENGINE_STARTED                        = 23006, /*Ѿ*/\r\n\tSPEECH_ERROR_ASR_ENGINE_UNINIT                         = 23007, /*δʼ*/\r\n\tSPEECH_ERROR_ASR_SPEECH_TIMEOUT                        = 23008, /*ʶʱVADûûм⵽˵㣩*/\r\n\tSPEECH_ERROR_ASR_NO_RECOGNIZED_RESULT                  = 23009, /*ʶ*/\r\n\tSPEECH_ERROR_ASR_INVALID_HANDLE                        = 23010, /*Чľ*/\r\n\tSPEECH_ERROR_ASR_FILE_ACCESS                           = 23011, /*ļʧ*/\r\n\t\r\n\t/*Error Code Of AiTalk Engine*/                                      \r\n\tSPEECH_ERROR_AITALK_FALSE                              = 23100, // ivErr_FALSE               = 1                                                                                                              \r\n                                                                                                 \r\n\t/* For license check */                                                                      \r\n\tSPEECH_ERROR_AITALK_PERMISSION_DENIED                  = 23101, // ivErr_InvSN               = 2\r\n                                                                                                 \r\n\t/* General */                                                                                \r\n\tSPEECH_ERROR_AITALK_INVALID_PARA                       = 23102, // ivErr_InvArg              = 3\r\n\tSPEECH_ERROR_AITALK_BUFFER_OVERFLOW                    = 23103, // ivErr_BufferFull          = 4  /*Ƶݻ*/\r\n\tSPEECH_ERROR_AITALK_FAILED                             = 23104, // ivErr_Failed              = 5\r\n\tSPEECH_ERROR_AITALK_NOT_SUPPORTED                      = 23105, // ivErr_NotSupport          = 6  /*治֧*/\r\n\tSPEECH_ERROR_AITALK_OUT_OF_MEMORY                      = 23106, // ivErr_OutOfMemory         = 7\r\n\tSPEECH_ERROR_AITALK_INVALID_RESOURCE                   = 23107, // ivErr_InvResource         = 8  /*ԴЧ*/\r\n\tSPEECH_ERROR_AITALK_NOT_FOUND                          = 23108, // ivErr_NotFound            = 9  /*ļʧ*/\r\n\tSPEECH_ERROR_AITALK_INVALID_GRAMMAR                    = 23109, // ivErr_InvGrmr             = 10 /*ʶ﷨*/\r\n                                                                                                 \r\n\t/* For object status */                                                                      \r\n\tSPEECH_ERROR_AITALK_INVALID_CALL                       = 23110, // ivErr_InvCall             = 11 /*Ч*/\r\n                                                                                                 \r\n\t/* For ASR Input */                                                                          \r\n\tSPEECH_ERROR_AITALK_SYNTAX_ERROR                       = 23111, // ivErr_InvCall             = 12\r\n                                                                                                 \r\n\t/* For Message Call Back */                                                                  \r\n\tSPEECH_ERROR_AITALK_RESET                              = 23112, // ivErr_Reset               = 13                                                                       \r\n\tSPEECH_ERROR_AITALK_ENDED                              = 23113, // ivErr_Ended               = 14\r\n\tSPEECH_ERROR_AITALK_IDLE                               = 23114, // ivErr_Idle                = 15                                                                       \r\n\tSPEECH_ERROR_AITALK_CANNOT_SAVE_FILE                   = 23115, // ivErr_CanNotSaveFile      = 16\r\n                                                                                                 \r\n\t/* For Lexicon name */                                                                       \r\n\tSPEECH_ERROR_AITALK_INVALID_GRAMMAR_NAME               = 23116, // ivErr_InvName             = 17 /*ķʵƷǷ*/\r\n                                                                                                 \r\n\tSPEECH_ERROR_AITALK_BUFFER_EMPTY                       = 23117, // ivErr_BufferEmpty         = 18\r\n                                                                                                 \r\n\tSPEECH_ERROR_AITALK_GET_RESULT                         = 23118, // ivErr_GetResult           = 19\r\n                                                                                                 \r\n\tSPEECH_ERROR_AITALK_REACT_OUT_TIME                     = 23119, // ivErr_ReactOutTime        = 20 /*Ӧʱ*/\r\n\tSPEECH_ERROR_AITALK_SPEECH_OUT_TIME                    = 23120, // ivErr_SpeechOutTime       = 21 /*ʱ*/\r\n                                                                                                 \r\n\tSPEECH_ERROR_AITALK_AUDIO_CUT                          = 23121, // ivErr_CUT                 = 22 /*¼*/\r\n\tSPEECH_ERROR_AITALK_AUDIO_LOWER                        = 23122, // ivErr_LOWER               = 23 /*¼*/\r\n                                                                                                 \r\n\tSPEECH_ERROR_AITALK_INSUFFICIENT_PERMISSIONS           = 23123, // ivErr_Limitted            = 24 /*Ȩ*/\r\n\tSPEECH_ERROR_AITALK_RESULT_ERROR                       = 23124, // ivErr_ResultError         = 25 /*WfstȻcmd*/\r\n\tSPEECH_ERROR_AITALK_SHORT_PAUSE                        = 23125, // ivErr_ShortPause          = 26\r\n\tSPEECH_ERROR_AITALK_BUSY                               = 23126, // ivErr_Busy                = 27\r\n\tSPEECH_ERROR_AITALK_GRM_NOT_UPDATE                     = 23127, // ivErr_GrmNotUpdate        = 28 /*﷨δ*/\r\n\tSPEECH_ERROR_AITALK_STARTED                            = 23128, // ivErr_Started             = 29\r\n\tSPEECH_ERROR_AITALK_STOPPED                            = 23129, // ivErr_Stopped             = 30\r\n\tSPEECH_ERROR_AITALK_ALREADY_STARTED                    = 23130, // ivErr_AlreadyStarted      = 31\r\n\tSPEECH_ERROR_AITALK_ALREADY_STOPPED                    = 23131, // ivErr_AlreadyStopped      = 32\r\n\tSPEECH_ERROR_AITALK_TOO_MANY_COMMAND                   = 23132, // ivErr_TooManyCmd          = 33\r\n\tSPEECH_ERROR_AITALK_WAIT                               = 23133, // ivErr_Wait                = 34 /*һЩ߳Ҫȴ*/\r\n\tSPEECH_ERROR_AITALK_MAE_RIGHT                          = 23134, // ivErr_MAERight            = 35 \r\n\tSPEECH_ERROR_AITALK_MAE_WRONG                          = 23135, // ivErr_MAEWrong            = 36\r\n    \r\n\tSPEECH_ERROR_AITALK_GRM_ERR                            = 23300,  // ﷨\r\n\t\r\n\t\r\n\t\r\n\t/*Error Code Of AiSound*/\r\n\t\r\n\t/*Error Code Of AiSound Operation*/\r\n\tSPEECH_ERROR_TTS_INVALID_PARA                          = 24000, /*  */\r\n\tSPEECH_ERROR_TTS_INVALID_PARA_VALUE                    = 24001, /* ЧĲֵ*/\r\n\tSPEECH_ERROR_TTS_OUT_OF_MEMORY\t                       = 24002, /* ڴ治*/\r\n\tSPEECH_ERROR_TTS_INVALID_HANDLE                        = 24003, /* Чľ*/\r\n\tSPEECH_ERROR_TTS_CREATE_HANDLE_FAILED\t\t\t       = 24004, /* ʧ*/\r\n\tSPEECH_ERROR_TTS_INVALID_RESOURCE\t                   = 24005,\t/* ЧԴ */\r\n\tSPEECH_ERROR_TTS_INVALID_VOICE_NAME\t                   = 24006,\t/* Ч*/\r\n\tSPEECH_ERROR_TTS_ENGINE_UNINIT\t\t\t               = 24007, /* δʼ */\r\n\tSPEECH_ERROR_TTS_ENGINE_INIT_FAILED\t                   = 24008,\t/* ʼʧ */\r\n\tSPEECH_ERROR_TTS_ENGINE_BUSY\t\t\t               = 24009, /* æ */\r\n\r\n                                                             \r\n\t/*Error Code Of AiSound Engine*/                         \r\n\tSPEECH_ERROR_AISOUND_BASE\t\t\t\t\t           = 24100,\t\r\n\tSPEECH_ERROR_AISOUND_UNIMPEMENTED\t\t\t\t       = 24100,  /* unimplemented function */\r\n\tSPEECH_ERROR_AISOUND_UNSUPPORTED\t\t\t\t       = 24101,  /* unsupported on this platform */\r\n\tSPEECH_ERROR_AISOUND_INVALID_HANDLE\t\t\t           = 24102,  /* invalid handle */\r\n\tSPEECH_ERROR_AISOUND_INVALID_PARA\t\t\t           = 24103,  /* invalid parameter(s) */\r\n\tSPEECH_ERROR_AISOUND_INSUFFICIENT_HEAP\t\t\t       = 24104,  /* insufficient heap size  */\r\n\tSPEECH_ERROR_AISOUND_STATE_REFUSE\t\t\t\t       = 24105,  /* refuse to do in current state  */\r\n\tSPEECH_ERROR_AISOUND_INVALID_PARA_ID\t\t\t       = 24106,  /* invalid parameter ID */\r\n\tSPEECH_ERROR_AISOUND_INVALID_PARA_VALUE\t\t           = 24107,  /* invalid parameter value */\r\n\tSPEECH_ERROR_AISOUND_RESOURCE\t\t\t\t\t       = 24108,  /* Resource is error */\r\n\tSPEECH_ERROR_AISOUND_RESOURCE_READ\t\t\t\t       = 24109,  /* read resource error */\r\n\tSPEECH_ERROR_AISOUND_LBENDIAN\t\t\t\t\t       = 24110,  /* the Endian of SDK  is error */\r\n\tSPEECH_ERROR_AISOUND_HEADFILE\t\t\t\t\t       = 24111,  /* the HeadFile is different of the SDK */\r\n\tSPEECH_ERROR_AISOUND_BUFFER_OVERFLOW\t\t           = 24112,  /* get data size exceed the data buffer */\r\n\tSPEECH_ERROR_AISOUND_INVALID_ISAMPA\t\t\t           = 24113,  /* !Invalid iSampa format or input iSampa text contain invalid alphabet*/\r\n\tSPEECH_ERROR_AISOUND_INVALID_CSSML     \t               = 24114,   /* !Invalid cssml format */\r\n\r\n\r\n\t/*Error Code Of ivw*/\r\n\r\n\t/*Error Code Of ivw Operation*/\r\n\tSPEECH_ERROR_IVW_ENGINE_UNINI             = 25000,  /* δʼ */\r\n\tSPEECH_ERROR_IVW_RESVER_NOMATCH           = 25001,  /* Դ汾ƥ */\r\n\tSPEECH_ERROR_IVW_BUFFERED_AUDIOD_LITTLE   = 25002,  /* Ѽʶ𻺴Ƶ */\r\n\tSPEECH_ERROR_IVW_INVALID_RESTYPE          = 25003,  /* ϷԴ */\r\n\r\n\t/*Error Code Of ivw Engine*/\r\n\tSPEECH_ERROR_IVW_INVALID_CALL             = 25101,   // IvwErr_InvCal       = 1\t\t\t\t\t   \r\n    SPEECH_ERROR_IVW_INVALID_ARG              = 25102,   // IvwErr_InvArg\t    = 2\t\t\t\t    \r\n    SPEECH_ERROR_IVW_TELL_SIZE                = 25103,   // IvwErr_TellSize     = 3\r\n    SPEECH_ERROR_IVW_OUT_OF_MEMORY            = 25104,   // IvwErr_OutOfMemory  = 4\t\t\t   \r\n    SPEECH_ERROR_IVW_OUT_BUFFER_FULL          = 25105,   // IvwErr_BufferFull\t= 5\r\n    SPEECH_ERROR_IVW_OUT_BUFFER_EMPTY         = 25106,   // IvwErr_BufferEmpty\t= 6\t\t\t    \r\n\tSPEECH_ERROR_IVW_INVALID_RESOURCE         = 25107,   // IvwErr_InvRes\t\t= 7\t\t\t  \r\n    SPEECH_ERROR_IVW_REPETITIOPN_ENTER        = 25108,   // IvwErr_ReEnter\t\t= 8\r\n    SPEECH_ERROR_IVW_NOT_SUPPORT              = 25109,   // IvwErr_NotSupport\t= 9\t\t\t  \r\n    SPEECH_ERROR_IVW_NOT_FOUND                = 25110,   // IvwErr_NotFound\t\t= 10\t\t         \r\n    SPEECH_ERROR_IVW_INVALID_SN               = 25111,   // IvwErr_InvSN\t\t= 11\t\t\t    \r\n    SPEECH_ERROR_IVW_LIMITTED                 = 25112,   // IvwErr_Limitted\t\t= 12\t\t\t    \r\n    SPEECH_ERROR_IVW_TIME_OUT                 = 25113,   // IvwErr_TimeOut\t\t= 13\t\t         \r\n\r\n    SPEECH_ERROR_IVW_ENROLL1_SUCESS           = 25114,   // IvwErr_Enroll1_Success = 14             \r\n    SPEECH_ERROR_IVW_ENROLL1_FAILED           = 25115,   // IvwErr_Enroll1_Failed  = 15               \r\n    SPEECH_ERROR_IVW_ENROLL2_SUCESS           = 25116,   // IvwErr_Enroll2_Success = 16               \r\n    SPEECH_ERROR_IVW_ENROLL2_FAILED           = 25117,   // IvwErr_Enroll2_Failed  = 17              \r\n    SPEECH_ERROR_IVW_ENROLL3_SUCESS           = 25118,   // IvwErr_Enroll3_Success = 18             \r\n    SPEECH_ERROR_IVW_ENROLL3_FAILED           = 25119,   // IvwErr_Enroll3_Failed  = 19             \r\n    SPEECH_ERROR_IVW_SPEECH_TOO_SHORT         = 25120,   // IvwErr_SpeechTooShort  = 20            \r\n    SPEECH_ERROR_IVW_SPEECH_STOP              = 25121    // IvwErr_SpeechStop      = 21             \r\n\r\n};\r\n\r\n#endif /* __MSP_ERRORS_H__ */"
  },
  {
    "path": "xf/include/msp_types.h",
    "content": "#ifndef __MSP_TYPES_H__\r\n#define __MSP_TYPES_H__\r\n\r\n#if !defined(MSPAPI)\r\n#if defined(WIN32) || defined(WINPHONE8) || defined(WIN8)\r\n\t#define MSPAPI __stdcall\r\n#else\r\n\t#define MSPAPI\r\n#endif /* WIN32 */\r\n#endif /* MSPAPI */\r\n\r\n\r\n/**\r\n *  MSPSampleStatus indicates how the sample buffer should be handled\r\n *  MSP_AUDIO_SAMPLE_FIRST\t\t- The sample buffer is the start of audio\r\n *\t\t\t\t\t\t\t\t  If recognizer was already recognizing, it will discard\r\n *\t\t\t\t\t\t\t\t  audio received to date and re-start the recognition\r\n *  MSP_AUDIO_SAMPLE_CONTINUE\t- The sample buffer is continuing audio\r\n *  MSP_AUDIO_SAMPLE_LAST\t\t- The sample buffer is the end of audio\r\n *\t\t\t\t\t\t\t\t  The recognizer will cease processing audio and\r\n *\t\t\t\t\t\t\t\t  return results\r\n *  Note that sample statii can be combined; for example, for file-based input\r\n *  the entire file can be written with SAMPLE_FIRST | SAMPLE_LAST as the\r\n *  status.\r\n *  Other flags may be added in future to indicate other special audio\r\n *  conditions such as the presence of AGC\r\n */\r\nenum\r\n{\r\n\tMSP_AUDIO_SAMPLE_INIT           = 0x00,\r\n    MSP_AUDIO_SAMPLE_FIRST          = 0x01,\r\n    MSP_AUDIO_SAMPLE_CONTINUE       = 0x02,\r\n    MSP_AUDIO_SAMPLE_LAST           = 0x04,\r\n};\r\n\r\n/*\r\n *  The enumeration MSPRecognizerStatus contains the recognition status\r\n *  MSP_REC_STATUS_SUCCESS\t\t\t\t- successful recognition with partial results\r\n *  MSP_REC_STATUS_NO_MATCH\t\t\t\t- recognition rejected\r\n *  MSP_REC_STATUS_INCOMPLETE\t\t\t- recognizer needs more time to compute results\r\n *  MSP_REC_STATUS_NON_SPEECH_DETECTED\t- discard status, no more in use\r\n *  MSP_REC_STATUS_SPEECH_DETECTED\t\t- recognizer has detected audio, this is delayed status\r\n *  MSP_REC_STATUS_COMPLETE\t\t\t\t- recognizer has return all result\r\n *  MSP_REC_STATUS_MAX_CPU_TIME\t\t\t- CPU time limit exceeded\r\n *  MSP_REC_STATUS_MAX_SPEECH\t\t\t- maximum speech length exceeded, partial results may be returned\r\n *  MSP_REC_STATUS_STOPPED\t\t\t\t- recognition was stopped\r\n *  MSP_REC_STATUS_REJECTED\t\t\t\t- recognizer rejected due to low confidence\r\n *  MSP_REC_STATUS_NO_SPEECH_FOUND\t\t- recognizer still found no audio, this is delayed status\r\n */\r\nenum\r\n{\r\n\tMSP_REC_STATUS_SUCCESS              = 0,\r\n\tMSP_REC_STATUS_NO_MATCH             = 1,\r\n\tMSP_REC_STATUS_INCOMPLETE\t\t\t= 2,\r\n\tMSP_REC_STATUS_NON_SPEECH_DETECTED  = 3,\r\n\tMSP_REC_STATUS_SPEECH_DETECTED      = 4,\r\n\tMSP_REC_STATUS_COMPLETE\t\t\t\t= 5,\r\n\tMSP_REC_STATUS_MAX_CPU_TIME         = 6,\r\n\tMSP_REC_STATUS_MAX_SPEECH           = 7,\r\n\tMSP_REC_STATUS_STOPPED              = 8,\r\n\tMSP_REC_STATUS_REJECTED             = 9,\r\n\tMSP_REC_STATUS_NO_SPEECH_FOUND      = 10,\r\n\tMSP_REC_STATUS_FAILURE = MSP_REC_STATUS_NO_MATCH,\r\n};\r\n\r\n/**\r\n * The enumeration MSPepState contains the current endpointer state\r\n *  MSP_EP_LOOKING_FOR_SPEECH\t- Have not yet found the beginning of speech\r\n *  MSP_EP_IN_SPEECH\t\t\t- Have found the beginning, but not the end of speech\r\n *  MSP_EP_AFTER_SPEECH\t\t\t- Have found the beginning and end of speech\r\n *  MSP_EP_TIMEOUT\t\t\t\t- Have not found any audio till timeout\r\n *  MSP_EP_ERROR\t\t\t\t- The endpointer has encountered a serious error\r\n *  MSP_EP_MAX_SPEECH\t\t\t- Have arrive the max size of speech\r\n */\r\nenum\r\n{\r\n\tMSP_EP_LOOKING_FOR_SPEECH   = 0,\r\n\tMSP_EP_IN_SPEECH            = 1,\r\n\tMSP_EP_AFTER_SPEECH         = 3,\r\n\tMSP_EP_TIMEOUT              = 4,\r\n\tMSP_EP_ERROR                = 5,\r\n\tMSP_EP_MAX_SPEECH           = 6,\r\n\tMSP_EP_IDLE                 = 7  // internal state after stop and before start\r\n};\r\n\r\n/* Synthesizing process flags */\r\nenum\r\n{\r\n    MSP_TTS_FLAG_STILL_HAVE_DATA        = 1,\r\n    MSP_TTS_FLAG_DATA_END               = 2,\r\n    MSP_TTS_FLAG_CMD_CANCELED           = 4,\r\n};\r\n\r\n/* Handwriting process flags */\r\nenum\r\n{\r\n\tMSP_HCR_DATA_FIRST           = 1,\r\n\tMSP_HCR_DATA_CONTINUE        = 2,\r\n\tMSP_HCR_DATA_END             = 4,\r\n};\r\n\r\n/*ivw message type */\r\nenum\r\n{\r\n\tMSP_IVW_MSG_WAKEUP       = 1,\r\n\tMSP_IVW_MSG_ERROR        = 2,\r\n\tMSP_IVW_MSG_ISR_RESULT   = 3,\r\n\tMSP_IVW_MSG_ISR_EPS      = 4,\r\n\tMSP_IVW_MSG_VOLUME       = 5,\r\n\tMSP_IVW_MSG_ENROLL       = 6,\r\n\tMSP_IVW_MSG_RESET        = 7\r\n};\r\n\r\n/* Upload data process flags */\r\nenum\r\n{\r\n\tMSP_DATA_SAMPLE_INIT           = 0x00,\r\n\tMSP_DATA_SAMPLE_FIRST          = 0x01,\r\n\tMSP_DATA_SAMPLE_CONTINUE       = 0x02,\r\n\tMSP_DATA_SAMPLE_LAST           = 0x04,\r\n};\r\n\r\n#endif /* __MSP_TYPES_H__ */\r\n"
  },
  {
    "path": "xf/include/qtts.h",
    "content": "/** \n * @file\tqtts.h\n * @brief   iFLY Speech Synthesizer Header File\r\n * \r\n *  This file contains the quick application programming interface (API) declarations \r\n *  of TTS. Developer can include this file in your project to build applications.\r\n *  For more information, please read the developer guide.\r\n \r\n *  Use of this software is subject to certain restrictions and limitations set\r\n *  forth in a license agreement entered into between iFLYTEK, Co,LTD.\r\n *  and the licensee of this software.  Please refer to the license\r\n *  agreement for license use rights and restrictions.\r\n *\r\n *  Copyright (C)    1999 - 2009 by ANHUI USTC iFLYTEK, Co,LTD.\r\n *                   All rights reserved.\r\n * \r\n * @author\tSpeech Dept.\n * @version\t1.0\n * @date\t2009/11/26\n * \n * @see\t\t\n * \n * <b>History:</b><br>\n * <table>\n *  <tr> <th>Version\t<th>Date\t\t<th>Author\t<th>Notes</tr>\n *  <tr> <td>1.0\t\t<td>2009/11/26\t<td>Speech\t<td>Create this file</tr>\n * </table>\n * \n */\n#ifndef __QTTS_H__\n#define __QTTS_H__\n\r\n#if !defined(MSPAPI)\r\n#if defined(WIN32)\r\n\t#define MSPAPI __stdcall\r\n#else\r\n\t#define MSPAPI\r\n#endif /* WIN32 */\r\n#endif /* MSPAPI */\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif /* C++ */\r\n\r\n#include \"msp_types.h\"\r\n\n/** \n * @fn\t\tQTTSSessionBegin\n * @brief\tBegin a TTS Session\n * \n *  Create a tts session to synthesize data.\n * \n * @return\tconst char* - Return the new session id in success, otherwise return NULL, error code.\n * @param\tconst char* params\t\t\t- [in] parameters when the session created.\n * @param\tconst char** sessionID\t\t- [out] return a string to this session.\n * @see\t\t\n */\nconst char* MSPAPI QTTSSessionBegin(const char* params, int* errorCode);\r\ntypedef const char* (MSPAPI *Proc_QTTSSessionBegin)(const char* params, int* errorCode);\r\n#ifdef MSP_WCHAR_SUPPORT\nconst wchar_t* MSPAPI QTTSSessionBeginW(const wchar_t* params, int* errorCode);\r\ntypedef const wchar_t* (MSPAPI *Proc_QTTSSessionBeginW)(const wchar_t* params, int* errorCode);\r\n#endif\r\n\n/** \n * @fn\t\tQTTSTextPut\n * @brief\tPut Text Buffer to TTS Session\n * \n *  Writing text string to synthesizer.\n * \n * @return\tint MSPAPI\t- Return 0 in success, otherwise return error code.\n * @param\tconst char* sessionID\t- [in] The session id returned by sesson begin\n * @param\tconst char* textString\t- [in] text buffer\n * @param\tunsigned int textLen\t- [in] text size in bytes\n * @see\t\t\n */\nint MSPAPI QTTSTextPut(const char* sessionID, const char* textString, unsigned int textLen, const char* params);\r\ntypedef int (MSPAPI *Proc_QTTSTextPut)(const char* sessionID, const char* textString, unsigned int textLen, const char* params);\r\n#ifdef MSP_WCHAR_SUPPORT\nint MSPAPI QTTSTextPutW(const wchar_t* sessionID, const wchar_t* textString, unsigned int textLen, const wchar_t* params);\r\ntypedef int (MSPAPI *Proc_QTTSTextPutW)(const wchar_t* sessionID, const wchar_t* textString, unsigned int textLen, const wchar_t* params);\r\n#endif\r\n\r\n/** \n * @fn\t\tQTTSAudioGet\n * @brief\tSynthesize text to audio\n * \n *  Synthesize text to audio, and return audio information.\n * \n * @return\tconst void*\t- Return current synthesized audio data buffer, size returned by QTTSTextSynth.\n * @param\tconst char* sessionID\t- [in] session id returned by session begin\n * @param\tunsigned int* audioLen \t- [out] synthesized audio size in bytes\n * @param\tint* synthStatus\t- [out] synthesizing status\n * @param\tint* errorCode\t- [out] error code if failed, 0 to success.\n * @see\t\t\n */\nconst void* MSPAPI QTTSAudioGet(const char* sessionID, unsigned int* audioLen, int* synthStatus, int* errorCode);\r\ntypedef const void* (MSPAPI *Proc_QTTSAudioGet)(const char* sessionID, unsigned int* audioLen, int* synthStatus, int* errorCode);\r\n#ifdef MSP_WCHAR_SUPPORT\nconst void* MSPAPI QTTSAudioGetW(const wchar_t* sessionID, unsigned int* audioLen, int* synthStatus, int* errorCode);\r\ntypedef const void* (MSPAPI *Proc_QTTSAudioGetW)(const wchar_t* sessionID, unsigned int* audioLen, int* synthStatus, int* errorCode);\r\n#endif\r\n\r\n/** \n * @fn\t\tQTTSAudioInfo\n * @brief\tGet Synthesized Audio information\n * \n *  Get synthesized audio data information.\n * \n * @return\tconst char * - Return audio info string.\n * @param\tconst char* sessionID\t- [in] session id returned by session begin\n * @see\t\t\n */\nconst char* MSPAPI QTTSAudioInfo(const char* sessionID);\r\ntypedef const char* (MSPAPI *Proc_QTTSAudioInfo)(const char* sessionID);\r\n#ifdef MSP_WCHAR_SUPPORT\nconst wchar_t* MSPAPI QTTSAudioInfoW(const wchar_t* sessionID);\r\ntypedef const wchar_t* (MSPAPI *Proc_QTTSAudioInfoW)(const wchar_t* sessionID);\r\n#endif\n\n/** \n * @fn\t\tQTTSSessionEnd\n * @brief\tEnd a Recognizer Session\n * \n *  End the recognizer session, release all resource.\n * \n * @return\tint MSPAPI\t- Return 0 in success, otherwise return error code.\n * @param\tconst char* session_id\t- [in] session id string to end\n * @param\tconst char* hints\t- [in] user hints to end session, hints will be logged to CallLog\n * @see\t\t\n */\nint MSPAPI QTTSSessionEnd(const char* sessionID, const char* hints);\ntypedef int (MSPAPI *Proc_QTTSSessionEnd)(const char* sessionID, const char* hints);\n#ifdef MSP_WCHAR_SUPPORT\nint MSPAPI QTTSSessionEndW(const wchar_t* sessionID, const wchar_t* hints);\ntypedef int (MSPAPI *Proc_QTTSSessionEndW)(const wchar_t* sessionID, const wchar_t* hints);\n#endif\n\n/** \n * @fn\t\tQTTSGetParam\n * @brief\tget params related with msc\n * \n *  the params could be local or server param, we only support netflow params \"upflow\" & \"downflow\" now\n * \n * @return\tint\t- Return 0 if success, otherwise return errcode.\n * @param\tconst char* sessionID\t- [in] session id of related param, set NULL to got global param\n * @param\tconst char* paramName\t- [in] param name,could pass more than one param split by ','';'or'\\n'\n * @param\tconst char* paramValue\t- [in] param value buffer, malloced by user\n * @param\tint *valueLen\t\t\t- [in, out] pass in length of value buffer, and return length of value string\n * @see\t\t\n */\nint MSPAPI QTTSGetParam(const char* sessionID, const char* paramName, char* paramValue, unsigned int* valueLen);\ntypedef int (MSPAPI *Proc_QTTSGetParam)(const char* sessionID, const char* paramName, char* paramValue, unsigned int* valueLen);\n#ifdef MSP_WCHAR_SUPPORT\nint MSPAPI QTTSGetParamW(const wchar_t* sessionID, const wchar_t* paramName, wchar_t* paramValue, unsigned int* valueLen);\ntypedef int (MSPAPI *Proc_QTTSGetParamW)(const wchar_t* sessionID, const wchar_t* paramName, wchar_t* paramValue, unsigned int* valueLen);\n#endif\n\n/** \n * @fn\t\tQTTSSetParam\n * @brief\tset params related with msc\n * \n *  the params could be local or server param, we only support netflow params \"upflow\" & \"downflow\" now\n * \n * @return\tint\t- Return 0 if success, otherwise return errcode.\n * @param\tconst char* sessionID\t- [in] session id of related param, set NULL to got global param\n * @param\tconst char* paramName\t- [in] param name,could pass more than one param split by ','';'or'\\n'\n * @param\tconst char* paramValue\t- [in] param value buffer, malloced by user\n * @see\t\t\n */\nint MSPAPI QTTSSetParam(const char *sessionID, const char *paramName, const char *paramValue);\ntypedef int (MSPAPI *Proc_QTTSSetParam)(const char* sessionID, const char* paramName, char* paramValue);\n#ifdef MSP_WCHAR_SUPPORT\nint MSPAPI QTTSSetParamW(const wchar_t* sessionID, const wchar_t* paramName, wchar_t* paramValue);\ntypedef int (MSPAPI *Proc_QTTSSetParamW)(const wchar_t* sessionID, const wchar_t* paramName, wchar_t* paramValue);\n#endif\n\ntypedef void ( *tts_result_ntf_handler)( const char *sessionID, const char *audio, int audioLen, int synthStatus, int ced, const char *audioInfo, int audioInfoLen, void *userData ); \ntypedef void ( *tts_status_ntf_handler)( const char *sessionID, int type, int status, int param1, const void *param2, void *userData);\ntypedef void ( *tts_error_ntf_handler)(const char *sessionID, int errorCode,\tconst char *detail, void *userData);\nint MSPAPI QTTSRegisterNotify(const char *sessionID, tts_result_ntf_handler rsltCb, tts_status_ntf_handler statusCb, tts_error_ntf_handler errCb, void *userData);\n\n#ifdef __cplusplus\r\n} /* extern \"C\" */\r\n#endif /* C++ */\r\n\n#endif /* __QTTS_H__ */\n"
  },
  {
    "path": "xf/xf.go",
    "content": "package xf\n\n/*\n\n#cgo CFLAGS:-g -Wall -I./include\n#cgo LDFLAGS:-L./lib -lmsc -lrt -ldl -lpthread\n\n#include \"convert.h\"\n\n*/\nimport \"C\"\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n)\n\n/*\n* rdn:           合成音频数字发音方式\n* volume:        合成音频的音量\n* pitch:         合成音频的音调\n* speed:         合成音频对应的语速\n* voice_name:    合成发音人\n* sample_rate:   合成音频采样率\n* text_encoding: 合成文本编码格式\n*\n* 详细参数说明请参阅《iFlytek MSC Reference Manual》\n */\nvar ttsParams *C.char\nvar sleep C.int = C.int(0)\n\nfunc SetTTSParams(params string) {\n\tttsParams = C.CString(params)\n}\n\nfunc SetSleep(t int) {\n\tsleep = C.int(t)\n}\n\nfunc Login(loginParams string) error {\n\tl := C.CString(loginParams)\n\tdefer C.free(unsafe.Pointer(l))\n\n\tret := C.MSPLogin(nil, nil, C.CString(loginParams))\n\tif ret != C.MSP_SUCCESS {\n\t\treturn fmt.Errorf(\"登录失败，错误码：%d\", int(ret))\n\t}\n\treturn nil\n}\n\nfunc Logout() error {\n\tret := C.MSPLogout()\n\tif ret != C.MSP_SUCCESS {\n\t\treturn fmt.Errorf(\"注销失败，错误码：%d\", int(ret))\n\t}\n\treturn nil\n}\n\nfunc TextToSpeech(text, outPath string) error {\n\tt := C.CString(text)\n\to := C.CString(outPath)\n\tdefer C.free(unsafe.Pointer(t))\n\tdefer C.free(unsafe.Pointer(o))\n\tret := C.text_to_speech(t, o, ttsParams, sleep)\n\tif ret != C.MSP_SUCCESS {\n\t\treturn fmt.Errorf(\"音频生成失败，错误码：%d\", int(ret))\n\t}\n\treturn nil\n}\n"
  }
]