Full Code of dolotech/Texas-Hold-em-Poker for AI

master 51e16f131349 cached
476 files
3.9 MB
1.0M tokens
6611 symbols
1 requests
Download .txt
Showing preview only (4,237K chars total). Download the full file or copy to clipboard to get everything.
Repository: dolotech/Texas-Hold-em-Poker
Branch: master
Commit: 51e16f131349
Files: 476
Total size: 3.9 MB

Directory structure:
gitextract_4hhyd0iz/

├── .gitignore
├── README.md
├── bin/
│   ├── build-linux.sh
│   ├── build-win.sh
│   ├── client/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── assets/
│   │   │   ├── Scene/
│   │   │   │   ├── main.fire
│   │   │   │   └── main.fire.meta
│   │   │   ├── Scene.meta
│   │   │   ├── Script/
│   │   │   │   ├── Common.js
│   │   │   │   ├── Common.js.meta
│   │   │   │   ├── CountDown.js
│   │   │   │   ├── CountDown.js.meta
│   │   │   │   ├── Encoding.js
│   │   │   │   ├── Encoding.js.meta
│   │   │   │   ├── main.js
│   │   │   │   └── main.js.meta
│   │   │   ├── Script.meta
│   │   │   ├── resources/
│   │   │   │   ├── GameMain_6p.plist
│   │   │   │   ├── GameMain_6p.plist.meta
│   │   │   │   ├── GameMain_6p.png.meta
│   │   │   │   ├── audio/
│   │   │   │   │   ├── audio_allinWin.wav.meta
│   │   │   │   │   ├── audio_check.wav.meta
│   │   │   │   │   ├── audio_chipsToPot.wav.meta
│   │   │   │   │   ├── audio_chipsToTable.wav.meta
│   │   │   │   │   ├── audio_distributeCard.wav.meta
│   │   │   │   │   ├── audio_fold.wav.meta
│   │   │   │   │   ├── audio_normalWin.wav.meta
│   │   │   │   │   ├── audio_pokerClick.caf
│   │   │   │   │   ├── audio_pokerClick.caf.meta
│   │   │   │   │   ├── audio_pokerClick.mp3.meta
│   │   │   │   │   ├── audio_timeout.wav.meta
│   │   │   │   │   └── audio_yourTurn.wav.meta
│   │   │   │   ├── audio.meta
│   │   │   │   ├── game_cards.plist
│   │   │   │   ├── game_cards.plist.meta
│   │   │   │   ├── game_cards.png.meta
│   │   │   │   ├── game_cards_6p.plist
│   │   │   │   ├── game_cards_6p.plist.meta
│   │   │   │   ├── game_cards_6p.png.meta
│   │   │   │   ├── game_desk_bg.jpg.meta
│   │   │   │   ├── game_desk_bg_6p.jpg.meta
│   │   │   │   ├── splash.gif.meta
│   │   │   │   └── splash.png.meta
│   │   │   └── resources.meta
│   │   ├── creator.d.ts
│   │   ├── jsconfig.json
│   │   └── project.json
│   └── client.html
└── src/
    ├── github.com/
    │   ├── davecgh/
    │   │   └── go-spew/
    │   │       ├── LICENSE
    │   │       └── spew/
    │   │           ├── bypass.go
    │   │           ├── bypasssafe.go
    │   │           ├── common.go
    │   │           ├── config.go
    │   │           ├── doc.go
    │   │           ├── dump.go
    │   │           ├── format.go
    │   │           └── spew.go
    │   ├── dolotech/
    │   │   ├── leaf/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── TUTORIAL_EN.md
    │   │   │   ├── TUTORIAL_ZH.md
    │   │   │   ├── chanrpc/
    │   │   │   │   ├── chanrpc.go
    │   │   │   │   └── example_test.go
    │   │   │   ├── conf/
    │   │   │   │   └── conf.go
    │   │   │   ├── gate/
    │   │   │   │   ├── agent.go
    │   │   │   │   └── gate.go
    │   │   │   ├── leaf.go
    │   │   │   ├── module/
    │   │   │   │   ├── go_test.go
    │   │   │   │   ├── module.go
    │   │   │   │   └── skeleton.go
    │   │   │   ├── network/
    │   │   │   │   ├── agent.go
    │   │   │   │   ├── conn.go
    │   │   │   │   ├── json/
    │   │   │   │   │   └── json.go
    │   │   │   │   ├── processor.go
    │   │   │   │   ├── protobuf/
    │   │   │   │   │   └── protobuf.go
    │   │   │   │   ├── tcp_client.go
    │   │   │   │   ├── tcp_conn.go
    │   │   │   │   ├── tcp_msg.go
    │   │   │   │   ├── tcp_server.go
    │   │   │   │   ├── ws_client.go
    │   │   │   │   ├── ws_conn.go
    │   │   │   │   └── ws_server.go
    │   │   │   ├── room/
    │   │   │   │   ├── interface.go
    │   │   │   │   ├── msg_loop.go
    │   │   │   │   └── room_list.go
    │   │   │   ├── timer/
    │   │   │   │   ├── cronexpr.go
    │   │   │   │   ├── example_test.go
    │   │   │   │   └── timer.go
    │   │   │   └── version.go
    │   │   └── lib/
    │   │       ├── README.md
    │   │       ├── csv/
    │   │       │   ├── bench_test.go
    │   │       │   ├── cfield.go
    │   │       │   ├── csv.go
    │   │       │   ├── csv_test.go
    │   │       │   ├── decode.go
    │   │       │   ├── decode_test.go
    │   │       │   ├── encode.go
    │   │       │   ├── encode_test.go
    │   │       │   ├── example_marshal_test.go
    │   │       │   └── example_test.go
    │   │       ├── db/
    │   │       │   ├── client.go
    │   │       │   └── client_test.go
    │   │       ├── filter/
    │   │       │   ├── filter.go
    │   │       │   ├── readme.txt
    │   │       │   └── trie.go
    │   │       ├── goevent/
    │   │       │   └── go_event.go
    │   │       ├── grpool/
    │   │       │   ├── grpool.go
    │   │       │   └── grpool_test.go
    │   │       ├── pse/
    │   │       │   ├── pse_darwin.go
    │   │       │   ├── pse_freebsd.go
    │   │       │   ├── pse_linux.go
    │   │       │   ├── pse_rumprun.go
    │   │       │   ├── pse_solaris.go
    │   │       │   ├── pse_test.go
    │   │       │   ├── pse_windows.go
    │   │       │   └── pse_windows_test.go
    │   │       ├── route/
    │   │       │   ├── route_msg.go
    │   │       │   └── router_test.go
    │   │       └── utils/
    │   │           ├── aes.go
    │   │           ├── debug.go
    │   │           ├── helper.go
    │   │           ├── list.go
    │   │           ├── map.go
    │   │           ├── map_list_test.go
    │   │           ├── queue.go
    │   │           ├── random.go
    │   │           ├── sign.go
    │   │           ├── stack.go
    │   │           ├── string_2_bytes.go
    │   │           ├── string_2_bytes_test.go
    │   │           ├── structandmap.go
    │   │           ├── timer_queue.go
    │   │           ├── utils.go
    │   │           ├── utils_test.go
    │   │           ├── waitgroup.go
    │   │           └── xxtea.go
    │   ├── go-xorm/
    │   │   ├── core/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── benchmark.sh
    │   │   │   ├── cache.go
    │   │   │   ├── column.go
    │   │   │   ├── converstion.go
    │   │   │   ├── db.go
    │   │   │   ├── dialect.go
    │   │   │   ├── driver.go
    │   │   │   ├── error.go
    │   │   │   ├── filter.go
    │   │   │   ├── ilogger.go
    │   │   │   ├── index.go
    │   │   │   ├── mapper.go
    │   │   │   ├── pk.go
    │   │   │   ├── scan.go
    │   │   │   ├── table.go
    │   │   │   └── type.go
    │   │   └── xorm/
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── README_CN.md
    │   │       ├── VERSION
    │   │       ├── doc.go
    │   │       ├── engine.go
    │   │       ├── error.go
    │   │       ├── gen_reserved.sh
    │   │       ├── goracle_driver.go
    │   │       ├── helpers.go
    │   │       ├── logger.go
    │   │       ├── lru_cacher.go
    │   │       ├── memory_store.go
    │   │       ├── mssql_dialect.go
    │   │       ├── mymysql_driver.go
    │   │       ├── mysql_dialect.go
    │   │       ├── mysql_driver.go
    │   │       ├── oci8_driver.go
    │   │       ├── odbc_driver.go
    │   │       ├── oracle_dialect.go
    │   │       ├── pg_reserved.txt
    │   │       ├── postgres_dialect.go
    │   │       ├── pq_driver.go
    │   │       ├── processors.go
    │   │       ├── rows.go
    │   │       ├── session.go
    │   │       ├── sqlite3_dialect.go
    │   │       ├── sqlite3_driver.go
    │   │       ├── statement.go
    │   │       ├── syslogger.go
    │   │       ├── types.go
    │   │       └── xorm.go
    │   ├── golang/
    │   │   ├── glog/
    │   │   │   ├── glog.go
    │   │   │   ├── glog_file.go
    │   │   │   └── glog_test.go
    │   │   └── protobuf/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── AUTHORS
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── Make.protobuf
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── _conformance/
    │   │       │   ├── Makefile
    │   │       │   ├── conformance.go
    │   │       │   └── conformance_proto/
    │   │       │       ├── conformance.pb.go
    │   │       │       └── conformance.proto
    │   │       ├── descriptor/
    │   │       │   ├── descriptor.go
    │   │       │   └── descriptor_test.go
    │   │       ├── jsonpb/
    │   │       │   ├── jsonpb.go
    │   │       │   ├── jsonpb_test.go
    │   │       │   └── jsonpb_test_proto/
    │   │       │       ├── Makefile
    │   │       │       ├── more_test_objects.pb.go
    │   │       │       ├── more_test_objects.proto
    │   │       │       ├── test_objects.pb.go
    │   │       │       └── test_objects.proto
    │   │       ├── proto/
    │   │       │   ├── Makefile
    │   │       │   ├── all_test.go
    │   │       │   ├── any_test.go
    │   │       │   ├── clone.go
    │   │       │   ├── clone_test.go
    │   │       │   ├── decode.go
    │   │       │   ├── decode_test.go
    │   │       │   ├── discard.go
    │   │       │   ├── encode.go
    │   │       │   ├── encode_test.go
    │   │       │   ├── equal.go
    │   │       │   ├── equal_test.go
    │   │       │   ├── extensions.go
    │   │       │   ├── extensions_test.go
    │   │       │   ├── lib.go
    │   │       │   ├── map_test.go
    │   │       │   ├── message_set.go
    │   │       │   ├── message_set_test.go
    │   │       │   ├── pointer_reflect.go
    │   │       │   ├── pointer_unsafe.go
    │   │       │   ├── properties.go
    │   │       │   ├── proto3_proto/
    │   │       │   │   ├── proto3.pb.go
    │   │       │   │   └── proto3.proto
    │   │       │   ├── proto3_test.go
    │   │       │   ├── size2_test.go
    │   │       │   ├── size_test.go
    │   │       │   ├── testdata/
    │   │       │   │   ├── Makefile
    │   │       │   │   ├── golden_test.go
    │   │       │   │   ├── test.pb.go
    │   │       │   │   └── test.proto
    │   │       │   ├── text.go
    │   │       │   ├── text_parser.go
    │   │       │   ├── text_parser_test.go
    │   │       │   └── text_test.go
    │   │       ├── protoc-gen-go/
    │   │       │   ├── Makefile
    │   │       │   ├── descriptor/
    │   │       │   │   ├── Makefile
    │   │       │   │   ├── descriptor.pb.go
    │   │       │   │   └── descriptor.proto
    │   │       │   ├── doc.go
    │   │       │   ├── generator/
    │   │       │   │   ├── Makefile
    │   │       │   │   ├── generator.go
    │   │       │   │   └── name_test.go
    │   │       │   ├── grpc/
    │   │       │   │   └── grpc.go
    │   │       │   ├── link_grpc.go
    │   │       │   ├── main.go
    │   │       │   ├── plugin/
    │   │       │   │   ├── Makefile
    │   │       │   │   ├── plugin.pb.go
    │   │       │   │   ├── plugin.pb.golden
    │   │       │   │   └── plugin.proto
    │   │       │   └── testdata/
    │   │       │       ├── Makefile
    │   │       │       ├── extension_base.proto
    │   │       │       ├── extension_extra.proto
    │   │       │       ├── extension_test.go
    │   │       │       ├── extension_user.proto
    │   │       │       ├── grpc.proto
    │   │       │       ├── imp.pb.go.golden
    │   │       │       ├── imp.proto
    │   │       │       ├── imp2.proto
    │   │       │       ├── imp3.proto
    │   │       │       ├── main_test.go
    │   │       │       ├── multi/
    │   │       │       │   ├── multi1.proto
    │   │       │       │   ├── multi2.proto
    │   │       │       │   └── multi3.proto
    │   │       │       ├── my_test/
    │   │       │       │   ├── test.pb.go
    │   │       │       │   ├── test.pb.go.golden
    │   │       │       │   └── test.proto
    │   │       │       └── proto3.proto
    │   │       └── ptypes/
    │   │           ├── any/
    │   │           │   ├── any.pb.go
    │   │           │   └── any.proto
    │   │           ├── any.go
    │   │           ├── any_test.go
    │   │           ├── doc.go
    │   │           ├── duration/
    │   │           │   ├── duration.pb.go
    │   │           │   └── duration.proto
    │   │           ├── duration.go
    │   │           ├── duration_test.go
    │   │           ├── empty/
    │   │           │   ├── empty.pb.go
    │   │           │   └── empty.proto
    │   │           ├── regen.sh
    │   │           ├── struct/
    │   │           │   ├── struct.pb.go
    │   │           │   └── struct.proto
    │   │           ├── timestamp/
    │   │           │   ├── timestamp.pb.go
    │   │           │   └── timestamp.proto
    │   │           ├── timestamp.go
    │   │           ├── timestamp_test.go
    │   │           └── wrappers/
    │   │               ├── wrappers.pb.go
    │   │               └── wrappers.proto
    │   ├── gorilla/
    │   │   └── websocket/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── AUTHORS
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── client.go
    │   │       ├── client_clone.go
    │   │       ├── client_clone_legacy.go
    │   │       ├── client_server_test.go
    │   │       ├── client_test.go
    │   │       ├── compression.go
    │   │       ├── compression_test.go
    │   │       ├── conn.go
    │   │       ├── conn_broadcast_test.go
    │   │       ├── conn_read.go
    │   │       ├── conn_read_legacy.go
    │   │       ├── conn_test.go
    │   │       ├── conn_write.go
    │   │       ├── conn_write_legacy.go
    │   │       ├── doc.go
    │   │       ├── example_test.go
    │   │       ├── examples/
    │   │       │   ├── autobahn/
    │   │       │   │   ├── README.md
    │   │       │   │   ├── fuzzingclient.json
    │   │       │   │   └── server.go
    │   │       │   ├── chat/
    │   │       │   │   ├── README.md
    │   │       │   │   ├── client.go
    │   │       │   │   ├── home.html
    │   │       │   │   ├── hub.go
    │   │       │   │   └── main.go
    │   │       │   ├── command/
    │   │       │   │   ├── README.md
    │   │       │   │   ├── home.html
    │   │       │   │   └── main.go
    │   │       │   ├── echo/
    │   │       │   │   ├── README.md
    │   │       │   │   ├── client.go
    │   │       │   │   └── server.go
    │   │       │   └── filewatch/
    │   │       │       ├── README.md
    │   │       │       └── main.go
    │   │       ├── json.go
    │   │       ├── json_test.go
    │   │       ├── mask.go
    │   │       ├── mask_safe.go
    │   │       ├── mask_test.go
    │   │       ├── prepared.go
    │   │       ├── prepared_test.go
    │   │       ├── proxy.go
    │   │       ├── server.go
    │   │       ├── server_test.go
    │   │       ├── util.go
    │   │       ├── util_test.go
    │   │       └── x_net_proxy.go
    │   ├── labstack/
    │   │   └── gommon/
    │   │       ├── bytes/
    │   │       │   ├── README.md
    │   │       │   ├── bytes.go
    │   │       │   └── bytes_test.go
    │   │       ├── color/
    │   │       │   ├── README.md
    │   │       │   ├── color.go
    │   │       │   └── color_test.go
    │   │       ├── gommon.go
    │   │       ├── log/
    │   │       │   ├── README.md
    │   │       │   ├── color.go
    │   │       │   ├── log.go
    │   │       │   ├── log_test.go
    │   │       │   └── white.go
    │   │       └── random/
    │   │           ├── random.go
    │   │           └── random_test.go
    │   ├── lib/
    │   │   └── pq/
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE.md
    │   │       ├── README.md
    │   │       ├── buf.go
    │   │       ├── conn.go
    │   │       ├── copy.go
    │   │       ├── doc.go
    │   │       ├── encode.go
    │   │       ├── error.go
    │   │       ├── notify.go
    │   │       ├── oid/
    │   │       │   ├── doc.go
    │   │       │   ├── gen.go
    │   │       │   └── types.go
    │   │       ├── url.go
    │   │       ├── user_posix.go
    │   │       └── user_windows.go
    │   └── stretchr/
    │       └── testify/
    │           ├── Gopkg.toml
    │           ├── LICENSE
    │           ├── README.md
    │           ├── _codegen/
    │           │   └── main.go
    │           ├── assert/
    │           │   ├── assertion_format.go
    │           │   ├── assertion_format.go.tmpl
    │           │   ├── assertion_forward.go
    │           │   ├── assertion_forward.go.tmpl
    │           │   ├── assertions.go
    │           │   ├── assertions_test.go
    │           │   ├── doc.go
    │           │   ├── errors.go
    │           │   ├── forward_assertions.go
    │           │   ├── forward_assertions_test.go
    │           │   ├── http_assertions.go
    │           │   └── http_assertions_test.go
    │           ├── doc.go
    │           ├── http/
    │           │   ├── doc.go
    │           │   ├── test_response_writer.go
    │           │   └── test_round_tripper.go
    │           ├── mock/
    │           │   ├── doc.go
    │           │   ├── mock.go
    │           │   └── mock_test.go
    │           ├── package_test.go
    │           ├── require/
    │           │   ├── doc.go
    │           │   ├── forward_requirements.go
    │           │   ├── forward_requirements_test.go
    │           │   ├── require.go
    │           │   ├── require.go.tmpl
    │           │   ├── require_forward.go
    │           │   ├── require_forward.go.tmpl
    │           │   ├── requirements.go
    │           │   └── requirements_test.go
    │           ├── suite/
    │           │   ├── doc.go
    │           │   ├── interfaces.go
    │           │   ├── suite.go
    │           │   └── suite_test.go
    │           └── vendor/
    │               └── github.com/
    │                   ├── davecgh/
    │                   │   └── go-spew/
    │                   │       ├── LICENSE
    │                   │       └── spew/
    │                   │           ├── bypass.go
    │                   │           ├── bypasssafe.go
    │                   │           ├── common.go
    │                   │           ├── config.go
    │                   │           ├── doc.go
    │                   │           ├── dump.go
    │                   │           ├── format.go
    │                   │           └── spew.go
    │                   ├── pmezard/
    │                   │   └── go-difflib/
    │                   │       ├── LICENSE
    │                   │       └── difflib/
    │                   │           └── difflib.go
    │                   └── stretchr/
    │                       └── objx/
    │                           ├── LICENSE
    │                           ├── accessors.go
    │                           ├── constants.go
    │                           ├── conversions.go
    │                           ├── doc.go
    │                           ├── map.go
    │                           ├── mutations.go
    │                           ├── security.go
    │                           ├── tests.go
    │                           ├── type_specific_codegen.go
    │                           └── value.go
    ├── main.go
    └── server/
        ├── algorithm/
        │   ├── 7462.txt
        │   ├── Pocker Rule.html
        │   ├── cards.go
        │   ├── cards_test.go
        │   ├── constan.go
        │   ├── dealer.go
        │   ├── dealer_test.go
        │   ├── flush_test.go
        │   ├── pk.go
        │   ├── sort.go
        │   ├── sort_test.go
        │   └── tostring.go
        ├── base/
        │   └── skeleton.go
        ├── conf/
        │   └── conf.go
        ├── game/
        │   ├── external.go
        │   └── internal/
        │       ├── chanrpc.go
        │       ├── game_rule.go
        │       ├── module.go
        │       ├── occupant.go
        │       ├── pot.go
        │       ├── pot_test.go
        │       ├── room.go
        │       ├── room_internal_handler.go
        │       └── room_test.go
        ├── gate/
        │   ├── external.go
        │   ├── internal/
        │   │   └── module.go
        │   └── router.go
        ├── login/
        │   ├── external.go
        │   └── internal/
        │       ├── handler.go
        │       └── module.go
        ├── model/
        │   ├── constan.go
        │   ├── room_data.go
        │   ├── room_data_test.go
        │   ├── room_list_test.go
        │   ├── user_data.go
        │   └── user_data_test.go
        └── protocol/
            └── protocol.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
.idea/*
pkg/*
bin/game.exe
bin/game


================================================
FILE: README.md
================================================
# 德州扑克服务器Go实现

## 核心算法:
```go
type Cards []byte
// todo 两对和四张起脚牌的判定
var StraightMask = []uint16{15872, 7936, 3968, 1984, 992, 496, 248, 124, 62, 31}
//顺子(Straight,亦称“蛇”)
//此牌由五张顺序扑克牌组成。
//平手牌:如果不止一人抓到此牌,则五张牌中点数最大的赢得此局,
// 如果所有牌点数都相同,平分彩池。
func (this *Cards) straight() uint32 {
	var handvalue uint16
	for _, v := range (*this) {
		value := v & 0xF
		if value == 0xE {
			handvalue |= 1
		}
		handvalue |= (1 << (value - 1 ) )
	}

	for i := uint8(0); i < 10; i++ {
		if handvalue&StraightMask[i] == StraightMask[i] {
			return En(STRAIGHT, uint32(10-i+4))
		}
	}
	return 0
}

//同花顺(Straight Flush)
//五张同花色的连续牌。
//平手牌:如果摊牌时有两副或多副同花顺,连续牌的头张牌大的获得筹码。
//如果是两副或多副相同的连续牌,平分筹码。
func (this *Cards) straightFlush() uint32 {
	cards := *this
	for i := byte(0); i < SUITSIZE; i++ {
		var handvalue uint16
		for _, v := range cards {
			if (v >> 4) == i {
				value := v & 0xF
				if value == 0xE {
					handvalue |= 1
				}
				handvalue |= (1 << (value - 1 ) )
			}
		}

		for i := uint8(0); i < 10; i++ {
			if handvalue&StraightMask[i] == StraightMask[i] {
				return En(STRAIGHT_FLUSH, uint32(10-i+4))
			}
		}
	}
	return 0
}

//皇家同花顺(Royal Flush)
//同花色的A, K, Q, J和10。
//平手牌:在摊牌的时候有两副多副皇家同花顺时,平分筹码。
func (this *Cards) royalFlush() uint32 {
	cards := *this
	for i := byte(0); i < SUITSIZE; i++ {
		var handvalue uint16
		for _, v := range cards {
			if (v >> 4) == i {
				value := v & 0xF
				if value == 0xE {
					handvalue |= 1
				}
				handvalue |= (1 << (value - 1 ) )

			}
		}

		if handvalue&StraightMask[0] == StraightMask[0] {
			return En(ROYAL_FLUSH, 0)
		}
	}
	return 0
}

//四条(Four of a Kind,亦称“铁支”、“四张”或“炸弹”)
//其中四张是相同点数但不同花的扑克牌,第五张是随意的一张牌。
//平手牌:如果两组或者更多组摊牌,则四张牌中的最大者赢局,如果一组人持有的四张牌是一样的,
//那么第五张牌最大者赢局(起脚牌,2张起手牌中小的那张就叫做起脚牌)。如果起脚牌也一样,平分彩池。
func (this *Cards) four(counter *ValueCounter) uint32 {
	cards := *this
	if counter.Get(cards[len(cards)-1]) == 4 {
		return En(FOUR, ToValue(cards))
	}
	return 0
}

//满堂彩(Fullhouse,葫芦,三带二)
//由三张相同点数及任何两张其他相同点数的扑克牌组成。
//平手牌:如果两组或者更多组摊牌,那么三张相同点数中较大者赢局。
//如果三张牌都一样,则两张牌中点数较大者赢局,如果所有的牌都一样,则平分彩池。
func (this *Cards) fullFouse(counter *ValueCounter) uint32 {
	cards := *this
	length := len(cards)

	if length >= 5 {
		if cards[length-1]&0xF == cards[length-2]&0xF &&
			cards[length-3]&0xF == cards[length-1]&0xF &&
			cards[length-4]&0xF == cards[length-5]&0xF {

			return En(FULL_HOUSE, ToValue(cards))
		}
	}
	return 0
}

//同花(Flush,简称“花”)
//此牌由五张不按顺序但相同花的扑克牌组成。
//平手牌:如果不止一人抓到此牌相,则牌点最高的人赢得该局,
//如果最大点相同,则由第二、第三、第四或者第五张牌来决定胜负,如果所有的牌都相同,平分彩池。
func (this *Cards) flush() uint32 {
	cards := *this
	for i := byte(0); i < SUITSIZE; i++ {
		var count uint8
		for _, v := range cards {
			if (v >> 4) == i {
				count ++
				if count == 5 {
					var handvalue uint16
					for _, v1 := range cards {
						if (v1 >> 4) == i {
							value := v1 & 0xF
							if value == 0xE {
								handvalue |= 1
							}
							handvalue |= (1 << (value - 1 ) )
						}
					}
					return En(FLUSH, uint32(handvalue))
				}
			}
		}

	}
	return 0
}

//三条(Three of a kind,亦称“三张”)
//由三张相同点数和两张不同点数的扑克组成。
//平手牌:如果不止一人抓到此牌,则三张牌中最大点数者赢局,
//如果三张牌都相同,比较第四张牌,必要时比较第五张,点数大的人赢局。如果所有牌都相同,则平分彩池。
func (this *Cards) three(counter *ValueCounter) uint32 {
	cards := *this
	if counter.Get(cards[len(cards)-1]) == 3 {
		return En(THREE, ToValue(cards))
	}
	return 0
}

//两对(Two Pairs)
//两对点数相同但两两不同的扑克和随意的一张牌组成。
//平手牌:如果不止一人抓大此牌相,牌点比较大的人赢,如果比较大的牌点相同,那么较小牌点中的较大者赢,
//如果两对牌点相同,那么第五张牌点较大者赢(起脚牌,2张起手牌中小的那张就叫做起脚牌)。如果起脚牌也相同,则平分彩池。
func (this *Cards) twoPair() uint32 {
	cards := *this
	length := len(cards)
	if length >= 4 {
		if cards[length-1]&0xF == cards[length-2]&0xF &&
			cards[length-3]&0xF == cards[length-4]&0xF {
			return En(TWO_PAIR, ToValue(cards))
		}
	}
	return 0
}

//一对(One Pair)
//由两张相同点数的扑克牌和另三张随意的牌组成。
//平手牌:如果不止一人抓到此牌,则两张牌中点数大的赢,如果对牌都一样,则比较另外三张牌中大的赢,
//如果另外三张牌中较大的也一样则比较第二大的和第三大的,如果所有的牌都一样,则平分彩池。
func (this *Cards) onePair() uint32 {
	cards := *this
	length := len(cards)
	if length >= 2 {
		if cards[length-1]&0xF == cards[length-2]&0xF {
			return En(ONE_PAIR, ToValue(cards))
		}
	}
	return 0
}

func ToValue(cards []byte) uint32 {
	var res uint32
	for i := len(cards) - 1; i >= 0; i-- {
		res *= 10
		res += uint32(cards[i] & 0xF)
	}
	return res
}

func De(v uint32) (uint8, uint32) {
	return uint8(v >> 24), v & 0xFFFFFF
}

func En(t uint8, v uint32) uint32 {
	v1 := v | ( uint32(t) << 24)
	return v1
}
```


================================================
FILE: bin/build-linux.sh
================================================
#!/bin/bash
# usage ./build-linux.sh 1.0.13
curDir=`pwd`
GREEN="\e[1;32m"
RESET="\e[0m"
echo -e "${GREEN} current dir is $curDir ${RESET}"

d=`date "+%Y-%m-%d-%H-%M-%S"`
echo -e "${GREEN} mkpkg_time is $d ${RESET}"

pkg_version=$1
echo -e "${GREEN} pkg_version is $pkg_version ${RESET}" 

cd   $curDir/..
STRING_GAME=`git log | head -n 1 | awk '{print $2}'`
echo -e "${GREEN} game commit is $STRING_GAME ${RESET}" 

cd   $curDir/..
echo `pwd`

cd   $curDir/..

export GOPATH=`pwd`
export GOARCH=amd64
export GOOS=linux
cd bin


go build  -o game -ldflags "-X main.Commit=$STRING_GAME -X 'main.BUILD_TIME=`date`' -X main.VERSION=$1 -s -w"  ../src/main.go


read -p "Press any key to continue." var

================================================
FILE: bin/build-win.sh
================================================
#!/bin/bash
# usage ./build-linux.sh 1.0.13
curDir=`pwd`
GREEN="\e[1;32m"
RESET="\e[0m"
echo -e "${GREEN} current dir is $curDir ${RESET}"

d=`date "+%Y-%m-%d-%H-%M-%S"`
echo -e "${GREEN} mkpkg_time is $d ${RESET}"

pkg_version=$1
echo -e "${GREEN} pkg_version is $pkg_version ${RESET}" 

cd   $curDir/..
STRING_GAME=`git log | head -n 1 | awk '{print $2}'`
echo -e "${GREEN} game commit is $STRING_GAME ${RESET}" 

cd   $curDir/..
echo `pwd`

cd   $curDir/..

export GOPATH=`pwd`
#export GOARCH=amd64
#export GOOS=linux
cd bin


go build  -o game.exe -ldflags "-X main.Commit=$STRING_GAME -X 'main.BUILD_TIME=`date`' -X main.VERSION=$1 -s -w"  ../src/main.go


read -p "Press any key to continue." var

================================================
FILE: bin/client/.gitignore
================================================
#IDE
/library
/local
/build
/temp
/.idea
/settings


================================================
FILE: bin/client/README.md
================================================
# Cocos Creator 写的一个德州扑克的游戏回放,仅供参考


================================================
FILE: bin/client/assets/Scene/main.fire
================================================
[
  {
    "__type__": "cc.SceneAsset",
    "_name": "",
    "_objFlags": 0,
    "_rawFiles": null,
    "scene": {
      "__id__": 1
    }
  },
  {
    "__type__": "cc.Scene",
    "_name": "main",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": null,
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 0
    },
    "_children": [
      {
        "__id__": 2
      }
    ],
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "b1a3242c-6595-42df-a0fc-e177f727763d"
  },
  {
    "__type__": "cc.Node",
    "_name": "Canvas",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 1
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 1000,
      "height": 1560
    },
    "_children": [
      {
        "__id__": 3
      },
      {
        "__id__": 113
      },
      {
        "__id__": 114
      },
      {
        "__id__": 115
      },
      {
        "__id__": 116
      },
      {
        "__id__": 117
      },
      {
        "__id__": 118
      },
      {
        "__id__": 124
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 500,
      "y": 780
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "87318gAtAVE5YV5wEAYBbcX",
    "_active": true,
    "_components": [
      {
        "__id__": 126
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "table_bg",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 2
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 1130,
      "height": 1560
    },
    "_children": [
      {
        "__id__": 4
      },
      {
        "__id__": 14
      },
      {
        "__id__": 23
      },
      {
        "__id__": 33
      },
      {
        "__id__": 43
      },
      {
        "__id__": 53
      },
      {
        "__id__": 63
      },
      {
        "__id__": 73
      },
      {
        "__id__": 83
      },
      {
        "__id__": 93
      },
      {
        "__id__": 96
      },
      {
        "__id__": 99
      },
      {
        "__id__": 102
      },
      {
        "__id__": 103
      },
      {
        "__id__": 104
      },
      {
        "__id__": 105
      },
      {
        "__id__": 106
      },
      {
        "__id__": 107
      },
      {
        "__id__": 108
      },
      {
        "__id__": 109
      },
      {
        "__id__": 110
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "6a97a8/GAFHTrJP5XWtPkx+",
    "_active": true,
    "_components": [
      {
        "__id__": 111
      },
      {
        "__id__": 112
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "seat_0",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 120,
      "height": 120
    },
    "_children": [
      {
        "__id__": 5
      },
      {
        "__id__": 6
      },
      {
        "__id__": 9
      },
      {
        "__id__": 12
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -400
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "a77cbKPk7hJC4cLSMT0rUGm",
    "_active": true,
    "_components": [
      {
        "__id__": 13
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "game_tip",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 4
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 126,
      "height": 66
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 57,
      "y": 25
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "e6321VmItNCOq39iH20y4D0",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "nick",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 4
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "b5985lBCBtArp9Et9uVxeuV",
    "_active": true,
    "_components": [
      {
        "__id__": 7
      }
    ],
    "_prefab": {
      "__id__": 8
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 6
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 6
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "chips",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 4
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "d7f9ekaZJNIPrjltUVmLBBo",
    "_active": true,
    "_components": [
      {
        "__id__": 10
      }
    ],
    "_prefab": {
      "__id__": 11
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 9
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 9
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "dealer",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 4
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 49,
      "height": 49
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "79758mNFOpDLrMwtBnAvIg+",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Sprite",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 4
    },
    "_enabled": true,
    "_spriteFrame": {
      "__uuid__": "d79f84c5-d5e1-4aad-b902-431289fb7b91"
    },
    "_type": 0,
    "_sizeMode": 0,
    "_fillType": 0,
    "_fillCenter": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_fillStart": 0,
    "_fillRange": 0,
    "_isTrimmedMode": true,
    "_srcBlendFactor": 770,
    "_dstBlendFactor": 771,
    "_atlas": {
      "__uuid__": "aae22d42-a9cf-43f5-8c35-5348d3f98f75"
    }
  },
  {
    "__type__": "cc.Node",
    "_name": "seat_1",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 120,
      "height": 120
    },
    "_children": [
      {
        "__id__": 15
      },
      {
        "__id__": 16
      },
      {
        "__id__": 19
      },
      {
        "__id__": 21
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -390,
      "y": -150
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "8eaf6bTIINJz4hs4ELd7LIC",
    "_active": true,
    "_components": [
      {
        "__id__": 22
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "game_tip",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 14
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 84,
      "height": 44
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 57,
      "y": 25
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "962c2ULwpBJaoIwjW1zWooB",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "nick",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 14
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "177242DBgJOW5LB5ocvKbHd",
    "_active": true,
    "_components": [
      {
        "__id__": 17
      }
    ],
    "_prefab": {
      "__id__": 18
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 16
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 16
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "chips",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 14
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "c4e04pvk+1AQZ3b+Qo5WlBj",
    "_active": true,
    "_components": [
      {
        "__id__": 20
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 19
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "dealer",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 14
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 49,
      "height": 49
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "fff0dgsq5dCCYzVoSa0NLFH",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Sprite",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 14
    },
    "_enabled": true,
    "_spriteFrame": {
      "__uuid__": "d79f84c5-d5e1-4aad-b902-431289fb7b91"
    },
    "_type": 0,
    "_sizeMode": 0,
    "_fillType": 0,
    "_fillCenter": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_fillStart": 0,
    "_fillRange": 0,
    "_isTrimmedMode": true,
    "_srcBlendFactor": 770,
    "_dstBlendFactor": 771,
    "_atlas": {
      "__uuid__": "aae22d42-a9cf-43f5-8c35-5348d3f98f75"
    }
  },
  {
    "__type__": "cc.Node",
    "_name": "seat_2",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 120,
      "height": 120
    },
    "_children": [
      {
        "__id__": 24
      },
      {
        "__id__": 25
      },
      {
        "__id__": 28
      },
      {
        "__id__": 31
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -390,
      "y": 130
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "d4dacl6zv5Ow4WGZ2PaTaKH",
    "_active": true,
    "_components": [
      {
        "__id__": 32
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "game_tip",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 23
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 84,
      "height": 44
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 57,
      "y": 25
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "c0373XWaEZKVoEMveh6Byv0",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "nick",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 23
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "c4a51CETARKJ7Hupl1PiIH3",
    "_active": true,
    "_components": [
      {
        "__id__": 26
      }
    ],
    "_prefab": {
      "__id__": 27
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 25
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 25
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "chips",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 23
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "d7e1eLUZwBPQKIq6c+a2ZtB",
    "_active": true,
    "_components": [
      {
        "__id__": 29
      }
    ],
    "_prefab": {
      "__id__": 30
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 28
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 28
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "dealer",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 23
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 49,
      "height": 49
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "fa223AJdGpFGoH5iZ35SGZp",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Sprite",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 23
    },
    "_enabled": true,
    "_spriteFrame": {
      "__uuid__": "d79f84c5-d5e1-4aad-b902-431289fb7b91"
    },
    "_type": 0,
    "_sizeMode": 0,
    "_fillType": 0,
    "_fillCenter": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_fillStart": 0,
    "_fillRange": 0,
    "_isTrimmedMode": true,
    "_srcBlendFactor": 770,
    "_dstBlendFactor": 771,
    "_atlas": {
      "__uuid__": "aae22d42-a9cf-43f5-8c35-5348d3f98f75"
    }
  },
  {
    "__type__": "cc.Node",
    "_name": "seat_3",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 120,
      "height": 120
    },
    "_children": [
      {
        "__id__": 34
      },
      {
        "__id__": 35
      },
      {
        "__id__": 38
      },
      {
        "__id__": 41
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -390,
      "y": 390
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "a16d3140NtLsrxjigsyOQfh",
    "_active": true,
    "_components": [
      {
        "__id__": 42
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "game_tip",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 33
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 84,
      "height": 44
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 45,
      "y": 25
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "95104GXzj9EvI7iZP12FXqA",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "nick",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 33
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "d74793N9JZJsaBnAMHgCIPx",
    "_active": true,
    "_components": [
      {
        "__id__": 36
      }
    ],
    "_prefab": {
      "__id__": 37
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 35
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 35
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "chips",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 33
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "27356QU50RDEouIwSE8tKuc",
    "_active": true,
    "_components": [
      {
        "__id__": 39
      }
    ],
    "_prefab": {
      "__id__": 40
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 38
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 38
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "dealer",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 33
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 49,
      "height": 49
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "d3c63DFPAhEvb5HPeZXBiqq",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Sprite",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 33
    },
    "_enabled": true,
    "_spriteFrame": {
      "__uuid__": "d79f84c5-d5e1-4aad-b902-431289fb7b91"
    },
    "_type": 0,
    "_sizeMode": 0,
    "_fillType": 0,
    "_fillCenter": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_fillStart": 0,
    "_fillRange": 0,
    "_isTrimmedMode": true,
    "_srcBlendFactor": 770,
    "_dstBlendFactor": 771,
    "_atlas": {
      "__uuid__": "aae22d42-a9cf-43f5-8c35-5348d3f98f75"
    }
  },
  {
    "__type__": "cc.Node",
    "_name": "seat_4",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 120,
      "height": 120
    },
    "_children": [
      {
        "__id__": 44
      },
      {
        "__id__": 45
      },
      {
        "__id__": 48
      },
      {
        "__id__": 51
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -175,
      "y": 620
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "bf93f39ZKVKzLx2Z0FUAVUV",
    "_active": true,
    "_components": [
      {
        "__id__": 52
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "game_tip",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 43
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 84,
      "height": 44
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 57,
      "y": 25
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "d4efaYy8DxK47KmObsV2Zv0",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "nick",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 43
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "0f71a4d0ihDMJd9Iv/1UQyb",
    "_active": true,
    "_components": [
      {
        "__id__": 46
      }
    ],
    "_prefab": {
      "__id__": 47
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 45
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 45
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "chips",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 43
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "65c4a5Jz9JJl45WlN4LSGiY",
    "_active": true,
    "_components": [
      {
        "__id__": 49
      }
    ],
    "_prefab": {
      "__id__": 50
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 48
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 48
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "dealer",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 43
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 49,
      "height": 49
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 70,
      "y": -120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "45095damKtPRJVVq1Ng0pCF",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Sprite",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 43
    },
    "_enabled": true,
    "_spriteFrame": {
      "__uuid__": "d79f84c5-d5e1-4aad-b902-431289fb7b91"
    },
    "_type": 0,
    "_sizeMode": 0,
    "_fillType": 0,
    "_fillCenter": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_fillStart": 0,
    "_fillRange": 0,
    "_isTrimmedMode": true,
    "_srcBlendFactor": 770,
    "_dstBlendFactor": 771,
    "_atlas": {
      "__uuid__": "aae22d42-a9cf-43f5-8c35-5348d3f98f75"
    }
  },
  {
    "__type__": "cc.Node",
    "_name": "seat_5",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 120,
      "height": 120
    },
    "_children": [
      {
        "__id__": 54
      },
      {
        "__id__": 55
      },
      {
        "__id__": 58
      },
      {
        "__id__": 61
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 175,
      "y": 620
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "7be73w6tbdBNo4WHG0mlL7U",
    "_active": true,
    "_components": [
      {
        "__id__": 62
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "game_tip",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 53
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 84,
      "height": 44
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 57,
      "y": 25
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "6f98bsA9AxN84J5Aqf7k9ge",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "nick",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 53
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "7b5f9DG+iJCE51ng0jOR4Ph",
    "_active": true,
    "_components": [
      {
        "__id__": 56
      }
    ],
    "_prefab": {
      "__id__": 57
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 55
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 55
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "chips",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 53
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 30
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "d9410bRjjNBIpapyHQeAgXY",
    "_active": true,
    "_components": [
      {
        "__id__": 59
      }
    ],
    "_prefab": {
      "__id__": 60
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 58
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 30,
    "_lineHeight": 30,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 58
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "dealer",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 53
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 49,
      "height": 49
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 70,
      "y": -120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "65249M1zoNCuLBfLiaGQ14t",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Sprite",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 53
    },
    "_enabled": true,
    "_spriteFrame": {
      "__uuid__": "d79f84c5-d5e1-4aad-b902-431289fb7b91"
    },
    "_type": 0,
    "_sizeMode": 0,
    "_fillType": 0,
    "_fillCenter": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_fillStart": 0,
    "_fillRange": 0,
    "_isTrimmedMode": true,
    "_srcBlendFactor": 770,
    "_dstBlendFactor": 771,
    "_atlas": {
      "__uuid__": "aae22d42-a9cf-43f5-8c35-5348d3f98f75"
    }
  },
  {
    "__type__": "cc.Node",
    "_name": "seat_6",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 120,
      "height": 120
    },
    "_children": [
      {
        "__id__": 64
      },
      {
        "__id__": 65
      },
      {
        "__id__": 68
      },
      {
        "__id__": 71
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 390,
      "y": 370
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "8b241vXXqhO4J9ETIF7kyNs",
    "_active": true,
    "_components": [
      {
        "__id__": 72
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "game_tip",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 63
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 84,
      "height": 44
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -57,
      "y": 25
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "13e059qeMhMJoGCrpG7TOQ5",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "nick",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 63
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "75b76qW2hVKyr4u0xEL5p8N",
    "_active": true,
    "_components": [
      {
        "__id__": 66
      }
    ],
    "_prefab": {
      "__id__": 67
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 65
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 65
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "chips",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 63
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "101aeHhphhCuY3xCjkDA5Qy",
    "_active": true,
    "_components": [
      {
        "__id__": 69
      }
    ],
    "_prefab": {
      "__id__": 70
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 68
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 68
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "dealer",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 63
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 49,
      "height": 49
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "ce9bbv6DkhHnpGLs0p3Ryj8",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Sprite",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 63
    },
    "_enabled": true,
    "_spriteFrame": {
      "__uuid__": "d79f84c5-d5e1-4aad-b902-431289fb7b91"
    },
    "_type": 0,
    "_sizeMode": 0,
    "_fillType": 0,
    "_fillCenter": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_fillStart": 0,
    "_fillRange": 0,
    "_isTrimmedMode": true,
    "_srcBlendFactor": 770,
    "_dstBlendFactor": 771,
    "_atlas": {
      "__uuid__": "aae22d42-a9cf-43f5-8c35-5348d3f98f75"
    }
  },
  {
    "__type__": "cc.Node",
    "_name": "seat_7",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 120,
      "height": 120
    },
    "_children": [
      {
        "__id__": 74
      },
      {
        "__id__": 75
      },
      {
        "__id__": 78
      },
      {
        "__id__": 81
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 390,
      "y": 120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "84471vfDJxDVpxYeb5w9SYZ",
    "_active": true,
    "_components": [
      {
        "__id__": 82
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "game_tip",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 73
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 84,
      "height": 44
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -57,
      "y": 25
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "4bfd5Oguv1GFoP0ZH9zZDwt",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "nick",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 73
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "eea181g0MBJK7pCa4i8LrUI",
    "_active": true,
    "_components": [
      {
        "__id__": 76
      }
    ],
    "_prefab": {
      "__id__": 77
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 75
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 75
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "chips",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 73
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "b5df1+V6p1B6qQHct0iNb5x",
    "_active": true,
    "_components": [
      {
        "__id__": 79
      }
    ],
    "_prefab": {
      "__id__": 80
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 78
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 78
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "dealer",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 73
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 49,
      "height": 49
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "a8f09ejpfZMz7MVBhrBTSd9",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Sprite",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 73
    },
    "_enabled": true,
    "_spriteFrame": {
      "__uuid__": "d79f84c5-d5e1-4aad-b902-431289fb7b91"
    },
    "_type": 0,
    "_sizeMode": 0,
    "_fillType": 0,
    "_fillCenter": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_fillStart": 0,
    "_fillRange": 0,
    "_isTrimmedMode": true,
    "_srcBlendFactor": 770,
    "_dstBlendFactor": 771,
    "_atlas": {
      "__uuid__": "aae22d42-a9cf-43f5-8c35-5348d3f98f75"
    }
  },
  {
    "__type__": "cc.Node",
    "_name": "seat_8",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 120,
      "height": 120
    },
    "_children": [
      {
        "__id__": 84
      },
      {
        "__id__": 85
      },
      {
        "__id__": 88
      },
      {
        "__id__": 91
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 390,
      "y": -150
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "db9baRfhdhG2Jd+E6yd9PLS",
    "_active": true,
    "_components": [
      {
        "__id__": 92
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "game_tip",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 83
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 84,
      "height": 44
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -57,
      "y": 25
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "fd559/cArpGureRfY2KpGUM",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "nick",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 83
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "93285anWC9B3o8gQVYDumlQ",
    "_active": true,
    "_components": [
      {
        "__id__": 86
      }
    ],
    "_prefab": {
      "__id__": 87
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 85
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 85
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "chips",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 83
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 30
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -80
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "70704I7fddPjrHX0g2pZ0jM",
    "_active": true,
    "_components": [
      {
        "__id__": 89
      }
    ],
    "_prefab": {
      "__id__": 90
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 88
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 30,
    "_lineHeight": 30,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 88
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "dealer",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 83
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 49,
      "height": 49
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "30296IaWKZCgZQC5QW9wx2Q",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Sprite",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 83
    },
    "_enabled": true,
    "_spriteFrame": {
      "__uuid__": "d79f84c5-d5e1-4aad-b902-431289fb7b91"
    },
    "_type": 0,
    "_sizeMode": 0,
    "_fillType": 0,
    "_fillCenter": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_fillStart": 0,
    "_fillRange": 0,
    "_isTrimmedMode": true,
    "_srcBlendFactor": 770,
    "_dstBlendFactor": 771,
    "_atlas": {
      "__uuid__": "aae22d42-a9cf-43f5-8c35-5348d3f98f75"
    }
  },
  {
    "__type__": "cc.Node",
    "_name": "table_name",
    "_objFlags": 0,
    "_opacity": 100,
    "_color": {
      "__type__": "cc.Color",
      "r": 0,
      "g": 0,
      "b": 0,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -90
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "97213vbSklNu5yDYLowSVHv",
    "_active": true,
    "_components": [
      {
        "__id__": 94
      }
    ],
    "_prefab": {
      "__id__": 95
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 93
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 93
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "table_sb",
    "_objFlags": 0,
    "_opacity": 100,
    "_color": {
      "__type__": "cc.Color",
      "r": 0,
      "g": 0,
      "b": 0,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "761e9iWpWlKpZWglCafBzGB",
    "_active": true,
    "_components": [
      {
        "__id__": 97
      }
    ],
    "_prefab": {
      "__id__": 98
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 96
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 96
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "table_code",
    "_objFlags": 0,
    "_opacity": 100,
    "_color": {
      "__type__": "cc.Color",
      "r": 0,
      "g": 0,
      "b": 0,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -150
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "595b9sZGmZJVIz744IUjFK1",
    "_active": true,
    "_components": [
      {
        "__id__": 100
      }
    ],
    "_prefab": {
      "__id__": 101
    },
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 99
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": false,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.PrefabInfo",
    "root": {
      "__id__": 99
    },
    "asset": {
      "__uuid__": "27756ebb-3d33-44b0-9b96-e858fadd4dd4"
    },
    "fileId": "d1cddH/doRNQ4Aodz8556bh"
  },
  {
    "__type__": "cc.Node",
    "_name": "chip_0",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 39,
      "height": 41
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": -200
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "b34b8yrHDNM3qON31vbAbb6",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "chip_1",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 39,
      "height": 41
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -250,
      "y": -150
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "10b5d6zB5VOFJ8CtGl8Nd0z",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "chip_2",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 39,
      "height": 41
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -250,
      "y": 120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "a7165YJkzBHoKvKHWXyh5jz",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "chip_3",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 39,
      "height": 41
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -250,
      "y": 370
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "b95fbuF4plGLa8acAbzF7kj",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "chip_4",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 39,
      "height": 41
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -175,
      "y": 450
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "fb9a2suBehPNqtNzkQdCIWY",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "chip_5",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 39,
      "height": 41
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 175,
      "y": 450
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "dfcd4NG8nxAsJ4ulKgUoEfq",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "chip_6",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 39,
      "height": 41
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 250,
      "y": 370
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "1875bUQ1ltHIrDDTG0+Y3oP",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "chip_7",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 39,
      "height": 41
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 250,
      "y": 120
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "f939fyrLvNHcb1o/S68syx+",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "chip_8",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 3
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 39,
      "height": 41
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 250,
      "y": -150
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "c29a0hhCtFOtLyKhsq0nHax",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Sprite",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 3
    },
    "_enabled": true,
    "_spriteFrame": {
      "__uuid__": "d5e079ed-488b-4fd5-8bc3-b3e082b34d96"
    },
    "_type": 1,
    "_sizeMode": 0,
    "_fillType": 0,
    "_fillCenter": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_fillStart": 0,
    "_fillRange": 0,
    "_isTrimmedMode": true,
    "_srcBlendFactor": 770,
    "_dstBlendFactor": 771,
    "_atlas": null
  },
  {
    "__type__": "cc.Layout",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 3
    },
    "_enabled": true,
    "_layoutSize": {
      "__type__": "cc.Size",
      "width": 1130,
      "height": 1560
    },
    "_resize": 0,
    "_N$layoutType": 0,
    "_N$cellSize": {
      "__type__": "cc.Size",
      "width": 40,
      "height": 40
    },
    "_N$startAxis": 0,
    "_N$padding": 0,
    "_N$spacingX": 0,
    "_N$spacingY": 0,
    "_N$verticalDirection": 1,
    "_N$horizontalDirection": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "card0",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 2
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 0
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -170,
      "y": -10
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "ca588XWyEVDIK8moOgxwnrm",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "card1",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 2
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 0
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -170,
      "y": -10
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "3cbe6OFjcNHK7fXsno5sXom",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "card2",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 2
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 0
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -170,
      "y": -10
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "167adzrdW5BM7Yx0rxc2ABx",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "card3",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 2
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 0
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 101,
      "y": -10
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "417c4ciIrxAYI2qbNu25uRY",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "card4",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 2
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 0
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 192,
      "y": -10
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "c8528G8OaZH4qY7cTUAxkwB",
    "_active": true,
    "_components": [],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "sound",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 2
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 128,
      "height": 128
    },
    "_children": [
      {
        "__id__": 119
      }
    ],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": -377,
      "y": -607
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "f13a5PxN+tM0LRToQ5jBGcA",
    "_active": true,
    "_components": [
      {
        "__id__": 121
      },
      {
        "__id__": 122
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Node",
    "_name": "sound_tips",
    "_objFlags": 0,
    "_opacity": 0,
    "_color": {
      "__type__": "cc.Color",
      "r": 220,
      "g": 238,
      "b": 11,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 118
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 25
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 88
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "daabcnNxuJMuIwLimc6980Z",
    "_active": true,
    "_components": [
      {
        "__id__": 120
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "cc.Label",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 119
    },
    "_enabled": true,
    "_useOriginalSize": false,
    "_actualFontSize": 40,
    "_fontSize": 25,
    "_lineHeight": 25,
    "_enableWrapText": true,
    "_N$file": null,
    "_isSystemFontUsed": true,
    "_N$string": "",
    "_N$horizontalAlign": 1,
    "_N$verticalAlign": 1,
    "_N$overflow": 0
  },
  {
    "__type__": "cc.Sprite",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 118
    },
    "_enabled": true,
    "_spriteFrame": {
      "__uuid__": "78f76275-b201-4017-8f0f-70664c14a542"
    },
    "_type": 0,
    "_sizeMode": 1,
    "_fillType": 0,
    "_fillCenter": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_fillStart": 0,
    "_fillRange": 0,
    "_isTrimmedMode": true,
    "_srcBlendFactor": 770,
    "_dstBlendFactor": 771,
    "_atlas": {
      "__uuid__": "aae22d42-a9cf-43f5-8c35-5348d3f98f75"
    }
  },
  {
    "__type__": "cc.Button",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 118
    },
    "_enabled": true,
    "transition": 0,
    "pressedColor": {
      "__type__": "cc.Color",
      "r": 211,
      "g": 211,
      "b": 211,
      "a": 255
    },
    "hoverColor": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "duration": 0.1,
    "pressedSprite": null,
    "hoverSprite": null,
    "clickEvents": [
      {
        "__id__": 123
      }
    ],
    "_N$interactable": true,
    "_N$normalColor": {
      "__type__": "cc.Color",
      "r": 214,
      "g": 214,
      "b": 214,
      "a": 255
    },
    "_N$disabledColor": {
      "__type__": "cc.Color",
      "r": 124,
      "g": 124,
      "b": 124,
      "a": 255
    },
    "_N$normalSprite": null,
    "_N$disabledSprite": null,
    "_N$target": {
      "__id__": 118
    }
  },
  {
    "__type__": "cc.ClickEvent",
    "target": {
      "__id__": 124
    },
    "component": "main",
    "handler": "set_mute"
  },
  {
    "__type__": "cc.Node",
    "_name": "Main",
    "_objFlags": 0,
    "_opacity": 255,
    "_color": {
      "__type__": "cc.Color",
      "r": 255,
      "g": 255,
      "b": 255,
      "a": 255
    },
    "_cascadeOpacityEnabled": true,
    "_parent": {
      "__id__": 2
    },
    "_anchorPoint": {
      "__type__": "cc.Vec2",
      "x": 0.5,
      "y": 0.5
    },
    "_contentSize": {
      "__type__": "cc.Size",
      "width": 0,
      "height": 0
    },
    "_children": [],
    "_rotationX": 0,
    "_rotationY": 0,
    "_scaleX": 1,
    "_scaleY": 1,
    "_position": {
      "__type__": "cc.Vec2",
      "x": 0,
      "y": 0
    },
    "_skewX": 0,
    "_skewY": 0,
    "_localZOrder": 0,
    "_globalZOrder": 0,
    "_tag": -1,
    "_opacityModifyRGB": false,
    "_reorderChildDirty": false,
    "_id": "7d6b9Jtb9RNbbKkh4/IG5cv",
    "_active": true,
    "_components": [
      {
        "__id__": 125
      }
    ],
    "_prefab": null,
    "groupIndex": 0
  },
  {
    "__type__": "ba49cogWFZADYkzvB39Ug3B",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 124
    },
    "_enabled": true,
    "seat": [],
    "Lang": null,
    "SourceSuffix": null,
    "GameMain": null,
    "GameCards": null,
    "audio_chipsToTable": null,
    "audio_check": null,
    "audio_fold": null,
    "audio_distributeCard": null,
    "open_fixedThinkTime": 0,
    "fixedThinkTime": 2,
    "open_mute": 0,
    "is_mobile": 0,
    "fontStyle": null,
    "countdown_execution_interval": 0.1,
    "countdown_repeat_num": 0,
    "countdown_long_time": 0,
    "countdown_cycle_time": 15,
    "countdown_node": null,
    "countdown_task": null,
    "countdown_over_task": null,
    "actions": null,
    "i": 0,
    "ws": null,
    "hand_data": null,
    "data": null,
    "card": [
      {
        "__id__": 113
      },
      {
        "__id__": 114
      },
      {
        "__id__": 115
      },
      {
        "__id__": 116
      },
      {
        "__id__": 117
      }
    ],
    "inpot": null,
    "table_chips_inpot": 0,
    "table_chips": [],
    "table_tips": [],
    "game_card_turn": 0,
    "game_card_river": 0,
    "cleanNode": [],
    "cleanSp": [],
    "game_start": 0
  },
  {
    "__type__": "cc.Canvas",
    "_name": "",
    "_objFlags": 0,
    "node": {
      "__id__": 2
    },
    "_enabled": true,
    "_designResolution": {
      "__type__": "cc.Size",
      "width": 1000,
      "height": 1560
    },
    "_fitWidth": false,
    "_fitHeight": true
  }
]

================================================
FILE: bin/client/assets/Scene/main.fire.meta
================================================
{
  "ver": "1.0.0",
  "uuid": "b1a3242c-6595-42df-a0fc-e177f727763d",
  "subMetas": {}
}

================================================
FILE: bin/client/assets/Scene.meta
================================================
{
  "ver": "1.0.1",
  "uuid": "a6716ca2-df58-41aa-b8d3-8ca203720a85",
  "isGroup": false,
  "subMetas": {}
}

================================================
FILE: bin/client/assets/Script/Common.js
================================================
cc.Class({
    extends:  cc.Component,

    properties: {
        seat:{
            default:[],
            type:cc.Node
        },
        Lang:null,//语言版本
        SourceSuffix:null,//资源后缀
        GameMain:null,//游戏资源
        GameCards:null,//游戏的牌中的资源
        audio_chipsToTable:null,//下注的音频
        audio_check:null,//check的音频
        audio_fold:null,//fold的音频
        audio_distributeCard:null,//翻牌的声音
        open_fixedThinkTime:0,//开启固定思考时间的设置0-否1-开启
        fixedThinkTime:2,//固定思考时间,配合open_fixedThinkTime使用,单位:秒
        open_mute:0,//是否开启静音模式0-否1-是
        is_mobile:0,//是否是手机访问0-否1-是
        fontStyle:null,//字体样式
        //websocket
        ws:null,
    },
    //web socket连接
    wsstart:function(){
        var me=this;
        var ws = new WebSocket("ws://127.0.0.1:3564");
        ws.binaryType = "arraybuffer" ;
        var decoder = new TextDecoder('utf-8')


        ws.onopen = function (event) {
            me.ws = ws;
            console.log("Send Text WS was opened.");
        };

        ws.onmessage = function (event) {
            console.log("response text msg: " + event.data);

            var input = event.data;

            var data = JSON.parse(decoder.decode(event.data));
            console.log("server response");

            console.log(data);

        };
        ws.onerror = function (event) {
            console.log("Send Text fired an error");
        };
        ws.onclose = function (event) {
            console.log("WebSocket instance closed.");
        };

        //setTimeout(function () {
        //    if(me.ws!=null){
        //        cc.log(me.ws.readyState);
        //        if (me.ws.readyState === WebSocket.OPEN) {
        //            cc.log("send message to server3000");
        //            me.ws.send(JSON.stringify({Ai: {
        //                Ai_id: '123456',
        //                Hand:[1,2]
        //            }}))
        //        }
        //        else {
        //            console.log("WebSocket instance wasn't ready...");
        //        }
        //    }else{
        //        cc.log("ws is null");
        //    }
        //}, 3000);

    },
    sit_down:function(){
        //加载游戏资源图片
        var me = this;
        me.is_mobile = this.isMobile();
        if(me.is_mobile == 1){
            me.fontStyle={
                "table_name":{"fontSize":30,"lineHeight":30},
                "table_sb":{"fontSize":30,"lineHeight":30},
                "table_code":{"fontSize":30,"lineHeight":30},
                "nick":{"fontSize":30,"lineHeight":30},
                "chips":{"fontSize":30,"lineHeight":30},
                "chip":{"fontSize":30,"lineHeight":30},
                "pot":{"fontSize":30,"lineHeight":30}
            };
        }else{
            me.fontStyle={
                "table_name":{"fontSize":25,"lineHeight":25},
                "table_sb":{"fontSize":25,"lineHeight":25},
                "table_code":{"fontSize":25,"lineHeight":25},
                "nick":{"fontSize":25,"lineHeight":25},
                "chips":{"fontSize":25,"lineHeight":25},
                "chip":{"fontSize":25,"lineHeight":25},
                "pot":{"fontSize":25,"lineHeight":25}
            };
        }
        cc.loader.loadRes("game_cards",cc.SpriteAtlas,function(err,atlas){
            me.GameCards = atlas;
        });
        //加载游戏音频
        if(this.open_mute == 0){
            cc.loader.loadRes("audio/audio_chipsToTable", function (err, assets) {
                me.audio_chipsToTable = assets;
            });
            cc.loader.loadRes("audio/audio_check", function (err, assets) {
                me.audio_check = assets;
            });
            cc.loader.loadRes("audio/audio_fold", function (err, assets) {
                me.audio_fold = assets;
            });
            cc.loader.loadRes("audio/audio_distributeCard", function (err, assets) {
                me.audio_distributeCard = assets;
            });
        }

        var table_data = this.hand_data;
        table_data['table_name']=table_data['table_name']?table_data['table_name']:"";
        table_data['table_code']=table_data['table_code']?table_data['table_code']:"";
        var node_table_bg = cc.find("Canvas/table_bg");

        //异步加载头像,不能放在循环内
        var load_avatar = function(url,sprite_user){
            cc.loader.load(url,function(err,tex){
                var frame  = new cc.SpriteFrame(tex,cc.Rect(0, 0, 87, 123));
                sprite_user.spriteFrame = frame;
            });
        };
        cc.loader.loadRes("GameMain_6p",cc.SpriteAtlas,function(err,atlas){
            me.GameMain = atlas;
            var sb_data = null;//小盲的数据
            var bb_data = null;//大盲的数据
            //坐下
            for(var k in table_data['players']){
                var v = table_data['players'][k];
                var seat_node = node_table_bg.getChildByName("seat_"+v['chair_id']);
                var node_size = seat_node.getContentSize();//获取node的尺寸
                //名字
                var label_nick = seat_node.getChildByName("nick").getComponent(cc.Label);
                label_nick.string = me.getLength(v['nick'])>10?me.cutStr(v['nick'],7):v['nick'];
                label_nick.fontSize = me.fontStyle['nick']['fontSize'];
                label_nick.lineHeight = me.fontStyle['nick']['lineHeight'];

                //带入的筹码
                var label_chips = seat_node.getChildByName("chips").getComponent(cc.Label);
                label_chips.string = v['remain_chip']+v['table_chip'];
                label_chips.fontSize = me.fontStyle['chips']['fontSize'];
                label_chips.lineHeight = me.fontStyle['chips']['lineHeight'];
                //头像
                var node_mark = new cc.Node();
                node_mark.name='avatar';
                var mask_user = node_mark.addComponent(cc.Mask);
                mask_user.type = cc.Mask.ELLIPSE;
                node_mark.width = node_size['width']-15;
                node_mark.height = node_size['height']-15;
                node_mark.setPosition(0.5,0.5);
                node_mark.parent =  seat_node;
                
                var node_user = new cc.Node();
                var sprite_user = node_user.addComponent(cc.Sprite);
                node_user.parent = node_mark;
                if(v['avatar'] != null && v['avatar']!=""){
                    node_user.scale = (node_size['width']-15)/120;
                    load_avatar(v['avatar'],sprite_user);
                }else{
                    sprite_user.spriteFrame =  me.GameMain.getSpriteFrame("game_seat_valid");
                }

                seat_node.getChildByName("game_tip").setLocalZOrder(2);

                if(v['chair_id'] == table_data['start']['sb_chair']){
                    sb_data = v;
                }else if(v['chair_id'] == table_data['start']['bb_chair']){
                    bb_data = v;
                }
            }
            //牌局名字
            var label = node_table_bg.getChildByName("table_name").getComponent(cc.Label);
            label.string = "§ " + table_data['table_name'] + " §";
            label.fontSize = me.fontStyle['table_name']['fontSize'];
            label.lineHeight = me.fontStyle['table_name']['lineHeight'];

            //牌局号,如果是快速牌局显示牌局号,如果是俱乐部牌局,显示盲注
            if(parseInt(table_data['table_code'])!=0){
                var label_table_code = node_table_bg.getChildByName("table_code").getComponent(cc.Label);
                label_table_code.string = table_data['table_code'];
                label_table_code.fontSize = me.fontStyle['table_code']['fontSize'];
                label_table_code.lineHeight = me.fontStyle['table_code']['lineHeight'];
            }
            //盲注
            var label_table_sb = node_table_bg.getChildByName("table_sb").getComponent(cc.Label);
            label_table_sb.string = me.ConvertLang("blind")+" "+sb_data['table_chip']+"/"+bb_data['table_chip'];
            label_table_sb.fontSize = me.fontStyle['table_sb']['fontSize'];
            label_table_sb.lineHeight = me.fontStyle['table_sb']['lineHeight'];

            //删除加载图片
            var splash = document.getElementById('splash');
            if(undefined!=splash){
                splash.style.display = 'none';
            }
        });

    },
    //监听座位点击事件
    onSeat:function(){
        cc.log("onSeat init");
        var node_table_bg = cc.find("Canvas/table_bg");
        for(var i=0;i<9;i++){
            //var v = table_data['players'][k];
            var seat_node = node_table_bg.getChildByName("seat_"+i);
            seat_node.on("mouseup",function(event){
                this.seatClick (event);
            },this);
        }
    },
    //点击座位坐下 未完成
    seatClick:function(e){
        var me = this;

        var rName = cc.random0To1();
        var v={};
        v["nick"]   =   "波霸"+rName;
        v["remain_chip"]    =   "1000";
        v["table_chip"]     =   "10";
        //v["avatar"]         =   "/1_5734451068aaa.jpg";
        v["avatar"]         =   "";


        if(me.ws){
            //请求后台坐下
            if (me.ws.readyState === WebSocket.OPEN) {
                cc.log("send message to server3000");
                me.ws.send(JSON.stringify({C2S_Join: {
                                    UserId: '123456',
                                    UserName:v["nick"],
                                    TableId:'22222',
                                    UserToken:'33333',
                                }}));
                me.ws.send(JSON.stringify({C2S_Login: {
                    UserAccount: "tian",
                    UserName: "nick",
                    UserPassword: "123456",
                }}));
            }
            else {
                this.wsstart();
                console.log("WebSocket instance wasn't ready...");
            }
        };
        var seatName = e.currentTarget._name;


        var node_table_bg = cc.find("Canvas/table_bg");
        var seat_node = node_table_bg.getChildByName(seatName);
        var node_size = seat_node.getContentSize();//获取node的尺寸
        //名字
        var label_nick = seat_node.getChildByName("nick").getComponent(cc.Label);
        label_nick.string = me.getLength(v['nick'])>10?me.cutStr(v['nick'],7):v['nick'];
        label_nick.fontSize = 30;
        label_nick.lineHeight = 30;

        //带入的筹码
        var label_chips = seat_node.getChildByName("chips").getComponent(cc.Label);
        label_chips.string = v['remain_chip']+v['table_chip'];
        label_chips.fontSize = 30;
        label_chips.lineHeight = 30;

        //头像
        var node_mark = new cc.Node();
        node_mark.name='avatar';
        var mask_user = node_mark.addComponent(cc.Mask);
        mask_user.type = cc.Mask.ELLIPSE;
        node_mark.width = node_size['width']-15;
        node_mark.height = node_size['height']-15;
        node_mark.setPosition(0.5,0.5);
        node_mark.parent =  seat_node;

        var node_user = new cc.Node();
        var sprite_user = node_user.addComponent(cc.Sprite);
        node_user.parent = node_mark;
        if(v['avatar'] != null && v['avatar']!=""){
            //异步加载头像,不能放在循环内
            var load_avatar = function(url,sprite_user){
                cc.loader.load(url,function(err,tex){
                    var frame  = new cc.SpriteFrame(tex,cc.Rect(0, 0, 87, 123));
                    sprite_user.spriteFrame = frame;
                });
            };
            node_user.scale = (node_size['width']-15)/120;
            load_avatar(v['avatar'],sprite_user);
        }else{
            if(this.GameMain == null){
                cc.loader.loadRes("GameMain_6p",cc.SpriteAtlas,function(err,atlas){
                    this.GameMain = atlas;
                    sprite_user.spriteFrame =  this.GameMain.getSpriteFrame("game_seat_valid");
                });
            }else{
                sprite_user.spriteFrame =  this.GameMain.getSpriteFrame("game_seat_valid");
            }
        }
        seat_node.getChildByName("game_tip").setLocalZOrder(2);
    },
    //js获取当前url的参数
    getQueryString:function(name){
        if(undefined==window.location){
            return null;
        };
        var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
        var r = window.location.search.substr(1).match(reg);
        if(r!=null){
            return  unescape(r[2]);
        }else{
            return null;
        }
    },
    //获取字符串长度
    getLength:function (str) {
        ///<summary>获得字符串实际长度,中文2,英文1</summary>
        ///<param name="str">要获得长度的字符串</param>
        var realLength = 0, len = str.length, charCode = -1;
        for (var i = 0; i < len; i++) {
            charCode = str.charCodeAt(i);
            if (charCode >= 0 && charCode <= 128) realLength += 1;
            else realLength += 2;
        }
        return realLength;
    },
    //s截取字符串,中英文都能用@param str:需要截取的字符串@param len: 需要截取的长度
    cutStr:function (str, len) {
        var str_length = 0;
        var str_len = str.length;
        var str_cut = new String();
        for (var i = 0; i < str_len; i++) {
            var a = str.charAt(i);
            str_length++;
            if (escape(a).length > 4) {
                //中文字符的长度经编码之后大于4
                str_length++;
            }
            str_cut = str_cut.concat(a);
            if (str_length >= len) {
                str_cut = str_cut.concat("...");
                return str_cut;
            }
        }
        //如果给定字符串小于指定长度,则返回源字符串;
        if (str_length < len) {
            return str;
        }
    },

    //开启静音模式status:0-关闭1-开启
    set_mute:function(){
        var sprite_url = "";
        if(this.open_mute == 1){
            this.open_mute = 0;
            sprite_url='open_audio';
        }else{
            this.open_mute = 1;
            sprite_url='close_audio';
        }
        var fast_forward =cc.find("Canvas/sound");
        var sprite = fast_forward.getComponent(cc.Sprite);
        sprite.spriteFrame = this.GameMain.getSpriteFrame(sprite_url);
    },
    //判断是否是手机访问
    isMobile:function(){
        var ua = navigator.userAgent;
        var ipad = ua.match(/(iPad).*OS\s([\d_]+)/),
        isIphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/),
        isAndroid = ua.match(/(Android)\s+([\d.]+)/),
        isMobile = isIphone || isAndroid;
        var bool = isMobile === null?0:1;
        return bool;
    },
    //语言翻译
    ConvertLang:function(key){
        var config_lang={};
        config_lang['zh-cn']={"pot":"底池","blind":"盲注","mute":"静音","no_think":"忽略思考时间"};
        config_lang['zh-tw']={"pot":"底池","blind":"盲注","mute":"靜音","no_think":"忽略思考時間"};
        config_lang['thai-th']={"pot":"กองกลาง","blind":"Stakes","mute":"ปิดเสียง","no_think":"fast-forwward"};
        config_lang['en-us']={"pot":"Pot","blind":"Stakes","mute":"Mute","no_think":"fast-forwward"};
        config_lang['ko']={"pot":"바닥풀 ","blind":"맹주","mute":"정음 ","no_think":"忽略思考时间"};
        return config_lang[this.Lang][key];
    },
    //多语言替换座位
    //ReplaceSeat:function(){
    //    if(this.Lang == 'thai-th'){
    //        for(var i=0;i<9;i++){
    //            cc.find("Canvas/table_bg/seat_"+i).getComponent(cc.Sprite).setVisible(false);
    //        }
    //        cc.loader.loadRes("GameMain_th_6p",cc.SpriteAtlas,function(err,atlas){
    //            var game_seat_empty = atlas.getSpriteFrame("game_seat_empty");
    //            for(var i=0;i<9;i++){
    //                var sprite = cc.find("Canvas/table_bg/seat_"+i).getComponent(cc.Sprite)
    //                sprite.spriteFrame = game_seat_empty;
    //                sprite.setVisible(true);
    //            }
    //        });
    //    }
    //}
});

================================================
FILE: bin/client/assets/Script/Common.js.meta
================================================
{
  "ver": "1.0.2",
  "uuid": "b91d4d1c-d6e8-4abe-8ab4-226f9e1dce57",
  "isPlugin": false,
  "subMetas": {}
}

================================================
FILE: bin/client/assets/Script/CountDown.js
================================================
var Common = require('Common');
cc.Class({
    extends: Common,
    properties: {
        //倒计时
        countdown_execution_interval:0.1,//执行间隔
        countdown_repeat_num:0,//重复了多少次
        countdown_long_time:0,//倒计时时长,单位:秒
        countdown_cycle_time:15,//倒计时一圈的时间,单位:秒
        countdown_node:{
            default:null,
            type:cc.Node
        },//倒计时,遮罩层所在的node
        countdown_task:null,//倒计时执行任务,是一个function,方便销毁定时器
        countdown_over_task:null,//倒计时结束,是一个function,执行完毕,最后会执行这个
        //动作列表
        actions:null,
        //正在进行的动作
        i:0,
        //该牌局的是数据
        hand_data:null
    },
    //添加倒计时的进度条
    add_countdown:function(seat_number,long_time){
        var me = this;
        var action_num = this.i-1;//当前第几个动作
        if(parseInt(long_time) == 0 ){
            this.scheduleOnce(function(){
                me.scheduleOnce(this.countdown_over_task,0);
            },1);
            var action_type = this.open_fixedThinkTime == 1?1:0;//动作状态 0-正常1-快进
            //判断是否有正在进行的其他动作
            this.scheduleOnce(function(){
                this.start_others(action_type,0,action_num);
            },0.5);
            return false;
        }else{
            //判断是否开启固定思考模式
            if(me.open_fixedThinkTime == 1){
                long_time = me.fixedThinkTime;
            }
        }
        var node_table_bg = cc.find("Canvas/table_bg");
        //初始化
        this.countdown_repeat_num = 0;
        this.countdown_long_time = 0;
        this.countdown_cycle_time = 15;
        if(this.countdown_task!= null){
            this.unschedule(this.countdown_task);//删除定时任务
            this.countdown_node.destroy();//删除该节点
        }
        var seat = node_table_bg.getChildByName("seat_"+seat_number);//获取该作为的节点

        //倒计时遮罩层
        var node = new cc.Node();
        node.scale = 0.85;
        //node.setPosition(seat_position);
        //node.parent = node_table_bg;
        node.parent = seat;
        node.setPosition(0.5,0.5);
        node.setLocalZOrder(3);
        var sprite = node.addComponent(cc.Sprite);
        sprite.type = cc.Sprite.Type.FILLED;
        sprite.fillType = cc.Sprite.FillType.RADIAL;
        sprite.fillCenter = new cc.Vec2(0.5,0.5);
        sprite.fillStart = 0.25;
        sprite.fillRange = 0;
        var frame = this.GameMain.getSpriteFrame("game_progress_frame");
        sprite.spriteFrame = frame;
        //倒计时文字
        var node2 = new cc.Node();
        node2.name = "time";
        var label = node2.addComponent(cc.Label);
        label.string = this.countdown_cycle_time + "s";
        label.fontSize = 30;//设置字体大小
        node2.parent = node;
        //node2.color = new cc.Color(0, 0, 0);//设置字体颜色
        node2.setPosition(0,-10);

        this.countdown_node = node;
        this.countdown_long_time = long_time;//执行时长
        this.countdown_task = function(){
            this.start_countdown(1,action_num);
        };
        this.schedule(this.countdown_task,this.countdown_execution_interval);
    },
    //倒计时开始 direction(方向):1-顺时针2-逆时针
    start_countdown:function(direction,action_num){
        this.countdown_repeat_num++;//已经执行了多少次
        var full_cycle = 1;//一个整圈
        var speed = full_cycle / this.countdown_cycle_time;//速度

        var sprite = this.countdown_node.getComponent(cc.Sprite);
        var fillRange = sprite.fillRange;
        var cost_time = this.countdown_execution_interval * this.countdown_repeat_num;//耗时
        if(parseInt(cost_time) == cost_time ){
            var time_node = this.countdown_node.getChildByName("time");
            var time_label = time_node.getComponent(cc.Label);
            time_label.string =  (parseInt(time_label.string) - 1)+"s";
        }

        if(direction == 2){
            //逆时针
            fillRange = cost_time < this.countdown_long_time ? fillRange += (this.countdown_execution_interval * speed):0;
        }else{
            //顺时针
            fillRange = cost_time < this.countdown_long_time ? fillRange -= (this.countdown_execution_interval * speed):0;
        }
        sprite.fillRange = fillRange;
        //如果开启固定思考时间的设置,并且这个过程的执行时间大于思考时间时,直接结束倒计时
        var action_type = 0;//动作状态 0-正常1-快进
        if(this.open_fixedThinkTime == 1 && this.countdown_long_time >= this.fixedThinkTime){
            fillRange = 0;
            action_type = 1;
        }
        //判断是否有正在进行的其他动作
        this.start_others(action_type,cost_time,action_num);

        if(fillRange == 0){
            this.unschedule(this.countdown_task);//删除定时任务
            this.countdown_node.destroy();//删除该节点
            this.countdown_task = null;
            //如果执行完毕,判断是否有下一步动作,如果有,执行下一步
            if(this.countdown_over_task != null){
                this.scheduleOnce(this.countdown_over_task,0);
            }
        }
    },
    //延长时间
    delay_countdown:function(seat_number,duration){
        var remain_time = parseInt(this.countdown_cycle_time - duration);//剩余的时间
        var total_time = 15 + remain_time;
        this.countdown_cycle_time = total_time; //一圈的总耗时
        this.countdown_repeat_num = 0; //已经执行了多少
        if(this.countdown_task!= null){
            this.unschedule(this.countdown_task);//删除定时任务
            this.countdown_node.destroy();//删除该节点
        }
        //延时
        var node_table_bg = cc.find("Canvas/table_bg");
        var seat = node_table_bg.getChildByName("seat_"+seat_number);//获取该作为的节点
        //倒计时遮罩层
        var node = new cc.Node();
        node.scale = 0.85;
        node.parent = seat;
        node.setPosition(0.5,0.5);
        node.setLocalZOrder(3);
        var sprite = node.addComponent(cc.Sprite);
        sprite.type = cc.Sprite.Type.FILLED;
        sprite.fillType = cc.Sprite.FillType.RADIAL;
        sprite.fillCenter = new cc.Vec2(0.5,0.5);
        sprite.fillStart = 0.25;
        sprite.fillRange = 0;
        var frame = this.GameMain.getSpriteFrame("game_progress_frame");
        sprite.spriteFrame = frame;
        //倒计时文字
        var node2 = new cc.Node();
        node2.name = "time";
        var label = node2.addComponent(cc.Label);
        label.string = this.countdown_cycle_time + "s";
        label.fontSize = 30;//设置字体大小
        node2.parent = node;
        node2.setPosition(0,-10);

        this.countdown_node = node;
        this.countdown_task = function(){
            this.start_countdown(1);
        };
        this.schedule(this.countdown_task,this.countdown_execution_interval);
        var me = this;
        this.countdown_over_task = function(){
            me.actionend();
        };
    },
    //开始执行其他动作:type:0-正常1-快进 cost:已经执行了多少秒,action_num是之前的this.i-1
    start_others:function(type,cost_time,action_num){
        //判断等待动作时,是否有其他人进行的动作
        var current_action = this.actions[action_num];
        if(current_action!=undefined && current_action['others']!=undefined && current_action['others']!=null){
            for(var key in current_action['others']){
                var other_key = current_action['others'][key];
                var duration = current_action['duration']-(current_action['timestamp']-this.hand_data['others'][other_key]['timestamp']);
                if(duration<0){
                    cc.log("时间间隔为负,请检查数据");
                }
                if(type == 0 && parseInt(cost_time) == cost_time && cost_time == duration){
                    //正常流程,待到整点时,进行判断是否有其他的动作
                    this.other_quit(this.hand_data['others'][other_key]['chair_id']);
                }
                //duration<cost_time表示如果已经执行过了,不再执行
                if(type == 1 && duration>=cost_time){
                    //快进时,判断等待动作时,是否有其他人进行的动作(未执行过的)
                    this.other_quit(this.hand_data['others'][other_key]['chair_id']);
                }
            }
        }
    },
    //ajax 请求
    reqstart:function(){
        var hand_id = this.getQueryString("hand_id");
        var url="";
        //hand_id = 32634;
        //hand_id = 32928;
        //hand_id = 33305;
        //hand_id = 33308;
        //hand_id=33310;
        //hand_id=33509;
        if(hand_id != null){
            var host_name = window.location.host;
            var reg = /^localhost:/;
            if(reg.test(host_name)==true){
                url = "http://qa-api.kkpoker.com:8090/Html/get_mongo_data/hand_id/"+hand_id;
            }else{
                url = "http://" + host_name + "/Html/get_mongo_data/hand_id/"+hand_id;
            }
        }else{
            //测试数据
            url="http://172.16.0.210:2016/info.php";
         }


        var xhr = new XMLHttpRequest();
        xhr.open("GET", url, true);
        xhr.send();
        var me=this;
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    var response = eval('(' + xhr.responseText + ')');
                    response = me.sorting_data(response);
                    var len = response["actions"].length;
                    for(var i=0;i<len;i++){
                        if(i==0){
                            response["actions"][i]["duration"]=response["actions"][i]["timestamp"]-response["start"]["timestamp"];
                        }else{
                            if(response["actions"][i-1]['CMD'] == 19){
                                response["actions"][i]["duration"] = 0;
                            }else{
                                response["actions"][i]["duration"]=response["actions"][i]["timestamp"]-response["actions"][i-1]["timestamp"];
                            }
                        }
                    }
                    //初始化动作属性
                    me.actions = response["actions"];
                    me.i=0;
                    me.hand_data = response;
                    cc.log(JSON.stringify(response));
                    me.sit_down();//坐下
                } else {

                }
            }
        }
    },

    //组装action和other
    sorting_data:function(hand_data){
        //过滤掉无用的others动作
        if(hand_data['others']!=undefined){
            var others_data=[];
            for(var key in hand_data['others']){
                if(hand_data['others'][key]['CMD'] == 5 ){
                    hand_data['others'][key]['type']='others';
                    others_data.push(hand_data['others'][key]);
                }
            }
            hand_data['others']=others_data;
        }
        var action_data=[];
        if(hand_data['actions']!=undefined){
            action_data = action_data.concat(hand_data['actions']);
        }
        if(hand_data['others']!=undefined){
            action_data = action_data.concat(hand_data['others']);
        }
        var action_data_len = action_data.length;
        //按时间排序
        for(var i=0;i<action_data_len-1;i++){
           for(var j=i+1;j<action_data_len;j++){
               if(parseInt(action_data[j]['timestamp'])<parseInt(action_data[i]['timestamp'])){
                    var a = action_data[i];
                    action_data[i]=action_data[j];
                    action_data[j]=a;
               }
           }
        }
        //找到同时进行的工作
        var action_result=[];//动作列表
        var other_result=[];//同时进行的动作
        for(var i=0;i<action_data_len;i++){
            var other_is_sum_up=0;//是否需要归纳0-否1-是
            var data = null;//命令数据
            if(action_data[i]['type'] == "others"){
                data={"CMD":9999,"chair_id":action_data[i]['current_action_chair'],"chip":0,"pot":0,"timestamp":action_data[i]['timestamp']}
                other_result.push(action_data[i]);//把同时进行的动作存起来
                other_is_sum_up=1;
            }else{
                data = action_data[i];
            }
            var action_result_len = action_result.length;
            if(action_result_len>0 && data['CMD']==9999 && data['chair_id'] == action_result[action_result_len-1]['chair_id']){
                action_result[action_result_len-1]['timestamp']=data['timestamp'];
                data = null;
            }
            //有可能同时做的动作,其他人都没正在做动作
            if(data != null && data['chair_id']!=0){
                action_result.push(data);
            }
            if(other_is_sum_up == 1){
                var sort_num = action_result.length - 1;
                //把other动作绑定到action动作当中
                if(action_result[sort_num]['others']==undefined){
                    action_result[sort_num]['others']=[other_result.length-1];
                }else{
                    action_result[sort_num]['others'].push(other_result.length-1);
                }
            }
        }
        //再次归纳action动作
        var action_result2 = [];
        for(var i=0;i<action_result.length;i++){
            var is_in=1;//是否放入action_result2
            if(action_result[i+1]!=undefined && action_result[i+1]!=null){
                //如果该动作与下一个动作都是9999,且chair_id相等的话,归纳到一起,或者下一个正在进行的是99的话,修改下一个的chair_id为上一个
                if(action_result[i]['CMD']==9999 && (action_result[i]['chair_id'] == action_result[i+1]['chair_id'] ||  action_result[i+1]['chair_id']==99)){
                    action_result[i+1]['chair_id']=action_result[i+1]['chair_id']==99?action_result[i]['chair_id']:action_result[i+1]['chair_id'];
                    action_result[i+1]['others']=action_result[i+1]['others']?action_result[i+1]['others']:[];
                    action_result[i+1]['others']=action_result[i]['others'].concat(action_result[i+1]['others']);
                    is_in=0;
                }
            }else if(action_result[i]['CMD']==9999 && action_result[i]['chair_id']==99 & i>0){
                if(action_result2.length>0){
                    action_result[i]['chair_id'] = action_result2[action_result2.length-1]['current_action_chair'];
                    //修正:如果发现chair_id=99,无效的操作人,找到这个命令的其他操作的人,座位为当前这个人
                    if(action_result[i]['chair_id']==99 && action_result[i]['others']!=undefined){
                        action_result[i]['chair_id'] = hand_data['others'][action_result[i]['others'][0]]['chair_id'];
                    }
                }
            }else if(action_result[i]['CMD']==9999 && action_result[i]['chair_id']==99 & action_result.length == 1){
                //修正:当只有一个9999的动作时,当时正在进行的动作是小盲在思考
                action_result[i]['chair_id'] = hand_data['start']['sb_chair'];
            }

            if(is_in==1){
                action_result2.push(action_result[i]);
            }
        }
        hand_data['actions']=action_result2;
        hand_data['others']=other_result;
        return hand_data;
    }
});


================================================
FILE: bin/client/assets/Script/CountDown.js.meta
================================================
{
  "ver": "1.0.2",
  "uuid": "ac50a2dc-5c7b-450e-8387-93e1500ca396",
  "isPlugin": false,
  "subMetas": {}
}

================================================
FILE: bin/client/assets/Script/Encoding.js
================================================
// This is free and unencumbered software released into the public domain.
// See LICENSE.md for more information.

// If we're in node require encoding-indexes and attach it to the global.
/**
 * @fileoverview Global |this| required for resolving indexes in node.
 * @suppress {globalThis}
 */
if (typeof module !== "undefined" && module.exports) {
    this["encoding-indexes"] =
        require("./encoding-indexes.js")["encoding-indexes"];
}

(function(global) {
    'use strict';

    //
    // Utilities
    //

    /**
     * @param {number} a The number to test.
     * @param {number} min The minimum value in the range, inclusive.
     * @param {number} max The maximum value in the range, inclusive.
     * @return {boolean} True if a >= min and a <= max.
     */
    function inRange(a, min, max) {
        return min <= a && a <= max;
    }

    /**
     * @param {number} n The numerator.
     * @param {number} d The denominator.
     * @return {number} The result of the integer division of n by d.
     */
    function div(n, d) {
        return Math.floor(n / d);
    }

    /**
     * @param {*} o
     * @return {Object}
     */
    function ToDictionary(o) {
        if (o === undefined) return {};
        if (o === Object(o)) return o;
        throw TypeError('Could not convert argument to dictionary');
    }

    /**
     * @param {string} string Input string of UTF-16 code units.
     * @return {!Array.<number>} Code points.
     */
    function stringToCodePoints(string) {
        // https://heycam.github.io/webidl/#dfn-obtain-unicode

        // 1. Let S be the DOMString value.
        var s = String(string);

        // 2. Let n be the length of S.
        var n = s.length;

        // 3. Initialize i to 0.
        var i = 0;

        // 4. Initialize U to be an empty sequence of Unicode characters.
        var u = [];

        // 5. While i < n:
        while (i < n) {

            // 1. Let c be the code unit in S at index i.
            var c = s.charCodeAt(i);

            // 2. Depending on the value of c:

            // c < 0xD800 or c > 0xDFFF
            if (c < 0xD800 || c > 0xDFFF) {
                // Append to U the Unicode character with code point c.
                u.push(c);
            }

            // 0xDC00 ≤ c ≤ 0xDFFF
            else if (0xDC00 <= c && c <= 0xDFFF) {
                // Append to U a U+FFFD REPLACEMENT CHARACTER.
                u.push(0xFFFD);
            }

            // 0xD800 ≤ c ≤ 0xDBFF
            else if (0xD800 <= c && c <= 0xDBFF) {
                // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT
                // CHARACTER.
                if (i === n - 1) {
                    u.push(0xFFFD);
                }
                // 2. Otherwise, i < n−1:
                else {
                    // 1. Let d be the code unit in S at index i+1.
                    var d = string.charCodeAt(i + 1);

                    // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then:
                    if (0xDC00 <= d && d <= 0xDFFF) {
                        // 1. Let a be c & 0x3FF.
                        var a = c & 0x3FF;

                        // 2. Let b be d & 0x3FF.
                        var b = d & 0x3FF;

                        // 3. Append to U the Unicode character with code point
                        // 2^16+2^10*a+b.
                        u.push(0x10000 + (a << 10) + b);

                        // 4. Set i to i+1.
                        i += 1;
                    }

                    // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a
                    // U+FFFD REPLACEMENT CHARACTER.
                    else  {
                        u.push(0xFFFD);
                    }
                }
            }

            // 3. Set i to i+1.
            i += 1;
        }

        // 6. Return U.
        return u;
    }

    /**
     * @param {!Array.<number>} code_points Array of code points.
     * @return {string} string String of UTF-16 code units.
     */
    function codePointsToString(code_points) {
        var s = '';
        for (var i = 0; i < code_points.length; ++i) {
            var cp = code_points[i];
            if (cp <= 0xFFFF) {
                s += String.fromCharCode(cp);
            } else {
                cp -= 0x10000;
                s += String.fromCharCode((cp >> 10) + 0xD800,
                    (cp & 0x3FF) + 0xDC00);
            }
        }
        return s;
    }


    //
    // Implementation of Encoding specification
    // https://encoding.spec.whatwg.org/
    //

    //
    // 3. Terminology
    //

    /**
     * End-of-stream is a special token that signifies no more tokens
     * are in the stream.
     * @const
     */ var end_of_stream = -1;

    /**
     * A stream represents an ordered sequence of tokens.
     *
     * @constructor
     * @param {!(Array.<number>|Uint8Array)} tokens Array of tokens that provide the
     * stream.
     */
    function Stream(tokens) {
        /** @type {!Array.<number>} */
        this.tokens = [].slice.call(tokens);
    }

    Stream.prototype = {
        /**
         * @return {boolean} True if end-of-stream has been hit.
         */
        endOfStream: function() {
            return !this.tokens.length;
        },

        /**
         * When a token is read from a stream, the first token in the
         * stream must be returned and subsequently removed, and
         * end-of-stream must be returned otherwise.
         *
         * @return {number} Get the next token from the stream, or
         * end_of_stream.
         */
        read: function() {
            if (!this.tokens.length)
                return end_of_stream;
            return this.tokens.shift();
        },

        /**
         * When one or more tokens are prepended to a stream, those tokens
         * must be inserted, in given order, before the first token in the
         * stream.
         *
         * @param {(number|!Array.<number>)} token The token(s) to prepend to the stream.
         */
        prepend: function(token) {
            if (Array.isArray(token)) {
                var tokens = /**@type {!Array.<number>}*/(token);
                while (tokens.length)
                    this.tokens.unshift(tokens.pop());
            } else {
                this.tokens.unshift(token);
            }
        },

        /**
         * When one or more tokens are pushed to a stream, those tokens
         * must be inserted, in given order, after the last token in the
         * stream.
         *
         * @param {(number|!Array.<number>)} token The tokens(s) to prepend to the stream.
         */
        push: function(token) {
            if (Array.isArray(token)) {
                var tokens = /**@type {!Array.<number>}*/(token);
                while (tokens.length)
                    this.tokens.push(tokens.shift());
            } else {
                this.tokens.push(token);
            }
        }
    };

    //
    // 4. Encodings
    //

    // 4.1 Encoders and decoders

    /** @const */
    var finished = -1;

    /**
     * @param {boolean} fatal If true, decoding errors raise an exception.
     * @param {number=} opt_code_point Override the standard fallback code point.
     * @return {number} The code point to insert on a decoding error.
     */
    function decoderError(fatal, opt_code_point) {
        if (fatal)
            throw TypeError('Decoder error');
        return opt_code_point || 0xFFFD;
    }

    /**
     * @param {number} code_point The code point that could not be encoded.
     * @return {number} Always throws, no value is actually returned.
     */
    function encoderError(code_point) {
        throw TypeError('The code point ' + code_point + ' could not be encoded.');
    }

    /** @interface */
    function Decoder() {}
    Decoder.prototype = {
        /**
         * @param {Stream} stream The stream of bytes being decoded.
         * @param {number} bite The next byte read from the stream.
         * @return {?(number|!Array.<number>)} The next code point(s)
         *     decoded, or null if not enough data exists in the input
         *     stream to decode a complete code point, or |finished|.
         */
        handler: function(stream, bite) {}
    };

    /** @interface */
    function Encoder() {}
    Encoder.prototype = {
        /**
         * @param {Stream} stream The stream of code points being encoded.
         * @param {number} code_point Next code point read from the stream.
         * @return {(number|!Array.<number>)} Byte(s) to emit, or |finished|.
         */
        handler: function(stream, code_point) {}
    };

    // 4.2 Names and labels

    // TODO: Define @typedef for Encoding: {name:string,labels:Array.<string>}
    // https://github.com/google/closure-compiler/issues/247

    /**
     * @param {string} label The encoding label.
     * @return {?{name:string,labels:Array.<string>}}
     */
    function getEncoding(label) {
        // 1. Remove any leading and trailing ASCII whitespace from label.
        label = String(label).trim().toLowerCase();

        // 2. If label is an ASCII case-insensitive match for any of the
        // labels listed in the table below, return the corresponding
        // encoding, and failure otherwise.
        if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) {
            return label_to_encoding[label];
        }
        return null;
    }

    /**
     * Encodings table: https://encoding.spec.whatwg.org/encodings.json
     * @const
     * @type {!Array.<{
   *          heading: string,
   *          encodings: Array.<{name:string,labels:Array.<string>}>
   *        }>}
     */
    var encodings = [
        {
            "encodings": [
                {
                    "labels": [
                        "unicode-1-1-utf-8",
                        "utf-8",
                        "utf8"
                    ],
                    "name": "utf-8"
                }
            ],
            "heading": "The Encoding"
        },
        {
            "encodings": [
                {
                    "labels": [
                        "866",
                        "cp866",
                        "csibm866",
                        "ibm866"
                    ],
                    "name": "ibm866"
                },
                {
                    "labels": [
                        "csisolatin2",
                        "iso-8859-2",
                        "iso-ir-101",
                        "iso8859-2",
                        "iso88592",
                        "iso_8859-2",
                        "iso_8859-2:1987",
                        "l2",
                        "latin2"
                    ],
                    "name": "iso-8859-2"
                },
                {
                    "labels": [
                        "csisolatin3",
                        "iso-8859-3",
                        "iso-ir-109",
                        "iso8859-3",
                        "iso88593",
                        "iso_8859-3",
                        "iso_8859-3:1988",
                        "l3",
                        "latin3"
                    ],
                    "name": "iso-8859-3"
                },
                {
                    "labels": [
                        "csisolatin4",
                        "iso-8859-4",
                        "iso-ir-110",
                        "iso8859-4",
                        "iso88594",
                        "iso_8859-4",
                        "iso_8859-4:1988",
                        "l4",
                        "latin4"
                    ],
                    "name": "iso-8859-4"
                },
                {
                    "labels": [
                        "csisolatincyrillic",
                        "cyrillic",
                        "iso-8859-5",
                        "iso-ir-144",
                        "iso8859-5",
                        "iso88595",
                        "iso_8859-5",
                        "iso_8859-5:1988"
                    ],
                    "name": "iso-8859-5"
                },
                {
                    "labels": [
                        "arabic",
                        "asmo-708",
                        "csiso88596e",
                        "csiso88596i",
                        "csisolatinarabic",
                        "ecma-114",
                        "iso-8859-6",
                        "iso-8859-6-e",
                        "iso-8859-6-i",
                        "iso-ir-127",
                        "iso8859-6",
                        "iso88596",
                        "iso_8859-6",
                        "iso_8859-6:1987"
                    ],
                    "name": "iso-8859-6"
                },
                {
                    "labels": [
                        "csisolatingreek",
                        "ecma-118",
                        "elot_928",
                        "greek",
                        "greek8",
                        "iso-8859-7",
                        "iso-ir-126",
                        "iso8859-7",
                        "iso88597",
                        "iso_8859-7",
                        "iso_8859-7:1987",
                        "sun_eu_greek"
                    ],
                    "name": "iso-8859-7"
                },
                {
                    "labels": [
                        "csiso88598e",
                        "csisolatinhebrew",
                        "hebrew",
                        "iso-8859-8",
                        "iso-8859-8-e",
                        "iso-ir-138",
                        "iso8859-8",
                        "iso88598",
                        "iso_8859-8",
                        "iso_8859-8:1988",
                        "visual"
                    ],
                    "name": "iso-8859-8"
                },
                {
                    "labels": [
                        "csiso88598i",
                        "iso-8859-8-i",
                        "logical"
                    ],
                    "name": "iso-8859-8-i"
                },
                {
                    "labels": [
                        "csisolatin6",
                        "iso-8859-10",
                        "iso-ir-157",
                        "iso8859-10",
                        "iso885910",
                        "l6",
                        "latin6"
                    ],
                    "name": "iso-8859-10"
                },
                {
                    "labels": [
                        "iso-8859-13",
                        "iso8859-13",
                        "iso885913"
                    ],
                    "name": "iso-8859-13"
                },
                {
                    "labels": [
                        "iso-8859-14",
                        "iso8859-14",
                        "iso885914"
                    ],
                    "name": "iso-8859-14"
                },
                {
                    "labels": [
                        "csisolatin9",
                        "iso-8859-15",
                        "iso8859-15",
                        "iso885915",
                        "iso_8859-15",
                        "l9"
                    ],
                    "name": "iso-8859-15"
                },
                {
                    "labels": [
                        "iso-8859-16"
                    ],
                    "name": "iso-8859-16"
                },
                {
                    "labels": [
                        "cskoi8r",
                        "koi",
                        "koi8",
                        "koi8-r",
                        "koi8_r"
                    ],
                    "name": "koi8-r"
                },
                {
                    "labels": [
                        "koi8-ru",
                        "koi8-u"
                    ],
                    "name": "koi8-u"
                },
                {
                    "labels": [
                        "csmacintosh",
                        "mac",
                        "macintosh",
                        "x-mac-roman"
                    ],
                    "name": "macintosh"
                },
                {
                    "labels": [
                        "dos-874",
                        "iso-8859-11",
                        "iso8859-11",
                        "iso885911",
                        "tis-620",
                        "windows-874"
                    ],
                    "name": "windows-874"
                },
                {
                    "labels": [
                        "cp1250",
                        "windows-1250",
                        "x-cp1250"
                    ],
                    "name": "windows-1250"
                },
                {
                    "labels": [
                        "cp1251",
                        "windows-1251",
                        "x-cp1251"
                    ],
                    "name": "windows-1251"
                },
                {
                    "labels": [
                        "ansi_x3.4-1968",
                        "ascii",
                        "cp1252",
                        "cp819",
                        "csisolatin1",
                        "ibm819",
                        "iso-8859-1",
                        "iso-ir-100",
                        "iso8859-1",
                        "iso88591",
                        "iso_8859-1",
                        "iso_8859-1:1987",
                        "l1",
                        "latin1",
                        "us-ascii",
                        "windows-1252",
                        "x-cp1252"
                    ],
                    "name": "windows-1252"
                },
                {
                    "labels": [
                        "cp1253",
                        "windows-1253",
                        "x-cp1253"
                    ],
                    "name": "windows-1253"
                },
                {
                    "labels": [
                        "cp1254",
                        "csisolatin5",
                        "iso-8859-9",
                        "iso-ir-148",
                        "iso8859-9",
                        "iso88599",
                        "iso_8859-9",
                        "iso_8859-9:1989",
                        "l5",
                        "latin5",
                        "windows-1254",
                        "x-cp1254"
                    ],
                    "name": "windows-1254"
                },
                {
                    "labels": [
                        "cp1255",
                        "windows-1255",
                        "x-cp1255"
                    ],
                    "name": "windows-1255"
                },
                {
                    "labels": [
                        "cp1256",
                        "windows-1256",
                        "x-cp1256"
                    ],
                    "name": "windows-1256"
                },
                {
                    "labels": [
                        "cp1257",
                        "windows-1257",
                        "x-cp1257"
                    ],
                    "name": "windows-1257"
                },
                {
                    "labels": [
                        "cp1258",
                        "windows-1258",
                        "x-cp1258"
                    ],
                    "name": "windows-1258"
                },
                {
                    "labels": [
                        "x-mac-cyrillic",
                        "x-mac-ukrainian"
                    ],
                    "name": "x-mac-cyrillic"
                }
            ],
            "heading": "Legacy single-byte encodings"
        },
        {
            "encodings": [
                {
                    "labels": [
                        "chinese",
                        "csgb2312",
                        "csiso58gb231280",
                        "gb2312",
                        "gb_2312",
                        "gb_2312-80",
                        "gbk",
                        "iso-ir-58",
                        "x-gbk"
                    ],
                    "name": "gbk"
                },
                {
                    "labels": [
                        "gb18030"
                    ],
                    "name": "gb18030"
                }
            ],
            "heading": "Legacy multi-byte Chinese (simplified) encodings"
        },
        {
            "encodings": [
                {
                    "labels": [
                        "big5",
                        "big5-hkscs",
                        "cn-big5",
                        "csbig5",
                        "x-x-big5"
                    ],
                    "name": "big5"
                }
            ],
            "heading": "Legacy multi-byte Chinese (traditional) encodings"
        },
        {
            "encodings": [
                {
                    "labels": [
                        "cseucpkdfmtjapanese",
                        "euc-jp",
                        "x-euc-jp"
                    ],
                    "name": "euc-jp"
                },
                {
                    "labels": [
                        "csiso2022jp",
                        "iso-2022-jp"
                    ],
                    "name": "iso-2022-jp"
                },
                {
                    "labels": [
                        "csshiftjis",
                        "ms932",
                        "ms_kanji",
                        "shift-jis",
                        "shift_jis",
                        "sjis",
                        "windows-31j",
                        "x-sjis"
                    ],
                    "name": "shift_jis"
                }
            ],
            "heading": "Legacy multi-byte Japanese encodings"
        },
        {
            "encodings": [
                {
                    "labels": [
                        "cseuckr",
                        "csksc56011987",
                        "euc-kr",
                        "iso-ir-149",
                        "korean",
                        "ks_c_5601-1987",
                        "ks_c_5601-1989",
                        "ksc5601",
                        "ksc_5601",
                        "windows-949"
                    ],
                    "name": "euc-kr"
                }
            ],
            "heading": "Legacy multi-byte Korean encodings"
        },
        {
            "encodings": [
                {
                    "labels": [
                        "csiso2022kr",
                        "hz-gb-2312",
                        "iso-2022-cn",
                        "iso-2022-cn-ext",
                        "iso-2022-kr"
                    ],
                    "name": "replacement"
                },
                {
                    "labels": [
                        "utf-16be"
                    ],
                    "name": "utf-16be"
                },
                {
                    "labels": [
                        "utf-16",
                        "utf-16le"
                    ],
                    "name": "utf-16le"
                },
                {
                    "labels": [
                        "x-user-defined"
                    ],
                    "name": "x-user-defined"
                }
            ],
            "heading": "Legacy miscellaneous encodings"
        }
    ];

    // Label to encoding registry.
    /** @type {Object.<string,{name:string,labels:Array.<string>}>} */
    var label_to_encoding = {};
    encodings.forEach(function(category) {
        category.encodings.forEach(function(encoding) {
            encoding.labels.forEach(function(label) {
                label_to_encoding[label] = encoding;
            });
        });
    });

    // Registry of of encoder/decoder factories, by encoding name.
    /** @type {Object.<string, function({fatal:boolean}): Encoder>} */
    var encoders = {};
    /** @type {Object.<string, function({fatal:boolean}): Decoder>} */
    var decoders = {};

    //
    // 5. Indexes
    //

    /**
     * @param {number} pointer The |pointer| to search for.
     * @param {(!Array.<?number>|undefined)} index The |index| to search within.
     * @return {?number} The code point corresponding to |pointer| in |index|,
     *     or null if |code point| is not in |index|.
     */
    function indexCodePointFor(pointer, index) {
        if (!index) return null;
        return index[pointer] || null;
    }

    /**
     * @param {number} code_point The |code point| to search for.
     * @param {!Array.<?number>} index The |index| to search within.
     * @return {?number} The first pointer corresponding to |code point| in
     *     |index|, or null if |code point| is not in |index|.
     */
    function indexPointerFor(code_point, index) {
        var pointer = index.indexOf(code_point);
        return pointer === -1 ? null : pointer;
    }

    /**
     * @param {string} name Name of the index.
     * @return {(!Array.<number>|!Array.<Array.<number>>)}
     *  */
    function index(name) {
        if (!('encoding-indexes' in global)) {
            throw Error("Indexes missing." +
                " Did you forget to include encoding-indexes.js?");
        }
        return global['encoding-indexes'][name];
    }

    /**
     * @param {number} pointer The |pointer| to search for in the gb18030 index.
     * @return {?number} The code point corresponding to |pointer| in |index|,
     *     or null if |code point| is not in the gb18030 index.
     */
    function indexGB18030RangesCodePointFor(pointer) {
        // 1. If pointer is greater than 39419 and less than 189000, or
        // pointer is greater than 1237575, return null.
        if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575))
            return null;

        // 2. Let offset be the last pointer in index gb18030 ranges that
        // is equal to or less than pointer and let code point offset be
        // its corresponding code point.
        var offset = 0;
        var code_point_offset = 0;
        var idx = index('gb18030');
        var i;
        for (i = 0; i < idx.length; ++i) {
            /** @type {!Array.<number>} */
            var entry = idx[i];
            if (entry[0] <= pointer) {
                offset = entry[0];
                code_point_offset = entry[1];
            } else {
                break;
            }
        }

        // 3. Return a code point whose value is code point offset +
        // pointer − offset.
        return code_point_offset + pointer - offset;
    }

    /**
     * @param {number} code_point The |code point| to locate in the gb18030 index.
     * @return {number} The first pointer corresponding to |code point| in the
     *     gb18030 index.
     */
    function indexGB18030RangesPointerFor(code_point) {
        // 1. Let offset be the last code point in index gb18030 ranges
        // that is equal to or less than code point and let pointer offset
        // be its corresponding pointer.
        var offset = 0;
        var pointer_offset = 0;
        var idx = index('gb18030');
        var i;
        for (i = 0; i < idx.length; ++i) {
            /** @type {!Array.<number>} */
            var entry = idx[i];
            if (entry[1] <= code_point) {
                offset = entry[1];
                pointer_offset = entry[0];
            } else {
                break;
            }
        }

        // 2. Return a pointer whose value is pointer offset + code point
        // − offset.
        return pointer_offset + code_point - offset;
    }

    /**
     * @param {number} code_point The |code_point| to search for in the shift_jis index.
     * @return {?number} The code point corresponding to |pointer| in |index|,
     *     or null if |code point| is not in the shift_jis index.
     */
    function indexShiftJISPointerFor(code_point) {
        // 1. Let index be index jis0208 excluding all pointers in the
        // range 8272 to 8835.
        var pointer = indexPointerFor(code_point, index('jis0208'));
        if (pointer === null || inRange(pointer, 8272, 8835))
            return null;

        // 2. Return the index pointer for code point in index.
        return pointer;
    }

    /**
     * @param {number} code_point The |code_point| to search for in the big5 index.
     * @return {?number} The code point corresponding to |pointer| in |index|,
     *     or null if |code point| is not in the big5 index.
     */
    function indexBig5PointerFor(code_point) {

        // 1. Let index be index big5.
        var index_ = index('big5');

        // 2. If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or
        // U+5345, return the last pointer corresponding to code point in
        // index.
        if (code_point === 0x2550 || code_point === 0x255E ||
            code_point === 0x2561 || code_point === 0x256A ||
            code_point === 0x5341 || code_point === 0x5345) {
            return index.lastIndexOf(code_point);
        }

        // 3. Return the index pointer for code point in index.
        return indexPointerFor(code_point, index_);
    }

    //
    // 7. API
    //

    /** @const */ var DEFAULT_ENCODING = 'utf-8';

    // 7.1 Interface TextDecoder

    /**
     * @constructor
     * @param {string=} encoding The label of the encoding;
     *     defaults to 'utf-8'.
     * @param {Object=} options
     */
    function TextDecoder(encoding, options) {
        if (!(this instanceof TextDecoder)) {
            return new TextDecoder(encoding, options);
        }
        encoding = encoding !== undefined ? String(encoding) : DEFAULT_ENCODING;
        options = ToDictionary(options);
        /** @private */
        this._encoding = getEncoding(encoding);
        if (this._encoding === null || this._encoding.name === 'replacement')
            throw RangeError('Unknown encoding: ' + encoding);

        if (!decoders[this._encoding.name]) {
            throw Error('Decoder not present.' +
                ' Did you forget to include encoding-indexes.js?');
        }

        /** @private @type {boolean} */
        this._streaming = false;
        /** @private @type {boolean} */
        this._BOMseen = false;
        /** @private @type {?Decoder} */
        this._decoder = null;
        /** @private @type {boolean} */
        this._fatal = Boolean(options['fatal']);
        /** @private @type {boolean} */
        this._ignoreBOM = Boolean(options['ignoreBOM']);

        if (Object.defineProperty) {
            Object.defineProperty(this, 'encoding', {value: this._encoding.name});
            Object.defineProperty(this, 'fatal', {value: this._fatal});
            Object.defineProperty(this, 'ignoreBOM', {value: this._ignoreBOM});
        } else {
            this.encoding = this._encoding.name;
            this.fatal = this._fatal;
            this.ignoreBOM = this._ignoreBOM;
        }

        return this;
    }

    TextDecoder.prototype = {
        /**
         * @param {ArrayBufferView=} input The buffer of bytes to decode.
         * @param {Object=} options
         * @return {string} The decoded string.
         */
        decode: function decode(input, options) {
            var bytes;
            if (typeof input === 'object' && input instanceof ArrayBuffer) {
                bytes = new Uint8Array(input);
            } else if (typeof input === 'object' && 'buffer' in input &&
                input.buffer instanceof ArrayBuffer) {
                bytes = new Uint8Array(input.buffer,
                    input.byteOffset,
                    input.byteLength);
            } else {
                bytes = new Uint8Array(0);
            }

            options = ToDictionary(options);

            if (!this._streaming) {
                this._decoder = decoders[this._encoding.name]({fatal: this._fatal});
                this._BOMseen = false;
            }
            this._streaming = Boolean(options['stream']);

            var input_stream = new Stream(bytes);

            var code_points = [];

            /** @type {?(number|!Array.<number>)} */
            var result;

            while (!input_stream.endOfStream()) {
                result = this._decoder.handler(input_stream, input_stream.read());
                if (result === finished)
                    break;
                if (result === null)
                    continue;
                if (Array.isArray(result))
                    code_points.push.apply(code_points, /**@type {!Array.<number>}*/(result));
                else
                    code_points.push(result);
            }
            if (!this._streaming) {
                do {
                    result = this._decoder.handler(input_stream, input_stream.read());
                    if (result === finished)
                        break;
                    if (result === null)
                        continue;
                    if (Array.isArray(result))
                        code_points.push.apply(code_points, /**@type {!Array.<number>}*/(result));
                    else
                        code_points.push(result);
                } while (!input_stream.endOfStream());
                this._decoder = null;
            }

            if (code_points.length) {
                // If encoding is one of utf-8, utf-16be, and utf-16le, and
                // ignore BOM flag and BOM seen flag are unset, run these
                // subsubsteps:
                if (['utf-8', 'utf-16le', 'utf-16be'].indexOf(this.encoding) !== -1 &&
                    !this._ignoreBOM && !this._BOMseen) {
                    // If token is U+FEFF, set BOM seen flag.
                    if (code_points[0] === 0xFEFF) {
                        this._BOMseen = true;
                        code_points.shift();
                    } else {
                        // Otherwise, if token is not end-of-stream, set BOM seen
                        // flag and append token to output.
                        this._BOMseen = true;
                    }
                }
            }

            return codePointsToString(code_points);
        }
    };

    // 7.2 Interface TextEncoder

    /**
     * @constructor
     * @param {string=} encoding The label of the encoding;
     *     defaults to 'utf-8'.
     * @param {Object=} options
     */
    function TextEncoder(encoding, options) {
        if (!(this instanceof TextEncoder))
            return new TextEncoder(encoding, options);
        encoding = encoding !== undefined ? String(encoding) : DEFAULT_ENCODING;
        options = ToDictionary(options);
        /** @private */
        this._encoding = getEncoding(encoding);
        if (this._encoding === null || this._encoding.name === 'replacement')
            throw RangeError('Unknown encoding: ' + encoding);

        var allowLegacyEncoding =
            Boolean(options['NONSTANDARD_allowLegacyEncoding']);
        var isLegacyEncoding = (this._encoding.name !== 'utf-8' &&
        this._encoding.name !== 'utf-16le' &&
        this._encoding.name !== 'utf-16be');
        if (this._encoding === null || (isLegacyEncoding && !allowLegacyEncoding))
            throw RangeError('Unknown encoding: ' + encoding);

        if (!encoders[this._encoding.name]) {
            throw Error('Encoder not present.' +
                ' Did you forget to include encoding-indexes.js?');
        }

        /** @private @type {boolean} */
        this._streaming = false;
        /** @private @type {?Encoder} */
        this._encoder = null;
        /** @private @type {{fatal: boolean}} */
        this._options = {fatal: Boolean(options['fatal'])};

        if (Object.defineProperty)
            Object.defineProperty(this, 'encoding', {value: this._encoding.name});
        else
            this.encoding = this._encoding.name;

        return this;
    }

    TextEncoder.prototype = {
        /**
         * @param {string=} opt_string The string to encode.
         * @param {Object=} options
         * @return {Uint8Array} Encoded bytes, as a Uint8Array.
         */
        encode: function encode(opt_string, options) {
            opt_string = opt_string ? String(opt_string) : '';
            options = ToDictionary(options);

            // NOTE: This option is nonstandard. None of the encodings
            // permitted for encoding (i.e. UTF-8, UTF-16) are stateful,
            // so streaming is not necessary.
            if (!this._streaming)
                this._encoder = encoders[this._encoding.name](this._options);
            this._streaming = Boolean(options['stream']);

            var bytes = [];
            var input_stream = new Stream(stringToCodePoints(opt_string));
            /** @type {?(number|!Array.<number>)} */
            var result;
            while (!input_stream.endOfStream()) {
                result = this._encoder.handler(input_stream, input_stream.read());
                if (result === finished)
                    break;
                if (Array.isArray(result))
                    bytes.push.apply(bytes, /**@type {!Array.<number>}*/(result));
                else
                    bytes.push(result);
            }
            if (!this._streaming) {
                while (true) {
                    result = this._encoder.handler(input_stream, input_stream.read());
                    if (result === finished)
                        break;
                    if (Array.isArray(result))
                        bytes.push.apply(bytes, /**@type {!Array.<number>}*/(result));
                    else
                        bytes.push(result);
                }
                this._encoder = null;
            }
            return new Uint8Array(bytes);
        }
    };


    //
    // 8. The encoding
    //

    // 8.1 utf-8

    /**
     * @constructor
     * @implements {Decoder}
     * @param {{fatal: boolean}} options
     */
    function UTF8Decoder(options) {
        var fatal = options.fatal;

        // utf-8's decoder's has an associated utf-8 code point, utf-8
        // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8
        // lower boundary (initially 0x80), and a utf-8 upper boundary
        // (initially 0xBF).
        var /** @type {number} */ utf8_code_point = 0,
            /** @type {number} */ utf8_bytes_seen = 0,
            /** @type {number} */ utf8_bytes_needed = 0,
            /** @type {number} */ utf8_lower_boundary = 0x80,
            /** @type {number} */ utf8_upper_boundary = 0xBF;

        /**
         * @param {Stream} stream The stream of bytes being decoded.
         * @param {number} bite The next byte read from the stream.
         * @return {?(number|!Array.<number>)} The next code point(s)
         *     decoded, or null if not enough data exists in the input
         *     stream to decode a complete code point.
         */
        this.handler = function(stream, bite) {
            // 1. If byte is end-of-stream and utf-8 bytes needed is not 0,
            // set utf-8 bytes needed to 0 and return error.
            if (bite === end_of_stream && utf8_bytes_needed !== 0) {
                utf8_bytes_needed = 0;
                return decoderError(fatal);
            }

            // 2. If byte is end-of-stream, return finished.
            if (bite === end_of_stream)
                return finished;

            // 3. If utf-8 bytes needed is 0, based on byte:
            if (utf8_bytes_needed === 0) {

                // 0x00 to 0x7F
                if (inRange(bite, 0x00, 0x7F)) {
                    // Return a code point whose value is byte.
                    return bite;
                }

                // 0xC2 to 0xDF
                if (inRange(bite, 0xC2, 0xDF)) {
                    // Set utf-8 bytes needed to 1 and utf-8 code point to byte
                    // − 0xC0.
                    utf8_bytes_needed = 1;
                    utf8_code_point = bite - 0xC0;
                }

                // 0xE0 to 0xEF
                else if (inRange(bite, 0xE0, 0xEF)) {
                    // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0.
                    if (bite === 0xE0)
                        utf8_lower_boundary = 0xA0;
                    // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F.
                    if (bite === 0xED)
                        utf8_upper_boundary = 0x9F;
                    // 3. Set utf-8 bytes needed to 2 and utf-8 code point to
                    // byte − 0xE0.
                    utf8_bytes_needed = 2;
                    utf8_code_point = bite - 0xE0;
                }

                // 0xF0 to 0xF4
                else if (inRange(bite, 0xF0, 0xF4)) {
                    // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90.
                    if (bite === 0xF0)
                        utf8_lower_boundary = 0x90;
                    // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F.
                    if (bite === 0xF4)
                        utf8_upper_boundary = 0x8F;
                    // 3. Set utf-8 bytes needed to 3 and utf-8 code point to
                    // byte − 0xF0.
                    utf8_bytes_needed = 3;
                    utf8_code_point = bite - 0xF0;
                }

                // Otherwise
                else {
                    // Return error.
                    return decoderError(fatal);
                }

                // Then (byte is in the range 0xC2 to 0xF4) set utf-8 code
                // point to utf-8 code point << (6 × utf-8 bytes needed) and
                // return continue.
                utf8_code_point = utf8_code_point << (6 * utf8_bytes_needed);
                return null;
            }

            // 4. If byte is not in the range utf-8 lower boundary to utf-8
            // upper boundary, run these substeps:
            if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) {

                // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8
                // bytes seen to 0, set utf-8 lower boundary to 0x80, and set
                // utf-8 upper boundary to 0xBF.
                utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0;
                utf8_lower_boundary = 0x80;
                utf8_upper_boundary = 0xBF;

                // 2. Prepend byte to stream.
                stream.prepend(bite);

                // 3. Return error.
                return decoderError(fatal);
            }

            // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary
            // to 0xBF.
            utf8_lower_boundary = 0x80;
            utf8_upper_boundary = 0xBF;

            // 6. Increase utf-8 bytes seen by one and set utf-8 code point
            // to utf-8 code point + (byte − 0x80) << (6 × (utf-8 bytes
            // needed − utf-8 bytes seen)).
            utf8_bytes_seen += 1;
            utf8_code_point += (bite - 0x80) << (6 * (utf8_bytes_needed - utf8_bytes_seen));

            // 7. If utf-8 bytes seen is not equal to utf-8 bytes needed,
            // continue.
            if (utf8_bytes_seen !== utf8_bytes_needed)
                return null;

            // 8. Let code point be utf-8 code point.
            var code_point = utf8_code_point;

            // 9. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes
            // seen to 0.
            utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0;

            // 10. Return a code point whose value is code point.
            return code_point;
        };
    }

    /**
     * @constructor
     * @implements {Encoder}
     * @param {{fatal: boolean}} options
     */
    function UTF8Encoder(options) {
        var fatal = options.fatal;
        /**
         * @param {Stream} stream Input stream.
         * @param {number} code_point Next code point read from the stream.
         * @return {(number|!Array.<number>)} Byte(s) to emit.
         */
        this.handler = function(stream, code_point) {
            // 1. If code point is end-of-stream, return finished.
            if (code_point === end_of_stream)
                return finished;

            // 2. If code point is in the range U+0000 to U+007F, return a
            // byte whose value is code point.
            if (inRange(code_point, 0x0000, 0x007f))
                return code_point;

            // 3. Set count and offset based on the range code point is in:
            var count, offset;
            // U+0080 to U+07FF:    1 and 0xC0
            if (inRange(code_point, 0x0080, 0x07FF)) {
                count = 1;
                offset = 0xC0;
            }
            // U+0800 to U+FFFF:    2 and 0xE0
            else if (inRange(code_point, 0x0800, 0xFFFF)) {
                count = 2;
                offset = 0xE0;
            }
            // U+10000 to U+10FFFF: 3 and 0xF0
            else if (inRange(code_point, 0x10000, 0x10FFFF)) {
                count = 3;
                offset = 0xF0;
            }

            // 4.Let bytes be a byte sequence whose first byte is (code
            // point >> (6 × count)) + offset.
            var bytes = [(code_point >> (6 * count)) + offset];

            // 5. Run these substeps while count is greater than 0:
            while (count > 0) {

                // 1. Set temp to code point >> (6 × (count − 1)).
                var temp = code_point >> (6 * (count - 1));

                // 2. Append to bytes 0x80 | (temp & 0x3F).
                bytes.push(0x80 | (temp & 0x3F));

                // 3. Decrease count by one.
                count -= 1;
            }

            // 6. Return bytes bytes, in order.
            return bytes;
        };
    }

    /** @param {{fatal: boolean}} options */
    encoders['utf-8'] = function(options) {
        return new UTF8Encoder(options);
    };
    /** @param {{fatal: boolean}} options */
    decoders['utf-8'] = function(options) {
        return new UTF8Decoder(options);
    };

    //
    // 9. Legacy single-byte encodings
    //

    // 9.1 single-byte decoder
    /**
     * @constructor
     * @implements {Decoder}
     * @param {!Array.<number>} index The encoding index.
     * @param {{fatal: boolean}} options
     */
    function SingleByteDecoder(index, options) {
        var fatal = options.fatal;
        /**
         * @param {Stream} stream The stream of bytes being decoded.
         * @param {number} bite The next byte read from the stream.
         * @return {?(number|!Array.<number>)} The next code point(s)
         *     decoded, or null if not enough data exists in the input
         *     stream to decode a complete code point.
         */
        this.handler = function(stream, bite) {
            // 1. If byte is end-of-stream, return finished.
            if (bite === end_of_stream)
                return finished;

            // 2. If byte is in the range 0x00 to 0x7F, return a code point
            // whose value is byte.
            if (inRange(bite, 0x00, 0x7F))
                return bite;

            // 3. Let code point be the index code point for byte − 0x80 in
            // index single-byte.
            var code_point = index[bite - 0x80];

            // 4. If code point is null, return error.
            if (code_point === null)
                return decoderError(fatal);

            // 5. Return a code point whose value is code point.
            return code_point;
        };
    }

    // 9.2 single-byte encoder
    /**
     * @constructor
     * @implements {Encoder}
     * @param {!Array.<?number>} index The encoding index.
     * @param {{fatal: boolean}} options
     */
    function SingleByteEncoder(index, options) {
        var fatal = options.fatal;
        /**
         * @param {Stream} stream Input stream.
         * @param {number} code_point Next code point read from the stream.
         * @return {(number|!Array.<number>)} Byte(s) to emit.
         */
        this.handler = function(stream, code_point) {
            // 1. If code point is end-of-stream, return finished.
            if (code_point === end_of_stream)
                return finished;

            // 2. If code point is in the range U+0000 to U+007F, return a
            // byte whose value is code point.
            if (inRange(code_point, 0x0000, 0x007F))
                return code_point;

            // 3. Let pointer be the index pointer for code point in index
            // single-byte.
            var pointer = indexPointerFor(code_point, index);

            // 4. If pointer is null, return error with code point.
            if (pointer === null)
                encoderError(code_point);

            // 5. Return a byte whose value is pointer + 0x80.
            return pointer + 0x80;
        };
    }

    (function() {
        if (!('encoding-indexes' in global))
            return;
        encodings.forEach(function(category) {
            if (category.heading !== 'Legacy single-byte encodings')
                return;
            category.encodings.forEach(function(encoding) {
                var name = encoding.name;
                var idx = index(name);
                /** @param {{fatal: boolean}} options */
                decoders[name] = function(options) {
                    return new SingleByteDecoder(idx, options);
                };
                /** @param {{fatal: boolean}} options */
                encoders[name] = function(options) {
                    return new SingleByteEncoder(idx, options);
                };
            });
        });
    }());

    //
    // 10. Legacy multi-byte Chinese (simplified) encodings
    //

    // 10.1 gbk

    // 10.1.1 gbk decoder
    // gbk's decoder is gb18030's decoder.
    /** @param {{fatal: boolean}} options */
    decoders['gbk'] = function(options) {
        return new GB18030Decoder(options);
    };

    // 10.1.2 gbk encoder
    // gbk's encoder is gb18030's encoder with its gbk flag set.
    /** @param {{fatal: boolean}} options */
    encoders['gbk'] = function(options) {
        return new GB18030Encoder(options, true);
    };

    // 10.2 gb18030

    // 10.2.1 gb18030 decoder
    /**
     * @constructor
     * @implements {Decoder}
     * @param {{fatal: boolean}} options
     */
    function GB18030Decoder(options) {
        var fatal = options.fatal;
        // gb18030's decoder has an associated gb18030 first, gb18030
        // second, and gb18030 third (all initially 0x00).
        var /** @type {number} */ gb18030_first = 0x00,
            /** @type {number} */ gb18030_second = 0x00,
            /** @type {number} */ gb18030_third = 0x00;
        /**
         * @param {Stream} stream The stream of bytes being decoded.
         * @param {number} bite The next byte read from the stream.
         * @return {?(number|!Array.<number>)} The next code point(s)
         *     decoded, or null if not enough data exists in the input
         *     stream to decode a complete code point.
         */
        this.handler = function(stream, bite) {
            // 1. If byte is end-of-stream and gb18030 first, gb18030
            // second, and gb18030 third are 0x00, return finished.
            if (bite === end_of_stream && gb18030_first === 0x00 &&
                gb18030_second === 0x00 && gb18030_third === 0x00) {
                return finished;
            }
            // 2. If byte is end-of-stream, and gb18030 first, gb18030
            // second, or gb18030 third is not 0x00, set gb18030 first,
            // gb18030 second, and gb18030 third to 0x00, and return error.
            if (bite === end_of_stream &&
                (gb18030_first !== 0x00 || gb18030_second !== 0x00 || gb18030_third !== 0x00)) {
                gb18030_first = 0x00;
                gb18030_second = 0x00;
                gb18030_third = 0x00;
                decoderError(fatal);
            }
            var code_point;
            // 3. If gb18030 third is not 0x00, run these substeps:
            if (gb18030_third !== 0x00) {
                // 1. Let code point be null.
                code_point = null;
                // 2. If byte is in the range 0x30 to 0x39, set code point to
                // the index gb18030 ranges code point for (((gb18030 first −
                // 0x81) × 10 + gb18030 second − 0x30) × 126 + gb18030 third −
                // 0x81) × 10 + byte − 0x30.
                if (inRange(bite, 0x30, 0x39)) {
                    code_point = indexGB18030RangesCodePointFor(
                        (((gb18030_first - 0x81) * 10 + (gb18030_second - 0x30)) * 126 +
                        (gb18030_third - 0x81)) * 10 + bite - 0x30);
                }

                // 3. Let buffer be a byte sequence consisting of gb18030
                // second, gb18030 third, and byte, in order.
                var buffer = [gb18030_second, gb18030_third, bite];

                // 4. Set gb18030 first, gb18030 second, and gb18030 third to
                // 0x00.
                gb18030_first = 0x00;
                gb18030_second = 0x00;
                gb18030_third = 0x00;

                // 5. If code point is null, prepend buffer to stream and
                // return error.
                if (code_point === null) {
                    stream.prepend(buffer);
                    return decoderError(fatal);
                }

                // 6. Return a code point whose value is code point.
                return code_point;
            }

            // 4. If gb18030 second is not 0x00, run these substeps:
            if (gb18030_second !== 0x00) {

                // 1. If byte is in the range 0x81 to 0xFE, set gb18030 third
                // to byte and return continue.
                if (inRange(bite, 0x81, 0xFE)) {
                    gb18030_third = bite;
                    return null;
                }

                // 2. Prepend gb18030 second followed by byte to stream, set
                // gb18030 first and gb18030 second to 0x00, and return error.
                stream.prepend([gb18030_second, bite]);
                gb18030_first = 0x00;
                gb18030_second = 0x00;
                return decoderError(fatal);
            }

            // 5. If gb18030 first is not 0x00, run these substeps:
            if (gb18030_first !== 0x00) {

                // 1. If byte is in the range 0x30 to 0x39, set gb18030 second
                // to byte and return continue.
                if (inRange(bite, 0x30, 0x39)) {
                    gb18030_second = bite;
                    return null;
                }

                // 2. Let lead be gb18030 first, let pointer be null, and set
                // gb18030 first to 0x00.
                var lead = gb18030_first;
                var pointer = null;
                gb18030_first = 0x00;

                // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41
                // otherwise.
                var offset = bite < 0x7F ? 0x40 : 0x41;

                // 4. If byte is in the range 0x40 to 0x7E or 0x80 to 0xFE,
                // set pointer to (lead − 0x81) × 190 + (byte − offset).
                if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE))
                    pointer = (lead - 0x81) * 190 + (bite - offset);

                // 5. Let code point be null if pointer is null and the index
                // code point for pointer in index gb18030 otherwise.
                code_point = pointer === null ? null :
                    indexCodePointFor(pointer, index('gb18030'));

                // 6. If code point is null and byte is in the range 0x00 to
                // 0x7F, prepend byte to stream.
                if (code_point === null && inRange(bite, 0x00, 0x7F))
                    stream.prepend(bite);

                // 7. If code point is null, return error.
                if (code_point === null)
                    return decoderError(fatal);

                // 8. Return a code point whose value is code point.
                return code_point;
            }

            // 6. If byte is in the range 0x00 to 0x7F, return a code point
            // whose value is byte.
            if (inRange(bite, 0x00, 0x7F))
                return bite;

            // 7. If byte is 0x80, return code point U+20AC.
            if (bite === 0x80)
                return 0x20AC;

            // 8. If byte is in the range 0x81 to 0xFE, set gb18030 first to
            // byte and return continue.
            if (inRange(bite, 0x81, 0xFE)) {
                gb18030_first = bite;
                return null;
            }

            // 9. Return error.
            return decoderError(fatal);
        };
    }

    // 10.2.2 gb18030 encoder
    /**
     * @constructor
     * @implements {Encoder}
     * @param {{fatal: boolean}} options
     * @param {boolean=} gbk_flag
     */
    function GB18030Encoder(options, gbk_flag) {
        var fatal = options.fatal;
        // gb18030's decoder has an associated gbk flag (initially unset).
        /**
         * @param {Stream} stream Input stream.
         * @param {number} code_point Next code point read from the stream.
         * @return {(number|!Array.<number>)} Byte(s) to emit.
         */
        this.handler = function(stream, code_point) {
            // 1. If code point is end-of-stream, return finished.
            if (code_point === end_of_stream)
                return finished;

            // 2. If code point is in the range U+0000 to U+007F, return a
            // byte whose value is code point.
            if (inRange(code_point, 0x0000, 0x007F)) {
                return code_point;
            }

            // 3. If the gbk flag is set and code point is U+20AC, return
            // byte 0x80.
            if (gbk_flag && code_point === 0x20AC)
                return 0x80;

            // 4. Let pointer be the index pointer for code point in index
            // gb18030.
            var pointer = indexPointerFor(code_point, index('gb18030'));

            // 5. If pointer is not null, run these substeps:
            if (pointer !== null) {

                // 1. Let lead be pointer / 190 + 0x81.
                var lead = div(pointer, 190) + 0x81;

                // 2. Let trail be pointer % 190.
                var trail = pointer % 190;

                // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise.
                var offset = trail < 0x3F ? 0x40 : 0x41;

                // 4. Return two bytes whose values are lead and trail + offset.
                return [lead, trail + offset];
            }

            // 6. If gbk flag is set, return error with code point.
            if (gbk_flag)
                return encoderError(code_point);

            // 7. Set pointer to the index gb18030 ranges pointer for code
            // point.
            pointer = indexGB18030RangesPointerFor(code_point);

            // 8. Let byte1 be pointer / 10 / 126 / 10.
            var byte1 = div(div(div(pointer, 10), 126), 10);

            // 9. Set pointer to pointer − byte1 × 10 × 126 × 10.
            pointer = pointer - byte1 * 10 * 126 * 10;

            // 10. Let byte2 be pointer / 10 / 126.
            var byte2 = div(div(pointer, 10), 126);

            // 11. Set pointer to pointer − byte2 × 10 × 126.
            pointer = pointer - byte2 * 10 * 126;

            // 12. Let byte3 be pointer / 10.
            var byte3 = div(pointer, 10);

            // 13. Let byte4 be pointer − byte3 × 10.
            var byte4 = pointer - byte3 * 10;

            // 14. Return four bytes whose values are byte1 + 0x81, byte2 +
            // 0x30, byte3 + 0x81, byte4 + 0x30.
            return [byte1 + 0x81,
                byte2 + 0x30,
                byte3 + 0x81,
                byte4 + 0x30];
        };
    }

    /** @param {{fatal: boolean}} options */
    encoders['gb18030'] = function(options) {
        return new GB18030Encoder(options);
    };
    /** @param {{fatal: boolean}} options */
    decoders['gb18030'] = function(options) {
        return new GB18030Decoder(options);
    };


    //
    // 11. Legacy multi-byte Chinese (traditional) encodings
    //

    // 11.1 big5

    /**
     * @constructor
     * @implements {Decoder}
     * @param {{fatal: boolean}} options
     */
    function Big5Decoder(options) {
        var fatal = options.fatal;
        // big5's decoder has an associated big5 lead (initially 0x00).
        var /** @type {number} */ big5_lead = 0x00;

        /**
         * @param {Stream} stream The stream of bytes being decoded.
         * @param {number} bite The next byte read from the stream.
         * @return {?(number|!Array.<number>)} The next code point(s)
         *     decoded, or null if not enough data exists in the input
         *     stream to decode a complete code point.
         */
        this.handler = function(stream, bite) {
            // 1. If byte is end-of-stream and big5 lead is not 0x00, set
            // big5 lead to 0x00 and return error.
            if (bite === end_of_stream && big5_lead !== 0x00) {
                big5_lead = 0x00;
                return decoderError(fatal);
            }

            // 2. If byte is end-of-stream and big5 lead is 0x00, return
            // finished.
            if (bite === end_of_stream && big5_lead === 0x00)
                return finished;

            // 3. If big5 lead is not 0x00, let lead be big5 lead, let
            // pointer be null, set big5 lead to 0x00, and then run these
            // substeps:
            if (big5_lead !== 0x00) {
                var lead = big5_lead;
                var pointer = null;
                big5_lead = 0x00;

                // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62
                // otherwise.
                var offset = bite < 0x7F ? 0x40 : 0x62;

                // 2. If byte is in the range 0x40 to 0x7E or 0xA1 to 0xFE,
                // set pointer to (lead − 0x81) × 157 + (byte − offset).
                if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE))
                    pointer = (lead - 0x81) * 157 + (bite - offset);

                // 3. If there is a row in the table below whose first column
                // is pointer, return the two code points listed in its second
                // column
                // Pointer | Code points
                // --------+--------------
                // 1133    | U+00CA U+0304
                // 1135    | U+00CA U+030C
                // 1164    | U+00EA U+0304
                // 1166    | U+00EA U+030C
                switch (pointer) {
                    case 1133: return [0x00CA, 0x0304];
                    case 1135: return [0x00CA, 0x030C];
                    case 1164: return [0x00EA, 0x0304];
                    case 1166: return [0x00EA, 0x030C];
                }

                // 4. Let code point be null if pointer is null and the index
                // code point for pointer in index big5 otherwise.
                var code_point = (pointer === null) ? null :
                    indexCodePointFor(pointer, index('big5'));

                // 5. If code point is null and byte is in the range 0x00 to
                // 0x7F, prepend byte to stream.
                if (code_point === null && inRange(bite, 0x00, 0x7F))
                    stream.prepend(bite);

                // 6. If code point is null, return error.
                if (code_point === null)
                    return decoderError(fatal);

                // 7. Return a code point whose value is code point.
                return code_point;
            }

            // 4. If byte is in the range 0x00 to 0x7F, return a code point
            // whose value is byte.
            if (inRange(bite, 0x00, 0x7F))
                return bite;

            // 5. If byte is in the range 0x81 to 0xFE, set big5 lead to
            // byte and return continue.
            if (inRange(bite, 0x81, 0xFE)) {
                big5_lead = bite;
                return null;
            }

            // 6. Return error.
            return decoderError(fatal);
        };
    }

    /**
     * @constructor
     * @implements {Encoder}
     * @param {{fatal: boolean}} options
     */
    function Big5Encoder(options) {
        var fatal = options.fatal;
        /**
         * @param {Stream} stream Input stream.
         * @param {number} code_point Next code point read from the stream.
         * @return {(number|!Array.<number>)} Byte(s) to emit.
         */
        this.handler = function(stream, code_point) {
            // 1. If code point is end-of-stream, return finished.
            if (code_point === end_of_stream)
                return finished;

            // 2. If code point is in the range U+0000 to U+007F, return a
            // byte whose value is code point.
            if (inRange(code_point, 0x0000, 0x007F))
                return code_point;

            // 3. Let pointer be the index big5 pointer for code point.
            var pointer = indexBig5PointerFor(code_point, index('big5'));

            // 4. If pointer is null, return error with code point.
            if (pointer === null)
                return encoderError(code_point);

            // 5. Let lead be pointer / 157 + 0x81.
            var lead = div(pointer, 157) + 0x81;

            // 6. If lead is less than 0xA1, return error with code point.
            if (lead < 0xA1)
                return encoderError(code_point);

            // 7. Let trail be pointer % 157.
            var trail = pointer % 157;

            // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62
            // otherwise.
            var offset = trail < 0x3F ? 0x40 : 0x62;

            // Return two bytes whose values are lead and trail + offset.
            return [lead, trail + offset];
        };
    }

    /** @param {{fatal: boolean}} options */
    encoders['big5'] = function(options) {
        return new Big5Encoder(options);
    };
    /** @param {{fatal: boolean}} options */
    decoders['big5'] = function(options) {
        return new Big5Decoder(options);
    };


    //
    // 12. Legacy multi-byte Japanese encodings
    //

    // 12.1 euc-jp

    /**
     * @constructor
     * @implements {Decoder}
     * @param {{fatal: boolean}} options
     */
    function EUCJPDecoder(options) {
        var fatal = options.fatal;

        // euc-jp's decoder has an associated euc-jp jis0212 flag
        // (initially unset) and euc-jp lead (initially 0x00).
        var /** @type {boolean} */ eucjp_jis0212_flag = false,
            /** @type {number} */ eucjp_lead = 0x00;

        /**
         * @param {Stream} stream The stream of bytes being decoded.
         * @param {number} bite The next byte read from the stream.
         * @return {?(number|!Array.<number>)} The next code point(s)
         *     decoded, or null if not enough data exists in the input
         *     stream to decode a complete code point.
         */
        this.handler = function(stream, bite) {
            // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set
            // euc-jp lead to 0x00, and return error.
            if (bite === end_of_stream && eucjp_lead !== 0x00) {
                eucjp_lead = 0x00;
                return decoderError(fatal);
            }

            // 2. If byte is end-of-stream and euc-jp lead is 0x00, return
            // finished.
            if (bite === end_of_stream && eucjp_lead === 0x00)
                return finished;

            // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to
            // 0xDF, set euc-jp lead to 0x00 and return a code point whose
            // value is 0xFF61 + byte − 0xA1.
            if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) {
                eucjp_lead = 0x00;
                return 0xFF61 + bite - 0xA1;
            }

            // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to
            // 0xFE, set the euc-jp jis0212 flag, set euc-jp lead to byte,
            // and return continue.
            if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) {
                eucjp_jis0212_flag = true;
                eucjp_lead = bite;
                return null;
            }

            // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set
            // euc-jp lead to 0x00, and run these substeps:
            if (eucjp_lead !== 0x00) {
                var lead = eucjp_lead;
                eucjp_lead = 0x00;

                // 1. Let code point be null.
                var code_point = null;

                // 2. If lead and byte are both in the range 0xA1 to 0xFE, set
                // code point to the index code point for (lead − 0xA1) × 94 +
                // byte − 0xA1 in index jis0208 if the euc-jp jis0212 flag is
                // unset and in index jis0212 otherwise.
                if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) {
                    code_point = indexCodePointFor(
                        (lead - 0xA1) * 94 + (bite - 0xA1),
                        index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212'));
                }

                // 3. Unset the euc-jp jis0212 flag.
                eucjp_jis0212_flag = false;

                // 4. If byte is not in the range 0xA1 to 0xFE, prepend byte
                // to stream.
                if (!inRange(bite, 0xA1, 0xFE))
                    stream.prepend(bite);

                // 5. If code point is null, return error.
                if (code_point === null)
                    return decoderError(fatal);

                // 6. Return a code point whose value is code point.
    
Download .txt
gitextract_4hhyd0iz/

├── .gitignore
├── README.md
├── bin/
│   ├── build-linux.sh
│   ├── build-win.sh
│   ├── client/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── assets/
│   │   │   ├── Scene/
│   │   │   │   ├── main.fire
│   │   │   │   └── main.fire.meta
│   │   │   ├── Scene.meta
│   │   │   ├── Script/
│   │   │   │   ├── Common.js
│   │   │   │   ├── Common.js.meta
│   │   │   │   ├── CountDown.js
│   │   │   │   ├── CountDown.js.meta
│   │   │   │   ├── Encoding.js
│   │   │   │   ├── Encoding.js.meta
│   │   │   │   ├── main.js
│   │   │   │   └── main.js.meta
│   │   │   ├── Script.meta
│   │   │   ├── resources/
│   │   │   │   ├── GameMain_6p.plist
│   │   │   │   ├── GameMain_6p.plist.meta
│   │   │   │   ├── GameMain_6p.png.meta
│   │   │   │   ├── audio/
│   │   │   │   │   ├── audio_allinWin.wav.meta
│   │   │   │   │   ├── audio_check.wav.meta
│   │   │   │   │   ├── audio_chipsToPot.wav.meta
│   │   │   │   │   ├── audio_chipsToTable.wav.meta
│   │   │   │   │   ├── audio_distributeCard.wav.meta
│   │   │   │   │   ├── audio_fold.wav.meta
│   │   │   │   │   ├── audio_normalWin.wav.meta
│   │   │   │   │   ├── audio_pokerClick.caf
│   │   │   │   │   ├── audio_pokerClick.caf.meta
│   │   │   │   │   ├── audio_pokerClick.mp3.meta
│   │   │   │   │   ├── audio_timeout.wav.meta
│   │   │   │   │   └── audio_yourTurn.wav.meta
│   │   │   │   ├── audio.meta
│   │   │   │   ├── game_cards.plist
│   │   │   │   ├── game_cards.plist.meta
│   │   │   │   ├── game_cards.png.meta
│   │   │   │   ├── game_cards_6p.plist
│   │   │   │   ├── game_cards_6p.plist.meta
│   │   │   │   ├── game_cards_6p.png.meta
│   │   │   │   ├── game_desk_bg.jpg.meta
│   │   │   │   ├── game_desk_bg_6p.jpg.meta
│   │   │   │   ├── splash.gif.meta
│   │   │   │   └── splash.png.meta
│   │   │   └── resources.meta
│   │   ├── creator.d.ts
│   │   ├── jsconfig.json
│   │   └── project.json
│   └── client.html
└── src/
    ├── github.com/
    │   ├── davecgh/
    │   │   └── go-spew/
    │   │       ├── LICENSE
    │   │       └── spew/
    │   │           ├── bypass.go
    │   │           ├── bypasssafe.go
    │   │           ├── common.go
    │   │           ├── config.go
    │   │           ├── doc.go
    │   │           ├── dump.go
    │   │           ├── format.go
    │   │           └── spew.go
    │   ├── dolotech/
    │   │   ├── leaf/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── TUTORIAL_EN.md
    │   │   │   ├── TUTORIAL_ZH.md
    │   │   │   ├── chanrpc/
    │   │   │   │   ├── chanrpc.go
    │   │   │   │   └── example_test.go
    │   │   │   ├── conf/
    │   │   │   │   └── conf.go
    │   │   │   ├── gate/
    │   │   │   │   ├── agent.go
    │   │   │   │   └── gate.go
    │   │   │   ├── leaf.go
    │   │   │   ├── module/
    │   │   │   │   ├── go_test.go
    │   │   │   │   ├── module.go
    │   │   │   │   └── skeleton.go
    │   │   │   ├── network/
    │   │   │   │   ├── agent.go
    │   │   │   │   ├── conn.go
    │   │   │   │   ├── json/
    │   │   │   │   │   └── json.go
    │   │   │   │   ├── processor.go
    │   │   │   │   ├── protobuf/
    │   │   │   │   │   └── protobuf.go
    │   │   │   │   ├── tcp_client.go
    │   │   │   │   ├── tcp_conn.go
    │   │   │   │   ├── tcp_msg.go
    │   │   │   │   ├── tcp_server.go
    │   │   │   │   ├── ws_client.go
    │   │   │   │   ├── ws_conn.go
    │   │   │   │   └── ws_server.go
    │   │   │   ├── room/
    │   │   │   │   ├── interface.go
    │   │   │   │   ├── msg_loop.go
    │   │   │   │   └── room_list.go
    │   │   │   ├── timer/
    │   │   │   │   ├── cronexpr.go
    │   │   │   │   ├── example_test.go
    │   │   │   │   └── timer.go
    │   │   │   └── version.go
    │   │   └── lib/
    │   │       ├── README.md
    │   │       ├── csv/
    │   │       │   ├── bench_test.go
    │   │       │   ├── cfield.go
    │   │       │   ├── csv.go
    │   │       │   ├── csv_test.go
    │   │       │   ├── decode.go
    │   │       │   ├── decode_test.go
    │   │       │   ├── encode.go
    │   │       │   ├── encode_test.go
    │   │       │   ├── example_marshal_test.go
    │   │       │   └── example_test.go
    │   │       ├── db/
    │   │       │   ├── client.go
    │   │       │   └── client_test.go
    │   │       ├── filter/
    │   │       │   ├── filter.go
    │   │       │   ├── readme.txt
    │   │       │   └── trie.go
    │   │       ├── goevent/
    │   │       │   └── go_event.go
    │   │       ├── grpool/
    │   │       │   ├── grpool.go
    │   │       │   └── grpool_test.go
    │   │       ├── pse/
    │   │       │   ├── pse_darwin.go
    │   │       │   ├── pse_freebsd.go
    │   │       │   ├── pse_linux.go
    │   │       │   ├── pse_rumprun.go
    │   │       │   ├── pse_solaris.go
    │   │       │   ├── pse_test.go
    │   │       │   ├── pse_windows.go
    │   │       │   └── pse_windows_test.go
    │   │       ├── route/
    │   │       │   ├── route_msg.go
    │   │       │   └── router_test.go
    │   │       └── utils/
    │   │           ├── aes.go
    │   │           ├── debug.go
    │   │           ├── helper.go
    │   │           ├── list.go
    │   │           ├── map.go
    │   │           ├── map_list_test.go
    │   │           ├── queue.go
    │   │           ├── random.go
    │   │           ├── sign.go
    │   │           ├── stack.go
    │   │           ├── string_2_bytes.go
    │   │           ├── string_2_bytes_test.go
    │   │           ├── structandmap.go
    │   │           ├── timer_queue.go
    │   │           ├── utils.go
    │   │           ├── utils_test.go
    │   │           ├── waitgroup.go
    │   │           └── xxtea.go
    │   ├── go-xorm/
    │   │   ├── core/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── benchmark.sh
    │   │   │   ├── cache.go
    │   │   │   ├── column.go
    │   │   │   ├── converstion.go
    │   │   │   ├── db.go
    │   │   │   ├── dialect.go
    │   │   │   ├── driver.go
    │   │   │   ├── error.go
    │   │   │   ├── filter.go
    │   │   │   ├── ilogger.go
    │   │   │   ├── index.go
    │   │   │   ├── mapper.go
    │   │   │   ├── pk.go
    │   │   │   ├── scan.go
    │   │   │   ├── table.go
    │   │   │   └── type.go
    │   │   └── xorm/
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── README_CN.md
    │   │       ├── VERSION
    │   │       ├── doc.go
    │   │       ├── engine.go
    │   │       ├── error.go
    │   │       ├── gen_reserved.sh
    │   │       ├── goracle_driver.go
    │   │       ├── helpers.go
    │   │       ├── logger.go
    │   │       ├── lru_cacher.go
    │   │       ├── memory_store.go
    │   │       ├── mssql_dialect.go
    │   │       ├── mymysql_driver.go
    │   │       ├── mysql_dialect.go
    │   │       ├── mysql_driver.go
    │   │       ├── oci8_driver.go
    │   │       ├── odbc_driver.go
    │   │       ├── oracle_dialect.go
    │   │       ├── pg_reserved.txt
    │   │       ├── postgres_dialect.go
    │   │       ├── pq_driver.go
    │   │       ├── processors.go
    │   │       ├── rows.go
    │   │       ├── session.go
    │   │       ├── sqlite3_dialect.go
    │   │       ├── sqlite3_driver.go
    │   │       ├── statement.go
    │   │       ├── syslogger.go
    │   │       ├── types.go
    │   │       └── xorm.go
    │   ├── golang/
    │   │   ├── glog/
    │   │   │   ├── glog.go
    │   │   │   ├── glog_file.go
    │   │   │   └── glog_test.go
    │   │   └── protobuf/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── AUTHORS
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── Make.protobuf
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── _conformance/
    │   │       │   ├── Makefile
    │   │       │   ├── conformance.go
    │   │       │   └── conformance_proto/
    │   │       │       ├── conformance.pb.go
    │   │       │       └── conformance.proto
    │   │       ├── descriptor/
    │   │       │   ├── descriptor.go
    │   │       │   └── descriptor_test.go
    │   │       ├── jsonpb/
    │   │       │   ├── jsonpb.go
    │   │       │   ├── jsonpb_test.go
    │   │       │   └── jsonpb_test_proto/
    │   │       │       ├── Makefile
    │   │       │       ├── more_test_objects.pb.go
    │   │       │       ├── more_test_objects.proto
    │   │       │       ├── test_objects.pb.go
    │   │       │       └── test_objects.proto
    │   │       ├── proto/
    │   │       │   ├── Makefile
    │   │       │   ├── all_test.go
    │   │       │   ├── any_test.go
    │   │       │   ├── clone.go
    │   │       │   ├── clone_test.go
    │   │       │   ├── decode.go
    │   │       │   ├── decode_test.go
    │   │       │   ├── discard.go
    │   │       │   ├── encode.go
    │   │       │   ├── encode_test.go
    │   │       │   ├── equal.go
    │   │       │   ├── equal_test.go
    │   │       │   ├── extensions.go
    │   │       │   ├── extensions_test.go
    │   │       │   ├── lib.go
    │   │       │   ├── map_test.go
    │   │       │   ├── message_set.go
    │   │       │   ├── message_set_test.go
    │   │       │   ├── pointer_reflect.go
    │   │       │   ├── pointer_unsafe.go
    │   │       │   ├── properties.go
    │   │       │   ├── proto3_proto/
    │   │       │   │   ├── proto3.pb.go
    │   │       │   │   └── proto3.proto
    │   │       │   ├── proto3_test.go
    │   │       │   ├── size2_test.go
    │   │       │   ├── size_test.go
    │   │       │   ├── testdata/
    │   │       │   │   ├── Makefile
    │   │       │   │   ├── golden_test.go
    │   │       │   │   ├── test.pb.go
    │   │       │   │   └── test.proto
    │   │       │   ├── text.go
    │   │       │   ├── text_parser.go
    │   │       │   ├── text_parser_test.go
    │   │       │   └── text_test.go
    │   │       ├── protoc-gen-go/
    │   │       │   ├── Makefile
    │   │       │   ├── descriptor/
    │   │       │   │   ├── Makefile
    │   │       │   │   ├── descriptor.pb.go
    │   │       │   │   └── descriptor.proto
    │   │       │   ├── doc.go
    │   │       │   ├── generator/
    │   │       │   │   ├── Makefile
    │   │       │   │   ├── generator.go
    │   │       │   │   └── name_test.go
    │   │       │   ├── grpc/
    │   │       │   │   └── grpc.go
    │   │       │   ├── link_grpc.go
    │   │       │   ├── main.go
    │   │       │   ├── plugin/
    │   │       │   │   ├── Makefile
    │   │       │   │   ├── plugin.pb.go
    │   │       │   │   ├── plugin.pb.golden
    │   │       │   │   └── plugin.proto
    │   │       │   └── testdata/
    │   │       │       ├── Makefile
    │   │       │       ├── extension_base.proto
    │   │       │       ├── extension_extra.proto
    │   │       │       ├── extension_test.go
    │   │       │       ├── extension_user.proto
    │   │       │       ├── grpc.proto
    │   │       │       ├── imp.pb.go.golden
    │   │       │       ├── imp.proto
    │   │       │       ├── imp2.proto
    │   │       │       ├── imp3.proto
    │   │       │       ├── main_test.go
    │   │       │       ├── multi/
    │   │       │       │   ├── multi1.proto
    │   │       │       │   ├── multi2.proto
    │   │       │       │   └── multi3.proto
    │   │       │       ├── my_test/
    │   │       │       │   ├── test.pb.go
    │   │       │       │   ├── test.pb.go.golden
    │   │       │       │   └── test.proto
    │   │       │       └── proto3.proto
    │   │       └── ptypes/
    │   │           ├── any/
    │   │           │   ├── any.pb.go
    │   │           │   └── any.proto
    │   │           ├── any.go
    │   │           ├── any_test.go
    │   │           ├── doc.go
    │   │           ├── duration/
    │   │           │   ├── duration.pb.go
    │   │           │   └── duration.proto
    │   │           ├── duration.go
    │   │           ├── duration_test.go
    │   │           ├── empty/
    │   │           │   ├── empty.pb.go
    │   │           │   └── empty.proto
    │   │           ├── regen.sh
    │   │           ├── struct/
    │   │           │   ├── struct.pb.go
    │   │           │   └── struct.proto
    │   │           ├── timestamp/
    │   │           │   ├── timestamp.pb.go
    │   │           │   └── timestamp.proto
    │   │           ├── timestamp.go
    │   │           ├── timestamp_test.go
    │   │           └── wrappers/
    │   │               ├── wrappers.pb.go
    │   │               └── wrappers.proto
    │   ├── gorilla/
    │   │   └── websocket/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── AUTHORS
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── client.go
    │   │       ├── client_clone.go
    │   │       ├── client_clone_legacy.go
    │   │       ├── client_server_test.go
    │   │       ├── client_test.go
    │   │       ├── compression.go
    │   │       ├── compression_test.go
    │   │       ├── conn.go
    │   │       ├── conn_broadcast_test.go
    │   │       ├── conn_read.go
    │   │       ├── conn_read_legacy.go
    │   │       ├── conn_test.go
    │   │       ├── conn_write.go
    │   │       ├── conn_write_legacy.go
    │   │       ├── doc.go
    │   │       ├── example_test.go
    │   │       ├── examples/
    │   │       │   ├── autobahn/
    │   │       │   │   ├── README.md
    │   │       │   │   ├── fuzzingclient.json
    │   │       │   │   └── server.go
    │   │       │   ├── chat/
    │   │       │   │   ├── README.md
    │   │       │   │   ├── client.go
    │   │       │   │   ├── home.html
    │   │       │   │   ├── hub.go
    │   │       │   │   └── main.go
    │   │       │   ├── command/
    │   │       │   │   ├── README.md
    │   │       │   │   ├── home.html
    │   │       │   │   └── main.go
    │   │       │   ├── echo/
    │   │       │   │   ├── README.md
    │   │       │   │   ├── client.go
    │   │       │   │   └── server.go
    │   │       │   └── filewatch/
    │   │       │       ├── README.md
    │   │       │       └── main.go
    │   │       ├── json.go
    │   │       ├── json_test.go
    │   │       ├── mask.go
    │   │       ├── mask_safe.go
    │   │       ├── mask_test.go
    │   │       ├── prepared.go
    │   │       ├── prepared_test.go
    │   │       ├── proxy.go
    │   │       ├── server.go
    │   │       ├── server_test.go
    │   │       ├── util.go
    │   │       ├── util_test.go
    │   │       └── x_net_proxy.go
    │   ├── labstack/
    │   │   └── gommon/
    │   │       ├── bytes/
    │   │       │   ├── README.md
    │   │       │   ├── bytes.go
    │   │       │   └── bytes_test.go
    │   │       ├── color/
    │   │       │   ├── README.md
    │   │       │   ├── color.go
    │   │       │   └── color_test.go
    │   │       ├── gommon.go
    │   │       ├── log/
    │   │       │   ├── README.md
    │   │       │   ├── color.go
    │   │       │   ├── log.go
    │   │       │   ├── log_test.go
    │   │       │   └── white.go
    │   │       └── random/
    │   │           ├── random.go
    │   │           └── random_test.go
    │   ├── lib/
    │   │   └── pq/
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE.md
    │   │       ├── README.md
    │   │       ├── buf.go
    │   │       ├── conn.go
    │   │       ├── copy.go
    │   │       ├── doc.go
    │   │       ├── encode.go
    │   │       ├── error.go
    │   │       ├── notify.go
    │   │       ├── oid/
    │   │       │   ├── doc.go
    │   │       │   ├── gen.go
    │   │       │   └── types.go
    │   │       ├── url.go
    │   │       ├── user_posix.go
    │   │       └── user_windows.go
    │   └── stretchr/
    │       └── testify/
    │           ├── Gopkg.toml
    │           ├── LICENSE
    │           ├── README.md
    │           ├── _codegen/
    │           │   └── main.go
    │           ├── assert/
    │           │   ├── assertion_format.go
    │           │   ├── assertion_format.go.tmpl
    │           │   ├── assertion_forward.go
    │           │   ├── assertion_forward.go.tmpl
    │           │   ├── assertions.go
    │           │   ├── assertions_test.go
    │           │   ├── doc.go
    │           │   ├── errors.go
    │           │   ├── forward_assertions.go
    │           │   ├── forward_assertions_test.go
    │           │   ├── http_assertions.go
    │           │   └── http_assertions_test.go
    │           ├── doc.go
    │           ├── http/
    │           │   ├── doc.go
    │           │   ├── test_response_writer.go
    │           │   └── test_round_tripper.go
    │           ├── mock/
    │           │   ├── doc.go
    │           │   ├── mock.go
    │           │   └── mock_test.go
    │           ├── package_test.go
    │           ├── require/
    │           │   ├── doc.go
    │           │   ├── forward_requirements.go
    │           │   ├── forward_requirements_test.go
    │           │   ├── require.go
    │           │   ├── require.go.tmpl
    │           │   ├── require_forward.go
    │           │   ├── require_forward.go.tmpl
    │           │   ├── requirements.go
    │           │   └── requirements_test.go
    │           ├── suite/
    │           │   ├── doc.go
    │           │   ├── interfaces.go
    │           │   ├── suite.go
    │           │   └── suite_test.go
    │           └── vendor/
    │               └── github.com/
    │                   ├── davecgh/
    │                   │   └── go-spew/
    │                   │       ├── LICENSE
    │                   │       └── spew/
    │                   │           ├── bypass.go
    │                   │           ├── bypasssafe.go
    │                   │           ├── common.go
    │                   │           ├── config.go
    │                   │           ├── doc.go
    │                   │           ├── dump.go
    │                   │           ├── format.go
    │                   │           └── spew.go
    │                   ├── pmezard/
    │                   │   └── go-difflib/
    │                   │       ├── LICENSE
    │                   │       └── difflib/
    │                   │           └── difflib.go
    │                   └── stretchr/
    │                       └── objx/
    │                           ├── LICENSE
    │                           ├── accessors.go
    │                           ├── constants.go
    │                           ├── conversions.go
    │                           ├── doc.go
    │                           ├── map.go
    │                           ├── mutations.go
    │                           ├── security.go
    │                           ├── tests.go
    │                           ├── type_specific_codegen.go
    │                           └── value.go
    ├── main.go
    └── server/
        ├── algorithm/
        │   ├── 7462.txt
        │   ├── Pocker Rule.html
        │   ├── cards.go
        │   ├── cards_test.go
        │   ├── constan.go
        │   ├── dealer.go
        │   ├── dealer_test.go
        │   ├── flush_test.go
        │   ├── pk.go
        │   ├── sort.go
        │   ├── sort_test.go
        │   └── tostring.go
        ├── base/
        │   └── skeleton.go
        ├── conf/
        │   └── conf.go
        ├── game/
        │   ├── external.go
        │   └── internal/
        │       ├── chanrpc.go
        │       ├── game_rule.go
        │       ├── module.go
        │       ├── occupant.go
        │       ├── pot.go
        │       ├── pot_test.go
        │       ├── room.go
        │       ├── room_internal_handler.go
        │       └── room_test.go
        ├── gate/
        │   ├── external.go
        │   ├── internal/
        │   │   └── module.go
        │   └── router.go
        ├── login/
        │   ├── external.go
        │   └── internal/
        │       ├── handler.go
        │       └── module.go
        ├── model/
        │   ├── constan.go
        │   ├── room_data.go
        │   ├── room_data_test.go
        │   ├── room_list_test.go
        │   ├── user_data.go
        │   └── user_data_test.go
        └── protocol/
            └── protocol.go
Download .txt
Showing preview only (577K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6611 symbols across 309 files)

FILE: bin/client/assets/Script/Encoding.js
  function inRange (line 27) | function inRange(a, min, max) {
  function div (line 36) | function div(n, d) {
  function ToDictionary (line 44) | function ToDictionary(o) {
  function stringToCodePoints (line 54) | function stringToCodePoints(string) {
  function codePointsToString (line 137) | function codePointsToString(code_points) {
  function Stream (line 175) | function Stream(tokens) {
  function decoderError (line 251) | function decoderError(fatal, opt_code_point) {
  function encoderError (line 261) | function encoderError(code_point) {
  function Decoder (line 266) | function Decoder() {}
  function Encoder (line 279) | function Encoder() {}
  function getEncoding (line 298) | function getEncoding(label) {
  function indexCodePointFor (line 802) | function indexCodePointFor(pointer, index) {
  function indexPointerFor (line 813) | function indexPointerFor(code_point, index) {
  function index (line 822) | function index(name) {
  function indexGB18030RangesCodePointFor (line 835) | function indexGB18030RangesCodePointFor(pointer) {
  function indexGB18030RangesPointerFor (line 869) | function indexGB18030RangesPointerFor(code_point) {
  function indexShiftJISPointerFor (line 898) | function indexShiftJISPointerFor(code_point) {
  function indexBig5PointerFor (line 914) | function indexBig5PointerFor(code_point) {
  function TextDecoder (line 946) | function TextDecoder(encoding, options) {
  function TextEncoder (line 1076) | function TextEncoder(encoding, options) {
  function UTF8Decoder (line 1172) | function UTF8Decoder(options) {
  function UTF8Encoder (line 1313) | function UTF8Encoder(options) {
  function SingleByteDecoder (line 1390) | function SingleByteDecoder(index, options) {
  function SingleByteEncoder (line 1429) | function SingleByteEncoder(index, options) {
  function GB18030Decoder (line 1508) | function GB18030Decoder(options) {
  function GB18030Encoder (line 1664) | function GB18030Encoder(options, gbk_flag) {
  function Big5Decoder (line 1764) | function Big5Decoder(options) {
  function Big5Encoder (line 1862) | function Big5Encoder(options) {
  function EUCJPDecoder (line 1926) | function EUCJPDecoder(options) {
  function EUCJPEncoder (line 2028) | function EUCJPEncoder(options) {
  function ISO2022JPDecoder (line 2097) | function ISO2022JPDecoder(options) {
  function ISO2022JPEncoder (line 2404) | function ISO2022JPEncoder(options) {
  function ShiftJISDecoder (line 2535) | function ShiftJISDecoder(options) {
  function ShiftJISEncoder (line 2633) | function ShiftJISEncoder(options) {
  function EUCKRDecoder (line 2714) | function EUCKRDecoder(options) {
  function EUCKREncoder (line 2791) | function EUCKREncoder(options) {
  function convertCodeUnitToBytes (line 2852) | function convertCodeUnitToBytes(code_unit, utf16be) {
  function UTF16Decoder (line 2873) | function UTF16Decoder(utf16_be, options) {
  function UTF16Encoder (line 2966) | function UTF16Encoder(utf16_be, options) {
  function XUserDefinedDecoder (line 3026) | function XUserDefinedDecoder(options) {
  function XUserDefinedEncoder (line 3055) | function XUserDefinedEncoder(options) {

FILE: bin/client/creator.d.ts
  type DebugMode (line 1863) | enum DebugMode {
  class audioEngine (line 1880) | class audioEngine {
  class AnimationClip (line 2082) | class AnimationClip extends Asset {
  class AnimationState (line 2112) | class AnimationState extends AnimationNode {
  class Playable (line 2125) | class Playable {
  type WrapMode (line 2156) | enum WrapMode {
  class AnimationNodeBase (line 2167) | class AnimationNodeBase extends Playable {
  class Action (line 2201) | class Action {
  class FiniteTimeAction (line 2245) | class FiniteTimeAction extends Action {
  class ActionEase (line 2272) | class ActionEase extends ActionInterval {
  class EaseRateAction (line 2276) | class EaseRateAction extends ActionEase {
  class EaseElastic (line 2280) | class EaseElastic extends ActionEase {
  class EaseBounce (line 2284) | class EaseBounce extends ActionEase {
  class ActionInstant (line 2288) | class ActionInstant extends FiniteTimeAction {
  class ActionInterval (line 2303) | class ActionInterval extends FiniteTimeAction {
  class MotionStreak (line 2336) | class MotionStreak extends Component {
  class ActionManager (line 2384) | class ActionManager {
  class Director (line 2532) | class Director {
  class Game (line 2715) | class Game {
  class Node (line 2847) | class Node extends _BaseNode {
  class Scene (line 3085) | class Scene extends _BaseNode {
  class Scheduler (line 3104) | class Scheduler {
  class ParticleSystem (line 3380) | class ParticleSystem extends cc._RendererUnderSG {
  class TiledLayer (line 3576) | class TiledLayer extends _SGComponent {
  class TiledMap (line 3845) | class TiledMap extends Component {
  class NodePool (line 4024) | class NodePool {
  class pool (line 4063) | class pool {
  class Asset (line 4111) | class Asset extends RawAsset {
  class AudioClip (line 4134) | class AudioClip extends RawAsset {
  class BitmapFont (line 4139) | class BitmapFont extends RawAsset {
  class Font (line 4144) | class Font extends RawAsset {
  class Prefab (line 4149) | class Prefab extends Asset {
  class RawAsset (line 4161) | class RawAsset extends CCObject {
  class SceneAsset (line 4173) | class SceneAsset extends Asset {
  class _Script (line 4178) | class _Script extends Asset {
  class _JavaScript (line 4183) | class _JavaScript extends Asset {
  class CoffeeScript (line 4188) | class CoffeeScript extends Asset {
  class SpriteAtlas (line 4193) | class SpriteAtlas extends RawAsset {
  class TTFFont (line 4207) | class TTFFont extends Asset {
  class TextAsset (line 4212) | class TextAsset extends Asset {
  class BoxCollider (line 4217) | class BoxCollider extends Component {
  class CircleCollider (line 4227) | class CircleCollider extends Component {
  class Collider (line 4237) | class Collider extends Component {
  class CollisionManager (line 4247) | class CollisionManager {
  class Intersection (line 4263) | class Intersection {
  class PolygonCollider (line 4333) | class PolygonCollider extends Component {
  class Animation (line 4343) | class Animation extends CCComponent {
  class AudioSource (line 4436) | class AudioSource extends Component {
  class Button (line 4515) | class Button extends Component {
  class Canvas (line 4571) | class Canvas extends Component {
  class Component (line 4594) | class Component extends Object {
  class EditBox (line 4805) | class EditBox extends _RendererUnderSG {
  class Label (line 4861) | class Label extends _RendererUnderSG {
  class LabelOutline (line 4892) | class LabelOutline extends Component {
  class Layout (line 4902) | class Layout extends Component {
  class Mask (line 4940) | class Mask extends _RendererInSG {
  class ProgressBar (line 4947) | class ProgressBar extends Component {
  class _RendererInSG (line 4966) | class _RendererInSG extends _SGComponent {
  class _RendererUnderSG (line 4969) | class _RendererUnderSG extends _SGComponent {
  class _SGComponent (line 4976) | class _SGComponent extends Component {
  class Scrollbar (line 4981) | class Scrollbar extends Component {
  class ScrollView (line 5005) | class ScrollView extends Component {
  class Sprite (line 5220) | class Sprite extends _RendererUnderSG {
  class SpriteDistortion (line 5361) | class SpriteDistortion extends Component {
  class VideoPlayer (line 5371) | class VideoPlayer extends _RendererUnderSG {
  class Widget (line 5399) | class Widget extends Component {
  class EventTarget (line 5507) | class EventTarget {
  class Event (line 5600) | class Event {
  class EventListener (line 5697) | class EventListener {
  class eventManager (line 5769) | class eventManager {
  class Touch (line 5861) | class Touch {
  class loader (line 5908) | class loader extends Pipeline {
  class LoadingItems (line 6085) | class LoadingItems extends CallbacksInvoker {
  class Pipeline (line 6165) | class Pipeline {
  class _ComponentAttributes (line 6323) | class _ComponentAttributes {
  class inputManager (line 6349) | class inputManager {
  type KEY (line 6394) | enum KEY {
  type ImageFormat (line 6498) | enum ImageFormat {
  type Macro (line 6513) | enum Macro {
  class Object (line 6619) | class Object {
  class Flags (line 6646) | class Flags {
  class screen (line 6656) | class screen {
  class sys (line 6674) | class sys {
  class View (line 6814) | class View {
  class ContainerStrategy (line 6987) | class ContainerStrategy {
  class ContentStrategy (line 7002) | class ContentStrategy {
  class EqualToFrame (line 7018) | class EqualToFrame extends ContainerStrategy {
  class ProportionalToFrame (line 7021) | class ProportionalToFrame extends ContainerStrategy {
  class EqualToWindow (line 7024) | class EqualToWindow extends EqualToFrame {
  class ProportionalToWindow (line 7027) | class ProportionalToWindow extends ProportionalToFrame {
  class OriginalContainer (line 7030) | class OriginalContainer extends ContainerStrategy {
  class ResolutionPolicy (line 7034) | class ResolutionPolicy {
  class visibleRect (line 7085) | class visibleRect {
  class _CallbacksHandler (line 7114) | class _CallbacksHandler {
  class CallbacksInvoker (line 7134) | class CallbacksInvoker extends _CallbacksHandler {
  class Details (line 7149) | class Details {
  class url (line 7171) | class url {
  class SpriteFrame (line 7200) | class SpriteFrame extends Asset {
  class Texture2D (line 7300) | class Texture2D extends RawAsset {
  class TextureAtlas (line 7383) | class TextureAtlas {
  class textureCache (line 7519) | class textureCache {
  class _BaseNode (line 7629) | class _BaseNode extends Object {
  class AffineTransform (line 8360) | class AffineTransform {
  class Color (line 8460) | class Color extends ValueType {
  class Rect (line 8700) | class Rect extends ValueType {
  class Size (line 8869) | class Size {
  class Acceleration (line 8964) | class Acceleration {
  class BlendFunc (line 8972) | class BlendFunc {
  type BlendFactor (line 8986) | enum BlendFactor {
  class WebGLColor (line 9000) | class WebGLColor {
  class Vertex2F (line 9008) | class Vertex2F {
  class Vertex3F (line 9015) | class Vertex3F {
  class Tex2F (line 9023) | class Tex2F {
  class Quad2 (line 9031) | class Quad2 {
  class Quad3 (line 9039) | class Quad3 {
  class V3F_C4B_T2F (line 9045) | class V3F_C4B_T2F {
  class V3F_C4B_T2F_Quad (line 9053) | class V3F_C4B_T2F_Quad {
  class V2F_C4B_T2F (line 9061) | class V2F_C4B_T2F {
  class V2F_C4B_T2F_Triangle (line 9069) | class V2F_C4B_T2F_Triangle {
  class ValueType (line 9077) | class ValueType {
  class Vec2 (line 9104) | class Vec2 extends ValueType {
  type EventType (line 9442) | enum EventType {
  type EmitterMode (line 9463) | enum EmitterMode {
  type PositionType (line 9476) | enum PositionType {
  type Orientation (line 9490) | enum Orientation {
  type Transition (line 9515) | enum Transition {
  class EventHandler (line 9535) | class EventHandler {
  type KeyboardReturnType (line 9572) | enum KeyboardReturnType {
  type InputMode (line 9588) | enum InputMode {
  type InputFlag (line 9606) | enum InputFlag {
  type Overflow (line 9622) | enum Overflow {
  type Type (line 9637) | enum Type {
  type Type (line 9651) | enum Type {
  type ResizeMode (line 9666) | enum ResizeMode {
  type AxisDirection (line 9680) | enum AxisDirection {
  type VerticalDirection (line 9693) | enum VerticalDirection {
  type HorizontalDirection (line 9706) | enum HorizontalDirection {
  type Type (line 9719) | enum Type {
  type Mode (line 9734) | enum Mode {
  type Direction (line 9747) | enum Direction {
  type EventType (line 9760) | enum EventType {
  type SpriteType (line 9781) | enum SpriteType {
  type FillType (line 9796) | enum FillType {
  type SizeMode (line 9810) | enum SizeMode {
  type ResourceType (line 9824) | enum ResourceType {
  class EventCustom (line 9837) | class EventCustom extends Event {
  class EventMouse (line 9869) | class EventMouse extends Event {
  class EventTouch (line 9941) | class EventTouch extends Event {
  class EventAcceleration (line 10009) | class EventAcceleration extends Event {
  class EventKeyboard (line 10025) | class EventKeyboard extends Event {
  class Downloader (line 10047) | class Downloader {
  class Loader (line 10081) | class Loader {
  type WrapMode (line 10107) | enum WrapMode {
  type TextAlignment (line 10121) | enum TextAlignment {
  type VerticalTextAlignment (line 10135) | enum VerticalTextAlignment {
  class Skeleton (line 10168) | class Skeleton extends cc._RendererUnderSG {
  class SkeletonData (line 10329) | class SkeletonData extends cc.Asset {
  type AnimationEventType (line 10352) | enum AnimationEventType {
  class array (line 10437) | class array {

FILE: src/github.com/davecgh/go-spew/spew/bypass.go
  constant UnsafeDisabled (line 30) | UnsafeDisabled = false
  constant ptrSize (line 33) | ptrSize = unsafe.Sizeof((*byte)(nil))
  function init (line 65) | func init() {
  function unsafeReflectValue (line 121) | func unsafeReflectValue(v reflect.Value) (rv reflect.Value) {

FILE: src/github.com/davecgh/go-spew/spew/bypasssafe.go
  constant UnsafeDisabled (line 27) | UnsafeDisabled = true
  function unsafeReflectValue (line 35) | func unsafeReflectValue(v reflect.Value) reflect.Value {

FILE: src/github.com/davecgh/go-spew/spew/common.go
  function catchPanic (line 72) | func catchPanic(w io.Writer, v reflect.Value) {
  function handleMethods (line 85) | func handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handl...
  function printBool (line 144) | func printBool(w io.Writer, val bool) {
  function printInt (line 153) | func printInt(w io.Writer, val int64, base int) {
  function printUint (line 158) | func printUint(w io.Writer, val uint64, base int) {
  function printFloat (line 164) | func printFloat(w io.Writer, val float64, precision int) {
  function printComplex (line 170) | func printComplex(w io.Writer, c complex128, floatPrecision int) {
  function printHexPtr (line 185) | func printHexPtr(w io.Writer, p uintptr) {
  type valuesSorter (line 219) | type valuesSorter struct
    method Len (line 279) | func (s *valuesSorter) Len() int {
    method Swap (line 285) | func (s *valuesSorter) Swap(i, j int) {
    method Less (line 326) | func (s *valuesSorter) Less(i, j int) bool {
  function newValuesSorter (line 228) | func newValuesSorter(values []reflect.Value, cs *ConfigState) sort.Inter...
  function canSortSimply (line 256) | func canSortSimply(kind reflect.Kind) bool {
  function valueSortLess (line 295) | func valueSortLess(a, b reflect.Value) bool {
  function sortValues (line 336) | func sortValues(values []reflect.Value, cs *ConfigState) {

FILE: src/github.com/davecgh/go-spew/spew/config.go
  type ConfigState (line 37) | type ConfigState struct
    method Errorf (line 106) | func (c *ConfigState) Errorf(format string, a ...interface{}) (err err...
    method Fprint (line 118) | func (c *ConfigState) Fprint(w io.Writer, a ...interface{}) (n int, er...
    method Fprintf (line 130) | func (c *ConfigState) Fprintf(w io.Writer, format string, a ...interfa...
    method Fprintln (line 141) | func (c *ConfigState) Fprintln(w io.Writer, a ...interface{}) (n int, ...
    method Print (line 153) | func (c *ConfigState) Print(a ...interface{}) (n int, err error) {
    method Printf (line 165) | func (c *ConfigState) Printf(format string, a ...interface{}) (n int, ...
    method Println (line 177) | func (c *ConfigState) Println(a ...interface{}) (n int, err error) {
    method Sprint (line 188) | func (c *ConfigState) Sprint(a ...interface{}) string {
    method Sprintf (line 199) | func (c *ConfigState) Sprintf(format string, a ...interface{}) string {
    method Sprintln (line 210) | func (c *ConfigState) Sprintln(a ...interface{}) string {
    method NewFormatter (line 231) | func (c *ConfigState) NewFormatter(v interface{}) fmt.Formatter {
    method Fdump (line 237) | func (c *ConfigState) Fdump(w io.Writer, a ...interface{}) {
    method Dump (line 264) | func (c *ConfigState) Dump(a ...interface{}) {
    method Sdump (line 270) | func (c *ConfigState) Sdump(a ...interface{}) string {
    method convertArgs (line 279) | func (c *ConfigState) convertArgs(args []interface{}) (formatters []in...
  function NewDefaultConfig (line 295) | func NewDefaultConfig() *ConfigState {

FILE: src/github.com/davecgh/go-spew/spew/dump.go
  type dumpState (line 51) | type dumpState struct
    method indent (line 62) | func (d *dumpState) indent() {
    method unpackValue (line 73) | func (d *dumpState) unpackValue(v reflect.Value) reflect.Value {
    method dumpPtr (line 81) | func (d *dumpState) dumpPtr(v reflect.Value) {
    method dumpSlice (line 161) | func (d *dumpState) dumpSlice(v reflect.Value) {
    method dump (line 251) | func (d *dumpState) dump(v reflect.Value) {
  function fdump (line 453) | func fdump(cs *ConfigState, w io.Writer, a ...interface{}) {
  function Fdump (line 472) | func Fdump(w io.Writer, a ...interface{}) {
  function Sdump (line 478) | func Sdump(a ...interface{}) string {
  function Dump (line 507) | func Dump(a ...interface{}) {

FILE: src/github.com/davecgh/go-spew/spew/format.go
  constant supportedFlags (line 28) | supportedFlags = "0-+# "
  type formatState (line 34) | type formatState struct
    method buildDefaultFormat (line 47) | func (f *formatState) buildDefaultFormat() (format string) {
    method constructOrigFormat (line 65) | func (f *formatState) constructOrigFormat(verb rune) (format string) {
    method unpackValue (line 94) | func (f *formatState) unpackValue(v reflect.Value) reflect.Value {
    method formatPtr (line 105) | func (f *formatState) formatPtr(v reflect.Value) {
    method format (line 201) | func (f *formatState) format(v reflect.Value) {
    method Format (line 371) | func (f *formatState) Format(fs fmt.State, verb rune) {
  function newFormatter (line 394) | func newFormatter(cs *ConfigState, v interface{}) fmt.Formatter {
  function NewFormatter (line 417) | func NewFormatter(v interface{}) fmt.Formatter {

FILE: src/github.com/davecgh/go-spew/spew/spew.go
  function Errorf (line 32) | func Errorf(format string, a ...interface{}) (err error) {
  function Fprint (line 44) | func Fprint(w io.Writer, a ...interface{}) (n int, err error) {
  function Fprintf (line 56) | func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err e...
  function Fprintln (line 67) | func Fprintln(w io.Writer, a ...interface{}) (n int, err error) {
  function Print (line 79) | func Print(a ...interface{}) (n int, err error) {
  function Printf (line 91) | func Printf(format string, a ...interface{}) (n int, err error) {
  function Println (line 103) | func Println(a ...interface{}) (n int, err error) {
  function Sprint (line 114) | func Sprint(a ...interface{}) string {
  function Sprintf (line 125) | func Sprintf(format string, a ...interface{}) string {
  function Sprintln (line 136) | func Sprintln(a ...interface{}) string {
  function convertArgs (line 142) | func convertArgs(args []interface{}) (formatters []interface{}) {

FILE: src/github.com/dolotech/leaf/chanrpc/chanrpc.go
  type Server (line 11) | type Server struct
    method Register (line 52) | func (s *Server) Register(id interface{}, f interface{}) {
    method ret (line 66) | func (s *Server) ret(ci *CallInfo, ri *RetInfo) (err error) {
    method Exec (line 78) | func (s *Server) Exec(ci *CallInfo) {
    method Go (line 93) | func (s *Server) Go(id interface{}, args ...interface{}) {
    method Call0 (line 108) | func (s *Server) Call0(id interface{}, args ...interface{}) error {
    method Call1 (line 113) | func (s *Server) Call1(id interface{}, args ...interface{}) (interface...
    method CallN (line 118) | func (s *Server) CallN(id interface{}, args ...interface{}) ([]interfa...
    method Close (line 122) | func (s *Server) Close() {
    method Open (line 133) | func (s *Server) Open(l int) *Client {
  type CallInfo (line 16) | type CallInfo struct
  type RetInfo (line 23) | type RetInfo struct
  type Client (line 29) | type Client struct
    method Attach (line 146) | func (c *Client) Attach(s *Server) {
    method call (line 150) | func (c *Client) call(ci *CallInfo, block bool) (err error) {
    method f (line 169) | func (c *Client) f(id interface{}, n int) (*reflect.Value, error) {
    method Call0 (line 180) | func (c *Client) Call0(id interface{}, args ...interface{}) error {
    method Call1 (line 199) | func (c *Client) Call1(id interface{}, args ...interface{}) (interface...
    method CallN (line 217) | func (c *Client) CallN(id interface{}, args ...interface{}) ([]interfa...
    method asynCall (line 236) | func (c *Client) asynCall(id interface{}, args []interface{}, cb inter...
    method AsynCall (line 254) | func (c *Client) AsynCall(id interface{}, _args ...interface{}) {
    method Cb (line 301) | func (c *Client) Cb(ri *RetInfo) {
    method Close (line 306) | func (c *Client) Close() {
    method Idle (line 312) | func (c *Client) Idle() bool {
  function NewServer (line 36) | func NewServer(l int) *Server {
  function assert (line 43) | func assert(i interface{}) []interface{} {
  function NewClient (line 139) | func NewClient(l int) *Client {
  function execCb (line 284) | func execCb(ri *RetInfo) {

FILE: src/github.com/dolotech/leaf/chanrpc/example_test.go
  function TestClient_AsynCall (line 8) | func TestClient_AsynCall(t *testing.T) {

FILE: src/github.com/dolotech/leaf/gate/agent.go
  type Agent (line 7) | type Agent interface

FILE: src/github.com/dolotech/leaf/gate/gate.go
  type Gate (line 12) | type Gate struct
    method Run (line 31) | func (gate *Gate) Run(closeSig chan bool) {
    method OnDestroy (line 84) | func (gate *Gate) OnDestroy() {}
  type agent (line 86) | type agent struct
    method Run (line 92) | func (a *agent) Run() {
    method OnClose (line 115) | func (a *agent) OnClose() {
    method WriteMsg (line 124) | func (a *agent) WriteMsg(msg interface{}) {
    method LocalAddr (line 138) | func (a *agent) LocalAddr() net.Addr {
    method RemoteAddr (line 142) | func (a *agent) RemoteAddr() net.Addr {
    method Close (line 146) | func (a *agent) Close() {
    method Destroy (line 150) | func (a *agent) Destroy() {
    method UserData (line 154) | func (a *agent) UserData() interface{} {
    method SetUserData (line 158) | func (a *agent) SetUserData(data interface{}) {

FILE: src/github.com/dolotech/leaf/leaf.go
  function Run (line 10) | func Run(mods ...module.Module) {

FILE: src/github.com/dolotech/leaf/module/go_test.go
  function TestSkeleton_Go (line 8) | func TestSkeleton_Go(t *testing.T) {

FILE: src/github.com/dolotech/leaf/module/module.go
  type Module (line 8) | type Module interface
  type module (line 14) | type module struct
  function Register (line 22) | func Register(mi Module) {
  function Init (line 30) | func Init() {
  function Destroy (line 42) | func Destroy() {
  function run (line 51) | func run(m *module) {
  function destroy (line 57) | func destroy(m *module) {

FILE: src/github.com/dolotech/leaf/module/skeleton.go
  type Skeleton (line 11) | type Skeleton struct
    method Init (line 24) | func (s *Skeleton) Init() {
    method Run (line 47) | func (s *Skeleton) Run(closeSig chan bool) {
    method AfterFunc (line 74) | func (s *Skeleton) AfterFunc(d time.Duration, cb func()) *timer.Timer {
    method CronFunc (line 82) | func (s *Skeleton) CronFunc(cronExpr *timer.CronExpr, cb func()) *time...
    method AsynCall (line 110) | func (s *Skeleton) AsynCall(server *chanrpc.Server, id interface{}, ar...
    method RegisterChanRPC (line 119) | func (s *Skeleton) RegisterChanRPC(id interface{}, f interface{}) {

FILE: src/github.com/dolotech/leaf/network/agent.go
  type Agent (line 3) | type Agent interface

FILE: src/github.com/dolotech/leaf/network/conn.go
  type Conn (line 7) | type Conn interface

FILE: src/github.com/dolotech/leaf/network/json/json.go
  type Processor (line 12) | type Processor struct
    method Register (line 37) | func (p *Processor) Register(msg interface{}) string {
    method SetRouter (line 57) | func (p *Processor) SetRouter(msg interface{}, msgRouter *chanrpc.Serv...
    method SetHandler (line 72) | func (p *Processor) SetHandler(msg interface{}, msgHandler interface{}) {
    method SetRawHandler (line 88) | func (p *Processor) SetRawHandler(msgID string, msgRawHandler MsgHandl...
    method Route (line 98) | func (p *Processor) Route(msg, userData interface{}) error {
    method Unmarshal (line 133) | func (p *Processor) Unmarshal(data []byte) (interface{}, error) {
    method Marshal (line 167) | func (p *Processor) Marshal(msg interface{}) ([][]byte, error) {
  type MsgInfo (line 16) | type MsgInfo struct
  type MsgHandler (line 23) | type MsgHandler
  type MsgRaw (line 25) | type MsgRaw struct
  function NewProcessor (line 30) | func NewProcessor() *Processor {

FILE: src/github.com/dolotech/leaf/network/processor.go
  type Processor (line 3) | type Processor interface

FILE: src/github.com/dolotech/leaf/network/protobuf/protobuf.go
  type Processor (line 17) | type Processor struct
    method SetByteOrder (line 45) | func (p *Processor) SetByteOrder(littleEndian bool) {
    method Register (line 50) | func (p *Processor) Register(msg interface{}) uint16 {
    method SetRouter (line 71) | func (p *Processor) SetRouter(msg  interface{}, msgRouter *chanrpc.Ser...
    method SetHandler (line 82) | func (p *Processor) SetHandler(msg , msgHandler interface{}) {
    method SetRawHandler (line 93) | func (p *Processor) SetRawHandler(id uint16, msgRawHandler MsgHandler) {
    method Route (line 102) | func (p *Processor) Route(msg , userData interface{}) error {
    method Unmarshal (line 133) | func (p *Processor) Unmarshal(data []byte) (interface{}, error) {
    method Marshal (line 160) | func (p *Processor) Marshal(msg interface{}) ([][]byte, error) {
    method Range (line 183) | func (p *Processor) Range(f func(id uint16, t reflect.Type)) {
  type MsgInfo (line 23) | type MsgInfo struct
  type MsgHandler (line 30) | type MsgHandler
  type MsgRaw (line 32) | type MsgRaw struct
  function NewProcessor (line 37) | func NewProcessor() *Processor {

FILE: src/github.com/dolotech/leaf/network/tcp_client.go
  type TCPClient (line 10) | type TCPClient struct
    method Start (line 30) | func (client *TCPClient) Start() {
    method init (line 39) | func (client *TCPClient) init() {
    method dial (line 72) | func (client *TCPClient) dial() net.Conn {
    method connect (line 85) | func (client *TCPClient) connect() {
    method Close (line 120) | func (client *TCPClient) Close() {

FILE: src/github.com/dolotech/leaf/network/tcp_conn.go
  type ConnSet (line 9) | type ConnSet
  type TCPConn (line 11) | type TCPConn struct
    method doDestroy (line 46) | func (tcpConn *TCPConn) doDestroy() {
    method Destroy (line 56) | func (tcpConn *TCPConn) Destroy() {
    method Close (line 63) | func (tcpConn *TCPConn) Close() {
    method doWrite (line 74) | func (tcpConn *TCPConn) doWrite(b []byte) {
    method Write (line 85) | func (tcpConn *TCPConn) Write(b []byte) {
    method Read (line 95) | func (tcpConn *TCPConn) Read(b []byte) (int, error) {
    method LocalAddr (line 99) | func (tcpConn *TCPConn) LocalAddr() net.Addr {
    method RemoteAddr (line 103) | func (tcpConn *TCPConn) RemoteAddr() net.Addr {
    method ReadMsg (line 107) | func (tcpConn *TCPConn) ReadMsg() ([]byte, error) {
    method WriteMsg (line 111) | func (tcpConn *TCPConn) WriteMsg(args ...[]byte) error {
  function newTCPConn (line 19) | func newTCPConn(conn net.Conn, pendingWriteNum int, msgParser *MsgParser...

FILE: src/github.com/dolotech/leaf/network/tcp_msg.go
  type MsgParser (line 13) | type MsgParser struct
    method SetMsgLen (line 31) | func (p *MsgParser) SetMsgLen(lenMsgLen int, minMsgLen uint32, maxMsgL...
    method SetByteOrder (line 60) | func (p *MsgParser) SetByteOrder(littleEndian bool) {
    method Read (line 65) | func (p *MsgParser) Read(conn *TCPConn) ([]byte, error) {
    method Write (line 110) | func (p *MsgParser) Write(conn *TCPConn, args ...[]byte) error {
  function NewMsgParser (line 20) | func NewMsgParser() *MsgParser {

FILE: src/github.com/dolotech/leaf/network/tcp_server.go
  type TCPServer (line 10) | type TCPServer struct
    method Start (line 29) | func (server *TCPServer) Start() {
    method init (line 34) | func (server *TCPServer) init() {
    method run (line 62) | func (server *TCPServer) run() {
    method Close (line 116) | func (server *TCPServer) Close() {

FILE: src/github.com/dolotech/leaf/network/ws_client.go
  type WSClient (line 10) | type WSClient struct
    method Start (line 26) | func (client *WSClient) Start() {
    method init (line 35) | func (client *WSClient) init() {
    method dial (line 73) | func (client *WSClient) dial() *websocket.Conn {
    method connect (line 86) | func (client *WSClient) connect() {
    method Close (line 122) | func (client *WSClient) Close() {

FILE: src/github.com/dolotech/leaf/network/ws_conn.go
  type WebsocketConnSet (line 11) | type WebsocketConnSet
  type WSConn (line 13) | type WSConn struct
    method doDestroy (line 48) | func (wsConn *WSConn) doDestroy() {
    method Destroy (line 58) | func (wsConn *WSConn) Destroy() {
    method Close (line 65) | func (wsConn *WSConn) Close() {
    method doWrite (line 76) | func (wsConn *WSConn) doWrite(b []byte) {
    method LocalAddr (line 86) | func (wsConn *WSConn) LocalAddr() net.Addr {
    method RemoteAddr (line 90) | func (wsConn *WSConn) RemoteAddr() net.Addr {
    method ReadMsg (line 95) | func (wsConn *WSConn) ReadMsg() ([]byte, error) {
    method WriteMsg (line 101) | func (wsConn *WSConn) WriteMsg(args ...[]byte) error {
  function newWSConn (line 21) | func newWSConn(conn *websocket.Conn, pendingWriteNum int, maxMsgLen uint...

FILE: src/github.com/dolotech/leaf/network/ws_server.go
  type WSServer (line 13) | type WSServer struct
    method Start (line 79) | func (server *WSServer) Start() {
    method Close (line 143) | func (server *WSServer) Close() {
  type WSHandler (line 26) | type WSHandler struct
    method ServeHTTP (line 37) | func (handler *WSHandler) ServeHTTP(w http.ResponseWriter, r *http.Req...

FILE: src/github.com/dolotech/leaf/room/interface.go
  type IOccupant (line 3) | type IOccupant interface
  type ICreator (line 7) | type ICreator interface
  type IRoom (line 10) | type IRoom interface

FILE: src/github.com/dolotech/leaf/room/msg_loop.go
  type MsgLoop (line 12) | type MsgLoop struct
    method Closed (line 30) | func (r *MsgLoop) Closed() chan struct{} {
    method msgLoop (line 33) | func (r *MsgLoop) msgLoop() {
    method Close (line 51) | func (r *MsgLoop) Close(m IRoom) {
    method Send (line 63) | func (r *MsgLoop) Send(o IOccupant, m interface{}) error {
  function NewMsgLoop (line 19) | func NewMsgLoop() *MsgLoop {
  type msgObj (line 58) | type msgObj struct
  type Log (line 73) | type Log struct
    method Info (line 81) | func (r *Log) Info(args ...interface{}) {
    method Infof (line 85) | func (r *Log) Infof(format string, args ...interface{}) {
    method Error (line 89) | func (r *Log) Error(args ...interface{}) {
    method Debug (line 92) | func (r *Log) Debug(args ...interface{}) {
    method Debugf (line 99) | func (r *Log) Debugf(format string, args ...interface{}) {
    method Errorf (line 105) | func (r *Log) Errorf(format string, args ...interface{}) {
    method parseLog (line 109) | func (r *Log) parseLog(args ...interface{}) []interface{} {
  function NewLog (line 77) | func NewLog(room IRoom) *Log {

FILE: src/github.com/dolotech/leaf/room/room_list.go
  function OnMessage (line 12) | func OnMessage(m interface{}, a gate.Agent) {
  function init (line 30) | func init() {
  function Init (line 36) | func Init(h ICreator) {
  type roomlist (line 40) | type roomlist struct
    method createNumber (line 78) | func (this *roomlist) createNumber() string {
  function FindRoom (line 45) | func FindRoom() IRoom {
  function GetRoom (line 56) | func GetRoom(rid string) IRoom {
  function SetRoom (line 63) | func SetRoom(room IRoom) string {
  function DelRoom (line 72) | func DelRoom(room IRoom) {
  function Each (line 90) | func Each(f func(o IRoom) bool) {
  function GetRooms (line 99) | func GetRooms() []IRoom {

FILE: src/github.com/dolotech/leaf/timer/cronexpr.go
  type CronExpr (line 20) | type CronExpr struct
    method matchDay (line 174) | func (e *CronExpr) matchDay(t time.Time) bool {
    method Next (line 190) | func (e *CronExpr) Next(t time.Time) time.Time {
  function NewCronExpr (line 30) | func NewCronExpr(expr string) (cronExpr *CronExpr, err error) {
  function parseCronField (line 85) | func parseCronField(field string, min int, max int) (cronField uint64, e...

FILE: src/github.com/dolotech/leaf/timer/example_test.go
  function TestTimer (line 8) | func TestTimer(t *testing.T) {
  function TestNewCronExpr (line 29) | func TestNewCronExpr(t *testing.T) {
  function TestDispatcher_CronFunc (line 45) | func TestDispatcher_CronFunc(t *testing.T) {

FILE: src/github.com/dolotech/leaf/timer/timer.go
  type Dispatcher (line 11) | type Dispatcher struct
    method AfterFunc (line 51) | func (disp *Dispatcher) AfterFunc(d time.Duration, cb func()) *Timer {
    method CronFunc (line 71) | func (disp *Dispatcher) CronFunc(cronExpr *CronExpr, _cb func()) *Cron {
  function NewDispatcher (line 15) | func NewDispatcher(l int) *Dispatcher {
  type Timer (line 22) | type Timer struct
    method Stop (line 27) | func (t *Timer) Stop() {
    method Cb (line 32) | func (t *Timer) Cb() {
  type Cron (line 61) | type Cron struct
    method Stop (line 65) | func (c *Cron) Stop() {

FILE: src/github.com/dolotech/leaf/version.go
  constant version (line 3) | version = "1.1.2"

FILE: src/github.com/dolotech/lib/csv/bench_test.go
  function loadData (line 20) | func loadData() []byte {
  type Price (line 40) | type Price struct
  function BenchmarkUnmarshal (line 48) | func BenchmarkUnmarshal(b *testing.B) {

FILE: src/github.com/dolotech/lib/csv/cfield.go
  type decoderFn (line 16) | type decoderFn
  type cfield (line 19) | type cfield struct
    method assignUnmarshaller (line 36) | func (cf *cfield) assignUnmarshaller(code int) {
    method unmarshalPointer (line 44) | func (cf *cfield) unmarshalPointer(cell *reflect.Value, row *Row) error {
    method unmarshalValue (line 52) | func (cf *cfield) unmarshalValue(cell *reflect.Value, row *Row) error {
    method assignDecoder (line 59) | func (cf *cfield) assignDecoder() {
    method decodeBool (line 78) | func (cf *cfield) decodeBool(cell *reflect.Value, row *Row) error {
    method decodeUint32 (line 99) | func (cf *cfield) decodeUint32(cell *reflect.Value, row *Row) error {
    method decodeInt (line 110) | func (cf *cfield) decodeInt(cell *reflect.Value, row *Row) error {
    method decodeString (line 122) | func (cf *cfield) decodeString(cell *reflect.Value, row *Row) error {
    method decodeFloat (line 129) | func (cf *cfield) decodeFloat(bit int) decoderFn {
    method ignoreValue (line 145) | func (cf *cfield) ignoreValue(cell *reflect.Value, row *Row) error {
    method unassignedDecoder (line 151) | func (cf *cfield) unassignedDecoder(cell *reflect.Value, row *Row) err...
  function newCfield (line 25) | func newCfield(index int, sf *reflect.StructField) cfield {

FILE: src/github.com/dolotech/lib/csv/csv.go
  function fieldHeaderName (line 18) | func fieldHeaderName(f reflect.StructField) (string, bool) {

FILE: src/github.com/dolotech/lib/csv/csv_test.go
  type simple (line 16) | type simple struct
  function TestHeader (line 24) | func TestHeader(t *testing.T) {
  function TestHeaders (line 52) | func TestHeaders(t *testing.T) {

FILE: src/github.com/dolotech/lib/csv/decode.go
  type Row (line 19) | type Row struct
    method At (line 25) | func (r *Row) At(i int) string {
    method Named (line 30) | func (r *Row) Named(n string) (string, error) {
  type decoder (line 40) | type decoder struct
    method unmarshal (line 83) | func (dec *decoder) unmarshal() error {
    method newRow (line 105) | func (dec *decoder) newRow(raw []string) *Row {
    method mapFieldsToCols (line 157) | func (dec *decoder) mapFieldsToCols(cols []string) {
    method set (line 238) | func (dec *decoder) set(row *Row, el *reflect.Value) error {
  type Unmarshaler (line 49) | type Unmarshaler interface
  function Unmarshal (line 66) | func Unmarshal(doc []byte, v interface{}) error {
  function checkForSlice (line 113) | func checkForSlice(v interface{}) (reflect.Value, error) {
  constant impsVal (line 131) | impsVal int = 1
  constant impsPtr (line 134) | impsPtr int = 2
  function impsUnmarshaller (line 138) | func impsUnmarshaller(et reflect.Type, i interface{}) (int, error) {
  function exportedFields (line 190) | func exportedFields(t reflect.Type) []*reflect.StructField {
  function newDecoder (line 214) | func newDecoder(doc []byte, rv reflect.Value) (*decoder, error) {

FILE: src/github.com/dolotech/lib/csv/decode_test.go
  type Q (line 15) | type Q struct
  function TestUnmarshal (line 25) | func TestUnmarshal(t *testing.T) {
  function TestMarshalErrors (line 61) | func TestMarshalErrors(t *testing.T) {
  function TestExportedFields (line 80) | func TestExportedFields(t *testing.T) {
  type T (line 98) | type T struct
  function TestMapFields (line 105) | func TestMapFields(t *testing.T) {
  type Um (line 127) | type Um struct
    method UnmarshalCSV (line 135) | func (u *Um) UnmarshalCSV(val string, row *Row) error {
  type U (line 131) | type U struct
  function TestCustomUnMarshaller (line 141) | func TestCustomUnMarshaller(t *testing.T) {

FILE: src/github.com/dolotech/lib/csv/encode.go
  type Marshaler (line 20) | type Marshaler interface
  type encoder (line 24) | type encoder struct
    method encodeAll (line 105) | func (enc *encoder) encodeAll(data reflect.Value) error {
    method encodeRow (line 125) | func (enc *encoder) encodeRow(v reflect.Value) ([]string, error) {
    method encodeCol (line 147) | func (enc *encoder) encodeCol(fv reflect.Value, st reflect.StructTag) ...
  function Marshal (line 45) | func Marshal(i interface{}) ([]byte, error) {
  function newEncoder (line 75) | func newEncoder(el reflect.Value) (*encoder, error) {
  function colNames (line 90) | func colNames(t reflect.Type) (out []string) {
  function encodeFloat (line 174) | func encodeFloat(bits int, f reflect.Value) string {
  function encodeBool (line 178) | func encodeBool(b bool, st reflect.StructTag) string {
  function encodeInterface (line 188) | func encodeInterface(fv reflect.Value, st reflect.StructTag) string {

FILE: src/github.com/dolotech/lib/csv/encode_test.go
  type X (line 15) | type X struct
  type P (line 19) | type P struct
    method MarshalCSV (line 24) | func (p P) MarshalCSV() ([]byte, error) {
  function TestMarshal_without_a_slice (line 28) | func TestMarshal_without_a_slice(t *testing.T) {
  function TestEncodeFieldValue (line 36) | func TestEncodeFieldValue(t *testing.T) {

FILE: src/github.com/dolotech/lib/csv/example_marshal_test.go
  function ExampleMarshal (line 15) | func ExampleMarshal() {

FILE: src/github.com/dolotech/lib/csv/example_test.go
  type Person (line 15) | type Person struct
  type Address (line 22) | type Address struct
    method UnmarshalCSV (line 27) | func (a *Address) UnmarshalCSV(val string, row *Row) error {
  function ExampleUnmarshal (line 37) | func ExampleUnmarshal() {

FILE: src/github.com/dolotech/lib/db/client.go
  type Client (line 15) | type Client struct
    method Engine (line 70) | func (cl *Client) Engine() *xorm.Engine {
    method Close (line 75) | func (cl *Client) Close() error {
    method ShowSQL (line 90) | func (cl *Client) ShowSQL(show bool) {
    method NewSession (line 95) | func (cl *Client) NewSession() *xorm.Session {
    method GetNextSerial (line 100) | func (cl *Client) GetNextSerial(serialbean SerialInteractor) (int, err...
    method SimpleValue (line 111) | func (cl *Client) SimpleValue(sql string) (string, error) {
    method SimpleIntValue (line 124) | func (cl *Client) SimpleIntValue(sql string) (int, error) {
    method Insert (line 137) | func (cl *Client) Insert(bean interface{}, omitColumns ...string) (int...
    method Get (line 142) | func (cl *Client) Get(bean interface{}) (bool, error) {
    method WhereGet (line 148) | func (cl *Client) WhereGet(bean interface{}, querystring string, args ...
    method WhereFind (line 153) | func (cl *Client) WhereFind(bean interface{}, querystring string, args...
    method Update (line 158) | func (cl *Client) Update(id int, bean interface{}, omitClumns ...strin...
    method Delete (line 171) | func (cl *Client) Delete(bean interface{}) error {
    method Where (line 188) | func (cl *Client) Where(beans interface{}, querystring string, args .....
    method In (line 193) | func (cl *Client) In(beans interface{}, querystring string, args ...in...
    method SQL (line 198) | func (cl *Client) SQL(beans interface{}, querystring string, args ...i...
    method QueryValue (line 203) | func (cl *Client) QueryValue(sqlstr string) ([]map[string][]byte, erro...
    method CreateTables (line 209) | func (cl *Client) CreateTables(beans ...interface{}) error {
    method Sync (line 214) | func (cl *Client) Sync(beans ...interface{}) error {
  function Init (line 24) | func Init(url string) error{
  function C (line 33) | func C() *Client {
  function NewClient (line 38) | func NewClient(driver, connstr string) (*Client, error) {
  type SerialInteractor (line 85) | type SerialInteractor interface

FILE: src/github.com/dolotech/lib/db/client_test.go
  constant UCDBURL (line 11) | UCDBURL = "postgres://postgres:postgres@192.168.1.240:3021/postgres?sslm...
  function Test_NewClient (line 13) | func Test_NewClient(t *testing.T) {
  function Test_Insert (line 24) | func Test_Insert(t *testing.T) {

FILE: src/github.com/dolotech/lib/filter/filter.go
  function LoadDicFiles (line 18) | func LoadDicFiles(dicFiles []string) { //load serveral dictionary file t...
  function buildDicFileTrie (line 26) | func buildDicFileTrie() { //when server start-up the trie will be built ...
  type Seps (line 50) | type Seps
    method Len (line 52) | func (s Seps) Len() int {
    method Swap (line 55) | func (s Seps) Swap(i, j int) {
    method Less (line 58) | func (s Seps) Less(i, j int) bool {
  function FindSepC (line 62) | func FindSepC(seps Seps, charactor rune) bool {
  function FilterText (line 68) | func FilterText(dicFile string, text []rune, seps Seps, rep rune) {
  function IsInValid (line 121) | func IsInValid(dicFile string, text []rune, seps Seps, rep rune)(valid b...

FILE: src/github.com/dolotech/lib/filter/trie.go
  type ChildNodeType (line 17) | type ChildNodeType
    method Len (line 20) | func (c ChildNodeType) Len() int {
    method Swap (line 25) | func (c ChildNodeType) Swap(i, j int) {
    method Less (line 30) | func (c ChildNodeType) Less(i, j int) bool {
  type Node (line 35) | type Node struct
    method GetChildNodeByVal (line 45) | func (N *Node) GetChildNodeByVal(val rune) *Node {
    method BinGetChildNodeByVal (line 56) | func (N *Node) BinGetChildNodeByVal(val rune) *Node {
    method InsertChildNodeByVal (line 76) | func (N *Node) InsertChildNodeByVal(val rune) *Node {
  type Trie (line 90) | type Trie struct
    method InitRootNode (line 94) | func (T *Trie) InitRootNode() {
    method DumpTrie (line 106) | func (T *Trie) DumpTrie(node *Node) {
    method TraceBackToRoot (line 152) | func (T *Trie) TraceBackToRoot(node *Node) []*Node {
    method FindNodeByPath (line 164) | func (T *Trie) FindNodeByPath(nodes []*Node) *Node { //nodes not conta...
    method BuildTrie (line 178) | func (T *Trie) BuildTrie(dictionary [][]byte) {

FILE: src/github.com/dolotech/lib/goevent/go_event.go
  type Event (line 10) | type Event struct
    method Trigger (line 18) | func (p *Event) Trigger(args ...interface{}) error {
    method On (line 49) | func (p *Event) On(f interface{}) error {
    method Off (line 63) | func (p *Event) Off(f interface{}) error {
    method checkFuncSignature (line 87) | func (p *Event) checkFuncSignature(f interface{}) (*reflect.Value, err...
    method validateArgs (line 113) | func (p *Event) validateArgs(types []reflect.Type) error {
  function fnArgTypes (line 129) | func fnArgTypes(fn reflect.Value) []reflect.Type {

FILE: src/github.com/dolotech/lib/grpool/grpool.go
  type worker (line 8) | type worker struct
    method start (line 14) | func (w *worker) start() {
  function newWorker (line 32) | func newWorker(pool chan *worker) *worker {
  type dispatcher (line 41) | type dispatcher struct
    method dispatch (line 47) | func (d *dispatcher) dispatch() {
  function newDispatcher (line 67) | func newDispatcher(workerPool chan *worker, jobQueue chan Job) *dispatch...
  type Job (line 84) | type Job
  type Pool (line 86) | type Pool struct
    method JobDone (line 113) | func (p *Pool) JobDone() {
    method WaitCount (line 119) | func (p *Pool) WaitCount(count int) {
    method WaitAll (line 124) | func (p *Pool) WaitAll() {
    method Release (line 129) | func (p *Pool) Release() {
  function NewPool (line 97) | func NewPool(numWorkers int, jobQueueLen int) *Pool {

FILE: src/github.com/dolotech/lib/grpool/grpool_test.go
  function init (line 14) | func init() {
  function TestNewWorker (line 20) | func TestNewWorker(t *testing.T) {
  function TestNewPool (line 42) | func TestNewPool(t *testing.T) {
  function TestRelease (line 68) | func TestRelease(t *testing.T) {
  function BenchmarkPool (line 93) | func BenchmarkPool(b *testing.B) {

FILE: src/github.com/dolotech/lib/pse/pse_darwin.go
  function ProcUsage (line 12) | func ProcUsage(pcpu *float64, rss, vss *int64) error {

FILE: src/github.com/dolotech/lib/pse/pse_freebsd.go
  function ProcUsage (line 59) | func ProcUsage(pcpu *float64, rss, vss *int64) error {

FILE: src/github.com/dolotech/lib/pse/pse_linux.go
  constant utimePos (line 24) | utimePos = 13
  constant stimePos (line 25) | stimePos = 14
  constant startPos (line 26) | startPos = 21
  constant vssPos (line 27) | vssPos   = 22
  constant rssPos (line 28) | rssPos   = 23
  function init (line 31) | func init() {
  function periodic (line 39) | func periodic() {
  function ProcUsage (line 78) | func ProcUsage(pcpu *float64, rss, vss *int64) error {
  constant asciiZero (line 98) | asciiZero = 48
  constant asciiNine (line 99) | asciiNine = 57
  function parseInt64 (line 104) | func parseInt64(d []byte) (n int64) {

FILE: src/github.com/dolotech/lib/pse/pse_rumprun.go
  function ProcUsage (line 7) | func ProcUsage(pcpu *float64, rss, vss *int64) error {

FILE: src/github.com/dolotech/lib/pse/pse_solaris.go
  function ProcUsage (line 6) | func ProcUsage(pcpu *float64, rss, vss *int64) error {

FILE: src/github.com/dolotech/lib/pse/pse_test.go
  function TestPSEmulation (line 13) | func TestPSEmulation(t *testing.T) {

FILE: src/github.com/dolotech/lib/pse/pse_windows.go
  constant maxQuerySize (line 42) | maxQuerySize = 512
  type PDH_HQUERY (line 50) | type PDH_HQUERY
  type PDH_HCOUNTER (line 51) | type PDH_HCOUNTER
  constant PDH_FMT_DOUBLE (line 56) | PDH_FMT_DOUBLE   = 0x00000200
  constant PDH_INVALID_DATA (line 57) | PDH_INVALID_DATA = 0xC0000BC6
  constant PDH_MORE_DATA (line 58) | PDH_MORE_DATA    = 0x800007D2
  type PDH_FMT_COUNTERVALUE_DOUBLE (line 62) | type PDH_FMT_COUNTERVALUE_DOUBLE struct
  type PDH_FMT_COUNTERVALUE_ITEM_DOUBLE (line 69) | type PDH_FMT_COUNTERVALUE_ITEM_DOUBLE struct
  function pdhAddCounter (line 74) | func pdhAddCounter(hQuery PDH_HQUERY, szFullCounterPath string, dwUserDa...
  function pdhOpenQuery (line 88) | func pdhOpenQuery(datasrc *uint16, userdata uint32, query *PDH_HQUERY) e...
  function pdhCollectQueryData (line 96) | func pdhCollectQueryData(hQuery PDH_HQUERY) error {
  function pdhGetFormattedCounterArrayDouble (line 106) | func pdhGetFormattedCounterArrayDouble(hCounter PDH_HCOUNTER, lpdwBuffer...
  function getCounterArrayData (line 117) | func getCounterArrayData(counter PDH_HCOUNTER) ([]float64, error) {
  function getProcessImageName (line 149) | func getProcessImageName() (name string) {
  function initCounters (line 156) | func initCounters() (err error) {
  function ProcUsage (line 197) | func ProcUsage(pcpu *float64, rss, vss *int64) error {

FILE: src/github.com/dolotech/lib/pse/pse_windows_test.go
  function checkValues (line 15) | func checkValues(t *testing.T, pcpu, tPcpu float64, rss, tRss int64) {
  function TestPSEmulationWin (line 36) | func TestPSEmulationWin(t *testing.T) {

FILE: src/github.com/dolotech/lib/route/route_msg.go
  type Route (line 8) | type Route
    method Emit (line 10) | func (this *Route) Emit(msg interface{}, arg ...interface{}) {
    method Regist (line 23) | func (this *Route) Regist(msg, f interface{}) {

FILE: src/github.com/dolotech/lib/route/router_test.go
  function TestNewRoute (line 5) | func TestNewRoute(t *testing.T) {

FILE: src/github.com/dolotech/lib/utils/aes.go
  function SetKey (line 13) | func  SetKey(key []byte) ([]byte,error){
  function AesEncrypt (line 32) | func  AesEncrypt(key []byte,strMesg []byte) ([]byte, error) {
  function AesDecrypt (line 50) | func AesDecrypt(key []byte,src []byte) (strDesc []byte, err error) {

FILE: src/github.com/dolotech/lib/utils/debug.go
  type variable (line 17) | type variable struct
    method dump (line 25) | func (v *variable) dump(val reflect.Value, name string) {
    method printType (line 64) | func (v *variable) printType(name string, vv interface{}) {
    method printValue (line 69) | func (v *variable) printValue(name string, vv interface{}) {
    method printIndent (line 74) | func (v *variable) printIndent() {
  function Dump (line 83) | func Dump(v interface{}) {
  function Sdump (line 92) | func Sdump(v interface{}) string {

FILE: src/github.com/dolotech/lib/utils/helper.go
  function avg (line 11) | func avg(items []time.Duration) time.Duration {
  function toH (line 19) | func toH(bytes uint64) string {
  function toS (line 32) | func toS(d time.Duration) string {
  function printGC (line 59) | func printGC(memStats *runtime.MemStats, gcstats *debug.GCStats) string {
  function GCSummary (line 88) | func GCSummary() string {

FILE: src/github.com/dolotech/lib/utils/list.go
  function NewList (line 8) | func NewList() *List {
  type List (line 12) | type List struct
    method Get (line 17) | func (this *List) Get(f func(interface{}) bool) interface{} {
    method Add (line 28) | func (this *List) Add(value interface{}) {
    method Pure (line 34) | func (this *List) Pure() {
    method Del (line 41) | func (this *List) Del(value interface{}) {
    method Delete (line 52) | func (this *List) Delete(f func(interface{}) bool) {
    method Len (line 63) | func (this *List) Len() int {
    method Replace (line 69) | func (this *List) Replace(value interface{}, f func(interface{}) bool) {
    method Range (line 81) | func (this *List) Range(f func(interface{}) bool) {
    method LRange (line 91) | func (this *List) LRange(f func(interface{}) bool) {

FILE: src/github.com/dolotech/lib/utils/map.go
  function NewMap (line 7) | func NewMap() *Map {
  type Map (line 11) | type Map struct
    method Get (line 16) | func (this *Map) Get(key interface{}) interface{} {
    method Set (line 25) | func (this *Map) Set(key interface{}, value interface{}) {
    method Del (line 31) | func (this *Map) Del(key interface{}) {
    method Len (line 37) | func (this *Map) Len() int {
    method Range (line 43) | func (this *Map) Range(f func(interface{}, interface{}) bool) {
    method LRange (line 53) | func (this *Map) LRange(f func(interface{}, interface{}) bool) {

FILE: src/github.com/dolotech/lib/utils/map_list_test.go
  function Test_ran (line 8) | func Test_ran(t *testing.T) {

FILE: src/github.com/dolotech/lib/utils/queue.go
  type Queue (line 3) | type Queue struct
    method Len (line 8) | func (q *Queue) Len() int {
    method Push (line 12) | func (q *Queue) Push(elem interface{}) {
    method Pop (line 21) | func (q *Queue) Pop() (elem interface{}) {
    method expand (line 32) | func (q *Queue) expand() {

FILE: src/github.com/dolotech/lib/utils/random.go
  function RandInt64 (line 13) | func RandInt64() (r int64) {
  function RandInt32 (line 19) | func RandInt32() (r int32) {
  function RandUint32 (line 25) | func RandUint32() (r uint32) {
  function RandInt64N (line 31) | func RandInt64N(n int64) (r int64) {
  function RandInt32N (line 37) | func RandInt32N(n int32) (r int32) {
  function randUint32 (line 45) | func randUint32() {
  function GetRandUint32 (line 59) | func GetRandUint32() uint32 {
  function init (line 64) | func init() {
  function RandomString (line 70) | func RandomString(length int) string {
  function RandomString_ (line 83) | func RandomString_(length int) string {

FILE: src/github.com/dolotech/lib/utils/sign.go
  function LoginSign (line 12) | func LoginSign(gameid string, device string) (string, error) {

FILE: src/github.com/dolotech/lib/utils/stack.go
  function PrintPanicStack (line 11) | func PrintPanicStack(extras ...interface{}) interface{}{

FILE: src/github.com/dolotech/lib/utils/string_2_bytes.go
  function String2Bytes (line 8) | func String2Bytes(s string) (b []byte) {
  function Bytes2String (line 17) | func Bytes2String(b []byte) (s string) {

FILE: src/github.com/dolotech/lib/utils/string_2_bytes_test.go
  function BenchmarkTestString2Bytes (line 13) | func BenchmarkTestString2Bytes(t *testing.B) {
  constant N (line 20) | N = 30000
  function BenchmarkTestString2Bytes1 (line 27) | func BenchmarkTestString2Bytes1(t *testing.B) {

FILE: src/github.com/dolotech/lib/utils/structandmap.go
  function ToM (line 8) | func ToM(value interface{}) map[string]interface{} {
  function ToMs (line 27) | func ToMs(values []interface{}) []interface{} {
  function setField (line 51) | func setField(obj interface{}, name string, value interface{}) error {
  type RPCConfig (line 73) | type RPCConfig struct
    method FillStruct (line 78) | func (s *RPCConfig) FillStruct(m map[string]string) error {

FILE: src/github.com/dolotech/lib/utils/timer_queue.go
  type TimeOuter (line 7) | type TimeOuter interface
  type Timer (line 11) | type Timer struct
  type TimerQueue (line 19) | type TimerQueue
    method Len (line 21) | func (this TimerQueue) Len() int {
    method Less (line 25) | func (this TimerQueue) Less(i, j int) bool {
    method Swap (line 29) | func (this TimerQueue) Swap(i, j int) {
    method Push (line 35) | func (this *TimerQueue) Push(x interface{}) {
    method Pop (line 45) | func (this *TimerQueue) Pop() interface{} {
  type TimerManager (line 55) | type TimerManager struct
    method AddTimer (line 67) | func (this *TimerManager) AddTimer(i TimeOuter, e int64, iv int64) uin...
    method RemoveTimer (line 78) | func (this *TimerManager) RemoveTimer(id uint32) {
    method Run (line 89) | func (this *TimerManager) Run(now int64, limit int) {
    method dump (line 112) | func (this *TimerManager) dump() {
  function NewTimerManager (line 60) | func NewTimerManager(size int) *TimerManager {

FILE: src/github.com/dolotech/lib/utils/utils.go
  function GetAuth (line 29) | func GetAuth() []rune {
  function EmailRegexp (line 40) | func EmailRegexp(mail string) bool {
  function PhoneRegexp (line 50) | func PhoneRegexp(phone string) bool {
  function AccountRegexp (line 60) | func AccountRegexp(account string) bool {
  function InetTontoa (line 71) | func InetTontoa(ipnr uint32) string {
  function InetToaton (line 82) | func InetToaton(ipnr string) uint32 {
  function AalidataPwd (line 101) | func AalidataPwd(name string) (b bool) {
  function LegalName (line 124) | func LegalName(name string, maxcount int) bool {
  function SubStr (line 146) | func SubStr(str string, begin, length int) (substr string) {
  function IntToBytes (line 168) | func IntToBytes(n int) []byte {
  function BytesToInt (line 176) | func BytesToInt(b []byte) int {
  function Int64ToBytes (line 184) | func Int64ToBytes(n int64) []byte {
  function BytesToInt64 (line 192) | func BytesToInt64(b []byte) int64 {
  function SliceIndexOf (line 200) | func SliceIndexOf(arr []string, str string) int {
  function SliceLastIndexOf (line 213) | func SliceLastIndexOf(arr []string, str string) int {
  function SliceRemoveFormSlice (line 225) | func SliceRemoveFormSlice(oriArr []string, removeArr []string) []string {
  function TimeToHeadphpoto (line 237) | func TimeToHeadphpoto(t int64, userid int, headname int64) (string, stri...
  function TimeToPhpotoPath (line 252) | func TimeToPhpotoPath(t int64, userid int) string {
  function UseridCovToInvate (line 258) | func UseridCovToInvate(userid string) uint32 {
  function Base62encode (line 272) | func Base62encode(num uint64) string {
  function Base62decode (line 286) | func Base62decode(base62 string) uint64 {
  function flip (line 296) | func flip(s []string) map[string]uint64 {
  function Encode (line 305) | func Encode(data interface{}) ([]byte, error) {
  function Decode (line 317) | func Decode(data []byte, to interface{}) error {
  function Clone (line 324) | func Clone(dst, src interface{}) error {
  function IsNumString (line 333) | func IsNumString(str string) bool {
  function Between (line 344) | func Between(startid, endid string) []string {
  function StringAddNum (line 373) | func StringAddNum(numStr string, num int) string {
  function StringAdd (line 381) | func StringAdd(numStr string) string {
  constant FORMAT (line 401) | FORMAT string = "2006-01-02 15:04:05"
  constant FORMATDATA (line 402) | FORMATDATA string = "2006-01-02 "
  function TimestampNano (line 405) | func TimestampNano() int64 {
  function Timestamp (line 410) | func Timestamp() int64 {
  function TimestampSaturday (line 415) | func TimestampSaturday() int64 {
  function TimestampToday (line 422) | func TimestampToday() int64 {
  function TimestampTodayStr (line 425) | func TimestampTodayStr() string {
  function TimestampYesterday (line 431) | func TimestampYesterday() int64 {
  function TimestampTomorrow (line 436) | func TimestampTomorrow() int64 {
  function Year (line 441) | func Year() int {
  function Month (line 446) | func Month() time.Month {
  function Day (line 451) | func Day() int {
  function Weekday (line 456) | func Weekday() time.Weekday {
  function Unix2Year (line 461) | func Unix2Year(t int64) int {
  function Unix2Month (line 466) | func Unix2Month(t int64) time.Month {
  function Unix2Day (line 471) | func Unix2Day(t int64) int {
  function Unix2Str (line 476) | func Unix2Str(t int64) string {
  function DateStr (line 481) | func DateStr() string {
  function Str2Unix (line 486) | func Str2Unix(t string) (int64, error) {
  function MonthDays (line 495) | func MonthDays(year int, month int) (days int) {
  function Md5 (line 518) | func Md5(text string) string {
  function Sleep (line 525) | func Sleep(second int) {
  function SleepRand (line 530) | func SleepRand(second int) {
  function Sleep64 (line 535) | func Sleep64(second int64) {
  function SleepRand64 (line 540) | func SleepRand64(second int64) {
  function BitOr (line 545) | func BitOr(v int64) {
  function Byte2uint32 (line 556) | func Byte2uint32(in []byte) []uint32 {
  function Byte2int32 (line 563) | func Byte2int32(in []byte) []int32 {
  function Int642uint32 (line 571) | func Int642uint32(in []int64) []uint32 {
  function String2uint32 (line 579) | func String2uint32(in []string) []uint32 {
  function String2int (line 588) | func String2int(in []string) []int {
  function Uint322string (line 597) | func Uint322string(in []uint32) []string {
  function int2string (line 605) | func int2string(in []int) []string {
  function InSlice (line 614) | func InSlice(ms uint32, arr []uint32) bool {
  function Truncate6Words (line 623) | func Truncate6Words(origin string) string {
  function VersionContrast (line 634) | func VersionContrast(origin, target string) (int, error) {
  function LogPrefix (line 664) | func LogPrefix(uid uint32, str string) string {
  function ToServerType (line 675) | func ToServerType(sid int) int {

FILE: src/github.com/dolotech/lib/utils/utils_test.go
  function Test_StringAdd (line 17) | func Test_StringAdd(t *testing.T) {
  function Test_copy (line 47) | func Test_copy(t *testing.T) {
  function Test_AES (line 53) | func Test_AES(t *testing.T) {
  function Test_XXTEA (line 70) | func Test_XXTEA(t *testing.T) {
  function TestPWD (line 78) | func TestPWD(t *testing.T) {
  function TestPhone (line 82) | func TestPhone(t *testing.T) {
  type AA (line 86) | type AA struct
  type BB (line 91) | type BB interface
  type CC (line 96) | type CC struct
    method Decode (line 98) | func (this *CC) Decode(b *[]byte) error {
    method Encode (line 102) | func (this *CC) Encode() (*[]byte, error) {

FILE: src/github.com/dolotech/lib/utils/waitgroup.go
  type WaitGroupWrapper (line 8) | type WaitGroupWrapper struct
    method Wrap (line 12) | func (w *WaitGroupWrapper) Wrap(cb func()) {

FILE: src/github.com/dolotech/lib/utils/xxtea.go
  constant delta (line 3) | delta = 0x9E3779B9
  function toBytes (line 5) | func toBytes(v []uint32, includeLength bool) []byte {
  function toUint32s (line 23) | func toUint32s(bytes []byte, includeLength bool) (v []uint32) {
  function mx (line 41) | func mx(sum uint32, y uint32, z uint32, p uint32, e uint32, k []uint32) ...
  function fixk (line 45) | func fixk(k []uint32) []uint32 {
  function encrypt (line 54) | func encrypt(v []uint32, k []uint32) []uint32 {
  function decrypt (line 77) | func decrypt(v []uint32, k []uint32) []uint32 {
  function Encrypt (line 102) | func Encrypt(data []byte, key []byte) []byte {
  function Decrypt (line 112) | func Decrypt(data []byte, key []byte) []byte {

FILE: src/github.com/go-xorm/core/cache.go
  constant CacheExpired (line 13) | CacheExpired = 60 * time.Minute
  constant CacheMaxMemory (line 15) | CacheMaxMemory = 256
  constant CacheGcInterval (line 17) | CacheGcInterval = 10 * time.Minute
  constant CacheGcMaxRemoved (line 19) | CacheGcMaxRemoved = 20
  type CacheStore (line 28) | type CacheStore interface
  type Cacher (line 39) | type Cacher interface
  function encodeIds (line 50) | func encodeIds(ids []PK) (string, error) {
  function decodeIds (line 59) | func decodeIds(s string) ([]PK, error) {
  function GetCacheSql (line 68) | func GetCacheSql(m Cacher, tableName, sql string, args interface{}) ([]P...
  function PutCacheSql (line 76) | func PutCacheSql(m Cacher, ids []PK, tableName, sql string, args interfa...
  function GenSqlKey (line 85) | func GenSqlKey(sql string, args interface{}) string {

FILE: src/github.com/go-xorm/core/column.go
  constant TWOSIDES (line 11) | TWOSIDES = iota + 1
  constant ONLYTODB (line 12) | ONLYTODB
  constant ONLYFROMDB (line 13) | ONLYFROMDB
  type Column (line 17) | type Column struct
    method String (line 69) | func (col *Column) String(d Dialect) string {
    method StringNoPk (line 96) | func (col *Column) StringNoPk(d Dialect) string {
    method ValueOf (line 117) | func (col *Column) ValueOf(bean interface{}) (*reflect.Value, error) {
    method ValueOfV (line 122) | func (col *Column) ValueOfV(dataStruct *reflect.Value) (*reflect.Value...
  function NewColumn (line 43) | func NewColumn(name, fieldName string, sqlType SQLType, len1, len2 int, ...

FILE: src/github.com/go-xorm/core/converstion.go
  type Conversion (line 5) | type Conversion interface

FILE: src/github.com/go-xorm/core/db.go
  function MapToSlice (line 13) | func MapToSlice(query string, mp interface{}) (string, []interface{}, er...
  function StructToSlice (line 34) | func StructToSlice(query string, st interface{}) (string, []interface{},...
  type DB (line 62) | type DB struct
    method Query (line 79) | func (db *DB) Query(query string, args ...interface{}) (*Rows, error) {
    method QueryMap (line 90) | func (db *DB) QueryMap(query string, mp interface{}) (*Rows, error) {
    method QueryStruct (line 98) | func (db *DB) QueryStruct(query string, st interface{}) (*Rows, error) {
    method QueryRow (line 221) | func (db *DB) QueryRow(query string, args ...interface{}) *Row {
    method QueryRowMap (line 229) | func (db *DB) QueryRowMap(query string, mp interface{}) *Row {
    method QueryRowStruct (line 237) | func (db *DB) QueryRowStruct(query string, st interface{}) *Row {
    method Prepare (line 251) | func (db *DB) Prepare(query string) (*Stmt, error) {
    method ExecMap (line 368) | func (db *DB) ExecMap(query string, mp interface{}) (sql.Result, error) {
    method ExecStruct (line 376) | func (db *DB) ExecStruct(query string, st interface{}) (sql.Result, er...
    method Begin (line 613) | func (db *DB) Begin() (*Tx, error) {
  function Open (line 67) | func Open(driverName, dataSourceName string) (*DB, error) {
  function FromDB (line 75) | func FromDB(db *sql.DB) *DB {
  type Row (line 106) | type Row struct
    method Columns (line 112) | func (row *Row) Columns() ([]string, error) {
    method Scan (line 119) | func (row *Row) Scan(dest ...interface{}) error {
    method ScanStructByName (line 145) | func (row *Row) ScanStructByName(dest interface{}) error {
    method ScanStructByIndex (line 163) | func (row *Row) ScanStructByIndex(dest interface{}) error {
    method ScanSlice (line 182) | func (row *Row) ScanSlice(dest interface{}) error {
    method ScanMap (line 202) | func (row *Row) ScanMap(dest interface{}) error {
  type Stmt (line 245) | type Stmt struct
    method ExecMap (line 267) | func (s *Stmt) ExecMap(mp interface{}) (sql.Result, error) {
    method ExecStruct (line 280) | func (s *Stmt) ExecStruct(st interface{}) (sql.Result, error) {
    method Query (line 293) | func (s *Stmt) Query(args ...interface{}) (*Rows, error) {
    method QueryMap (line 301) | func (s *Stmt) QueryMap(mp interface{}) (*Rows, error) {
    method QueryStruct (line 315) | func (s *Stmt) QueryStruct(st interface{}) (*Rows, error) {
    method QueryRow (line 329) | func (s *Stmt) QueryRow(args ...interface{}) *Row {
    method QueryRowMap (line 334) | func (s *Stmt) QueryRowMap(mp interface{}) *Row {
    method QueryRowStruct (line 348) | func (s *Stmt) QueryRowStruct(st interface{}) *Row {
  type Rows (line 384) | type Rows struct
    method ScanStructByIndex (line 390) | func (rs *Rows) ScanStructByIndex(dest ...interface{}) error {
    method ScanStructByName (line 457) | func (rs *Rows) ScanStructByName(dest interface{}) error {
    method ScanSlice (line 513) | func (rs *Rows) ScanSlice(dest interface{}) error {
    method ScanMap (line 548) | func (rs *Rows) ScanMap(dest interface{}) error {
  type EmptyScanner (line 422) | type EmptyScanner struct
    method Scan (line 425) | func (EmptyScanner) Scan(src interface{}) error {
  function fieldByName (line 434) | func fieldByName(v reflect.Value, name string) reflect.Value {
  type cacheStruct (line 482) | type cacheStruct struct
  function ReflectNew (line 492) | func ReflectNew(typ reflect.Type) reflect.Value {
  type Tx (line 608) | type Tx struct
    method Prepare (line 621) | func (tx *Tx) Prepare(query string) (*Stmt, error) {
    method Stmt (line 637) | func (tx *Tx) Stmt(stmt *Stmt) *Stmt {
    method ExecMap (line 642) | func (tx *Tx) ExecMap(query string, mp interface{}) (sql.Result, error) {
    method ExecStruct (line 650) | func (tx *Tx) ExecStruct(query string, st interface{}) (sql.Result, er...
    method Query (line 658) | func (tx *Tx) Query(query string, args ...interface{}) (*Rows, error) {
    method QueryMap (line 666) | func (tx *Tx) QueryMap(query string, mp interface{}) (*Rows, error) {
    method QueryStruct (line 674) | func (tx *Tx) QueryStruct(query string, st interface{}) (*Rows, error) {
    method QueryRow (line 682) | func (tx *Tx) QueryRow(query string, args ...interface{}) *Row {
    method QueryRowMap (line 687) | func (tx *Tx) QueryRowMap(query string, mp interface{}) *Row {
    method QueryRowStruct (line 695) | func (tx *Tx) QueryRowStruct(query string, st interface{}) *Row {

FILE: src/github.com/go-xorm/core/dialect.go
  type DbType (line 9) | type DbType
  type Uri (line 11) | type Uri struct
  type Dialect (line 27) | type Dialect interface
  function OpenDialect (line 79) | func OpenDialect(dialect Dialect) (*DB, error) {
  type Base (line 83) | type Base struct
    method DB (line 92) | func (b *Base) DB() *DB {
    method SetLogger (line 96) | func (b *Base) SetLogger(logger ILogger) {
    method Init (line 100) | func (b *Base) Init(db *DB, dialect Dialect, uri *Uri, drivername, dat...
    method URI (line 106) | func (b *Base) URI() *Uri {
    method DBType (line 110) | func (b *Base) DBType() DbType {
    method FormatBytes (line 114) | func (b *Base) FormatBytes(bs []byte) string {
    method DriverName (line 118) | func (b *Base) DriverName() string {
    method ShowCreateNull (line 122) | func (b *Base) ShowCreateNull() bool {
    method DataSourceName (line 126) | func (b *Base) DataSourceName() string {
    method AndStr (line 130) | func (b *Base) AndStr() string {
    method OrStr (line 134) | func (b *Base) OrStr() string {
    method EqStr (line 138) | func (b *Base) EqStr() string {
    method RollBackStr (line 142) | func (db *Base) RollBackStr() string {
    method SupportDropIfExists (line 146) | func (db *Base) SupportDropIfExists() bool {
    method DropTableSql (line 150) | func (db *Base) DropTableSql(tableName string) string {
    method HasRecords (line 154) | func (db *Base) HasRecords(query string, args ...interface{}) (bool, e...
    method IsColumnExist (line 168) | func (db *Base) IsColumnExist(tableName, colName string) (bool, error) {
    method CreateIndexSql (line 198) | func (db *Base) CreateIndexSql(tableName string, index *Index) string {
    method DropIndexSql (line 211) | func (db *Base) DropIndexSql(tableName string, index *Index) string {
    method ModifyColumnSql (line 222) | func (db *Base) ModifyColumnSql(tableName string, col *Column) string {
    method CreateTableSql (line 226) | func (b *Base) CreateTableSql(table *Table, tableName, storeEngine, ch...
    method ForUpdateSql (line 275) | func (b *Base) ForUpdateSql(query string) string {
    method LogSQL (line 279) | func (b *Base) LogSQL(sql string, args []interface{}) {
  function RegisterDialect (line 293) | func RegisterDialect(dbName DbType, dialectFunc func() Dialect) {
  function QueryDialect (line 300) | func QueryDialect(dbName DbType) Dialect {

FILE: src/github.com/go-xorm/core/driver.go
  type Driver (line 3) | type Driver interface
  function RegisterDriver (line 11) | func RegisterDriver(driverName string, driver Driver) {
  function QueryDriver (line 21) | func QueryDriver(driverName string) Driver {
  function RegisteredDriverSize (line 25) | func RegisteredDriverSize() int {

FILE: src/github.com/go-xorm/core/filter.go
  type Filter (line 9) | type Filter interface
  type QuoteFilter (line 14) | type QuoteFilter struct
    method Do (line 17) | func (s *QuoteFilter) Do(sql string, dialect Dialect, table *Table) st...
  type IdFilter (line 22) | type IdFilter struct
    method Do (line 37) | func (i *IdFilter) Do(sql string, dialect Dialect, table *Table) string {
  type Quoter (line 25) | type Quoter struct
    method Quote (line 33) | func (q *Quoter) Quote(content string) string {
  function NewQuoter (line 29) | func NewQuoter(dialect Dialect) *Quoter {
  type SeqFilter (line 48) | type SeqFilter struct
    method Do (line 53) | func (s *SeqFilter) Do(sql string, dialect Dialect, table *Table) stri...

FILE: src/github.com/go-xorm/core/ilogger.go
  type LogLevel (line 3) | type LogLevel
  constant LOG_DEBUG (line 7) | LOG_DEBUG LogLevel = iota
  constant LOG_INFO (line 8) | LOG_INFO
  constant LOG_WARNING (line 9) | LOG_WARNING
  constant LOG_ERR (line 10) | LOG_ERR
  constant LOG_OFF (line 11) | LOG_OFF
  constant LOG_UNKNOWN (line 12) | LOG_UNKNOWN
  type ILogger (line 16) | type ILogger interface

FILE: src/github.com/go-xorm/core/index.go
  constant IndexType (line 10) | IndexType = iota + 1
  constant UniqueType (line 11) | UniqueType
  type Index (line 15) | type Index struct
    method XName (line 22) | func (index *Index) XName(tableName string) string {
    method AddColumn (line 34) | func (index *Index) AddColumn(cols ...string) {
    method Equal (line 40) | func (index *Index) Equal(dst *Index) bool {
  function NewIndex (line 59) | func NewIndex(name string, indexType int) *Index {

FILE: src/github.com/go-xorm/core/mapper.go
  type IMapper (line 9) | type IMapper interface
  type CacheMapper (line 14) | type CacheMapper struct
    method Obj2Table (line 28) | func (m *CacheMapper) Obj2Table(o string) string {
    method Table2Obj (line 43) | func (m *CacheMapper) Table2Obj(t string) string {
  function NewCacheMapper (line 22) | func NewCacheMapper(mapper IMapper) *CacheMapper {
  type SameMapper (line 60) | type SameMapper struct
    method Obj2Table (line 63) | func (m SameMapper) Obj2Table(o string) string {
    method Table2Obj (line 67) | func (m SameMapper) Table2Obj(t string) string {
  type SnakeMapper (line 73) | type SnakeMapper struct
    method Obj2Table (line 91) | func (mapper SnakeMapper) Obj2Table(name string) string {
    method Table2Obj (line 119) | func (mapper SnakeMapper) Table2Obj(name string) string {
  function snakeCasedName (line 76) | func snakeCasedName(name string) string {
  function titleCasedName (line 95) | func titleCasedName(name string) string {
  type GonicMapper (line 125) | type GonicMapper
    method Obj2Table (line 160) | func (mapper GonicMapper) Obj2Table(name string) string {
    method Table2Obj (line 164) | func (mapper GonicMapper) Table2Obj(name string) string {
  function isASCIIUpper (line 127) | func isASCIIUpper(r rune) bool {
  function toASCIIUpper (line 131) | func toASCIIUpper(r rune) rune {
  function gonicCasedName (line 138) | func gonicCasedName(name string) string {
  type PrefixMapper (line 221) | type PrefixMapper struct
    method Obj2Table (line 226) | func (mapper PrefixMapper) Obj2Table(name string) string {
    method Table2Obj (line 230) | func (mapper PrefixMapper) Table2Obj(name string) string {
  function NewPrefixMapper (line 234) | func NewPrefixMapper(mapper IMapper, prefix string) PrefixMapper {
  type SuffixMapper (line 239) | type SuffixMapper struct
    method Obj2Table (line 244) | func (mapper SuffixMapper) Obj2Table(name string) string {
    method Table2Obj (line 248) | func (mapper SuffixMapper) Table2Obj(name string) string {
  function NewSuffixMapper (line 252) | func NewSuffixMapper(mapper IMapper, suffix string) SuffixMapper {

FILE: src/github.com/go-xorm/core/pk.go
  type PK (line 8) | type PK
    method ToString (line 15) | func (p *PK) ToString() (string, error) {
    method FromString (line 22) | func (p *PK) FromString(content string) error {
  function NewPK (line 10) | func NewPK(pks ...interface{}) *PK {

FILE: src/github.com/go-xorm/core/scan.go
  type NullTime (line 9) | type NullTime
    method Scan (line 15) | func (ns *NullTime) Scan(value interface{}) error {
    method Value (line 23) | func (ns NullTime) Value() (driver.Value, error) {
  function convertTime (line 30) | func convertTime(dest *NullTime, src interface{}) error {

FILE: src/github.com/go-xorm/core/table.go
  type Table (line 9) | type Table struct
    method Columns (line 27) | func (table *Table) Columns() []*Column {
    method ColumnsSeq (line 31) | func (table *Table) ColumnsSeq() []string {
    method GetColumn (line 50) | func (table *Table) GetColumn(name string) *Column {
    method GetColumnIdx (line 57) | func (table *Table) GetColumnIdx(name string, idx int) *Column {
    method PKColumns (line 67) | func (table *Table) PKColumns() []*Column {
    method ColumnType (line 75) | func (table *Table) ColumnType(name string) reflect.Type {
    method AutoIncrColumn (line 80) | func (table *Table) AutoIncrColumn() *Column {
    method VersionColumn (line 84) | func (table *Table) VersionColumn() *Column {
    method UpdatedColumn (line 88) | func (table *Table) UpdatedColumn() *Column {
    method DeletedColumn (line 92) | func (table *Table) DeletedColumn() *Column {
    method AddColumn (line 97) | func (table *Table) AddColumn(col *Column) {
    method AddIndex (line 128) | func (table *Table) AddIndex(index *Index) {
  function NewEmptyTable (line 35) | func NewEmptyTable() *Table {
  function NewTable (line 39) | func NewTable(name string, t reflect.Type) *Table {

FILE: src/github.com/go-xorm/core/type.go
  constant POSTGRES (line 11) | POSTGRES = "postgres"
  constant SQLITE (line 12) | SQLITE   = "sqlite3"
  constant MYSQL (line 13) | MYSQL    = "mysql"
  constant MSSQL (line 14) | MSSQL    = "mssql"
  constant ORACLE (line 15) | ORACLE   = "oracle"
  type SQLType (line 19) | type SQLType struct
    method IsType (line 33) | func (s *SQLType) IsType(st int) bool {
    method IsText (line 40) | func (s *SQLType) IsText() bool {
    method IsBlob (line 44) | func (s *SQLType) IsBlob() bool {
    method IsTime (line 48) | func (s *SQLType) IsTime() bool {
    method IsNumeric (line 52) | func (s *SQLType) IsNumeric() bool {
    method IsJson (line 56) | func (s *SQLType) IsJson() bool {
  constant UNKNOW_TYPE (line 26) | UNKNOW_TYPE = iota
  constant TEXT_TYPE (line 27) | TEXT_TYPE
  constant BLOB_TYPE (line 28) | BLOB_TYPE
  constant TIME_TYPE (line 29) | TIME_TYPE
  constant NUMERIC_TYPE (line 30) | NUMERIC_TYPE
  function Type2SQLType (line 242) | func Type2SQLType(t reflect.Type) (st SQLType) {
  function SQLType2Type (line 280) | func SQLType2Type(st SQLType) reflect.Type {

FILE: src/github.com/go-xorm/xorm/engine.go
  type Engine (line 27) | type Engine struct
    method ShowSQL (line 50) | func (engine *Engine) ShowSQL(show ...bool) {
    method ShowExecTime (line 60) | func (engine *Engine) ShowExecTime(show ...bool) {
    method Logger (line 69) | func (engine *Engine) Logger() core.ILogger {
    method SetLogger (line 74) | func (engine *Engine) SetLogger(logger core.ILogger) {
    method SetDisableGlobalCache (line 80) | func (engine *Engine) SetDisableGlobalCache(disable bool) {
    method DriverName (line 87) | func (engine *Engine) DriverName() string {
    method DataSourceName (line 92) | func (engine *Engine) DataSourceName() string {
    method SetMapper (line 97) | func (engine *Engine) SetMapper(mapper core.IMapper) {
    method SetTableMapper (line 103) | func (engine *Engine) SetTableMapper(mapper core.IMapper) {
    method SetColumnMapper (line 108) | func (engine *Engine) SetColumnMapper(mapper core.IMapper) {
    method SupportInsertMany (line 116) | func (engine *Engine) SupportInsertMany() bool {
    method QuoteStr (line 122) | func (engine *Engine) QuoteStr() string {
    method Quote (line 127) | func (engine *Engine) Quote(sql string) string {
    method quote (line 131) | func (engine *Engine) quote(sql string) string {
    method quoteColumn (line 135) | func (engine *Engine) quoteColumn(keyName string) string {
    method quoteTable (line 150) | func (engine *Engine) quoteTable(keyName string) string {
    method SqlType (line 166) | func (engine *Engine) SqlType(c *core.Column) string {
    method SQLType (line 171) | func (engine *Engine) SQLType(c *core.Column) string {
    method AutoIncrStr (line 176) | func (engine *Engine) AutoIncrStr() string {
    method SetMaxOpenConns (line 181) | func (engine *Engine) SetMaxOpenConns(conns int) {
    method SetMaxIdleConns (line 186) | func (engine *Engine) SetMaxIdleConns(conns int) {
    method SetDefaultCacher (line 191) | func (engine *Engine) SetDefaultCacher(cacher core.Cacher) {
    method NoCache (line 197) | func (engine *Engine) NoCache() *Session {
    method NoCascade (line 204) | func (engine *Engine) NoCascade() *Session {
    method MapCacher (line 211) | func (engine *Engine) MapCacher(bean interface{}, cacher core.Cacher) {
    method NewDB (line 218) | func (engine *Engine) NewDB() (*core.DB, error) {
    method DB (line 223) | func (engine *Engine) DB() *core.DB {
    method Dialect (line 228) | func (engine *Engine) Dialect() core.Dialect {
    method NewSession (line 233) | func (engine *Engine) NewSession() *Session {
    method Close (line 240) | func (engine *Engine) Close() error {
    method Ping (line 245) | func (engine *Engine) Ping() error {
    method logSQL (line 253) | func (engine *Engine) logSQL(sqlStr string, sqlArgs ...interface{}) {
    method logSQLQueryTime (line 263) | func (engine *Engine) logSQLQueryTime(sqlStr string, args []interface{...
    method logSQLExecutionTime (line 278) | func (engine *Engine) logSQLExecutionTime(sqlStr string, args []interf...
    method Sql (line 294) | func (engine *Engine) Sql(querystring string, args ...interface{}) *Se...
    method SQL (line 306) | func (engine *Engine) SQL(querystring string, args ...interface{}) *Se...
    method NoAutoTime (line 315) | func (engine *Engine) NoAutoTime() *Session {
    method NoAutoCondition (line 322) | func (engine *Engine) NoAutoCondition(no ...bool) *Session {
    method DBMetas (line 329) | func (engine *Engine) DBMetas() ([]*core.Table, error) {
    method DumpAllToFile (line 365) | func (engine *Engine) DumpAllToFile(fp string) error {
    method DumpAll (line 375) | func (engine *Engine) DumpAll(w io.Writer) error {
    method DumpTablesToFile (line 380) | func (engine *Engine) DumpTablesToFile(tables []*core.Table, fp string...
    method DumpTables (line 390) | func (engine *Engine) DumpTables(tables []*core.Table, w io.Writer, tp...
    method tableName (line 394) | func (engine *Engine) tableName(beanOrTableName interface{}) (string, ...
    method tbName (line 404) | func (engine *Engine) tbName(v reflect.Value) string {
    method dumpAll (line 417) | func (engine *Engine) dumpAll(w io.Writer, tp ...core.DbType) error {
    method dumpTables (line 523) | func (engine *Engine) dumpTables(tables []*core.Table, w io.Writer, tp...
    method Cascade (line 632) | func (engine *Engine) Cascade(trueOrFalse ...bool) *Session {
    method Where (line 639) | func (engine *Engine) Where(querystring string, args ...interface{}) *...
    method Id (line 646) | func (engine *Engine) Id(id interface{}) *Session {
    method ID (line 653) | func (engine *Engine) ID(id interface{}) *Session {
    method Before (line 660) | func (engine *Engine) Before(closures func(interface{})) *Session {
    method After (line 667) | func (engine *Engine) After(closures func(interface{})) *Session {
    method Charset (line 674) | func (engine *Engine) Charset(charset string) *Session {
    method StoreEngine (line 681) | func (engine *Engine) StoreEngine(storeEngine string) *Session {
    method Distinct (line 690) | func (engine *Engine) Distinct(columns ...string) *Session {
    method Select (line 697) | func (engine *Engine) Select(str string) *Session {
    method Cols (line 704) | func (engine *Engine) Cols(columns ...string) *Session {
    method AllCols (line 711) | func (engine *Engine) AllCols() *Session {
    method MustCols (line 718) | func (engine *Engine) MustCols(columns ...string) *Session {
    method UseBool (line 729) | func (engine *Engine) UseBool(columns ...string) *Session {
    method Omit (line 736) | func (engine *Engine) Omit(columns ...string) *Session {
    method Nullable (line 743) | func (engine *Engine) Nullable(columns ...string) *Session {
    method In (line 750) | func (engine *Engine) In(column string, args ...interface{}) *Session {
    method Incr (line 757) | func (engine *Engine) Incr(column string, arg ...interface{}) *Session {
    method Decr (line 764) | func (engine *Engine) Decr(column string, arg ...interface{}) *Session {
    method SetExpr (line 771) | func (engine *Engine) SetExpr(column string, expression string) *Sessi...
    method Table (line 778) | func (engine *Engine) Table(tableNameOrBean interface{}) *Session {
    method Alias (line 785) | func (engine *Engine) Alias(alias string) *Session {
    method Limit (line 792) | func (engine *Engine) Limit(limit int, start ...int) *Session {
    method Desc (line 799) | func (engine *Engine) Desc(colNames ...string) *Session {
    method Asc (line 811) | func (engine *Engine) Asc(colNames ...string) *Session {
    method OrderBy (line 818) | func (engine *Engine) OrderBy(order string) *Session {
    method Join (line 825) | func (engine *Engine) Join(joinOperator string, tablename interface{},...
    method GroupBy (line 832) | func (engine *Engine) GroupBy(keys string) *Session {
    method Having (line 839) | func (engine *Engine) Having(conditions string) *Session {
    method autoMapType (line 845) | func (engine *Engine) autoMapType(v reflect.Value) *core.Table {
    method GobRegister (line 865) | func (engine *Engine) GobRegister(v interface{}) *Engine {
    method TableInfo (line 878) | func (engine *Engine) TableInfo(bean interface{}) *Table {
    method newTable (line 895) | func (engine *Engine) newTable() *core.Table {
    method mapType (line 909) | func (engine *Engine) mapType(v reflect.Value) *core.Table {
    method mapping (line 1185) | func (engine *Engine) mapping(beans ...interface{}) (e error) {
    method IsTableEmpty (line 1196) | func (engine *Engine) IsTableEmpty(bean interface{}) (bool, error) {
    method IsTableExist (line 1203) | func (engine *Engine) IsTableExist(beanOrTableName interface{}) (bool,...
    method IdOf (line 1210) | func (engine *Engine) IdOf(bean interface{}) core.PK {
    method IdOfV (line 1215) | func (engine *Engine) IdOfV(rv reflect.Value) core.PK {
    method CreateIndexes (line 1234) | func (engine *Engine) CreateIndexes(bean interface{}) error {
    method CreateUniques (line 1241) | func (engine *Engine) CreateUniques(bean interface{}) error {
    method getCacher2 (line 1247) | func (engine *Engine) getCacher2(table *core.Table) core.Cacher {
    method getCacher (line 1251) | func (engine *Engine) getCacher(v reflect.Value) core.Cacher {
    method ClearCacheBean (line 1259) | func (engine *Engine) ClearCacheBean(bean interface{}, id string) error {
    method ClearCache (line 1279) | func (engine *Engine) ClearCache(beans ...interface{}) error {
    method Sync (line 1303) | func (engine *Engine) Sync(beans ...interface{}) error {
    method Sync2 (line 1398) | func (engine *Engine) Sync2(beans ...interface{}) error {
    method unMap (line 1404) | func (engine *Engine) unMap(beans ...interface{}) (e error) {
    method dropAll (line 1417) | func (engine *Engine) dropAll() error {
    method CreateTables (line 1434) | func (engine *Engine) CreateTables(beans ...interface{}) error {
    method DropTables (line 1454) | func (engine *Engine) DropTables(beans ...interface{}) error {
    method createAll (line 1473) | func (engine *Engine) createAll() error {
    method Exec (line 1480) | func (engine *Engine) Exec(sql string, args ...interface{}) (sql.Resul...
    method Query (line 1487) | func (engine *Engine) Query(sql string, paramStr ...interface{}) (resu...
    method Insert (line 1494) | func (engine *Engine) Insert(beans ...interface{}) (int64, error) {
    method InsertOne (line 1501) | func (engine *Engine) InsertOne(bean interface{}) (int64, error) {
    method Update (line 1513) | func (engine *Engine) Update(bean interface{}, condiBeans ...interface...
    method Delete (line 1520) | func (engine *Engine) Delete(bean interface{}) (int64, error) {
    method Get (line 1528) | func (engine *Engine) Get(bean interface{}) (bool, error) {
    method Find (line 1537) | func (engine *Engine) Find(beans interface{}, condiBeans ...interface{...
    method Iterate (line 1545) | func (engine *Engine) Iterate(bean interface{}, fun IterFunc) error {
    method Rows (line 1553) | func (engine *Engine) Rows(bean interface{}) (*Rows, error) {
    method Count (line 1559) | func (engine *Engine) Count(bean interface{}) (int64, error) {
    method Sum (line 1566) | func (engine *Engine) Sum(bean interface{}, colName string) (float64, ...
    method Sums (line 1573) | func (engine *Engine) Sums(bean interface{}, colNames ...string) ([]fl...
    method SumsInt (line 1580) | func (engine *Engine) SumsInt(bean interface{}, colNames ...string) ([...
    method ImportFile (line 1587) | func (engine *Engine) ImportFile(ddlPath string) ([]sql.Result, error) {
    method Import (line 1597) | func (engine *Engine) Import(r io.Reader) ([]sql.Result, error) {
    method TZTime (line 1636) | func (engine *Engine) TZTime(t time.Time) time.Time {
    method NowTime (line 1644) | func (engine *Engine) NowTime(sqlTypeName string) interface{} {
    method NowTime2 (line 1650) | func (engine *Engine) NowTime2(sqlTypeName string) (interface{}, time....
    method FormatTime (line 1656) | func (engine *Engine) FormatTime(sqlTypeName string, t time.Time) (v i...
    method formatColTime (line 1660) | func (engine *Engine) formatColTime(col *core.Column, t time.Time) (v ...
    method formatTime (line 1669) | func (engine *Engine) formatTime(tz *time.Location, sqlTypeName string...
    method Unscoped (line 1707) | func (engine *Engine) Unscoped() *Session {
  type Table (line 872) | type Table struct
  function addIndex (line 883) | func addIndex(indexName string, table *core.Table, col *core.Column, ind...
  type TableName (line 905) | type TableName interface

FILE: src/github.com/go-xorm/xorm/goracle_driver.go
  type goracleDriver (line 18) | type goracleDriver struct
    method Parse (line 21) | func (cfg *goracleDriver) Parse(driverName, dataSourceName string) (*c...

FILE: src/github.com/go-xorm/xorm/helpers.go
  function str2PK (line 20) | func str2PK(s string, tp reflect.Type) (interface{}, error) {
  function splitTag (line 90) | func splitTag(tag string) (tags []string) {
  type zeroable (line 110) | type zeroable interface
  function isZero (line 114) | func isZero(k interface{}) bool {
  function isStructZero (line 150) | func isStructZero(v reflect.Value) bool {
  function int64ToIntValue (line 174) | func int64ToIntValue(id int64, tp reflect.Type) reflect.Value {
  function int64ToInt (line 197) | func int64ToInt(id int64, tp reflect.Type) interface{} {
  function isPKZero (line 201) | func isPKZero(pk core.PK) bool {
  function equalNoCase (line 210) | func equalNoCase(s1, s2 string) bool {
  function indexNoCase (line 214) | func indexNoCase(s, sep string) int {
  function splitNoCase (line 218) | func splitNoCase(s, sep string) []string {
  function splitNNoCase (line 226) | func splitNNoCase(s, sep string, n int) []string {
  function makeArray (line 234) | func makeArray(elem string, count int) []string {
  function rValue (line 242) | func rValue(bean interface{}) reflect.Value {
  function rType (line 246) | func rType(bean interface{}) reflect.Type {
  function structName (line 252) | func structName(v reflect.Type) string {
  function col2NewCols (line 259) | func col2NewCols(columns ...string) []string {
  function sliceEq (line 272) | func sliceEq(left, right []string) bool {
  function reflect2value (line 286) | func reflect2value(rawValue *reflect.Value) (str string, err error) {
  function value2Bytes (line 330) | func value2Bytes(rawValue *reflect.Value) (data []byte, err error) {
  function value2String (line 340) | func value2String(rawValue *reflect.Value) (data string, err error) {
  function rows2Strings (line 348) | func rows2Strings(rows *core.Rows) (resultsSlice []map[string]string, er...
  function rows2maps (line 364) | func rows2maps(rows *core.Rows) (resultsSlice []map[string][]byte, err e...
  function row2map (line 380) | func row2map(rows *core.Rows, fields []string) (resultsMap map[string][]...
  function row2mapStr (line 408) | func row2mapStr(rows *core.Rows, fields []string) (resultsMap map[string...
  function txQuery2 (line 436) | func txQuery2(tx *core.Tx, sqlStr string, params ...interface{}) (result...
  function query2 (line 446) | func query2(db *core.DB, sqlStr string, params ...interface{}) (resultsS...
  function setColumnInt (line 460) | func setColumnInt(bean interface{}, col *core.Column, t int64) {
  function setColumnTime (line 475) | func setColumnTime(bean interface{}, col *core.Column, t time.Time) {
  function genCols (line 492) | func genCols(table *core.Table, session *Session, bean interface{}, useC...
  function indexName (line 581) | func indexName(tableName, idxName string) string {

FILE: src/github.com/go-xorm/xorm/logger.go
  constant DEFAULT_LOG_PREFIX (line 16) | DEFAULT_LOG_PREFIX = "[xorm]"
  constant DEFAULT_LOG_FLAG (line 17) | DEFAULT_LOG_FLAG   = log.Ldate | log.Lmicroseconds
  constant DEFAULT_LOG_LEVEL (line 18) | DEFAULT_LOG_LEVEL  = core.LOG_DEBUG
  type DiscardLogger (line 23) | type DiscardLogger struct
    method Debug (line 25) | func (DiscardLogger) Debug(v ...interface{})                 {}
    method Debugf (line 26) | func (DiscardLogger) Debugf(format string, v ...interface{}) {}
    method Error (line 27) | func (DiscardLogger) Error(v ...interface{})                 {}
    method Errorf (line 28) | func (DiscardLogger) Errorf(format string, v ...interface{}) {}
    method Info (line 29) | func (DiscardLogger) Info(v ...interface{})                  {}
    method Infof (line 30) | func (DiscardLogger) Infof(format string, v ...interface{})  {}
    method Warn (line 31) | func (DiscardLogger) Warn(v ...interface{})                  {}
    method Warnf (line 32) | func (DiscardLogger) Warnf(format string, v ...interface{})  {}
    method Level (line 33) | func (DiscardLogger) Level() core.LogLevel {
    method SetLevel (line 36) | func (DiscardLogger) SetLevel(l core.LogLevel) {}
    method ShowSQL (line 37) | func (DiscardLogger) ShowSQL(show ...bool)     {}
    method IsShowSQL (line 38) | func (DiscardLogger) IsShowSQL() bool {
  type SimpleLogger (line 43) | type SimpleLogger struct
    method Error (line 76) | func (s *SimpleLogger) Error(v ...interface{}) {
    method Errorf (line 84) | func (s *SimpleLogger) Errorf(format string, v ...interface{}) {
    method Debug (line 92) | func (s *SimpleLogger) Debug(v ...interface{}) {
    method Debugf (line 100) | func (s *SimpleLogger) Debugf(format string, v ...interface{}) {
    method Info (line 108) | func (s *SimpleLogger) Info(v ...interface{}) {
    method Infof (line 116) | func (s *SimpleLogger) Infof(format string, v ...interface{}) {
    method Warn (line 124) | func (s *SimpleLogger) Warn(v ...interface{}) {
    method Warnf (line 132) | func (s *SimpleLogger) Warnf(format string, v ...interface{}) {
    method Level (line 140) | func (s *SimpleLogger) Level() core.LogLevel {
    method SetLevel (line 145) | func (s *SimpleLogger) SetLevel(l core.LogLevel) {
    method ShowSQL (line 151) | func (s *SimpleLogger) ShowSQL(show ...bool) {
    method IsShowSQL (line 160) | func (s *SimpleLogger) IsShowSQL() bool {
  function NewSimpleLogger (line 55) | func NewSimpleLogger(out io.Writer) *SimpleLogger {
  function NewSimpleLogger2 (line 60) | func NewSimpleLogger2(out io.Writer, prefix string, flag int) *SimpleLog...
  function NewSimpleLogger3 (line 65) | func NewSimpleLogger3(out io.Writer, prefix string, flag int, l core.Log...

FILE: src/github.com/go-xorm/xorm/lru_cacher.go
  type LRUCacher (line 16) | type LRUCacher struct
    method RunGC (line 49) | func (m *LRUCacher) RunGC() {
    method GC (line 57) | func (m *LRUCacher) GC() {
    method GetIds (line 96) | func (m *LRUCacher) GetIds(tableName, sql string) interface{} {
    method GetBean (line 125) | func (m *LRUCacher) GetBean(tableName string, id string) interface{} {
    method clearIds (line 157) | func (m *LRUCacher) clearIds(tableName string) {
    method ClearIds (line 167) | func (m *LRUCacher) ClearIds(tableName string) {
    method clearBeans (line 173) | func (m *LRUCacher) clearBeans(tableName string) {
    method ClearBeans (line 184) | func (m *LRUCacher) ClearBeans(tableName string) {
    method PutIds (line 190) | func (m *LRUCacher) PutIds(tableName, sql string, ids interface{}) {
    method PutBean (line 210) | func (m *LRUCacher) PutBean(tableName string, id string, obj interface...
    method delIds (line 231) | func (m *LRUCacher) delIds(tableName, sql string) {
    method DelIds (line 241) | func (m *LRUCacher) DelIds(tableName, sql string) {
    method delBean (line 247) | func (m *LRUCacher) delBean(tableName string, id string) {
    method DelBean (line 257) | func (m *LRUCacher) DelBean(tableName string, id string) {
  function NewLRUCacher (line 29) | func NewLRUCacher(store core.CacheStore, maxElementSize int) *LRUCacher {
  function NewLRUCacher2 (line 33) | func NewLRUCacher2(store core.CacheStore, expired time.Duration, maxElem...
  type idNode (line 263) | type idNode struct
  type sqlNode (line 269) | type sqlNode struct
  function genSqlKey (line 275) | func genSqlKey(sql string, args interface{}) string {
  function genId (line 279) | func genId(prefix string, id string) string {
  function newIdNode (line 283) | func newIdNode(tbName string, id string) *idNode {
  function newSqlNode (line 287) | func newSqlNode(tbName, sql string) *sqlNode {

FILE: src/github.com/go-xorm/xorm/memory_store.go
  type MemoryStore (line 16) | type MemoryStore struct
    method Put (line 25) | func (s *MemoryStore) Put(key string, value interface{}) error {
    method Get (line 32) | func (s *MemoryStore) Get(key string) (interface{}, error) {
    method Del (line 42) | func (s *MemoryStore) Del(key string) error {
  function NewMemoryStore (line 21) | func NewMemoryStore() *MemoryStore {

FILE: src/github.com/go-xorm/xorm/mssql_dialect.go
  type mssql (line 206) | type mssql struct
    method Init (line 210) | func (db *mssql) Init(d *core.DB, uri *core.Uri, drivername, dataSourc...
    method SqlType (line 214) | func (db *mssql) SqlType(c *core.Column) string {
    method SupportInsertMany (line 268) | func (db *mssql) SupportInsertMany() bool {
    method IsReserved (line 272) | func (db *mssql) IsReserved(name string) bool {
    method Quote (line 277) | func (db *mssql) Quote(name string) string {
    method QuoteStr (line 281) | func (db *mssql) QuoteStr() string {
    method SupportEngine (line 285) | func (db *mssql) SupportEngine() bool {
    method AutoIncrStr (line 289) | func (db *mssql) AutoIncrStr() string {
    method DropTableSql (line 293) | func (db *mssql) DropTableSql(tableName string) string {
    method SupportCharset (line 299) | func (db *mssql) SupportCharset() bool {
    method IndexOnTable (line 303) | func (db *mssql) IndexOnTable() bool {
    method IndexCheckSql (line 307) | func (db *mssql) IndexCheckSql(tableName, idxName string) (string, []i...
    method IsColumnExist (line 319) | func (db *mssql) IsColumnExist(tableName, colName string) (bool, error) {
    method TableCheckSql (line 325) | func (db *mssql) TableCheckSql(tableName string) (string, []interface{...
    method GetColumns (line 331) | func (db *mssql) GetColumns(tableName string) ([]string, map[string]*c...
    method GetTables (line 391) | func (db *mssql) GetTables() ([]*core.Table, error) {
    method GetIndexes (line 416) | func (db *mssql) GetIndexes(tableName string) (map[string]*core.Index,...
    method CreateTableSql (line 477) | func (db *mssql) CreateTableSql(table *core.Table, tableName, storeEng...
    method ForUpdateSql (line 511) | func (db *mssql) ForUpdateSql(query string) string {
    method Filters (line 515) | func (db *mssql) Filters() []core.Filter {

FILE: src/github.com/go-xorm/xorm/mymysql_driver.go
  type mymysqlDriver (line 15) | type mymysqlDriver struct
    method Parse (line 18) | func (p *mymysqlDriver) Parse(driverName, dataSourceName string) (*cor...

FILE: src/github.com/go-xorm/xorm/mysql_dialect.go
  type mysql (line 163) | type mysql struct
    method Init (line 176) | func (db *mysql) Init(d *core.DB, uri *core.Uri, drivername, dataSourc...
    method SqlType (line 180) | func (db *mysql) SqlType(c *core.Column) string {
    method SupportInsertMany (line 246) | func (db *mysql) SupportInsertMany() bool {
    method IsReserved (line 250) | func (db *mysql) IsReserved(name string) bool {
    method Quote (line 255) | func (db *mysql) Quote(name string) string {
    method QuoteStr (line 259) | func (db *mysql) QuoteStr() string {
    method SupportEngine (line 263) | func (db *mysql) SupportEngine() bool {
    method AutoIncrStr (line 267) | func (db *mysql) AutoIncrStr() string {
    method SupportCharset (line 271) | func (db *mysql) SupportCharset() bool {
    method IndexOnTable (line 275) | func (db *mysql) IndexOnTable() bool {
    method IndexCheckSql (line 279) | func (db *mysql) IndexCheckSql(tableName, idxName string) (string, []i...
    method TableCheckSql (line 292) | func (db *mysql) TableCheckSql(tableName string) (string, []interface{...
    method GetColumns (line 298) | func (db *mysql) GetColumns(tableName string) ([]string, map[string]*c...
    method GetTables (line 407) | func (db *mysql) GetTables() ([]*core.Table, error) {
    method GetIndexes (line 436) | func (db *mysql) GetIndexes(tableName string) (map[string]*core.Index,...
    method Filters (line 487) | func (db *mysql) Filters() []core.Filter {

FILE: src/github.com/go-xorm/xorm/mysql_driver.go
  type mysqlDriver (line 14) | type mysqlDriver struct
    method Parse (line 17) | func (p *mysqlDriver) Parse(driverName, dataSourceName string) (*core....

FILE: src/github.com/go-xorm/xorm/oci8_driver.go
  type oci8Driver (line 14) | type oci8Driver struct
    method Parse (line 19) | func (p *oci8Driver) Parse(driverName, dataSourceName string) (*core.U...

FILE: src/github.com/go-xorm/xorm/odbc_driver.go
  type odbcDriver (line 14) | type odbcDriver struct
    method Parse (line 17) | func (p *odbcDriver) Parse(driverName, dataSourceName string) (*core.U...

FILE: src/github.com/go-xorm/xorm/oracle_dialect.go
  type oracle (line 500) | type oracle struct
    method Init (line 504) | func (db *oracle) Init(d *core.DB, uri *core.Uri, drivername, dataSour...
    method SqlType (line 508) | func (db *oracle) SqlType(c *core.Column) string {
    method AutoIncrStr (line 539) | func (db *oracle) AutoIncrStr() string {
    method SupportInsertMany (line 543) | func (db *oracle) SupportInsertMany() bool {
    method IsReserved (line 547) | func (db *oracle) IsReserved(name string) bool {
    method Quote (line 552) | func (db *oracle) Quote(name string) string {
    method QuoteStr (line 556) | func (db *oracle) QuoteStr() string {
    method SupportEngine (line 560) | func (db *oracle) SupportEngine() bool {
    method SupportCharset (line 564) | func (db *oracle) SupportCharset() bool {
    method SupportDropIfExists (line 568) | func (db *oracle) SupportDropIfExists() bool {
    method IndexOnTable (line 572) | func (db *oracle) IndexOnTable() bool {
    method DropTableSql (line 576) | func (db *oracle) DropTableSql(tableName string) string {
    method CreateTableSql (line 580) | func (b *oracle) CreateTableSql(table *core.Table, tableName, storeEng...
    method IndexCheckSql (line 623) | func (db *oracle) IndexCheckSql(tableName, idxName string) (string, []...
    method TableCheckSql (line 629) | func (db *oracle) TableCheckSql(tableName string) (string, []interface...
    method MustDropTable (line 634) | func (db *oracle) MustDropTable(tableName string) error {
    method IsColumnExist (line 661) | func (db *oracle) IsColumnExist(tableName, colName string) (bool, erro...
    method GetColumns (line 679) | func (db *oracle) GetColumns(tableName string) ([]string, map[string]*...
    method GetTables (line 777) | func (db *oracle) GetTables() ([]*core.Table, error) {
    method GetIndexes (line 801) | func (db *oracle) GetIndexes(tableName string) (map[string]*core.Index...
    method Filters (line 844) | func (db *oracle) Filters() []core.Filter {

FILE: src/github.com/go-xorm/xorm/postgres_dialect.go
  type postgres (line 768) | type postgres struct
    method Init (line 772) | func (db *postgres) Init(d *core.DB, uri *core.Uri, drivername, dataSo...
    method SqlType (line 776) | func (db *postgres) SqlType(c *core.Column) string {
    method SupportInsertMany (line 826) | func (db *postgres) SupportInsertMany() bool {
    method IsReserved (line 830) | func (db *postgres) IsReserved(name string) bool {
    method Quote (line 835) | func (db *postgres) Quote(name string) string {
    method QuoteStr (line 840) | func (db *postgres) QuoteStr() string {
    method AutoIncrStr (line 844) | func (db *postgres) AutoIncrStr() string {
    method SupportEngine (line 848) | func (db *postgres) SupportEngine() bool {
    method SupportCharset (line 852) | func (db *postgres) SupportCharset() bool {
    method IndexOnTable (line 856) | func (db *postgres) IndexOnTable() bool {
    method IndexCheckSql (line 860) | func (db *postgres) IndexCheckSql(tableName, idxName string) (string, ...
    method TableCheckSql (line 866) | func (db *postgres) TableCheckSql(tableName string) (string, []interfa...
    method ModifyColumnSql (line 877) | func (db *postgres) ModifyColumnSql(tableName string, col *core.Column...
    method DropIndexSql (line 882) | func (db *postgres) DropIndexSql(tableName string, index *core.Index) ...
    method IsColumnExist (line 897) | func (db *postgres) IsColumnExist(tableName, colName string) (bool, er...
    method GetColumns (line 912) | func (db *postgres) GetColumns(tableName string) ([]string, map[string...
    method GetTables (line 1014) | func (db *postgres) GetTables() ([]*core.Table, error) {
    method GetIndexes (line 1040) | func (db *postgres) GetIndexes(tableName string) (map[string]*core.Ind...
    method Filters (line 1089) | func (db *postgres) Filters() []core.Filter {

FILE: src/github.com/go-xorm/xorm/pq_driver.go
  type pqDriver (line 17) | type pqDriver struct
    method Parse (line 98) | func (p *pqDriver) Parse(driverName, dataSourceName string) (*core.Uri...
  type values (line 20) | type values
    method Set (line 22) | func (vs values) Set(k, v string) {
    method Get (line 26) | func (vs values) Get(k string) (v string) {
  function errorf (line 30) | func errorf(s string, args ...interface{}) {
  function parseURL (line 34) | func parseURL(connstr string) (string, error) {
  function parseOpts (line 81) | func parseOpts(name string, o values) {

FILE: src/github.com/go-xorm/xorm/processors.go
  type BeforeInsertProcessor (line 8) | type BeforeInsertProcessor interface
  type BeforeUpdateProcessor (line 13) | type BeforeUpdateProcessor interface
  type BeforeDeleteProcessor (line 18) | type BeforeDeleteProcessor interface
  type BeforeSetProcessor (line 22) | type BeforeSetProcessor interface
  type AfterSetProcessor (line 26) | type AfterSetProcessor interface
  type AfterInsertProcessor (line 38) | type AfterInsertProcessor interface
  type AfterUpdateProcessor (line 43) | type AfterUpdateProcessor interface
  type AfterDeleteProcessor (line 48) | type AfterDeleteProcessor interface

FILE: src/github.com/go-xorm/xorm/rows.go
  type Rows (line 16) | type Rows struct
    method Next (line 91) | func (rows *Rows) Next() bool {
    method Err (line 103) | func (rows *Rows) Err() error {
    method Scan (line 108) | func (rows *Rows) Scan(bean interface{}) error {
    method Close (line 121) | func (rows *Rows) Close() error {
  function newRows (line 28) | func newRows(session *Session, bean interface{}) (*Rows, error) {

FILE: src/github.com/go-xorm/xorm/session.go
  type Session (line 24) | type Session struct
    method Clone (line 58) | func (session *Session) Clone() *Session {
    method Init (line 64) | func (session *Session) Init() {
    method Close (line 85) | func (session *Session) Close() {
    method resetStatement (line 103) | func (session *Session) resetStatement() {
    method Prepare (line 110) | func (session *Session) Prepare() *Session {
    method Sql (line 116) | func (session *Session) Sql(querystring string, args ...interface{}) *...
    method SQL (line 123) | func (session *Session) SQL(querystring string, args ...interface{}) *...
    method Where (line 129) | func (session *Session) Where(querystring string, args ...interface{})...
    method And (line 135) | func (session *Session) And(querystring string, args ...interface{}) *...
    method Or (line 141) | func (session *Session) Or(querystring string, args ...interface{}) *S...
    method Id (line 147) | func (session *Session) Id(id interface{}) *Session {
    method ID (line 153) | func (session *Session) ID(id interface{}) *Session {
    method Before (line 159) | func (session *Session) Before(closures func(interface{})) *Session {
    method After (line 167) | func (session *Session) After(closures func(interface{})) *Session {
    method Table (line 175) | func (session *Session) Table(tableNameOrBean interface{}) *Session {
    method Alias (line 181) | func (session *Session) Alias(alias string) *Session {
    method In (line 187) | func (session *Session) In(column string, args ...interface{}) *Session {
    method Incr (line 193) | func (session *Session) Incr(column string, arg ...interface{}) *Sessi...
    method Decr (line 199) | func (session *Session) Decr(column string, arg ...interface{}) *Sessi...
    method SetExpr (line 205) | func (session *Session) SetExpr(column string, expression string) *Ses...
    method Select (line 211) | func (session *Session) Select(str string) *Session {
    method Cols (line 217) | func (session *Session) Cols(columns ...string) *Session {
    method AllCols (line 223) | func (session *Session) AllCols() *Session {
    method MustCols (line 229) | func (session *Session) MustCols(columns ...string) *Session {
    method NoCascade (line 235) | func (session *Session) NoCascade() *Session {
    method UseBool (line 245) | func (session *Session) UseBool(columns ...string) *Session {
    method Distinct (line 253) | func (session *Session) Distinct(columns ...string) *Session {
    method ForUpdate (line 259) | func (session *Session) ForUpdate() *Session {
    method Omit (line 265) | func (session *Session) Omit(columns ...string) *Session {
    method Nullable (line 271) | func (session *Session) Nullable(columns ...string) *Session {
    method NoAutoTime (line 278) | func (session *Session) NoAutoTime() *Session {
    method NoAutoCondition (line 284) | func (session *Session) NoAutoCondition(no ...bool) *Session {
    method Limit (line 290) | func (session *Session) Limit(limit int, start ...int) *Session {
    method OrderBy (line 297) | func (session *Session) OrderBy(order string) *Session {
    method Desc (line 303) | func (session *Session) Desc(colNames ...string) *Session {
    method Asc (line 309) | func (session *Session) Asc(colNames ...string) *Session {
    method StoreEngine (line 315) | func (session *Session) StoreEngine(storeEngine string) *Session {
    method Charset (line 321) | func (session *Session) Charset(charset string) *Session {
    method Cascade (line 327) | func (session *Session) Cascade(trueOrFalse ...bool) *Session {
    method NoCache (line 336) | func (session *Session) NoCache() *Session {
    method Join (line 342) | func (session *Session) Join(joinOperator string, tablename interface{...
    method GroupBy (line 348) | func (session *Session) GroupBy(keys string) *Session {
    method Having (line 354) | func (session *Session) Having(conditions string) *Session {
    method DB (line 360) | func (session *Session) DB() *core.DB {
    method Begin (line 369) | func (session *Session) Begin() error {
    method Rollback (line 384) | func (session *Session) Rollback() error {
    method Commit (line 394) | func (session *Session) Commit() error {
    method scanMapIntoStruct (line 452) | func (session *Session) scanMapIntoStruct(obj interface{}, objMap map[...
    method innerExec (line 499) | func (session *Session) innerExec(sqlStr string, args ...interface{}) ...
    method exec (line 516) | func (session *Session) exec(sqlStr string, args ...interface{}) (sql....
    method Exec (line 540) | func (session *Session) Exec(sqlStr string, args ...interface{}) (sql....
    method CreateTable (line 550) | func (session *Session) CreateTable(bean interface{}) error {
    method CreateIndexes (line 563) | func (session *Session) CreateIndexes(bean interface{}) error {
    method CreateUniques (line 583) | func (session *Session) CreateUniques(bean interface{}) error {
    method createOneTable (line 602) | func (session *Session) createOneTable() error {
    method createAll (line 609) | func (session *Session) createAll() error {
    method DropIndexes (line 627) | func (session *Session) DropIndexes(bean interface{}) error {
    method DropTable (line 647) | func (session *Session) DropTable(beanOrTableName interface{}) error {
    method canCache (line 671) | func (session *Session) canCache() bool {
    method cacheGet (line 682) | func (session *Session) cacheGet(bean interface{}, sqlStr string, args...
    method cacheFind (line 781) | func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsS...
    method Rows (line 976) | func (session *Session) Rows(bean interface{}) (*Rows, error) {
    method Iterate (line 983) | func (session *Session) Iterate(bean interface{}, fun IterFunc) error {
    method doPrepare (line 1006) | func (session *Session) doPrepare(sqlStr string) (stmt *core.Stmt, err...
    method Get (line 1023) | func (session *Session) Get(bean interface{}) (bool, error) {
    method Count (line 1081) | func (session *Session) Count(bean interface{}) (int64, error) {
    method Sum (line 1113) | func (session *Session) Sum(bean interface{}, columnName string) (floa...
    method Sums (line 1145) | func (session *Session) Sums(bean interface{}, columnNames ...string) ...
    method SumsInt (line 1177) | func (session *Session) SumsInt(bean interface{}, columnNames ...strin...
    method Find (line 1211) | func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...in...
    method Ping (line 1430) | func (session *Session) Ping() error {
    method IsTableExist (line 1440) | func (session *Session) IsTableExist(beanOrTableName interface{}) (boo...
    method isTableExist (line 1449) | func (session *Session) isTableExist(tableName string) (bool, error) {
    method IsTableEmpty (line 1460) | func (session *Session) IsTableEmpty(bean interface{}) (bool, error) {
    method isTableEmpty (line 1473) | func (session *Session) isTableEmpty(tableName string) (bool, error) {
    method isIndexExist (line 1490) | func (session *Session) isIndexExist(tableName, idxName string, unique...
    method isIndexExist2 (line 1507) | func (session *Session) isIndexExist2(tableName string, cols []string,...
    method addColumn (line 1529) | func (session *Session) addColumn(colName string) error {
    method addIndex (line 1541) | func (session *Session) addIndex(tableName, idxName string) error {
    method addUnique (line 1553) | func (session *Session) addUnique(tableName, uqeName string) error {
    method dropAll (line 1565) | func (session *Session) dropAll() error {
    method getField (line 1583) | func (session *Session) getField(dataStruct *reflect.Value, key string...
    method rows2Beans (line 1607) | func (session *Session) rows2Beans(rows *core.Rows, fields []string, f...
    method row2Bean (line 1623) | func (session *Session) row2Bean(rows *core.Rows, fields []string, fie...
    method _row2Bean (line 1634) | func (session *Session) _row2Bean(rows *core.Rows, fields []string, fi...
    method queryPreprocess (line 2103) | func (session *Session) queryPreprocess(sqlStr *string, paramStr ...in...
    method query (line 2111) | func (session *Session) query(sqlStr string, paramStr ...interface{}) ...
    method txQuery (line 2121) | func (session *Session) txQuery(tx *core.Tx, sqlStr string, params ......
    method innerQuery (line 2131) | func (session *Session) innerQuery(sqlStr string, params ...interface{...
    method innerQuery2 (line 2161) | func (session *Session) innerQuery2(sqlStr string, params ...interface...
    method Query (line 2173) | func (session *Session) Query(sqlStr string, paramStr ...interface{}) ...
    method query2 (line 2184) | func (session *Session) query2(sqlStr string, paramStr ...interface{})...
    method Insert (line 2194) | func (session *Session) Insert(beans ...interface{}) (int64, error) {
    method innerInsertMulti (line 2238) | func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (in...
    method InsertMulti (line 2439) | func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, ...
    method str2Time (line 2458) | func (session *Session) str2Time(col *core.Column, data string) (outTi...
    method byte2Time (line 2526) | func (session *Session) byte2Time(col *core.Column, data []byte) (outT...
    method bytes2Value (line 2531) | func (session *Session) bytes2Value(col *core.Column, fieldValue *refl...
    method value2Interface (line 2981) | func (session *Session) value2Interface(col *core.Column, fieldValue r...
    method innerInsert (line 3105) | func (session *Session) innerInsert(bean interface{}) (int64, error) {
    method InsertOne (line 3327) | func (session *Session) InsertOne(bean interface{}) (int64, error) {
    method cacheInsert (line 3336) | func (session *Session) cacheInsert(tables ...string) error {
    method cacheUpdate (line 3352) | func (session *Session) cacheUpdate(sqlStr string, args ...interface{}...
    method Update (line 3480) | func (session *Session) Update(bean interface{}, condiBean ...interfac...
    method cacheDelete (line 3710) | func (session *Session) cacheDelete(sqlStr string, args ...interface{}...
    method Delete (line 3775) | func (session *Session) Delete(bean interface{}) (int64, error) {
    method saveLastSQL (line 3963) | func (session *Session) saveLastSQL(sql string, args ...interface{}) {
    method LastSQL (line 3970) | func (session *Session) LastSQL() (string, []interface{}) {
    method tbNameNoSchema (line 3975) | func (session *Session) tbNameNoSchema(table *core.Table) string {
    method Sync2 (line 3984) | func (session *Session) Sync2(beans ...interface{}) error {
    method Unscoped (line 4176) | func (session *Session) Unscoped() *Session {
  function cleanupProcessorsClosures (line 446) | func cleanupProcessorsClosures(slices *[]func(interface{})) {
  type IterFunc (line 972) | type IterFunc
  type Cell (line 1605) | type Cell

FILE: src/github.com/go-xorm/xorm/sqlite3_dialect.go
  type sqlite3 (line 150) | type sqlite3 struct
    method Init (line 154) | func (db *sqlite3) Init(d *core.DB, uri *core.Uri, drivername, dataSou...
    method SqlType (line 158) | func (db *sqlite3) SqlType(c *core.Column) string {
    method FormatBytes (line 192) | func (db *sqlite3) FormatBytes(bs []byte) string {
    method SupportInsertMany (line 196) | func (db *sqlite3) SupportInsertMany() bool {
    method IsReserved (line 200) | func (db *sqlite3) IsReserved(name string) bool {
    method Quote (line 205) | func (db *sqlite3) Quote(name string) string {
    method QuoteStr (line 209) | func (db *sqlite3) QuoteStr() string {
    method AutoIncrStr (line 213) | func (db *sqlite3) AutoIncrStr() string {
    method SupportEngine (line 217) | func (db *sqlite3) SupportEngine() bool {
    method SupportCharset (line 221) | func (db *sqlite3) SupportCharset() bool {
    method IndexOnTable (line 225) | func (db *sqlite3) IndexOnTable() bool {
    method IndexCheckSql (line 229) | func (db *sqlite3) IndexCheckSql(tableName, idxName string) (string, [...
    method TableCheckSql (line 234) | func (db *sqlite3) TableCheckSql(tableName string) (string, []interfac...
    method DropIndexSql (line 239) | func (db *sqlite3) DropIndexSql(tableName string, index *core.Index) s...
    method ForUpdateSql (line 254) | func (db *sqlite3) ForUpdateSql(query string) string {
    method IsColumnExist (line 264) | func (db *sqlite3) IsColumnExist(tableName, colName string) (bool, err...
    method GetColumns (line 280) | func (db *sqlite3) GetColumns(tableName string) ([]string, map[string]...
    method GetTables (line 349) | func (db *sqlite3) GetTables() ([]*core.Table, error) {
    method GetIndexes (line 375) | func (db *sqlite3) GetIndexes(tableName string) (map[string]*core.Inde...
    method Filters (line 433) | func (db *sqlite3) Filters() []core.Filter {

FILE: src/github.com/go-xorm/xorm/sqlite3_driver.go
  type sqlite3Driver (line 15) | type sqlite3Driver struct
    method Parse (line 18) | func (p *sqlite3Driver) Parse(driverName, dataSourceName string) (*cor...

FILE: src/github.com/go-xorm/xorm/statement.go
  type inParam (line 20) | type inParam struct
  type incrParam (line 25) | type incrParam struct
  type decrParam (line 30) | type decrParam struct
  type exprParam (line 35) | type exprParam struct
  type Statement (line 41) | type Statement struct
    method Init (line 87) | func (statement *Statement) Init() {
    method NoAutoCondition (line 129) | func (statement *Statement) NoAutoCondition(no ...bool) *Statement {
    method Sql (line 138) | func (statement *Statement) Sql(querystring string, args ...interface{...
    method Alias (line 145) | func (statement *Statement) Alias(alias string) *Statement {
    method Where (line 151) | func (statement *Statement) Where(querystring string, args ...interfac...
    method And (line 166) | func (statement *Statement) And(querystring string, args ...interface{...
    method Or (line 180) | func (statement *Statement) Or(querystring string, args ...interface{}...
    method setRefValue (line 193) | func (statement *Statement) setRefValue(v reflect.Value) {
    method Table (line 199) | func (statement *Statement) Table(tableNameOrBean interface{}) *Statem...
    method needTableName (line 446) | func (statement *Statement) needTableName() bool {
    method colName (line 450) | func (statement *Statement) colName(col *core.Column, tableName string...
    method TableName (line 684) | func (statement *Statement) TableName() string {
    method Id (line 693) | func (statement *Statement) Id(id interface{}) *Statement {
    method Incr (line 721) | func (statement *Statement) Incr(column string, arg ...interface{}) *S...
    method Decr (line 732) | func (statement *Statement) Decr(column string, arg ...interface{}) *S...
    method SetExpr (line 743) | func (statement *Statement) SetExpr(column string, expression string) ...
    method getInc (line 750) | func (statement *Statement) getInc() map[string]incrParam {
    method getDec (line 755) | func (statement *Statement) getDec() map[string]decrParam {
    method getExpr (line 760) | func (statement *Statement) getExpr() map[string]exprParam {
    method In (line 765) | func (statement *Statement) In(column string, args ...interface{}) *St...
    method genInSql (line 792) | func (statement *Statement) genInSql() (string, []interface{}) {
    method attachInSql (line 817) | func (statement *Statement) attachInSql() {
    method col2NewColsWithQuote (line 828) | func (statement *Statement) col2NewColsWithQuote(columns ...string) []...
    method Distinct (line 850) | func (statement *Statement) Distinct(columns ...string) *Statement {
    method ForUpdate (line 857) | func (statement *Statement) ForUpdate() *Statement {
    method Select (line 863) | func (s *Statement) Select(str string) *Statement {
    method Cols (line 869) | func (statement *Statement) Cols(columns ...string) *Statement {
    method AllCols (line 883) | func (statement *Statement) AllCols() *Statement {
    method MustCols (line 889) | func (statement *Statement) MustCols(columns ...string) *Statement {
    method UseBool (line 898) | func (statement *Statement) UseBool(columns ...string) *Statement {
    method Omit (line 908) | func (statement *Statement) Omit(columns ...string) {
    method Nullable (line 917) | func (statement *Statement) Nullable(columns ...string) {
    method Top (line 925) | func (statement *Statement) Top(limit int) *Statement {
    method Limit (line 931) | func (statement *Statement) Limit(limit int, start ...int) *Statement {
    method OrderBy (line 940) | func (statement *Statement) OrderBy(order string) *Statement {
    method Desc (line 949) | func (statement *Statement) Desc(colNames ...string) *Statement {
    method Asc (line 962) | func (statement *Statement) Asc(colNames ...string) *Statement {
    method Join (line 975) | func (statement *Statement) Join(joinOP string, tablename interface{},...
    method GroupBy (line 1022) | func (statement *Statement) GroupBy(keys string) *Statement {
    method Having (line 1028) | func (statement *Statement) Having(conditions string) *Statement {
    method Unscoped (line 1034) | func (statement *Statement) Unscoped() *Statement {
    method genColumnStr (line 1039) | func (statement *Statement) genColumnStr() string {
    method genCreateTableSQL (line 1077) | func (statement *Statement) genCreateTableSQL() string {
    method genIndexSQL (line 1082) | func (s *Statement) genIndexSQL() []string {
    method genUniqueSQL (line 1100) | func (s *Statement) genUniqueSQL() []string {
    method genDelIndexSQL (line 1112) | func (s *Statement) genDelIndexSQL() []string {
    method genGetSql (line 1131) | func (statement *Statement) genGetSql(bean interface{}) (string, []int...
    method genAddColumnStr (line 1172) | func (s *Statement) genAddColumnStr(col *core.Column) (string, []inter...
    method buildConditions (line 1193) | func (statement *Statement) buildConditions(table *core.Table, bean in...
    method genCountSql (line 1198) | func (statement *Statement) genCountSql(bean interface{}) (string, []i...
    method genSumSql (line 1219) | func (statement *Statement) genSumSql(bean interface{}, columns ...str...
    method genSelectSQL (line 1239) | func (statement *Statement) genSelectSQL(columnStr string) (a string) {
    method processIdParam (line 1346) | func (statement *Statement) processIdParam() {
    method JoinColumns (line 1367) | func (statement *Statement) JoinColumns(cols []*core.Column, includeTa...
    method convertIdSql (line 1380) | func (statement *Statement) convertIdSql(sqlStr string) string {
    method convertUpdateSQL (line 1400) | func (statement *Statement) convertUpdateSQL(sqlStr string) (string, s...
  function buildUpdates (line 212) | func buildUpdates(engine *Engine, table *core.Table, bean interface{},
  function buildConditions (line 462) | func buildConditions(engine *Engine, table *core.Table, bean interface{},
  function uniqueName (line 1096) | func uniqueName(tableName, uqeName string) string {

FILE: src/github.com/go-xorm/xorm/syslogger.go
  type SyslogLogger (line 19) | type SyslogLogger struct
    method Debug (line 28) | func (s *SyslogLogger) Debug(v ...interface{}) {
    method Debugf (line 32) | func (s *SyslogLogger) Debugf(format string, v ...interface{}) {
    method Error (line 36) | func (s *SyslogLogger) Error(v ...interface{}) {
    method Errorf (line 40) | func (s *SyslogLogger) Errorf(format string, v ...interface{}) {
    method Info (line 44) | func (s *SyslogLogger) Info(v ...interface{}) {
    method Infof (line 48) | func (s *SyslogLogger) Infof(format string, v ...interface{}) {
    method Warn (line 52) | func (s *SyslogLogger) Warn(v ...interface{}) {
    method Warnf (line 56) | func (s *SyslogLogger) Warnf(format string, v ...interface{}) {
    method Level (line 60) | func (s *SyslogLogger) Level() core.LogLevel {
    method SetLevel (line 65) | func (s *SyslogLogger) SetLevel(l core.LogLevel) {}
    method ShowSQL (line 67) | func (s *SyslogLogger) ShowSQL(show ...bool) {
    method IsShowSQL (line 75) | func (s *SyslogLogger) IsShowSQL() bool {
  function NewSyslogLogger (line 24) | func NewSyslogLogger(w *syslog.Writer) *SyslogLogger {

FILE: src/github.com/go-xorm/xorm/xorm.go
  constant Version (line 20) | Version string = "0.5.5.0711"
  function regDrvsNDialects (line 23) | func regDrvsNDialects() bool {
  function close (line 48) | func close(engine *Engine) {
  function NewEngine (line 54) | func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
  method Clone (line 101) | func (engine *Engine) Clone() (*Engine, error) {

FILE: src/github.com/golang/glog/glog.go
  type severity (line 95) | type severity
    method get (line 118) | func (s *severity) get() severity {
    method set (line 123) | func (s *severity) set(val severity) {
    method String (line 128) | func (s *severity) String() string {
    method Get (line 133) | func (s *severity) Get() interface{} {
    method Set (line 138) | func (s *severity) Set(value string) error {
  constant infoLog (line 101) | infoLog     severity = iota
  constant warningLog (line 102) | warningLog
  constant errorLog (line 103) | errorLog
  constant fatalLog (line 104) | fatalLog
  constant numSeverity (line 105) | numSeverity = 4
  constant severityChar (line 108) | severityChar = "IWEF"
  function severityByName (line 154) | func severityByName(s string) (severity, bool) {
  type OutputStats (line 165) | type OutputStats struct
    method Lines (line 171) | func (s *OutputStats) Lines() int64 {
    method Bytes (line 176) | func (s *OutputStats) Bytes() int64 {
  type Level (line 204) | type Level
    method get (line 207) | func (l *Level) get() Level {
    method set (line 212) | func (l *Level) set(val Level) {
    method String (line 217) | func (l *Level) String() string {
    method Get (line 222) | func (l *Level) Get() interface{} {
    method Set (line 227) | func (l *Level) Set(value string) error {
  type moduleSpec (line 239) | type moduleSpec struct
    method String (line 261) | func (m *moduleSpec) String() string {
    method Get (line 277) | func (m *moduleSpec) Get() interface{} {
    method Set (line 284) | func (m *moduleSpec) Set(value string) error {
  type modulePat (line 245) | type modulePat struct
    method match (line 253) | func (m *modulePat) match(file string) bool {
  function isLiteral (line 317) | func isLiteral(pattern string) bool {
  type traceLocation (line 322) | type traceLocation struct
    method isSet (line 329) | func (t *traceLocation) isSet() bool {
    method match (line 336) | func (t *traceLocation) match(file string, line int) bool {
    method String (line 346) | func (t *traceLocation) String() string {
    method Get (line 355) | func (t *traceLocation) Get() interface{} {
    method Set (line 363) | func (t *traceLocation) Set(value string) error {
  type flushSyncWriter (line 392) | type flushSyncWriter interface
  function init (line 398) | func init() {
  function Flush (line 414) | func Flush() {
  type loggingT (line 419) | type loggingT struct
    method setVState (line 469) | func (l *loggingT) setVState(verbosity Level, filter []modulePat, setF...
    method getBuffer (line 488) | func (l *loggingT) getBuffer() *buffer {
    method putBuffer (line 505) | func (l *loggingT) putBuffer(b *buffer) {
    method header (line 535) | func (l *loggingT) header(s severity, depth int) (*buffer, string, int) {
    method formatHeader (line 550) | func (l *loggingT) formatHeader(s severity, file string, line int) *bu...
    method println (line 630) | func (l *loggingT) println(depth int, s severity, args ...interface{}) {
    method print (line 636) | func (l *loggingT) print(s severity, args ...interface{}) {
    method printDepth (line 640) | func (l *loggingT) printDepth(s severity, depth int, args ...interface...
    method printf (line 649) | func (l *loggingT) printf(depth int, s severity, format string, args ....
    method printWithFileLine (line 661) | func (l *loggingT) printWithFileLine(s severity, file string, line int...
    method output (line 671) | func (l *loggingT) output(s severity, buf *buffer, file string, line i...
    method exit (line 787) | func (l *loggingT) exit(err error) {
    method createFiles (line 861) | func (l *loggingT) createFiles(sev severity) error {
    method flushDaemon (line 881) | func (l *loggingT) flushDaemon() {
    method lockAndFlushAll (line 888) | func (l *loggingT) lockAndFlushAll() {
    method flushAll (line 896) | func (l *loggingT) flushAll() {
    method setV (line 961) | func (l *loggingT) setV(pc uintptr) Level {
  type buffer (line 459) | type buffer struct
    method twoDigits (line 594) | func (buf *buffer) twoDigits(i, d int) {
    method nDigits (line 603) | func (buf *buffer) nDigits(n, i, d int, pad byte) {
    method someDigits (line 615) | func (buf *buffer) someDigits(i, d int) int {
  constant digits (line 591) | digits = "0123456789"
  function timeoutFlush (line 746) | func timeoutFlush(timeout time.Duration) {
  function stacks (line 760) | func stacks(all bool) []byte {
  type syncBuffer (line 802) | type syncBuffer struct
    method Sync (line 810) | func (sb *syncBuffer) Sync() error {
    method Write (line 814) | func (sb *syncBuffer) Write(p []byte) (n int, err error) {
    method rotateFile (line 829) | func (sb *syncBuffer) rotateFile(now time.Time) error {
  constant bufferSize (line 857) | bufferSize = 256 * 1024
  constant flushInterval (line 878) | flushInterval = 30 * time.Second
  function CopyStandardLogTo (line 914) | func CopyStandardLogTo(name string) {
  type logBridge (line 927) | type logBridge
    method Write (line 931) | func (lb logBridge) Write(b []byte) (n int, err error) {
  type Verbose (line 983) | type Verbose
    method Info (line 1030) | func (v Verbose) Info(args ...interface{}) {
    method Infoln (line 1038) | func (v Verbose) Infoln(args ...interface{}) {
    method Infof (line 1046) | func (v Verbose) Infof(format string, args ...interface{}) {
  function V (line 999) | func V(level Level) Verbose {
  function Info (line 1054) | func Info(args ...interface{}) {
  function InfoDepth (line 1060) | func InfoDepth(depth int, args ...interface{}) {
  function InfofDepth (line 1063) | func InfofDepth(depth int, format string, args ...interface{}) {
  function Infoln (line 1069) | func Infoln(args ...interface{}) {
  function Infof (line 1075) | func Infof(format string, args ...interface{}) {
  function Warning (line 1081) | func Warning(args ...interface{}) {
  function WarningDepth (line 1087) | func WarningDepth(depth int, args ...interface{}) {
  function Warningln (line 1093) | func Warningln(args ...interface{}) {
  function Warningf (line 1099) | func Warningf(format string, args ...interface{}) {
  function Error (line 1105) | func Error(args ...interface{}) {
  function ErrorDepth (line 1111) | func ErrorDepth(depth int, args ...interface{}) {
  function ErrorfDepth (line 1115) | func ErrorfDepth(depth int, format string, args ...interface{}) {
  function Errorln (line 1121) | func Errorln(args ...interface{}) {
  function Errorf (line 1127) | func Errorf(format string, args ...interface{}) {
  function Fatal (line 1134) | func Fatal(args ...interface{}) {
  function FatalDepth (line 1140) | func FatalDepth(depth int, args ...interface{}) {
  function Fatalln (line 1147) | func Fatalln(args ...interface{}) {
  function Fatalf (line 1154) | func Fatalf(format string, args ...interface{}) {
  function Exit (line 1164) | func Exit(args ...interface{}) {
  function ExitDepth (line 1171) | func ExitDepth(depth int, args ...interface{}) {
  function Exitln (line 1177) | func Exitln(args ...interface{}) {
  function Exitf (line 1184) | func Exitf(format string, args ...interface{}) {

FILE: src/github.com/golang/glog/glog_file.go
  function createLogDirs (line 43) | func createLogDirs() {
  function init (line 57) | func init() {
  function shortHostname (line 74) | func shortHostname(hostname string) string {
  function logName (line 83) | func logName(tag string, t time.Time) (name, link string) {
  function create (line 105) | func create(tag string, t time.Time) (f *os.File, filename string, err e...

FILE: src/github.com/golang/glog/glog_test.go
  function TestShortHostname (line 32) | func TestShortHostname(t *testing.T) {
  type flushBuffer (line 45) | type flushBuffer struct
    method Flush (line 49) | func (f *flushBuffer) Flush() error {
    method Sync (line 53) | func (f *flushBuffer) Sync() error {
  method swap (line 58) | func (l *loggingT) swap(writers [numSeverity]flushSyncWriter) (old [numS...
  method newBuffers (line 69) | func (l *loggingT) newBuffers() [numSeverity]flushSyncWriter {
  function contents (line 74) | func contents(s severity) string {
  function contains (line 79) | func contains(s severity, str string, t *testing.T) bool {
  function setFlags (line 84) | func setFlags() {
  function TestInfo (line 89) | func TestInfo(t *testing.T) {
  function TestInfoDepth (line 101) | func TestInfoDepth(t *testing.T) {
  function init (line 145) | func init() {
  function TestCopyStandardLogToPanic (line 150) | func TestCopyStandardLogToPanic(t *testing.T) {
  function TestStandardLog (line 160) | func TestStandardLog(t *testing.T) {
  function TestHeader (line 173) | func TestHeader(t *testing.T) {
  function TestError (line 199) | func TestError(t *testing.T) {
  function TestWarning (line 221) | func TestWarning(t *testing.T) {
  function TestV (line 238) | func TestV(t *testing.T) {
  function TestVmoduleOn (line 253) | func TestVmoduleOn(t *testing.T) {
  function TestVmoduleOff (line 277) | func TestVmoduleOff(t *testing.T) {
  function testVmoduleGlob (line 312) | func testVmoduleGlob(pat string, match bool, t *testing.T) {
  function TestVmoduleGlob (line 323) | func TestVmoduleGlob(t *testing.T) {
  function TestRollover (line 329) | func TestRollover(t *testing.T) {
  function TestLogBacktraceAt (line 374) | func TestLogBacktraceAt(t *testing.T) {
  function BenchmarkHeader (line 410) | func BenchmarkHeader(b *testing.B) {

FILE: src/github.com/golang/protobuf/_conformance/conformance.go
  function main (line 47) | func main() {
  function handle (line 96) | func handle(req *pb.ConformanceRequest) *pb.ConformanceResponse {

FILE: src/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go
  constant _ (line 37) | _ = proto.ProtoPackageIsVersion2
  type WireFormat (line 39) | type WireFormat
    method String (line 58) | func (x WireFormat) String() string {
    method EnumDescriptor (line 61) | func (WireFormat) EnumDescriptor() ([]byte, []int) { return fileDescri...
  constant WireFormat_UNSPECIFIED (line 42) | WireFormat_UNSPECIFIED WireFormat = 0
  constant WireFormat_PROTOBUF (line 43) | WireFormat_PROTOBUF    WireFormat = 1
  constant WireFormat_JSON (line 44) | WireFormat_JSON        WireFormat = 2
  type ForeignEnum (line 63) | type ForeignEnum
    method String (line 82) | func (x ForeignEnum) String() string {
    method EnumDescriptor (line 85) | func (ForeignEnum) EnumDescriptor() ([]byte, []int) { return fileDescr...
  constant ForeignEnum_FOREIGN_FOO (line 66) | ForeignEnum_FOREIGN_FOO ForeignEnum = 0
  constant ForeignEnum_FOREIGN_BAR (line 67) | ForeignEnum_FOREIGN_BAR ForeignEnum = 1
  constant ForeignEnum_FOREIGN_BAZ (line 68) | ForeignEnum_FOREIGN_BAZ ForeignEnum = 2
  type TestAllTypes_NestedEnum (line 87) | type TestAllTypes_NestedEnum
    method String (line 109) | func (x TestAllTypes_NestedEnum) String() string {
    method EnumDescriptor (line 112) | func (TestAllTypes_NestedEnum) EnumDescriptor() ([]byte, []int) { retu...
  constant TestAllTypes_FOO (line 90) | TestAllTypes_FOO TestAllTypes_NestedEnum = 0
  constant TestAllTypes_BAR (line 91) | TestAllTypes_BAR TestAllTypes_NestedEnum = 1
  constant TestAllTypes_BAZ (line 92) | TestAllTypes_BAZ TestAllTypes_NestedEnum = 2
  constant TestAllTypes_NEG (line 93) | TestAllTypes_NEG TestAllTypes_NestedEnum = -1
  type ConformanceRequest (line 119) | type ConformanceRequest struct
    method Reset (line 131) | func (m *ConformanceRequest) Reset()                    { *m = Conform...
    method String (line 132) | func (m *ConformanceRequest) String() string            { return proto...
    method ProtoMessage (line 133) | func (*ConformanceRequest) ProtoMessage()               {}
    method Descriptor (line 134) | func (*ConformanceRequest) Descriptor() ([]byte, []int) { return fileD...
    method GetPayload (line 150) | func (m *ConformanceRequest) GetPayload() isConformanceRequest_Payload {
    method GetProtobufPayload (line 157) | func (m *ConformanceRequest) GetProtobufPayload() []byte {
    method GetJsonPayload (line 164) | func (m *ConformanceRequest) GetJsonPayload() string {
    method GetRequestedOutputFormat (line 171) | func (m *ConformanceRequest) GetRequestedOutputFormat() WireFormat {
    method XXX_OneofFuncs (line 179) | func (*ConformanceRequest) XXX_OneofFuncs() (func(msg proto.Message, b...
  type isConformanceRequest_Payload (line 136) | type isConformanceRequest_Payload interface
  type ConformanceRequest_ProtobufPayload (line 140) | type ConformanceRequest_ProtobufPayload struct
    method isConformanceRequest_Payload (line 147) | func (*ConformanceRequest_ProtobufPayload) isConformanceRequest_Payloa...
  type ConformanceRequest_JsonPayload (line 143) | type ConformanceRequest_JsonPayload struct
    method isConformanceRequest_Payload (line 148) | func (*ConformanceRequest_JsonPayload) isConformanceRequest_Payload() ...
  function _ConformanceRequest_OneofMarshaler (line 186) | func _ConformanceRequest_OneofMarshaler(msg proto.Message, b *proto.Buff...
  function _ConformanceRequest_OneofUnmarshaler (line 203) | func _ConformanceRequest_OneofUnmarshaler(msg proto.Message, tag, wire i...
  function _ConformanceRequest_OneofSizer (line 225) | func _ConformanceRequest_OneofSizer(msg proto.Message) (n int) {
  type ConformanceResponse (line 245) | type ConformanceResponse struct
    method Reset (line 256) | func (m *ConformanceResponse) Reset()                    { *m = Confor...
    method String (line 257) | func (m *ConformanceResponse) String() string            { return prot...
    method ProtoMessage (line 258) | func (*ConformanceResponse) ProtoMessage()               {}
    method Descriptor (line 259) | func (*ConformanceResponse) Descriptor() ([]byte, []int) { return file...
    method GetResult (line 291) | func (m *ConformanceResponse) GetResult() isConformanceResponse_Result {
    method GetParseError (line 298) | func (m *ConformanceResponse) GetParseError() string {
    method GetSerializeError (line 305) | func (m *ConformanceResponse) GetSerializeError() string {
    method GetRuntimeError (line 312) | func (m *ConformanceResponse) GetRuntimeError() string {
    method GetProtobufPayload (line 319) | func (m *ConformanceResponse) GetProtobufPayload() []byte {
    method GetJsonPayload (line 326) | func (m *ConformanceResponse) GetJsonPayload() string {
    method GetSkipped (line 333) | func (m *ConformanceResponse) GetSkipped() string {
    method XXX_OneofFuncs (line 341) | func (*ConformanceResponse) XXX_OneofFuncs() (func(msg proto.Message, ...
  type isConformanceResponse_Result (line 261) | type isConformanceResponse_Result interface
  type ConformanceResponse_ParseError (line 265) | type ConformanceResponse_ParseError struct
    method isConformanceResponse_Result (line 284) | func (*ConformanceResponse_ParseError) isConformanceResponse_Result() ...
  type ConformanceResponse_SerializeError (line 268) | type ConformanceResponse_SerializeError struct
    method isConformanceResponse_Result (line 285) | func (*ConformanceResponse_SerializeError) isConformanceResponse_Resul...
  type ConformanceResponse_RuntimeError (line 271) | type ConformanceResponse_RuntimeError struct
    method isConformanceResponse_Result (line 286) | func (*ConformanceResponse_RuntimeError) isConformanceResponse_Result(...
  type ConformanceResponse_ProtobufPayload (line 274) | type ConformanceResponse_ProtobufPayload struct
    method isConformanceResponse_Result (line 287) | func (*ConformanceResponse_ProtobufPayload) isConformanceResponse_Resu...
  type ConformanceResponse_JsonPayload (line 277) | type ConformanceResponse_JsonPayload struct
    method isConformanceResponse_Result (line 288) | func (*ConformanceResponse_JsonPayload) isConformanceResponse_Result()...
  type ConformanceResponse_Skipped (line 280) | type ConformanceResponse_Skipped struct
    method isConformanceResponse_Result (line 289) | func (*ConformanceResponse_Skipped) isConformanceResponse_Result()    ...
  function _ConformanceResponse_OneofMarshaler (line 352) | func _ConformanceResponse_OneofMarshaler(msg proto.Message, b *proto.Buf...
  function _ConformanceResponse_OneofUnmarshaler (line 381) | func _ConformanceResponse_OneofUnmarshaler(msg proto.Message, tag, wire ...
  function _ConformanceResponse_OneofSizer (line 431) | func _ConformanceResponse_OneofSizer(msg proto.Message) (n int) {
  type TestAllTypes (line 468) | type TestAllTypes struct
    method Reset (line 598) | func (m *TestAllTypes) Reset()                    { *m = TestAllTypes{} }
    method String (line 599) | func (m *TestAllTypes) String() string            { return proto.Compa...
    method ProtoMessage (line 600) | func (*TestAllTypes) ProtoMessage()               {}
    method Descriptor (line 601) | func (*TestAllTypes) Descriptor() ([]byte, []int) { return fileDescrip...
    method GetOneofField (line 645) | func (m *TestAllTypes) GetOneofField() isTestAllTypes_OneofField {
    method GetOptionalInt32 (line 652) | func (m *TestAllTypes) GetOptionalInt32() int32 {
    method GetOptionalInt64 (line 659) | func (m *TestAllTypes) GetOptionalInt64() int64 {
    method GetOptionalUint32 (line 666) | func (m *TestAllTypes) GetOptionalUint32() uint32 {
    method GetOptionalUint64 (line 673) | func (m *TestAllTypes) GetOptionalUint64() uint64 {
    method GetOptionalSint32 (line 680) | func (m *TestAllTypes) GetOptionalSint32() int32 {
    method GetOptionalSint64 (line 687) | func (m *TestAllTypes) GetOptionalSint64() int64 {
    method GetOptionalFixed32 (line 694) | func (m *TestAllTypes) GetOptionalFixed32() uint32 {
    method GetOptionalFixed64 (line 701) | func (m *TestAllTypes) GetOptionalFixed64() uint64 {
    method GetOptionalSfixed32 (line 708) | func (m *TestAllTypes) GetOptionalSfixed32() int32 {
    method GetOptionalSfixed64 (line 715) | func (m *TestAllTypes) GetOptionalSfixed64() int64 {
    method GetOptionalFloat (line 722) | func (m *TestAllTypes) GetOptionalFloat() float32 {
    method GetOptionalDouble (line 729) | func (m *TestAllTypes) GetOptionalDouble() float64 {
    method GetOptionalBool (line 736) | func (m *TestAllTypes) GetOptionalBool() bool {
    method GetOptionalString (line 743) | func (m *TestAllTypes) GetOptionalString() string {
    method GetOptionalBytes (line 750) | func (m *TestAllTypes) GetOptionalBytes() []byte {
    method GetOptionalNestedMessage (line 757) | func (m *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_Nested...
    method GetOptionalForeignMessage (line 764) | func (m *TestAllTypes) GetOptionalForeignMessage() *ForeignMessage {
    method GetOptionalNestedEnum (line 771) | func (m *TestAllTypes) GetOptionalNestedEnum() TestAllTypes_NestedEnum {
    method GetOptionalForeignEnum (line 778) | func (m *TestAllTypes) GetOptionalForeignEnum() ForeignEnum {
    method GetOptionalStringPiece (line 785) | func (m *TestAllTypes) GetOptionalStringPiece() string {
    method GetOptionalCord (line 792) | func (m *TestAllTypes) GetOptionalCord() string {
    method GetRecursiveMessage (line 799) | func (m *TestAllTypes) GetRecursiveMessage() *TestAllTypes {
    method GetRepeatedInt32 (line 806) | func (m *TestAllTypes) GetRepeatedInt32() []int32 {
    method GetRepeatedInt64 (line 813) | func (m *TestAllTypes) GetRepeatedInt64() []int64 {
    method GetRepeatedUint32 (line 820) | func (m *TestAllTypes) GetRepeatedUint32() []uint32 {
    method GetRepeatedUint64 (line 827) | func (m *TestAllTypes) GetRepeatedUint64() []uint64 {
    method GetRepeatedSint32 (line 834) | func (m *TestAllTypes) GetRepeatedSint32() []int32 {
    method GetRepeatedSint64 (line 841) | func (m *TestAllTypes) GetRepeatedSint64() []int64 {
    method GetRepeatedFixed32 (line 848) | func (m *TestAllTypes) GetRepeatedFixed32() []uint32 {
    method GetRepeatedFixed64 (line 855) | func (m *TestAllTypes) GetRepeatedFixed64() []uint64 {
    method GetRepeatedSfixed32 (line 862) | func (m *TestAllTypes) GetRepeatedSfixed32() []int32 {
    method GetRepeatedSfixed64 (line 869) | func (m *TestAllTypes) GetRepeatedSfixed64() []int64 {
    method GetRepeatedFloat (line 876) | func (m *TestAllTypes) GetRepeatedFloat() []float32 {
    method GetRepeatedDouble (line 883) | func (m *TestAllTypes) GetRepeatedDouble() []float64 {
    method GetRepeatedBool (line 890) | func (m *TestAllTypes) GetRepeatedBool() []bool {
    method GetRepeatedString (line 897) | func (m *TestAllTypes) GetRepeatedString() []string {
    method GetRepeatedBytes (line 904) | func (m *TestAllTypes) GetRepeatedBytes() [][]byte {
    method GetRepeatedNestedMessage (line 911) | func (m *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_Nest...
    method GetRepeatedForeignMessage (line 918) | func (m *TestAllTypes) GetRepeatedForeignMessage() []*ForeignMessage {
    method GetRepeatedNestedEnum (line 925) | func (m *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEn...
    method GetRepeatedForeignEnum (line 932) | func (m *TestAllTypes) GetRepeatedForeignEnum() []ForeignEnum {
    method GetRepeatedStringPiece (line 939) | func (m *TestAllTypes) GetRepeatedStringPiece() []string {
    method GetRepeatedCord (line 946) | func (m *TestAllTypes) GetRepeatedCord() []string {
    method GetMapInt32Int32 (line 953) | func (m *TestAllTypes) GetMapInt32Int32() map[int32]int32 {
    method GetMapInt64Int64 (line 960) | func (m *TestAllTypes) GetMapInt64Int64() map[int64]int64 {
    method GetMapUint32Uint32 (line 967) | func (m *TestAllTypes) GetMapUint32Uint32() map[uint32]uint32 {
    method GetMapUint64Uint64 (line 974) | func (m *TestAllTypes) GetMapUint64Uint64() map[uint64]uint64 {
    method GetMapSint32Sint32 (line 981) | func (m *TestAllTypes) GetMapSint32Sint32() map[int32]int32 {
    method GetMapSint64Sint64 (line 988) | func (m *TestAllTypes) GetMapSint64Sint64() map[int64]int64 {
    method GetMapFixed32Fixed32 (line 995) | func (m *TestAllTypes) GetMapFixed32Fixed32() map[uint32]uint32 {
    method GetMapFixed64Fixed64 (line 1002) | func (m *TestAllTypes) GetMapFixed64Fixed64() map[uint64]uint64 {
    method GetMapSfixed32Sfixed32 (line 1009) | func (m *TestAllTypes) GetMapSfixed32Sfixed32() map[int32]int32 {
    method GetMapSfixed64Sfixed64 (line 1016) | func (m *TestAllTypes) GetMapSfixed64Sfixed64() map[int64]int64 {
    method GetMapInt32Float (line 1023) | func (m *TestAllTypes) GetMapInt32Float() map[int32]float32 {
    method GetMapInt32Double (line 1030) | func (m *TestAllTypes) GetMapInt32Double() map[int32]float64 {
    method GetMapBoolBool (line 1037) | func (m *TestAllTypes) GetMapBoolBool() map[bool]bool {
    method GetMapStringString (line 1044) | func (m *TestAllTypes) GetMapStringString() map[string]string {
    method GetMapStringBytes (line 1051) | func (m *TestAllTypes) GetMapStringBytes() map[string][]byte {
    method GetMapStringNestedMessage (line 1058) | func (m *TestAllTypes) GetMapStringNestedMessage() map[string]*TestAll...
    method GetMapStringForeignMessage (line 1065) | func (m *TestAllTypes) GetMapStringForeignMessage() map[string]*Foreig...
    method GetMapStringNestedEnum (line 1072) | func (m *TestAllTypes) GetMapStringNestedEnum() map[string]TestAllType...
    method GetMapStringForeignEnum (line 1079) | func (m *TestAllTypes) GetMapStringForeignEnum() map[string]ForeignEnum {
    method GetOneofUint32 (line 1086) | func (m *TestAllTypes) GetOneofUint32() uint32 {
    method GetOneofNestedMessage (line 1093) | func (m *TestAllTypes) GetOneofNestedMessage() *TestAllTypes_NestedMes...
    method GetOneofString (line 1100) | func (m *TestAllTypes) GetOneofString() string {
    method GetOneofBytes (line 1107) | func (m *TestAllTypes) GetOneofBytes() []byte {
    method GetOneofBool (line 1114) | func (m *TestAllTypes) GetOneofBool() bool {
    method GetOneofUint64 (line 1121) | func (m *TestAllTypes) GetOneofUint64() uint64 {
    method GetOneofFloat (line 1128) | func (m *TestAllTypes) GetOneofFloat() float32 {
    method GetOneofDouble (line 1135) | func (m *TestAllTypes) GetOneofDouble() float64 {
    method GetOneofEnum (line 1142) | func (m *TestAllTypes) GetOneofEnum() TestAllTypes_NestedEnum {
    method GetOptionalBoolWrapper (line 1149) | func (m *TestAllTypes) GetOptionalBoolWrapper() *google_protobuf5.Bool...
    method GetOptionalInt32Wrapper (line 1156) | func (m *TestAllTypes) GetOptionalInt32Wrapper() *google_protobuf5.Int...
    method GetOptionalInt64Wrapper (line 1163) | func (m *TestAllTypes) GetOptionalInt64Wrapper() *google_protobuf5.Int...
    method GetOptionalUint32Wrapper (line 1170) | func (m *TestAllTypes) GetOptionalUint32Wrapper() *google_protobuf5.UI...
    method GetOptionalUint64Wrapper (line 1177) | func (m *TestAllTypes) GetOptionalUint64Wrapper() *google_protobuf5.UI...
    method GetOptionalFloatWrapper (line 1184) | func (m *TestAllTypes) GetOptionalFloatWrapper() *google_protobuf5.Flo...
    method GetOptionalDoubleWrapper (line 1191) | func (m *TestAllTypes) GetOptionalDoubleWrapper() *google_protobuf5.Do...
    method GetOptionalStringWrapper (line 1198) | func (m *TestAllTypes) GetOptionalStringWrapper() *google_protobuf5.St...
    method GetOptionalBytesWrapper (line 1205) | func (m *TestAllTypes) GetOptionalBytesWrapper() *google_protobuf5.Byt...
    method GetRepeatedBoolWrapper (line 1212) | func (m *TestAllTypes) GetRepeatedBoolWrapper() []*google_protobuf5.Bo...
    method GetRepeatedInt32Wrapper (line 1219) | func (m *TestAllTypes) GetRepeatedInt32Wrapper() []*google_protobuf5.I...
    method GetRepeatedInt64Wrapper (line 1226) | func (m *TestAllTypes) GetRepeatedInt64Wrapper() []*google_protobuf5.I...
    method GetRepeatedUint32Wrapper (line 1233) | func (m *TestAllTypes) GetRepeatedUint32Wrapper() []*google_protobuf5....
    method GetRepeatedUint64Wrapper (line 1240) | func (m *TestAllTypes) GetRepeatedUint64Wrapper() []*google_protobuf5....
    method GetRepeatedFloatWrapper (line 1247) | func (m *TestAllTypes) GetRepeatedFloatWrapper() []*google_protobuf5.F...
    method GetRepeatedDoubleWrapper (line 1254) | func (m *TestAllTypes) GetRepeatedDoubleWrapper() []*google_protobuf5....
    method GetRepeatedStringWrapper (line 1261) | func (m *TestAllTypes) GetRepeatedStringWrapper() []*google_protobuf5....
    method GetRepeatedBytesWrapper (line 1268) | func (m *TestAllTypes) GetRepeatedBytesWrapper() []*google_protobuf5.B...
    method GetOptionalDuration (line 1275) | func (m *TestAllTypes) GetOptionalDuration() *google_protobuf1.Duration {
    method GetOptionalTimestamp (line 1282) | func (m *TestAllTypes) GetOptionalTimestamp() *google_protobuf4.Timest...
    method GetOptionalFieldMask (line 1289) | func (m *TestAllTypes) GetOptionalFieldMask() *google_protobuf2.FieldM...
    method GetOptionalStruct (line 1296) | func (m *TestAllTypes) GetOptionalStruct() *google_protobuf3.Struct {
    method GetOptionalAny (line 1303) | func (m *TestAllTypes) GetOptionalAny() *google_protobuf.Any {
    method GetOptionalValue (line 1310) | func (m *TestAllTypes) GetOptionalValue() *google_protobuf3.Value {
    method GetRepeatedDuration (line 1317) | func (m *TestAllTypes) GetRepeatedDuration() []*google_protobuf1.Durat...
    method GetRepeatedTimestamp (line 1324) | func (m *TestAllTypes) GetRepeatedTimestamp() []*google_protobuf4.Time...
    method GetRepeatedFieldmask (line 1331) | func (m *TestAllTypes) GetRepeatedFieldmask() []*google_protobuf2.Fiel...
    method GetRepeatedStruct (line 1338) | func (m *TestAllTypes) GetRepeatedStruct() []*google_protobuf3.Struct {
    method GetRepeatedAny (line 1345) | func (m *TestAllTypes) GetRepeatedAny() []*google_protobuf.Any {
    method GetRepeatedValue (line 1352) | func (m *TestAllTypes) GetRepeatedValue() []*google_protobuf3.Value {
    method GetFieldname1 (line 1359) | func (m *TestAllTypes) GetFieldname1() int32 {
    method GetFieldName2 (line 1366) | func (m *TestAllTypes) GetFieldName2() int32 {
    method GetXFieldName3 (line 1373) | func (m *TestAllTypes) GetXFieldName3() int32 {
    method GetField_Name4_ (line 1380) | func (m *TestAllTypes) GetField_Name4_() int32 {
    method GetField0Name5 (line 1387) | func (m *TestAllTypes) GetField0Name5() int32 {
    method GetField_0Name6 (line 1394) | func (m *TestAllTypes) GetField_0Name6() int32 {
    method GetFieldName7 (line 1401) | func (m *TestAllTypes) GetFieldName7() int32 {
    method GetFieldName8 (line 1408) | func (m *TestAllTypes) GetFieldName8() int32 {
    method GetField_Name9 (line 1415) | func (m *TestAllTypes) GetField_Name9() int32 {
    method GetField_Name10 (line 1422) | func (m *TestAllTypes) GetField_Name10() int32 {
    method GetFIELD_NAME11 (line 1429) | func (m *TestAllTypes) GetFIELD_NAME11() int32 {
    method GetFIELDName12 (line 1436) | func (m *TestAllTypes) GetFIELDName12() int32 {
    method GetXFieldName13 (line 1443) | func (m *TestAllTypes) GetXFieldName13() int32 {
    method GetX_FieldName14 (line 1450) | func (m *TestAllTypes) GetX_FieldName14() int32 {
    method GetField_Name15 (line 1457) | func (m *TestAllTypes) GetField_Name15() int32 {
    method GetField__Name16 (line 1464) | func (m *TestAllTypes) GetField__Name16() int32 {
    method GetFieldName17__ (line 1471) | func (m *TestAllTypes) GetFieldName17__() int32 {
    method GetFieldName18__ (line 1478) | func (m *TestAllTypes) GetFieldName18__() int32 {
    method XXX_OneofFuncs (line 1486) | func (*TestAllTypes) XXX_OneofFuncs() (func(msg proto.Message, b *prot...
  type isTestAllTypes_OneofField (line 603) | type isTestAllTypes_OneofField interface
  type TestAllTypes_OneofUint32 (line 607) | type TestAllTypes_OneofUint32 struct
    method isTestAllTypes_OneofField (line 635) | func (*TestAllTypes_OneofUint32) isTestAllTypes_OneofField()        {}
  type TestAllTypes_OneofNestedMessage (line 610) | type TestAllTypes_OneofNestedMessage struct
    method isTestAllTypes_OneofField (line 636) | func (*TestAllTypes_OneofNestedMessage) isTestAllTypes_OneofField() {}
  type TestAllTypes_OneofString (line 613) | type TestAllTypes_OneofString struct
    method isTestAllTypes_OneofField (line 637) | func (*TestAllTypes_OneofString) isTestAllTypes_OneofField()        {}
  type TestAllTypes_OneofBytes (line 616) | type TestAllTypes_OneofBytes struct
    method isTestAllTypes_OneofField (line 638) | func (*TestAllTypes_OneofBytes) isTestAllTypes_OneofField()         {}
  type TestAllTypes_OneofBool (line 619) | type TestAllTypes_OneofBool struct
    method isTestAllTypes_OneofField (line 639) | func (*TestAllTypes_OneofBool) isTestAllTypes_OneofField()          {}
  type TestAllTypes_OneofUint64 (line 622) | type TestAllTypes_OneofUint64 struct
    method isTestAllTypes_OneofField (line 640) | func (*TestAllTypes_OneofUint64) isTestAllTypes_OneofField()        {}
  type TestAllTypes_OneofFloat (line 625) | type TestAllTypes_OneofFloat struct
    method isTestAllTypes_OneofField (line 641) | func (*TestAllTypes_OneofFloat) isTestAllTypes_OneofField()         {}
  type TestAllTypes_OneofDouble (line 628) | type TestAllTypes_OneofDouble struct
    method isTestAllTypes_OneofField (line 642) | func (*TestAllTypes_OneofDouble) isTestAllTypes_OneofField()        {}
  type TestAllTypes_OneofEnum (line 631) | type TestAllTypes_OneofEnum struct
    method isTestAllTypes_OneofField (line 643) | func (*TestAllTypes_OneofEnum) isTestAllTypes_OneofField()          {}
  function _TestAllTypes_OneofMarshaler (line 1500) | func _TestAllTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) er...
  function _TestAllTypes_OneofUnmarshaler (line 1544) | func _TestAllTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b ...
  function _TestAllTypes_OneofSizer (line 1616) | func _TestAllTypes_OneofSizer(msg proto.Message) (n int) {
  type TestAllTypes_NestedMessage (line 1658) | type TestAllTypes_NestedMessage struct
    method Reset (line 1663) | func (m *TestAllTypes_NestedMessage) Reset()                    { *m =...
    method String (line 1664) | func (m *TestAllTypes_NestedMessage) String() string            { retu...
    method ProtoMessage (line 1665) | func (*TestAllTypes_NestedMessage) ProtoMessage()               {}
    method Descriptor (line 1666) | func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) { retu...
    method GetA (line 1668) | func (m *TestAllTypes_NestedMessage) GetA() int32 {
    method GetCorecursive (line 1675) | func (m *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes {
  type ForeignMessage (line 1682) | type ForeignMessage struct
    method Reset (line 1686) | func (m *ForeignMessage) Reset()                    { *m = ForeignMess...
    method String (line 1687) | func (m *ForeignMessage) String() string            { return proto.Com...
    method ProtoMessage (line 1688) | func (*ForeignMessage) ProtoMessage()               {}
    method Descriptor (line 1689) | func (*ForeignMessage) Descriptor() ([]byte, []int) { return fileDescr...
    method GetC (line 1691) | func (m *ForeignMessage) GetC() int32 {
  function init (line 1698) | func init() {
  function init (line 1709) | func init() { proto.RegisterFile("conformance_proto/conformance.proto", ...

FILE: src/github.com/golang/protobuf/descriptor/descriptor.go
  function extractFile (line 50) | func extractFile(gz []byte) (*protobuf.FileDescriptorProto, error) {
  type Message (line 74) | type Message interface
  function ForMessage (line 81) | func ForMessage(msg Message) (fd *protobuf.FileDescriptorProto, md *prot...

FILE: src/github.com/golang/protobuf/descriptor/descriptor_test.go
  function TestMessage (line 12) | func TestMessage(t *testing.T) {
  function Example_Options (line 23) | func Example_Options() {

FILE: src/github.com/golang/protobuf/jsonpb/jsonpb.go
  type Marshaler (line 61) | type Marshaler struct
    method Marshal (line 120) | func (m *Marshaler) Marshal(out io.Writer, pb proto.Message) error {
    method MarshalToString (line 126) | func (m *Marshaler) MarshalToString(pb proto.Message) (string, error) {
    method marshalObject (line 152) | func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, ind...
    method writeSep (line 355) | func (m *Marshaler) writeSep(out *errWriter) {
    method marshalAny (line 363) | func (m *Marshaler) marshalAny(out *errWriter, any proto.Message, inde...
    method marshalTypeURL (line 417) | func (m *Marshaler) marshalTypeURL(out *errWriter, indent, typeURL str...
    method marshalField (line 435) | func (m *Marshaler) marshalField(out *errWriter, prop *proto.Propertie...
    method marshalValue (line 453) | func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Propertie...
  type AnyResolver (line 86) | type AnyResolver interface
  function defaultResolveAny (line 90) | func defaultResolveAny(typeUrl string) (proto.Message, error) {
  type JSONPBMarshaler (line 107) | type JSONPBMarshaler interface
  type JSONPBUnmarshaler (line 115) | type JSONPBUnmarshaler interface
  type int32Slice (line 134) | type int32Slice
    method Len (line 143) | func (s int32Slice) Len() int           { return len(s) }
    method Less (line 144) | func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] }
    method Swap (line 145) | func (s int32Slice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
  type wkt (line 147) | type wkt interface
  type Unmarshaler (line 615) | type Unmarshaler struct
    method UnmarshalNext (line 630) | func (u *Unmarshaler) UnmarshalNext(dec *json.Decoder, pb proto.Messag...
    method Unmarshal (line 641) | func (u *Unmarshaler) Unmarshal(r io.Reader, pb proto.Message) error {
    method unmarshalValue (line 669) | func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue ...
  function UnmarshalNext (line 649) | func UnmarshalNext(dec *json.Decoder, pb proto.Message) error {
  function Unmarshal (line 656) | func Unmarshal(r io.Reader, pb proto.Message) error {
  function UnmarshalString (line 663) | func UnmarshalString(str string, pb proto.Message) error {
  function jsonProperties (line 1028) | func jsonProperties(f reflect.StructField, origName bool) *proto.Propert...
  type fieldNames (line 1037) | type fieldNames struct
  function acceptedJSONFieldNames (line 1041) | func acceptedJSONFieldNames(prop *proto.Properties) fieldNames {
  type errWriter (line 1050) | type errWriter struct
    method write (line 1055) | func (w *errWriter) write(str string) {
  type mapKeys (line 1069) | type mapKeys
    method Len (line 1071) | func (s mapKeys) Len() int      { return len(s) }
    method Swap (line 1072) | func (s mapKeys) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
    method Less (line 1073) | func (s mapKeys) Less(i, j int) bool {

FILE: src/github.com/golang/protobuf/jsonpb/jsonpb_test.go
  function init (line 331) | func init() {
  function TestMarshaling (line 454) | func TestMarshaling(t *testing.T) {
  function TestMarshalJSONPBMarshaler (line 465) | func TestMarshalJSONPBMarshaler(t *testing.T) {
  function TestMarshalAnyJSONPBMarshaler (line 477) | func TestMarshalAnyJSONPBMarshaler(t *testing.T) {
  function TestUnmarshaling (line 628) | func TestUnmarshaling(t *testing.T) {
  function TestUnmarshalNullArray (line 648) | func TestUnmarshalNullArray(t *testing.T) {
  function TestUnmarshalNullObject (line 658) | func TestUnmarshalNullObject(t *testing.T) {
  function TestUnmarshalNext (line 668) | func TestUnmarshalNext(t *testing.T) {
  function TestUnmarshalingBadInput (line 715) | func TestUnmarshalingBadInput(t *testing.T) {
  type funcResolver (line 724) | type funcResolver
    method Resolve (line 726) | func (fn funcResolver) Resolve(turl string) (proto.Message, error) {
  function TestAnyWithCustomResolver (line 730) | func TestAnyWithCustomResolver(t *testing.T) {
  function TestUnmarshalJSONPBUnmarshaler (line 783) | func TestUnmarshalJSONPBUnmarshaler(t *testing.T) {
  function TestUnmarshalNullWithJSONPBUnmarshaler (line 794) | func TestUnmarshalNullWithJSONPBUnmarshaler(t *testing.T) {
  function TestUnmarshalAnyJSONPBUnmarshaler (line 807) | func TestUnmarshalAnyJSONPBUnmarshaler(t *testing.T) {
  constant dynamicMessageName (line 829) | dynamicMessageName = "google.protobuf.jsonpb.testing.dynamicMessage"
  function init (line 832) | func init() {
  type ptrFieldMessage (line 837) | type ptrFieldMessage struct
    method Reset (line 841) | func (m *ptrFieldMessage) Reset() {
    method String (line 844) | func (m *ptrFieldMessage) String() string {
    method ProtoMessage (line 848) | func (m *ptrFieldMessage) ProtoMessage() {
  type stringField (line 851) | type stringField struct
    method Reset (line 856) | func (s *stringField) Reset() {
    method String (line 859) | func (s *stringField) String() string {
    method ProtoMessage (line 863) | func (s *stringField) ProtoMessage() {
    method UnmarshalJSONPB (line 866) | func (s *stringField) UnmarshalJSONPB(jum *Unmarshaler, js []byte) err...
  type dynamicMessage (line 874) | type dynamicMessage struct
    method Reset (line 878) | func (m *dynamicMessage) Reset() {
    method String (line 882) | func (m *dynamicMessage) String() string {
    method ProtoMessage (line 886) | func (m *dynamicMessage) ProtoMessage() {
    method MarshalJSONPB (line 889) | func (m *dynamicMessage) MarshalJSONPB(jm *Marshaler) ([]byte, error) {
    method UnmarshalJSONPB (line 893) | func (m *dynamicMessage) UnmarshalJSONPB(jum *Unmarshaler, js []byte) ...

FILE: src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go
  constant _ (line 42) | _ = proto.ProtoPackageIsVersion2
  type Numeral (line 44) | type Numeral
    method String (line 63) | func (x Numeral) String() string {
    method EnumDescriptor (line 66) | func (Numeral) EnumDescriptor() ([]byte, []int) { return fileDescripto...
  constant Numeral_UNKNOWN (line 47) | Numeral_UNKNOWN Numeral = 0
  constant Numeral_ARABIC (line 48) | Numeral_ARABIC  Numeral = 1
  constant Numeral_ROMAN (line 49) | Numeral_ROMAN   Numeral = 2
  type Simple3 (line 68) | type Simple3 struct
    method Reset (line 72) | func (m *Simple3) Reset()                    { *m = Simple3{} }
    method String (line 73) | func (m *Simple3) String() string            { return proto.CompactTex...
    method ProtoMessage (line 74) | func (*Simple3) ProtoMessage()               {}
    method Descriptor (line 75) | func (*Simple3) Descriptor() ([]byte, []int) { return fileDescriptor0,...
    method GetDub (line 77) | func (m *Simple3) GetDub() float64 {
  type SimpleSlice3 (line 84) | type SimpleSlice3 struct
    method Reset (line 88) | func (m *SimpleSlice3) Reset()                    { *m = SimpleSlice3{} }
    method String (line 89) | func (m *SimpleSlice3) String() string            { return proto.Compa...
    method ProtoMessage (line 90) | func (*SimpleSlice3) ProtoMessage()               {}
    method Descriptor (line 91) | func (*SimpleSlice3) Descriptor() ([]byte, []int) { return fileDescrip...
    method GetSlices (line 93) | func (m *SimpleSlice3) GetSlices() []string {
  type SimpleMap3 (line 100) | type SimpleMap3 struct
    method Reset (line 104) | func (m *SimpleMap3) Reset()                    { *m = SimpleMap3{} }
    method String (line 105) | func (m *SimpleMap3) String() string            { return proto.Compact...
    method ProtoMessage (line 106) | func (*SimpleMap3) ProtoMessage()               {}
    method Descriptor (line 107) | func (*SimpleMap3) Descriptor() ([]byte, []int) { return fileDescripto...
    method GetStringy (line 109) | func (m *SimpleMap3) GetStringy() map[string]string {
  type SimpleNull3 (line 116) | type SimpleNull3 struct
    method Reset (line 120) | func (m *SimpleNull3) Reset()                    { *m = SimpleNull3{} }
    method String (line 121) | func (m *SimpleNull3) String() string            { return proto.Compac...
    method ProtoMessage (line 122) | func (*SimpleNull3) ProtoMessage()               {}
    method Descriptor (line 123) | func (*SimpleNull3) Descriptor() ([]byte, []int) { return fileDescript...
    method GetSimple (line 125) | func (m *SimpleNull3) GetSimple() *Simple3 {
  type Mappy (line 132) | type Mappy struct
    method Reset (line 145) | func (m *Mappy) Reset()                    { *m = Mappy{} }
    method String (line 146) | func (m *Mappy) String() string            { return proto.CompactTextS...
    method ProtoMessage (line 147) | func (*Mappy) ProtoMessage()               {}
    method Descriptor (line 148) | func (*Mappy) Descriptor() ([]byte, []int) { return fileDescriptor0, [...
    method GetNummy (line 150) | func (m *Mappy) GetNummy() map[int64]int32 {
    method GetStrry (line 157) | func (m *Mappy) GetStrry() map[string]string {
    method GetObjjy (line 164) | func (m *Mappy) GetObjjy() map[int32]*Simple3 {
    method GetBuggy (line 171) | func (m *Mappy) GetBuggy() map[int64]string {
    method GetBooly (line 178) | func (m *Mappy) GetBooly() map[bool]bool {
    method GetEnumy (line 185) | func (m *Mappy) GetEnumy() map[string]Numeral {
    method GetS32Booly (line 192) | func (m *Mappy) GetS32Booly() map[int32]bool {
    method GetS64Booly (line 199) | func (m *Mappy) GetS64Booly() map[int64]bool {
    method GetU32Booly (line 206) | func (m *Mappy) GetU32Booly() map[uint32]bool {
    method GetU64Booly (line 213) | func (m *Mappy) GetU64Booly() map[uint64]bool {
  function init (line 220) | func init() {
  function init (line 229) | func init() { proto.RegisterFile("more_test_objects.proto", fileDescript...

FILE: src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go
  type Widget_Color (line 20) | type Widget_Color
    method Enum (line 39) | func (x Widget_Color) Enum() *Widget_Color {
    method String (line 44) | func (x Widget_Color) String() string {
    method UnmarshalJSON (line 47) | func (x *Widget_Color) UnmarshalJSON(data []byte) error {
    method EnumDescriptor (line 55) | func (Widget_Color) EnumDescriptor() ([]byte, []int) { return fileDesc...
  constant Widget_RED (line 23) | Widget_RED   Widget_Color = 0
  constant Widget_GREEN (line 24) | Widget_GREEN Widget_Color = 1
  constant Widget_BLUE (line 25) | Widget_BLUE  Widget_Color = 2
  type Simple (line 58) | type Simple struct
    method Reset (line 73) | func (m *Simple) Reset()                    { *m = Simple{} }
    method String (line 74) | func (m *Simple) String() string            { return proto.CompactText...
    method ProtoMessage (line 75) | func (*Simple) ProtoMessage()               {}
    method Descriptor (line 76) | func (*Simple) Descriptor() ([]byte, []int) { return fileDescriptor1, ...
    method GetOBool (line 78) | func (m *Simple) GetOBool() bool {
    method GetOInt32 (line 85) | func (m *Simple) GetOInt32() int32 {
    method GetOInt64 (line 92) | func (m *Simple) GetOInt64() int64 {
    method GetOUint32 (line 99) | func (m *Simple) GetOUint32() uint32 {
    method GetOUint64 (line 106) | func (m *Simple) GetOUint64() uint64 {
    method GetOSint32 (line 113) | func (m *Simple) GetOSint32() int32 {
    method GetOSint64 (line 120) | func (m *Simple) GetOSint64() int64 {
    method GetOFloat (line 127) | func (m *Simple) GetOFloat() float32 {
    method GetODouble (line 134) | func (m *Simple) GetODouble() float64 {
    method GetOString (line 141) | func (m *Simple) GetOString() string {
    method GetOBytes (line 148) | func (m *Simple) GetOBytes() []byte {
  type NonFinites (line 156) | type NonFinites struct
    method Reset (line 166) | func (m *NonFinites) Reset()                    { *m = NonFinites{} }
    method String (line 167) | func (m *NonFinites) String() string            { return proto.Compact...
    method ProtoMessage (line 168) | func (*NonFinites) ProtoMessage()               {}
    method Descriptor (line 169) | func (*NonFinites) Descriptor() ([]byte, []int) { return fileDescripto...
    method GetFNan (line 171) | func (m *NonFinites) GetFNan() float32 {
    method GetFPinf (line 178) | func (m *NonFinites) GetFPinf() float32 {
    method GetFNinf (line 185) | func (m *NonFinites) GetFNinf() float32 {
    method GetDNan (line 192) | func (m *NonFinites) GetDNan() float64 {
    method GetDPinf (line 199) | func (m *NonFinites) GetDPinf() float64 {
    method GetDNinf (line 206) | func (m *NonFinites) GetDNinf() float64 {
  type Repeats (line 214) | type Repeats struct
    method Reset (line 229) | func (m *Repeats) Reset()                    { *m = Repeats{} }
    method String (line 230) | func (m *Repeats) String() string            { return proto.CompactTex...
    method ProtoMessage (line 231) | func (*Repeats) ProtoMessage()               {}
    method Descriptor (line 232) | func (*Repeats) Descriptor() ([]byte, []int) { return fileDescriptor1,...
    method GetRBool (line 234) | func (m *Repeats) GetRBool() []bool {
    method GetRInt32 (line 241) | func (m *Repeats) GetRInt32() []int32 {
    method GetRInt64 (line 248) | func (m *Repeats) GetRInt64() []int64 {
    method GetRUint32 (line 255) | func (m *Repeats) GetRUint32() []uint32 {
    method GetRUint64 (line 262) | func (m *Repeats) GetRUint64() []uint64 {
    method GetRSint32 (line 269) | func (m *Repeats) GetRSint32() []int32 {
    method GetRSint64 (line 276) | func (m *Repeats) GetRSint64() []int64 {
    method GetRFloat (line 283) | func (m *Repeats) GetRFloat() []float32 {
    method GetRDouble (line 290) | func (m *Repeats) GetRDouble() []float64 {
    method GetRString (line 297) | func (m *Repeats) GetRString() []string {
    method GetRBytes (line 304) | func (m *Repeats) GetRBytes() [][]byte {
  type Widget (line 312) | type Widget struct
    method Reset (line 322) | func (m *Widget) Reset()                    { *m = Widget{} }
    method String (line 323) | func (m *Widget) String() string            { return proto.CompactText...
    method ProtoMessage (line 324) | func (*Widget) ProtoMessage()               {}
    method Descriptor (line 325) | func (*Widget) Descriptor() ([]byte, []int) { return fileDescriptor1, ...
    method GetColor (line 327) | func (m *Widget) GetColor() Widget_Color {
    method GetRColor (line 334) | func (m *Widget) GetRColor() []Widget_Color {
    method GetSimple (line 341) | func (m *Widget) GetSimple() *Simple {
    method GetRSimple (line 348) | func (m *Widget) GetRSimple() []*Simple {
    method GetRepeats (line 355) | func (m *Widget) GetRepeats() *Repeats {
    method GetRRepeats (line 362) | func (m *Widget) GetRRepeats() []*Repeats {
  type Maps (line 369) | type Maps struct
    method Reset (line 375) | func (m *Maps) Reset()                    { *m = Maps{} }
    method String (line 376) | func (m *Maps) String() string            { return proto.CompactTextSt...
    method ProtoMessage (line 377) | func (*Maps) ProtoMessage()               {}
    method Descriptor (line 378) | func (*Maps) Descriptor() ([]byte, []int) { return fileDescriptor1, []...
    method GetMInt64Str (line 380) | func (m *Maps) GetMInt64Str() map[int64]string {
    method GetMBoolSimple (line 387) | func (m *Maps) GetMBoolSimple() map[bool]*Simple {
  type MsgWithOneof (line 394) | type MsgWithOneof struct
    method Reset (line 404) | func (m *MsgWithOneof) Reset()                    { *m = MsgWithOneof{} }
    method String (line 405) | func (m *MsgWithOneof) String() string            { return proto.Compa...
    method ProtoMessage (line 406) | func (*MsgWithOneof) ProtoMessage()               {}
    method Descriptor (line 407) | func (*MsgWithOneof) Descriptor() ([]byte, []int) { return fileDescrip...
    method GetUnion (line 431) | func (m *MsgWithOneof) GetUnion() isMsgWithOneof_Union {
    method GetTitle (line 438) | func (m *MsgWithOneof) GetTitle() string {
    method GetSalary (line 445) | func (m *MsgWithOneof) GetSalary() int64 {
    method GetCountry (line 452) | func (m *MsgWithOneof) GetCountry() string {
    method GetHomeAddress (line 459) | func (m *MsgWithOneof) GetHomeAddress() string {
    method XXX_OneofFuncs (line 467) | func (*MsgWithOneof) XXX_OneofFuncs() (func(msg proto.Message, b *prot...
  type isMsgWithOneof_Union (line 409) | type isMsgWithOneof_Union interface
  type MsgWithOneof_Title (line 413) | type MsgWithOneof_Title struct
    method isMsgWithOneof_Union (line 426) | func (*MsgWithOneof_Title) isMsgWithOneof_Union()       {}
  type MsgWithOneof_Salary (line 416) | type MsgWithOneof_Salary struct
    method isMsgWithOneof_Union (line 427) | func (*MsgWithOneof_Salary) isMsgWithOneof_Union()      {}
  type MsgWithOneof_Country (line 419) | type MsgWithOneof_Country struct
    method isMsgWithOneof_Union (line 428) | func (*MsgWithOneof_Country) isMsgWithOneof_Union()     {}
  type MsgWithOneof_HomeAddress (line 422) | type MsgWithOneof_HomeAddress struct
    method isMsgWithOneof_Union (line 429) | func (*MsgWithOneof_HomeAddress) isMsgWithOneof_Union() {}
  function _MsgWithOneof_OneofMarshaler (line 476) | func _MsgWithOneof_OneofMarshaler(msg proto.Message, b *proto.Buffer) er...
  function _MsgWithOneof_OneofUnmarshaler (line 499) | func _MsgWithOneof_OneofUnmarshaler(msg proto.Message, tag, wire int, b ...
  function _MsgWithOneof_OneofSizer (line 535) | func _MsgWithOneof_OneofSizer(msg proto.Message) (n int) {
  type Real (line 561) | type Real struct
    method Reset (line 567) | func (m *Real) Reset()                    { *m = Real{} }
    method String (line 568) | func (m *Real) String() string            { return proto.CompactTextSt...
    method ProtoMessage (line 569) | func (*Real) ProtoMessage()               {}
    method Descriptor (line 570) | func (*Real) Descriptor() ([]byte, []int) { return fileDescriptor1, []...
    method ExtensionRangeArray (line 576) | func (*Real) ExtensionRangeArray() []proto.ExtensionRange {
    method GetValue (line 580) | func (m *Real) GetValue() float64 {
  type Complex (line 587) | type Complex struct
    method Reset (line 593) | func (m *Complex) Reset()                    { *m = Complex{} }
    method String (line 594) | func (m *Complex) String() string            { return proto.CompactTex...
    method ProtoMessage (line 595) | func (*Complex) ProtoMessage()               {}
    method Descriptor (line 596) | func (*Complex) Descriptor() ([]byte, []int) { return fileDescriptor1,...
    method ExtensionRangeArray (line 602) | func (*Complex) ExtensionRangeArray() []proto.ExtensionRange {
    method GetImaginary (line 606) | func (m *Complex) GetImaginary() float64 {
  type KnownTypes (line 622) | type KnownTypes struct
    method Reset (line 641) | func (m *KnownTypes) Reset()                    { *m = KnownTypes{} }
    method String (line 642) | func (m *KnownTypes) String() string            { return proto.Compact...
    method ProtoMessage (line 643) | func (*KnownTypes) ProtoMessage()               {}
    method Descriptor (line 644) | func (*KnownTypes) Descriptor() ([]byte, []int) { return fileDescripto...
    method GetAn (line 646) | func (m *KnownTypes) GetAn() *google_protobuf.Any {
    method GetDur (line 653) | func (m *KnownTypes) GetDur() *google_protobuf1.Duration {
    method GetSt (line 660) | func (m *KnownTypes) GetSt() *google_protobuf2.Struct {
    method GetTs (line 667) | func (m *KnownTypes) GetTs() *google_protobuf3.Timestamp {
    method GetLv (line 674) | func (m *KnownTypes) GetLv() *google_protobuf2.ListValue {
    method GetVal (line 681) | func (m *KnownTypes) GetVal() *google_protobuf2.Value {
    method GetDbl (line 688) | func (m *KnownTypes) GetDbl() *google_protobuf4.DoubleValue {
    method GetFlt (line 695) | func (m *KnownTypes) GetFlt() *google_protobuf4.FloatValue {
    method GetI64 (line 702) | func (m *KnownTypes) GetI64() *google_protobuf4.Int64Value {
    method GetU64 (line 709) | func (m *KnownTypes) GetU64() *google_protobuf4.UInt64Value {
    method GetI32 (line 716) | func (m *KnownTypes) GetI32() *google_protobuf4.Int32Value {
    method GetU32 (line 723) | func (m *KnownTypes) GetU32() *google_protobuf4.UInt32Value {
    method GetBool (line 730) | func (m *KnownTypes) GetBool() *google_protobuf4.BoolValue {
    method GetStr (line 737) | func (m *KnownTypes) GetStr() *google_protobuf4.StringValue {
    method GetBytes (line 744) | func (m *KnownTypes) GetBytes() *google_protobuf4.BytesValue {
  function init (line 760) | func init() {
  function init (line 775) | func init() { proto.RegisterFile("test_objects.proto", fileDescriptor1) }

FILE: src/github.com/golang/protobuf/proto/all_test.go
  function old (line 53) | func old() *Buffer {
  function equalbytes (line 61) | func equalbytes(b1, b2 []byte, t *testing.T) {
  function initGoTestField (line 73) | func initGoTestField() *GoTestField {
  function initGoTest_RequiredGroup (line 83) | func initGoTest_RequiredGroup() *GoTest_RequiredGroup {
  function initGoTest_OptionalGroup (line 89) | func initGoTest_OptionalGroup() *GoTest_OptionalGroup {
  function initGoTest_RepeatedGroup (line 95) | func initGoTest_RepeatedGroup() *GoTest_RepeatedGroup {
  function initGoTest (line 101) | func initGoTest(setdefaults bool) *GoTest {
  function fail (line 139) | func fail(msg string, b *bytes.Buffer, s string, t *testing.T) {
  function hex (line 263) | func hex(c uint8) uint8 {
  function equal (line 276) | func equal(b []byte, s string, t *testing.T) bool {
  function overify (line 293) | func overify(t *testing.T, pb *GoTest, expected string) {
  function TestNumericPrimitives (line 328) | func TestNumericPrimitives(t *testing.T) {
  type fakeMarshaler (line 399) | type fakeMarshaler struct
    method Marshal (line 404) | func (f *fakeMarshaler) Marshal() ([]byte, error) { return f.b, f.err }
    method String (line 405) | func (f *fakeMarshaler) String() string           { return fmt.Sprintf...
    method ProtoMessage (line 406) | func (f *fakeMarshaler) ProtoMessage()            {}
    method Reset (line 407) | func (f *fakeMarshaler) Reset()                   {}
  type msgWithFakeMarshaler (line 409) | type msgWithFakeMarshaler struct
    method String (line 413) | func (m *msgWithFakeMarshaler) String() string { return CompactTextStr...
    method ProtoMessage (line 414) | func (m *msgWithFakeMarshaler) ProtoMessage()  {}
    method Reset (line 415) | func (m *msgWithFakeMarshaler) Reset()         {}
  function TestMarshalerEncoding (line 418) | func TestMarshalerEncoding(t *testing.T) {
  function TestBytesPrimitives (line 486) | func TestBytesPrimitives(t *testing.T) {
  function TestStringPrimitives (line 500) | func TestStringPrimitives(t *testing.T) {
  function TestRequiredBit (line 516) | func TestRequiredBit(t *testing.T) {
  function checkInitialized (line 531) | func checkInitialized(pb *GoTest, t *testing.T) {
  function TestReset (line 574) | func TestReset(t *testing.T) {
  function TestEncodeDecode1 (line 595) | func TestEncodeDecode1(t *testing.T) {
  function TestEncodeDecode2 (line 619) | func TestEncodeDecode2(t *testing.T) {
  function TestEncodeDecode3 (line 657) | func TestEncodeDecode3(t *testing.T) {
  function TestEncodeDecode4 (line 709) | func TestEncodeDecode4(t *testing.T) {
  function TestEncodeDecode5 (line 784) | func TestEncodeDecode5(t *testing.T) {
  function TestEncodeDecode6 (line 872) | func TestEncodeDecode6(t *testing.T) {
  function TestEncodeDecodeBytes1 (line 927) | func TestEncodeDecodeBytes1(t *testing.T) {
  function TestEncodeDecodeBytes2 (line 958) | func TestEncodeDecodeBytes2(t *testing.T) {
  function TestSkippingUnrecognizedFields (line 980) | func TestSkippingUnrecognizedFields(t *testing.T) {
  function TestSubmessageUnrecognizedFields (line 1032) | func TestSubmessageUnrecognizedFields(t *testing.T) {
  function TestNegativeInt32 (line 1081) | func TestNegativeInt32(t *testing.T) {
  function TestBigRepeated (line 1115) | func TestBigRepeated(t *testing.T) {
  function TestTypeMismatch (line 1226) | func TestTypeMismatch(t *testing.T) {
  function encodeDecode (line 1243) | func encodeDecode(t *testing.T, in, out Message, msg string) {
  function TestPackedNonPackedDecoderSwitching (line 1253) | func TestPackedNonPackedDecoderSwitching(t *testing.T) {
  function TestProto1RepeatedGroup (line 1272) | func TestProto1RepeatedGroup(t *testing.T) {
  function TestEnum (line 1294) | func TestEnum(t *testing.T) {
  function TestPrintingNilEnumFields (line 1312) | func TestPrintingNilEnumFields(t *testing.T) {
  function TestRequiredFieldEnforcement (line 1318) | func TestRequiredFieldEnforcement(t *testing.T) {
  function TestRequiredFieldEnforcementGroups (line 1340) | func TestRequiredFieldEnforcementGroups(t *testing.T) {
  function TestTypedNilMarshal (line 1356) | func TestTypedNilMarshal(t *testing.T) {
  type nonNillableInt (line 1374) | type nonNillableInt
    method Marshal (line 1376) | func (nni nonNillableInt) Marshal() ([]byte, error) {
  type NNIMessage (line 1380) | type NNIMessage struct
    method Reset (line 1384) | func (*NNIMessage) Reset()         {}
    method String (line 1385) | func (*NNIMessage) String() string { return "" }
    method ProtoMessage (line 1386) | func (*NNIMessage) ProtoMessage()  {}
  type nillableMessage (line 1389) | type nillableMessage struct
    method Marshal (line 1393) | func (nm *nillableMessage) Marshal() ([]byte, error) {
  type NMMessage (line 1397) | type NMMessage struct
    method Reset (line 1401) | func (*NMMessage) Reset()         {}
    method String (line 1402) | func (*NMMessage) String() string { return "" }
    method ProtoMessage (line 1403) | func (*NMMessage) ProtoMessage()  {}
  function TestNilMarshaler (line 1406) | func TestNilMarshaler(t *testing.T) {
  function TestAllSetDefaults (line 1423) | func TestAllSetDefaults(t *testing.T) {
  function TestSetDefaultsWithSetField (line 1455) | func TestSetDefaultsWithSetField(t *testing.T) {
  function TestSetDefaultsWithSubMessage (line 1466) | func TestSetDefaultsWithSubMessage(t *testing.T) {
  function TestSetDefaultsWithRepeatedSubMessage (line 1486) | func TestSetDefaultsWithRepeatedSubMessage(t *testing.T) {
  function TestSetDefaultWithRepeatedNonMessage (line 1501) | func TestSetDefaultWithRepeatedNonMessage(t *testing.T) {
  function TestMaximumTagNumber (line 1512) | func TestMaximumTagNumber(t *testing.T) {
  function TestJSON (line 1529) | func TestJSON(t *testing.T) {
  function TestBadWireType (line 1568) | func TestBadWireType(t *testing.T) {
  function TestBytesWithInvalidLength (line 1578) | func TestBytesWithInvalidLength(t *testing.T) {
  function TestLengthOverflow (line 1584) | func TestLengthOverflow(t *testing.T) {
  function TestVarintOverflow (line 1590) | func TestVarintOverflow(t *testing.T) {
  function TestUnmarshalFuzz (line 1598) | func TestUnmarshalFuzz(t *testing.T) {
  function TestMergeMessages (line 1612) | func TestMergeMessages(t *testing.T) {
  function TestExtensionMarshalOrder (line 1642) | func TestExtensionMarshalOrder(t *testing.T) {
  function TestMessageSetMarshalOrder (line 1725) | func TestMessageSetMarshalOrder(t *testing.T) {
  function TestUnmarshalMergesMessages (line 1762) | func TestUnmarshalMergesMessages(t *testing.T) {
  function TestEncodingSizes (line 1805) | func TestEncodingSizes(t *testing.T) {
  function TestRequiredNotSetError (line 1827) | func TestRequiredNotSetError(t *testing.T) {
  function fuzzUnmarshal (line 1891) | func fuzzUnmarshal(t *testing.T, data []byte) {
  function TestMapFieldMarshal (line 1904) | func TestMapFieldMarshal(t *testing.T) {
  function TestMapFieldRoundTrips (line 1949) | func TestMapFieldRoundTrips(t *testing.T) {
  function TestMapFieldWithNil (line 1984) | func TestMapFieldWithNil(t *testing.T) {
  function TestMapFieldWithNilBytes (line 2005) | func TestMapFieldWithNilBytes(t *testing.T) {
  function TestDecodeMapFieldMissingKey (line 2036) | func TestDecodeMapFieldMissingKey(t *testing.T) {
  function TestDecodeMapFieldMissingValue (line 2053) | func TestDecodeMapFieldMissingValue(t *testing.T) {
  function TestOneof (line 2070) | func TestOneof(t *testing.T) {
  function TestInefficientPackedBool (line 2122) | func TestInefficientPackedBool(t *testing.T) {
  function testMsg (line 2137) | func testMsg() *GoTest {
  function bytesMsg (line 2149) | func bytesMsg() *GoTest {
  function benchmarkMarshal (line 2159) | func benchmarkMarshal(b *testing.B, pb Message, marshal func(Message) ([...
  function benchmarkBufferMarshal (line 2168) | func benchmarkBufferMarshal(b *testing.B, pb Message) {
  function benchmarkSize (line 2177) | func benchmarkSize(b *testing.B, pb Message) {
  function newOf (line 2184) | func newOf(pb Message) Message {
  function benchmarkUnmarshal (line 2192) | func benchmarkUnmarshal(b *testing.B, pb Message, unmarshal func([]byte,...
  function benchmarkBufferUnmarshal (line 2203) | func benchmarkBufferUnmarshal(b *testing.B, pb Message) {
  function BenchmarkMarshal (line 2213) | func BenchmarkMarshal(b *testing.B) {
  function BenchmarkBufferMarshal (line 2217) | func BenchmarkBufferMarshal(b *testing.B) {
  function BenchmarkSize (line 2221) | func BenchmarkSize(b *testing.B) {
  function BenchmarkUnmarshal (line 2225) | func BenchmarkUnmarshal(b *testing.B) {
  function BenchmarkBufferUnmarshal (line 2229) | func BenchmarkBufferUnmarshal(b *testing.B) {
  function BenchmarkMarshalBytes (line 2233) | func BenchmarkMarshalBytes(b *testing.B) {
  function BenchmarkBufferMarshalBytes (line 2237) | func BenchmarkBufferMarshalBytes(b *testing.B) {
  function BenchmarkSizeBytes (line 2241) | func BenchmarkSizeBytes(b *testing.B) {
  function BenchmarkUnmarshalBytes (line 2245) | func BenchmarkUnmarshalBytes(b *testing.B) {
  function BenchmarkBufferUnmarshalBytes (line 2249) | func BenchmarkBufferUnmarshalBytes(b *testing.B) {
  function BenchmarkUnmarshalUnrecognizedFields (line 2253) | func BenchmarkUnmarshalUnrecognizedFields(b *testing.B) {

FILE: src/github.com/golang/protobuf/proto/any_test.go
  function anyEqual (line 55) | func anyEqual(got, want proto.Message) bool {
  type golden (line 65) | type golden struct
  function makeGolden (line 72) | func makeGolden() []golden {
  function TestMarshalGolden (line 210) | func TestMarshalGolden(t *testing.T) {
  function TestUnmarshalGolden (line 221) | func TestUnmarshalGolden(t *testing.T) {
  function TestMarshalUnknownAny (line 242) | func TestMarshalUnknownAny(t *testing.T) {
  function TestAmbiguousAny (line 260) | func TestAmbiguousAny(t *testing.T) {
  function TestUnmarshalOverwriteAny (line 272) | func TestUnmarshalOverwriteAny(t *testing.T) {
  function TestUnmarshalAnyMixAndMatch (line 288) | func TestUnmarshalAnyMixAndMatch(t *testing.T) {

FILE: src/github.com/golang/protobuf/proto/clone.go
  function Clone (line 44) | func Clone(pb Message) Message {
  function Merge (line 60) | func Merge(dst, src Message) {
  function mergeStruct (line 77) | func mergeStruct(out, in reflect.Value) {
  function mergeAny (line 111) | func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) {
  function mergeExtension (line 214) | func mergeExtension(out, in map[int32]Extension) {

FILE: src/github.com/golang/protobuf/proto/clone_test.go
  function init (line 63) | func init() {
  function TestClone (line 72) | func TestClone(t *testing.T) {
  function TestCloneNil (line 101) | func TestCloneNil(t *testing.T) {
  function TestMerge (line 292) | func TestMerge(t *testing.T) {

FILE: src/github.com/golang/protobuf/proto/decode.go
  function DecodeVarint (line 63) | func DecodeVarint(buf []byte) (x uint64, n int) {
  method decodeVarintSlow (line 80) | func (p *Buffer) decodeVarintSlow() (x uint64, err error) {
  method DecodeVarint (line 107) | func (p *Buffer) DecodeVarint() (x uint64, err error) {
  method DecodeFixed64 (line 207) | func (p *Buffer) DecodeFixed64() (x uint64, err error) {
  method DecodeFixed32 (line 230) | func (p *Buffer) DecodeFixed32() (x uint64, err error) {
  method DecodeZigzag64 (line 249) | func (p *Buffer) DecodeZigzag64() (x uint64, err error) {
  method DecodeZigzag32 (line 261) | func (p *Buffer) DecodeZigzag32() (x uint64, err error) {
  method DecodeRawBytes (line 276) | func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) {
  method DecodeStringBytes (line 306) | func (p *Buffer) DecodeStringBytes() (s string, err error) {
  method skipAndSave (line 317) | func (o *Buffer) skipAndSave(t reflect.Type, tag, wire int, base structP...
  method skip (line 344) | func (o *Buffer) skip(t reflect.Type, tag, wire int) error {
  type Unmarshaler (line 385) | type Unmarshaler interface
  function Unmarshal (line 396) | func Unmarshal(buf []byte, pb Message) error {
  function UnmarshalMerge (line 407) | func UnmarshalMerge(buf []byte, pb Message) error {
  method DecodeMessage (line 416) | func (p *Buffer) DecodeMessage(pb Message) error {
  method DecodeGroup (line 425) | func (p *Buffer) DecodeGroup(pb Message) error {
  method Unmarshal (line 439) | func (p *Buffer) Unmarshal(pb Message) error {
  method unmarshalType (line 462) | func (o *Buffer) unmarshalType(st reflect.Type, prop *StructProperties, ...
  constant boolPoolSize (line 586) | boolPoolSize   = 16
  constant uint32PoolSize (line 587) | uint32PoolSize = 8
  constant uint64PoolSize (line 588) | uint64PoolSize = 4
  method dec_bool (line 592) | func (o *Buffer) dec_bool(p *Properties, base structPointer) error {
  method dec_proto3_bool (line 606) | func (o *Buffer) dec_proto3_bool(p *Properties, base structPointer) error {
  method dec_int32 (line 616) | func (o *Buffer) dec_int32(p *Properties, base structPointer) error {
  method dec_proto3_int32 (line 625) | func (o *Buffer) dec_proto3_int32(p *Properties, base structPointer) err...
  method dec_int64 (line 635) | func (o *Buffer) dec_int64(p *Properties, base structPointer) error {
  method dec_proto3_int64 (line 644) | func (o *Buffer) dec_proto3_int64(p *Properties, base structPointer) err...
  method dec_string (line 654) | func (o *Buffer) dec_string(p *Properties, base structPointer) error {
  method dec_proto3_string (line 663) | func (o *Buffer) dec_proto3_string(p *Properties, base structPointer) er...
  method dec_slice_byte (line 673) | func (o *Buffer) dec_slice_byte(p *Properties, base structPointer) error {
  method dec_slice_bool (line 683) | func (o *Buffer) dec_slice_bool(p *Properties, base structPointer) error {
  method dec_slice_packed_bool (line 694) | func (o *Buffer) dec_slice_packed_bool(p *Properties, base structPointer...
  method dec_slice_int32 (line 721) | func (o *Buffer) dec_slice_int32(p *Properties, base structPointer) error {
  method dec_slice_packed_int32 (line 731) | func (o *Buffer) dec_slice_packed_int32(p *Properties, base structPointe...
  method dec_slice_int64 (line 755) | func (o *Buffer) dec_slice_int64(p *Properties, base structPointer) error {
  method dec_slice_packed_int64 (line 766) | func (o *Buffer) dec_slice_packed_int64(p *Properties, base structPointe...
  method dec_slice_string (line 790) | func (o *Buffer) dec_slice_string(p *Properties, base structPointer) err...
  method dec_slice_slice_byte (line 801) | func (o *Buffer) dec_slice_slice_byte(p *Properties, base structPointer)...
  method dec_new_map (line 812) | func (o *Buffer) dec_new_map(p *Properties, base structPointer) error {
  method dec_struct_group (line 885) | func (o *Buffer) dec_struct_group(p *Properties, base structPointer) err...
  method dec_struct_message (line 896) | func (o *Buffer) dec_struct_message(p *Properties, base structPointer) (...
  method dec_slice_struct_message (line 928) | func (o *Buffer) dec_slice_struct_message(p *Properties, base structPoin...
  method dec_slice_struct_group (line 933) | func (o *Buffer) dec_slice_struct_group(p *Properties, base structPointe...
  method dec_slice_struct (line 938) | func (o *Buffer) dec_slice_struct(p *Properties, is_group bool, base str...

FILE: src/github.com/golang/protobuf/proto/decode_test.go
  function BenchmarkVarint32ArraySmall (line 51) | func BenchmarkVarint32ArraySmall(b *testing.B) {
  function BenchmarkVarint32ArrayLarge (line 76) | func BenchmarkVarint32ArrayLarge(b *testing.B) {
  function BenchmarkVarint64ArraySmall (line 101) | func BenchmarkVarint64ArraySmall(b *testing.B) {
  function BenchmarkVarint64ArrayLarge (line 126) | func BenchmarkVarint64ArrayLarge(b *testing.B) {
  function BenchmarkVarint64ArrayMixed (line 151) | func BenchmarkVarint64ArrayMixed(b *testing.B) {
  function genInt32Dist (line 184) | func genInt32Dist(dist [7]int, count int) (dest []int32) {
  function genUint64Dist (line 212) | func genUint64Dist(dist [11]int, count int) (dest []uint64) {
  function BenchmarkDecodeEmpty (line 247) | func BenchmarkDecodeEmpty(b *testing.B) {

FILE: src/github.com/golang/protobuf/proto/discard.go
  function DiscardUnknown (line 51) | func DiscardUnknown(m Message) {
  function discardLegacy (line 55) | func discardLegacy(m Message) {

FILE: src/github.com/golang/protobuf/proto/encode.go
  type RequiredNotSetError (line 54) | type RequiredNotSetError struct
    method Error (line 58) | func (e *RequiredNotSetError) Error() string {
  constant maxVarintBytes (line 83) | maxVarintBytes = 10
  constant maxMarshalSize (line 87) | maxMarshalSize = 1<<31 - 1
  function En
Condensed preview — 476 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,506K chars).
[
  {
    "path": ".gitignore",
    "chars": 36,
    "preview": ".idea/*\npkg/*\nbin/game.exe\nbin/game\n"
  },
  {
    "path": "README.md",
    "chars": 4335,
    "preview": "# 德州扑克服务器Go实现\n\n## 核心算法:\n```go\ntype Cards []byte\n// todo 两对和四张起脚牌的判定\nvar StraightMask = []uint16{15872, 7936, 3968, 1984,"
  },
  {
    "path": "bin/build-linux.sh",
    "chars": 696,
    "preview": "#!/bin/bash\n# usage ./build-linux.sh 1.0.13\ncurDir=`pwd`\nGREEN=\"\\e[1;32m\"\nRESET=\"\\e[0m\"\necho -e \"${GREEN} current dir is"
  },
  {
    "path": "bin/build-win.sh",
    "chars": 702,
    "preview": "#!/bin/bash\n# usage ./build-linux.sh 1.0.13\ncurDir=`pwd`\nGREEN=\"\\e[1;32m\"\nRESET=\"\\e[0m\"\necho -e \"${GREEN} current dir is"
  },
  {
    "path": "bin/client/.gitignore",
    "chars": 51,
    "preview": "#IDE\n/library\n/local\n/build\n/temp\n/.idea\n/settings\n"
  },
  {
    "path": "bin/client/README.md",
    "chars": 35,
    "preview": "# Cocos Creator 写的一个德州扑克的游戏回放,仅供参考\n"
  },
  {
    "path": "bin/client/assets/Scene/main.fire",
    "chars": 91409,
    "preview": "[\n  {\n    \"__type__\": \"cc.SceneAsset\",\n    \"_name\": \"\",\n    \"_objFlags\": 0,\n    \"_rawFiles\": null,\n    \"scene\": {\n      "
  },
  {
    "path": "bin/client/assets/Scene/main.fire.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"b1a3242c-6595-42df-a0fc-e177f727763d\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/Scene.meta",
    "chars": 108,
    "preview": "{\n  \"ver\": \"1.0.1\",\n  \"uuid\": \"a6716ca2-df58-41aa-b8d3-8ca203720a85\",\n  \"isGroup\": false,\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/Script/Common.js",
    "chars": 15642,
    "preview": "cc.Class({\n    extends:  cc.Component,\n\n    properties: {\n        seat:{\n            default:[],\n            type:cc.Nod"
  },
  {
    "path": "bin/client/assets/Script/Common.js.meta",
    "chars": 109,
    "preview": "{\n  \"ver\": \"1.0.2\",\n  \"uuid\": \"b91d4d1c-d6e8-4abe-8ab4-226f9e1dce57\",\n  \"isPlugin\": false,\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/Script/CountDown.js",
    "chars": 14485,
    "preview": "var Common = require('Common');\ncc.Class({\n    extends: Common,\n    properties: {\n        //倒计时\n        countdown_execut"
  },
  {
    "path": "bin/client/assets/Script/CountDown.js.meta",
    "chars": 109,
    "preview": "{\n  \"ver\": \"1.0.2\",\n  \"uuid\": \"ac50a2dc-5c7b-450e-8387-93e1500ca396\",\n  \"isPlugin\": false,\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/Script/Encoding.js",
    "chars": 112637,
    "preview": "// This is free and unencumbered software released into the public domain.\n// See LICENSE.md for more information.\n\n// I"
  },
  {
    "path": "bin/client/assets/Script/Encoding.js.meta",
    "chars": 108,
    "preview": "{\n  \"ver\": \"1.0.2\",\n  \"uuid\": \"2d3ef493-9e65-47f1-a3cc-c30517fcd563\",\n  \"isPlugin\": true,\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/Script/main.js",
    "chars": 43671,
    "preview": "var CountDown = require('CountDown');\ncc.Class({\n    extends: CountDown,\n\n    properties: {\n\n        data:null,\n\n       "
  },
  {
    "path": "bin/client/assets/Script/main.js.meta",
    "chars": 109,
    "preview": "{\n  \"ver\": \"1.0.2\",\n  \"uuid\": \"ba49ca20-5856-400d-8933-bc1dfd520dc1\",\n  \"isPlugin\": false,\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/Script.meta",
    "chars": 108,
    "preview": "{\n  \"ver\": \"1.0.1\",\n  \"uuid\": \"3af1e10d-442f-4956-9f83-2dec73688db7\",\n  \"isGroup\": false,\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/GameMain_6p.plist",
    "chars": 54303,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.c"
  },
  {
    "path": "bin/client/assets/resources/GameMain_6p.plist.meta",
    "chars": 63646,
    "preview": "{\n  \"ver\": \"1.2.4\",\n  \"uuid\": \"aae22d42-a9cf-43f5-8c35-5348d3f98f75\",\n  \"rawTextureUuid\": \"9645f4c7-099e-4bac-9779-ac372"
  },
  {
    "path": "bin/client/assets/resources/GameMain_6p.png.meta",
    "chars": 689,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"9645f4c7-099e-4bac-9779-ac372a798d1b\",\n  \"type\": \"sprite\",\n  \"wrapMode\": \"clamp\",\n  \"filt"
  },
  {
    "path": "bin/client/assets/resources/audio/audio_allinWin.wav.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"0dd8cf6f-e146-4622-8b8e-7c9dc5f77a48\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/audio/audio_check.wav.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"ae2e6fb2-2be9-4ced-a4e9-2ee56c9667ed\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/audio/audio_chipsToPot.wav.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"97c76f08-6b20-4757-aefb-5a95e710cb13\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/audio/audio_chipsToTable.wav.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"2773b2b7-4482-4133-9900-7fdcd308d2f9\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/audio/audio_distributeCard.wav.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"0b5c008e-cf15-4b8c-be63-8b1197cb1789\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/audio/audio_fold.wav.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"87dcf996-d47c-4b0e-a821-a1d034aad12b\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/audio/audio_normalWin.wav.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"e32b382b-4248-4a95-9c83-6e170adb4aa4\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/audio/audio_pokerClick.caf.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"2f80411a-9257-4450-aa30-4e860f2ff54b\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/audio/audio_pokerClick.mp3.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"b3e3bc15-0e5e-4d16-932c-08651a89045d\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/audio/audio_timeout.wav.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"3ef5c879-e7cd-4121-be05-a98fa397e548\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/audio/audio_yourTurn.wav.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"85960017-45b4-40f2-a17e-75cdfda31054\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/audio.meta",
    "chars": 108,
    "preview": "{\n  \"ver\": \"1.0.1\",\n  \"uuid\": \"0a834482-9f57-4f53-af0e-98a99ad7438a\",\n  \"isGroup\": false,\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/game_cards.plist",
    "chars": 24964,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.c"
  },
  {
    "path": "bin/client/assets/resources/game_cards.plist.meta",
    "chars": 29021,
    "preview": "{\n  \"ver\": \"1.2.4\",\n  \"uuid\": \"24cba613-120c-4b54-8d58-0423cdcb5f42\",\n  \"rawTextureUuid\": \"24e07000-e189-4c09-8859-47cc2"
  },
  {
    "path": "bin/client/assets/resources/game_cards.png.meta",
    "chars": 692,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"24e07000-e189-4c09-8859-47cc25581533\",\n  \"type\": \"sprite\",\n  \"wrapMode\": \"clamp\",\n  \"filt"
  },
  {
    "path": "bin/client/assets/resources/game_cards_6p.plist",
    "chars": 25130,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.c"
  },
  {
    "path": "bin/client/assets/resources/game_cards_6p.plist.meta",
    "chars": 29129,
    "preview": "{\n  \"ver\": \"1.2.4\",\n  \"uuid\": \"2f6611b7-f699-4bc8-b740-5e5eb6600610\",\n  \"rawTextureUuid\": \"d3175df2-92cf-41d8-9e71-1fd53"
  },
  {
    "path": "bin/client/assets/resources/game_cards_6p.png.meta",
    "chars": 693,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"d3175df2-92cf-41d8-9e71-1fd53833ccb5\",\n  \"type\": \"sprite\",\n  \"wrapMode\": \"clamp\",\n  \"filt"
  },
  {
    "path": "bin/client/assets/resources/game_desk_bg.jpg.meta",
    "chars": 687,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"e1084d70-0b00-4041-8ccc-62b69fbf1716\",\n  \"type\": \"sprite\",\n  \"wrapMode\": \"clamp\",\n  \"filt"
  },
  {
    "path": "bin/client/assets/resources/game_desk_bg_6p.jpg.meta",
    "chars": 692,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"8eb63dd6-6d9b-47d8-8021-077beaf0c174\",\n  \"type\": \"sprite\",\n  \"wrapMode\": \"clamp\",\n  \"filt"
  },
  {
    "path": "bin/client/assets/resources/splash.gif.meta",
    "chars": 88,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"14855b17-56e8-473b-8923-ebbe56d4cc81\",\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/assets/resources/splash.png.meta",
    "chars": 679,
    "preview": "{\n  \"ver\": \"1.0.0\",\n  \"uuid\": \"ac7ab283-08d2-456d-b2fc-0a9ffe60330e\",\n  \"type\": \"sprite\",\n  \"wrapMode\": \"clamp\",\n  \"filt"
  },
  {
    "path": "bin/client/assets/resources.meta",
    "chars": 108,
    "preview": "{\n  \"ver\": \"1.0.1\",\n  \"uuid\": \"1b5c7d50-37bb-4fb6-9e86-28af5dde70ef\",\n  \"isGroup\": false,\n  \"subMetas\": {}\n}"
  },
  {
    "path": "bin/client/creator.d.ts",
    "chars": 347009,
    "preview": "\n/** !#en\nThe main namespace of Cocos2d-JS, all engine core classes, functions, properties and constants are defined in "
  },
  {
    "path": "bin/client/jsconfig.json",
    "chars": 207,
    "preview": "{\n    \"compilerOptions\": {\n        \"target\": \"es6\",\n        \"module\": \"commonjs\"\n    },\n    \"exclude\": [\n        \"node_m"
  },
  {
    "path": "bin/client/project.json",
    "chars": 60,
    "preview": "{\n  \"engine\": \"cocos-creator-js\",\n  \"packages\": \"packages\"\n}"
  },
  {
    "path": "bin/client.html",
    "chars": 4633,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <title>game test</title>\n</head>\n\n<body>\n\n\n<p>登录 :\n    <out"
  },
  {
    "path": "src/github.com/davecgh/go-spew/LICENSE",
    "chars": 750,
    "preview": "Copyright (c) 2012-2013 Dave Collins <dave@davec.name>\n\nPermission to use, copy, modify, and distribute this software fo"
  },
  {
    "path": "src/github.com/davecgh/go-spew/spew/bypass.go",
    "chars": 5689,
    "preview": "// Copyright (c) 2015 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this software"
  },
  {
    "path": "src/github.com/davecgh/go-spew/spew/bypasssafe.go",
    "chars": 1643,
    "preview": "// Copyright (c) 2015 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this software"
  },
  {
    "path": "src/github.com/davecgh/go-spew/spew/common.go",
    "chars": 10359,
    "preview": "/*\n * Copyright (c) 2013 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this softw"
  },
  {
    "path": "src/github.com/davecgh/go-spew/spew/config.go",
    "chars": 12461,
    "preview": "/*\n * Copyright (c) 2013 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this softw"
  },
  {
    "path": "src/github.com/davecgh/go-spew/spew/doc.go",
    "chars": 8153,
    "preview": "/*\n * Copyright (c) 2013 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this softw"
  },
  {
    "path": "src/github.com/davecgh/go-spew/spew/dump.go",
    "chars": 13721,
    "preview": "/*\n * Copyright (c) 2013 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this softw"
  },
  {
    "path": "src/github.com/davecgh/go-spew/spew/format.go",
    "chars": 11325,
    "preview": "/*\n * Copyright (c) 2013 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this softw"
  },
  {
    "path": "src/github.com/davecgh/go-spew/spew/spew.go",
    "chars": 5964,
    "preview": "/*\n * Copyright (c) 2013 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this softw"
  },
  {
    "path": "src/github.com/dolotech/leaf/LICENSE",
    "chars": 10760,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "src/github.com/dolotech/leaf/README.md",
    "chars": 530,
    "preview": "Leaf\n====\nA pragmatic game server framework in Go (golang).\n\nFeatures\n---------\n\n* Extremely easy to use\n* Reliable\n* Mu"
  },
  {
    "path": "src/github.com/dolotech/leaf/TUTORIAL_EN.md",
    "chars": 15423,
    "preview": "Brief introduction to Leaf\n==========================\n\nLeaf, written in Go, is a open source game server framework aimin"
  },
  {
    "path": "src/github.com/dolotech/leaf/TUTORIAL_ZH.md",
    "chars": 10390,
    "preview": "Leaf 游戏服务器框架简介\n==================\n\nLeaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏服务器框架。Leaf 适用于各类游戏服务器的开发,包括 H5(HTML5)游戏服务器。"
  },
  {
    "path": "src/github.com/dolotech/leaf/chanrpc/chanrpc.go",
    "chars": 5797,
    "preview": "package chanrpc\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/golang/glog\"\n\t\"reflect\"\n\t\"github.com/dolotech/lib/utils\"\n)\n\ntype"
  },
  {
    "path": "src/github.com/dolotech/leaf/chanrpc/example_test.go",
    "chars": 1720,
    "preview": "package chanrpc\n\nimport (\n\t\"sync\"\n\t\"testing\"\n)\n\nfunc TestClient_AsynCall(t *testing.T) {\n\ts := NewServer(10)\n\n\tvar wg sy"
  },
  {
    "path": "src/github.com/dolotech/leaf/conf/conf.go",
    "chars": 213,
    "preview": "package conf\n\nvar (\n\tLenStackBuf = 4096\n\n\t// console\n\tConsolePort   int\n\tConsolePrompt string = \"Leaf# \"\n\tProfilePath   "
  },
  {
    "path": "src/github.com/dolotech/leaf/gate/agent.go",
    "chars": 205,
    "preview": "package gate\n\nimport (\n\t\"net\"\n)\n\ntype Agent interface {\n\tWriteMsg(msg interface{})\n\tLocalAddr() net.Addr\n\tRemoteAddr() n"
  },
  {
    "path": "src/github.com/dolotech/leaf/gate/gate.go",
    "chars": 3278,
    "preview": "package gate\n\nimport (\n\t\"github.com/dolotech/leaf/chanrpc\"\n\t\"github.com/golang/glog\"\n\t\"github.com/dolotech/leaf/network\""
  },
  {
    "path": "src/github.com/dolotech/leaf/leaf.go",
    "chars": 443,
    "preview": "package leaf\n\nimport (\n\t\"github.com/golang/glog\"\n\t\"github.com/dolotech/leaf/module\"\n\t\"os\"\n\t\"os/signal\"\n)\n\nfunc Run(mods "
  },
  {
    "path": "src/github.com/dolotech/leaf/module/go_test.go",
    "chars": 304,
    "preview": "package module\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestSkeleton_Go(t *testing.T) {\n\n\ts := Skeleton{}\n\ts.Init()\n\tf := fu"
  },
  {
    "path": "src/github.com/dolotech/leaf/module/module.go",
    "chars": 816,
    "preview": "package module\n\nimport (\n\t\"sync\"\n\t\"github.com/dolotech/lib/utils\"\n)\n\ntype Module interface {\n\tOnInit()\n\tOnDestroy()\n\tRun"
  },
  {
    "path": "src/github.com/dolotech/leaf/module/skeleton.go",
    "chars": 2660,
    "preview": "package module\n\nimport (\n\t\"github.com/dolotech/leaf/chanrpc\"\n\t\"github.com/dolotech/leaf/timer\"\n\t\"time\"\n\t\"github.com/dolo"
  },
  {
    "path": "src/github.com/dolotech/leaf/network/agent.go",
    "chars": 60,
    "preview": "package network\n\ntype Agent interface {\n\tRun()\n\tOnClose()\n}\n"
  },
  {
    "path": "src/github.com/dolotech/leaf/network/conn.go",
    "chars": 184,
    "preview": "package network\n\nimport (\n\t\"net\"\n)\n\ntype Conn interface {\n\tReadMsg() ([]byte, error)\n\tWriteMsg(args ...[]byte) error\n\tLo"
  },
  {
    "path": "src/github.com/dolotech/leaf/network/json/json.go",
    "chars": 4294,
    "preview": "package json\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/dolotech/leaf/chanrpc\"\n\t\"github.com/golang/glog\"\n\t"
  },
  {
    "path": "src/github.com/dolotech/leaf/network/processor.go",
    "chars": 248,
    "preview": "package network\n\ntype Processor interface {\n\t// must goroutine safe\n\tRoute(msg , userData interface{}) error\n\t// must go"
  },
  {
    "path": "src/github.com/dolotech/leaf/network/protobuf/protobuf.go",
    "chars": 4522,
    "preview": "package protobuf\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/dolotech"
  },
  {
    "path": "src/github.com/dolotech/leaf/network/tcp_client.go",
    "chars": 2515,
    "preview": "package network\n\nimport (\n\t\"github.com/golang/glog\"\n\t\"net\"\n\t\"sync\"\n\t\"time\"\n)\n\ntype TCPClient struct {\n\tsync.Mutex\n\tAddr "
  },
  {
    "path": "src/github.com/dolotech/leaf/network/tcp_conn.go",
    "chars": 2011,
    "preview": "package network\n\nimport (\n\t\"github.com/golang/glog\"\n\t\"net\"\n\t\"sync\"\n)\n\ntype ConnSet map[net.Conn]struct{}\n\ntype TCPConn s"
  },
  {
    "path": "src/github.com/dolotech/leaf/network/tcp_msg.go",
    "chars": 2918,
    "preview": "package network\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"io\"\n\t\"math\"\n)\n\n// --------------\n// | len | data |\n// ---------"
  },
  {
    "path": "src/github.com/dolotech/leaf/network/tcp_server.go",
    "chars": 2607,
    "preview": "package network\n\nimport (\n\t\"github.com/golang/glog\"\n\t\"net\"\n\t\"sync\"\n\t\"time\"\n)\n\ntype TCPServer struct {\n\tAddr            s"
  },
  {
    "path": "src/github.com/dolotech/leaf/network/ws_client.go",
    "chars": 2764,
    "preview": "package network\n\nimport (\n\t\"github.com/gorilla/websocket\"\n\t\"github.com/golang/glog\"\n\t\"sync\"\n\t\"time\"\n)\n\ntype WSClient str"
  },
  {
    "path": "src/github.com/dolotech/leaf/network/ws_conn.go",
    "chars": 2410,
    "preview": "package network\n\nimport (\n\t\"errors\"\n\t\"github.com/gorilla/websocket\"\n\t\"github.com/golang/glog\"\n\t\"net\"\n\t\"sync\"\n)\n\ntype Web"
  },
  {
    "path": "src/github.com/dolotech/leaf/network/ws_server.go",
    "chars": 3576,
    "preview": "package network\n\nimport (\n\t\"crypto/tls\"\n\t\"github.com/gorilla/websocket\"\n\t\"github.com/golang/glog\"\n\t\"net\"\n\t\"net/http\"\n\t\"s"
  },
  {
    "path": "src/github.com/dolotech/leaf/room/interface.go",
    "chars": 565,
    "preview": "package room\n\ntype IOccupant interface {\n\tGetRoom() IRoom\n\tWriteMsg(msg interface{})\n}\ntype ICreator interface {\n\tCreate"
  },
  {
    "path": "src/github.com/dolotech/leaf/room/msg_loop.go",
    "chars": 2273,
    "preview": "package room\n\nimport (\n\t\"github.com/dolotech/lib/utils\"\n\t\"server/protocol\"\n\t\"errors\"\n\t\"github.com/dolotech/lib/route\"\n\t\""
  },
  {
    "path": "src/github.com/dolotech/leaf/room/room_list.go",
    "chars": 1631,
    "preview": "package room\n\nimport (\n\t\"sync\"\n\t\"time\"\n\t\"strconv\"\n\t\"math/rand\"\n\t\"server/protocol\"\n\t\"github.com/dolotech/leaf/gate\"\n)\n\nfu"
  },
  {
    "path": "src/github.com/dolotech/leaf/timer/cronexpr.go",
    "chars": 5346,
    "preview": "package timer\n\n// reference: https://github.com/robfig/cron\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// "
  },
  {
    "path": "src/github.com/dolotech/leaf/timer/example_test.go",
    "chars": 910,
    "preview": "package timer\n\nimport (\n\t\"time\"\n\t\"testing\"\n)\n\nfunc TestTimer(t *testing.T) {\n\td := NewDispatcher(10)\n\n\t// timer 1\n\td.Aft"
  },
  {
    "path": "src/github.com/dolotech/leaf/timer/timer.go",
    "chars": 1460,
    "preview": "package timer\n\nimport (\n\t\"github.com/dolotech/leaf/conf\"\n\t\"github.com/golang/glog\"\n\t\"runtime\"\n\t\"time\"\n)\n\n// one dispatch"
  },
  {
    "path": "src/github.com/dolotech/leaf/version.go",
    "chars": 38,
    "preview": "package leaf\n\nconst version = \"1.1.2\"\n"
  },
  {
    "path": "src/github.com/dolotech/lib/README.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/github.com/dolotech/lib/csv/bench_test.go",
    "chars": 1165,
    "preview": "/**********************************************************\n * Author : Michael\n * Email : dolotech@163.com\n * Last modi"
  },
  {
    "path": "src/github.com/dolotech/lib/csv/cfield.go",
    "chars": 3156,
    "preview": "/**********************************************************\n * Author : Michael\n * Email : dolotech@163.com\n * Last modi"
  },
  {
    "path": "src/github.com/dolotech/lib/csv/csv.go",
    "chars": 825,
    "preview": "/**********************************************************\n * Author : Michael\n * Email : dolotech@163.com\n * Last modi"
  },
  {
    "path": "src/github.com/dolotech/lib/csv/csv_test.go",
    "chars": 1200,
    "preview": "/**********************************************************\n * Author : Michael\n * Email : dolotech@163.com\n * Last modi"
  },
  {
    "path": "src/github.com/dolotech/lib/csv/decode.go",
    "chars": 5315,
    "preview": "/**********************************************************\n * Author : Michael\n * Email : dolotech@163.com\n * Last modi"
  },
  {
    "path": "src/github.com/dolotech/lib/csv/decode_test.go",
    "chars": 2971,
    "preview": "/**********************************************************\n * Author : Michael\n * Email : dolotech@163.com\n * Last modi"
  },
  {
    "path": "src/github.com/dolotech/lib/csv/encode.go",
    "chars": 4311,
    "preview": "/**********************************************************\n * Author : Michael\n * Email : dolotech@163.com\n * Last modi"
  },
  {
    "path": "src/github.com/dolotech/lib/csv/encode_test.go",
    "chars": 1441,
    "preview": "/**********************************************************\n * Author : Michael\n * Email : dolotech@163.com\n * Last modi"
  },
  {
    "path": "src/github.com/dolotech/lib/csv/example_marshal_test.go",
    "chars": 814,
    "preview": "/**********************************************************\n * Author : Michael\n * Email : dolotech@163.com\n * Last modi"
  },
  {
    "path": "src/github.com/dolotech/lib/csv/example_test.go",
    "chars": 1102,
    "preview": "/**********************************************************\n * Author : Michael\n * Email : dolotech@163.com\n * Last modi"
  },
  {
    "path": "src/github.com/dolotech/lib/db/client.go",
    "chars": 4958,
    "preview": "// 数据库客户端常用操作 (基于 xorm)\npackage db\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/go-xorm/xorm\"\n\t_ \"github."
  },
  {
    "path": "src/github.com/dolotech/lib/db/client_test.go",
    "chars": 669,
    "preview": "package db\n\nimport (\n\t//\"game/player\"\n\t//\"github.com/bmizerany/assert\"\n\t_ \"github.com/lib/pq\"\n\t//l4g \"lib/log4go\"\n\t\"test"
  },
  {
    "path": "src/github.com/dolotech/lib/filter/filter.go",
    "chars": 5573,
    "preview": "package filter\n\nimport (\n\t\"bytes\"\n\t_ \"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"os/signal\"\n\t\"sort\"\n\t\"syscall\"\n\t\"time\"\n\t\"github.com/golan"
  },
  {
    "path": "src/github.com/dolotech/lib/filter/readme.txt",
    "chars": 762,
    "preview": "Aho-Corasick is a multiple string matching algorithm\nI implement the algorithm in trie.go\nIn filter.go, I use the built "
  },
  {
    "path": "src/github.com/dolotech/lib/filter/trie.go",
    "chars": 6279,
    "preview": "// trie.go: use dictionary words to build FSM\n//          with the help of Aho-Corasick algorithm\n//          which is p"
  },
  {
    "path": "src/github.com/dolotech/lib/goevent/go_event.go",
    "chars": 2725,
    "preview": "package goevent\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"sync\"\n)\n\n\ntype Event struct {\n\tlisteners []reflect.Value\n\tlmu       sync.R"
  },
  {
    "path": "src/github.com/dolotech/lib/grpool/grpool.go",
    "chars": 2667,
    "preview": "package grpool\n\nimport (\n\t\"sync\"\n)\n\n// Gorouting instance which can accept client jobs\ntype worker struct {\n\tworkerPool "
  },
  {
    "path": "src/github.com/dolotech/lib/grpool/grpool_test.go",
    "chars": 1877,
    "preview": "\npackage grpool\n\nimport (\n\t\"io/ioutil\"\n\t\"log\"\n\t\"runtime\"\n\t\"sync/atomic\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert"
  },
  {
    "path": "src/github.com/dolotech/lib/pse/pse_darwin.go",
    "chars": 548,
    "preview": "// Copyright 2015-2016 Apcera Inc. All rights reserved.\n\npackage pse\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n)\n\n// ProcUsage r"
  },
  {
    "path": "src/github.com/dolotech/lib/pse/pse_freebsd.go",
    "chars": 1149,
    "preview": "// Copyright 2015-2016 Apcera Inc. All rights reserved.\n\npackage pse\n\n/*\n#include <sys/types.h>\n#include <sys/sysctl.h>\n"
  },
  {
    "path": "src/github.com/dolotech/lib/pse/pse_linux.go",
    "chars": 2060,
    "preview": "// Copyright 2015 Apcera Inc. All rights reserved.\n\npackage pse\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"sync/atom"
  },
  {
    "path": "src/github.com/dolotech/lib/pse/pse_rumprun.go",
    "chars": 225,
    "preview": "// Copyright 2015-2016 Apcera Inc. All rights reserved.\n// +build rumprun\n\npackage pse\n\n// This is a placeholder for now"
  },
  {
    "path": "src/github.com/dolotech/lib/pse/pse_solaris.go",
    "chars": 207,
    "preview": "// Copyright 2015-2016 Apcera Inc. All rights reserved.\n\npackage pse\n\n// This is a placeholder for now.\nfunc ProcUsage(p"
  },
  {
    "path": "src/github.com/dolotech/lib/pse/pse_test.go",
    "chars": 1139,
    "preview": "// Copyright 2015-2016 Apcera Inc. All rights reserved.\n\npackage pse\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"test"
  },
  {
    "path": "src/github.com/dolotech/lib/pse/pse_windows.go",
    "chars": 7618,
    "preview": "// Copyright 2015-2016 Apcera Inc. All rights reserved.\n// +build windows\n\npackage pse\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/fil"
  },
  {
    "path": "src/github.com/dolotech/lib/pse/pse_windows_test.go",
    "chars": 1931,
    "preview": "// Copyright 2016 Apcera Inc. All rights reserved.\n// +build windows\n\npackage pse\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\t\"runtime\""
  },
  {
    "path": "src/github.com/dolotech/lib/route/route_msg.go",
    "chars": 926,
    "preview": "package route\n\nimport (\n\t\"reflect\"\n\t\"github.com/golang/glog\"\n)\n\ntype Route map[string]*reflect.Value\n\nfunc (this *Route)"
  },
  {
    "path": "src/github.com/dolotech/lib/route/router_test.go",
    "chars": 211,
    "preview": "package route\n\nimport \"testing\"\n\nfunc TestNewRoute(t *testing.T) {\n\tvar r Route\n\n\n\ttype msg struct {\n\t\tN int\n\t}\n\n\tr.Regi"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/aes.go",
    "chars": 1278,
    "preview": "package utils\n\nimport (\n\t\"crypto/aes\"\n\t\"crypto/cipher\"\n\t\"errors\"\n)\n\n//type AesEncrypt struct {\n//\tKey []byte\n//}\n\nfunc  "
  },
  {
    "path": "src/github.com/dolotech/lib/utils/debug.go",
    "chars": 2188,
    "preview": "/**********************************************************\n * Author : Michael\n * Email : dolotech@163.com\n * Last modi"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/helper.go",
    "chars": 2504,
    "preview": "package utils\nimport (\n\t\"runtime\"\n\t\"runtime/debug\"\n\t\"time\"\n\t\"fmt\"\n\t\"strconv\"\n)\nvar startTime = time.Now()\n\nfunc avg(item"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/list.go",
    "chars": 1685,
    "preview": "// 线程安全的数组封装,注意:写锁接口不能嵌套调用,比如:Range接口不能调用删除接口Del\npackage utils\n\nimport (\n\t\"sync\"\n)\n\nfunc NewList() *List {\n\treturn &List"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/map.go",
    "chars": 995,
    "preview": "package utils\n\nimport (\n\t\"sync\"\n)\n\nfunc NewMap() *Map {\n\treturn &Map{elems: map[interface{}]interface{}{}}\n}\n\ntype Map s"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/map_list_test.go",
    "chars": 156,
    "preview": "/**\n * Created by Michael on 2015/8/4.\n */\npackage utils\n\nimport \"testing\"\n\nfunc Test_ran(t *testing.T) {\n\tlist := &List"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/queue.go",
    "chars": 1035,
    "preview": "package utils\n\ntype Queue struct {\n\telems               []interface{}\n\tnelems, popi, pushi int\n}\n\nfunc (q *Queue) Len() "
  },
  {
    "path": "src/github.com/dolotech/lib/utils/random.go",
    "chars": 1585,
    "preview": "package utils\n\nimport (\n\t\"math/rand\"\n\t\"time\"\n\t\"sync\"\n\t//crand \"crypto/rand\"\n)\n\nvar o *rand.Rand = rand.New(rand.NewSourc"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/sign.go",
    "chars": 685,
    "preview": "package utils\n\nimport (\n\t\"crypto/md5\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n)\n\n//生成签名\nfunc LoginSign(gameid string, "
  },
  {
    "path": "src/github.com/dolotech/lib/utils/stack.go",
    "chars": 579,
    "preview": "package utils\n\nimport (\n\t\"runtime\"\n\n\t\"github.com/davecgh/go-spew/spew\"\n\t\"github.com/golang/glog\"\n)\n\n// 产生panic时的调用栈打印\nfu"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/string_2_bytes.go",
    "chars": 505,
    "preview": "package utils\n\nimport (\n\t\"unsafe\"\n\t\"reflect\"\n)\n\nfunc String2Bytes(s string) (b []byte) {\n\tpbytes := (*reflect.SliceHeade"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/string_2_bytes_test.go",
    "chars": 685,
    "preview": "package utils\n\nimport (\n\t\"testing\"\n)\n\n/*func BenchmarkBytes2String(t *testing.B) {\n\tfor i := 1; i < N; i++ {\n\t\tb := []by"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/structandmap.go",
    "chars": 1751,
    "preview": "package utils\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n)\n\nfunc ToM(value interface{}) map[string]interface{} {\n\tif value == nil{\n\t"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/timer_queue.go",
    "chars": 2172,
    "preview": "package utils\n\nimport (\n\t\"container/heap\"\n)\n\ntype TimeOuter interface {\n\tTimeOut(int64)\n}\n\ntype Timer struct {\n\tTimeOute"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/utils.go",
    "chars": 13730,
    "preview": "/**********************************************************\n * Author        : Michael\n * Email         : dolotech@163.c"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/utils_test.go",
    "chars": 1963,
    "preview": "/**\n * Created by Michael on 2015/8/4.\n */\npackage utils\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"testing\"\n\n\n)\n\n\n\n\nfunc Test_"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/waitgroup.go",
    "chars": 178,
    "preview": "package utils\n\n\nimport (\n\t\"sync\"\n)\n\ntype WaitGroupWrapper struct {\n\tsync.WaitGroup\n}\n\nfunc (w *WaitGroupWrapper) Wrap(cb"
  },
  {
    "path": "src/github.com/dolotech/lib/utils/xxtea.go",
    "chars": 2408,
    "preview": "package utils\n\nconst delta = 0x9E3779B9\n\nfunc toBytes(v []uint32, includeLength bool) []byte {\n\tlength := uint32(len(v))"
  },
  {
    "path": "src/github.com/go-xorm/core/LICENSE",
    "chars": 1515,
    "preview": "Copyright (c) 2013 - 2015 Lunny Xiao <xiaolunwen@gmail.com>\nAll rights reserved.\n\nRedistribution and use in source and b"
  },
  {
    "path": "src/github.com/go-xorm/core/README.md",
    "chars": 2257,
    "preview": "Core is a lightweight wrapper of sql.DB.\n\n# Open\n```Go\ndb, _ := core.Open(db, connstr)\n```\n\n# SetMapper\n```Go\ndb.SetMapp"
  },
  {
    "path": "src/github.com/go-xorm/core/benchmark.sh",
    "chars": 29,
    "preview": "go test -v -bench=. -run=XXX\n"
  },
  {
    "path": "src/github.com/go-xorm/core/cache.go",
    "chars": 2041,
    "preview": "package core\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n\t\"bytes\"\n\t\"encoding/gob\"\n)\n\nconst (\n\t// default cache expired time\n\tCach"
  },
  {
    "path": "src/github.com/go-xorm/core/column.go",
    "chars": 3630,
    "preview": "package core\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n)\n\nconst (\n\tTWOSIDES = iota + 1\n\tONLYTODB\n\tONLYFROMDB\n)\n\n// "
  },
  {
    "path": "src/github.com/go-xorm/core/converstion.go",
    "chars": 236,
    "preview": "package core\n\n// Conversion is an interface. A type implements Conversion will according\n// the custom method to fill in"
  },
  {
    "path": "src/github.com/go-xorm/core/db.go",
    "chars": 15493,
    "preview": "package core\n\nimport (\n\t\"database/sql\"\n\t\"database/sql/driver\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"sync\"\n)\n\nfunc MapT"
  },
  {
    "path": "src/github.com/go-xorm/core/dialect.go",
    "chars": 6621,
    "preview": "package core\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype DbType string\n\ntype Uri struct {\n\tDbType  DbType\n\tProto   strin"
  },
  {
    "path": "src/github.com/go-xorm/core/driver.go",
    "chars": 511,
    "preview": "package core\n\ntype Driver interface {\n\tParse(string, string) (*Uri, error)\n}\n\nvar (\n\tdrivers = map[string]Driver{}\n)\n\nfu"
  },
  {
    "path": "src/github.com/go-xorm/core/error.go",
    "chars": 172,
    "preview": "package core\n\nimport \"errors\"\n\nvar (\n\tErrNoMapPointer    = errors.New(\"mp should be a map's pointer\")\n\tErrNoStructPointe"
  },
  {
    "path": "src/github.com/go-xorm/core/filter.go",
    "chars": 1523,
    "preview": "package core\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// Filter is an interface to filter SQL\ntype Filter interface {\n\tDo(sql stri"
  },
  {
    "path": "src/github.com/go-xorm/core/ilogger.go",
    "chars": 579,
    "preview": "package core\n\ntype LogLevel int\n\nconst (\n\t// !nashtsai! following level also match syslog.Priority value\n\tLOG_DEBUG LogL"
  },
  {
    "path": "src/github.com/go-xorm/core/index.go",
    "chars": 1154,
    "preview": "package core\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n)\n\nconst (\n\tIndexType = iota + 1\n\tUniqueType\n)\n\n// database index\ntype "
  },
  {
    "path": "src/github.com/go-xorm/core/mapper.go",
    "chars": 5220,
    "preview": "package core\n\nimport (\n\t\"strings\"\n\t\"sync\"\n)\n\n// name translation between struct, fields names and table, column names\nty"
  },
  {
    "path": "src/github.com/go-xorm/core/pk.go",
    "chars": 426,
    "preview": "package core\n\nimport (\n\t\"bytes\"\n\t\"encoding/gob\"\n)\n\ntype PK []interface{}\n\nfunc NewPK(pks ...interface{}) *PK {\n\tp := PK("
  },
  {
    "path": "src/github.com/go-xorm/core/scan.go",
    "chars": 973,
    "preview": "package core\n\nimport (\n\t\"database/sql/driver\"\n\t\"fmt\"\n\t\"time\"\n)\n\ntype NullTime time.Time\n\nvar (\n\t_ driver.Valuer = NullTi"
  },
  {
    "path": "src/github.com/go-xorm/core/table.go",
    "chars": 2848,
    "preview": "package core\n\nimport (\n\t\"reflect\"\n\t\"strings\"\n)\n\n// database table\ntype Table struct {\n\tName          string\n\tType       "
  },
  {
    "path": "src/github.com/go-xorm/core/type.go",
    "chars": 7094,
    "preview": "package core\n\nimport (\n\t\"reflect\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n)\n\nconst (\n\tPOSTGRES = \"postgres\"\n\tSQLITE   = \"sqlite3\"\n\tMY"
  },
  {
    "path": "src/github.com/go-xorm/xorm/CONTRIBUTING.md",
    "chars": 2005,
    "preview": "## Contributing to xorm\n\n`xorm` has a backlog of [pull requests](https://help.github.com/articles/using-pull-requests), "
  },
  {
    "path": "src/github.com/go-xorm/xorm/LICENSE",
    "chars": 1498,
    "preview": "Copyright (c) 2013 - 2015 The Xorm Authors\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with"
  },
  {
    "path": "src/github.com/go-xorm/xorm/README.md",
    "chars": 7459,
    "preview": "[中文](https://github.com/go-xorm/xorm/blob/master/README_CN.md)\n\nXorm is a simple and powerful ORM for Go.\n\n[![Gitter](ht"
  },
  {
    "path": "src/github.com/go-xorm/xorm/README_CN.md",
    "chars": 6592,
    "preview": "# xorm\n\n[English](https://github.com/go-xorm/xorm/blob/master/README.md)\n\nxorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。\n\n[![Gi"
  },
  {
    "path": "src/github.com/go-xorm/xorm/VERSION",
    "chars": 17,
    "preview": "xorm v0.5.5.0711\n"
  },
  {
    "path": "src/github.com/go-xorm/xorm/doc.go",
    "chars": 4417,
    "preview": "// Copyright 2013 - 2016 The XORM Authors. All rights reserved.\n// Use of this source code is governed by a BSD\n// licen"
  },
  {
    "path": "src/github.com/go-xorm/xorm/engine.go",
    "chars": 47486,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/error.go",
    "chars": 638,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/gen_reserved.sh",
    "chars": 124,
    "preview": "#!/bin/bash\nif [ -f $1 ];then\n    cat $1| awk '{printf(\"\\\"\"$1\"\\\":true,\\n\")}' \nelse\n    echo \"argument $1 if not a file!\""
  },
  {
    "path": "src/github.com/go-xorm/xorm/goracle_driver.go",
    "chars": 1078,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/helpers.go",
    "chars": 14041,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/logger.go",
    "chars": 4159,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/lru_cacher.go",
    "chars": 7283,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/memory_store.go",
    "chars": 916,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/mssql_dialect.go",
    "chars": 14387,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/mymysql_driver.go",
    "chars": 1374,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/mysql_dialect.go",
    "chars": 13430,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/mysql_driver.go",
    "chars": 1207,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/oci8_driver.go",
    "chars": 916,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/odbc_driver.go",
    "chars": 720,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/oracle_dialect.go",
    "chars": 26107,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/pg_reserved.txt",
    "chars": 31387,
    "preview": "A\t \tnon-reserved\tnon-reserved\t \nABORT\tnon-reserved\t \t \t \nABS\t \treserved\treserved\t \nABSENT\t \tnon-reserved\tnon-reserved\t \n"
  },
  {
    "path": "src/github.com/go-xorm/xorm/postgres_dialect.go",
    "chars": 38392,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/pq_driver.go",
    "chars": 2322,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/processors.go",
    "chars": 1148,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/rows.go",
    "chars": 3315,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/session.go",
    "chars": 120041,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/sqlite3_dialect.go",
    "chars": 11266,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/sqlite3_driver.go",
    "chars": 478,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/statement.go",
    "chars": 41344,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/syslogger.go",
    "chars": 1679,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/go-xorm/xorm/types.go",
    "chars": 152,
    "preview": "package xorm\n\nimport (\n\t\"reflect\"\n\n\t\"github.com/go-xorm/core\"\n)\n\nvar (\n\tptrPkType = reflect.TypeOf(&core.PK{})\n\tpkType  "
  },
  {
    "path": "src/github.com/go-xorm/xorm/xorm.go",
    "chars": 3075,
    "preview": "// Copyright 2015 The Xorm Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// licens"
  },
  {
    "path": "src/github.com/golang/glog/glog.go",
    "chars": 36744,
    "preview": "// Go support for leveled logs, analogous to https://code.google.com/p/google-glog/\n//\n// Copyright 2013 Google Inc. All"
  },
  {
    "path": "src/github.com/golang/glog/glog_file.go",
    "chars": 3333,
    "preview": "// Go support for leveled logs, analogous to https://code.google.com/p/google-glog/\n//\n// Copyright 2013 Google Inc. All"
  },
  {
    "path": "src/github.com/golang/glog/glog_test.go",
    "chars": 11457,
    "preview": "// Go support for leveled logs, analogous to https://code.google.com/p/google-glog/\n//\n// Copyright 2013 Google Inc. All"
  },
  {
    "path": "src/github.com/golang/protobuf/.gitignore",
    "chars": 160,
    "preview": ".DS_Store\n*.[568ao]\n*.ao\n*.so\n*.pyc\n._*\n.nfs.*\n[568a].out\n*~\n*.orig\ncore\n_obj\n_test\n_testmain.go\nprotoc-gen-go/testdata/"
  },
  {
    "path": "src/github.com/golang/protobuf/.travis.yml",
    "chars": 350,
    "preview": "sudo: false\nlanguage: go\ngo:\n- 1.6.x\n- 1.7.x\n- 1.8.x\n- 1.9.x\n\ninstall:\n  - go get -v -d -t github.com/golang/protobuf/.."
  },
  {
    "path": "src/github.com/golang/protobuf/AUTHORS",
    "chars": 173,
    "preview": "# This source code refers to The Go Authors for copyright purposes.\n# The master list of authors is in the main Go distr"
  },
  {
    "path": "src/github.com/golang/protobuf/CONTRIBUTORS",
    "chars": 170,
    "preview": "# This source code was written by the Go contributors.\n# The master list of contributors is in the main Go distribution,"
  },
  {
    "path": "src/github.com/golang/protobuf/LICENSE",
    "chars": 1583,
    "preview": "Go support for Protocol Buffers - Google's data interchange format\n\nCopyright 2010 The Go Authors.  All rights reserved."
  },
  {
    "path": "src/github.com/golang/protobuf/Make.protobuf",
    "chars": 1955,
    "preview": "# Go support for Protocol Buffers - Google's data interchange format\n#\n# Copyright 2010 The Go Authors.  All rights rese"
  },
  {
    "path": "src/github.com/golang/protobuf/Makefile",
    "chars": 2113,
    "preview": "# Go support for Protocol Buffers - Google's data interchange format\n#\n# Copyright 2010 The Go Authors.  All rights rese"
  },
  {
    "path": "src/github.com/golang/protobuf/README.md",
    "chars": 9936,
    "preview": "# Go support for Protocol Buffers\n\n[![Build Status](https://travis-ci.org/golang/protobuf.svg?branch=master)](https://tr"
  },
  {
    "path": "src/github.com/golang/protobuf/_conformance/Makefile",
    "chars": 2139,
    "preview": "# Go support for Protocol Buffers - Google's data interchange format\n#\n# Copyright 2016 The Go Authors.  All rights rese"
  },
  {
    "path": "src/github.com/golang/protobuf/_conformance/conformance.go",
    "chars": 5001,
    "preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights r"
  }
]

// ... and 276 more files (download for full content)

About this extraction

This page contains the full source code of the dolotech/Texas-Hold-em-Poker GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 476 files (3.9 MB), approximately 1.0M tokens, and a symbol index with 6611 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!