2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -9,4 +9,4 @@ install: | |||||||
| .PHONY: test | .PHONY: test | ||||||
| test:	build | test:	build | ||||||
| 	cd examples/dummy && make | 	cd examples/dummy && make | ||||||
| 	cd examples/go-kit && make | 	cd examples/js-grpc && make | ||||||
|   | |||||||
| @@ -1,9 +1,11 @@ | |||||||
| { | { | ||||||
|   "build-date": "2016-12-15T11:05:13.620228009+01:00", |   "build-date": "2016-12-20T11:30:36.474403064+01:00", | ||||||
|   "build-hostname": "moul-rose.local", |   "build-hostname": "Zoon-MacBook.local", | ||||||
|   "build-user": "moul", |   "build-user": "zoon", | ||||||
|   "pwd": "/Users/moul/Git/moul/protoc-gen-gotemplate/examples/dummy", |   "go-pwd": "github.com/protoc-gen-gotemplate/examples/dummy", | ||||||
|  |   "pwd": "/Users/zoon/Projects/gopath/src/github.com/protoc-gen-gotemplate/examples/dummy", | ||||||
|   "debug": false, |   "debug": false, | ||||||
|  |   "destination-dir": ".", | ||||||
|   "file": { |   "file": { | ||||||
|     "name": "dummy.proto", |     "name": "dummy.proto", | ||||||
|     "package": "dummy", |     "package": "dummy", | ||||||
| @@ -840,11 +842,40 @@ | |||||||
|     ] |     ] | ||||||
|   }, |   }, | ||||||
|   "environment": [ |   "environment": [ | ||||||
|  |     "TERM_PROGRAM=iTerm.app", | ||||||
|  |     "ANDROID_HOME=/usr/local/opt/android-sdk", | ||||||
|     "TERM=xterm-256color", |     "TERM=xterm-256color", | ||||||
|     "SHELL=/bin/zsh", |     "SHELL=/bin/zsh", | ||||||
|     "TMPDIR=/var/folders/wr/dddkjx017kv8qk4q_jd2ly080000gn/T/", |     "MAKEFLAGS=", | ||||||
|     "PWD=/Users/moul/Git/moul/protoc-gen-gotemplate/examples/dummy", |     "TMPDIR=/var/folders/sq/wlptrlpn4v52xv7xpsgw0fc80000gn/T/", | ||||||
|  |     "Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.q9vxeee00S/Render", | ||||||
|  |     "TERM_PROGRAM_VERSION=3.0.12", | ||||||
|  |     "TERM_SESSION_ID=w0t0p0:6D29EB08-1B96-41B8-8672-0B035605AEE5", | ||||||
|  |     "ZSH=/Users/zoon/.oh-my-zsh", | ||||||
|  |     "USER=zoon", | ||||||
|  |     "SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.5ZcNGIwTRZ/Listeners", | ||||||
|  |     "__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0", | ||||||
|  |     "MAKELEVEL=2", | ||||||
|  |     "PAGER=less", | ||||||
|  |     "MFLAGS=", | ||||||
|  |     "LSCOLORS=Gxfxcxdxbxegedabagacad", | ||||||
|  |     "PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/zoon/Projects/gopath/bin", | ||||||
|  |     "_=/usr/local/bin/protoc", | ||||||
|  |     "PWD=/Users/zoon/Projects/gopath/src/github.com/protoc-gen-gotemplate/examples/dummy", | ||||||
|  |     "JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home", | ||||||
|  |     "EDITOR=micro", | ||||||
|     "LANG=en_US.UTF-8", |     "LANG=en_US.UTF-8", | ||||||
|     "GOPATH=/Users/moul/go", |     "ANDROID_SDK=/usr/local/opt/android-sdk", | ||||||
|  |     "ITERM_PROFILE=Default", | ||||||
|  |     "XPC_FLAGS=0x0", | ||||||
|  |     "XPC_SERVICE_NAME=0", | ||||||
|  |     "COLORFGBG=15;0", | ||||||
|  |     "SHLVL=3", | ||||||
|  |     "HOME=/Users/zoon", | ||||||
|  |     "ITERM_SESSION_ID=w0t0p0:6D29EB08-1B96-41B8-8672-0B035605AEE5", | ||||||
|  |     "LESS=-R", | ||||||
|  |     "LOGNAME=zoon", | ||||||
|  |     "LC_CTYPE=UTF-8", | ||||||
|  |     "GOPATH=/Users/zoon/Projects/gopath" | ||||||
|   ] |   ] | ||||||
| } | } | ||||||
							
								
								
									
										13
									
								
								examples/js-grpc/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								examples/js-grpc/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | .PHONY: build | ||||||
|  | build: | ||||||
|  | 	mkdir -p output | ||||||
|  | 	protoc -I. --gotemplate_out=template_dir=templates,debug=true:output ./protos/*.proto | ||||||
|  |  | ||||||
|  |  | ||||||
|  | .PHONY: re | ||||||
|  | re: clean build | ||||||
|  |  | ||||||
|  |  | ||||||
|  | .PHONY: clean | ||||||
|  | clean: | ||||||
|  | 	rm -rf output | ||||||
							
								
								
									
										146
									
								
								examples/js-grpc/output/test/test_grpc_js.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								examples/js-grpc/output/test/test_grpc_js.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,146 @@ | |||||||
|  | // GENERATED CODE -- DO NOT EDIT! | ||||||
|  |  | ||||||
|  | 'use strict'; | ||||||
|  | var grpc = require('grpc'); | ||||||
|  | var test_pb = require('./test_pb.js'); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | function serialize_test_TestNoStreamRequest(arg) { | ||||||
|  |   if (!(arg instanceof test_pb.TestNoStreamRequest)) { | ||||||
|  |     throw new Error('Expected argument of type test.TestNoStreamRequest'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_test_TestNoStreamRequest(buffer_arg) { | ||||||
|  |   return test_pb.TestNoStreamRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function serialize_test_TestNoStreamReply(arg) { | ||||||
|  |   if (!(arg instanceof test_pb.TestNoStreamReply)) { | ||||||
|  |     throw new Error('Expected argument of type test.TestNoStreamReply'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_test_TestNoStreamReply(buffer_arg) { | ||||||
|  |   return test_pb.TestNoStreamReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function serialize_test_TestStreamRequestRequest(arg) { | ||||||
|  |   if (!(arg instanceof test_pb.TestStreamRequestRequest)) { | ||||||
|  |     throw new Error('Expected argument of type test.TestStreamRequestRequest'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_test_TestStreamRequestRequest(buffer_arg) { | ||||||
|  |   return test_pb.TestStreamRequestRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function serialize_test_TestStreamRequestReply(arg) { | ||||||
|  |   if (!(arg instanceof test_pb.TestStreamRequestReply)) { | ||||||
|  |     throw new Error('Expected argument of type test.TestStreamRequestReply'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_test_TestStreamRequestReply(buffer_arg) { | ||||||
|  |   return test_pb.TestStreamRequestReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function serialize_test_TestStreamReplyRequest(arg) { | ||||||
|  |   if (!(arg instanceof test_pb.TestStreamReplyRequest)) { | ||||||
|  |     throw new Error('Expected argument of type test.TestStreamReplyRequest'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_test_TestStreamReplyRequest(buffer_arg) { | ||||||
|  |   return test_pb.TestStreamReplyRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function serialize_test_TestStreamReplyReply(arg) { | ||||||
|  |   if (!(arg instanceof test_pb.TestStreamReplyReply)) { | ||||||
|  |     throw new Error('Expected argument of type test.TestStreamReplyReply'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_test_TestStreamReplyReply(buffer_arg) { | ||||||
|  |   return test_pb.TestStreamReplyReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function serialize_test_TestStreamBothRequest(arg) { | ||||||
|  |   if (!(arg instanceof test_pb.TestStreamBothRequest)) { | ||||||
|  |     throw new Error('Expected argument of type test.TestStreamBothRequest'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_test_TestStreamBothRequest(buffer_arg) { | ||||||
|  |   return test_pb.TestStreamBothRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function serialize_test_TestStreamBothReply(arg) { | ||||||
|  |   if (!(arg instanceof test_pb.TestStreamBothReply)) { | ||||||
|  |     throw new Error('Expected argument of type test.TestStreamBothReply'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_test_TestStreamBothReply(buffer_arg) { | ||||||
|  |   return test_pb.TestStreamBothReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | var TestServiceService = exports.TestServiceService = { | ||||||
|  |    | ||||||
|  |   testNoStream: { | ||||||
|  |     path: '/test.TestService/TestNoStream', | ||||||
|  |     requestStream: false, | ||||||
|  |     responseStream: false, | ||||||
|  |     requestType: test_pb.TestNoStreamRequest, | ||||||
|  |     responseType: test_pb.TestNoStreamReply, | ||||||
|  |     requestSerialize: serialize_test_TestNoStreamRequest, | ||||||
|  |     requestDeserialize: deserialize_test_TestNoStreamRequest, | ||||||
|  |     responseSerialize: serialize_test_TestNoStreamReply, | ||||||
|  |     responseDeserialize: deserialize_test_TestNoStreamReply, | ||||||
|  |   }, | ||||||
|  |   testStreamRequest: { | ||||||
|  |     path: '/test.TestService/TestStreamRequest', | ||||||
|  |     requestStream: true, | ||||||
|  |     responseStream: false, | ||||||
|  |     requestType: test_pb.TestStreamRequestRequest, | ||||||
|  |     responseType: test_pb.TestStreamRequestReply, | ||||||
|  |     requestSerialize: serialize_test_TestStreamRequestRequest, | ||||||
|  |     requestDeserialize: deserialize_test_TestStreamRequestRequest, | ||||||
|  |     responseSerialize: serialize_test_TestStreamRequestReply, | ||||||
|  |     responseDeserialize: deserialize_test_TestStreamRequestReply, | ||||||
|  |   }, | ||||||
|  |   testStreamReply: { | ||||||
|  |     path: '/test.TestService/TestStreamReply', | ||||||
|  |     requestStream: false, | ||||||
|  |     responseStream: true, | ||||||
|  |     requestType: test_pb.TestStreamReplyRequest, | ||||||
|  |     responseType: test_pb.TestStreamReplyReply, | ||||||
|  |     requestSerialize: serialize_test_TestStreamReplyRequest, | ||||||
|  |     requestDeserialize: deserialize_test_TestStreamReplyRequest, | ||||||
|  |     responseSerialize: serialize_test_TestStreamReplyReply, | ||||||
|  |     responseDeserialize: deserialize_test_TestStreamReplyReply, | ||||||
|  |   }, | ||||||
|  |   testStreamBoth: { | ||||||
|  |     path: '/test.TestService/TestStreamBoth', | ||||||
|  |     requestStream: true, | ||||||
|  |     responseStream: true, | ||||||
|  |     requestType: test_pb.TestStreamBothRequest, | ||||||
|  |     responseType: test_pb.TestStreamBothReply, | ||||||
|  |     requestSerialize: serialize_test_TestStreamBothRequest, | ||||||
|  |     requestDeserialize: deserialize_test_TestStreamBothRequest, | ||||||
|  |     responseSerialize: serialize_test_TestStreamBothReply, | ||||||
|  |     responseDeserialize: deserialize_test_TestStreamBothReply, | ||||||
|  |   }, | ||||||
|  |    | ||||||
|  | } | ||||||
|  |  | ||||||
|  | exports.TestServiceClient = grpc.makeGenericClientConstructor(TestServiceService); | ||||||
							
								
								
									
										34
									
								
								examples/js-grpc/protos/test.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								examples/js-grpc/protos/test.proto
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | syntax = "proto3"; | ||||||
|  |  | ||||||
|  | package test; | ||||||
|  |  | ||||||
|  | option go_package = "github.com/united-drivers/models/go/test;testpb"; | ||||||
|  |  | ||||||
|  | service TestService { | ||||||
|  |   rpc TestNoStream(TestNoStreamRequest) returns (TestNoStreamReply); | ||||||
|  |   rpc TestStreamRequest(stream TestStreamRequestRequest) returns (TestStreamRequestReply); | ||||||
|  |   rpc TestStreamReply(TestStreamReplyRequest) returns (stream TestStreamReplyReply); | ||||||
|  |   rpc TestStreamBoth(stream TestStreamBothRequest) returns (stream TestStreamBothReply); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | message TestMessage { | ||||||
|  |   string a = 1; | ||||||
|  |   int32 b = 2; | ||||||
|  |   int64 c = 3; | ||||||
|  |   float d = 4; | ||||||
|  |   double e = 5; | ||||||
|  |   repeated string n = 14; | ||||||
|  |   repeated int32 o = 15; | ||||||
|  |   repeated int64 p = 16; | ||||||
|  |   repeated float q = 17; | ||||||
|  |   repeated double r = 18; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | message TestNoStreamRequest { TestMessage message = 1; } | ||||||
|  | message TestNoStreamReply   { TestMessage message = 1; string err_msg = 2; } | ||||||
|  | message TestStreamRequestRequest { TestMessage message = 1; } | ||||||
|  | message TestStreamRequestReply   { TestMessage message = 1; string err_msg = 2; } | ||||||
|  | message TestStreamReplyRequest { TestMessage message = 1; } | ||||||
|  | message TestStreamReplyReply   { TestMessage message = 1; string err_msg = 2; } | ||||||
|  | message TestStreamBothRequest { TestMessage message = 1; } | ||||||
|  | message TestStreamBothReply   { TestMessage message = 1; string err_msg = 2; } | ||||||
| @@ -0,0 +1,47 @@ | |||||||
|  | // GENERATED CODE -- DO NOT EDIT! | ||||||
|  | {{$Package:=.File.Package}} | ||||||
|  | 'use strict'; | ||||||
|  | var grpc = require('grpc'); | ||||||
|  | var {{$Package}}_pb = require('./{{$Package}}_pb.js'); | ||||||
|  |  | ||||||
|  | {{range .File.Service}}{{range .Method}} | ||||||
|  | function serialize_{{$Package}}_{{.InputType | splitArray "." | last}}(arg) { | ||||||
|  |   if (!(arg instanceof {{$Package}}_pb.{{.InputType | splitArray "." | last}})) { | ||||||
|  |     throw new Error('Expected argument of type {{$Package}}.{{.InputType | splitArray "." | last}}'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_{{$Package}}_{{.InputType | splitArray "." | last}}(buffer_arg) { | ||||||
|  |   return {{$Package}}_pb.{{.InputType | splitArray "." | last}}.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function serialize_{{$Package}}_{{.OutputType | splitArray "." | last}}(arg) { | ||||||
|  |   if (!(arg instanceof {{$Package}}_pb.{{.OutputType | splitArray "." | last}})) { | ||||||
|  |     throw new Error('Expected argument of type {{$Package}}.{{.OutputType | splitArray "." | last}}'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_{{$Package}}_{{.OutputType | splitArray "." | last}}(buffer_arg) { | ||||||
|  |   return {{$Package}}_pb.{{.OutputType | splitArray "." | last}}.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  | {{end}}{{end}} | ||||||
|  | {{range .File.Service}} | ||||||
|  | var {{.Name}}Service = exports.{{.Name}}Service = { | ||||||
|  |   {{$serviceName:=.Name}} | ||||||
|  |   {{range .Method}}{{.Name | lowerCamelCase}}: { | ||||||
|  |     path: '/{{$Package}}.{{$serviceName}}/{{.Name}}', | ||||||
|  |     requestStream: {{.ClientStreaming | default "false"}}, | ||||||
|  |     responseStream: {{.ServerStreaming | default "false"}}, | ||||||
|  |     requestType: {{$Package}}_pb.{{.InputType | splitArray "." | last}}, | ||||||
|  |     responseType: {{$Package}}_pb.{{.OutputType | splitArray "." | last}}, | ||||||
|  |     requestSerialize: serialize_{{$Package}}_{{.InputType | splitArray "." | last}}, | ||||||
|  |     requestDeserialize: deserialize_{{$Package}}_{{.InputType | splitArray "." | last}}, | ||||||
|  |     responseSerialize: serialize_{{$Package}}_{{.OutputType | splitArray "." | last}}, | ||||||
|  |     responseDeserialize: deserialize_{{$Package}}_{{.OutputType | splitArray "." | last}}, | ||||||
|  |   }, | ||||||
|  |   {{end}} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | exports.{{.Name}}Client = grpc.makeGenericClientConstructor({{.Name}}Service);{{end}} | ||||||
| @@ -1,56 +0,0 @@ | |||||||
| // GENERATED CODE -- DO NOT EDIT! |  | ||||||
|  |  | ||||||
| 'use strict'; |  | ||||||
| {{$file:=.File}}{{$service:=.Service}} |  | ||||||
|  |  | ||||||
| var {{$file.Package}}_pb = require('../{{$file.Package}}/{{$file.Package}}_pb.js'); |  | ||||||
| var grpc = require('grpc'); |  | ||||||
| var base64 = require('base64-js'); |  | ||||||
|  |  | ||||||
| function serializeToBase64(req) { |  | ||||||
|     return base64.fromByteArray(req) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function deserializeFromBase64(b64) { |  | ||||||
|     return new Uint8Array(base64.toByteArray(b64)) |  | ||||||
| } |  | ||||||
| {{range .Service.Method}} |  | ||||||
| function serialize_{{$file.Package}}_{{.Name}}Request(arg) { |  | ||||||
|     if (!(arg instanceof {{$file.Package}}_pb.{{.Name}}Request)) { |  | ||||||
|         throw new Error('Expected argument of type {{$file.Package}}.{{.Name}}Request'); |  | ||||||
|     } |  | ||||||
|     return serializeToBase64(arg.serializeBinary()); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function deserialize_{{$file.Package}}_{{.Name}}Request(base64) { |  | ||||||
|     return {{$file.Package}}_pb.{{.Name}}Request.deserializeBinary(deserializeFromBase64(base64)); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function serialize_{{$file.Package}}_{{.Name}}Reply(arg) { |  | ||||||
|     if (!(arg instanceof {{$file.Package}}_pb.{{.Name}}Reply)) { |  | ||||||
|         throw new Error('Expected argument of type {{$file.Package}}.{{.Name}}Reply'); |  | ||||||
|     } |  | ||||||
|     return serializeToBase64(arg.serializeBinary()); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function deserialize_{{$file.Package}}_{{.Name}}Reply(base64) { |  | ||||||
|     return {{$file.Package}}_pb.{{.Name}}Reply.deserializeBinary(deserializeFromBase64(base64)); |  | ||||||
| } |  | ||||||
| {{end}} |  | ||||||
| var TestServiceService = { |  | ||||||
|     {{range .Service.Method}} |  | ||||||
|     {{.Name}}: { |  | ||||||
|         path: '/{{$file.Package}}.{{$service.Name}}/{{.Name}}', |  | ||||||
|         requestStream: {{if .ClientStreaming}}true{{else}}false{{end}}, |  | ||||||
|         responseStream: {{if .ServerStreaming}}true{{else}}false{{end}}, |  | ||||||
|         requestType: {{$file.Package}}_pb.{{.Name}}Request, |  | ||||||
|         responseType: {{$file.Package}}_pb.{{.Name}}Reply, |  | ||||||
|         requestSerialize: serialize_{{$file.Package}}_{{.Name}}Request, |  | ||||||
|         requestDeserialize: deserialize_{{$file.Package}}_{{.Name}}Request, |  | ||||||
|         responseSerialize: serialize_{{$file.Package}}_{{.Name}}Reply, |  | ||||||
|         responseDeserialize: deserialize_{{$file.Package}}_{{.Name}}Reply, |  | ||||||
|     }, |  | ||||||
|     {{end}} |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| exports.TestServiceClient = grpc.makeGenericClientConstructor({{.Service.Name}}Service); |  | ||||||
| @@ -0,0 +1,44 @@ | |||||||
|  | // GENERATED CODE -- DO NOT EDIT! | ||||||
|  | {{$Package:=.File.Package}} | ||||||
|  | 'use strict'; | ||||||
|  | var grpc = require('grpc'); | ||||||
|  | var {{$Package}}_pb = require('./{{$Package}}_pb.js'); | ||||||
|  | {{range .File.Service}}{{range .Method}} | ||||||
|  | function serialize_{{$Package}}_{{.InputType | splitArray "." | last}}(arg) { | ||||||
|  |   if (!(arg instanceof {{$Package}}_pb.{{.InputType | splitArray "." | last}})) { | ||||||
|  |     throw new Error('Expected argument of type {{$Package}}.{{.InputType | splitArray "." | last}}'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_{{$Package}}_{{.InputType | splitArray "." | last}}(buffer_arg) { | ||||||
|  |   return {{$Package}}_pb.{{.InputType | splitArray "." | last}}.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function serialize_{{$Package}}_{{.OutputType | splitArray "." | last}}(arg) { | ||||||
|  |   if (!(arg instanceof {{$Package}}_pb.{{.OutputType | splitArray "." | last}})) { | ||||||
|  |     throw new Error('Expected argument of type {{$Package}}.{{.OutputType | splitArray "." | last}}'); | ||||||
|  |   } | ||||||
|  |   return new Buffer(arg.serializeBinary()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function deserialize_{{$Package}}_{{.OutputType | splitArray "." | last}}(buffer_arg) { | ||||||
|  |   return {{$Package}}_pb.{{.OutputType | splitArray "." | last}}.deserializeBinary(new Uint8Array(buffer_arg)); | ||||||
|  | } | ||||||
|  | {{end}}{{end}} | ||||||
|  | {{range .File.Service}} | ||||||
|  | var {{.Name}}Service = exports.{{.Name}}Service = { | ||||||
|  |   {{$serviceName:=.Name}}{{range .Method}}{{.Name | lowerCamelCase}}: { | ||||||
|  |     path: '/{{$Package}}.{{$serviceName}}/{{.Name}}', | ||||||
|  |     requestStream: {{.ClientStreaming | default "false"}}, | ||||||
|  |     responseStream: {{.ServerStreaming | default "false"}}, | ||||||
|  |     requestType: {{$Package}}_pb.{{.InputType | splitArray "." | last}}, | ||||||
|  |     responseType: {{$Package}}_pb.{{.OutputType | splitArray "." | last}}, | ||||||
|  |     requestSerialize: serialize_{{$Package}}_{{.InputType | splitArray "." | last}}, | ||||||
|  |     requestDeserialize: deserialize_{{$Package}}_{{.InputType | splitArray "." | last}}, | ||||||
|  |     responseSerialize: serialize_{{$Package}}_{{.OutputType | splitArray "." | last}}, | ||||||
|  |     responseDeserialize: deserialize_{{$Package}}_{{.OutputType | splitArray "." | last}}, | ||||||
|  |   },{{end}} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | exports.{{.Name}}Client = grpc.makeGenericClientConstructor({{.Name}}Service);{{end}} | ||||||
							
								
								
									
										10
									
								
								glide.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										10
									
								
								glide.lock
									
									
									
										generated
									
									
									
								
							| @@ -1,19 +1,21 @@ | |||||||
| hash: f044e7016f8e72eb5deff471923e17f1fbc26046692649b3289220d2cab9e68a | hash: 488701437e53b39667ed5a84ed1500e727ea8d4902d804c3ea7eb50b1fc022a1 | ||||||
| updated: 2016-12-15T13:43:12.466003615+01:00 | updated: 2016-12-20T11:08:43.124170177+01:00 | ||||||
| imports: | imports: | ||||||
| - name: github.com/aokoli/goutils | - name: github.com/aokoli/goutils | ||||||
|   version: 9c37978a95bd5c709a15883b6242714ea6709e64 |   version: 9c37978a95bd5c709a15883b6242714ea6709e64 | ||||||
| - name: github.com/golang/protobuf | - name: github.com/golang/protobuf | ||||||
|   version: 8ee79997227bf9b34611aee7946ae64735e6fd93 |   version: 98fa357170587e470c5f27d3c3ea0947b71eb455 | ||||||
|   subpackages: |   subpackages: | ||||||
|   - proto |   - proto | ||||||
|   - protoc-gen-go/descriptor |   - protoc-gen-go/descriptor | ||||||
|   - protoc-gen-go/generator |   - protoc-gen-go/generator | ||||||
|   - protoc-gen-go/plugin |   - protoc-gen-go/plugin | ||||||
|  | - name: github.com/huandu/xstrings | ||||||
|  |   version: 3959339b333561bf62a38b424fd41517c2c90f40 | ||||||
| - name: github.com/kr/fs | - name: github.com/kr/fs | ||||||
|   version: 2788f0dbd16903de03cb8186e5c7d97b69ad387b |   version: 2788f0dbd16903de03cb8186e5c7d97b69ad387b | ||||||
| - name: github.com/Masterminds/sprig | - name: github.com/Masterminds/sprig | ||||||
|   version: 69011c0cd9b4d2e0733c4d9e2c8e2a5a0d0a2f2f |   version: 1e60e4ce482a1e2c7b9c9be667535ef152e04300 | ||||||
| - name: github.com/satori/go.uuid | - name: github.com/satori/go.uuid | ||||||
|   version: 879c5887cd475cd7864858769793b2ceb0d44feb |   version: 879c5887cd475cd7864858769793b2ceb0d44feb | ||||||
| testImports: [] | testImports: [] | ||||||
|   | |||||||
| @@ -8,3 +8,4 @@ import: | |||||||
|   - protoc-gen-go/plugin |   - protoc-gen-go/plugin | ||||||
| - package: github.com/kr/fs | - package: github.com/kr/fs | ||||||
| - package: github.com/Masterminds/sprig | - package: github.com/Masterminds/sprig | ||||||
|  | - package: github.com/huandu/xstrings | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								helpers.go
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								helpers.go
									
									
									
									
									
								
							| @@ -2,9 +2,11 @@ package main | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
|  | 	"strings" | ||||||
| 	"text/template" | 	"text/template" | ||||||
|  |  | ||||||
| 	"github.com/Masterminds/sprig" | 	"github.com/Masterminds/sprig" | ||||||
|  | 	"github.com/huandu/xstrings" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| var ProtoHelpersFuncMap = template.FuncMap{ | var ProtoHelpersFuncMap = template.FuncMap{ | ||||||
| @@ -21,12 +23,34 @@ var ProtoHelpersFuncMap = template.FuncMap{ | |||||||
| 		a, _ := json.MarshalIndent(v, "", "  ") | 		a, _ := json.MarshalIndent(v, "", "  ") | ||||||
| 		return string(a) | 		return string(a) | ||||||
| 	}, | 	}, | ||||||
| 	"first": func(a []interface{}) interface{} { | 	"splitArray": func(sep string, s string) []string { | ||||||
|  | 		return strings.Split(s, sep) | ||||||
|  | 	}, | ||||||
|  | 	"first": func(a []string) string { | ||||||
| 		return a[0] | 		return a[0] | ||||||
| 	}, | 	}, | ||||||
| 	"last": func(a []interface{}) interface{} { | 	"last": func(a []string) string { | ||||||
| 		return a[len(a)-1] | 		return a[len(a)-1] | ||||||
| 	}, | 	}, | ||||||
|  | 	"upperFirst": func(s string) string { | ||||||
|  | 		return strings.ToUpper(s[:1]) + s[1:] | ||||||
|  | 	}, | ||||||
|  | 	"lowerFirst": func(s string) string { | ||||||
|  | 		return strings.ToLower(s[:1]) + s[1:] | ||||||
|  | 	}, | ||||||
|  | 	"camelCase": func(s string) string { | ||||||
|  | 		return xstrings.ToCamelCase(s) | ||||||
|  | 	}, | ||||||
|  | 	"lowerCamelCase": func(s string) string { | ||||||
|  | 		cc := xstrings.ToCamelCase(s) | ||||||
|  | 		return strings.ToLower(cc[:1]) + cc[1:] | ||||||
|  | 	}, | ||||||
|  | 	"snakeCase": func(s string) string { | ||||||
|  | 		return xstrings.ToSnakeCase(s) | ||||||
|  | 	}, | ||||||
|  | 	"kebabCase": func(s string) string { | ||||||
|  | 		return strings.Replace(xstrings.ToSnakeCase(s), "_", "-", -1) | ||||||
|  | 	}, | ||||||
| } | } | ||||||
|  |  | ||||||
| func init() { | func init() { | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								vendor/github.com/Masterminds/sprig/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/github.com/Masterminds/sprig/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -166,13 +166,6 @@ parse, it returns the time unaltered. See `time.ParseDuration` for info on durat | |||||||
|   follows: []byte are converted, fmt.Stringers will have String() called. |   follows: []byte are converted, fmt.Stringers will have String() called. | ||||||
|   errors will have Error() called. All others will be passed through |   errors will have Error() called. All others will be passed through | ||||||
|   fmt.Sprtinf("%v"). |   fmt.Sprtinf("%v"). | ||||||
| - set: Takes a dict, a key, and a value, and sets that key/value pair in |  | ||||||
|   the dict. `set $dict $key $value`. For convenience, it returns the dict, |  | ||||||
|   even though the dict was modified in place. |  | ||||||
| - unset: Takes a dict and a key, and deletes that key/value pair from the |  | ||||||
|   dict. `unset $dict $key`. This returns the dict for convenience. |  | ||||||
| - hasKey: Takes a dict and a key, and returns boolean true if the key is in |  | ||||||
|   the dict. |  | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| {{$t := tuple 1 "a" "foo"}} | {{$t := tuple 1 "a" "foo"}} | ||||||
|   | |||||||
							
								
								
									
										45
									
								
								vendor/github.com/Masterminds/sprig/functions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								vendor/github.com/Masterminds/sprig/functions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -99,14 +99,6 @@ OS: | |||||||
| 	- env: Resolve an environment variable | 	- env: Resolve an environment variable | ||||||
| 	- expandenv: Expand a string through the environment | 	- expandenv: Expand a string through the environment | ||||||
|  |  | ||||||
| File Paths: |  | ||||||
| 	- base: Return the last element of a path. https://golang.org/pkg/path#Base |  | ||||||
| 	- dir: Remove the last element of a path. https://golang.org/pkg/path#Dir |  | ||||||
| 	- clean: Clean a path to the shortest equivalent name.  (e.g. remove "foo/.." |  | ||||||
| 	from "foo/../bar.html") https://golang.org/pkg/path#Clean |  | ||||||
| 	- ext: https://golang.org/pkg/path#Ext |  | ||||||
| 	- isAbs: https://golang.org/pkg/path#IsAbs |  | ||||||
|  |  | ||||||
| Encoding: | Encoding: | ||||||
| 	- b64enc: Base 64 encode a string. | 	- b64enc: Base 64 encode a string. | ||||||
| 	- b64dec: Base 64 decode a string. | 	- b64dec: Base 64 decode a string. | ||||||
| @@ -143,13 +135,6 @@ Data Structures: | |||||||
| 	  follows: []byte are converted, fmt.Stringers will have String() called. | 	  follows: []byte are converted, fmt.Stringers will have String() called. | ||||||
| 	  errors will have Error() called. All others will be passed through | 	  errors will have Error() called. All others will be passed through | ||||||
| 	  fmt.Sprtinf("%v"). | 	  fmt.Sprtinf("%v"). | ||||||
| 	- set: Takes a dict, a key, and a value, and sets that key/value pair in |  | ||||||
| 	  the dict. `set $dict $key $value`. For convenience, it returns the dict, |  | ||||||
| 	  even though the dict was modified in place. |  | ||||||
| 	- unset: Takes a dict and a key, and deletes that key/value pair from the |  | ||||||
| 	  dict. `unset $dict $key`. This returns the dict for convenience. |  | ||||||
| 	- hasKey: Takes a dict and a key, and returns boolean true if the key is in |  | ||||||
| 	  the dict. |  | ||||||
|  |  | ||||||
| Math Functions: | Math Functions: | ||||||
|  |  | ||||||
| @@ -194,7 +179,6 @@ import ( | |||||||
| 	"math" | 	"math" | ||||||
| 	"math/big" | 	"math/big" | ||||||
| 	"os" | 	"os" | ||||||
| 	"path" |  | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" | 	"strings" | ||||||
| @@ -379,13 +363,6 @@ var genericMap = map[string]interface{}{ | |||||||
| 	"env":       func(s string) string { return os.Getenv(s) }, | 	"env":       func(s string) string { return os.Getenv(s) }, | ||||||
| 	"expandenv": func(s string) string { return os.ExpandEnv(s) }, | 	"expandenv": func(s string) string { return os.ExpandEnv(s) }, | ||||||
|  |  | ||||||
| 	// File Paths: |  | ||||||
| 	"base":  path.Base, |  | ||||||
| 	"dir":   path.Dir, |  | ||||||
| 	"clean": path.Clean, |  | ||||||
| 	"ext":   path.Ext, |  | ||||||
| 	"isAbs": path.IsAbs, |  | ||||||
|  |  | ||||||
| 	// Encoding: | 	// Encoding: | ||||||
| 	"b64enc": base64encode, | 	"b64enc": base64encode, | ||||||
| 	"b64dec": base64decode, | 	"b64dec": base64decode, | ||||||
| @@ -393,11 +370,8 @@ var genericMap = map[string]interface{}{ | |||||||
| 	"b32dec": base32decode, | 	"b32dec": base32decode, | ||||||
|  |  | ||||||
| 	// Data Structures: | 	// Data Structures: | ||||||
| 	"tuple":  tuple, | 	"tuple": tuple, | ||||||
| 	"dict":   dict, | 	"dict":  dict, | ||||||
| 	"set":    set, |  | ||||||
| 	"unset":  unset, |  | ||||||
| 	"hasKey": hasKey, |  | ||||||
|  |  | ||||||
| 	// Crypto: | 	// Crypto: | ||||||
| 	"genPrivateKey": generatePrivateKey, | 	"genPrivateKey": generatePrivateKey, | ||||||
| @@ -660,21 +634,6 @@ func tuple(v ...interface{}) []interface{} { | |||||||
| 	return v | 	return v | ||||||
| } | } | ||||||
|  |  | ||||||
| func set(d map[string]interface{}, key string, value interface{}) map[string]interface{} { |  | ||||||
| 	d[key] = value |  | ||||||
| 	return d |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func unset(d map[string]interface{}, key string) map[string]interface{} { |  | ||||||
| 	delete(d, key) |  | ||||||
| 	return d |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func hasKey(d map[string]interface{}, key string) bool { |  | ||||||
| 	_, ok := d[key] |  | ||||||
| 	return ok |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func dict(v ...interface{}) map[string]interface{} { | func dict(v ...interface{}) map[string]interface{} { | ||||||
| 	dict := map[string]interface{}{} | 	dict := map[string]interface{}{} | ||||||
| 	lenv := len(v) | 	lenv := len(v) | ||||||
|   | |||||||
							
								
								
									
										69
									
								
								vendor/github.com/Masterminds/sprig/functions_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										69
									
								
								vendor/github.com/Masterminds/sprig/functions_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -12,7 +12,6 @@ import ( | |||||||
| 	"text/template" | 	"text/template" | ||||||
|  |  | ||||||
| 	"github.com/aokoli/goutils" | 	"github.com/aokoli/goutils" | ||||||
| 	"github.com/stretchr/testify/assert" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // This is woefully incomplete. Please help. | // This is woefully incomplete. Please help. | ||||||
| @@ -285,16 +284,6 @@ func TestEmpty(t *testing.T) { | |||||||
| 	if err := runt(tpl, "1"); err != nil { | 	if err := runt(tpl, "1"); err != nil { | ||||||
| 		t.Error(err) | 		t.Error(err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	dict := map[string]interface{}{"top": map[string]interface{}{}} |  | ||||||
| 	tpl = `{{if empty .top.NoSuchThing}}1{{else}}0{{end}}` |  | ||||||
| 	if err := runtv(tpl, "1", dict); err != nil { |  | ||||||
| 		t.Error(err) |  | ||||||
| 	} |  | ||||||
| 	tpl = `{{if empty .bottom.NoSuchThing}}1{{else}}0{{end}}` |  | ||||||
| 	if err := runtv(tpl, "1", dict); err != nil { |  | ||||||
| 		t.Error(err) |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func TestSplit(t *testing.T) { | func TestSplit(t *testing.T) { | ||||||
| @@ -533,43 +522,6 @@ func TestDict(t *testing.T) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func TestUnset(t *testing.T) { |  | ||||||
| 	tpl := `{{- $d := dict "one" 1 "two" 222222 -}} |  | ||||||
| 	{{- $_ := unset $d "two" -}} |  | ||||||
| 	{{- range $k, $v := $d}}{{$k}}{{$v}}{{- end -}} |  | ||||||
| 	` |  | ||||||
|  |  | ||||||
| 	expect := "one1" |  | ||||||
| 	if err := runt(tpl, expect); err != nil { |  | ||||||
| 		t.Error(err) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| func TestHasKey(t *testing.T) { |  | ||||||
| 	tpl := `{{- $d := dict "one" 1 "two" 222222 -}} |  | ||||||
| 	{{- if hasKey $d "one" -}}1{{- end -}} |  | ||||||
| 	` |  | ||||||
|  |  | ||||||
| 	expect := "1" |  | ||||||
| 	if err := runt(tpl, expect); err != nil { |  | ||||||
| 		t.Error(err) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestSet(t *testing.T) { |  | ||||||
| 	tpl := `{{- $d := dict "one" 1 "two" 222222 -}} |  | ||||||
| 	{{- $_ := set $d "two" 2 -}} |  | ||||||
| 	{{- $_ := set $d "three" 3 -}} |  | ||||||
| 	{{- if hasKey $d "one" -}}{{$d.one}}{{- end -}} |  | ||||||
| 	{{- if hasKey $d "two" -}}{{$d.two}}{{- end -}} |  | ||||||
| 	{{- if hasKey $d "three" -}}{{$d.three}}{{- end -}} |  | ||||||
| 	` |  | ||||||
|  |  | ||||||
| 	expect := "123" |  | ||||||
| 	if err := runt(tpl, expect); err != nil { |  | ||||||
| 		t.Error(err) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestUntil(t *testing.T) { | func TestUntil(t *testing.T) { | ||||||
| 	tests := map[string]string{ | 	tests := map[string]string{ | ||||||
| 		`{{range $i, $e := until 5}}{{$i}}{{$e}}{{end}}`:   "0011223344", | 		`{{range $i, $e := until 5}}{{$i}}{{$e}}{{end}}`:   "0011223344", | ||||||
| @@ -599,27 +551,6 @@ func TestUntilStep(t *testing.T) { | |||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func TestBase(t *testing.T) { |  | ||||||
| 	assert.NoError(t, runt(`{{ base "foo/bar" }}`, "bar")) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestDir(t *testing.T) { |  | ||||||
| 	assert.NoError(t, runt(`{{ dir "foo/bar/baz" }}`, "foo/bar")) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestIsAbs(t *testing.T) { |  | ||||||
| 	assert.NoError(t, runt(`{{ isAbs "/foo" }}`, "true")) |  | ||||||
| 	assert.NoError(t, runt(`{{ isAbs "foo" }}`, "false")) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestClean(t *testing.T) { |  | ||||||
| 	assert.NoError(t, runt(`{{ clean "/foo/../foo/../bar" }}`, "/bar")) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestExt(t *testing.T) { |  | ||||||
| 	assert.NoError(t, runt(`{{ ext "/foo/bar/baz.txt" }}`, ".txt")) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestDelete(t *testing.T) { | func TestDelete(t *testing.T) { | ||||||
| 	fmap := TxtFuncMap() | 	fmap := TxtFuncMap() | ||||||
| 	delete(fmap, "split") | 	delete(fmap, "split") | ||||||
|   | |||||||
							
								
								
									
										762
									
								
								vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										762
									
								
								vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -169,13 +169,6 @@ func (m *ConformanceRequest) GetJsonPayload() string { | |||||||
| 	return "" | 	return "" | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *ConformanceRequest) GetRequestedOutputFormat() WireFormat { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RequestedOutputFormat |  | ||||||
| 	} |  | ||||||
| 	return WireFormat_UNSPECIFIED |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // XXX_OneofFuncs is for the internal use of the proto package. | // XXX_OneofFuncs is for the internal use of the proto package. | ||||||
| func (*ConformanceRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { | func (*ConformanceRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { | ||||||
| 	return _ConformanceRequest_OneofMarshaler, _ConformanceRequest_OneofUnmarshaler, _ConformanceRequest_OneofSizer, []interface{}{ | 	return _ConformanceRequest_OneofMarshaler, _ConformanceRequest_OneofUnmarshaler, _ConformanceRequest_OneofSizer, []interface{}{ | ||||||
| @@ -578,22 +571,22 @@ type TestAllTypes struct { | |||||||
| 	// (protobuf says names can be any valid C/C++ identifier.) | 	// (protobuf says names can be any valid C/C++ identifier.) | ||||||
| 	Fieldname1    int32 `protobuf:"varint,401,opt,name=fieldname1" json:"fieldname1,omitempty"` | 	Fieldname1    int32 `protobuf:"varint,401,opt,name=fieldname1" json:"fieldname1,omitempty"` | ||||||
| 	FieldName2    int32 `protobuf:"varint,402,opt,name=field_name2,json=fieldName2" json:"field_name2,omitempty"` | 	FieldName2    int32 `protobuf:"varint,402,opt,name=field_name2,json=fieldName2" json:"field_name2,omitempty"` | ||||||
| 	XFieldName3   int32 `protobuf:"varint,403,opt,name=_field_name3,json=FieldName3" json:"_field_name3,omitempty"` | 	XFieldName3   int32 `protobuf:"varint,403,opt,name=_field_name3,json=fieldName3" json:"_field_name3,omitempty"` | ||||||
| 	Field_Name4_  int32 `protobuf:"varint,404,opt,name=field__name4_,json=fieldName4" json:"field__name4_,omitempty"` | 	Field_Name4_  int32 `protobuf:"varint,404,opt,name=field__name4_,json=fieldName4" json:"field__name4_,omitempty"` | ||||||
| 	Field0Name5   int32 `protobuf:"varint,405,opt,name=field0name5" json:"field0name5,omitempty"` | 	Field0Name5   int32 `protobuf:"varint,405,opt,name=field0name5" json:"field0name5,omitempty"` | ||||||
| 	Field_0Name6  int32 `protobuf:"varint,406,opt,name=field_0_name6,json=field0Name6" json:"field_0_name6,omitempty"` | 	Field_0Name6  int32 `protobuf:"varint,406,opt,name=field_0_name6,json=field0Name6" json:"field_0_name6,omitempty"` | ||||||
| 	FieldName7    int32 `protobuf:"varint,407,opt,name=fieldName7" json:"fieldName7,omitempty"` | 	FieldName7    int32 `protobuf:"varint,407,opt,name=fieldName7" json:"fieldName7,omitempty"` | ||||||
| 	FieldName8    int32 `protobuf:"varint,408,opt,name=FieldName8" json:"FieldName8,omitempty"` | 	FieldName8    int32 `protobuf:"varint,408,opt,name=FieldName8,json=fieldName8" json:"FieldName8,omitempty"` | ||||||
| 	Field_Name9   int32 `protobuf:"varint,409,opt,name=field_Name9,json=fieldName9" json:"field_Name9,omitempty"` | 	Field_Name9   int32 `protobuf:"varint,409,opt,name=field_Name9,json=fieldName9" json:"field_Name9,omitempty"` | ||||||
| 	Field_Name10  int32 `protobuf:"varint,410,opt,name=Field_Name10,json=FieldName10" json:"Field_Name10,omitempty"` | 	Field_Name10  int32 `protobuf:"varint,410,opt,name=Field_Name10,json=fieldName10" json:"Field_Name10,omitempty"` | ||||||
| 	FIELD_NAME11  int32 `protobuf:"varint,411,opt,name=FIELD_NAME11,json=FIELDNAME11" json:"FIELD_NAME11,omitempty"` | 	FIELD_NAME11  int32 `protobuf:"varint,411,opt,name=FIELD_NAME11,json=fIELDNAME11" json:"FIELD_NAME11,omitempty"` | ||||||
| 	FIELDName12   int32 `protobuf:"varint,412,opt,name=FIELD_name12,json=FIELDName12" json:"FIELD_name12,omitempty"` | 	FIELDName12   int32 `protobuf:"varint,412,opt,name=FIELD_name12,json=fIELDName12" json:"FIELD_name12,omitempty"` | ||||||
| 	XFieldName13  int32 `protobuf:"varint,413,opt,name=__field_name13,json=FieldName13" json:"__field_name13,omitempty"` | 	XFieldName13  int32 `protobuf:"varint,413,opt,name=__field_name13,json=fieldName13" json:"__field_name13,omitempty"` | ||||||
| 	X_FieldName14 int32 `protobuf:"varint,414,opt,name=__Field_name14,json=FieldName14" json:"__Field_name14,omitempty"` | 	X_FieldName14 int32 `protobuf:"varint,414,opt,name=__Field_name14,json=fieldName14" json:"__Field_name14,omitempty"` | ||||||
| 	Field_Name15  int32 `protobuf:"varint,415,opt,name=field__name15,json=fieldName15" json:"field__name15,omitempty"` | 	Field_Name15  int32 `protobuf:"varint,415,opt,name=field__name15,json=fieldName15" json:"field__name15,omitempty"` | ||||||
| 	Field__Name16 int32 `protobuf:"varint,416,opt,name=field__Name16,json=fieldName16" json:"field__Name16,omitempty"` | 	Field__Name16 int32 `protobuf:"varint,416,opt,name=field__Name16,json=fieldName16" json:"field__Name16,omitempty"` | ||||||
| 	FieldName17__ int32 `protobuf:"varint,417,opt,name=field_name17__,json=fieldName17" json:"field_name17__,omitempty"` | 	FieldName17__ int32 `protobuf:"varint,417,opt,name=field_name17__,json=fieldName17" json:"field_name17__,omitempty"` | ||||||
| 	FieldName18__ int32 `protobuf:"varint,418,opt,name=Field_name18__,json=FieldName18" json:"Field_name18__,omitempty"` | 	FieldName18__ int32 `protobuf:"varint,418,opt,name=Field_name18__,json=fieldName18" json:"Field_name18__,omitempty"` | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *TestAllTypes) Reset()                    { *m = TestAllTypes{} } | func (m *TestAllTypes) Reset()                    { *m = TestAllTypes{} } | ||||||
| @@ -650,111 +643,6 @@ func (m *TestAllTypes) GetOneofField() isTestAllTypes_OneofField { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalInt32() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalInt32 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalInt64() int64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalInt64 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalUint32() uint32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalUint32 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalUint64() uint64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalUint64 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalSint32() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalSint32 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalSint64() int64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalSint64 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalFixed32() uint32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalFixed32 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalFixed64() uint64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalFixed64 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalSfixed32() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalSfixed32 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalSfixed64() int64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalSfixed64 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalFloat() float32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalFloat |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalDouble() float64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalDouble |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalBool() bool { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalBool |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalString() string { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalString |  | ||||||
| 	} |  | ||||||
| 	return "" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalBytes() []byte { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalBytes |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_NestedMessage { | func (m *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_NestedMessage { | ||||||
| 	if m != nil { | 	if m != nil { | ||||||
| 		return m.OptionalNestedMessage | 		return m.OptionalNestedMessage | ||||||
| @@ -769,34 +657,6 @@ func (m *TestAllTypes) GetOptionalForeignMessage() *ForeignMessage { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalNestedEnum() TestAllTypes_NestedEnum { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalNestedEnum |  | ||||||
| 	} |  | ||||||
| 	return TestAllTypes_FOO |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalForeignEnum() ForeignEnum { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalForeignEnum |  | ||||||
| 	} |  | ||||||
| 	return ForeignEnum_FOREIGN_FOO |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalStringPiece() string { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalStringPiece |  | ||||||
| 	} |  | ||||||
| 	return "" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetOptionalCord() string { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.OptionalCord |  | ||||||
| 	} |  | ||||||
| 	return "" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRecursiveMessage() *TestAllTypes { | func (m *TestAllTypes) GetRecursiveMessage() *TestAllTypes { | ||||||
| 	if m != nil { | 	if m != nil { | ||||||
| 		return m.RecursiveMessage | 		return m.RecursiveMessage | ||||||
| @@ -804,111 +664,6 @@ func (m *TestAllTypes) GetRecursiveMessage() *TestAllTypes { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedInt32() []int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedInt32 |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedInt64() []int64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedInt64 |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedUint32() []uint32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedUint32 |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedUint64() []uint64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedUint64 |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedSint32() []int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedSint32 |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedSint64() []int64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedSint64 |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedFixed32() []uint32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedFixed32 |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedFixed64() []uint64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedFixed64 |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedSfixed32() []int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedSfixed32 |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedSfixed64() []int64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedSfixed64 |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedFloat() []float32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedFloat |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedDouble() []float64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedDouble |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedBool() []bool { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedBool |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedString() []string { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedString |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedBytes() [][]byte { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedBytes |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_NestedMessage { | func (m *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_NestedMessage { | ||||||
| 	if m != nil { | 	if m != nil { | ||||||
| 		return m.RepeatedNestedMessage | 		return m.RepeatedNestedMessage | ||||||
| @@ -923,34 +678,6 @@ func (m *TestAllTypes) GetRepeatedForeignMessage() []*ForeignMessage { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEnum { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedNestedEnum |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedForeignEnum() []ForeignEnum { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedForeignEnum |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedStringPiece() []string { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedStringPiece |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetRepeatedCord() []string { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RepeatedCord |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetMapInt32Int32() map[int32]int32 { | func (m *TestAllTypes) GetMapInt32Int32() map[int32]int32 { | ||||||
| 	if m != nil { | 	if m != nil { | ||||||
| 		return m.MapInt32Int32 | 		return m.MapInt32Int32 | ||||||
| @@ -1357,132 +1084,6 @@ func (m *TestAllTypes) GetRepeatedValue() []*google_protobuf3.Value { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetFieldname1() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Fieldname1 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetFieldName2() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.FieldName2 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetXFieldName3() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.XFieldName3 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetField_Name4_() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Field_Name4_ |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetField0Name5() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Field0Name5 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetField_0Name6() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Field_0Name6 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetFieldName7() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.FieldName7 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetFieldName8() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.FieldName8 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetField_Name9() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Field_Name9 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetField_Name10() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Field_Name10 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetFIELD_NAME11() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.FIELD_NAME11 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetFIELDName12() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.FIELDName12 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetXFieldName13() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.XFieldName13 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetX_FieldName14() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.X_FieldName14 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetField_Name15() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Field_Name15 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetField__Name16() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Field__Name16 |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetFieldName17__() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.FieldName17__ |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes) GetFieldName18__() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.FieldName18__ |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // XXX_OneofFuncs is for the internal use of the proto package. | // XXX_OneofFuncs is for the internal use of the proto package. | ||||||
| func (*TestAllTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { | func (*TestAllTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { | ||||||
| 	return _TestAllTypes_OneofMarshaler, _TestAllTypes_OneofUnmarshaler, _TestAllTypes_OneofSizer, []interface{}{ | 	return _TestAllTypes_OneofMarshaler, _TestAllTypes_OneofUnmarshaler, _TestAllTypes_OneofSizer, []interface{}{ | ||||||
| @@ -1666,13 +1267,6 @@ func (m *TestAllTypes_NestedMessage) String() string            { return proto.C | |||||||
| func (*TestAllTypes_NestedMessage) ProtoMessage()               {} | func (*TestAllTypes_NestedMessage) ProtoMessage()               {} | ||||||
| func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } | func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } | ||||||
|  |  | ||||||
| func (m *TestAllTypes_NestedMessage) GetA() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.A |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes { | func (m *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes { | ||||||
| 	if m != nil { | 	if m != nil { | ||||||
| 		return m.Corecursive | 		return m.Corecursive | ||||||
| @@ -1689,13 +1283,6 @@ func (m *ForeignMessage) String() string            { return proto.CompactTextSt | |||||||
| func (*ForeignMessage) ProtoMessage()               {} | func (*ForeignMessage) ProtoMessage()               {} | ||||||
| func (*ForeignMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } | func (*ForeignMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } | ||||||
|  |  | ||||||
| func (m *ForeignMessage) GetC() int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.C |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func init() { | func init() { | ||||||
| 	proto.RegisterType((*ConformanceRequest)(nil), "conformance.ConformanceRequest") | 	proto.RegisterType((*ConformanceRequest)(nil), "conformance.ConformanceRequest") | ||||||
| 	proto.RegisterType((*ConformanceResponse)(nil), "conformance.ConformanceResponse") | 	proto.RegisterType((*ConformanceResponse)(nil), "conformance.ConformanceResponse") | ||||||
| @@ -1710,177 +1297,176 @@ func init() { | |||||||
| func init() { proto.RegisterFile("conformance_proto/conformance.proto", fileDescriptor0) } | func init() { proto.RegisterFile("conformance_proto/conformance.proto", fileDescriptor0) } | ||||||
|  |  | ||||||
| var fileDescriptor0 = []byte{ | var fileDescriptor0 = []byte{ | ||||||
| 	// 2737 bytes of a gzipped FileDescriptorProto | 	// 2731 bytes of a gzipped FileDescriptorProto | ||||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x5a, 0xd9, 0x72, 0xdb, 0xc8, | 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x5a, 0xd9, 0x72, 0xdb, 0xc8, | ||||||
| 	0xd5, 0x16, 0x08, 0x59, 0x4b, 0x93, 0x92, 0xa8, 0xd6, 0xd6, 0x96, 0x5d, 0x63, 0x58, 0xb2, 0x7f, | 	0xd5, 0x16, 0x08, 0x59, 0x4b, 0x93, 0x92, 0xa8, 0xd6, 0xd6, 0x96, 0x5d, 0x63, 0x58, 0xb2, 0x7f, | ||||||
| 	0xd3, 0xf6, 0x8c, 0xac, 0x05, 0x86, 0x65, 0xcf, 0x3f, 0x8e, 0x45, 0x9b, 0xb4, 0xe4, 0x8c, 0x25, | 	0xd3, 0xf6, 0x8c, 0x6c, 0x49, 0x30, 0x2c, 0x7b, 0xfe, 0x71, 0x2c, 0xda, 0xa4, 0x25, 0x67, 0x2c, | ||||||
| 	0x17, 0x64, 0x8d, 0xab, 0x9c, 0x0b, 0x06, 0xa6, 0x20, 0x15, 0xc7, 0x24, 0xc1, 0x01, 0x48, 0x4f, | 	0xb9, 0x20, 0x6b, 0x5c, 0xe5, 0x5c, 0x30, 0x10, 0x05, 0xa9, 0x38, 0x26, 0x09, 0x0e, 0x40, 0x7a, | ||||||
| 	0x94, 0xcb, 0xbc, 0x41, 0xf6, 0x7d, 0xbd, 0xcf, 0x7a, 0x93, 0xa4, 0x92, 0xab, 0x54, 0x6e, 0xb2, | 	0xa2, 0x5c, 0xe6, 0x0d, 0xb2, 0xef, 0xeb, 0x7d, 0xd6, 0x9b, 0x24, 0x95, 0x5c, 0xa5, 0x72, 0x93, | ||||||
| 	0x27, 0x95, 0x3d, 0x79, 0x85, 0xbc, 0x43, 0x52, 0xbd, 0xa2, 0xbb, 0x01, 0x50, 0xf4, 0x54, 0x0d, | 	0x3d, 0xa9, 0xec, 0xc9, 0x2b, 0xe4, 0x1d, 0x92, 0xea, 0x15, 0xdd, 0x0d, 0x80, 0xa2, 0xa7, 0x6a, | ||||||
| 	0x25, 0x1e, 0x7c, 0xfd, 0x9d, 0xd3, 0xe7, 0x1c, 0x7c, 0x2d, 0x1c, 0x18, 0x2c, 0xd7, 0x83, 0xf6, | 	0x28, 0xf1, 0xe0, 0xeb, 0xef, 0x9c, 0x3e, 0xe7, 0xe0, 0x6b, 0xe1, 0xc0, 0x60, 0xb9, 0x1e, 0xb4, | ||||||
| 	0x51, 0x10, 0xb6, 0xbc, 0x76, 0xdd, 0xaf, 0x75, 0xc2, 0xa0, 0x1b, 0xdc, 0x90, 0x2c, 0x2b, 0xc4, | 	0x8f, 0x82, 0xb0, 0xe5, 0xb5, 0xeb, 0x7e, 0xad, 0x13, 0x06, 0xdd, 0xe0, 0x86, 0x64, 0x59, 0x21, | ||||||
| 	0x02, 0xf3, 0x92, 0x69, 0xf1, 0xec, 0x71, 0x10, 0x1c, 0x37, 0xfd, 0x1b, 0xe4, 0xd2, 0x8b, 0xde, | 	0x16, 0x98, 0x97, 0x4c, 0x8b, 0x67, 0x8f, 0x83, 0xe0, 0xb8, 0xe9, 0xdf, 0x20, 0x97, 0x0e, 0x7a, | ||||||
| 	0xd1, 0x0d, 0xaf, 0x7d, 0x42, 0x71, 0x8b, 0x6f, 0xe8, 0x97, 0x0e, 0x7b, 0xa1, 0xd7, 0x6d, 0x04, | 	0x47, 0x37, 0xbc, 0xf6, 0x09, 0xc5, 0x2d, 0xbe, 0xa1, 0x5f, 0x3a, 0xec, 0x85, 0x5e, 0xb7, 0x11, | ||||||
| 	0x6d, 0x76, 0xdd, 0xd2, 0xaf, 0x1f, 0x35, 0xfc, 0xe6, 0x61, 0xad, 0xe5, 0x45, 0x2f, 0x19, 0xe2, | 	0xb4, 0xd9, 0x75, 0x4b, 0xbf, 0x7e, 0xd4, 0xf0, 0x9b, 0x87, 0xb5, 0x96, 0x17, 0xbd, 0x64, 0x88, | ||||||
| 	0xbc, 0x8e, 0x88, 0xba, 0x61, 0xaf, 0xde, 0x65, 0x57, 0x2f, 0xe8, 0x57, 0xbb, 0x8d, 0x96, 0x1f, | 	0xf3, 0x3a, 0x22, 0xea, 0x86, 0xbd, 0x7a, 0x97, 0x5d, 0xbd, 0xa0, 0x5f, 0xed, 0x36, 0x5a, 0x7e, | ||||||
| 	0x75, 0xbd, 0x56, 0x27, 0x2b, 0x80, 0x0f, 0x43, 0xaf, 0xd3, 0xf1, 0xc3, 0x88, 0x5e, 0x5f, 0xfa, | 	0xd4, 0xf5, 0x5a, 0x9d, 0xac, 0x00, 0x3e, 0x0c, 0xbd, 0x4e, 0xc7, 0x0f, 0x23, 0x7a, 0x7d, 0xe9, | ||||||
| 	0x85, 0x01, 0xe0, 0xfd, 0x78, 0x2f, 0xae, 0xff, 0x41, 0xcf, 0x8f, 0xba, 0xf0, 0x3a, 0x28, 0xf2, | 	0x17, 0x06, 0x80, 0x0f, 0xe2, 0xbd, 0xb8, 0xfe, 0x07, 0x3d, 0x3f, 0xea, 0xc2, 0xeb, 0xa0, 0xc8, | ||||||
| 	0x15, 0xb5, 0x8e, 0x77, 0xd2, 0x0c, 0xbc, 0x43, 0x64, 0x58, 0x46, 0xa9, 0xb0, 0x3d, 0xe4, 0x4e, | 	0x57, 0xd4, 0x3a, 0xde, 0x49, 0x33, 0xf0, 0x0e, 0x91, 0x61, 0x19, 0xa5, 0xc2, 0xd6, 0x90, 0x3b, | ||||||
| 	0xf1, 0x2b, 0x4f, 0xe8, 0x05, 0xb8, 0x0c, 0x0a, 0xef, 0x47, 0x41, 0x5b, 0x00, 0x73, 0x96, 0x51, | 	0xc5, 0xaf, 0x3c, 0xa5, 0x17, 0xe0, 0x32, 0x28, 0xbc, 0x1f, 0x05, 0x6d, 0x01, 0xcc, 0x59, 0x46, | ||||||
| 	0x1a, 0xdf, 0x1e, 0x72, 0xf3, 0xd8, 0xca, 0x41, 0x7b, 0x60, 0x21, 0xa4, 0xe4, 0xfe, 0x61, 0x2d, | 	0x69, 0x7c, 0x6b, 0xc8, 0xcd, 0x63, 0x2b, 0x07, 0xed, 0x82, 0x85, 0x90, 0x92, 0xfb, 0x87, 0xb5, | ||||||
| 	0xe8, 0x75, 0x3b, 0xbd, 0x6e, 0x8d, 0x78, 0xed, 0x22, 0xd3, 0x32, 0x4a, 0x93, 0xeb, 0x0b, 0x2b, | 	0xa0, 0xd7, 0xed, 0xf4, 0xba, 0x35, 0xe2, 0xb5, 0x8b, 0x4c, 0xcb, 0x28, 0x4d, 0xae, 0x2d, 0xac, | ||||||
| 	0x72, 0x9a, 0x9f, 0x35, 0x42, 0xbf, 0x4a, 0x2e, 0xbb, 0x73, 0x62, 0xdd, 0x1e, 0x59, 0x46, 0xcd, | 	0xc8, 0x69, 0x7e, 0xde, 0x08, 0xfd, 0x2a, 0xb9, 0xec, 0xce, 0x89, 0x75, 0xbb, 0x64, 0x19, 0x35, | ||||||
| 	0xe5, 0x71, 0x30, 0xca, 0x1c, 0x2e, 0x7d, 0x2a, 0x07, 0x66, 0x94, 0x4d, 0x44, 0x9d, 0xa0, 0x1d, | 	0x97, 0xc7, 0xc1, 0x28, 0x73, 0xb8, 0xf4, 0xa9, 0x1c, 0x98, 0x51, 0x36, 0x11, 0x75, 0x82, 0x76, | ||||||
| 	0xf9, 0xf0, 0x22, 0xc8, 0x77, 0xbc, 0x30, 0xf2, 0x6b, 0x7e, 0x18, 0x06, 0x21, 0xd9, 0x00, 0x8e, | 	0xe4, 0xc3, 0x8b, 0x20, 0xdf, 0xf1, 0xc2, 0xc8, 0xaf, 0xf9, 0x61, 0x18, 0x84, 0x64, 0x03, 0x38, | ||||||
| 	0x0b, 0x10, 0x63, 0x05, 0xdb, 0xe0, 0x55, 0x30, 0x15, 0xf9, 0x61, 0xc3, 0x6b, 0x36, 0x3e, 0xc9, | 	0x2e, 0x40, 0x8c, 0x15, 0x6c, 0x83, 0x57, 0xc1, 0x54, 0xe4, 0x87, 0x0d, 0xaf, 0xd9, 0xf8, 0x24, | ||||||
| 	0x61, 0x23, 0x0c, 0x36, 0x29, 0x2e, 0x50, 0xe8, 0x65, 0x30, 0x11, 0xf6, 0xda, 0x38, 0xc1, 0x0c, | 	0x87, 0x8d, 0x30, 0xd8, 0xa4, 0xb8, 0x40, 0xa1, 0x97, 0xc1, 0x44, 0xd8, 0x6b, 0xe3, 0x04, 0x33, | ||||||
| 	0xc8, 0xf7, 0x59, 0x60, 0x66, 0x0a, 0x4b, 0x4b, 0x9d, 0x39, 0x68, 0xea, 0x86, 0xd3, 0x52, 0xb7, | 	0x20, 0xdf, 0x67, 0x81, 0x99, 0x29, 0x2c, 0x2d, 0x75, 0xe6, 0xa0, 0xa9, 0x1b, 0x4e, 0x4b, 0xdd, | ||||||
| 	0x08, 0x46, 0xa3, 0x97, 0x8d, 0x4e, 0xc7, 0x3f, 0x44, 0x67, 0xd8, 0x75, 0x6e, 0x28, 0x8f, 0x81, | 	0x22, 0x18, 0x8d, 0x5e, 0x36, 0x3a, 0x1d, 0xff, 0x10, 0x9d, 0x61, 0xd7, 0xb9, 0xa1, 0x3c, 0x06, | ||||||
| 	0x91, 0xd0, 0x8f, 0x7a, 0xcd, 0xee, 0xd2, 0x7f, 0xaa, 0xa0, 0xf0, 0xd4, 0x8f, 0xba, 0x5b, 0xcd, | 	0x46, 0x42, 0x3f, 0xea, 0x35, 0xbb, 0x4b, 0xff, 0xa9, 0x82, 0xc2, 0x33, 0x3f, 0xea, 0x6e, 0x36, | ||||||
| 	0xe6, 0xd3, 0x93, 0x8e, 0x1f, 0xc1, 0xcb, 0x60, 0x32, 0xe8, 0xe0, 0x5e, 0xf3, 0x9a, 0xb5, 0x46, | 	0x9b, 0xcf, 0x4e, 0x3a, 0x7e, 0x04, 0x2f, 0x83, 0xc9, 0xa0, 0x83, 0x7b, 0xcd, 0x6b, 0xd6, 0x1a, | ||||||
| 	0xbb, 0xbb, 0xb1, 0x4e, 0x12, 0x70, 0xc6, 0x9d, 0xe0, 0xd6, 0x1d, 0x6c, 0xd4, 0x61, 0x8e, 0x4d, | 	0xed, 0xee, 0xfa, 0x1a, 0x49, 0xc0, 0x19, 0x77, 0x82, 0x5b, 0xb7, 0xb1, 0x51, 0x87, 0x39, 0x36, | ||||||
| 	0xf6, 0x65, 0x2a, 0x30, 0xc7, 0x86, 0x57, 0xc0, 0x94, 0x80, 0xf5, 0x28, 0x1d, 0xde, 0xd5, 0x84, | 	0xd9, 0x97, 0xa9, 0xc0, 0x1c, 0x1b, 0x5e, 0x01, 0x53, 0x02, 0xd6, 0xa3, 0x74, 0x78, 0x57, 0x13, | ||||||
| 	0x2b, 0x56, 0x1f, 0x10, 0x6b, 0x02, 0xe8, 0xd8, 0x64, 0x57, 0xc3, 0x2a, 0x50, 0x63, 0x8c, 0x28, | 	0xae, 0x58, 0xbd, 0x4f, 0xac, 0x09, 0xa0, 0x63, 0x93, 0x5d, 0x0d, 0xab, 0x40, 0x8d, 0x31, 0xa2, | ||||||
| 	0x23, 0xde, 0xde, 0x74, 0x0c, 0xdc, 0x4f, 0x32, 0x46, 0x94, 0x11, 0xd7, 0x08, 0xaa, 0x40, 0xc7, | 	0x8c, 0x78, 0x7b, 0xd3, 0x31, 0x70, 0x2f, 0xc9, 0x18, 0x51, 0x46, 0x5c, 0x23, 0xa8, 0x02, 0x1d, | ||||||
| 	0x86, 0x57, 0x41, 0x51, 0x00, 0x8f, 0x1a, 0x9f, 0xf0, 0x0f, 0x37, 0xd6, 0xd1, 0xa8, 0x65, 0x94, | 	0x1b, 0x5e, 0x05, 0x45, 0x01, 0x3c, 0x6a, 0x7c, 0xc2, 0x3f, 0x5c, 0x5f, 0x43, 0xa3, 0x96, 0x51, | ||||||
| 	0x46, 0x5d, 0x41, 0x50, 0xa5, 0xe6, 0x24, 0xd4, 0xb1, 0xd1, 0x98, 0x65, 0x94, 0x46, 0x34, 0xa8, | 	0x1a, 0x75, 0x05, 0x41, 0x95, 0x9a, 0x93, 0x50, 0xc7, 0x46, 0x63, 0x96, 0x51, 0x1a, 0xd1, 0xa0, | ||||||
| 	0x63, 0xc3, 0xeb, 0x60, 0x3a, 0x76, 0xcf, 0x69, 0xc7, 0x2d, 0xa3, 0x34, 0xe5, 0x0a, 0x8e, 0x7d, | 	0x8e, 0x0d, 0xaf, 0x83, 0xe9, 0xd8, 0x3d, 0xa7, 0x1d, 0xb7, 0x8c, 0xd2, 0x94, 0x2b, 0x38, 0xf6, | ||||||
| 	0x66, 0x4f, 0x01, 0x3b, 0x36, 0x02, 0x96, 0x51, 0x2a, 0xea, 0x60, 0xc7, 0x56, 0x52, 0x7f, 0xd4, | 	0x98, 0x3d, 0x05, 0xec, 0xd8, 0x08, 0x58, 0x46, 0xa9, 0xa8, 0x83, 0x1d, 0x5b, 0x49, 0xfd, 0x51, | ||||||
| 	0x0c, 0xbc, 0x2e, 0xca, 0x5b, 0x46, 0x29, 0x17, 0xa7, 0xbe, 0x8a, 0x8d, 0xca, 0xfe, 0x0f, 0x83, | 	0x33, 0xf0, 0xba, 0x28, 0x6f, 0x19, 0xa5, 0x5c, 0x9c, 0xfa, 0x2a, 0x36, 0x2a, 0xfb, 0x3f, 0x0c, | ||||||
| 	0xde, 0x8b, 0xa6, 0x8f, 0x0a, 0x96, 0x51, 0x32, 0xe2, 0xfd, 0x3f, 0x20, 0x56, 0xb8, 0x0c, 0xc4, | 	0x7a, 0x07, 0x4d, 0x1f, 0x15, 0x2c, 0xa3, 0x64, 0xc4, 0xfb, 0x7f, 0x48, 0xac, 0x70, 0x19, 0x88, | ||||||
| 	0xca, 0xda, 0x8b, 0x20, 0x68, 0xa2, 0x09, 0xcb, 0x28, 0x8d, 0xb9, 0x05, 0x6e, 0x2c, 0x07, 0x41, | 	0x95, 0xb5, 0x83, 0x20, 0x68, 0xa2, 0x09, 0xcb, 0x28, 0x8d, 0xb9, 0x05, 0x6e, 0x2c, 0x07, 0x41, | ||||||
| 	0x53, 0xcd, 0x66, 0x37, 0x6c, 0xb4, 0x8f, 0xd1, 0x24, 0xee, 0x2a, 0x29, 0x9b, 0xc4, 0xaa, 0x44, | 	0x53, 0xcd, 0x66, 0x37, 0x6c, 0xb4, 0x8f, 0xd1, 0x24, 0xee, 0x2a, 0x29, 0x9b, 0xc4, 0xaa, 0x44, | ||||||
| 	0xf7, 0xe2, 0xa4, 0xeb, 0x47, 0x68, 0x0a, 0xb7, 0x71, 0x1c, 0x5d, 0x19, 0x1b, 0x61, 0x0d, 0x2c, | 	0x77, 0x70, 0xd2, 0xf5, 0x23, 0x34, 0x85, 0xdb, 0x38, 0x8e, 0xae, 0x8c, 0x8d, 0xb0, 0x06, 0x16, | ||||||
| 	0x08, 0x58, 0x9b, 0xde, 0xde, 0x2d, 0x3f, 0x8a, 0xbc, 0x63, 0x1f, 0x41, 0xcb, 0x28, 0xe5, 0xd7, | 	0x04, 0xac, 0x4d, 0x6f, 0xef, 0x96, 0x1f, 0x45, 0xde, 0xb1, 0x8f, 0xa0, 0x65, 0x94, 0xf2, 0x6b, | ||||||
| 	0xaf, 0x28, 0x37, 0xb6, 0xdc, 0xa2, 0x2b, 0xbb, 0x04, 0xff, 0x98, 0xc2, 0xdd, 0x39, 0xce, 0xa3, | 	0x57, 0x94, 0x1b, 0x5b, 0x6e, 0xd1, 0x95, 0x1d, 0x82, 0x7f, 0x42, 0xe1, 0xee, 0x1c, 0xe7, 0x51, | ||||||
| 	0x98, 0xe1, 0x01, 0x40, 0x71, 0x96, 0x82, 0xd0, 0x6f, 0x1c, 0xb7, 0x85, 0x87, 0x19, 0xe2, 0xe1, | 	0xcc, 0x70, 0x1f, 0xa0, 0x38, 0x4b, 0x41, 0xe8, 0x37, 0x8e, 0xdb, 0xc2, 0xc3, 0x0c, 0xf1, 0x70, | ||||||
| 	0x9c, 0xe2, 0xa1, 0x4a, 0x31, 0x9c, 0x75, 0x5e, 0x24, 0x53, 0xb1, 0xc3, 0xf7, 0xc0, 0xac, 0x1e, | 	0x4e, 0xf1, 0x50, 0xa5, 0x18, 0xce, 0x3a, 0x2f, 0x92, 0xa9, 0xd8, 0xe1, 0x7b, 0x60, 0x56, 0x8f, | ||||||
| 	0xb7, 0xdf, 0xee, 0xb5, 0xd0, 0x1c, 0x51, 0xa3, 0x4b, 0xa7, 0x05, 0x5d, 0x69, 0xf7, 0x5a, 0x2e, | 	0xdb, 0x6f, 0xf7, 0x5a, 0x68, 0x8e, 0xa8, 0xd1, 0xa5, 0xd3, 0x82, 0xae, 0xb4, 0x7b, 0x2d, 0x17, | ||||||
| 	0x54, 0x23, 0xc6, 0x36, 0xf8, 0x2e, 0x98, 0x4b, 0x84, 0x4b, 0x88, 0xe7, 0x09, 0x31, 0x4a, 0x8b, | 	0xaa, 0x11, 0x63, 0x1b, 0x7c, 0x17, 0xcc, 0x25, 0xc2, 0x25, 0xc4, 0xf3, 0x84, 0x18, 0xa5, 0xc5, | ||||||
| 	0x95, 0x90, 0xcd, 0x68, 0x81, 0x12, 0x36, 0x47, 0x62, 0xa3, 0xd5, 0xaa, 0x75, 0x1a, 0x7e, 0xdd, | 	0x4a, 0xc8, 0x66, 0xb4, 0x40, 0x09, 0x9b, 0x23, 0xb1, 0xd1, 0x6a, 0xd5, 0x3a, 0x0d, 0xbf, 0xee, | ||||||
| 	0x47, 0x08, 0xd7, 0xac, 0x9c, 0x1b, 0xcb, 0xc5, 0xeb, 0x68, 0xdd, 0x9e, 0xe0, 0xcb, 0xf0, 0x8a, | 	0x23, 0x84, 0x6b, 0x56, 0xce, 0x8d, 0xe5, 0xe2, 0x75, 0xb4, 0x6e, 0x4f, 0xf1, 0x65, 0x78, 0x45, | ||||||
| 	0xd4, 0x0a, 0xf5, 0x20, 0x3c, 0x44, 0x67, 0x19, 0xde, 0x88, 0xdb, 0xe1, 0x7e, 0x10, 0x1e, 0xc2, | 	0x6a, 0x85, 0x7a, 0x10, 0x1e, 0xa2, 0xb3, 0x0c, 0x6f, 0xc4, 0xed, 0xf0, 0x20, 0x08, 0x0f, 0x61, | ||||||
| 	0x2a, 0x98, 0x0e, 0xfd, 0x7a, 0x2f, 0x8c, 0x1a, 0xaf, 0x7c, 0x91, 0xd6, 0x73, 0x24, 0xad, 0x67, | 	0x15, 0x4c, 0x87, 0x7e, 0xbd, 0x17, 0x46, 0x8d, 0x57, 0xbe, 0x48, 0xeb, 0x39, 0x92, 0xd6, 0xb3, | ||||||
| 	0x33, 0x73, 0xe0, 0x16, 0xc5, 0x1a, 0x9e, 0xce, 0xcb, 0x60, 0x32, 0xf4, 0x3b, 0xbe, 0x87, 0xf3, | 	0x99, 0x39, 0x70, 0x8b, 0x62, 0x0d, 0x4f, 0xe7, 0x65, 0x30, 0x19, 0xfa, 0x1d, 0xdf, 0xc3, 0x79, | ||||||
| 	0x48, 0x6f, 0xe6, 0x0b, 0x96, 0x89, 0xd5, 0x86, 0x5b, 0x85, 0xda, 0xc8, 0x30, 0xc7, 0x46, 0x96, | 	0xa4, 0x37, 0xf3, 0x05, 0xcb, 0xc4, 0x6a, 0xc3, 0xad, 0x42, 0x6d, 0x64, 0x98, 0x63, 0x23, 0xcb, | ||||||
| 	0x65, 0x62, 0xb5, 0x91, 0x60, 0x54, 0x1b, 0x04, 0x8c, 0xa9, 0xcd, 0x45, 0xcb, 0xc4, 0x6a, 0xc3, | 	0x32, 0xb1, 0xda, 0x48, 0x30, 0xaa, 0x0d, 0x02, 0xc6, 0xd4, 0xe6, 0xa2, 0x65, 0x62, 0xb5, 0xe1, | ||||||
| 	0xcd, 0xb1, 0xda, 0x28, 0x40, 0xc7, 0x46, 0x4b, 0x96, 0x89, 0xd5, 0x46, 0x06, 0x6a, 0x8c, 0x4c, | 	0xe6, 0x58, 0x6d, 0x14, 0xa0, 0x63, 0xa3, 0x25, 0xcb, 0xc4, 0x6a, 0x23, 0x03, 0x35, 0x46, 0xa6, | ||||||
| 	0x6d, 0x96, 0x2d, 0x13, 0xab, 0x0d, 0x37, 0xef, 0x27, 0x19, 0x99, 0xda, 0x5c, 0xb2, 0x4c, 0xac, | 	0x36, 0xcb, 0x96, 0x89, 0xd5, 0x86, 0x9b, 0xf7, 0x92, 0x8c, 0x4c, 0x6d, 0x2e, 0x59, 0x26, 0x56, | ||||||
| 	0x36, 0x32, 0x90, 0xaa, 0x8d, 0x00, 0x72, 0x59, 0xb8, 0x6c, 0x99, 0x58, 0x6d, 0xb8, 0x5d, 0x52, | 	0x1b, 0x19, 0x48, 0xd5, 0x46, 0x00, 0xb9, 0x2c, 0x5c, 0xb6, 0x4c, 0xac, 0x36, 0xdc, 0x2e, 0xa9, | ||||||
| 	0x1b, 0x15, 0xea, 0xd8, 0xe8, 0xff, 0x2c, 0x13, 0xab, 0x8d, 0x02, 0xa5, 0x6a, 0x13, 0xbb, 0xe7, | 	0x8d, 0x0a, 0x75, 0x6c, 0xf4, 0x7f, 0x96, 0x89, 0xd5, 0x46, 0x81, 0x52, 0xb5, 0x89, 0xdd, 0x73, | ||||||
| 	0xb4, 0x57, 0x2c, 0x13, 0xab, 0x8d, 0x08, 0x40, 0x52, 0x1b, 0x0d, 0xec, 0xd8, 0xa8, 0x64, 0x99, | 	0xda, 0x2b, 0x96, 0x89, 0xd5, 0x46, 0x04, 0x20, 0xa9, 0x8d, 0x06, 0x76, 0x6c, 0x54, 0xb2, 0x4c, | ||||||
| 	0x58, 0x6d, 0x54, 0x30, 0x55, 0x9b, 0x38, 0x08, 0xa2, 0x36, 0x57, 0x2d, 0x13, 0xab, 0x8d, 0x08, | 	0xac, 0x36, 0x2a, 0x98, 0xaa, 0x4d, 0x1c, 0x04, 0x51, 0x9b, 0xab, 0x96, 0x89, 0xd5, 0x46, 0x84, | ||||||
| 	0x81, 0xab, 0x8d, 0x80, 0x31, 0xb5, 0xb9, 0x66, 0x99, 0x58, 0x6d, 0xb8, 0x39, 0x56, 0x1b, 0x01, | 	0xc0, 0xd5, 0x46, 0xc0, 0x98, 0xda, 0x5c, 0xb3, 0x4c, 0xac, 0x36, 0xdc, 0x1c, 0xab, 0x8d, 0x00, | ||||||
| 	0x24, 0x6a, 0x73, 0xdd, 0x32, 0xb1, 0xda, 0x70, 0x23, 0x57, 0x9b, 0x38, 0x42, 0xaa, 0x36, 0x6f, | 	0x12, 0xb5, 0xb9, 0x6e, 0x99, 0x58, 0x6d, 0xb8, 0x91, 0xab, 0x4d, 0x1c, 0x21, 0x55, 0x9b, 0x37, | ||||||
| 	0x5a, 0x26, 0x56, 0x1b, 0x11, 0x9f, 0x50, 0x9b, 0x98, 0x8d, 0xa8, 0xcd, 0x5b, 0x96, 0x89, 0xd5, | 	0x2d, 0x13, 0xab, 0x8d, 0x88, 0x4f, 0xa8, 0x4d, 0xcc, 0x46, 0xd4, 0xe6, 0x2d, 0xcb, 0xc4, 0x6a, | ||||||
| 	0x46, 0xd0, 0x71, 0xb5, 0x11, 0x30, 0x4d, 0x6d, 0x56, 0x2d, 0xf3, 0xb5, 0xd4, 0x86, 0xf3, 0x24, | 	0x23, 0xe8, 0xb8, 0xda, 0x08, 0x98, 0xa6, 0x36, 0x37, 0x2d, 0xf3, 0xb5, 0xd4, 0x86, 0xf3, 0x24, | ||||||
| 	0xd4, 0x26, 0xce, 0x92, 0xa6, 0x36, 0x6b, 0xc4, 0x43, 0x7f, 0xb5, 0x11, 0xc9, 0x4c, 0xa8, 0x8d, | 	0xd4, 0x26, 0xce, 0x92, 0xa6, 0x36, 0xab, 0xc4, 0x43, 0x7f, 0xb5, 0x11, 0xc9, 0x4c, 0xa8, 0x8d, | ||||||
| 	0x1e, 0x37, 0x11, 0x85, 0x0d, 0xcb, 0x1c, 0x5c, 0x6d, 0xd4, 0x88, 0xb9, 0xda, 0x24, 0xc2, 0x25, | 	0x1e, 0x37, 0x11, 0x85, 0x75, 0xcb, 0x1c, 0x5c, 0x6d, 0xd4, 0x88, 0xb9, 0xda, 0x24, 0xc2, 0x25, | ||||||
| 	0xc4, 0x36, 0x21, 0xee, 0xa3, 0x36, 0x5a, 0xa0, 0x5c, 0x6d, 0xb4, 0x6a, 0x31, 0xb5, 0x71, 0x70, | 	0xc4, 0x36, 0x21, 0xee, 0xa3, 0x36, 0x5a, 0xa0, 0x5c, 0x6d, 0xb4, 0x6a, 0x31, 0xb5, 0x71, 0x70, | ||||||
| 	0xcd, 0xa8, 0xda, 0xa8, 0x75, 0x13, 0x6a, 0x23, 0xd6, 0x11, 0xb5, 0xb9, 0xc5, 0xf0, 0x46, 0xdc, | 	0xcd, 0xa8, 0xda, 0xa8, 0x75, 0x13, 0x6a, 0x23, 0xd6, 0x11, 0xb5, 0xb9, 0xcd, 0xf0, 0x46, 0xdc, | ||||||
| 	0x0e, 0x44, 0x6d, 0x9e, 0x82, 0xa9, 0x96, 0xd7, 0xa1, 0x02, 0xc1, 0x64, 0x62, 0x93, 0x24, 0xf5, | 	0x0e, 0x44, 0x6d, 0x9e, 0x81, 0xa9, 0x96, 0xd7, 0xa1, 0x02, 0xc1, 0x64, 0x62, 0x83, 0x24, 0xf5, | ||||||
| 	0xcd, 0xec, 0x0c, 0x3c, 0xf6, 0x3a, 0x44, 0x3b, 0xc8, 0x47, 0xa5, 0xdd, 0x0d, 0x4f, 0xdc, 0x89, | 	0xcd, 0xec, 0x0c, 0x3c, 0xf1, 0x3a, 0x44, 0x3b, 0xc8, 0x47, 0xa5, 0xdd, 0x0d, 0x4f, 0xdc, 0x89, | ||||||
| 	0x96, 0x6c, 0x93, 0x58, 0x1d, 0x9b, 0xa9, 0xca, 0xed, 0xc1, 0x58, 0x1d, 0x9b, 0x7c, 0x28, 0xac, | 	0x96, 0x6c, 0x93, 0x58, 0x1d, 0x9b, 0xa9, 0xca, 0x9d, 0xc1, 0x58, 0x1d, 0x9b, 0x7c, 0x28, 0xac, | ||||||
| 	0xcc, 0x06, 0x9f, 0x83, 0x69, 0xcc, 0x4a, 0xe5, 0x87, 0xab, 0xd0, 0x1d, 0xc2, 0xbb, 0xd2, 0x97, | 	0xcc, 0x06, 0x5f, 0x80, 0x69, 0xcc, 0x4a, 0xe5, 0x87, 0xab, 0xd0, 0x5d, 0xc2, 0xbb, 0xd2, 0x97, | ||||||
| 	0x97, 0x4a, 0x13, 0xfd, 0xa4, 0xcc, 0x38, 0x3c, 0xd9, 0x2a, 0x73, 0x3b, 0x36, 0x17, 0xae, 0xb7, | 	0x97, 0x4a, 0x13, 0xfd, 0xa4, 0xcc, 0x38, 0x3c, 0xd9, 0x2a, 0x73, 0x3b, 0x36, 0x17, 0xae, 0xb7, | ||||||
| 	0x07, 0xe4, 0x76, 0x6c, 0xfa, 0xa9, 0x72, 0x73, 0x2b, 0xe7, 0xa6, 0x22, 0xc7, 0xb5, 0xee, 0xff, | 	0x07, 0xe4, 0x76, 0x6c, 0xfa, 0xa9, 0x72, 0x73, 0x2b, 0xe7, 0xa6, 0x22, 0xc7, 0xb5, 0xee, 0xff, | ||||||
| 	0x07, 0xe0, 0xa6, 0x02, 0xb8, 0xaf, 0xc5, 0x2d, 0x5b, 0x65, 0x6e, 0xc7, 0xe6, 0xf2, 0xf8, 0xce, | 	0x07, 0xe0, 0xa6, 0x02, 0xb8, 0xa7, 0xc5, 0x2d, 0x5b, 0x65, 0x6e, 0xc7, 0xe6, 0xf2, 0xf8, 0xce, | ||||||
| 	0x80, 0xdc, 0x8e, 0xbd, 0xaf, 0xc5, 0x2d, 0x5b, 0xe1, 0xc7, 0xc1, 0x0c, 0xe6, 0x66, 0xda, 0x26, | 	0x80, 0xdc, 0x8e, 0xbd, 0xa7, 0xc5, 0x2d, 0x5b, 0xe1, 0xc7, 0xc1, 0x0c, 0xe6, 0x66, 0xda, 0x26, | ||||||
| 	0x24, 0xf5, 0x2e, 0x61, 0x5f, 0xed, 0xcb, 0xce, 0x74, 0x96, 0xfd, 0xa0, 0xfc, 0x38, 0x50, 0xd5, | 	0x24, 0xf5, 0x1e, 0x61, 0xbf, 0xd9, 0x97, 0x9d, 0xe9, 0x2c, 0xfb, 0x41, 0xf9, 0x71, 0xa0, 0xaa, | ||||||
| 	0xae, 0x78, 0x70, 0x6c, 0xa1, 0xc4, 0x1f, 0x19, 0xd4, 0x83, 0x63, 0xb3, 0x1f, 0x9a, 0x07, 0x61, | 	0x5d, 0xf1, 0xe0, 0xd8, 0x42, 0x89, 0x3f, 0x32, 0xa8, 0x07, 0xc7, 0x66, 0x3f, 0x34, 0x0f, 0xc2, | ||||||
| 	0x87, 0x47, 0x60, 0x8e, 0xe4, 0x87, 0x6f, 0x42, 0x28, 0xf8, 0x3d, 0xe2, 0x63, 0xbd, 0x7f, 0x8e, | 	0x0e, 0x8f, 0xc0, 0x1c, 0xc9, 0x0f, 0xdf, 0x84, 0x50, 0xf0, 0xfb, 0xc4, 0xc7, 0x5a, 0xff, 0x1c, | ||||||
| 	0x18, 0x98, 0xff, 0xa4, 0x5e, 0x70, 0xc8, 0xfa, 0x15, 0xd5, 0x0f, 0xae, 0x04, 0xdf, 0xcb, 0xd6, | 	0x31, 0x30, 0xff, 0x49, 0xbd, 0xe0, 0x90, 0xf5, 0x2b, 0xaa, 0x1f, 0x5c, 0x09, 0xbe, 0x97, 0xcd, | ||||||
| 	0xc0, 0x7e, 0x1c, 0x9b, 0xff, 0xd4, 0xfd, 0xc4, 0x57, 0xd4, 0xfb, 0x95, 0x1e, 0x1a, 0xe5, 0x41, | 	0x81, 0xfd, 0x38, 0x36, 0xff, 0xa9, 0xfb, 0x89, 0xaf, 0xa8, 0xf7, 0x2b, 0x3d, 0x34, 0xca, 0x83, | ||||||
| 	0xef, 0x57, 0x72, 0x9c, 0x68, 0xf7, 0x2b, 0x3d, 0x62, 0x9e, 0x81, 0x62, 0xcc, 0xca, 0xce, 0x98, | 	0xde, 0xaf, 0xe4, 0x38, 0xd1, 0xee, 0x57, 0x7a, 0xc4, 0x3c, 0x07, 0xc5, 0x98, 0x95, 0x9d, 0x31, | ||||||
| 	0xfb, 0x84, 0xf6, 0xad, 0xd3, 0x69, 0xe9, 0xe9, 0x43, 0x79, 0x27, 0x5b, 0x8a, 0x11, 0xee, 0x02, | 	0x0f, 0x08, 0xed, 0x5b, 0xa7, 0xd3, 0xd2, 0xd3, 0x87, 0xf2, 0x4e, 0xb6, 0x14, 0x23, 0xdc, 0x01, | ||||||
| 	0xec, 0x89, 0x9c, 0x46, 0xf4, 0x48, 0x7a, 0x40, 0x58, 0xaf, 0xf5, 0x65, 0xc5, 0xe7, 0x14, 0xfe, | 	0xd8, 0x13, 0x39, 0x8d, 0xe8, 0x91, 0xf4, 0x90, 0xb0, 0x5e, 0xeb, 0xcb, 0x8a, 0xcf, 0x29, 0xfc, | ||||||
| 	0x9f, 0x52, 0xe6, 0x5b, 0xb1, 0x45, 0xb4, 0x3b, 0x95, 0x42, 0x76, 0x7e, 0x55, 0x06, 0x69, 0x77, | 	0x3f, 0xa5, 0xcc, 0xb7, 0x62, 0x8b, 0x68, 0x77, 0x2a, 0x85, 0xec, 0xfc, 0xaa, 0x0c, 0xd2, 0xee, | ||||||
| 	0x02, 0xa5, 0x9f, 0x52, 0xbb, 0x4b, 0x56, 0x9e, 0x04, 0xc6, 0x4d, 0x8f, 0xbc, 0xea, 0x00, 0x49, | 	0x04, 0x4a, 0x3f, 0xa5, 0x76, 0x97, 0xac, 0x3c, 0x09, 0x8c, 0x9b, 0x1e, 0x79, 0xd5, 0x01, 0x92, | ||||||
| 	0xa0, 0xcb, 0xc9, 0x69, 0x18, 0x27, 0x41, 0x32, 0xc2, 0x0e, 0x38, 0x2b, 0x11, 0x6b, 0x87, 0xe4, | 	0x40, 0x97, 0x93, 0xd3, 0x30, 0x4e, 0x82, 0x64, 0x84, 0x1d, 0x70, 0x56, 0x22, 0xd6, 0x0e, 0xc9, | ||||||
| 	0x43, 0xe2, 0xe1, 0xe6, 0x00, 0x1e, 0x94, 0x63, 0x91, 0x7a, 0x9a, 0x6f, 0xa5, 0x5e, 0x84, 0x11, | 	0x47, 0xc4, 0xc3, 0xad, 0x01, 0x3c, 0x28, 0xc7, 0x22, 0xf5, 0x34, 0xdf, 0x4a, 0xbd, 0x08, 0x23, | ||||||
| 	0x58, 0x94, 0x3c, 0xea, 0xa7, 0xe6, 0x36, 0x71, 0xe9, 0x0c, 0xe0, 0x52, 0x3d, 0x33, 0xa9, 0xcf, | 	0xb0, 0x28, 0x79, 0xd4, 0x4f, 0xcd, 0x2d, 0xe2, 0xd2, 0x19, 0xc0, 0xa5, 0x7a, 0x66, 0x52, 0x9f, | ||||||
| 	0x85, 0x56, 0xfa, 0x55, 0x78, 0x0c, 0xe6, 0x93, 0xdb, 0x24, 0x47, 0xdf, 0xce, 0x20, 0xf7, 0x80, | 	0x0b, 0xad, 0xf4, 0xab, 0xf0, 0x18, 0xcc, 0x27, 0xb7, 0x49, 0x8e, 0xbe, 0xed, 0x41, 0xee, 0x01, | ||||||
| 	0xb4, 0x0d, 0x7c, 0xf4, 0x49, 0xf7, 0x80, 0x76, 0x05, 0xbe, 0x0f, 0x16, 0x52, 0x76, 0x47, 0x3c, | 	0x69, 0x1b, 0xf8, 0xe8, 0x93, 0xee, 0x01, 0xed, 0x0a, 0x7c, 0x1f, 0x2c, 0xa4, 0xec, 0x8e, 0x78, | ||||||
| 	0x3d, 0x22, 0x9e, 0x36, 0x06, 0xdf, 0x5a, 0xec, 0x6a, 0xb6, 0x95, 0x72, 0x09, 0x2e, 0x83, 0x42, | 	0x7a, 0x4c, 0x3c, 0xad, 0x0f, 0xbe, 0xb5, 0xd8, 0xd5, 0x6c, 0x2b, 0xe5, 0x12, 0x5c, 0x06, 0x85, | ||||||
| 	0xd0, 0xf6, 0x83, 0x23, 0x7e, 0xdc, 0x04, 0xf8, 0x11, 0x7b, 0x7b, 0xc8, 0xcd, 0x13, 0x2b, 0x3b, | 	0xa0, 0xed, 0x07, 0x47, 0xfc, 0xb8, 0x09, 0xf0, 0x23, 0xf6, 0xd6, 0x90, 0x9b, 0x27, 0x56, 0x76, | ||||||
| 	0x3c, 0x3e, 0x06, 0x66, 0x29, 0x48, 0xab, 0x6d, 0xe7, 0xb5, 0x1e, 0xb7, 0xb6, 0x87, 0x5c, 0x48, | 	0x78, 0x7c, 0x0c, 0xcc, 0x52, 0x90, 0x56, 0xdb, 0xce, 0x6b, 0x3d, 0x6e, 0x6d, 0x0d, 0xb9, 0x90, | ||||||
| 	0x68, 0xd4, 0x5a, 0x8a, 0x08, 0x58, 0xb7, 0x7f, 0xc0, 0x27, 0x12, 0xc4, 0xca, 0x7a, 0xf7, 0x22, | 	0xd0, 0xa8, 0xb5, 0x14, 0x11, 0xb0, 0x6e, 0xff, 0x80, 0x4f, 0x24, 0x88, 0x95, 0xf5, 0xee, 0x45, | ||||||
| 	0xa0, 0x5f, 0x59, 0xdb, 0x86, 0x6c, 0xbc, 0x01, 0x88, 0x91, 0x76, 0xe1, 0x05, 0x00, 0x18, 0x04, | 	0x40, 0xbf, 0xb2, 0xb6, 0x0d, 0xd9, 0x78, 0x03, 0x10, 0x23, 0xed, 0xc2, 0x0b, 0x00, 0x30, 0x08, | ||||||
| 	0xdf, 0x87, 0x11, 0x7e, 0x10, 0xdd, 0x1e, 0x72, 0xc7, 0x29, 0x02, 0xdf, 0x5b, 0xca, 0x56, 0x1d, | 	0xbe, 0x0f, 0x23, 0xfc, 0x20, 0xba, 0x35, 0xe4, 0x8e, 0x53, 0x04, 0xbe, 0xb7, 0x94, 0xad, 0x3a, | ||||||
| 	0x1b, 0x75, 0x2d, 0xa3, 0x34, 0xac, 0x6c, 0xd5, 0xb1, 0x63, 0x47, 0x54, 0x7b, 0x7a, 0xf8, 0xf1, | 	0x36, 0xea, 0x5a, 0x46, 0x69, 0x58, 0xd9, 0xaa, 0x63, 0xc7, 0x8e, 0xa8, 0xf6, 0xf4, 0xf0, 0xe3, | ||||||
| 	0x58, 0x38, 0xa2, 0x62, 0x22, 0x78, 0x98, 0x90, 0xbc, 0xc2, 0x8f, 0xc6, 0x82, 0x87, 0x09, 0x43, | 	0xb1, 0x70, 0x44, 0xc5, 0x44, 0xf0, 0x30, 0x21, 0x79, 0x85, 0x1f, 0x8d, 0x05, 0x0f, 0x13, 0x86, | ||||||
| 	0x85, 0x47, 0x43, 0xca, 0xf6, 0xe1, 0xe0, 0x8f, 0x78, 0x22, 0x66, 0x52, 0x9e, 0x3d, 0xe9, 0x69, | 	0x0a, 0x8f, 0x86, 0x94, 0xed, 0xc3, 0xc1, 0x1f, 0xf1, 0x44, 0xcc, 0xa4, 0x3c, 0xbb, 0xd2, 0xd3, | ||||||
| 	0x8c, 0x88, 0x0c, 0x9b, 0xa6, 0xa1, 0x5f, 0x19, 0x24, 0xf7, 0x8b, 0x2b, 0x74, 0xdc, 0xb6, 0xc2, | 	0x18, 0x11, 0x19, 0x36, 0x4d, 0x43, 0xbf, 0x32, 0x48, 0xee, 0x17, 0x57, 0xe8, 0xb8, 0x6d, 0x85, | ||||||
| 	0xe7, 0x3c, 0x2b, 0x78, 0xab, 0xef, 0x79, 0xcd, 0x9e, 0x1f, 0x3f, 0xa6, 0x61, 0xd3, 0x33, 0xba, | 	0xcf, 0x79, 0x56, 0xf0, 0x56, 0xdf, 0xf3, 0x9a, 0x3d, 0x3f, 0x7e, 0x4c, 0xc3, 0xa6, 0xe7, 0x74, | ||||||
| 	0x0e, 0xba, 0x60, 0x5e, 0x9d, 0xd1, 0x08, 0xc6, 0x5f, 0x1b, 0xec, 0xd1, 0x56, 0x67, 0x24, 0x7a, | 	0x1d, 0x74, 0xc1, 0xbc, 0x3a, 0xa3, 0x11, 0x8c, 0xbf, 0x36, 0xd8, 0xa3, 0xad, 0xce, 0x48, 0xf4, | ||||||
| 	0x47, 0x29, 0x67, 0x95, 0x49, 0x4e, 0x06, 0xa7, 0x63, 0x0b, 0xce, 0xdf, 0xf4, 0xe1, 0x74, 0xec, | 	0x8e, 0x52, 0xce, 0x2a, 0x93, 0x9c, 0x0c, 0x4e, 0xc7, 0x16, 0x9c, 0xbf, 0xe9, 0xc3, 0xe9, 0xd8, | ||||||
| 	0x24, 0xa7, 0x63, 0x73, 0xce, 0x03, 0xe9, 0x21, 0xbf, 0xa7, 0x06, 0xfa, 0x5b, 0x4a, 0x7a, 0x3e, | 	0x49, 0x4e, 0xc7, 0xe6, 0x9c, 0xfb, 0xd2, 0x43, 0x7e, 0x4f, 0x0d, 0xf4, 0xb7, 0x94, 0xf4, 0x7c, | ||||||
| 	0x41, 0x7a, 0x20, 0x45, 0x3a, 0xa7, 0x0e, 0x89, 0xb2, 0x68, 0xa5, 0x58, 0x7f, 0xd7, 0x8f, 0x96, | 	0x82, 0x74, 0x5f, 0x8a, 0x74, 0x4e, 0x1d, 0x12, 0x65, 0xd1, 0x4a, 0xb1, 0xfe, 0xae, 0x1f, 0x2d, | ||||||
| 	0x07, 0x3b, 0xa7, 0x8e, 0x94, 0xd2, 0x32, 0x40, 0x1a, 0x47, 0xb0, 0xfe, 0x3e, 0x2b, 0x03, 0xa4, | 	0x0f, 0x76, 0x4e, 0x1d, 0x29, 0xa5, 0x65, 0x80, 0x34, 0x8e, 0x60, 0xfd, 0x7d, 0x56, 0x06, 0x48, | ||||||
| 	0x97, 0xb4, 0x0c, 0x10, 0x5b, 0x5a, 0xa8, 0xb4, 0xd3, 0x04, 0xe9, 0x1f, 0xb2, 0x42, 0xa5, 0xcd, | 	0x2f, 0x69, 0x19, 0x20, 0xb6, 0xb4, 0x50, 0x69, 0xa7, 0x09, 0xd2, 0x3f, 0x64, 0x85, 0x4a, 0x9b, | ||||||
| 	0xa7, 0x85, 0x4a, 0x8d, 0x69, 0xb4, 0x4c, 0x61, 0x38, 0xed, 0x1f, 0xb3, 0x68, 0xe9, 0x4d, 0xa8, | 	0x4f, 0x0b, 0x95, 0x1a, 0xd3, 0x68, 0x99, 0xc2, 0x70, 0xda, 0x3f, 0x66, 0xd1, 0xd2, 0x9b, 0x50, | ||||||
| 	0xd1, 0x52, 0x63, 0x5a, 0x06, 0xc8, 0x3d, 0x2a, 0x58, 0xff, 0x94, 0x95, 0x01, 0x72, 0xdb, 0x6a, | 	0xa3, 0xa5, 0xc6, 0xb4, 0x0c, 0x90, 0x7b, 0x54, 0xb0, 0xfe, 0x29, 0x2b, 0x03, 0xe4, 0xb6, 0xd5, | ||||||
| 	0x19, 0x20, 0x36, 0xce, 0xb9, 0x27, 0x3d, 0x1c, 0x28, 0xcd, 0xff, 0x67, 0x83, 0xc8, 0x60, 0xdf, | 	0x32, 0x40, 0x6c, 0x9c, 0x73, 0x57, 0x7a, 0x38, 0x50, 0x9a, 0xff, 0xcf, 0x06, 0x91, 0xc1, 0xbe, | ||||||
| 	0xe6, 0x97, 0x1f, 0x0a, 0xa5, 0x20, 0xd5, 0x91, 0x81, 0x60, 0xfc, 0x8b, 0xc1, 0x9e, 0xb4, 0xfa, | 	0xcd, 0x2f, 0x3f, 0x14, 0x4a, 0x41, 0xaa, 0x23, 0x03, 0xc1, 0xf8, 0x17, 0x83, 0x3d, 0x69, 0xf5, | ||||||
| 	0x35, 0xbf, 0x32, 0x58, 0xc8, 0xe0, 0x94, 0x1a, 0xea, 0xaf, 0x7d, 0x38, 0x45, 0xf3, 0x2b, 0x53, | 	0x6b, 0x7e, 0x65, 0xb0, 0x90, 0xc1, 0x29, 0x35, 0xd4, 0x5f, 0xfb, 0x70, 0x8a, 0xe6, 0x57, 0xa6, | ||||||
| 	0x08, 0xa9, 0x46, 0xda, 0x30, 0x42, 0x90, 0xfe, 0x8d, 0x92, 0x9e, 0xd2, 0xfc, 0xea, 0xcc, 0x22, | 	0x10, 0x52, 0x8d, 0xb4, 0x61, 0x84, 0x20, 0xfd, 0x1b, 0x25, 0x3d, 0xa5, 0xf9, 0xd5, 0x99, 0x45, | ||||||
| 	0x8b, 0x56, 0x8a, 0xf5, 0xef, 0xfd, 0x68, 0x45, 0xf3, 0xab, 0x13, 0x8e, 0xb4, 0x0c, 0xa8, 0xcd, | 	0x16, 0xad, 0x14, 0xeb, 0xdf, 0xfb, 0xd1, 0x8a, 0xe6, 0x57, 0x27, 0x1c, 0x69, 0x19, 0x50, 0x9b, | ||||||
| 	0xff, 0x8f, 0xac, 0x0c, 0xc8, 0xcd, 0xaf, 0x0c, 0x03, 0xd2, 0x42, 0xd5, 0x9a, 0xff, 0x9f, 0x59, | 	0xff, 0x1f, 0x59, 0x19, 0x90, 0x9b, 0x5f, 0x19, 0x06, 0xa4, 0x85, 0xaa, 0x35, 0xff, 0x3f, 0xb3, | ||||||
| 	0xa1, 0x2a, 0xcd, 0xaf, 0x8e, 0x0e, 0xd2, 0x68, 0xb5, 0xe6, 0xff, 0x57, 0x16, 0xad, 0xd2, 0xfc, | 	0x42, 0x55, 0x9a, 0x5f, 0x1d, 0x1d, 0xa4, 0xd1, 0x6a, 0xcd, 0xff, 0xaf, 0x2c, 0x5a, 0xa5, 0xf9, | ||||||
| 	0xea, 0xb3, 0x68, 0x5a, 0x06, 0xd4, 0xe6, 0xff, 0x77, 0x56, 0x06, 0xe4, 0xe6, 0x57, 0x06, 0x0e, | 	0xd5, 0x67, 0xd1, 0xb4, 0x0c, 0xa8, 0xcd, 0xff, 0xef, 0xac, 0x0c, 0xc8, 0xcd, 0xaf, 0x0c, 0x1c, | ||||||
| 	0x9c, 0xf3, 0xa1, 0x34, 0xd7, 0xe5, 0xef, 0x70, 0xd0, 0x77, 0x73, 0x6c, 0x4e, 0x96, 0xd8, 0x3b, | 	0x38, 0xe7, 0x23, 0x69, 0xae, 0xcb, 0xdf, 0xe1, 0xa0, 0xef, 0xe6, 0xd8, 0x9c, 0x2c, 0xb1, 0x77, | ||||||
| 	0x43, 0xc4, 0x33, 0x5f, 0x6e, 0x81, 0x8f, 0x80, 0x18, 0x1a, 0xd6, 0xc4, 0xcb, 0x1a, 0xf4, 0xbd, | 	0x86, 0x88, 0x67, 0xbe, 0xdc, 0x02, 0x1f, 0x03, 0x31, 0x34, 0xac, 0x89, 0x97, 0x35, 0xe8, 0x7b, | ||||||
| 	0x5c, 0xc6, 0xf9, 0xf1, 0x94, 0x43, 0x5c, 0xe1, 0x5f, 0x98, 0xe0, 0x47, 0xc1, 0x8c, 0x34, 0xc4, | 	0xb9, 0x8c, 0xf3, 0xe3, 0x19, 0x87, 0xb8, 0xc2, 0xbf, 0x30, 0xc1, 0x8f, 0x82, 0x19, 0x69, 0x88, | ||||||
| 	0xe6, 0x2f, 0x8e, 0xd0, 0xf7, 0xb3, 0xc8, 0xaa, 0x18, 0xf3, 0xd8, 0x8b, 0x5e, 0xc6, 0x64, 0xc2, | 	0xcd, 0x5f, 0x1c, 0xa1, 0xef, 0x67, 0x91, 0x55, 0x31, 0xe6, 0x89, 0x17, 0xbd, 0x8c, 0xc9, 0x84, | ||||||
| 	0x04, 0xb7, 0xd4, 0xb9, 0x70, 0xaf, 0xde, 0x45, 0x3f, 0xa0, 0x44, 0x0b, 0x69, 0x45, 0xe8, 0xd5, | 	0x09, 0x6e, 0xaa, 0x73, 0xe1, 0x5e, 0xbd, 0x8b, 0x7e, 0x40, 0x89, 0x16, 0xd2, 0x8a, 0xd0, 0xab, | ||||||
| 	0xbb, 0xca, 0xc4, 0xb8, 0x57, 0xef, 0xc2, 0x4d, 0x20, 0x66, 0x8b, 0x35, 0xaf, 0x7d, 0x82, 0x7e, | 	0x77, 0x95, 0x89, 0x71, 0xaf, 0xde, 0x85, 0x1b, 0x40, 0xcc, 0x16, 0x6b, 0x5e, 0xfb, 0x04, 0xfd, | ||||||
| 	0x48, 0xd7, 0xcf, 0x26, 0xd6, 0x6f, 0xb5, 0x4f, 0xdc, 0x3c, 0x87, 0x6e, 0xb5, 0x4f, 0xe0, 0x5d, | 	0x90, 0xae, 0x9f, 0x4d, 0xac, 0xdf, 0x6c, 0x9f, 0xb8, 0x79, 0x0e, 0xdd, 0x6c, 0x9f, 0xc0, 0x7b, | ||||||
| 	0x69, 0xd6, 0xfc, 0x0a, 0x97, 0x01, 0xfd, 0x88, 0xae, 0x9d, 0x4f, 0xac, 0xa5, 0x55, 0x12, 0xd3, | 	0xd2, 0xac, 0xf9, 0x15, 0x2e, 0x03, 0xfa, 0x11, 0x5d, 0x3b, 0x9f, 0x58, 0x4b, 0xab, 0x24, 0xa6, | ||||||
| 	0x4d, 0xf2, 0x15, 0x97, 0x27, 0x6e, 0x50, 0x5e, 0x9e, 0x1f, 0xe7, 0x48, 0xb5, 0xfb, 0x95, 0x47, | 	0x9b, 0xe4, 0x2b, 0x2e, 0x4f, 0xdc, 0xa0, 0xbc, 0x3c, 0x3f, 0xce, 0x91, 0x6a, 0xf7, 0x2b, 0x8f, | ||||||
| 	0xf4, 0xa5, 0x54, 0x1e, 0x41, 0x14, 0x97, 0xe7, 0x27, 0xb9, 0x0c, 0x85, 0x93, 0xca, 0xc3, 0x97, | 	0xe8, 0x4b, 0xa9, 0x3c, 0x82, 0x28, 0x2e, 0xcf, 0x4f, 0x72, 0x19, 0x0a, 0x27, 0x95, 0x87, 0x2f, | ||||||
| 	0xc5, 0xe5, 0x91, 0xb9, 0x48, 0x79, 0x48, 0x75, 0x7e, 0x9a, 0xc5, 0x25, 0x55, 0x27, 0x1e, 0x0a, | 	0x8b, 0xcb, 0x23, 0x73, 0x91, 0xf2, 0x90, 0xea, 0xfc, 0x34, 0x8b, 0x4b, 0xaa, 0x4e, 0x3c, 0x14, | ||||||
| 	0xb2, 0x55, 0xb8, 0x3a, 0xf2, 0xad, 0x82, 0xab, 0xf3, 0x4b, 0x4a, 0x94, 0x5d, 0x1d, 0xe9, 0xee, | 	0x64, 0xab, 0x70, 0x75, 0xe4, 0x5b, 0x05, 0x57, 0xe7, 0x97, 0x94, 0x28, 0xbb, 0x3a, 0xd2, 0xdd, | ||||||
| 	0x60, 0xd5, 0x11, 0x14, 0xb8, 0x3a, 0x3f, 0xa3, 0xeb, 0x33, 0xaa, 0xc3, 0xa1, 0xac, 0x3a, 0x62, | 	0xc1, 0xaa, 0x23, 0x28, 0x70, 0x75, 0x7e, 0x46, 0xd7, 0x67, 0x54, 0x87, 0x43, 0x59, 0x75, 0xc4, | ||||||
| 	0x25, 0xad, 0xce, 0xcf, 0xe9, 0xda, 0xcc, 0xea, 0x70, 0x38, 0xad, 0xce, 0x05, 0x00, 0xc8, 0xfe, | 	0x4a, 0x5a, 0x9d, 0x9f, 0xd3, 0xb5, 0x99, 0xd5, 0xe1, 0x70, 0x5a, 0x9d, 0x0b, 0x00, 0x90, 0xfd, | ||||||
| 	0xdb, 0x5e, 0xcb, 0x5f, 0x43, 0x9f, 0x36, 0xc9, 0x6b, 0x28, 0xc9, 0x04, 0x2d, 0x90, 0xa7, 0xfd, | 	0xb7, 0xbd, 0x96, 0xbf, 0x8a, 0x3e, 0x6d, 0x92, 0xd7, 0x50, 0x92, 0x09, 0x5a, 0x20, 0x4f, 0xfb, | ||||||
| 	0x8b, 0xbf, 0xae, 0xa3, 0xcf, 0xc8, 0x88, 0x5d, 0x6c, 0x82, 0x17, 0x41, 0xa1, 0x16, 0x43, 0x36, | 	0x17, 0x7f, 0x5d, 0x43, 0x9f, 0x91, 0x11, 0x3b, 0xd8, 0x04, 0x2f, 0x82, 0x42, 0x2d, 0x86, 0xac, | ||||||
| 	0xd0, 0x67, 0x19, 0xa4, 0xca, 0x21, 0x1b, 0x70, 0x09, 0x4c, 0x50, 0x04, 0x81, 0xd8, 0x35, 0xf4, | 	0xa3, 0xcf, 0xea, 0x90, 0x75, 0xb8, 0x04, 0x26, 0x28, 0x82, 0x40, 0xec, 0x1a, 0xfa, 0x9c, 0x8e, | ||||||
| 	0x39, 0x9d, 0x86, 0xfc, 0x3d, 0x49, 0xbe, 0xad, 0x62, 0xc8, 0x4d, 0xf4, 0x79, 0x8a, 0x90, 0x6d, | 	0x21, 0x7f, 0x4f, 0x92, 0x6f, 0x37, 0x31, 0xe4, 0x16, 0xfa, 0x3c, 0x45, 0xc8, 0x36, 0xb8, 0xcc, | ||||||
| 	0x70, 0x99, 0xd3, 0xac, 0x12, 0x1e, 0x07, 0x7d, 0x41, 0x01, 0x61, 0x1e, 0x47, 0xec, 0x08, 0x7f, | 	0x69, 0x6e, 0x12, 0x1e, 0x07, 0x7d, 0x41, 0x01, 0x61, 0x1e, 0x47, 0xec, 0x08, 0x7f, 0xbb, 0x8d, | ||||||
| 	0xbb, 0x85, 0xbe, 0xa8, 0x3b, 0xba, 0x85, 0x01, 0x22, 0xb4, 0x4d, 0xf4, 0x25, 0x3d, 0xda, 0xcd, | 	0xbe, 0xa8, 0x3b, 0xba, 0x8d, 0x01, 0x55, 0xfe, 0x6d, 0x03, 0x7d, 0x49, 0x07, 0x6c, 0xc4, 0x5b, | ||||||
| 	0x78, 0xcb, 0xf8, 0xeb, 0x6d, 0xf4, 0x65, 0x9d, 0xe2, 0x36, 0x5c, 0x02, 0x85, 0xaa, 0x40, 0xac, | 	0xc6, 0x5f, 0xef, 0xa0, 0x2f, 0xeb, 0x88, 0x3b, 0x70, 0x09, 0x14, 0xaa, 0x02, 0xb1, 0x7a, 0x13, | ||||||
| 	0xad, 0xa2, 0xaf, 0xb0, 0x38, 0x04, 0xc9, 0xda, 0x2a, 0xc1, 0xec, 0x54, 0xde, 0x7d, 0x50, 0xdb, | 	0x7d, 0x45, 0x8e, 0x83, 0xda, 0x08, 0x66, 0xbb, 0xf2, 0xee, 0xc3, 0xda, 0xce, 0xe6, 0x93, 0xca, | ||||||
| 	0xdd, 0x7a, 0x5c, 0x59, 0x5b, 0x43, 0x5f, 0xe5, 0x18, 0x6c, 0xa4, 0xb6, 0x18, 0x43, 0x72, 0xbd, | 	0xea, 0x2a, 0xfa, 0x2a, 0xc7, 0x60, 0x23, 0xb5, 0xc5, 0x18, 0x92, 0xeb, 0x35, 0xf4, 0x35, 0x05, | ||||||
| 	0x8e, 0xbe, 0xa6, 0x60, 0x88, 0x0d, 0x5e, 0x02, 0x93, 0x35, 0x29, 0xbf, 0x6b, 0x1b, 0xe8, 0xeb, | 	0x43, 0x6c, 0xf0, 0x12, 0x98, 0xac, 0x49, 0xf9, 0x5d, 0x5d, 0x47, 0x5f, 0x4f, 0x78, 0x5b, 0xa7, | ||||||
| 	0x09, 0x6f, 0x1b, 0x14, 0x55, 0x8d, 0x51, 0x36, 0xfa, 0x46, 0x02, 0x65, 0xc7, 0x09, 0xa4, 0xa0, | 	0xa8, 0x6a, 0x8c, 0xb2, 0xd1, 0x37, 0x12, 0x28, 0x3b, 0x4e, 0x20, 0x05, 0xdd, 0x42, 0xdf, 0x4c, | ||||||
| 	0x9b, 0xe8, 0x9b, 0x72, 0x02, 0x09, 0x48, 0xca, 0x32, 0xdd, 0x9d, 0x83, 0xbe, 0x95, 0x00, 0x39, | 	0x80, 0xa4, 0x2c, 0xd3, 0xdd, 0x39, 0xe8, 0x5b, 0x09, 0x90, 0x83, 0xfd, 0x49, 0x31, 0xdd, 0xae, | ||||||
| 	0xd8, 0x9f, 0x14, 0xd3, 0xad, 0x5a, 0x0d, 0x7d, 0x3b, 0x81, 0xba, 0x85, 0x51, 0x52, 0x4c, 0x9b, | 	0xd5, 0xd0, 0xb7, 0x13, 0xa8, 0xdb, 0x18, 0x25, 0xc5, 0xb4, 0x51, 0xab, 0xa1, 0xef, 0x24, 0x50, | ||||||
| 	0xb5, 0x1a, 0xfa, 0x4e, 0x22, 0xaa, 0xcd, 0xc5, 0xe7, 0x60, 0x42, 0x7d, 0xd0, 0x29, 0x00, 0xc3, | 	0x1b, 0x8b, 0x2f, 0xc0, 0x84, 0xfa, 0xa0, 0x53, 0x00, 0x86, 0xc7, 0xde, 0x88, 0x1a, 0x1e, 0x7c, | ||||||
| 	0x63, 0x6f, 0x44, 0x0d, 0x0f, 0xbe, 0x0d, 0xf2, 0xf5, 0x40, 0xbc, 0xd4, 0x40, 0xb9, 0xd3, 0x5e, | 	0x1b, 0xe4, 0xeb, 0x81, 0x78, 0xa9, 0x81, 0x72, 0xa7, 0xbd, 0x00, 0x91, 0xd1, 0x8b, 0xf7, 0x01, | ||||||
| 	0x80, 0xc8, 0xe8, 0xc5, 0x7b, 0x00, 0x26, 0x87, 0x94, 0xb0, 0x08, 0xcc, 0x97, 0xfe, 0x09, 0x73, | 	0x4c, 0x0e, 0x29, 0x61, 0x11, 0x98, 0x2f, 0xfd, 0x13, 0xe6, 0x02, 0xff, 0x0a, 0x67, 0xc1, 0x19, | ||||||
| 	0x81, 0x7f, 0x85, 0xb3, 0xe0, 0x0c, 0xbd, 0x7d, 0x72, 0xc4, 0x46, 0xbf, 0xdc, 0xc9, 0x6d, 0x1a, | 	0x7a, 0xfb, 0xe4, 0x88, 0x8d, 0x7e, 0xb9, 0x9b, 0xdb, 0x30, 0x62, 0x06, 0x79, 0x20, 0x29, 0x33, | ||||||
| 	0x31, 0x83, 0x3c, 0x90, 0x94, 0x19, 0xcc, 0x14, 0x06, 0x53, 0x66, 0x28, 0x83, 0xd9, 0xb4, 0xd1, | 	0x98, 0x29, 0x0c, 0xa6, 0xcc, 0x50, 0x06, 0xb3, 0x69, 0xa3, 0x47, 0x99, 0x63, 0x22, 0x85, 0x63, | ||||||
| 	0xa3, 0xcc, 0x31, 0x91, 0xc2, 0x31, 0x91, 0xce, 0xa1, 0x8c, 0x18, 0x65, 0x8e, 0xe1, 0x14, 0x8e, | 	0x22, 0x9d, 0x43, 0x19, 0x31, 0xca, 0x1c, 0xc3, 0x29, 0x1c, 0xc3, 0x49, 0x8e, 0xc4, 0x28, 0x51, | ||||||
| 	0xe1, 0x24, 0x47, 0x62, 0x94, 0x28, 0x73, 0x4c, 0xa7, 0x70, 0x4c, 0xa7, 0x73, 0x28, 0x23, 0x43, | 	0xe6, 0x98, 0x4e, 0xe1, 0x98, 0x4e, 0xe7, 0x50, 0x46, 0x86, 0x32, 0x07, 0x4c, 0xe1, 0x80, 0x32, | ||||||
| 	0x99, 0x03, 0xa6, 0x70, 0x40, 0x99, 0xe3, 0x01, 0x98, 0x4f, 0x1f, 0x0c, 0xca, 0x2c, 0xa3, 0x29, | 	0xc7, 0x43, 0x30, 0x9f, 0x3e, 0x18, 0x94, 0x59, 0x46, 0x53, 0x58, 0x46, 0x33, 0x58, 0xd4, 0xe1, | ||||||
| 	0x2c, 0xa3, 0x19, 0x2c, 0xea, 0xf0, 0x4f, 0x66, 0x19, 0x49, 0x61, 0x19, 0x91, 0x59, 0xaa, 0x00, | 	0x9f, 0xcc, 0x32, 0x92, 0xc2, 0x32, 0x22, 0xb3, 0x54, 0x01, 0xca, 0x1a, 0xef, 0xc9, 0x3c, 0x53, | ||||||
| 	0x65, 0x8d, 0xf7, 0x64, 0x9e, 0xa9, 0x14, 0x9e, 0xa9, 0x2c, 0x1e, 0x6d, 0x7c, 0x27, 0xf3, 0x14, | 	0x29, 0x3c, 0x53, 0x59, 0x3c, 0xda, 0xf8, 0x4e, 0xe6, 0x29, 0xa6, 0xf0, 0x14, 0x53, 0xbb, 0x4d, | ||||||
| 	0x53, 0x78, 0x8a, 0xa9, 0xdd, 0x26, 0x0f, 0xe9, 0x4e, 0xeb, 0xd7, 0x9c, 0xcc, 0xb0, 0x05, 0x66, | 	0x1e, 0xd2, 0x9d, 0xd6, 0xaf, 0x39, 0x99, 0x61, 0x13, 0xcc, 0xa4, 0xcc, 0xe3, 0x4e, 0xa3, 0x30, | ||||||
| 	0x52, 0xe6, 0x71, 0xa7, 0x51, 0x18, 0x32, 0xc5, 0x5d, 0x50, 0xd4, 0x87, 0x6f, 0xf2, 0xfa, 0xb1, | 	0x64, 0x8a, 0x7b, 0xa0, 0xa8, 0x0f, 0xdf, 0xe4, 0xf5, 0x63, 0x29, 0xeb, 0xc7, 0x52, 0x9a, 0x44, | ||||||
| 	0x94, 0xf5, 0x63, 0x29, 0x4d, 0xa2, 0x0f, 0xda, 0x64, 0x8e, 0xf1, 0x14, 0x8e, 0xf1, 0xe4, 0x36, | 	0x1f, 0xb4, 0xc9, 0x1c, 0xe3, 0x29, 0x1c, 0xe3, 0xc9, 0x6d, 0xe8, 0x13, 0xb5, 0xd3, 0x28, 0x0a, | ||||||
| 	0xf4, 0x89, 0xda, 0x69, 0x14, 0x05, 0x99, 0x22, 0x04, 0xe7, 0xfa, 0x8c, 0xcc, 0x52, 0xa8, 0xde, | 	0x32, 0x45, 0x08, 0xce, 0xf5, 0x19, 0x99, 0xa5, 0x50, 0xbd, 0x23, 0x53, 0xbd, 0xc6, 0xfb, 0x2a, | ||||||
| 	0x91, 0xa9, 0x5e, 0xe3, 0x7d, 0x95, 0xe4, 0xf3, 0x18, 0x9c, 0xef, 0x37, 0x33, 0x4b, 0x71, 0xba, | 	0xc9, 0xe7, 0x31, 0x38, 0xdf, 0x6f, 0x66, 0x96, 0xe2, 0x74, 0x55, 0x75, 0xda, 0xf7, 0x15, 0x96, | ||||||
| 	0xa6, 0x3a, 0xed, 0xfb, 0x0a, 0x4b, 0x72, 0xd4, 0xa4, 0x0d, 0x97, 0x36, 0x2b, 0x4b, 0x71, 0x72, | 	0xe4, 0xa8, 0x49, 0x1b, 0x2e, 0x6d, 0x56, 0x96, 0xe2, 0xe4, 0xae, 0xec, 0x64, 0xd0, 0x97, 0x5a, | ||||||
| 	0x47, 0x76, 0x32, 0xe8, 0x4b, 0x2d, 0xc9, 0x9b, 0x07, 0xce, 0x66, 0xce, 0xcb, 0x52, 0xdc, 0xad, | 	0x92, 0x37, 0x0f, 0x9c, 0xcd, 0x9c, 0x97, 0xa5, 0xb8, 0x5b, 0x51, 0xdd, 0x65, 0xbf, 0xea, 0x8a, | ||||||
| 	0xa8, 0xee, 0xb2, 0x5f, 0x75, 0xc5, 0x2e, 0x96, 0x6e, 0x03, 0x20, 0x4d, 0xf6, 0x46, 0x81, 0x59, | 	0x5d, 0x2c, 0xdd, 0x01, 0x40, 0x9a, 0xec, 0x8d, 0x02, 0xb3, 0xba, 0xbb, 0x5b, 0x1c, 0xc2, 0xbf, | ||||||
| 	0xdd, 0xdb, 0x2b, 0x0e, 0xe1, 0x5f, 0xca, 0x5b, 0x6e, 0xd1, 0xa0, 0xbf, 0x3c, 0x2f, 0xe6, 0xb0, | 	0x94, 0x37, 0xdd, 0xa2, 0x41, 0x7f, 0x79, 0x51, 0xcc, 0x61, 0x77, 0x3b, 0x95, 0x47, 0xc5, 0xff, | ||||||
| 	0xbb, 0xdd, 0xca, 0xc3, 0xe2, 0x7f, 0xf9, 0x7f, 0x46, 0x79, 0x42, 0x8c, 0xa2, 0xf0, 0xa9, 0xb2, | 	0xf2, 0xff, 0x8c, 0xf2, 0x84, 0x18, 0x45, 0xe1, 0x53, 0x65, 0xe9, 0x0d, 0x30, 0xa9, 0x0d, 0x24, | ||||||
| 	0xf4, 0x06, 0x98, 0xd4, 0x06, 0x92, 0x05, 0x60, 0xd4, 0xf9, 0x81, 0x52, 0xbf, 0x76, 0x13, 0x80, | 	0x0b, 0xc0, 0xa8, 0xf3, 0x03, 0xa5, 0x7e, 0xed, 0x16, 0x00, 0xf1, 0xbf, 0x61, 0x82, 0x53, 0x20, | ||||||
| 	0xf8, 0xdf, 0x30, 0xc1, 0x29, 0x90, 0x3f, 0xd8, 0xdd, 0x7f, 0x52, 0xb9, 0xbf, 0x53, 0xdd, 0xa9, | 	0xbf, 0xbf, 0xb3, 0xf7, 0xb4, 0xf2, 0x60, 0xbb, 0xba, 0x5d, 0x79, 0x58, 0x1c, 0x82, 0x05, 0x30, | ||||||
| 	0x3c, 0x28, 0x0e, 0xc1, 0x02, 0x18, 0x7b, 0xe2, 0xee, 0x3d, 0xdd, 0x2b, 0x1f, 0x54, 0x8b, 0x06, | 	0xf6, 0xd4, 0xdd, 0x7d, 0xb6, 0x5b, 0xde, 0xaf, 0x16, 0x0d, 0x38, 0x06, 0x86, 0x1f, 0xef, 0xed, | ||||||
| 	0x1c, 0x03, 0xc3, 0x8f, 0xf6, 0xf7, 0x76, 0x8b, 0xb9, 0x6b, 0xf7, 0x40, 0x5e, 0x9e, 0x07, 0x4e, | 	0xee, 0x14, 0x73, 0xd7, 0xee, 0x83, 0xbc, 0x3c, 0x0f, 0x9c, 0x02, 0xf9, 0xea, 0xae, 0x5b, 0xd9, | ||||||
| 	0x81, 0x7c, 0x75, 0xcf, 0xad, 0xec, 0x3c, 0xdc, 0xad, 0xd1, 0x48, 0x25, 0x03, 0x8d, 0x58, 0x31, | 	0x7e, 0xb4, 0x53, 0xa3, 0x91, 0x4a, 0x06, 0x1a, 0xb1, 0x62, 0x78, 0x51, 0xcc, 0x95, 0x2f, 0x82, | ||||||
| 	0x3c, 0x2f, 0xe6, 0xca, 0x17, 0xc1, 0x85, 0x7a, 0xd0, 0x4a, 0xfc, 0x61, 0x26, 0x25, 0xe7, 0xc5, | 	0x0b, 0xf5, 0xa0, 0x95, 0xf8, 0xc3, 0x4c, 0x4a, 0xce, 0xc1, 0x08, 0xb1, 0xae, 0xff, 0x2f, 0x00, | ||||||
| 	0x08, 0xb1, 0x6e, 0xfc, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x33, 0xc2, 0x0c, 0xb6, 0xeb, 0x26, 0x00, | 	0x00, 0xff, 0xff, 0x46, 0x1f, 0xdb, 0xdc, 0xeb, 0x26, 0x00, 0x00, | ||||||
| 	0x00, |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										93
									
								
								vendor/github.com/golang/protobuf/descriptor/descriptor.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										93
									
								
								vendor/github.com/golang/protobuf/descriptor/descriptor.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,93 +0,0 @@ | |||||||
| // Go support for Protocol Buffers - Google's data interchange format |  | ||||||
| // |  | ||||||
| // Copyright 2016 The Go Authors.  All rights reserved. |  | ||||||
| // https://github.com/golang/protobuf |  | ||||||
| // |  | ||||||
| // Redistribution and use in source and binary forms, with or without |  | ||||||
| // modification, are permitted provided that the following conditions are |  | ||||||
| // met: |  | ||||||
| // |  | ||||||
| //     * Redistributions of source code must retain the above copyright |  | ||||||
| // notice, this list of conditions and the following disclaimer. |  | ||||||
| //     * Redistributions in binary form must reproduce the above |  | ||||||
| // copyright notice, this list of conditions and the following disclaimer |  | ||||||
| // in the documentation and/or other materials provided with the |  | ||||||
| // distribution. |  | ||||||
| //     * Neither the name of Google Inc. nor the names of its |  | ||||||
| // contributors may be used to endorse or promote products derived from |  | ||||||
| // this software without specific prior written permission. |  | ||||||
| // |  | ||||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |  | ||||||
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |  | ||||||
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |  | ||||||
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |  | ||||||
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |  | ||||||
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |  | ||||||
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |  | ||||||
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |  | ||||||
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |  | ||||||
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |  | ||||||
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  |  | ||||||
| // Package descriptor provides functions for obtaining protocol buffer |  | ||||||
| // descriptors for generated Go types. |  | ||||||
| // |  | ||||||
| // These functions cannot go in package proto because they depend on the |  | ||||||
| // generated protobuf descriptor messages, which themselves depend on proto. |  | ||||||
| package descriptor |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"bytes" |  | ||||||
| 	"compress/gzip" |  | ||||||
| 	"fmt" |  | ||||||
| 	"io/ioutil" |  | ||||||
|  |  | ||||||
| 	"github.com/golang/protobuf/proto" |  | ||||||
| 	protobuf "google.golang.org/genproto/protobuf" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // extractFile extracts a FileDescriptorProto from a gzip'd buffer. |  | ||||||
| func extractFile(gz []byte) (*protobuf.FileDescriptorProto, error) { |  | ||||||
| 	r, err := gzip.NewReader(bytes.NewReader(gz)) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, fmt.Errorf("failed to open gzip reader: %v", err) |  | ||||||
| 	} |  | ||||||
| 	defer r.Close() |  | ||||||
|  |  | ||||||
| 	b, err := ioutil.ReadAll(r) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, fmt.Errorf("failed to uncompress descriptor: %v", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	fd := new(protobuf.FileDescriptorProto) |  | ||||||
| 	if err := proto.Unmarshal(b, fd); err != nil { |  | ||||||
| 		return nil, fmt.Errorf("malformed FileDescriptorProto: %v", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return fd, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Message is a proto.Message with a method to return its descriptor. |  | ||||||
| // |  | ||||||
| // Message types generated by the protocol compiler always satisfy |  | ||||||
| // the Message interface. |  | ||||||
| type Message interface { |  | ||||||
| 	proto.Message |  | ||||||
| 	Descriptor() ([]byte, []int) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // ForMessage returns a FileDescriptorProto and a DescriptorProto from within it |  | ||||||
| // describing the given message. |  | ||||||
| func ForMessage(msg Message) (fd *protobuf.FileDescriptorProto, md *protobuf.DescriptorProto) { |  | ||||||
| 	gz, path := msg.Descriptor() |  | ||||||
| 	fd, err := extractFile(gz) |  | ||||||
| 	if err != nil { |  | ||||||
| 		panic(fmt.Sprintf("invalid FileDescriptorProto for %T: %v", msg, err)) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	md = fd.MessageType[path[0]] |  | ||||||
| 	for _, i := range path[1:] { |  | ||||||
| 		md = md.NestedType[i] |  | ||||||
| 	} |  | ||||||
| 	return fd, md |  | ||||||
| } |  | ||||||
							
								
								
									
										32
									
								
								vendor/github.com/golang/protobuf/descriptor/descriptor_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								vendor/github.com/golang/protobuf/descriptor/descriptor_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,32 +0,0 @@ | |||||||
| package descriptor_test |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 	"testing" |  | ||||||
|  |  | ||||||
| 	"github.com/golang/protobuf/descriptor" |  | ||||||
| 	tpb "github.com/golang/protobuf/proto/testdata" |  | ||||||
| 	protobuf "google.golang.org/genproto/protobuf" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| func TestMessage(t *testing.T) { |  | ||||||
| 	var msg *protobuf.DescriptorProto |  | ||||||
| 	fd, md := descriptor.ForMessage(msg) |  | ||||||
| 	if pkg, want := fd.GetPackage(), "google.protobuf"; pkg != want { |  | ||||||
| 		t.Errorf("descriptor.ForMessage(%T).GetPackage() = %q; want %q", msg, pkg, want) |  | ||||||
| 	} |  | ||||||
| 	if name, want := md.GetName(), "DescriptorProto"; name != want { |  | ||||||
| 		t.Fatalf("descriptor.ForMessage(%T).GetName() = %q; want %q", msg, name, want) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func Example_Options() { |  | ||||||
| 	var msg *tpb.MyMessageSet |  | ||||||
| 	_, md := descriptor.ForMessage(msg) |  | ||||||
| 	if md.GetOptions().GetMessageSetWireFormat() { |  | ||||||
| 		fmt.Printf("%v uses option message_set_wire_format.\n", md.GetName()) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Output: |  | ||||||
| 	// MyMessageSet uses option message_set_wire_format. |  | ||||||
| } |  | ||||||
							
								
								
									
										18
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -585,14 +585,7 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe | |||||||
| 		case "Any": | 		case "Any": | ||||||
| 			return fmt.Errorf("unmarshaling Any not supported yet") | 			return fmt.Errorf("unmarshaling Any not supported yet") | ||||||
| 		case "Duration": | 		case "Duration": | ||||||
| 			ivStr := string(inputValue) | 			unq, err := strconv.Unquote(string(inputValue)) | ||||||
| 			if ivStr == "null" { |  | ||||||
| 				target.Field(0).SetInt(0) |  | ||||||
| 				target.Field(1).SetInt(0) |  | ||||||
| 				return nil |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			unq, err := strconv.Unquote(ivStr) |  | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return err | 				return err | ||||||
| 			} | 			} | ||||||
| @@ -607,14 +600,7 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe | |||||||
| 			target.Field(1).SetInt(ns) | 			target.Field(1).SetInt(ns) | ||||||
| 			return nil | 			return nil | ||||||
| 		case "Timestamp": | 		case "Timestamp": | ||||||
| 			ivStr := string(inputValue) | 			unq, err := strconv.Unquote(string(inputValue)) | ||||||
| 			if ivStr == "null" { |  | ||||||
| 				target.Field(0).SetInt(0) |  | ||||||
| 				target.Field(1).SetInt(0) |  | ||||||
| 				return nil |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			unq, err := strconv.Unquote(ivStr) |  | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return err | 				return err | ||||||
| 			} | 			} | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -467,11 +467,9 @@ var unmarshalingTests = []struct { | |||||||
| 	{"camelName input", Unmarshaler{}, `{"oBool":true}`, &pb.Simple{OBool: proto.Bool(true)}}, | 	{"camelName input", Unmarshaler{}, `{"oBool":true}`, &pb.Simple{OBool: proto.Bool(true)}}, | ||||||
|  |  | ||||||
| 	{"Duration", Unmarshaler{}, `{"dur":"3.000s"}`, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 3}}}, | 	{"Duration", Unmarshaler{}, `{"dur":"3.000s"}`, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 3}}}, | ||||||
| 	{"null Duration", Unmarshaler{}, `{"dur":null}`, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 0}}}, |  | ||||||
| 	{"Timestamp", Unmarshaler{}, `{"ts":"2014-05-13T16:53:20.021Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 14e8, Nanos: 21e6}}}, | 	{"Timestamp", Unmarshaler{}, `{"ts":"2014-05-13T16:53:20.021Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 14e8, Nanos: 21e6}}}, | ||||||
| 	{"PreEpochTimestamp", Unmarshaler{}, `{"ts":"1969-12-31T23:59:58.999999995Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -2, Nanos: 999999995}}}, | 	{"PreEpochTimestamp", Unmarshaler{}, `{"ts":"1969-12-31T23:59:58.999999995Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -2, Nanos: 999999995}}}, | ||||||
| 	{"ZeroTimeTimestamp", Unmarshaler{}, `{"ts":"0001-01-01T00:00:00Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -62135596800, Nanos: 0}}}, | 	{"ZeroTimeTimestamp", Unmarshaler{}, `{"ts":"0001-01-01T00:00:00Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -62135596800, Nanos: 0}}}, | ||||||
| 	{"null Timestamp", Unmarshaler{}, `{"ts":null}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 0, Nanos: 0}}}, |  | ||||||
|  |  | ||||||
| 	{"DoubleValue", Unmarshaler{}, `{"dbl":1.2}`, &pb.KnownTypes{Dbl: &wpb.DoubleValue{Value: 1.2}}}, | 	{"DoubleValue", Unmarshaler{}, `{"dbl":1.2}`, &pb.KnownTypes{Dbl: &wpb.DoubleValue{Value: 1.2}}}, | ||||||
| 	{"FloatValue", Unmarshaler{}, `{"flt":1.2}`, &pb.KnownTypes{Flt: &wpb.FloatValue{Value: 1.2}}}, | 	{"FloatValue", Unmarshaler{}, `{"flt":1.2}`, &pb.KnownTypes{Flt: &wpb.FloatValue{Value: 1.2}}}, | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -71,13 +71,6 @@ func (m *Simple3) String() string            { return proto.CompactTextString(m) | |||||||
| func (*Simple3) ProtoMessage()               {} | func (*Simple3) ProtoMessage()               {} | ||||||
| func (*Simple3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } | func (*Simple3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } | ||||||
|  |  | ||||||
| func (m *Simple3) GetDub() float64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Dub |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type Mappy struct { | type Mappy struct { | ||||||
| 	Nummy    map[int64]int32    `protobuf:"bytes,1,rep,name=nummy" json:"nummy,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` | 	Nummy    map[int64]int32    `protobuf:"bytes,1,rep,name=nummy" json:"nummy,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` | ||||||
| 	Strry    map[string]string  `protobuf:"bytes,2,rep,name=strry" json:"strry,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` | 	Strry    map[string]string  `protobuf:"bytes,2,rep,name=strry" json:"strry,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` | ||||||
|   | |||||||
							
								
								
									
										138
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										138
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -360,7 +360,7 @@ type MsgWithOneof_Salary struct { | |||||||
| 	Salary int64 `protobuf:"varint,2,opt,name=salary,oneof"` | 	Salary int64 `protobuf:"varint,2,opt,name=salary,oneof"` | ||||||
| } | } | ||||||
| type MsgWithOneof_Country struct { | type MsgWithOneof_Country struct { | ||||||
| 	Country string `protobuf:"bytes,3,opt,name=Country,oneof"` | 	Country string `protobuf:"bytes,3,opt,name=Country,json=country,oneof"` | ||||||
| } | } | ||||||
| type MsgWithOneof_HomeAddress struct { | type MsgWithOneof_HomeAddress struct { | ||||||
| 	HomeAddress string `protobuf:"bytes,4,opt,name=home_address,json=homeAddress,oneof"` | 	HomeAddress string `protobuf:"bytes,4,opt,name=home_address,json=homeAddress,oneof"` | ||||||
| @@ -559,7 +559,6 @@ var E_Complex_RealExtension = &proto.ExtensionDesc{ | |||||||
| 	Field:         123, | 	Field:         123, | ||||||
| 	Name:          "jsonpb.Complex.real_extension", | 	Name:          "jsonpb.Complex.real_extension", | ||||||
| 	Tag:           "bytes,123,opt,name=real_extension,json=realExtension", | 	Tag:           "bytes,123,opt,name=real_extension,json=realExtension", | ||||||
| 	Filename:      "test_objects.proto", |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type KnownTypes struct { | type KnownTypes struct { | ||||||
| @@ -681,7 +680,6 @@ var E_Name = &proto.ExtensionDesc{ | |||||||
| 	Field:         124, | 	Field:         124, | ||||||
| 	Name:          "jsonpb.name", | 	Name:          "jsonpb.name", | ||||||
| 	Tag:           "bytes,124,opt,name=name", | 	Tag:           "bytes,124,opt,name=name", | ||||||
| 	Filename:      "test_objects.proto", |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func init() { | func init() { | ||||||
| @@ -701,71 +699,71 @@ func init() { | |||||||
| func init() { proto.RegisterFile("test_objects.proto", fileDescriptor1) } | func init() { proto.RegisterFile("test_objects.proto", fileDescriptor1) } | ||||||
|  |  | ||||||
| var fileDescriptor1 = []byte{ | var fileDescriptor1 = []byte{ | ||||||
| 	// 1054 bytes of a gzipped FileDescriptorProto | 	// 1055 bytes of a gzipped FileDescriptorProto | ||||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x74, 0x95, 0xdf, 0x72, 0xdb, 0x44, | 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x74, 0x95, 0x51, 0x73, 0xdb, 0x44, | ||||||
| 	0x14, 0xc6, 0x23, 0xc9, 0x96, 0xed, 0x75, 0x12, 0xcc, 0x4e, 0x4a, 0x15, 0x13, 0x40, 0x63, 0x4a, | 	0x10, 0xc7, 0x23, 0xc9, 0x96, 0xec, 0x73, 0x12, 0xcc, 0x4d, 0x4a, 0x15, 0x13, 0x40, 0x63, 0x4a, | ||||||
| 	0x11, 0x85, 0xba, 0x83, 0xe2, 0xf1, 0x30, 0x85, 0x9b, 0xa4, 0x31, 0x94, 0x81, 0x94, 0x99, 0x4d, | 	0x11, 0x85, 0xba, 0x83, 0xe2, 0xf1, 0x30, 0x85, 0x97, 0xa4, 0x31, 0x94, 0x81, 0x94, 0x99, 0x4b, | ||||||
| 	0x43, 0x2f, 0x3d, 0x72, 0xbc, 0x71, 0x55, 0x64, 0xad, 0x67, 0x77, 0x45, 0xea, 0x81, 0x8b, 0x5c, | 	0x43, 0x1f, 0x3d, 0x72, 0x7c, 0x71, 0x55, 0x64, 0x9d, 0xe7, 0xee, 0x44, 0xea, 0x81, 0x87, 0x3c, | ||||||
| 	0x73, 0xcd, 0x2b, 0xc0, 0x23, 0xf0, 0x44, 0x3c, 0x48, 0xe7, 0x9c, 0xd5, 0x9f, 0xc4, 0x8e, 0xaf, | 	0xf3, 0xcc, 0x57, 0x80, 0x8f, 0xc0, 0x27, 0xe2, 0x83, 0x74, 0x76, 0x4f, 0xb2, 0x12, 0x3b, 0x7e, | ||||||
| 	0xe2, 0xb3, 0xe7, 0x3b, 0x5f, 0x56, 0xbf, 0x3d, 0xbb, 0x87, 0x50, 0xcd, 0x95, 0x1e, 0x8b, 0xc9, | 	0x8a, 0xf7, 0xf6, 0xbf, 0xff, 0x9c, 0x7e, 0xb7, 0x77, 0x4b, 0xa8, 0xe6, 0x4a, 0x8f, 0xc4, 0xf8, | ||||||
| 	0x1b, 0x7e, 0xa1, 0x55, 0x7f, 0x21, 0x85, 0x16, 0xd4, 0x7d, 0xa3, 0x44, 0xba, 0x98, 0x74, 0xf7, | 	0x0d, 0xbf, 0xd0, 0xaa, 0x37, 0x97, 0x42, 0x0b, 0xea, 0xbe, 0x51, 0x22, 0x9b, 0x8f, 0x3b, 0xfb, | ||||||
| 	0x67, 0x42, 0xcc, 0x12, 0xfe, 0x04, 0x57, 0x27, 0xd9, 0xe5, 0x93, 0x28, 0x5d, 0x1a, 0x49, 0xf7, | 	0x53, 0x21, 0xa6, 0x29, 0x7f, 0x82, 0xab, 0xe3, 0xfc, 0xf2, 0x49, 0x9c, 0x2d, 0x8c, 0xa4, 0xf3, | ||||||
| 	0xe3, 0xd5, 0xd4, 0x34, 0x93, 0x91, 0x8e, 0x45, 0x9a, 0xe7, 0x0f, 0x56, 0xf3, 0x4a, 0xcb, 0xec, | 	0xf1, 0x6a, 0x6a, 0x92, 0xcb, 0x58, 0x27, 0x22, 0x2b, 0xf2, 0x07, 0xab, 0x79, 0xa5, 0x65, 0x7e, | ||||||
| 	0x42, 0xe7, 0xd9, 0x4f, 0x56, 0xb3, 0x3a, 0x9e, 0x73, 0xa5, 0xa3, 0xf9, 0x62, 0x93, 0xfd, 0x95, | 	0xa1, 0x8b, 0xec, 0x27, 0xab, 0x59, 0x9d, 0xcc, 0xb8, 0xd2, 0xf1, 0x6c, 0xbe, 0xc9, 0xfe, 0x4a, | ||||||
| 	0x8c, 0x16, 0x0b, 0x2e, 0xf3, 0x1d, 0xf6, 0xfe, 0xb1, 0x89, 0x7b, 0x16, 0xcf, 0x17, 0x09, 0xa7, | 	0xc6, 0xf3, 0x39, 0x97, 0xc5, 0x0e, 0xbb, 0xff, 0xd8, 0xc4, 0x3d, 0x4b, 0x66, 0xf3, 0x94, 0xd3, | ||||||
| 	0xf7, 0x88, 0x2b, 0xc6, 0x13, 0x21, 0x12, 0xcf, 0xf2, 0xad, 0xa0, 0xc9, 0xea, 0xe2, 0x58, 0x88, | 	0x7b, 0xc4, 0x15, 0xa3, 0xb1, 0x10, 0xa9, 0x6f, 0x05, 0x56, 0xd8, 0x60, 0x75, 0x71, 0x2c, 0x44, | ||||||
| 	0x84, 0xde, 0x27, 0x0d, 0x31, 0x8e, 0x53, 0x7d, 0x18, 0x7a, 0xb6, 0x6f, 0x05, 0x75, 0xe6, 0x8a, | 	0x4a, 0xef, 0x13, 0x4f, 0x8c, 0x92, 0x4c, 0x1f, 0x46, 0xbe, 0x1d, 0x58, 0x61, 0x9d, 0xb9, 0xe2, | ||||||
| 	0x1f, 0x21, 0x2a, 0x13, 0xc3, 0x81, 0xe7, 0xf8, 0x56, 0xe0, 0x98, 0xc4, 0x70, 0x40, 0xf7, 0x49, | 	0x47, 0x88, 0x96, 0x89, 0x41, 0xdf, 0x77, 0x02, 0x2b, 0x74, 0x4c, 0x62, 0xd0, 0xa7, 0xfb, 0xa4, | ||||||
| 	0x53, 0x8c, 0x33, 0x53, 0x52, 0xf3, 0xad, 0x60, 0x87, 0x35, 0xc4, 0x39, 0x86, 0x55, 0x6a, 0x38, | 	0x21, 0x46, 0xb9, 0x29, 0xa9, 0x05, 0x56, 0xb8, 0xc3, 0x3c, 0x71, 0x8e, 0x61, 0x95, 0x1a, 0xf4, | ||||||
| 	0xf0, 0xea, 0xbe, 0x15, 0xd4, 0xf2, 0x54, 0x51, 0xa5, 0x4c, 0x95, 0xeb, 0x5b, 0xc1, 0xfb, 0xac, | 	0xfd, 0x7a, 0x60, 0x85, 0xb5, 0x22, 0x55, 0x56, 0x29, 0x53, 0xe5, 0x06, 0x56, 0xf8, 0x3e, 0xf3, | ||||||
| 	0x21, 0xce, 0x6e, 0x54, 0x29, 0x53, 0xd5, 0xf0, 0xad, 0x80, 0xe6, 0xa9, 0xe1, 0xc0, 0x6c, 0xe2, | 	0xc4, 0xd9, 0x8d, 0x2a, 0x65, 0xaa, 0xbc, 0xc0, 0x0a, 0x69, 0x91, 0x1a, 0xf4, 0xcd, 0x26, 0x2e, | ||||||
| 	0x32, 0x11, 0x91, 0xf6, 0x9a, 0xbe, 0x15, 0xd8, 0xcc, 0x15, 0xdf, 0x43, 0x64, 0x6a, 0xa6, 0x22, | 	0x53, 0x11, 0x6b, 0xbf, 0x11, 0x58, 0xa1, 0xcd, 0x5c, 0xf1, 0x3d, 0x44, 0xa6, 0x66, 0x22, 0xf2, | ||||||
| 	0x9b, 0x24, 0xdc, 0x6b, 0xf9, 0x56, 0x60, 0xb1, 0x86, 0x38, 0xc1, 0x30, 0xb7, 0xd3, 0x32, 0x4e, | 	0x71, 0xca, 0xfd, 0x66, 0x60, 0x85, 0x16, 0xf3, 0xc4, 0x09, 0x86, 0x85, 0x9d, 0x96, 0x49, 0x36, | ||||||
| 	0x67, 0x1e, 0xf1, 0xad, 0xa0, 0x05, 0x76, 0x18, 0x1a, 0xbb, 0xc9, 0x52, 0x73, 0xe5, 0xb5, 0x7d, | 	0xf5, 0x49, 0x60, 0x85, 0x4d, 0xb0, 0xc3, 0xd0, 0xd8, 0x8d, 0x17, 0x9a, 0x2b, 0xbf, 0x15, 0x58, | ||||||
| 	0x2b, 0xd8, 0x66, 0xae, 0x38, 0x86, 0xa8, 0xf7, 0xaf, 0x4d, 0x1a, 0x8c, 0x2f, 0x78, 0xa4, 0x15, | 	0xe1, 0x36, 0x73, 0xc5, 0x31, 0x44, 0xdd, 0x7f, 0x6d, 0xe2, 0x31, 0x3e, 0xe7, 0xb1, 0x56, 0x00, | ||||||
| 	0x80, 0x92, 0x05, 0x28, 0x07, 0x40, 0xc9, 0x02, 0x94, 0x2c, 0x41, 0x39, 0x00, 0x4a, 0x96, 0xa0, | 	0x4a, 0x96, 0xa0, 0x1c, 0x00, 0x25, 0x4b, 0x50, 0x72, 0x09, 0xca, 0x01, 0x50, 0x72, 0x09, 0x4a, | ||||||
| 	0x64, 0x09, 0xca, 0x01, 0x50, 0xb2, 0x04, 0x25, 0x2b, 0x50, 0x0e, 0x80, 0x92, 0x15, 0x28, 0x59, | 	0x2e, 0x41, 0x39, 0x00, 0x4a, 0x2e, 0x41, 0xc9, 0x0a, 0x94, 0x03, 0xa0, 0x64, 0x05, 0x4a, 0x56, | ||||||
| 	0x81, 0x72, 0x00, 0x94, 0xac, 0x40, 0xc9, 0x0a, 0x94, 0x03, 0xa0, 0xe4, 0xd9, 0x8d, 0xaa, 0x12, | 	0xa0, 0x1c, 0x00, 0x25, 0x2b, 0x50, 0xb2, 0x02, 0xe5, 0x00, 0x28, 0x79, 0x76, 0xa3, 0x6a, 0x09, | ||||||
| 	0x94, 0x03, 0xa0, 0x64, 0x05, 0x4a, 0x96, 0xa0, 0x1c, 0x00, 0x25, 0x4b, 0x50, 0xb2, 0x02, 0xe5, | 	0xca, 0x01, 0x50, 0xb2, 0x02, 0x25, 0x97, 0xa0, 0x1c, 0x00, 0x25, 0x97, 0xa0, 0x64, 0x05, 0xca, | ||||||
| 	0x00, 0x28, 0x59, 0x81, 0x92, 0x15, 0x28, 0x07, 0x40, 0xc9, 0x0a, 0x94, 0x2c, 0x41, 0x39, 0x00, | 	0x01, 0x50, 0xb2, 0x02, 0x25, 0x2b, 0x50, 0x0e, 0x80, 0x92, 0x15, 0x28, 0xb9, 0x04, 0xe5, 0x00, | ||||||
| 	0x4a, 0x1a, 0x50, 0xff, 0xd9, 0xc4, 0x7d, 0x15, 0x4f, 0x67, 0x5c, 0xd3, 0x47, 0xa4, 0x7e, 0x21, | 	0x28, 0x69, 0x40, 0xfd, 0x67, 0x13, 0xf7, 0x55, 0x32, 0x99, 0x72, 0x4d, 0x1f, 0x91, 0xfa, 0x85, | ||||||
| 	0x12, 0x21, 0xb1, 0x9f, 0x76, 0xc3, 0xbd, 0xbe, 0xb9, 0x0d, 0x7d, 0x93, 0xee, 0x3f, 0x83, 0x1c, | 	0x48, 0x85, 0xc4, 0x7e, 0xda, 0x8d, 0xf6, 0x7a, 0xe6, 0x36, 0xf4, 0x4c, 0xba, 0xf7, 0x0c, 0x72, | ||||||
| 	0x33, 0x12, 0xfa, 0x18, 0xfc, 0x8c, 0x1a, 0xe0, 0x6d, 0x52, 0xbb, 0x12, 0xff, 0xd2, 0x87, 0xc4, | 	0xcc, 0x48, 0xe8, 0x63, 0xf0, 0x33, 0x6a, 0x80, 0xb7, 0x49, 0xed, 0x4a, 0xfc, 0x4b, 0x1f, 0x12, | ||||||
| 	0x55, 0xd8, 0xb5, 0x78, 0x80, 0xed, 0x70, 0xb7, 0x50, 0x9b, 0x5e, 0x66, 0x79, 0x96, 0x7e, 0x61, | 	0x57, 0x61, 0xd7, 0xe2, 0x01, 0xb6, 0xa2, 0xdd, 0x52, 0x6d, 0x7a, 0x99, 0x15, 0x59, 0xfa, 0x85, | ||||||
| 	0x80, 0xa0, 0x12, 0xf6, 0xb9, 0xae, 0x04, 0x40, 0xb9, 0xb4, 0x21, 0xcd, 0x01, 0x7b, 0x7b, 0xe8, | 	0x01, 0x82, 0x4a, 0xd8, 0xe7, 0xba, 0x12, 0x00, 0x15, 0x52, 0x4f, 0x9a, 0x03, 0xf6, 0xf7, 0xd0, | ||||||
| 	0xf9, 0x5e, 0xa1, 0xcc, 0xcf, 0x9d, 0x15, 0x79, 0xfa, 0x15, 0x69, 0xc9, 0x71, 0x21, 0xbe, 0x87, | 	0xf3, 0xbd, 0x52, 0x59, 0x9c, 0x3b, 0x2b, 0xf3, 0xf4, 0x2b, 0xd2, 0x94, 0xa3, 0x52, 0x7c, 0x0f, | ||||||
| 	0xb6, 0x6b, 0xe2, 0xa6, 0xcc, 0x7f, 0xf5, 0x3e, 0x23, 0x75, 0xb3, 0xe9, 0x06, 0x71, 0xd8, 0xe8, | 	0x6d, 0xd7, 0xc4, 0x0d, 0x59, 0xfc, 0xea, 0x7e, 0x46, 0xea, 0x66, 0xd3, 0x1e, 0x71, 0xd8, 0xf0, | ||||||
| 	0xa4, 0xb3, 0x45, 0x5b, 0xa4, 0xfe, 0x03, 0x1b, 0x8d, 0x5e, 0x74, 0x2c, 0xda, 0x24, 0xb5, 0xe3, | 	0xa4, 0xbd, 0x45, 0x9b, 0xa4, 0xfe, 0x03, 0x1b, 0x0e, 0x5f, 0xb4, 0x2d, 0xda, 0x20, 0xb5, 0xe3, | ||||||
| 	0x9f, 0xcf, 0x47, 0x1d, 0xbb, 0xf7, 0xb7, 0x4d, 0x6a, 0xa7, 0xd1, 0x42, 0xd1, 0x6f, 0x49, 0x7b, | 	0x9f, 0xcf, 0x87, 0x6d, 0xbb, 0xfb, 0xb7, 0x4d, 0x6a, 0xa7, 0xf1, 0x5c, 0xd1, 0x6f, 0x49, 0x6b, | ||||||
| 	0x6e, 0xda, 0x05, 0xd8, 0x63, 0x8f, 0xb5, 0xc3, 0x0f, 0x0b, 0x7f, 0x90, 0xf4, 0x4f, 0xb1, 0x7f, | 	0x66, 0xda, 0x05, 0xd8, 0x63, 0x8f, 0xb5, 0xa2, 0x0f, 0x4b, 0x7f, 0x90, 0xf4, 0x4e, 0xb1, 0x7f, | ||||||
| 	0xce, 0xb4, 0x1c, 0xa5, 0x5a, 0x2e, 0x59, 0x6b, 0x5e, 0xc4, 0xf4, 0x88, 0xec, 0xcc, 0xb1, 0x37, | 	0xce, 0xb4, 0x1c, 0x66, 0x5a, 0x2e, 0x58, 0x73, 0x56, 0xc6, 0xf4, 0x88, 0xec, 0xcc, 0xb0, 0x37, | ||||||
| 	0x8b, 0xaf, 0xb6, 0xb1, 0xfc, 0xa3, 0xdb, 0xe5, 0xd0, 0xaf, 0xe6, 0xb3, 0x8d, 0x41, 0x7b, 0x5e, | 	0xcb, 0xaf, 0xb6, 0xb1, 0xfc, 0xa3, 0xdb, 0xe5, 0xd0, 0xaf, 0xe6, 0xb3, 0x8d, 0x41, 0x6b, 0x56, | ||||||
| 	0xad, 0x74, 0xbf, 0x23, 0xbb, 0xb7, 0xfd, 0x69, 0x87, 0x38, 0xbf, 0xf1, 0x25, 0x1e, 0xa3, 0xc3, | 	0xad, 0x74, 0xbe, 0x23, 0xbb, 0xb7, 0xfd, 0x69, 0x9b, 0x38, 0xbf, 0xf1, 0x05, 0x1e, 0xa3, 0xc3, | ||||||
| 	0xe0, 0x27, 0xdd, 0x23, 0xf5, 0xdf, 0xa3, 0x24, 0xe3, 0xf8, 0x24, 0xb4, 0x98, 0x09, 0x9e, 0xda, | 	0xe0, 0x27, 0xdd, 0x23, 0xf5, 0xdf, 0xe3, 0x34, 0xe7, 0xf8, 0x24, 0x34, 0x99, 0x09, 0x9e, 0xda, | ||||||
| 	0xdf, 0x58, 0xdd, 0x17, 0xa4, 0xb3, 0x6a, 0x7f, 0xb3, 0xbe, 0x69, 0xea, 0x1f, 0xdc, 0xac, 0x5f, | 	0xdf, 0x58, 0x9d, 0x17, 0xa4, 0xbd, 0x6a, 0x7f, 0xb3, 0xbe, 0x61, 0xea, 0x1f, 0xdc, 0xac, 0x5f, | ||||||
| 	0x3f, 0x94, 0xca, 0xaf, 0xf7, 0x97, 0x45, 0xb6, 0x4f, 0xd5, 0xec, 0x55, 0xac, 0x5f, 0xff, 0x92, | 	0x3f, 0x94, 0xca, 0xaf, 0xfb, 0x97, 0x45, 0xb6, 0x4f, 0xd5, 0xf4, 0x55, 0xa2, 0x5f, 0xff, 0x92, | ||||||
| 	0x72, 0x71, 0x49, 0x3f, 0x20, 0x75, 0x1d, 0xeb, 0x84, 0xa3, 0x5d, 0xeb, 0xf9, 0x16, 0x33, 0x21, | 	0x71, 0x71, 0x49, 0x3f, 0x20, 0x75, 0x9d, 0xe8, 0x94, 0xa3, 0x5d, 0xf3, 0xf9, 0x16, 0x33, 0x21, | ||||||
| 	0xf5, 0x88, 0xab, 0xa2, 0x24, 0x92, 0x4b, 0xf4, 0x74, 0x9e, 0x6f, 0xb1, 0x3c, 0xa6, 0x5d, 0xd2, | 	0xf5, 0x89, 0xab, 0xe2, 0x34, 0x96, 0x0b, 0xf4, 0x74, 0x9e, 0x6f, 0xb1, 0x22, 0xa6, 0x1d, 0xe2, | ||||||
| 	0x78, 0x26, 0x32, 0xd8, 0x09, 0x3e, 0x54, 0x50, 0x53, 0x2c, 0xd0, 0x4f, 0xc9, 0xf6, 0x6b, 0x31, | 	0x3d, 0x13, 0x39, 0xec, 0x04, 0x1f, 0x2a, 0xa8, 0xf1, 0x2e, 0xcc, 0x02, 0xfd, 0x94, 0x6c, 0xbf, | ||||||
| 	0xe7, 0xe3, 0x68, 0x3a, 0x95, 0x5c, 0x29, 0x7c, 0xaf, 0x40, 0xd0, 0x86, 0xd5, 0x23, 0xb3, 0x78, | 	0x16, 0x33, 0x3e, 0x8a, 0x27, 0x13, 0xc9, 0x95, 0xc2, 0xf7, 0x0a, 0x04, 0x2d, 0x58, 0x3d, 0x32, | ||||||
| 	0xdc, 0x20, 0xf5, 0x2c, 0x8d, 0x45, 0xda, 0x7b, 0x48, 0x6a, 0x8c, 0x47, 0x49, 0xf5, 0xf9, 0x16, | 	0x8b, 0xc7, 0x1e, 0xa9, 0xe7, 0x59, 0x22, 0xb2, 0xee, 0x43, 0x52, 0x63, 0x3c, 0x4e, 0xab, 0xcf, | ||||||
| 	0xbe, 0x2c, 0x26, 0x78, 0xd4, 0x6c, 0x4e, 0x3b, 0xd7, 0xd7, 0xd7, 0xd7, 0x76, 0xef, 0x0a, 0xfe, | 	0xb7, 0xf0, 0x65, 0x31, 0xc1, 0xa3, 0x46, 0x63, 0xd2, 0xbe, 0xbe, 0xbe, 0xbe, 0xb6, 0xbb, 0x57, | ||||||
| 	0x23, 0x7c, 0xc9, 0x5b, 0x7a, 0x40, 0x5a, 0xf1, 0x3c, 0x9a, 0xc5, 0x29, 0xec, 0xcc, 0xc8, 0xab, | 	0xf0, 0x1f, 0xe1, 0x4b, 0xde, 0xd2, 0x03, 0xd2, 0x4c, 0x66, 0xf1, 0x34, 0xc9, 0x60, 0x67, 0x46, | ||||||
| 	0x85, 0xaa, 0x24, 0x3c, 0x21, 0xbb, 0x92, 0x47, 0xc9, 0x98, 0xbf, 0xd5, 0x3c, 0x55, 0xb1, 0x48, | 	0x5e, 0x2d, 0x54, 0x25, 0xd1, 0x09, 0xd9, 0x95, 0x3c, 0x4e, 0x47, 0xfc, 0xad, 0xe6, 0x99, 0x4a, | ||||||
| 	0xe9, 0x76, 0xd5, 0x52, 0x51, 0xe2, 0xfd, 0x71, 0xbb, 0x27, 0x73, 0x7b, 0xb6, 0x03, 0x45, 0xa3, | 	0x44, 0x46, 0xb7, 0xab, 0x96, 0x8a, 0x53, 0xff, 0x8f, 0xdb, 0x3d, 0x59, 0xd8, 0xb3, 0x1d, 0x28, | ||||||
| 	0xa2, 0xa6, 0xf7, 0x7f, 0x8d, 0x90, 0x9f, 0x52, 0x71, 0x95, 0xbe, 0x5c, 0x2e, 0xb8, 0xa2, 0x0f, | 	0x1a, 0x96, 0x35, 0xdd, 0xff, 0x6b, 0x84, 0xfc, 0x94, 0x89, 0xab, 0xec, 0xe5, 0x62, 0xce, 0x15, | ||||||
| 	0x88, 0x1d, 0xa5, 0xde, 0x2e, 0x96, 0xee, 0xf5, 0xcd, 0x28, 0xe8, 0x17, 0xa3, 0xa0, 0x7f, 0x94, | 	0x7d, 0x40, 0xec, 0x38, 0xf3, 0x77, 0xb1, 0x74, 0xaf, 0x67, 0x46, 0x41, 0xaf, 0x1c, 0x05, 0xbd, | ||||||
| 	0x2e, 0x99, 0x1d, 0xa5, 0xf4, 0x4b, 0xe2, 0x4c, 0x33, 0x73, 0x4b, 0xdb, 0xe1, 0xfe, 0x9a, 0xec, | 	0xa3, 0x6c, 0xc1, 0xec, 0x38, 0xa3, 0x5f, 0x12, 0x67, 0x92, 0x9b, 0x5b, 0xda, 0x8a, 0xf6, 0xd7, | ||||||
| 	0x24, 0x1f, 0x48, 0x0c, 0x54, 0xf4, 0x73, 0x62, 0x2b, 0xed, 0x6d, 0xa3, 0xf6, 0xfe, 0x9a, 0xf6, | 	0x64, 0x27, 0xc5, 0x40, 0x62, 0xa0, 0xa2, 0x9f, 0x13, 0x5b, 0x69, 0x7f, 0x1b, 0xb5, 0xf7, 0xd7, | ||||||
| 	0x0c, 0x87, 0x13, 0xb3, 0x15, 0xdc, 0x7e, 0x5b, 0xab, 0xfc, 0x7c, 0xbb, 0x6b, 0xc2, 0x97, 0xc5, | 	0xb4, 0x67, 0x38, 0x9c, 0x98, 0xad, 0xe0, 0xf6, 0xdb, 0x5a, 0x15, 0xe7, 0xdb, 0x59, 0x13, 0xbe, | ||||||
| 	0x9c, 0x62, 0xb6, 0x56, 0xb4, 0x4f, 0x9c, 0xe9, 0x24, 0xc1, 0xd3, 0x69, 0x87, 0x07, 0xeb, 0x3b, | 	0x2c, 0xe7, 0x14, 0xb3, 0xb5, 0xa2, 0x3d, 0xe2, 0x4c, 0xc6, 0x29, 0x9e, 0x4e, 0x2b, 0x3a, 0x58, | ||||||
| 	0xc0, 0xe7, 0xe8, 0x57, 0x80, 0xcc, 0x40, 0x48, 0x1f, 0x13, 0xe7, 0x32, 0xd1, 0x78, 0x58, 0x70, | 	0xdf, 0x01, 0x3e, 0x47, 0xbf, 0x02, 0x64, 0x06, 0x42, 0xfa, 0x98, 0x38, 0x97, 0xa9, 0xc6, 0xc3, | ||||||
| 	0x35, 0x56, 0xf5, 0xf8, 0xb0, 0xe5, 0xf2, 0xcb, 0x44, 0x83, 0x3c, 0xce, 0x07, 0xce, 0x5d, 0x72, | 	0x82, 0xab, 0xb1, 0xaa, 0xc7, 0x87, 0xad, 0x90, 0x5f, 0xa6, 0x1a, 0xe4, 0x49, 0x31, 0x70, 0xee, | ||||||
| 	0x6c, 0xf6, 0x5c, 0x1e, 0x0f, 0x07, 0xb0, 0x9b, 0x6c, 0x38, 0xc0, 0x21, 0x74, 0xd7, 0x6e, 0xce, | 	0x92, 0x63, 0xb3, 0x17, 0xf2, 0x64, 0xd0, 0x87, 0xdd, 0xe4, 0x83, 0x3e, 0x0e, 0xa1, 0xbb, 0x76, | ||||||
| 	0x6f, 0xea, 0xb3, 0xe1, 0x00, 0xed, 0x0f, 0x43, 0x9c, 0x4c, 0x1b, 0xec, 0x0f, 0xc3, 0xc2, 0xfe, | 	0x73, 0x7e, 0x53, 0x9f, 0x0f, 0xfa, 0x68, 0x7f, 0x18, 0xe1, 0x64, 0xda, 0x60, 0x7f, 0x18, 0x95, | ||||||
| 	0x30, 0x44, 0xfb, 0xc3, 0x10, 0xc7, 0xd5, 0x26, 0xfb, 0x52, 0x9f, 0xa1, 0xbe, 0x86, 0xc3, 0xa6, | 	0xf6, 0x87, 0x11, 0xda, 0x1f, 0x46, 0x38, 0xae, 0x36, 0xd9, 0x2f, 0xf5, 0x39, 0xea, 0x6b, 0x38, | ||||||
| 	0xb5, 0x01, 0x25, 0xdc, 0x36, 0x23, 0x47, 0x1d, 0xf8, 0xc3, 0xbb, 0x41, 0x36, 0xf8, 0x9b, 0x07, | 	0x6c, 0x9a, 0x1b, 0x50, 0xc2, 0x6d, 0x33, 0x72, 0xd4, 0x81, 0x3f, 0xbc, 0x1b, 0x64, 0x83, 0xbf, | ||||||
| 	0x3c, 0xf7, 0x57, 0x5a, 0xd2, 0xaf, 0x49, 0xbd, 0x9a, 0x78, 0x77, 0x7d, 0x00, 0x3e, 0xec, 0xa6, | 	0x79, 0xc0, 0x0b, 0x7f, 0xa5, 0x25, 0xfd, 0x9a, 0xd4, 0xab, 0x89, 0x77, 0xd7, 0x07, 0xe0, 0xc3, | ||||||
| 	0xc0, 0x28, 0x9f, 0xfa, 0xa4, 0x96, 0x46, 0x73, 0xbe, 0xd2, 0xa2, 0x7f, 0xe2, 0x5b, 0x80, 0x99, | 	0x6e, 0x0a, 0x8c, 0xf2, 0x69, 0x40, 0x6a, 0x59, 0x3c, 0xe3, 0x2b, 0x2d, 0xfa, 0x27, 0xbe, 0x05, | ||||||
| 	0x77, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7e, 0xe7, 0x47, 0x52, 0x0e, 0x09, 0x00, 0x00, | 	0x98, 0x79, 0x17, 0x00, 0x00, 0xff, 0xff, 0xda, 0x8b, 0x4a, 0x7a, 0x0e, 0x09, 0x00, 0x00, | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								vendor/github.com/golang/protobuf/proto/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/golang/protobuf/proto/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1075,17 +1075,10 @@ func (o *Buffer) enc_map(p *Properties, base structPointer) error { | |||||||
|  |  | ||||||
| func (o *Buffer) enc_exts(p *Properties, base structPointer) error { | func (o *Buffer) enc_exts(p *Properties, base structPointer) error { | ||||||
| 	exts := structPointer_Extensions(base, p.field) | 	exts := structPointer_Extensions(base, p.field) | ||||||
|  | 	if err := encodeExtensions(exts); err != nil { | ||||||
| 	v, mu := exts.extensionsRead() |  | ||||||
| 	if v == nil { |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	mu.Lock() |  | ||||||
| 	defer mu.Unlock() |  | ||||||
| 	if err := encodeExtensionsMap(v); err != nil { |  | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  | 	v, _ := exts.extensionsRead() | ||||||
|  |  | ||||||
| 	return o.enc_map_body(v) | 	return o.enc_map_body(v) | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								vendor/github.com/golang/protobuf/proto/extensions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/golang/protobuf/proto/extensions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -154,7 +154,6 @@ type ExtensionDesc struct { | |||||||
| 	Field         int32       // field number | 	Field         int32       // field number | ||||||
| 	Name          string      // fully-qualified name of extension, for text formatting | 	Name          string      // fully-qualified name of extension, for text formatting | ||||||
| 	Tag           string      // protobuf tag style | 	Tag           string      // protobuf tag style | ||||||
| 	Filename      string      // name of the file in which the extension is defined |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (ed *ExtensionDesc) repeated() bool { | func (ed *ExtensionDesc) repeated() bool { | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								vendor/github.com/golang/protobuf/proto/extensions_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								vendor/github.com/golang/protobuf/proto/extensions_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -40,7 +40,6 @@ import ( | |||||||
|  |  | ||||||
| 	"github.com/golang/protobuf/proto" | 	"github.com/golang/protobuf/proto" | ||||||
| 	pb "github.com/golang/protobuf/proto/testdata" | 	pb "github.com/golang/protobuf/proto/testdata" | ||||||
| 	"golang.org/x/sync/errgroup" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func TestGetExtensionsWithMissingExtensions(t *testing.T) { | func TestGetExtensionsWithMissingExtensions(t *testing.T) { | ||||||
| @@ -507,30 +506,3 @@ func TestClearAllExtensions(t *testing.T) { | |||||||
| 		t.Errorf("proto.HasExtension(%s): got true, want false", proto.MarshalTextString(m)) | 		t.Errorf("proto.HasExtension(%s): got true, want false", proto.MarshalTextString(m)) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func TestMarshalRace(t *testing.T) { |  | ||||||
| 	// unregistered extension |  | ||||||
| 	desc := &proto.ExtensionDesc{ |  | ||||||
| 		ExtendedType:  (*pb.MyMessage)(nil), |  | ||||||
| 		ExtensionType: (*bool)(nil), |  | ||||||
| 		Field:         101010100, |  | ||||||
| 		Name:          "emptyextension", |  | ||||||
| 		Tag:           "varint,0,opt", |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	m := &pb.MyMessage{Count: proto.Int32(4)} |  | ||||||
| 	if err := proto.SetExtension(m, desc, proto.Bool(true)); err != nil { |  | ||||||
| 		t.Errorf("proto.SetExtension(m, desc, true): got error %q, want nil", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	var g errgroup.Group |  | ||||||
| 	for n := 3; n > 0; n-- { |  | ||||||
| 		g.Go(func() error { |  | ||||||
| 			_, err := proto.Marshal(m) |  | ||||||
| 			return err |  | ||||||
| 		}) |  | ||||||
| 	} |  | ||||||
| 	if err := g.Wait(); err != nil { |  | ||||||
| 		t.Fatal(err) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|   | |||||||
							
								
								
									
										46
									
								
								vendor/github.com/golang/protobuf/proto/map_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								vendor/github.com/golang/protobuf/proto/map_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,46 +0,0 @@ | |||||||
| package proto_test |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 	"testing" |  | ||||||
|  |  | ||||||
| 	"github.com/golang/protobuf/proto" |  | ||||||
| 	ppb "github.com/golang/protobuf/proto/proto3_proto" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| func marshalled() []byte { |  | ||||||
| 	m := &ppb.IntMaps{} |  | ||||||
| 	for i := 0; i < 1000; i++ { |  | ||||||
| 		m.Maps = append(m.Maps, &ppb.IntMap{ |  | ||||||
| 			Rtt: map[int32]int32{1: 2}, |  | ||||||
| 		}) |  | ||||||
| 	} |  | ||||||
| 	b, err := proto.Marshal(m) |  | ||||||
| 	if err != nil { |  | ||||||
| 		panic(fmt.Sprintf("Can't marshal %+v: %v", m, err)) |  | ||||||
| 	} |  | ||||||
| 	return b |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func BenchmarkConcurrentMapUnmarshal(b *testing.B) { |  | ||||||
| 	in := marshalled() |  | ||||||
| 	b.RunParallel(func(pb *testing.PB) { |  | ||||||
| 		for pb.Next() { |  | ||||||
| 			var out ppb.IntMaps |  | ||||||
| 			if err := proto.Unmarshal(in, &out); err != nil { |  | ||||||
| 				b.Errorf("Can't unmarshal ppb.IntMaps: %v", err) |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	}) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func BenchmarkSequentialMapUnmarshal(b *testing.B) { |  | ||||||
| 	in := marshalled() |  | ||||||
| 	b.ResetTimer() |  | ||||||
| 	for i := 0; i < b.N; i++ { |  | ||||||
| 		var out ppb.IntMaps |  | ||||||
| 		if err := proto.Unmarshal(in, &out); err != nil { |  | ||||||
| 			b.Errorf("Can't unmarshal ppb.IntMaps: %v", err) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
							
								
								
									
										222
									
								
								vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										222
									
								
								vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -12,8 +12,6 @@ It has these top-level messages: | |||||||
| 	Message | 	Message | ||||||
| 	Nested | 	Nested | ||||||
| 	MessageWithMap | 	MessageWithMap | ||||||
| 	IntMap |  | ||||||
| 	IntMaps |  | ||||||
| */ | */ | ||||||
| package proto3_proto | package proto3_proto | ||||||
|  |  | ||||||
| @@ -30,9 +28,7 @@ var _ = math.Inf | |||||||
|  |  | ||||||
| // This is a compile-time assertion to ensure that this generated file | // This is a compile-time assertion to ensure that this generated file | ||||||
| // is compatible with the proto package it is being compiled against. | // is compatible with the proto package it is being compiled against. | ||||||
| // A compilation error at this line likely means your copy of the | const _ = proto.ProtoPackageIsVersion1 | ||||||
| // proto package needs to be updated. |  | ||||||
| const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package |  | ||||||
|  |  | ||||||
| type Message_Humour int32 | type Message_Humour int32 | ||||||
|  |  | ||||||
| @@ -69,10 +65,10 @@ type Message struct { | |||||||
| 	ResultCount  int64                            `protobuf:"varint,7,opt,name=result_count,json=resultCount" json:"result_count,omitempty"` | 	ResultCount  int64                            `protobuf:"varint,7,opt,name=result_count,json=resultCount" json:"result_count,omitempty"` | ||||||
| 	TrueScotsman bool                             `protobuf:"varint,8,opt,name=true_scotsman,json=trueScotsman" json:"true_scotsman,omitempty"` | 	TrueScotsman bool                             `protobuf:"varint,8,opt,name=true_scotsman,json=trueScotsman" json:"true_scotsman,omitempty"` | ||||||
| 	Score        float32                          `protobuf:"fixed32,9,opt,name=score" json:"score,omitempty"` | 	Score        float32                          `protobuf:"fixed32,9,opt,name=score" json:"score,omitempty"` | ||||||
| 	Key          []uint64                         `protobuf:"varint,5,rep,packed,name=key" json:"key,omitempty"` | 	Key          []uint64                         `protobuf:"varint,5,rep,name=key" json:"key,omitempty"` | ||||||
| 	ShortKey     []int32                          `protobuf:"varint,19,rep,packed,name=short_key,json=shortKey" json:"short_key,omitempty"` | 	ShortKey     []int32                          `protobuf:"varint,19,rep,name=short_key,json=shortKey" json:"short_key,omitempty"` | ||||||
| 	Nested       *Nested                          `protobuf:"bytes,6,opt,name=nested" json:"nested,omitempty"` | 	Nested       *Nested                          `protobuf:"bytes,6,opt,name=nested" json:"nested,omitempty"` | ||||||
| 	RFunny       []Message_Humour                 `protobuf:"varint,16,rep,packed,name=r_funny,json=rFunny,enum=proto3_proto.Message_Humour" json:"r_funny,omitempty"` | 	RFunny       []Message_Humour                 `protobuf:"varint,16,rep,name=r_funny,json=rFunny,enum=proto3_proto.Message_Humour" json:"r_funny,omitempty"` | ||||||
| 	Terrain      map[string]*Nested               `protobuf:"bytes,10,rep,name=terrain" json:"terrain,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` | 	Terrain      map[string]*Nested               `protobuf:"bytes,10,rep,name=terrain" json:"terrain,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` | ||||||
| 	Proto2Field  *testdata.SubDefaults            `protobuf:"bytes,11,opt,name=proto2_field,json=proto2Field" json:"proto2_field,omitempty"` | 	Proto2Field  *testdata.SubDefaults            `protobuf:"bytes,11,opt,name=proto2_field,json=proto2Field" json:"proto2_field,omitempty"` | ||||||
| 	Proto2Value  map[string]*testdata.SubDefaults `protobuf:"bytes,13,rep,name=proto2_value,json=proto2Value" json:"proto2_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` | 	Proto2Value  map[string]*testdata.SubDefaults `protobuf:"bytes,13,rep,name=proto2_value,json=proto2Value" json:"proto2_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` | ||||||
| @@ -87,69 +83,6 @@ func (m *Message) String() string            { return proto.CompactTextString(m) | |||||||
| func (*Message) ProtoMessage()               {} | func (*Message) ProtoMessage()               {} | ||||||
| func (*Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } | func (*Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } | ||||||
|  |  | ||||||
| func (m *Message) GetName() string { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Name |  | ||||||
| 	} |  | ||||||
| 	return "" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *Message) GetHilarity() Message_Humour { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Hilarity |  | ||||||
| 	} |  | ||||||
| 	return Message_UNKNOWN |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *Message) GetHeightInCm() uint32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.HeightInCm |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *Message) GetData() []byte { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Data |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *Message) GetResultCount() int64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.ResultCount |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *Message) GetTrueScotsman() bool { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.TrueScotsman |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *Message) GetScore() float32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Score |  | ||||||
| 	} |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *Message) GetKey() []uint64 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Key |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *Message) GetShortKey() []int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.ShortKey |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *Message) GetNested() *Nested { | func (m *Message) GetNested() *Nested { | ||||||
| 	if m != nil { | 	if m != nil { | ||||||
| 		return m.Nested | 		return m.Nested | ||||||
| @@ -157,13 +90,6 @@ func (m *Message) GetNested() *Nested { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *Message) GetRFunny() []Message_Humour { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.RFunny |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *Message) GetTerrain() map[string]*Nested { | func (m *Message) GetTerrain() map[string]*Nested { | ||||||
| 	if m != nil { | 	if m != nil { | ||||||
| 		return m.Terrain | 		return m.Terrain | ||||||
| @@ -223,20 +149,6 @@ func (m *Nested) String() string            { return proto.CompactTextString(m) | |||||||
| func (*Nested) ProtoMessage()               {} | func (*Nested) ProtoMessage()               {} | ||||||
| func (*Nested) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } | func (*Nested) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } | ||||||
|  |  | ||||||
| func (m *Nested) GetBunny() string { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Bunny |  | ||||||
| 	} |  | ||||||
| 	return "" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *Nested) GetCute() bool { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Cute |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type MessageWithMap struct { | type MessageWithMap struct { | ||||||
| 	ByteMapping map[bool][]byte `protobuf:"bytes,1,rep,name=byte_mapping,json=byteMapping" json:"byte_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value,proto3"` | 	ByteMapping map[bool][]byte `protobuf:"bytes,1,rep,name=byte_mapping,json=byteMapping" json:"byte_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value,proto3"` | ||||||
| } | } | ||||||
| @@ -253,95 +165,55 @@ func (m *MessageWithMap) GetByteMapping() map[bool][]byte { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| type IntMap struct { |  | ||||||
| 	Rtt map[int32]int32 `protobuf:"bytes,1,rep,name=rtt" json:"rtt,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *IntMap) Reset()                    { *m = IntMap{} } |  | ||||||
| func (m *IntMap) String() string            { return proto.CompactTextString(m) } |  | ||||||
| func (*IntMap) ProtoMessage()               {} |  | ||||||
| func (*IntMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } |  | ||||||
|  |  | ||||||
| func (m *IntMap) GetRtt() map[int32]int32 { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Rtt |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type IntMaps struct { |  | ||||||
| 	Maps []*IntMap `protobuf:"bytes,1,rep,name=maps" json:"maps,omitempty"` |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (m *IntMaps) Reset()                    { *m = IntMaps{} } |  | ||||||
| func (m *IntMaps) String() string            { return proto.CompactTextString(m) } |  | ||||||
| func (*IntMaps) ProtoMessage()               {} |  | ||||||
| func (*IntMaps) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } |  | ||||||
|  |  | ||||||
| func (m *IntMaps) GetMaps() []*IntMap { |  | ||||||
| 	if m != nil { |  | ||||||
| 		return m.Maps |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func init() { | func init() { | ||||||
| 	proto.RegisterType((*Message)(nil), "proto3_proto.Message") | 	proto.RegisterType((*Message)(nil), "proto3_proto.Message") | ||||||
| 	proto.RegisterType((*Nested)(nil), "proto3_proto.Nested") | 	proto.RegisterType((*Nested)(nil), "proto3_proto.Nested") | ||||||
| 	proto.RegisterType((*MessageWithMap)(nil), "proto3_proto.MessageWithMap") | 	proto.RegisterType((*MessageWithMap)(nil), "proto3_proto.MessageWithMap") | ||||||
| 	proto.RegisterType((*IntMap)(nil), "proto3_proto.IntMap") |  | ||||||
| 	proto.RegisterType((*IntMaps)(nil), "proto3_proto.IntMaps") |  | ||||||
| 	proto.RegisterEnum("proto3_proto.Message_Humour", Message_Humour_name, Message_Humour_value) | 	proto.RegisterEnum("proto3_proto.Message_Humour", Message_Humour_name, Message_Humour_value) | ||||||
| } | } | ||||||
|  |  | ||||||
| func init() { proto.RegisterFile("proto3_proto/proto3.proto", fileDescriptor0) } |  | ||||||
|  |  | ||||||
| var fileDescriptor0 = []byte{ | var fileDescriptor0 = []byte{ | ||||||
| 	// 733 bytes of a gzipped FileDescriptorProto | 	// 669 bytes of a gzipped FileDescriptorProto | ||||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x53, 0x6d, 0x6f, 0xf3, 0x34, | 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x53, 0x6d, 0x6f, 0xd3, 0x3a, | ||||||
| 	0x14, 0x25, 0x4d, 0x5f, 0xd2, 0x9b, 0x74, 0x0b, 0x5e, 0x91, 0xbc, 0x02, 0x52, 0x28, 0x12, 0x8a, | 	0x18, 0xbd, 0x7d, 0x4f, 0x9f, 0xa4, 0x5b, 0xae, 0xb7, 0x2b, 0x79, 0xbd, 0x7c, 0x18, 0x45, 0x42, | ||||||
| 	0x78, 0x49, 0xa1, 0xd3, 0xd0, 0x84, 0x10, 0x68, 0x1b, 0x9b, 0xa8, 0xd6, 0x95, 0xca, 0xdd, 0x98, | 	0x13, 0x2f, 0x19, 0x14, 0x21, 0x4d, 0x08, 0x81, 0xb6, 0xb1, 0x89, 0x6a, 0x5d, 0xa9, 0xdc, 0x8d, | ||||||
| 	0xf8, 0x14, 0xa5, 0xad, 0xdb, 0x46, 0x34, 0x4e, 0x49, 0x1c, 0xa4, 0xfc, 0x1d, 0xfe, 0x28, 0x8f, | 	0x89, 0x4f, 0x51, 0xd2, 0xba, 0x6d, 0x44, 0xe3, 0x54, 0x89, 0x83, 0x94, 0xbf, 0xc3, 0x1f, 0x05, | ||||||
| 	0x6c, 0xa7, 0x5d, 0x36, 0x65, 0xcf, 0xf3, 0x29, 0xf6, 0xf1, 0xb9, 0xf7, 0x9c, 0x1c, 0x5f, 0xc3, | 	0xbf, 0xa4, 0x5d, 0x36, 0x75, 0xf0, 0x29, 0xf6, 0x79, 0xce, 0xf1, 0xf3, 0xe4, 0xf8, 0x18, 0xf6, | ||||||
| 	0xe9, 0x2e, 0x89, 0x79, 0x7c, 0xe6, 0xcb, 0xcf, 0x40, 0x6d, 0x3c, 0xf9, 0x41, 0x56, 0xf9, 0xa8, | 	0x96, 0x71, 0xc4, 0xa3, 0x37, 0xae, 0xfa, 0x1c, 0xea, 0x8d, 0xa3, 0x3e, 0xc8, 0x2a, 0x96, 0xda, | ||||||
| 	0x77, 0xba, 0x8e, 0xe3, 0xf5, 0x96, 0x2a, 0xca, 0x3c, 0x5b, 0x0d, 0x02, 0x96, 0x2b, 0x62, 0xef, | 	0x7b, 0xb3, 0x28, 0x9a, 0x2d, 0xa8, 0xa6, 0xf8, 0xe9, 0xf4, 0xd0, 0x63, 0x99, 0x26, 0xb6, 0x77, | ||||||
| 	0x84, 0xd3, 0x94, 0x2f, 0x03, 0x1e, 0x0c, 0xc4, 0x42, 0x81, 0xfd, 0xff, 0x5b, 0xd0, 0xba, 0xa7, | 	0x38, 0x4d, 0xf8, 0xc4, 0xe3, 0xde, 0xa1, 0x5c, 0x68, 0xb0, 0xf3, 0xab, 0x01, 0x8d, 0x4b, 0x9a, | ||||||
| 	0x69, 0x1a, 0xac, 0x29, 0x42, 0x50, 0x67, 0x41, 0x44, 0xb1, 0xe6, 0x68, 0x6e, 0x9b, 0xc8, 0x35, | 	0x24, 0xde, 0x8c, 0x22, 0x04, 0x55, 0xe6, 0x85, 0x14, 0x97, 0xf6, 0x4b, 0x07, 0x4d, 0xa2, 0xd6, | ||||||
| 	0xba, 0x00, 0x63, 0x13, 0x6e, 0x83, 0x24, 0xe4, 0x39, 0xae, 0x39, 0x9a, 0x7b, 0x34, 0xfc, 0xcc, | 	0xe8, 0x08, 0x8c, 0x79, 0xb0, 0xf0, 0xe2, 0x80, 0x67, 0xb8, 0x2c, 0xf0, 0xad, 0xee, 0x23, 0xa7, | ||||||
| 	0x2b, 0x0b, 0x7a, 0x45, 0xb1, 0xf7, 0x7b, 0x16, 0xc5, 0x59, 0x42, 0x0e, 0x6c, 0xe4, 0x80, 0xb5, | 	0xd8, 0xd0, 0xc9, 0xc5, 0xce, 0xe7, 0x34, 0x8c, 0xd2, 0x98, 0xac, 0xd9, 0x68, 0x1f, 0xac, 0x39, | ||||||
| 	0xa1, 0xe1, 0x7a, 0xc3, 0xfd, 0x90, 0xf9, 0x8b, 0x08, 0xeb, 0x8e, 0xe6, 0x76, 0x08, 0x28, 0x6c, | 	0x0d, 0x66, 0x73, 0xee, 0x06, 0xcc, 0x1d, 0x87, 0xb8, 0x22, 0xd4, 0x2d, 0x02, 0x1a, 0xeb, 0xb1, | ||||||
| 	0xc4, 0xae, 0x23, 0xa1, 0x27, 0xec, 0xe0, 0xba, 0xa3, 0xb9, 0x16, 0x91, 0x6b, 0xf4, 0x05, 0x58, | 	0xd3, 0x50, 0xf6, 0x93, 0xe3, 0xe0, 0xaa, 0xa8, 0x58, 0x44, 0xad, 0xd1, 0x63, 0xb0, 0x62, 0x9a, | ||||||
| 	0x09, 0x4d, 0xb3, 0x2d, 0xf7, 0x17, 0x71, 0xc6, 0x38, 0x6e, 0x39, 0x9a, 0xab, 0x13, 0x53, 0x61, | 	0xa4, 0x0b, 0xee, 0x8e, 0xa3, 0x94, 0x71, 0xdc, 0x10, 0xb5, 0x0a, 0x31, 0x35, 0x76, 0x2a, 0x21, | ||||||
| 	0xd7, 0x02, 0x42, 0x5f, 0x42, 0x87, 0x27, 0x19, 0xf5, 0xd3, 0x45, 0xcc, 0xd3, 0x28, 0x60, 0xd8, | 	0xf4, 0x04, 0x5a, 0x3c, 0x4e, 0xa9, 0x9b, 0x8c, 0x23, 0x9e, 0x84, 0x1e, 0xc3, 0x86, 0xe0, 0x18, | ||||||
| 	0x70, 0x34, 0xd7, 0x20, 0x96, 0x00, 0x67, 0x05, 0x86, 0xba, 0xd0, 0x48, 0x17, 0x71, 0x42, 0x71, | 	0xc4, 0x92, 0xe0, 0x28, 0xc7, 0xd0, 0x2e, 0xd4, 0x44, 0x3d, 0xa6, 0xb8, 0x29, 0x8a, 0x65, 0xa2, | ||||||
| 	0xdb, 0xd1, 0xdc, 0x1a, 0x51, 0x1b, 0x64, 0x83, 0xfe, 0x37, 0xcd, 0x71, 0xc3, 0xd1, 0xdd, 0x3a, | 	0x37, 0xc8, 0x86, 0xca, 0x77, 0x9a, 0xe1, 0xda, 0x7e, 0xe5, 0xa0, 0x4a, 0xe4, 0x12, 0xfd, 0x0f, | ||||||
| 	0x11, 0x4b, 0xf4, 0x29, 0xb4, 0xd3, 0x4d, 0x9c, 0x70, 0x5f, 0xe0, 0x27, 0x8e, 0xee, 0x36, 0x88, | 	0xcd, 0x64, 0x1e, 0xc5, 0xdc, 0x95, 0xf8, 0x8e, 0xc0, 0x6b, 0xc4, 0x50, 0xc0, 0x85, 0x28, 0xbe, | ||||||
| 	0x21, 0x81, 0x3b, 0x9a, 0xa3, 0x6f, 0xa1, 0xc9, 0x68, 0xca, 0xe9, 0x12, 0x37, 0x1d, 0xcd, 0x35, | 	0x80, 0x3a, 0x13, 0x56, 0xd1, 0x09, 0xae, 0x8b, 0x53, 0xcc, 0xee, 0xee, 0xdd, 0x5f, 0x1f, 0xa8, | ||||||
| 	0x87, 0xdd, 0x97, 0xbf, 0x3e, 0x91, 0x67, 0xa4, 0xe0, 0xa0, 0x73, 0x68, 0x25, 0xfe, 0x2a, 0x63, | 	0x1a, 0xc9, 0x39, 0xe8, 0x2d, 0x34, 0x62, 0x77, 0x9a, 0x32, 0x96, 0x61, 0x5b, 0x1c, 0xf4, 0x37, | ||||||
| 	0x2c, 0xc7, 0xb6, 0xa3, 0x7f, 0x30, 0xa9, 0x66, 0x72, 0x2b, 0xb8, 0xe8, 0x67, 0x68, 0x71, 0x9a, | 	0xa7, 0xea, 0xf1, 0xb9, 0xe4, 0xa2, 0xf7, 0xd0, 0xe0, 0x34, 0x8e, 0xbd, 0x80, 0x61, 0x10, 0x32, | ||||||
| 	0x24, 0x41, 0xc8, 0x30, 0x38, 0xba, 0x6b, 0x0e, 0xfb, 0xd5, 0x65, 0x0f, 0x8a, 0x74, 0xc3, 0x78, | 	0xb3, 0xdb, 0xd9, 0x2c, 0xbb, 0xd2, 0xa4, 0x33, 0xc6, 0xe3, 0x8c, 0xac, 0x24, 0xe2, 0x7e, 0xf4, | ||||||
| 	0x92, 0x93, 0x7d, 0x09, 0xba, 0x00, 0x75, 0xff, 0x43, 0x7f, 0x15, 0xd2, 0xed, 0x12, 0x9b, 0xd2, | 	0xfd, 0x77, 0xdd, 0x69, 0x40, 0x17, 0x13, 0x6c, 0xaa, 0x41, 0xff, 0x73, 0x56, 0x77, 0xed, 0x8c, | ||||||
| 	0xe8, 0x27, 0xde, 0xfe, 0xae, 0xbd, 0x59, 0x36, 0xff, 0x8d, 0xae, 0x82, 0x6c, 0xcb, 0x53, 0x62, | 	0x52, 0xff, 0x13, 0x9d, 0x7a, 0xc2, 0xbd, 0x84, 0x98, 0x9a, 0x7a, 0x2e, 0x99, 0xa8, 0xb7, 0x56, | ||||||
| 	0x2a, 0xea, 0xad, 0x60, 0xa2, 0xd1, 0xa1, 0xf2, 0xdf, 0x60, 0x9b, 0x51, 0xdc, 0x91, 0xe2, 0x5f, | 	0xfe, 0xf0, 0x16, 0x29, 0xc5, 0x2d, 0xd5, 0xfc, 0xe9, 0xe6, 0xe6, 0x43, 0xc5, 0xfc, 0x2a, 0x89, | ||||||
| 	0x55, 0x8b, 0x4f, 0x25, 0xf3, 0x4f, 0x41, 0x54, 0x06, 0x8a, 0x56, 0x12, 0x41, 0xdf, 0x83, 0x11, | 	0x7a, 0x80, 0xfc, 0x28, 0x85, 0xa0, 0x57, 0x60, 0x88, 0x98, 0xf1, 0x79, 0xc0, 0x66, 0x78, 0x2b, | ||||||
| 	0xb0, 0x9c, 0x6f, 0x42, 0xb6, 0xc6, 0x47, 0x45, 0x52, 0x6a, 0x0e, 0xbd, 0xfd, 0x1c, 0x7a, 0x97, | 	0x77, 0x4a, 0xe7, 0xd0, 0x59, 0xe5, 0xd0, 0x39, 0x66, 0x19, 0x59, 0xb3, 0x84, 0x57, 0xa6, 0xb8, | ||||||
| 	0x2c, 0x27, 0x07, 0x16, 0x3a, 0x07, 0x33, 0x0a, 0x58, 0xee, 0xcb, 0x5d, 0x8a, 0x8f, 0xa5, 0x76, | 	0xa5, 0xcc, 0x55, 0xbb, 0x04, 0x6f, 0xab, 0xde, 0x9b, 0x45, 0x20, 0x89, 0x57, 0x8a, 0x27, 0x64, | ||||||
| 	0x75, 0x11, 0x08, 0xe2, 0x83, 0xe4, 0xa1, 0x73, 0x80, 0x34, 0x9b, 0x47, 0xca, 0x14, 0xfe, 0xb8, | 	0x90, 0xa4, 0x7e, 0xa8, 0x87, 0xc2, 0xff, 0xe6, 0xff, 0xba, 0x69, 0x62, 0x52, 0x20, 0xa2, 0xd7, | ||||||
| 	0xf8, 0xd7, 0x2a, 0xc7, 0xa4, 0x44, 0x44, 0x3f, 0x80, 0xb1, 0xd8, 0x84, 0xdb, 0x65, 0x42, 0x19, | 	0x60, 0x8c, 0x45, 0x2e, 0x27, 0x31, 0x65, 0x18, 0xa9, 0x56, 0x0f, 0x88, 0xd6, 0xb4, 0xf6, 0x10, | ||||||
| 	0x46, 0x52, 0xea, 0x8d, 0xa2, 0x03, 0xad, 0x37, 0x05, 0xab, 0x1c, 0xf8, 0x7e, 0x72, 0xd4, 0xd3, | 	0xac, 0xa2, 0xe1, 0xab, 0xe4, 0xe8, 0xa7, 0xa1, 0x92, 0xf3, 0x0c, 0x6a, 0xda, 0xb8, 0xf2, 0x1f, | ||||||
| 	0x90, 0x93, 0xf3, 0x35, 0x34, 0x54, 0x70, 0xb5, 0xf7, 0xcc, 0x86, 0xa2, 0xfc, 0x54, 0xbb, 0xd0, | 	0xb2, 0xa1, 0x29, 0xef, 0xca, 0x47, 0xa5, 0xf6, 0x35, 0xd8, 0xf7, 0x5d, 0xdc, 0x70, 0xea, 0xf3, | ||||||
| 	0x7a, 0x8f, 0x60, 0xbf, 0x4e, 0xb1, 0xa2, 0xeb, 0x37, 0x2f, 0xbb, 0xbe, 0x71, 0x91, 0xcf, 0x6d, | 	0xbb, 0xa7, 0x3e, 0x70, 0x91, 0xb7, 0xc7, 0x76, 0x3e, 0x42, 0x5d, 0x07, 0x0a, 0x99, 0xd0, 0xb8, | ||||||
| 	0xfb, 0xbf, 0x42, 0x53, 0x0d, 0x14, 0x32, 0xa1, 0xf5, 0x38, 0xb9, 0x9b, 0xfc, 0xf1, 0x34, 0xb1, | 	0x1e, 0x5c, 0x0c, 0xbe, 0xdc, 0x0c, 0xec, 0x7f, 0x90, 0x01, 0xd5, 0xe1, 0xf5, 0x60, 0x64, 0x97, | ||||||
| 	0x3f, 0x42, 0x06, 0xd4, 0xa7, 0x8f, 0x93, 0x99, 0xad, 0xa1, 0x0e, 0xb4, 0x67, 0xe3, 0xcb, 0xe9, | 	0x50, 0x0b, 0x9a, 0xa3, 0xfe, 0xf1, 0x70, 0x74, 0xd5, 0x3b, 0xbd, 0xb0, 0xcb, 0x68, 0x1b, 0xcc, | ||||||
| 	0xec, 0x61, 0x74, 0x7d, 0x67, 0xd7, 0xd0, 0x31, 0x98, 0x57, 0xa3, 0xf1, 0xd8, 0xbf, 0xba, 0x1c, | 	0x93, 0x5e, 0xbf, 0xef, 0x9e, 0x1c, 0xf7, 0xfa, 0x67, 0xdf, 0xec, 0x4a, 0xa7, 0x0b, 0x75, 0x3d, | ||||||
| 	0x8d, 0x6f, 0xfe, 0xb2, 0xf5, 0xfe, 0x10, 0x9a, 0xca, 0xac, 0x78, 0x33, 0x73, 0x39, 0xbe, 0xca, | 	0xac, 0x7c, 0x33, 0xbe, 0x8a, 0xaf, 0x9e, 0x47, 0x6f, 0xe4, 0x2b, 0x1d, 0xa7, 0x5c, 0x0f, 0x64, | ||||||
| 	0x8f, 0xda, 0x88, 0x57, 0xba, 0xc8, 0xb8, 0x32, 0x64, 0x10, 0xb9, 0xee, 0xff, 0xa7, 0xc1, 0x51, | 	0x10, 0xb5, 0xee, 0xfc, 0x2c, 0xc1, 0x56, 0xee, 0xd9, 0x4d, 0xc0, 0xe7, 0x97, 0xde, 0x12, 0x09, | ||||||
| 	0x91, 0xd9, 0x53, 0xc8, 0x37, 0xf7, 0xc1, 0x0e, 0x4d, 0xc1, 0x9a, 0xe7, 0x9c, 0xfa, 0x51, 0xb0, | 	0xc3, 0xfc, 0x8c, 0x53, 0x37, 0xf4, 0x96, 0x4b, 0x99, 0x83, 0x92, 0xf2, 0xf9, 0xe5, 0x46, 0x9f, | ||||||
| 	0xdb, 0x89, 0x39, 0xd0, 0x64, 0xce, 0xdf, 0x55, 0xe6, 0x5c, 0xd4, 0x78, 0x57, 0x39, 0xa7, 0xf7, | 	0x73, 0x8d, 0x73, 0x22, 0x04, 0x97, 0x9a, 0x9f, 0xa7, 0xca, 0xbf, 0x45, 0xda, 0x1f, 0xc0, 0xbe, | ||||||
| 	0x8a, 0x5f, 0x4c, 0xd5, 0xfc, 0x19, 0xe9, 0xfd, 0x02, 0xf6, 0x6b, 0x42, 0x39, 0x30, 0x43, 0x05, | 	0x4f, 0x28, 0x1a, 0x66, 0x68, 0xc3, 0x76, 0x8b, 0x86, 0x59, 0x05, 0x67, 0xfc, 0xba, 0x6e, 0xfd, | ||||||
| 	0xd6, 0x2d, 0x07, 0x66, 0x95, 0x93, 0xf9, 0x07, 0x9a, 0x23, 0xc6, 0x85, 0xb7, 0x01, 0xe8, 0x09, | 	0x3b, 0x00, 0x00, 0xff, 0xff, 0x8b, 0x40, 0x3c, 0xbe, 0x3c, 0x05, 0x00, 0x00, | ||||||
| 	0xe7, 0x85, 0xa5, 0xcf, 0x5f, 0x5a, 0x52, 0x14, 0x8f, 0x70, 0xae, 0x2c, 0x08, 0x66, 0xef, 0x47, |  | ||||||
| 	0x30, 0xf6, 0x40, 0x59, 0xb2, 0x51, 0x21, 0xd9, 0x28, 0x4b, 0x9e, 0x41, 0x4b, 0xf5, 0x4b, 0x91, |  | ||||||
| 	0x0b, 0xf5, 0x28, 0xd8, 0xa5, 0x85, 0x68, 0xb7, 0x4a, 0x94, 0x48, 0xc6, 0xbc, 0xa9, 0x8e, 0xde, |  | ||||||
| 	0x05, 0x00, 0x00, 0xff, 0xff, 0x75, 0x38, 0xad, 0x84, 0xe4, 0x05, 0x00, 0x00, |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -76,12 +76,3 @@ message Nested { | |||||||
| message MessageWithMap { | message MessageWithMap { | ||||||
|   map<bool, bytes> byte_mapping = 1; |   map<bool, bytes> byte_mapping = 1; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| message IntMap { |  | ||||||
|   map<int32, int32> rtt = 1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| message IntMaps { |  | ||||||
|   repeated IntMap maps = 1; |  | ||||||
| } |  | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								vendor/github.com/golang/protobuf/proto/proto3_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/golang/protobuf/proto/proto3_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -93,16 +93,6 @@ func TestRoundTripProto3(t *testing.T) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func TestGettersForBasicTypesExist(t *testing.T) { |  | ||||||
| 	var m pb.Message |  | ||||||
| 	if got := m.GetNested().GetBunny(); got != "" { |  | ||||||
| 		t.Errorf("m.GetNested().GetBunny() = %q, want empty string", got) |  | ||||||
| 	} |  | ||||||
| 	if got := m.GetNested().GetCute(); got { |  | ||||||
| 		t.Errorf("m.GetNested().GetCute() = %t, want false", got) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestProto3SetDefaults(t *testing.T) { | func TestProto3SetDefaults(t *testing.T) { | ||||||
| 	in := &pb.Message{ | 	in := &pb.Message{ | ||||||
| 		Terrain: map[string]*pb.Nested{ | 		Terrain: map[string]*pb.Nested{ | ||||||
|   | |||||||
							
								
								
									
										855
									
								
								vendor/github.com/golang/protobuf/proto/testdata/test.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										855
									
								
								vendor/github.com/golang/protobuf/proto/testdata/test.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6
									
								
								vendor/github.com/golang/protobuf/proto/text_parser.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/golang/protobuf/proto/text_parser.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -592,11 +592,7 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { | |||||||
| 			props = oop.Prop | 			props = oop.Prop | ||||||
| 			nv := reflect.New(oop.Type.Elem()) | 			nv := reflect.New(oop.Type.Elem()) | ||||||
| 			dst = nv.Elem().Field(0) | 			dst = nv.Elem().Field(0) | ||||||
| 			field := sv.Field(oop.Field) | 			sv.Field(oop.Field).Set(nv) | ||||||
| 			if !field.IsNil() { |  | ||||||
| 				return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name) |  | ||||||
| 			} |  | ||||||
| 			field.Set(nv) |  | ||||||
| 		} | 		} | ||||||
| 		if !dst.IsValid() { | 		if !dst.IsValid() { | ||||||
| 			return p.errorf("unknown field name %q in %v", name, st) | 			return p.errorf("unknown field name %q in %v", name, st) | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								vendor/github.com/golang/protobuf/proto/text_parser_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/golang/protobuf/proto/text_parser_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -635,17 +635,6 @@ func TestOneofParsing(t *testing.T) { | |||||||
| 	if !Equal(m, want) { | 	if !Equal(m, want) { | ||||||
| 		t.Errorf("\n got %v\nwant %v", m, want) | 		t.Errorf("\n got %v\nwant %v", m, want) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	const inOverwrite = `name:"Shrek" number:42` |  | ||||||
| 	m = new(Communique) |  | ||||||
| 	testErr := "line 1.13: field 'number' would overwrite already parsed oneof 'Union'" |  | ||||||
| 	if err := UnmarshalText(inOverwrite, m); err == nil { |  | ||||||
| 		t.Errorf("TestOneofParsing: Didn't get expected error: %v", testErr) |  | ||||||
| 	} else if err.Error() != testErr { |  | ||||||
| 		t.Errorf("TestOneofParsing: Incorrect error.\nHave: %v\nWant: %v", |  | ||||||
| 			err.Error(), testErr) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| var benchInput string | var benchInput string | ||||||
|   | |||||||
							
								
								
									
										309
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										309
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -900,8 +900,19 @@ type FileOptions struct { | |||||||
| 	// generated to contain the file's getDescriptor() method as well as any | 	// generated to contain the file's getDescriptor() method as well as any | ||||||
| 	// top-level extensions defined in the file. | 	// top-level extensions defined in the file. | ||||||
| 	JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"` | 	JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"` | ||||||
| 	// This option does nothing. | 	// If set true, then the Java code generator will generate equals() and | ||||||
| 	JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` | 	// hashCode() methods for all messages defined in the .proto file. | ||||||
|  | 	// This increases generated code size, potentially substantially for large | ||||||
|  | 	// protos, which may harm a memory-constrained application. | ||||||
|  | 	// - In the full runtime this is a speed optimization, as the | ||||||
|  | 	// AbstractMessage base class includes reflection-based implementations of | ||||||
|  | 	// these methods. | ||||||
|  | 	// - In the lite runtime, setting this option changes the semantics of | ||||||
|  | 	// equals() and hashCode() to more closely match those of the full runtime; | ||||||
|  | 	// the generated methods compute their results based on field values rather | ||||||
|  | 	// than object identity. (Implementations should not assume that hashcodes | ||||||
|  | 	// will be consistent across runtimes or versions of the protocol compiler.) | ||||||
|  | 	JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash,def=0" json:"java_generate_equals_and_hash,omitempty"` | ||||||
| 	// If set true, then the Java2 code generator will generate code that | 	// If set true, then the Java2 code generator will generate code that | ||||||
| 	// throws an exception whenever an attempt is made to assign a non-UTF-8 | 	// throws an exception whenever an attempt is made to assign a non-UTF-8 | ||||||
| 	// byte sequence to a string field. | 	// byte sequence to a string field. | ||||||
| @@ -962,6 +973,7 @@ func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange { | |||||||
| } | } | ||||||
|  |  | ||||||
| const Default_FileOptions_JavaMultipleFiles bool = false | const Default_FileOptions_JavaMultipleFiles bool = false | ||||||
|  | const Default_FileOptions_JavaGenerateEqualsAndHash bool = false | ||||||
| const Default_FileOptions_JavaStringCheckUtf8 bool = false | const Default_FileOptions_JavaStringCheckUtf8 bool = false | ||||||
| const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED | const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED | ||||||
| const Default_FileOptions_CcGenericServices bool = false | const Default_FileOptions_CcGenericServices bool = false | ||||||
| @@ -995,7 +1007,7 @@ func (m *FileOptions) GetJavaGenerateEqualsAndHash() bool { | |||||||
| 	if m != nil && m.JavaGenerateEqualsAndHash != nil { | 	if m != nil && m.JavaGenerateEqualsAndHash != nil { | ||||||
| 		return *m.JavaGenerateEqualsAndHash | 		return *m.JavaGenerateEqualsAndHash | ||||||
| 	} | 	} | ||||||
| 	return false | 	return Default_FileOptions_JavaGenerateEqualsAndHash | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *FileOptions) GetJavaStringCheckUtf8() bool { | func (m *FileOptions) GetJavaStringCheckUtf8() bool { | ||||||
| @@ -1225,7 +1237,7 @@ type FieldOptions struct { | |||||||
| 	// | 	// | ||||||
| 	// | 	// | ||||||
| 	// Note that implementations may choose not to check required fields within | 	// Note that implementations may choose not to check required fields within | ||||||
| 	// a lazy sub-message.  That is, calling IsInitialized() on the outer message | 	// a lazy sub-message.  That is, calling IsInitialized() on the outher message | ||||||
| 	// may return true even if the inner message has missing required fields. | 	// may return true even if the inner message has missing required fields. | ||||||
| 	// This is necessary because otherwise the inner message would have to be | 	// This is necessary because otherwise the inner message would have to be | ||||||
| 	// parsed in order to perform the check, defeating the purpose of lazy | 	// parsed in order to perform the check, defeating the purpose of lazy | ||||||
| @@ -1917,149 +1929,148 @@ func init() { | |||||||
| func init() { proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor0) } | func init() { proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor0) } | ||||||
|  |  | ||||||
| var fileDescriptor0 = []byte{ | var fileDescriptor0 = []byte{ | ||||||
| 	// 2295 bytes of a gzipped FileDescriptorProto | 	// 2287 bytes of a gzipped FileDescriptorProto | ||||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x59, 0x4f, 0x6f, 0x1b, 0xc7, | 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x73, 0xdb, 0xc6, | ||||||
| 	0x15, 0xcf, 0xf2, 0x9f, 0xc8, 0x47, 0x8a, 0x1a, 0x8d, 0x14, 0x67, 0xad, 0xfc, 0xb1, 0xcc, 0xd8, | 	0x15, 0x0f, 0xf8, 0x25, 0xf2, 0x91, 0xa2, 0x56, 0x2b, 0xc5, 0x86, 0xe5, 0x38, 0x96, 0x19, 0x3b, | ||||||
| 	0xb1, 0x6c, 0xb7, 0x74, 0x20, 0xff, 0x89, 0xa3, 0x14, 0x29, 0x28, 0x71, 0xad, 0xd0, 0x90, 0x44, | 	0x96, 0xed, 0x96, 0xce, 0xc8, 0x1f, 0x71, 0x94, 0x4e, 0x3a, 0x94, 0x08, 0x2b, 0xf4, 0x50, 0x22, | ||||||
| 	0x76, 0x29, 0xb5, 0x4e, 0x2e, 0x8b, 0xd1, 0xee, 0x90, 0x5a, 0x7b, 0x39, 0xbb, 0xdd, 0x5d, 0xda, | 	0x0b, 0x4a, 0xad, 0x93, 0x1e, 0x30, 0x2b, 0x60, 0x49, 0xc1, 0x06, 0x17, 0x28, 0x00, 0xda, 0x56, | ||||||
| 	0x56, 0x4e, 0x06, 0x7a, 0xea, 0xa5, 0xe7, 0xa2, 0x2d, 0x7a, 0xc8, 0x25, 0x40, 0x3f, 0x40, 0x0f, | 	0x4e, 0x9e, 0xe9, 0xa9, 0xc7, 0xde, 0x3a, 0x6d, 0xa7, 0xd3, 0xc9, 0x25, 0x33, 0xfd, 0x03, 0x7a, | ||||||
| 	0xfd, 0x0a, 0x05, 0x0a, 0xf4, 0x2b, 0x14, 0x05, 0xda, 0x6f, 0xd0, 0x6b, 0x31, 0x33, 0xbb, 0xcb, | 	0xe8, 0xbd, 0xd7, 0xce, 0xf4, 0xde, 0x63, 0x67, 0xda, 0xff, 0xa0, 0xd7, 0xce, 0xee, 0x02, 0x20, | ||||||
| 	0x5d, 0xfe, 0x89, 0xd5, 0x00, 0x49, 0x7a, 0x12, 0xe7, 0xf7, 0x7e, 0xef, 0xcd, 0x9b, 0x37, 0x6f, | 	0xf8, 0x15, 0xab, 0x99, 0x49, 0xd2, 0x93, 0xb8, 0xbf, 0xf7, 0x7b, 0x0f, 0x6f, 0xdf, 0x3e, 0xbc, | ||||||
| 	0xde, 0xbc, 0x1d, 0xc1, 0xe6, 0xd0, 0x75, 0x87, 0x0e, 0xbd, 0xe3, 0xf9, 0x6e, 0xe8, 0x9e, 0x8e, | 	0xf7, 0xb0, 0x82, 0xcd, 0x81, 0xeb, 0x0e, 0x1c, 0x7a, 0xd7, 0xf3, 0xdd, 0xd0, 0x3d, 0x19, 0xf5, | ||||||
| 	0x07, 0x77, 0x2c, 0x1a, 0x98, 0xbe, 0xed, 0x85, 0xae, 0xdf, 0x14, 0x18, 0x5e, 0x91, 0x8c, 0x66, | 	0xef, 0x5a, 0x34, 0x30, 0x7d, 0xdb, 0x0b, 0x5d, 0xbf, 0x2e, 0x30, 0xbc, 0x22, 0x19, 0xf5, 0x98, | ||||||
| 	0xcc, 0x68, 0x1c, 0xc2, 0xea, 0x23, 0xdb, 0xa1, 0xed, 0x84, 0xd8, 0xa7, 0x21, 0x7e, 0x08, 0x85, | 	0x51, 0x3b, 0x80, 0xd5, 0xc7, 0xb6, 0x43, 0x9b, 0x09, 0xb1, 0x47, 0x43, 0xfc, 0x08, 0x72, 0x7d, | ||||||
| 	0x81, 0xed, 0x50, 0x55, 0xd9, 0xcc, 0x6f, 0x55, 0xb7, 0xaf, 0x35, 0xa7, 0x94, 0x9a, 0x59, 0x8d, | 	0xdb, 0xa1, 0xaa, 0xb2, 0x99, 0xdd, 0x2a, 0x6f, 0x5f, 0xaf, 0x4f, 0x29, 0xd5, 0x27, 0x35, 0xba, | ||||||
| 	0x1e, 0x87, 0x75, 0xa1, 0xd1, 0xf8, 0x67, 0x01, 0xd6, 0xe6, 0x48, 0x31, 0x86, 0x02, 0x23, 0x23, | 	0x1c, 0xd6, 0x85, 0x46, 0xed, 0x9f, 0x39, 0x58, 0x9b, 0x23, 0xc5, 0x18, 0x72, 0x8c, 0x0c, 0xb9, | ||||||
| 	0x6e, 0x51, 0xd9, 0xaa, 0xe8, 0xe2, 0x37, 0x56, 0x61, 0xc9, 0x23, 0xe6, 0x33, 0x32, 0xa4, 0x6a, | 	0x45, 0x65, 0xab, 0xa4, 0x8b, 0xdf, 0x58, 0x85, 0x25, 0x8f, 0x98, 0xcf, 0xc9, 0x80, 0xaa, 0x19, | ||||||
| 	0x4e, 0xc0, 0xf1, 0x10, 0xbf, 0x07, 0x60, 0x51, 0x8f, 0x32, 0x8b, 0x32, 0xf3, 0x5c, 0xcd, 0x6f, | 	0x01, 0xc7, 0x4b, 0xfc, 0x2e, 0x80, 0x45, 0x3d, 0xca, 0x2c, 0xca, 0xcc, 0x33, 0x35, 0xbb, 0x99, | ||||||
| 	0xe6, 0xb7, 0x2a, 0x7a, 0x0a, 0xc1, 0xb7, 0x61, 0xd5, 0x1b, 0x9f, 0x3a, 0xb6, 0x69, 0xa4, 0x68, | 	0xdd, 0x2a, 0xe9, 0x29, 0x04, 0xdf, 0x81, 0x55, 0x6f, 0x74, 0xe2, 0xd8, 0xa6, 0x91, 0xa2, 0xc1, | ||||||
| 	0xb0, 0x99, 0xdf, 0x2a, 0xea, 0x48, 0x0a, 0xda, 0x13, 0xf2, 0x0d, 0x58, 0x79, 0x41, 0xc9, 0xb3, | 	0x66, 0x76, 0x2b, 0xaf, 0x23, 0x29, 0x68, 0x8e, 0xc9, 0x37, 0x61, 0xe5, 0x25, 0x25, 0xcf, 0xd3, | ||||||
| 	0x34, 0xb5, 0x2a, 0xa8, 0x75, 0x0e, 0xa7, 0x88, 0x7b, 0x50, 0x1b, 0xd1, 0x20, 0x20, 0x43, 0x6a, | 	0xd4, 0xb2, 0xa0, 0x56, 0x39, 0x9c, 0x22, 0xee, 0x41, 0x65, 0x48, 0x83, 0x80, 0x0c, 0xa8, 0x11, | ||||||
| 	0x84, 0xe7, 0x1e, 0x55, 0x0b, 0x62, 0xf5, 0x9b, 0x33, 0xab, 0x9f, 0x5e, 0x79, 0x35, 0xd2, 0x3a, | 	0x9e, 0x79, 0x54, 0xcd, 0x89, 0xdd, 0x6f, 0xce, 0xec, 0x7e, 0x7a, 0xe7, 0xe5, 0x48, 0xeb, 0xe8, | ||||||
| 	0x3e, 0xf7, 0x28, 0x6e, 0x41, 0x85, 0xb2, 0xf1, 0x48, 0x5a, 0x28, 0x2e, 0x88, 0x9f, 0xc6, 0xc6, | 	0xcc, 0xa3, 0xb8, 0x01, 0x25, 0xca, 0x46, 0x43, 0x69, 0x21, 0xbf, 0x20, 0x7e, 0x1a, 0x1b, 0x0d, | ||||||
| 	0xa3, 0x69, 0x2b, 0x65, 0xae, 0x16, 0x99, 0x58, 0x0a, 0xa8, 0xff, 0xdc, 0x36, 0xa9, 0x5a, 0x12, | 	0xa7, 0xad, 0x14, 0xb9, 0x5a, 0x64, 0x62, 0x29, 0xa0, 0xfe, 0x0b, 0xdb, 0xa4, 0x6a, 0x41, 0x18, | ||||||
| 	0x06, 0x6e, 0xcc, 0x18, 0xe8, 0x4b, 0xf9, 0xb4, 0x8d, 0x58, 0x0f, 0xef, 0x41, 0x85, 0xbe, 0x0c, | 	0xb8, 0x39, 0x63, 0xa0, 0x27, 0xe5, 0xd3, 0x36, 0x62, 0x3d, 0xbc, 0x07, 0x25, 0xfa, 0x2a, 0xa4, | ||||||
| 	0x29, 0x0b, 0x6c, 0x97, 0xa9, 0x4b, 0xc2, 0xc8, 0xf5, 0x39, 0xbb, 0x48, 0x1d, 0x6b, 0xda, 0xc4, | 	0x2c, 0xb0, 0x5d, 0xa6, 0x2e, 0x09, 0x23, 0x37, 0xe6, 0x9c, 0x22, 0x75, 0xac, 0x69, 0x13, 0x63, | ||||||
| 	0x44, 0x0f, 0x3f, 0x80, 0x25, 0xd7, 0x0b, 0x6d, 0x97, 0x05, 0x6a, 0x79, 0x53, 0xd9, 0xaa, 0x6e, | 	0x3d, 0xfc, 0x10, 0x96, 0x5c, 0x2f, 0xb4, 0x5d, 0x16, 0xa8, 0xc5, 0x4d, 0x65, 0xab, 0xbc, 0xfd, | ||||||
| 	0xbf, 0x33, 0x37, 0x11, 0xba, 0x92, 0xa3, 0xc7, 0x64, 0xdc, 0x01, 0x14, 0xb8, 0x63, 0xdf, 0xa4, | 	0xce, 0xdc, 0x44, 0xe8, 0x48, 0x8e, 0x1e, 0x93, 0x71, 0x0b, 0x50, 0xe0, 0x8e, 0x7c, 0x93, 0x1a, | ||||||
| 	0x86, 0xe9, 0x5a, 0xd4, 0xb0, 0xd9, 0xc0, 0x55, 0x2b, 0xc2, 0xc0, 0x95, 0xd9, 0x85, 0x08, 0xe2, | 	0xa6, 0x6b, 0x51, 0xc3, 0x66, 0x7d, 0x57, 0x2d, 0x09, 0x03, 0x57, 0x67, 0x37, 0x22, 0x88, 0x7b, | ||||||
| 	0x9e, 0x6b, 0xd1, 0x0e, 0x1b, 0xb8, 0x7a, 0x3d, 0xc8, 0x8c, 0xf1, 0x25, 0x28, 0x05, 0xe7, 0x2c, | 	0xae, 0x45, 0x5b, 0xac, 0xef, 0xea, 0xd5, 0x60, 0x62, 0x8d, 0x2f, 0x40, 0x21, 0x38, 0x63, 0x21, | ||||||
| 	0x24, 0x2f, 0xd5, 0x9a, 0xc8, 0x90, 0x68, 0xd4, 0xf8, 0x4f, 0x11, 0x56, 0x2e, 0x92, 0x62, 0x9f, | 	0x79, 0xa5, 0x56, 0x44, 0x86, 0x44, 0xab, 0xda, 0x7f, 0xf2, 0xb0, 0x72, 0x9e, 0x14, 0xfb, 0x18, | ||||||
| 	0x40, 0x71, 0xc0, 0x57, 0xa9, 0xe6, 0xfe, 0x97, 0x18, 0x48, 0x9d, 0x6c, 0x10, 0x4b, 0xdf, 0x32, | 	0xf2, 0x7d, 0xbe, 0x4b, 0x35, 0xf3, 0xbf, 0xc4, 0x40, 0xea, 0x4c, 0x06, 0xb1, 0xf0, 0x0d, 0x83, | ||||||
| 	0x88, 0x2d, 0xa8, 0x32, 0x1a, 0x84, 0xd4, 0x92, 0x19, 0x91, 0xbf, 0x60, 0x4e, 0x81, 0x54, 0x9a, | 	0xd8, 0x80, 0x32, 0xa3, 0x41, 0x48, 0x2d, 0x99, 0x11, 0xd9, 0x73, 0xe6, 0x14, 0x48, 0xa5, 0xd9, | ||||||
| 	0x4d, 0xa9, 0xc2, 0xb7, 0x4a, 0xa9, 0x27, 0xb0, 0x92, 0xb8, 0x64, 0xf8, 0x84, 0x0d, 0xe3, 0xdc, | 	0x94, 0xca, 0x7d, 0xa3, 0x94, 0x7a, 0x0a, 0x2b, 0x89, 0x4b, 0x86, 0x4f, 0xd8, 0x20, 0xce, 0xcd, | ||||||
| 	0xbc, 0xf3, 0x3a, 0x4f, 0x9a, 0x5a, 0xac, 0xa7, 0x73, 0x35, 0xbd, 0x4e, 0x33, 0x63, 0xdc, 0x06, | 	0xbb, 0x6f, 0xf2, 0xa4, 0xae, 0xc5, 0x7a, 0x3a, 0x57, 0xd3, 0xab, 0x74, 0x62, 0x8d, 0x9b, 0x00, | ||||||
| 	0x70, 0x19, 0x75, 0x07, 0x86, 0x45, 0x4d, 0x47, 0x2d, 0x2f, 0x88, 0x52, 0x97, 0x53, 0x66, 0xa2, | 	0x2e, 0xa3, 0x6e, 0xdf, 0xb0, 0xa8, 0xe9, 0xa8, 0xc5, 0x05, 0x51, 0xea, 0x70, 0xca, 0x4c, 0x94, | ||||||
| 	0xe4, 0x4a, 0xd4, 0x74, 0xf0, 0xc7, 0x93, 0x54, 0x5b, 0x5a, 0x90, 0x29, 0x87, 0xf2, 0x90, 0xcd, | 	0x5c, 0x89, 0x9a, 0x0e, 0xfe, 0x68, 0x9c, 0x6a, 0x4b, 0x0b, 0x32, 0xe5, 0x40, 0xbe, 0x64, 0x33, | ||||||
| 	0x64, 0xdb, 0x09, 0xd4, 0x7d, 0xca, 0xf3, 0x9e, 0x5a, 0xd1, 0xca, 0x2a, 0xc2, 0x89, 0xe6, 0x6b, | 	0xd9, 0x76, 0x0c, 0x55, 0x9f, 0xf2, 0xbc, 0xa7, 0x56, 0xb4, 0xb3, 0x92, 0x70, 0xa2, 0xfe, 0xc6, | ||||||
| 	0x57, 0xa6, 0x47, 0x6a, 0x72, 0x61, 0xcb, 0x7e, 0x7a, 0x88, 0xdf, 0x87, 0x04, 0x30, 0x44, 0x5a, | 	0x9d, 0xe9, 0x91, 0x9a, 0xdc, 0xd8, 0xb2, 0x9f, 0x5e, 0xe2, 0xf7, 0x20, 0x01, 0x0c, 0x91, 0x56, | ||||||
| 	0x81, 0xa8, 0x42, 0xb5, 0x18, 0x3c, 0x22, 0x23, 0xba, 0xf1, 0x10, 0xea, 0xd9, 0xf0, 0xe0, 0x75, | 	0x20, 0xaa, 0x50, 0x25, 0x06, 0x0f, 0xc9, 0x90, 0x6e, 0x3c, 0x82, 0xea, 0x64, 0x78, 0xf0, 0x3a, | ||||||
| 	0x28, 0x06, 0x21, 0xf1, 0x43, 0x91, 0x85, 0x45, 0x5d, 0x0e, 0x30, 0x82, 0x3c, 0x65, 0x96, 0xa8, | 	0xe4, 0x83, 0x90, 0xf8, 0xa1, 0xc8, 0xc2, 0xbc, 0x2e, 0x17, 0x18, 0x41, 0x96, 0x32, 0x4b, 0x54, | ||||||
| 	0x72, 0x45, 0x9d, 0xff, 0xdc, 0xf8, 0x08, 0x96, 0x33, 0xd3, 0x5f, 0x54, 0xb1, 0xf1, 0xdb, 0x12, | 	0xb9, 0xbc, 0xce, 0x7f, 0x6e, 0x7c, 0x08, 0xcb, 0x13, 0x8f, 0x3f, 0xaf, 0x62, 0xed, 0x37, 0x05, | ||||||
| 	0xac, 0xcf, 0xcb, 0xb9, 0xb9, 0xe9, 0x7f, 0x09, 0x4a, 0x6c, 0x3c, 0x3a, 0xa5, 0xbe, 0x9a, 0x17, | 	0x58, 0x9f, 0x97, 0x73, 0x73, 0xd3, 0xff, 0x02, 0x14, 0xd8, 0x68, 0x78, 0x42, 0x7d, 0x35, 0x2b, | ||||||
| 	0x16, 0xa2, 0x11, 0x6e, 0x41, 0xd1, 0x21, 0xa7, 0xd4, 0x51, 0x0b, 0x9b, 0xca, 0x56, 0x7d, 0xfb, | 	0x2c, 0x44, 0x2b, 0xdc, 0x80, 0xbc, 0x43, 0x4e, 0xa8, 0xa3, 0xe6, 0x36, 0x95, 0xad, 0xea, 0xf6, | ||||||
| 	0xf6, 0x85, 0xb2, 0xba, 0x79, 0xc0, 0x55, 0x74, 0xa9, 0x89, 0x3f, 0x85, 0x42, 0x54, 0xe2, 0xb8, | 	0x9d, 0x73, 0x65, 0x75, 0xbd, 0xcd, 0x55, 0x74, 0xa9, 0x89, 0x3f, 0x81, 0x5c, 0x54, 0xe2, 0xb8, | ||||||
| 	0x85, 0x5b, 0x17, 0xb3, 0xc0, 0x73, 0x51, 0x17, 0x7a, 0xf8, 0x6d, 0xa8, 0xf0, 0xbf, 0x32, 0xb6, | 	0x85, 0xdb, 0xe7, 0xb3, 0xc0, 0x73, 0x51, 0x17, 0x7a, 0xf8, 0x32, 0x94, 0xf8, 0x5f, 0x19, 0xdb, | ||||||
| 	0x25, 0xe1, 0x73, 0x99, 0x03, 0x3c, 0xae, 0x78, 0x03, 0xca, 0x22, 0xcd, 0x2c, 0x1a, 0x5f, 0x0d, | 	0x82, 0xf0, 0xb9, 0xc8, 0x01, 0x1e, 0x57, 0xbc, 0x01, 0x45, 0x91, 0x66, 0x16, 0x8d, 0x5b, 0x43, | ||||||
| 	0xc9, 0x98, 0x6f, 0x8c, 0x45, 0x07, 0x64, 0xec, 0x84, 0xc6, 0x73, 0xe2, 0x8c, 0xa9, 0x48, 0x98, | 	0xb2, 0xe6, 0x07, 0x63, 0xd1, 0x3e, 0x19, 0x39, 0xa1, 0xf1, 0x82, 0x38, 0x23, 0x2a, 0x12, 0xa6, | ||||||
| 	0x8a, 0x5e, 0x8b, 0xc0, 0x9f, 0x73, 0x0c, 0x5f, 0x81, 0xaa, 0xcc, 0x4a, 0x9b, 0x59, 0xf4, 0xa5, | 	0xa4, 0x57, 0x22, 0xf0, 0xa7, 0x1c, 0xc3, 0x57, 0xa1, 0x2c, 0xb3, 0xd2, 0x66, 0x16, 0x7d, 0x25, | ||||||
| 	0xa8, 0x3e, 0x45, 0x5d, 0x26, 0x6a, 0x87, 0x23, 0x7c, 0xfa, 0xa7, 0x81, 0xcb, 0xe2, 0xad, 0x15, | 	0xaa, 0x4f, 0x5e, 0x97, 0x89, 0xda, 0xe2, 0x08, 0x7f, 0xfc, 0xb3, 0xc0, 0x65, 0xf1, 0xd1, 0x8a, | ||||||
| 	0x53, 0x70, 0x40, 0x4c, 0xff, 0xd1, 0x74, 0xe1, 0x7b, 0x77, 0xfe, 0xf2, 0xa6, 0x73, 0xb1, 0xf1, | 	0x47, 0x70, 0x40, 0x3c, 0xfe, 0xc3, 0xe9, 0xc2, 0x77, 0x65, 0xfe, 0xf6, 0xa6, 0x73, 0xb1, 0xf6, | ||||||
| 	0xe7, 0x1c, 0x14, 0xc4, 0x79, 0x5b, 0x81, 0xea, 0xf1, 0xe7, 0x3d, 0xcd, 0x68, 0x77, 0x4f, 0x76, | 	0xe7, 0x0c, 0xe4, 0xc4, 0xfb, 0xb6, 0x02, 0xe5, 0xa3, 0xcf, 0xba, 0x9a, 0xd1, 0xec, 0x1c, 0xef, | ||||||
| 	0x0f, 0x34, 0xa4, 0xe0, 0x3a, 0x80, 0x00, 0x1e, 0x1d, 0x74, 0x5b, 0xc7, 0x28, 0x97, 0x8c, 0x3b, | 	0xb6, 0x35, 0xa4, 0xe0, 0x2a, 0x80, 0x00, 0x1e, 0xb7, 0x3b, 0x8d, 0x23, 0x94, 0x49, 0xd6, 0xad, | ||||||
| 	0x47, 0xc7, 0x0f, 0xee, 0xa1, 0x7c, 0xa2, 0x70, 0x22, 0x81, 0x42, 0x9a, 0x70, 0x77, 0x1b, 0x15, | 	0xc3, 0xa3, 0x87, 0xf7, 0x51, 0x36, 0x51, 0x38, 0x96, 0x40, 0x2e, 0x4d, 0xb8, 0xb7, 0x8d, 0xf2, | ||||||
| 	0x31, 0x82, 0x9a, 0x34, 0xd0, 0x79, 0xa2, 0xb5, 0x1f, 0xdc, 0x43, 0xa5, 0x2c, 0x72, 0x77, 0x1b, | 	0x18, 0x41, 0x45, 0x1a, 0x68, 0x3d, 0xd5, 0x9a, 0x0f, 0xef, 0xa3, 0xc2, 0x24, 0x72, 0x6f, 0x1b, | ||||||
| 	0x2d, 0xe1, 0x65, 0xa8, 0x08, 0x64, 0xb7, 0xdb, 0x3d, 0x40, 0xe5, 0xc4, 0x66, 0xff, 0x58, 0xef, | 	0x2d, 0xe1, 0x65, 0x28, 0x09, 0x64, 0xb7, 0xd3, 0x69, 0xa3, 0x62, 0x62, 0xb3, 0x77, 0xa4, 0xb7, | ||||||
| 	0x1c, 0xed, 0xa3, 0x4a, 0x62, 0x73, 0x5f, 0xef, 0x9e, 0xf4, 0x10, 0x24, 0x16, 0x0e, 0xb5, 0x7e, | 	0x0e, 0xf7, 0x51, 0x29, 0xb1, 0xb9, 0xaf, 0x77, 0x8e, 0xbb, 0x08, 0x12, 0x0b, 0x07, 0x5a, 0xaf, | ||||||
| 	0xbf, 0xb5, 0xaf, 0xa1, 0x6a, 0xc2, 0xd8, 0xfd, 0xfc, 0x58, 0xeb, 0xa3, 0x5a, 0xc6, 0xad, 0xbb, | 	0xd7, 0xd8, 0xd7, 0x50, 0x39, 0x61, 0xec, 0x7e, 0x76, 0xa4, 0xf5, 0x50, 0x65, 0xc2, 0xad, 0x7b, | ||||||
| 	0xdb, 0x68, 0x39, 0x99, 0x42, 0x3b, 0x3a, 0x39, 0x44, 0x75, 0xbc, 0x0a, 0xcb, 0x72, 0x8a, 0xd8, | 	0xdb, 0x68, 0x39, 0x79, 0x84, 0x76, 0x78, 0x7c, 0x80, 0xaa, 0x78, 0x15, 0x96, 0xe5, 0x23, 0x62, | ||||||
| 	0x89, 0x95, 0x29, 0xe8, 0xc1, 0x3d, 0x84, 0x26, 0x8e, 0x48, 0x2b, 0xab, 0x19, 0xe0, 0xc1, 0x3d, | 	0x27, 0x56, 0xa6, 0xa0, 0x87, 0xf7, 0x11, 0x1a, 0x3b, 0x22, 0xad, 0xac, 0x4e, 0x00, 0x0f, 0xef, | ||||||
| 	0x84, 0x1b, 0x7b, 0x50, 0x14, 0xd9, 0x85, 0x31, 0xd4, 0x0f, 0x5a, 0xbb, 0xda, 0x81, 0xd1, 0xed, | 	0x23, 0x5c, 0xdb, 0x83, 0xbc, 0xc8, 0x2e, 0x8c, 0xa1, 0xda, 0x6e, 0xec, 0x6a, 0x6d, 0xa3, 0xd3, | ||||||
| 	0x1d, 0x77, 0xba, 0x47, 0xad, 0x03, 0xa4, 0x4c, 0x30, 0x5d, 0xfb, 0xd9, 0x49, 0x47, 0xd7, 0xda, | 	0x3d, 0x6a, 0x75, 0x0e, 0x1b, 0x6d, 0xa4, 0x8c, 0x31, 0x5d, 0xfb, 0xc9, 0x71, 0x4b, 0xd7, 0x9a, | ||||||
| 	0x28, 0x97, 0xc6, 0x7a, 0x5a, 0xeb, 0x58, 0x6b, 0xa3, 0x7c, 0xc3, 0x84, 0xf5, 0x79, 0x75, 0x66, | 	0x28, 0x93, 0xc6, 0xba, 0x5a, 0xe3, 0x48, 0x6b, 0xa2, 0x6c, 0xcd, 0x84, 0xf5, 0x79, 0x75, 0x66, | ||||||
| 	0xee, 0xc9, 0x48, 0x6d, 0x71, 0x6e, 0xc1, 0x16, 0x0b, 0x5b, 0x33, 0x5b, 0xfc, 0x95, 0x02, 0x6b, | 	0xee, 0x9b, 0x91, 0x3a, 0xe2, 0xcc, 0x82, 0x23, 0x16, 0xb6, 0x66, 0x8e, 0xf8, 0x4b, 0x05, 0xd6, | ||||||
| 	0x73, 0x6a, 0xed, 0xdc, 0x49, 0x7e, 0x0a, 0x45, 0x99, 0xa2, 0xf2, 0xf6, 0xb9, 0x39, 0xb7, 0x68, | 	0xe6, 0xd4, 0xda, 0xb9, 0x0f, 0xf9, 0x31, 0xe4, 0x65, 0x8a, 0xca, 0xee, 0x73, 0x6b, 0x6e, 0xd1, | ||||||
| 	0x8b, 0x84, 0x9d, 0xb9, 0x81, 0x84, 0x5e, 0xfa, 0x06, 0xce, 0x2f, 0xb8, 0x81, 0xb9, 0x89, 0x19, | 	0x16, 0x09, 0x3b, 0xd3, 0x81, 0x84, 0x5e, 0xba, 0x03, 0x67, 0x17, 0x74, 0x60, 0x6e, 0x62, 0xc6, | ||||||
| 	0x27, 0x7f, 0xa5, 0x80, 0xba, 0xc8, 0xf6, 0x6b, 0x0a, 0x45, 0x2e, 0x53, 0x28, 0x3e, 0x99, 0x76, | 	0xc9, 0x5f, 0x2a, 0xa0, 0x2e, 0xb2, 0xfd, 0x86, 0x42, 0x91, 0x99, 0x28, 0x14, 0x1f, 0x4f, 0x3b, | ||||||
| 	0xe0, 0xea, 0xe2, 0x35, 0xcc, 0x78, 0xf1, 0xb5, 0x02, 0x97, 0xe6, 0x37, 0x2a, 0x73, 0x7d, 0xf8, | 	0x70, 0x6d, 0xf1, 0x1e, 0x66, 0xbc, 0xf8, 0x4a, 0x81, 0x0b, 0xf3, 0x07, 0x95, 0xb9, 0x3e, 0x7c, | ||||||
| 	0x14, 0x4a, 0x23, 0x1a, 0x9e, 0xb9, 0xf1, 0x65, 0xfd, 0xc1, 0x9c, 0x2b, 0x80, 0x8b, 0xa7, 0x63, | 	0x02, 0x85, 0x21, 0x0d, 0x4f, 0xdd, 0xb8, 0x59, 0xbf, 0x3f, 0xa7, 0x05, 0x70, 0xf1, 0x74, 0xac, | ||||||
| 	0x15, 0x69, 0xa5, 0xef, 0x90, 0xfc, 0xa2, 0x6e, 0x43, 0x7a, 0x33, 0xe3, 0xe9, 0xaf, 0x73, 0xf0, | 	0x22, 0xad, 0x74, 0x0f, 0xc9, 0x2e, 0x9a, 0x36, 0xa4, 0x37, 0x33, 0x9e, 0xfe, 0x2a, 0x03, 0x6f, | ||||||
| 	0xe6, 0x5c, 0xe3, 0x73, 0x1d, 0x7d, 0x17, 0xc0, 0x66, 0xde, 0x38, 0x94, 0x17, 0xb2, 0xac, 0x4f, | 	0xcf, 0x35, 0x3e, 0xd7, 0xd1, 0x2b, 0x00, 0x36, 0xf3, 0x46, 0xa1, 0x6c, 0xc8, 0xb2, 0x3e, 0x95, | ||||||
| 	0x15, 0x81, 0x88, 0xb3, 0xcf, 0x6b, 0xcf, 0x38, 0x4c, 0xe4, 0x79, 0x21, 0x07, 0x09, 0x09, 0xc2, | 	0x04, 0x22, 0xde, 0x7d, 0x5e, 0x7b, 0x46, 0x61, 0x22, 0xcf, 0x0a, 0x39, 0x48, 0x48, 0x10, 0x1e, | ||||||
| 	0xc3, 0x89, 0xa3, 0x05, 0xe1, 0xe8, 0x7b, 0x0b, 0x56, 0x3a, 0x73, 0xd7, 0x7d, 0x08, 0xc8, 0x74, | 	0x8d, 0x1d, 0xcd, 0x09, 0x47, 0xdf, 0x5d, 0xb0, 0xd3, 0x99, 0x5e, 0xf7, 0x01, 0x20, 0xd3, 0xb1, | ||||||
| 	0x6c, 0xca, 0x42, 0x23, 0x08, 0x7d, 0x4a, 0x46, 0x36, 0x1b, 0x8a, 0x02, 0x5c, 0xde, 0x29, 0x0e, | 	0x29, 0x0b, 0x8d, 0x20, 0xf4, 0x29, 0x19, 0xda, 0x6c, 0x20, 0x0a, 0x70, 0x71, 0x27, 0xdf, 0x27, | ||||||
| 	0x88, 0x13, 0x50, 0x7d, 0x45, 0x8a, 0xfb, 0xb1, 0x94, 0x6b, 0x88, 0x5b, 0xc6, 0x4f, 0x69, 0x94, | 	0x4e, 0x40, 0xf5, 0x15, 0x29, 0xee, 0xc5, 0x52, 0xae, 0x21, 0xba, 0x8c, 0x9f, 0xd2, 0x28, 0x4c, | ||||||
| 	0x32, 0x1a, 0x52, 0x9c, 0x68, 0x34, 0x7e, 0xb3, 0x04, 0xd5, 0x54, 0x5b, 0x87, 0xaf, 0x42, 0xed, | 	0x68, 0x48, 0x71, 0xa2, 0x51, 0xfb, 0xf5, 0x12, 0x94, 0x53, 0x63, 0x1d, 0xbe, 0x06, 0x95, 0x67, | ||||||
| 	0x29, 0x79, 0x4e, 0x8c, 0xb8, 0x55, 0x97, 0x91, 0xa8, 0x72, 0xac, 0x17, 0xb5, 0xeb, 0x1f, 0xc2, | 	0xe4, 0x05, 0x31, 0xe2, 0x51, 0x5d, 0x46, 0xa2, 0xcc, 0xb1, 0x6e, 0x34, 0xae, 0x7f, 0x00, 0xeb, | ||||||
| 	0xba, 0xa0, 0xb8, 0xe3, 0x90, 0xfa, 0x86, 0xe9, 0x90, 0x20, 0x10, 0x41, 0x2b, 0x0b, 0x2a, 0xe6, | 	0x82, 0xe2, 0x8e, 0x42, 0xea, 0x1b, 0xa6, 0x43, 0x82, 0x40, 0x04, 0xad, 0x28, 0xa8, 0x98, 0xcb, | ||||||
| 	0xb2, 0x2e, 0x17, 0xed, 0xc5, 0x12, 0x7c, 0x1f, 0xd6, 0x84, 0xc6, 0x68, 0xec, 0x84, 0xb6, 0xe7, | 	0x3a, 0x5c, 0xb4, 0x17, 0x4b, 0xf0, 0x03, 0x58, 0x13, 0x1a, 0xc3, 0x91, 0x13, 0xda, 0x9e, 0x43, | ||||||
| 	0x50, 0x83, 0x7f, 0x3c, 0x04, 0xa2, 0x10, 0x27, 0x9e, 0xad, 0x72, 0xc6, 0x61, 0x44, 0xe0, 0x1e, | 	0x0d, 0xfe, 0xf1, 0x10, 0x88, 0x42, 0x9c, 0x78, 0xb6, 0xca, 0x19, 0x07, 0x11, 0x81, 0x7b, 0x14, | ||||||
| 	0x05, 0xb8, 0x0d, 0xef, 0x0a, 0xb5, 0x21, 0x65, 0xd4, 0x27, 0x21, 0x35, 0xe8, 0x2f, 0xc7, 0xc4, | 	0xe0, 0x7d, 0xb8, 0x22, 0xd4, 0x06, 0x94, 0x51, 0x9f, 0x84, 0xd4, 0xa0, 0xbf, 0x18, 0x11, 0x27, | ||||||
| 	0x09, 0x0c, 0xc2, 0x2c, 0xe3, 0x8c, 0x04, 0x67, 0xea, 0x3a, 0x37, 0xb0, 0x9b, 0x53, 0x15, 0xfd, | 	0x30, 0x08, 0xb3, 0x8c, 0x53, 0x12, 0x9c, 0xaa, 0xeb, 0x69, 0x03, 0x97, 0x38, 0x77, 0x3f, 0xa2, | ||||||
| 	0x32, 0x27, 0xee, 0x47, 0x3c, 0x4d, 0xd0, 0x5a, 0xcc, 0xfa, 0x8c, 0x04, 0x67, 0x78, 0x07, 0x2e, | 	0x6a, 0x82, 0xd9, 0x60, 0xd6, 0xa7, 0x24, 0x38, 0xc5, 0x3b, 0x70, 0x41, 0x18, 0x0a, 0x42, 0xdf, | ||||||
| 	0x09, 0x2b, 0x41, 0xe8, 0xdb, 0x6c, 0x68, 0x98, 0x67, 0xd4, 0x7c, 0x66, 0x8c, 0xc3, 0xc1, 0x43, | 	0x66, 0x03, 0xc3, 0x3c, 0xa5, 0xe6, 0x73, 0x63, 0x14, 0xf6, 0x1f, 0xa9, 0x97, 0xd3, 0x16, 0x84, | ||||||
| 	0xf5, 0xed, 0xf4, 0xfc, 0xc2, 0xc3, 0xbe, 0xe0, 0xec, 0x71, 0xca, 0x49, 0x38, 0x78, 0x88, 0xfb, | 	0x93, 0x3d, 0xc1, 0xd9, 0xe3, 0x94, 0xe3, 0xb0, 0xff, 0x08, 0xf7, 0xa0, 0xc2, 0xcf, 0x63, 0x68, | ||||||
| 	0x50, 0xe3, 0x9b, 0x31, 0xb2, 0xbf, 0xa4, 0xc6, 0xc0, 0xf5, 0xc5, 0xcd, 0x52, 0x9f, 0x73, 0xb2, | 	0x7f, 0x41, 0x8d, 0xbe, 0xeb, 0x8b, 0xe6, 0x52, 0x9d, 0xf3, 0x72, 0xa7, 0x82, 0x58, 0xef, 0x44, | ||||||
| 	0x53, 0x11, 0x6c, 0x76, 0x23, 0x85, 0x43, 0xd7, 0xa2, 0x3b, 0xc5, 0x7e, 0x4f, 0xd3, 0xda, 0x7a, | 	0x0a, 0x07, 0xae, 0x45, 0x77, 0xf2, 0xbd, 0xae, 0xa6, 0x35, 0xf5, 0x72, 0x6c, 0xe5, 0xb1, 0xeb, | ||||||
| 	0x35, 0xb6, 0xf2, 0xc8, 0xf5, 0x79, 0x42, 0x0d, 0xdd, 0x24, 0xc0, 0x55, 0x99, 0x50, 0x43, 0x37, | 	0xf3, 0x9c, 0x1a, 0xb8, 0x49, 0x8c, 0xcb, 0x32, 0xa7, 0x06, 0x6e, 0x1c, 0xe1, 0x07, 0xb0, 0x66, | ||||||
| 	0x0e, 0xef, 0x7d, 0x58, 0x33, 0x4d, 0xb9, 0x66, 0xdb, 0x34, 0xa2, 0x16, 0x3f, 0x50, 0x51, 0x26, | 	0x9a, 0x72, 0xdb, 0xb6, 0x69, 0x44, 0x53, 0x7e, 0xa0, 0xa2, 0x89, 0x78, 0x99, 0xe6, 0xbe, 0x24, | ||||||
| 	0x58, 0xa6, 0xb9, 0x2f, 0x09, 0x51, 0x8e, 0x07, 0xf8, 0x63, 0x78, 0x73, 0x12, 0xac, 0xb4, 0xe2, | 	0x44, 0x69, 0x1e, 0xe0, 0x8f, 0xe0, 0xed, 0x71, 0xbc, 0xd2, 0x8a, 0xab, 0x33, 0xbb, 0x9c, 0x56, | ||||||
| 	0xea, 0xcc, 0x2a, 0xa7, 0x55, 0xef, 0xc3, 0x9a, 0x77, 0x3e, 0xab, 0x88, 0x33, 0x33, 0x7a, 0xe7, | 	0x7d, 0x00, 0x6b, 0xde, 0xd9, 0xac, 0x22, 0x9e, 0x78, 0xa2, 0x77, 0x36, 0xad, 0x76, 0x43, 0x7c, | ||||||
| 	0xd3, 0x6a, 0xd7, 0xc5, 0x67, 0x9b, 0x4f, 0x4d, 0x12, 0x52, 0x4b, 0x7d, 0x2b, 0xcd, 0x4e, 0x09, | 	0xb9, 0xf9, 0xd4, 0x24, 0x21, 0xb5, 0xd4, 0x8b, 0x69, 0x76, 0x4a, 0x80, 0xef, 0x02, 0x32, 0x4d, | ||||||
| 	0xf0, 0x1d, 0x40, 0xa6, 0x69, 0x50, 0x46, 0x4e, 0x1d, 0x6a, 0x10, 0x9f, 0x32, 0x12, 0xa8, 0x57, | 	0x83, 0x32, 0x72, 0xe2, 0x50, 0x83, 0xf8, 0x94, 0x91, 0x40, 0xbd, 0x9a, 0x26, 0x57, 0x4d, 0x53, | ||||||
| 	0xd2, 0xe4, 0xba, 0x69, 0x6a, 0x42, 0xda, 0x12, 0x42, 0x7c, 0x0b, 0x56, 0xdd, 0xd3, 0xa7, 0xa6, | 	0x13, 0xd2, 0x86, 0x10, 0xe2, 0xdb, 0xb0, 0xea, 0x9e, 0x3c, 0x33, 0x65, 0x72, 0x19, 0x9e, 0x4f, | ||||||
| 	0xcc, 0x2c, 0xc3, 0xf3, 0xe9, 0xc0, 0x7e, 0xa9, 0x5e, 0x13, 0x61, 0x5a, 0xe1, 0x02, 0x91, 0x57, | 	0xfb, 0xf6, 0x2b, 0xf5, 0xba, 0x08, 0xd3, 0x0a, 0x17, 0x88, 0xd4, 0xea, 0x0a, 0x18, 0xdf, 0x02, | ||||||
| 	0x3d, 0x01, 0xe3, 0x9b, 0x80, 0xcc, 0xe0, 0x8c, 0xf8, 0x9e, 0xb8, 0xda, 0x03, 0x8f, 0x98, 0x54, | 	0x64, 0x06, 0xa7, 0xc4, 0xf7, 0x44, 0x77, 0x0f, 0x3c, 0x62, 0x52, 0xf5, 0x86, 0xa4, 0x4a, 0xfc, | ||||||
| 	0xbd, 0x2e, 0xa9, 0x12, 0x3f, 0x8a, 0x61, 0xfc, 0x04, 0xd6, 0xc7, 0xcc, 0x66, 0x21, 0xf5, 0x3d, | 	0x30, 0x86, 0xf1, 0x53, 0x58, 0x1f, 0x31, 0x9b, 0x85, 0xd4, 0xf7, 0x7c, 0xca, 0x87, 0x74, 0xf9, | ||||||
| 	0x9f, 0xf2, 0x0e, 0x5d, 0x1e, 0x33, 0xf5, 0x5f, 0x4b, 0x0b, 0x7a, 0xec, 0x93, 0x34, 0x5b, 0xee, | 	0xa6, 0xa9, 0xff, 0x5a, 0x5a, 0x30, 0x66, 0x1f, 0xa7, 0xd9, 0xf2, 0x74, 0xf5, 0xb5, 0xd1, 0x2c, | ||||||
| 	0xae, 0xbe, 0x36, 0x9e, 0x05, 0x1b, 0x3b, 0x50, 0x4b, 0x6f, 0x3a, 0xae, 0x80, 0xdc, 0x76, 0xa4, | 	0x58, 0xdb, 0x81, 0x4a, 0xfa, 0xd0, 0x71, 0x09, 0xe4, 0xb1, 0x23, 0x85, 0xf7, 0xd0, 0xbd, 0x4e, | ||||||
| 	0xf0, 0x0b, 0x74, 0xaf, 0xdb, 0xe6, 0x57, 0xdf, 0x17, 0x1a, 0xca, 0xf1, 0x2b, 0xf8, 0xa0, 0x73, | 	0x93, 0x77, 0xbf, 0xcf, 0x35, 0x94, 0xe1, 0x5d, 0xb8, 0xdd, 0x3a, 0xd2, 0x0c, 0xfd, 0xf8, 0xf0, | ||||||
| 	0xac, 0x19, 0xfa, 0xc9, 0xd1, 0x71, 0xe7, 0x50, 0x43, 0xf9, 0x5b, 0x95, 0xf2, 0xbf, 0x97, 0xd0, | 	0xa8, 0x75, 0xa0, 0xa1, 0xec, 0xed, 0x52, 0xf1, 0xdf, 0x4b, 0xe8, 0xf5, 0xeb, 0xd7, 0xaf, 0x33, | ||||||
| 	0xab, 0x57, 0xaf, 0x5e, 0xe5, 0x1e, 0x17, 0xca, 0x1f, 0xa0, 0x1b, 0x8d, 0xbf, 0xe6, 0xa0, 0x9e, | 	0x4f, 0x72, 0xc5, 0xf7, 0xd1, 0xcd, 0xda, 0x5f, 0x33, 0x50, 0x9d, 0x9c, 0x7f, 0xf1, 0x8f, 0xe0, | ||||||
| 	0x6d, 0x7e, 0xf1, 0x4f, 0xe0, 0xad, 0xf8, 0x4b, 0x35, 0xa0, 0xa1, 0xf1, 0xc2, 0xf6, 0x45, 0x36, | 	0x62, 0xfc, 0xb1, 0x1a, 0xd0, 0xd0, 0x78, 0x69, 0xfb, 0x22, 0x1b, 0x87, 0x44, 0x4e, 0x90, 0x49, | ||||||
| 	0x8e, 0x88, 0x6c, 0x1f, 0x93, 0x40, 0xae, 0x47, 0xac, 0x3e, 0x0d, 0x7f, 0x61, 0xfb, 0x3c, 0xd7, | 	0x20, 0xd7, 0x23, 0x56, 0x8f, 0x86, 0x3f, 0xb3, 0x7d, 0x9e, 0x6b, 0x43, 0x12, 0xe2, 0x36, 0x5c, | ||||||
| 	0x46, 0x24, 0xc4, 0x07, 0x70, 0x85, 0xb9, 0x46, 0x10, 0x12, 0x66, 0x11, 0xdf, 0x32, 0x26, 0x6f, | 	0x65, 0xae, 0x11, 0x84, 0x84, 0x59, 0xc4, 0xb7, 0x8c, 0xf1, 0x35, 0x81, 0x41, 0x4c, 0x93, 0x06, | ||||||
| 	0x04, 0x06, 0x31, 0x4d, 0x1a, 0x04, 0xae, 0xbc, 0x05, 0x12, 0x2b, 0xef, 0x30, 0xb7, 0x1f, 0x91, | 	0x81, 0x2b, 0x1b, 0x41, 0x62, 0xe5, 0x1d, 0xe6, 0xf6, 0x22, 0xf2, 0xb8, 0x42, 0x36, 0x22, 0xea, | ||||||
| 	0x27, 0xe5, 0xb1, 0x15, 0x51, 0xa7, 0x36, 0x3d, 0xbf, 0x68, 0xd3, 0xdf, 0x86, 0xca, 0x88, 0x78, | 	0xd4, 0xa1, 0x67, 0x17, 0x1d, 0xfa, 0x65, 0x28, 0x0d, 0x89, 0x67, 0x50, 0x16, 0xfa, 0x67, 0x62, | ||||||
| 	0x06, 0x65, 0xa1, 0x7f, 0x2e, 0x5a, 0xb6, 0xb2, 0x5e, 0x1e, 0x11, 0x4f, 0xe3, 0xe3, 0xef, 0x6e, | 	0x6a, 0x2b, 0xea, 0xc5, 0x21, 0xf1, 0x34, 0xbe, 0xfe, 0xf6, 0x4e, 0x22, 0x15, 0xcd, 0xda, 0x3f, | ||||||
| 	0x27, 0xb2, 0xd1, 0x2c, 0xa3, 0x4a, 0xe3, 0x1f, 0x79, 0xa8, 0xa5, 0x9b, 0x37, 0xde, 0x0b, 0x9b, | 	0xb2, 0x50, 0x49, 0x4f, 0x6e, 0x7c, 0x10, 0x36, 0x45, 0x95, 0x56, 0xc4, 0x4b, 0xfc, 0xde, 0xd7, | ||||||
| 	0xa2, 0x50, 0x2b, 0xe2, 0x28, 0xbf, 0xff, 0x8d, 0xad, 0x5e, 0x73, 0x8f, 0x57, 0xf0, 0x9d, 0x92, | 	0xce, 0x79, 0xf5, 0x3d, 0x5e, 0xbe, 0x77, 0x0a, 0x72, 0x9e, 0xd2, 0xa5, 0x26, 0x6f, 0x9d, 0xfc, | ||||||
| 	0x6c, 0xa9, 0x74, 0xa9, 0xc9, 0x6f, 0x4f, 0x7e, 0x78, 0xa9, 0x6c, 0xd4, 0xcb, 0x7a, 0x34, 0xc2, | 	0xb5, 0xa5, 0x72, 0x4a, 0x2f, 0xea, 0xd1, 0x0a, 0xef, 0x43, 0xe1, 0x59, 0x20, 0x6c, 0x17, 0x84, | ||||||
| 	0xfb, 0x50, 0x7a, 0x1a, 0x08, 0xdb, 0x25, 0x61, 0xfb, 0xda, 0x37, 0xdb, 0x7e, 0xdc, 0x17, 0xc6, | 	0xed, 0xeb, 0x5f, 0x6f, 0xfb, 0x49, 0x4f, 0x18, 0x2f, 0x3d, 0xe9, 0x19, 0x87, 0x1d, 0xfd, 0xa0, | ||||||
| 	0x2b, 0x8f, 0xfb, 0xc6, 0x51, 0x57, 0x3f, 0x6c, 0x1d, 0xe8, 0x91, 0x3a, 0xbe, 0x0c, 0x05, 0x87, | 	0xd1, 0xd6, 0x23, 0x75, 0x7c, 0x09, 0x72, 0x0e, 0xf9, 0xe2, 0x6c, 0xb2, 0xd0, 0x0b, 0xe8, 0xbc, | ||||||
| 	0x7c, 0x79, 0x9e, 0xad, 0xf5, 0x02, 0xba, 0x68, 0xf8, 0x2f, 0x43, 0xe1, 0x05, 0x25, 0xcf, 0xb2, | 	0x81, 0xbf, 0x04, 0xb9, 0x97, 0x94, 0x3c, 0x9f, 0x2c, 0xaf, 0x02, 0xfa, 0x16, 0x5f, 0x80, 0xbb, | ||||||
| 	0x15, 0x56, 0x40, 0xdf, 0xe1, 0x31, 0xb8, 0x03, 0x45, 0x11, 0x2f, 0x0c, 0x10, 0x45, 0x0c, 0xbd, | 	0x90, 0x17, 0xf1, 0xc2, 0x00, 0x51, 0xc4, 0xd0, 0x5b, 0xb8, 0x08, 0xb9, 0xbd, 0x8e, 0xce, 0x5f, | ||||||
| 	0x81, 0xcb, 0x50, 0xd8, 0xeb, 0xea, 0xfc, 0x28, 0x20, 0xa8, 0x49, 0xd4, 0xe8, 0x75, 0xb4, 0x3d, | 	0x02, 0x04, 0x15, 0x89, 0x1a, 0xdd, 0x96, 0xb6, 0xa7, 0xa1, 0x4c, 0xed, 0x01, 0x14, 0x64, 0x10, | ||||||
| 	0x0d, 0xe5, 0x1a, 0xf7, 0xa1, 0x24, 0x83, 0xc0, 0x8f, 0x49, 0x12, 0x06, 0xf4, 0x46, 0x34, 0x8c, | 	0xf8, 0x0b, 0x92, 0x84, 0x01, 0xbd, 0x15, 0x2d, 0x23, 0x1b, 0x4a, 0x2c, 0x3d, 0x3e, 0xd8, 0xd5, | ||||||
| 	0x6c, 0x28, 0xb1, 0xf4, 0xe4, 0x70, 0x57, 0xd3, 0x51, 0x2e, 0xbb, 0xc9, 0x05, 0x54, 0x6c, 0x04, | 	0x74, 0x94, 0x49, 0x1f, 0x6f, 0x00, 0x95, 0xf4, 0xd0, 0xf6, 0xdd, 0xe4, 0xd4, 0x5f, 0x14, 0x28, | ||||||
| 	0x50, 0x4b, 0x77, 0x6f, 0xdf, 0x4b, 0x7e, 0x35, 0xfe, 0xa2, 0x40, 0x35, 0xd5, 0x8d, 0xf1, 0x3e, | 	0xa7, 0x86, 0x30, 0xde, 0xfe, 0x89, 0xe3, 0xb8, 0x2f, 0x0d, 0xe2, 0xd8, 0x24, 0x88, 0x92, 0x02, | ||||||
| 	0x80, 0x38, 0x8e, 0xfb, 0xc2, 0x20, 0x8e, 0x4d, 0x82, 0x28, 0x35, 0x40, 0x40, 0x2d, 0x8e, 0x5c, | 	0x04, 0xd4, 0xe0, 0xc8, 0x79, 0x0f, 0xed, 0x3b, 0x71, 0xfe, 0x0f, 0x0a, 0xa0, 0xe9, 0x01, 0x6e, | ||||||
| 	0x74, 0xeb, 0xbe, 0x17, 0xe7, 0xff, 0xa8, 0x00, 0x9a, 0xee, 0xe4, 0xa6, 0x1c, 0x54, 0x7e, 0x50, | 	0xca, 0x41, 0xe5, 0x7b, 0x75, 0xf0, 0xf7, 0x0a, 0x54, 0x27, 0xa7, 0xb6, 0x29, 0xf7, 0xae, 0x7d, | ||||||
| 	0x07, 0xff, 0xa0, 0x40, 0x3d, 0xdb, 0xbe, 0x4d, 0xb9, 0x77, 0xf5, 0x07, 0x75, 0xef, 0xf7, 0x0a, | 	0xaf, 0xee, 0xfd, 0x4e, 0x81, 0xe5, 0x89, 0x59, 0xed, 0xff, 0xca, 0xbb, 0xdf, 0x66, 0x61, 0x6d, | ||||||
| 	0x2c, 0x67, 0x9a, 0xb6, 0xff, 0x2b, 0xef, 0x7e, 0x97, 0x87, 0xb5, 0x39, 0x7a, 0xb8, 0x15, 0x75, | 	0x8e, 0x1e, 0x6e, 0x44, 0x43, 0xad, 0x9c, 0xb3, 0x7f, 0x78, 0x9e, 0x67, 0xd5, 0x79, 0xcf, 0xec, | ||||||
| 	0xb7, 0xb2, 0xe1, 0xfe, 0xf1, 0x45, 0xe6, 0x6a, 0xf2, 0xfb, 0xb3, 0x47, 0xfc, 0x30, 0x6a, 0x86, | 	0x12, 0x3f, 0x8c, 0x66, 0xe0, 0x5b, 0x80, 0x6c, 0x8b, 0xb2, 0xd0, 0xee, 0xdb, 0xd4, 0x8f, 0x3e, | ||||||
| 	0x6f, 0x02, 0xb2, 0x2d, 0xca, 0x42, 0x7b, 0x60, 0x53, 0x3f, 0xfa, 0x22, 0x97, 0x2d, 0xef, 0xca, | 	0xc4, 0xe5, 0xa4, 0xbb, 0x32, 0xc6, 0xe5, 0xb7, 0xf8, 0x0f, 0x00, 0x7b, 0x6e, 0x60, 0x87, 0xf6, | ||||||
| 	0x04, 0x97, 0x1f, 0xe5, 0x3f, 0x02, 0xec, 0xb9, 0x81, 0x1d, 0xda, 0xcf, 0xa9, 0x61, 0xb3, 0xf8, | 	0x0b, 0x6a, 0xd8, 0x2c, 0xfe, 0x6a, 0xe7, 0x93, 0x6f, 0x4e, 0x47, 0xb1, 0xa4, 0xc5, 0xc2, 0x84, | ||||||
| 	0xf3, 0x9d, 0xb7, 0xc0, 0x05, 0x1d, 0xc5, 0x92, 0x0e, 0x0b, 0x13, 0x36, 0xa3, 0x43, 0x32, 0xc5, | 	0xcd, 0xe8, 0x80, 0x4c, 0xb1, 0x79, 0xed, 0xcb, 0xea, 0x28, 0x96, 0x24, 0xec, 0x6b, 0x50, 0xb1, | ||||||
| 	0xe6, 0x15, 0x30, 0xaf, 0xa3, 0x58, 0x92, 0xb0, 0xaf, 0x42, 0xcd, 0x72, 0xc7, 0xbc, 0xa1, 0x90, | 	0xdc, 0x11, 0x1f, 0x22, 0x24, 0x8f, 0x97, 0x5a, 0x45, 0x2f, 0x4b, 0x2c, 0xa1, 0x44, 0x53, 0xde, | ||||||
| 	0x3c, 0x5e, 0x70, 0x15, 0xbd, 0x2a, 0xb1, 0x84, 0x12, 0x75, 0x7c, 0x93, 0x77, 0x83, 0x9a, 0x5e, | 	0xf8, 0xba, 0xa0, 0xa2, 0x97, 0x25, 0x26, 0x29, 0x37, 0x61, 0x85, 0x0c, 0x06, 0x3e, 0x37, 0x1e, | ||||||
| 	0x95, 0x98, 0xa4, 0xdc, 0x80, 0x15, 0x32, 0x1c, 0xfa, 0xdc, 0x78, 0x6c, 0x48, 0xf6, 0xb0, 0xf5, | 	0x1b, 0x92, 0xa3, 0x6b, 0x35, 0x81, 0x05, 0x71, 0xe3, 0x09, 0x14, 0xe3, 0x38, 0xf0, 0x6e, 0xc6, | ||||||
| 	0x04, 0x16, 0xc4, 0x8d, 0xc7, 0x50, 0x8e, 0xe3, 0xc0, 0x6f, 0x36, 0x1e, 0x09, 0xc3, 0x93, 0xaf, | 	0x23, 0x61, 0x78, 0xf2, 0xd2, 0x26, 0xb3, 0x55, 0xd2, 0x8b, 0x2c, 0x16, 0x5e, 0x83, 0x8a, 0x1d, | ||||||
| 	0x37, 0xb9, 0xad, 0x8a, 0x5e, 0x66, 0xb1, 0xf0, 0x2a, 0xd4, 0xec, 0xc0, 0x98, 0x3c, 0x23, 0xe6, | 	0x18, 0xe3, 0xdb, 0xc3, 0xcc, 0x66, 0x66, 0xab, 0xa8, 0x97, 0xed, 0x20, 0xb9, 0x2e, 0xaa, 0x7d, | ||||||
| 	0x36, 0x73, 0x5b, 0x65, 0xbd, 0x6a, 0x07, 0xc9, 0xbb, 0x51, 0xe3, 0xeb, 0x1c, 0xd4, 0xb3, 0xcf, | 	0x95, 0x81, 0xea, 0xe4, 0xed, 0x27, 0x6e, 0x42, 0xd1, 0x71, 0x4d, 0x22, 0x12, 0x41, 0x5e, 0xbd, | ||||||
| 	0xa0, 0xb8, 0x0d, 0x65, 0xc7, 0x35, 0x89, 0x48, 0x04, 0xf9, 0x06, 0xbf, 0xf5, 0x9a, 0x97, 0xd3, | 	0x6f, 0xbd, 0xe1, 0xc2, 0xb4, 0xde, 0x8e, 0xf8, 0x7a, 0xa2, 0xb9, 0xf1, 0x37, 0x05, 0x8a, 0x31, | ||||||
| 	0xe6, 0x41, 0xc4, 0xd7, 0x13, 0xcd, 0x8d, 0xbf, 0x29, 0x50, 0x8e, 0x61, 0x7c, 0x09, 0x0a, 0x1e, | 	0x8c, 0x2f, 0x40, 0xce, 0x23, 0xe1, 0xa9, 0x30, 0x97, 0xdf, 0xcd, 0x20, 0x45, 0x17, 0x6b, 0x8e, | ||||||
| 	0x09, 0xcf, 0x84, 0xb9, 0xe2, 0x6e, 0x0e, 0x29, 0xba, 0x18, 0x73, 0x3c, 0xf0, 0x08, 0x13, 0x29, | 	0x07, 0x1e, 0x61, 0x22, 0x05, 0x22, 0x9c, 0xaf, 0xf9, 0xb9, 0x3a, 0x94, 0x58, 0x62, 0x28, 0x76, | ||||||
| 	0x10, 0xe1, 0x7c, 0xcc, 0xf7, 0xd5, 0xa1, 0xc4, 0x12, 0x0d, 0xb2, 0x3b, 0x1a, 0x51, 0x16, 0x06, | 	0x87, 0x43, 0xca, 0xc2, 0x20, 0x3e, 0xd7, 0x08, 0xdf, 0x8b, 0x60, 0x7c, 0x07, 0x56, 0x43, 0x9f, | ||||||
| 	0xf1, 0xbe, 0x46, 0xf8, 0x5e, 0x04, 0xe3, 0xdb, 0xb0, 0x1a, 0xfa, 0xc4, 0x76, 0x32, 0xdc, 0x82, | 	0xd8, 0xce, 0x04, 0x37, 0x27, 0xb8, 0x28, 0x16, 0x24, 0xe4, 0x1d, 0xb8, 0x14, 0xdb, 0xb5, 0x68, | ||||||
| 	0xe0, 0xa2, 0x58, 0x90, 0x90, 0x77, 0xe0, 0x72, 0x6c, 0xd7, 0xa2, 0x21, 0x31, 0xcf, 0xa8, 0x35, | 	0x48, 0xcc, 0x53, 0x6a, 0x8d, 0x95, 0x0a, 0xe2, 0x6a, 0xed, 0x62, 0x44, 0x68, 0x46, 0xf2, 0x58, | ||||||
| 	0x51, 0x2a, 0x89, 0x37, 0xb6, 0xb7, 0x22, 0x42, 0x3b, 0x92, 0xc7, 0xba, 0x8d, 0xbf, 0x2b, 0xb0, | 	0xb7, 0xf6, 0x77, 0x05, 0x56, 0xe3, 0x31, 0xde, 0x4a, 0x82, 0x75, 0x00, 0x40, 0x18, 0x73, 0xc3, | ||||||
| 	0x1a, 0xb7, 0xf4, 0x56, 0x12, 0xac, 0x43, 0x00, 0xc2, 0x98, 0x1b, 0xa6, 0xc3, 0x35, 0x9b, 0xca, | 	0x74, 0xb8, 0x66, 0x53, 0x79, 0x46, 0xaf, 0xde, 0x48, 0x94, 0xf4, 0x94, 0x81, 0x8d, 0x21, 0xc0, | ||||||
| 	0x33, 0x7a, 0xcd, 0x56, 0xa2, 0xa4, 0xa7, 0x0c, 0x6c, 0x8c, 0x00, 0x26, 0x92, 0x85, 0x61, 0xbb, | 	0x58, 0xb2, 0x30, 0x6c, 0x57, 0xa1, 0x1c, 0x5d, 0x6d, 0x8b, 0xff, 0x8f, 0xc8, 0x6f, 0x3f, 0x90, | ||||||
| 	0x02, 0xd5, 0xe8, 0x8d, 0x5b, 0xfc, 0xa3, 0x44, 0x7e, 0x04, 0x82, 0x84, 0x78, 0xef, 0x8f, 0xd7, | 	0x10, 0x9f, 0xf7, 0xf1, 0x3a, 0xe4, 0x4f, 0xe8, 0xc0, 0x66, 0xd1, 0x85, 0x9b, 0x5c, 0xc4, 0xd7, | ||||||
| 	0xa1, 0x78, 0x4a, 0x87, 0x36, 0x8b, 0x5e, 0xde, 0xe4, 0x20, 0x7e, 0xcf, 0x2b, 0x24, 0xef, 0x79, | 	0x78, 0xb9, 0xe4, 0x1a, 0x6f, 0xf7, 0xe7, 0xb0, 0x66, 0xba, 0xc3, 0x69, 0x77, 0x77, 0xd1, 0xd4, | ||||||
| 	0xbb, 0x4f, 0x60, 0xcd, 0x74, 0x47, 0xd3, 0xee, 0xee, 0xa2, 0xa9, 0x0f, 0xd1, 0xe0, 0x33, 0xe5, | 	0xf7, 0x67, 0xf0, 0xa9, 0xf2, 0x39, 0x8c, 0xa7, 0xb3, 0x3f, 0x2a, 0xca, 0x97, 0x99, 0xec, 0x7e, | ||||||
| 	0x0b, 0x98, 0x74, 0x6a, 0x5f, 0xe5, 0xf2, 0xfb, 0xbd, 0xdd, 0x3f, 0xe5, 0x36, 0xf6, 0xa5, 0x5e, | 	0x77, 0xf7, 0x4f, 0x99, 0x8d, 0x7d, 0xa9, 0xda, 0x8d, 0x77, 0xaa, 0xd3, 0xbe, 0x43, 0x4d, 0xee, | ||||||
| 	0x2f, 0x5e, 0xa6, 0x4e, 0x07, 0x0e, 0x35, 0xb9, 0xeb, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x5f, | 	0xfd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x05, 0x54, 0xc8, 0x7d, 0x07, 0x1a, 0x00, 0x00, | ||||||
| 	0x1c, 0x48, 0x4f, 0x0d, 0x1a, 0x00, 0x00, |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -626,6 +626,7 @@ func (g *Generator) CommandLineParameters(parameter string) { | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if pluginList != "" { | 	if pluginList != "" { | ||||||
| 		// Amend the set of plugins. | 		// Amend the set of plugins. | ||||||
| 		enabled := make(map[string]bool) | 		enabled := make(map[string]bool) | ||||||
| @@ -1180,6 +1181,7 @@ func (g *Generator) generate(file *FileDescriptor) { | |||||||
| 		g.P("const _ = ", g.Pkg["proto"], ".ProtoPackageIsVersion", generatedCodeVersion, " // please upgrade the proto package") | 		g.P("const _ = ", g.Pkg["proto"], ".ProtoPackageIsVersion", generatedCodeVersion, " // please upgrade the proto package") | ||||||
| 		g.P() | 		g.P() | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	for _, td := range g.file.imp { | 	for _, td := range g.file.imp { | ||||||
| 		g.generateImported(td) | 		g.generateImported(td) | ||||||
| 	} | 	} | ||||||
| @@ -2076,6 +2078,11 @@ func (g *Generator) generateMessage(message *Descriptor) { | |||||||
| 			star = "*" | 			star = "*" | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		// In proto3, only generate getters for message fields and oneof fields. | ||||||
|  | 		if message.proto3() && *field.Type != descriptor.FieldDescriptorProto_TYPE_MESSAGE && !oneof { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		// Only export getter symbols for basic types, | 		// Only export getter symbols for basic types, | ||||||
| 		// and for messages and enums in the same package. | 		// and for messages and enums in the same package. | ||||||
| 		// Groups are not exported. | 		// Groups are not exported. | ||||||
| @@ -2134,11 +2141,7 @@ func (g *Generator) generateMessage(message *Descriptor) { | |||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		if !oneof { | 		if !oneof { | ||||||
| 			if message.proto3() { | 			g.P("if m != nil && m." + fname + " != nil {") | ||||||
| 				g.P("if m != nil {") |  | ||||||
| 			} else { |  | ||||||
| 				g.P("if m != nil && m." + fname + " != nil {") |  | ||||||
| 			} |  | ||||||
| 			g.In() | 			g.In() | ||||||
| 			g.P("return " + star + "m." + fname) | 			g.P("return " + star + "m." + fname) | ||||||
| 			g.Out() | 			g.Out() | ||||||
| @@ -2556,7 +2559,6 @@ func (g *Generator) generateExtension(ext *ExtensionDescriptor) { | |||||||
| 	g.P("Field: ", field.Number, ",") | 	g.P("Field: ", field.Number, ",") | ||||||
| 	g.P(`Name: "`, extName, `",`) | 	g.P(`Name: "`, extName, `",`) | ||||||
| 	g.P("Tag: ", tag, ",") | 	g.P("Tag: ", tag, ",") | ||||||
| 	g.P(`Filename: "`, g.file.GetName(), `",`) |  | ||||||
|  |  | ||||||
| 	g.Out() | 	g.Out() | ||||||
| 	g.P("}") | 	g.P("}") | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -48,7 +48,7 @@ import ( | |||||||
| // It is incremented whenever an incompatibility between the generated code and | // It is incremented whenever an incompatibility between the generated code and | ||||||
| // the grpc package is introduced; the generated code references | // the grpc package is introduced; the generated code references | ||||||
| // a constant, grpc.SupportPackageIsVersionN (where N is generatedCodeVersion). | // a constant, grpc.SupportPackageIsVersionN (where N is generatedCodeVersion). | ||||||
| const generatedCodeVersion = 4 | const generatedCodeVersion = 3 | ||||||
|  |  | ||||||
| // Paths for packages used by code generated in this file, | // Paths for packages used by code generated in this file, | ||||||
| // relative to the import_prefix of the generator.Generator. | // relative to the import_prefix of the generator.Generator. | ||||||
| @@ -254,7 +254,7 @@ func (g *grpc) generateService(file *generator.FileDescriptor, service *pb.Servi | |||||||
| 		g.P("},") | 		g.P("},") | ||||||
| 	} | 	} | ||||||
| 	g.P("},") | 	g.P("},") | ||||||
| 	g.P("Metadata: \"", file.GetName(), "\",") | 	g.P("Metadata: ", file.VarName(), ",") | ||||||
| 	g.P("}") | 	g.P("}") | ||||||
| 	g.P() | 	g.P() | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -58,7 +58,7 @@ testbuild:	regenerate | |||||||
|  |  | ||||||
| regenerate: | regenerate: | ||||||
| 	# Invoke protoc once to generate three independent .pb.go files in the same package. | 	# Invoke protoc once to generate three independent .pb.go files in the same package. | ||||||
| 	protoc --go_out=. multi/multi1.proto multi/multi2.proto multi/multi3.proto | 	protoc --go_out=. multi/multi{1,2,3}.proto | ||||||
|  |  | ||||||
| #extension_test:	extension_test.$O | #extension_test:	extension_test.$O | ||||||
| #	$(LD) -L. -o $@ $< | #	$(LD) -L. -o $@ $< | ||||||
|   | |||||||
							
								
								
									
										24
									
								
								vendor/github.com/huandu/xstrings/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/huandu/xstrings/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | # Compiled Object files, Static and Dynamic libs (Shared Objects) | ||||||
|  | *.o | ||||||
|  | *.a | ||||||
|  | *.so | ||||||
|  |  | ||||||
|  | # Folders | ||||||
|  | _obj | ||||||
|  | _test | ||||||
|  |  | ||||||
|  | # Architecture specific extensions/prefixes | ||||||
|  | *.[568vq] | ||||||
|  | [568vq].out | ||||||
|  |  | ||||||
|  | *.cgo1.go | ||||||
|  | *.cgo2.c | ||||||
|  | _cgo_defun.c | ||||||
|  | _cgo_gotypes.go | ||||||
|  | _cgo_export.* | ||||||
|  |  | ||||||
|  | _testmain.go | ||||||
|  |  | ||||||
|  | *.exe | ||||||
|  | *.test | ||||||
|  | *.prof | ||||||
							
								
								
									
										1
									
								
								vendor/github.com/huandu/xstrings/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/huandu/xstrings/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | language: go | ||||||
							
								
								
									
										23
									
								
								vendor/github.com/huandu/xstrings/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/github.com/huandu/xstrings/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | # Contributing # | ||||||
|  |  | ||||||
|  | Thanks for your contribution in advance. No matter what you will contribute to this project, pull request or bug report or feature discussion, it's always highly appreciated. | ||||||
|  |  | ||||||
|  | ## New API or feature ## | ||||||
|  |  | ||||||
|  | I want to speak more about how to add new functions to this package. | ||||||
|  |  | ||||||
|  | Package `xstring` is a collection of useful string functions which should be implemented in Go. It's a bit subject to say which function should be included and which should not. I set up following rules in order to make it clear and as objective as possible. | ||||||
|  |  | ||||||
|  | * Rule 1: Only string algorithm, which takes string as input, can be included. | ||||||
|  | * Rule 2: If a function has been implemented in package `string`, it must not be included. | ||||||
|  | * Rule 3: If a function is not language neutral, it must not be included. | ||||||
|  | * Rule 4: If a function is a part of standard library in other languages, it can be included. | ||||||
|  | * Rule 5: If a function is quite useful in some famous framework or library, it can be included. | ||||||
|  |  | ||||||
|  | New function must be discussed in project issues before submitting any code. If a pull request with new functions is sent without any ref issue, it will be rejected. | ||||||
|  |  | ||||||
|  | ## Pull request ## | ||||||
|  |  | ||||||
|  | Pull request is always welcome. Just make sure you have run `go fmt` and all test cases passed before submit. | ||||||
|  |  | ||||||
|  | If the pull request is to add a new API or feature, don't forget to update README.md and add new API in function list. | ||||||
							
								
								
									
										22
									
								
								vendor/github.com/huandu/xstrings/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/huandu/xstrings/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | The MIT License (MIT) | ||||||
|  |  | ||||||
|  | Copyright (c) 2015 Huan Du | ||||||
|  |  | ||||||
|  | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
|  | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | in the Software without restriction, including without limitation the rights | ||||||
|  | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||||
|  | copies of the Software, and to permit persons to whom the Software is | ||||||
|  | furnished to do so, subject to the following conditions: | ||||||
|  |  | ||||||
|  | The above copyright notice and this permission notice shall be included in all | ||||||
|  | copies or substantial portions of the Software. | ||||||
|  |  | ||||||
|  | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||||
|  | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||||
|  | SOFTWARE. | ||||||
|  |  | ||||||
							
								
								
									
										114
									
								
								vendor/github.com/huandu/xstrings/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								vendor/github.com/huandu/xstrings/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,114 @@ | |||||||
|  | # xstrings # | ||||||
|  |  | ||||||
|  | [](https://travis-ci.org/huandu/xstrings) | ||||||
|  | [](https://godoc.org/github.com/huandu/xstrings) | ||||||
|  |  | ||||||
|  | Go package [xstrings](https://godoc.org/github.com/huandu/xstrings) is a collection of string functions, which are widely used in other languages but absent in Go package [strings](http://golang.org/pkg/strings). | ||||||
|  |  | ||||||
|  | All functions are well tested and carefully tuned for performance. | ||||||
|  |  | ||||||
|  | ## Propose a new function ## | ||||||
|  |  | ||||||
|  | Please review [contributing guideline](CONTRIBUTING.md) and [create new issue](https://github.com/huandu/xstrings/issues) to state why it should be included. | ||||||
|  |  | ||||||
|  | ## Install ## | ||||||
|  |  | ||||||
|  | Use `go get` to install this library. | ||||||
|  |  | ||||||
|  | 	go get github.com/huandu/xstrings | ||||||
|  |  | ||||||
|  | ## API document ## | ||||||
|  |  | ||||||
|  | See [GoDoc](https://godoc.org/github.com/huandu/xstrings) for full document. | ||||||
|  |  | ||||||
|  | ## Function list ## | ||||||
|  |  | ||||||
|  | Go functions have a unique naming style. One, who has experience in other language but new in Go, may have difficulties to find out right string function to use. | ||||||
|  |  | ||||||
|  | Here is a list of functions in [strings](http://golang.org/pkg/strings) and [xstrings](https://godoc.org/github.com/huandu/xstrings) with enough extra information about how to map these functions to their friends in other languages. Hope this list could be helpful for fresh gophers. | ||||||
|  |  | ||||||
|  | ### Package `xstrings` functions ### | ||||||
|  |  | ||||||
|  | *Keep this table sorted by Function in ascending order.* | ||||||
|  |  | ||||||
|  | | Function | Friends | # | | ||||||
|  | | -------- | ------- | --- | | ||||||
|  | | [Center](https://godoc.org/github.com/huandu/xstrings#Center) | `str.center` in Python; `String#center` in Ruby | [#30](https://github.com/huandu/xstrings/issues/30) | | ||||||
|  | | [Count](https://godoc.org/github.com/huandu/xstrings#Count) | `String#count` in Ruby | [#16](https://github.com/huandu/xstrings/issues/16) | | ||||||
|  | | [Delete](https://godoc.org/github.com/huandu/xstrings#Delete) | `String#delete` in Ruby | [#17](https://github.com/huandu/xstrings/issues/17) | | ||||||
|  | | [ExpandTabs](https://godoc.org/github.com/huandu/xstrings#ExpandTabs) | `str.expandtabs` in Python | [#27](https://github.com/huandu/xstrings/issues/27) | | ||||||
|  | | [FirstRuneToLower](https://godoc.org/github.com/huandu/xstrings#FirstRuneToLower) | `lcfirst` in PHP or Perl | [#15](https://github.com/huandu/xstrings/issues/15) | | ||||||
|  | | [FirstRuneToUpper](https://godoc.org/github.com/huandu/xstrings#FirstRuneToUpper) | `String#capitalize` in Ruby; `ucfirst` in PHP or Perl | [#15](https://github.com/huandu/xstrings/issues/15) | | ||||||
|  | | [Insert](https://godoc.org/github.com/huandu/xstrings#Insert) | `String#insert` in Ruby | [#18](https://github.com/huandu/xstrings/issues/18) | | ||||||
|  | | [LastPartition](https://godoc.org/github.com/huandu/xstrings#LastPartition) | `str.rpartition` in Python; `String#rpartition` in Ruby | [#19](https://github.com/huandu/xstrings/issues/19) | | ||||||
|  | | [LeftJustify](https://godoc.org/github.com/huandu/xstrings#LeftJustify) | `str.ljust` in Python; `String#ljust` in Ruby | [#28](https://github.com/huandu/xstrings/issues/28) | | ||||||
|  | | [Len](https://godoc.org/github.com/huandu/xstrings#Len) | `mb_strlen` in PHP | [#23](https://github.com/huandu/xstrings/issues/23) | | ||||||
|  | | [Partition](https://godoc.org/github.com/huandu/xstrings#Partition) | `str.partition` in Python; `String#partition` in Ruby | [#10](https://github.com/huandu/xstrings/issues/10) | | ||||||
|  | | [Reverse](https://godoc.org/github.com/huandu/xstrings#Reverse) | `String#reverse` in Ruby; `strrev` in PHP; `reverse` in Perl | [#7](https://github.com/huandu/xstrings/issues/7) | | ||||||
|  | | [RightJustify](https://godoc.org/github.com/huandu/xstrings#RightJustify) | `str.rjust` in Python; `String#rjust` in Ruby | [#29](https://github.com/huandu/xstrings/issues/29) | | ||||||
|  | | [RuneWidth](https://godoc.org/github.com/huandu/xstrings#RuneWidth) | - | [#27](https://github.com/huandu/xstrings/issues/27) | | ||||||
|  | | [Scrub](https://godoc.org/github.com/huandu/xstrings#Scrub) | `String#scrub` in Ruby | [#20](https://github.com/huandu/xstrings/issues/20) | | ||||||
|  | | [Shuffle](https://godoc.org/github.com/huandu/xstrings#Shuffle) | `str_shuffle` in PHP | [#13](https://github.com/huandu/xstrings/issues/13) | | ||||||
|  | | [ShuffleSource](https://godoc.org/github.com/huandu/xstrings#ShuffleSource) | `str_shuffle` in PHP | [#13](https://github.com/huandu/xstrings/issues/13) | | ||||||
|  | | [Slice](https://godoc.org/github.com/huandu/xstrings#Slice) | `mb_substr` in PHP | [#9](https://github.com/huandu/xstrings/issues/9) | | ||||||
|  | | [Squeeze](https://godoc.org/github.com/huandu/xstrings#Squeeze) | `String#squeeze` in Ruby | [#11](https://github.com/huandu/xstrings/issues/11) | | ||||||
|  | | [Successor](https://godoc.org/github.com/huandu/xstrings#Successor) | `String#succ` or `String#next` in Ruby | [#22](https://github.com/huandu/xstrings/issues/22) | | ||||||
|  | | [SwapCase](https://godoc.org/github.com/huandu/xstrings#SwapCase) | `str.swapcase` in Python; `String#swapcase` in Ruby | [#12](https://github.com/huandu/xstrings/issues/12) | | ||||||
|  | | [ToCamelCase](https://godoc.org/github.com/huandu/xstrings#ToCamelCase) | `String#camelize` in RoR | [#1](https://github.com/huandu/xstrings/issues/1) | | ||||||
|  | | [ToSnakeCase](https://godoc.org/github.com/huandu/xstrings#ToSnakeCase) | `String#underscore` in RoR | [#1](https://github.com/huandu/xstrings/issues/1) | | ||||||
|  | | [Translate](https://godoc.org/github.com/huandu/xstrings#Translate) | `str.translate` in Python; `String#tr` in Ruby; `strtr` in PHP; `tr///` in Perl | [#21](https://github.com/huandu/xstrings/issues/21) | | ||||||
|  | | [Width](https://godoc.org/github.com/huandu/xstrings#Width) | `mb_strwidth` in PHP | [#26](https://github.com/huandu/xstrings/issues/26) | | ||||||
|  | | [WordCount](https://godoc.org/github.com/huandu/xstrings#WordCount) | `str_word_count` in PHP | [#14](https://github.com/huandu/xstrings/issues/14) | | ||||||
|  | | [WordSplit](https://godoc.org/github.com/huandu/xstrings#WordSplit) | - | [#14](https://github.com/huandu/xstrings/issues/14) | | ||||||
|  |  | ||||||
|  | ### Package `strings` functions ### | ||||||
|  |  | ||||||
|  | *Keep this table sorted by Function in ascending order.* | ||||||
|  |  | ||||||
|  | | Function | Friends | | ||||||
|  | | -------- | ------- | | ||||||
|  | | [Contains](http://golang.org/pkg/strings/#Contains) | `String#include?` in Ruby | | ||||||
|  | | [ContainsAny](http://golang.org/pkg/strings/#ContainsAny) | - | | ||||||
|  | | [ContainsRune](http://golang.org/pkg/strings/#ContainsRune) | - | | ||||||
|  | | [Count](http://golang.org/pkg/strings/#Count) | `str.count` in Python; `substr_count` in PHP | | ||||||
|  | | [EqualFold](http://golang.org/pkg/strings/#EqualFold) | `stricmp` in PHP; `String#casecmp` in Ruby | | ||||||
|  | | [Fields](http://golang.org/pkg/strings/#Fields) | `str.split` in Python; `split` in Perl; `String#split` in Ruby | | ||||||
|  | | [FieldsFunc](http://golang.org/pkg/strings/#FieldsFunc) | - | | ||||||
|  | | [HasPrefix](http://golang.org/pkg/strings/#HasPrefix) | `str.startswith` in Python; `String#start_with?` in Ruby | | ||||||
|  | | [HasSuffix](http://golang.org/pkg/strings/#HasSuffix) | `str.endswith` in Python; `String#end_with?` in Ruby | | ||||||
|  | | [Index](http://golang.org/pkg/strings/#Index) | `str.index` in Python; `String#index` in Ruby; `strpos` in PHP; `index` in Perl | | ||||||
|  | | [IndexAny](http://golang.org/pkg/strings/#IndexAny) | - | | ||||||
|  | | [IndexByte](http://golang.org/pkg/strings/#IndexByte) | - | | ||||||
|  | | [IndexFunc](http://golang.org/pkg/strings/#IndexFunc) | - | | ||||||
|  | | [IndexRune](http://golang.org/pkg/strings/#IndexRune) | - | | ||||||
|  | | [Join](http://golang.org/pkg/strings/#Join) | `str.join` in Python; `Array#join` in Ruby; `implode` in PHP; `join` in Perl | | ||||||
|  | | [LastIndex](http://golang.org/pkg/strings/#LastIndex) | `str.rindex` in Python; `String#rindex`; `strrpos` in PHP; `rindex` in Perl | | ||||||
|  | | [LastIndexAny](http://golang.org/pkg/strings/#LastIndexAny) | - | | ||||||
|  | | [LastIndexFunc](http://golang.org/pkg/strings/#LastIndexFunc) | - | | ||||||
|  | | [Map](http://golang.org/pkg/strings/#Map) | `String#each_codepoint` in Ruby | | ||||||
|  | | [Repeat](http://golang.org/pkg/strings/#Repeat) | operator `*` in Python and Ruby; `str_repeat` in PHP | | ||||||
|  | | [Replace](http://golang.org/pkg/strings/#Replace) | `str.replace` in Python; `String#sub` in Ruby; `str_replace` in PHP | | ||||||
|  | | [Split](http://golang.org/pkg/strings/#Split) | `str.split` in Python; `String#split` in Ruby; `explode` in PHP; `split` in Perl | | ||||||
|  | | [SplitAfter](http://golang.org/pkg/strings/#SplitAfter) | - | | ||||||
|  | | [SplitAfterN](http://golang.org/pkg/strings/#SplitAfterN) | - | | ||||||
|  | | [SplitN](http://golang.org/pkg/strings/#SplitN) | `str.split` in Python; `String#split` in Ruby; `explode` in PHP; `split` in Perl | | ||||||
|  | | [Title](http://golang.org/pkg/strings/#Title) | `str.title` in Python | | ||||||
|  | | [ToLower](http://golang.org/pkg/strings/#ToLower) | `str.lower` in Python; `String#downcase` in Ruby; `strtolower` in PHP; `lc` in Perl | | ||||||
|  | | [ToLowerSpecial](http://golang.org/pkg/strings/#ToLowerSpecial) | - | | ||||||
|  | | [ToTitle](http://golang.org/pkg/strings/#ToTitle) | - | | ||||||
|  | | [ToTitleSpecial](http://golang.org/pkg/strings/#ToTitleSpecial) | - | | ||||||
|  | | [ToUpper](http://golang.org/pkg/strings/#ToUpper) | `str.upper` in Python; `String#upcase` in Ruby; `strtoupper` in PHP; `uc` in Perl | | ||||||
|  | | [ToUpperSpecial](http://golang.org/pkg/strings/#ToUpperSpecial) | - | | ||||||
|  | | [Trim](http://golang.org/pkg/strings/#Trim) | `str.strip` in Python; `String#strip` in Ruby; `trim` in PHP | | ||||||
|  | | [TrimFunc](http://golang.org/pkg/strings/#TrimFunc) | - | | ||||||
|  | | [TrimLeft](http://golang.org/pkg/strings/#TrimLeft) | `str.lstrip` in Python; `String#lstrip` in Ruby; `ltrim` in PHP | | ||||||
|  | | [TrimLeftFunc](http://golang.org/pkg/strings/#TrimLeftFunc) | - | | ||||||
|  | | [TrimPrefix](http://golang.org/pkg/strings/#TrimPrefix) | - | | ||||||
|  | | [TrimRight](http://golang.org/pkg/strings/#TrimRight) | `str.rstrip` in Python; `String#rstrip` in Ruby; `rtrim` in PHP | | ||||||
|  | | [TrimRightFunc](http://golang.org/pkg/strings/#TrimRightFunc) | - | | ||||||
|  | | [TrimSpace](http://golang.org/pkg/strings/#TrimSpace) | `str.strip` in Python; `String#strip` in Ruby; `trim` in PHP | | ||||||
|  | | [TrimSuffix](http://golang.org/pkg/strings/#TrimSuffix) | `String#chomp` in Ruby; `chomp` in Perl | | ||||||
|  |  | ||||||
|  | ## License ## | ||||||
|  |  | ||||||
|  | This library is licensed under MIT license. See LICENSE for details. | ||||||
							
								
								
									
										25
									
								
								vendor/github.com/huandu/xstrings/common.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								vendor/github.com/huandu/xstrings/common.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | const _BUFFER_INIT_GROW_SIZE_MAX = 2048 | ||||||
|  |  | ||||||
|  | // Lazy initialize a buffer. | ||||||
|  | func allocBuffer(orig, cur string) *bytes.Buffer { | ||||||
|  | 	output := &bytes.Buffer{} | ||||||
|  | 	maxSize := len(orig) * 4 | ||||||
|  |  | ||||||
|  | 	// Avoid to reserve too much memory at once. | ||||||
|  | 	if maxSize > _BUFFER_INIT_GROW_SIZE_MAX { | ||||||
|  | 		maxSize = _BUFFER_INIT_GROW_SIZE_MAX | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	output.Grow(maxSize) | ||||||
|  | 	output.WriteString(orig[:len(orig)-len(cur)]) | ||||||
|  | 	return output | ||||||
|  | } | ||||||
							
								
								
									
										357
									
								
								vendor/github.com/huandu/xstrings/convert.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								vendor/github.com/huandu/xstrings/convert.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,357 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"math/rand" | ||||||
|  | 	"unicode" | ||||||
|  | 	"unicode/utf8" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // ToCamelCase can convert all lower case characters behind underscores | ||||||
|  | // to upper case character. | ||||||
|  | // Underscore character will be removed in result except following cases. | ||||||
|  | //     * More than 1 underscore. | ||||||
|  | //           "a__b" => "A_B" | ||||||
|  | //     * At the beginning of string. | ||||||
|  | //           "_a" => "_A" | ||||||
|  | //     * At the end of string. | ||||||
|  | //           "ab_" => "Ab_" | ||||||
|  | func ToCamelCase(str string) string { | ||||||
|  | 	if len(str) == 0 { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	buf := &bytes.Buffer{} | ||||||
|  | 	var r0, r1 rune | ||||||
|  | 	var size int | ||||||
|  |  | ||||||
|  | 	// leading '_' will appear in output. | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		r0, size = utf8.DecodeRuneInString(str) | ||||||
|  | 		str = str[size:] | ||||||
|  |  | ||||||
|  | 		if r0 != '_' { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		buf.WriteRune(r0) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(str) == 0 { | ||||||
|  | 		return buf.String() | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	buf.WriteRune(unicode.ToUpper(r0)) | ||||||
|  | 	r0, size = utf8.DecodeRuneInString(str) | ||||||
|  | 	str = str[size:] | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		r1 = r0 | ||||||
|  | 		r0, size = utf8.DecodeRuneInString(str) | ||||||
|  | 		str = str[size:] | ||||||
|  |  | ||||||
|  | 		if r1 == '_' && r0 != '_' { | ||||||
|  | 			r0 = unicode.ToUpper(r0) | ||||||
|  | 		} else { | ||||||
|  | 			buf.WriteRune(r1) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	buf.WriteRune(r0) | ||||||
|  | 	return buf.String() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // ToSnakeCase can convert all upper case characters in a string to | ||||||
|  | // underscore format. | ||||||
|  | // | ||||||
|  | // Some samples. | ||||||
|  | //     "FirstName"  => "first_name" | ||||||
|  | //     "HTTPServer" => "http_server" | ||||||
|  | //     "NoHTTPS"    => "no_https" | ||||||
|  | //     "GO_PATH"    => "go_path" | ||||||
|  | //     "GO PATH"    => "go_path"      // space is converted to underscore. | ||||||
|  | //     "GO-PATH"    => "go_path"      // hyphen is converted to underscore. | ||||||
|  | func ToSnakeCase(str string) string { | ||||||
|  | 	if len(str) == 0 { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	buf := &bytes.Buffer{} | ||||||
|  | 	var prev, r0, r1 rune | ||||||
|  | 	var size int | ||||||
|  |  | ||||||
|  | 	r0 = '_' | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		prev = r0 | ||||||
|  | 		r0, size = utf8.DecodeRuneInString(str) | ||||||
|  | 		str = str[size:] | ||||||
|  |  | ||||||
|  | 		switch { | ||||||
|  | 		case r0 == utf8.RuneError: | ||||||
|  | 			buf.WriteByte(byte(str[0])) | ||||||
|  |  | ||||||
|  | 		case unicode.IsUpper(r0): | ||||||
|  | 			if prev != '_' { | ||||||
|  | 				buf.WriteRune('_') | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			buf.WriteRune(unicode.ToLower(r0)) | ||||||
|  |  | ||||||
|  | 			if len(str) == 0 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			r0, size = utf8.DecodeRuneInString(str) | ||||||
|  | 			str = str[size:] | ||||||
|  |  | ||||||
|  | 			if !unicode.IsUpper(r0) { | ||||||
|  | 				buf.WriteRune(r0) | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// find next non-upper-case character and insert `_` properly. | ||||||
|  | 			// it's designed to convert `HTTPServer` to `http_server`. | ||||||
|  | 			// if there are more than 2 adjacent upper case characters in a word, | ||||||
|  | 			// treat them as an abbreviation plus a normal word. | ||||||
|  | 			for len(str) > 0 { | ||||||
|  | 				r1 = r0 | ||||||
|  | 				r0, size = utf8.DecodeRuneInString(str) | ||||||
|  | 				str = str[size:] | ||||||
|  |  | ||||||
|  | 				if r0 == utf8.RuneError { | ||||||
|  | 					buf.WriteRune(unicode.ToLower(r1)) | ||||||
|  | 					buf.WriteByte(byte(str[0])) | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if !unicode.IsUpper(r0) { | ||||||
|  | 					if r0 == '_' || r0 == ' ' || r0 == '-' { | ||||||
|  | 						r0 = '_' | ||||||
|  |  | ||||||
|  | 						buf.WriteRune(unicode.ToLower(r1)) | ||||||
|  | 					} else { | ||||||
|  | 						buf.WriteRune('_') | ||||||
|  | 						buf.WriteRune(unicode.ToLower(r1)) | ||||||
|  | 						buf.WriteRune(r0) | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				buf.WriteRune(unicode.ToLower(r1)) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if len(str) == 0 || r0 == '_' { | ||||||
|  | 				buf.WriteRune(unicode.ToLower(r0)) | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 		default: | ||||||
|  | 			if r0 == ' ' || r0 == '-' { | ||||||
|  | 				r0 = '_' | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			buf.WriteRune(r0) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return buf.String() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // SwapCase will swap characters case from upper to lower or lower to upper. | ||||||
|  | func SwapCase(str string) string { | ||||||
|  | 	var r rune | ||||||
|  | 	var size int | ||||||
|  |  | ||||||
|  | 	buf := &bytes.Buffer{} | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		r, size = utf8.DecodeRuneInString(str) | ||||||
|  |  | ||||||
|  | 		switch { | ||||||
|  | 		case unicode.IsUpper(r): | ||||||
|  | 			buf.WriteRune(unicode.ToLower(r)) | ||||||
|  |  | ||||||
|  | 		case unicode.IsLower(r): | ||||||
|  | 			buf.WriteRune(unicode.ToUpper(r)) | ||||||
|  |  | ||||||
|  | 		default: | ||||||
|  | 			buf.WriteRune(r) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		str = str[size:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return buf.String() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // FirstRuneToUpper converts first rune to upper case if necessary. | ||||||
|  | func FirstRuneToUpper(str string) string { | ||||||
|  | 	if str == "" { | ||||||
|  | 		return str | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	r, size := utf8.DecodeRuneInString(str) | ||||||
|  |  | ||||||
|  | 	if !unicode.IsLower(r) { | ||||||
|  | 		return str | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	buf := &bytes.Buffer{} | ||||||
|  | 	buf.WriteRune(unicode.ToUpper(r)) | ||||||
|  | 	buf.WriteString(str[size:]) | ||||||
|  | 	return buf.String() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // FirstRuneToLower converts first rune to lower case if necessary. | ||||||
|  | func FirstRuneToLower(str string) string { | ||||||
|  | 	if str == "" { | ||||||
|  | 		return str | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	r, size := utf8.DecodeRuneInString(str) | ||||||
|  |  | ||||||
|  | 	if !unicode.IsUpper(r) { | ||||||
|  | 		return str | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	buf := &bytes.Buffer{} | ||||||
|  | 	buf.WriteRune(unicode.ToLower(r)) | ||||||
|  | 	buf.WriteString(str[size:]) | ||||||
|  | 	return buf.String() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Shuffle randomizes runes in a string and returns the result. | ||||||
|  | // It uses default random source in `math/rand`. | ||||||
|  | func Shuffle(str string) string { | ||||||
|  | 	if str == "" { | ||||||
|  | 		return str | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runes := []rune(str) | ||||||
|  | 	index := 0 | ||||||
|  |  | ||||||
|  | 	for i := len(runes) - 1; i > 0; i-- { | ||||||
|  | 		index = rand.Intn(i + 1) | ||||||
|  |  | ||||||
|  | 		if i != index { | ||||||
|  | 			runes[i], runes[index] = runes[index], runes[i] | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return string(runes) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // ShuffleSource randomizes runes in a string with given random source. | ||||||
|  | func ShuffleSource(str string, src rand.Source) string { | ||||||
|  | 	if str == "" { | ||||||
|  | 		return str | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runes := []rune(str) | ||||||
|  | 	index := 0 | ||||||
|  | 	r := rand.New(src) | ||||||
|  |  | ||||||
|  | 	for i := len(runes) - 1; i > 0; i-- { | ||||||
|  | 		index = r.Intn(i + 1) | ||||||
|  |  | ||||||
|  | 		if i != index { | ||||||
|  | 			runes[i], runes[index] = runes[index], runes[i] | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return string(runes) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Successor returns the successor to string. | ||||||
|  | // | ||||||
|  | // If there is one alphanumeric rune is found in string, increase the rune by 1. | ||||||
|  | // If increment generates a "carry", the rune to the left of it is incremented. | ||||||
|  | // This process repeats until there is no carry, adding an additional rune if necessary. | ||||||
|  | // | ||||||
|  | // If there is no alphanumeric rune, the rightmost rune will be increased by 1 | ||||||
|  | // regardless whether the result is a valid rune or not. | ||||||
|  | // | ||||||
|  | // Only following characters are alphanumeric. | ||||||
|  | //     * a - z | ||||||
|  | //     * A - Z | ||||||
|  | //     * 0 - 9 | ||||||
|  | // | ||||||
|  | // Samples (borrowed from ruby's String#succ document): | ||||||
|  | //     "abcd"      => "abce" | ||||||
|  | //     "THX1138"   => "THX1139" | ||||||
|  | //     "<<koala>>" => "<<koalb>>" | ||||||
|  | //     "1999zzz"   => "2000aaa" | ||||||
|  | //     "ZZZ9999"   => "AAAA0000" | ||||||
|  | //     "***"       => "**+" | ||||||
|  | func Successor(str string) string { | ||||||
|  | 	if str == "" { | ||||||
|  | 		return str | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	var r rune | ||||||
|  | 	var i int | ||||||
|  | 	carry := ' ' | ||||||
|  | 	runes := []rune(str) | ||||||
|  | 	l := len(runes) | ||||||
|  | 	lastAlphanumeric := l | ||||||
|  |  | ||||||
|  | 	for i = l - 1; i >= 0; i-- { | ||||||
|  | 		r = runes[i] | ||||||
|  |  | ||||||
|  | 		if ('a' <= r && r <= 'y') || | ||||||
|  | 			('A' <= r && r <= 'Y') || | ||||||
|  | 			('0' <= r && r <= '8') { | ||||||
|  | 			runes[i]++ | ||||||
|  | 			carry = ' ' | ||||||
|  | 			lastAlphanumeric = i | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		switch r { | ||||||
|  | 		case 'z': | ||||||
|  | 			runes[i] = 'a' | ||||||
|  | 			carry = 'a' | ||||||
|  | 			lastAlphanumeric = i | ||||||
|  |  | ||||||
|  | 		case 'Z': | ||||||
|  | 			runes[i] = 'A' | ||||||
|  | 			carry = 'A' | ||||||
|  | 			lastAlphanumeric = i | ||||||
|  |  | ||||||
|  | 		case '9': | ||||||
|  | 			runes[i] = '0' | ||||||
|  | 			carry = '0' | ||||||
|  | 			lastAlphanumeric = i | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// Needs to add one character for carry. | ||||||
|  | 	if i < 0 && carry != ' ' { | ||||||
|  | 		buf := &bytes.Buffer{} | ||||||
|  | 		buf.Grow(l + 4) // Reserve enough space for write. | ||||||
|  |  | ||||||
|  | 		if lastAlphanumeric != 0 { | ||||||
|  | 			buf.WriteString(str[:lastAlphanumeric]) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		buf.WriteRune(carry) | ||||||
|  |  | ||||||
|  | 		for _, r = range runes[lastAlphanumeric:] { | ||||||
|  | 			buf.WriteRune(r) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		return buf.String() | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// No alphanumeric character. Simply increase last rune's value. | ||||||
|  | 	if lastAlphanumeric == l { | ||||||
|  | 		runes[l-1]++ | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return string(runes) | ||||||
|  | } | ||||||
							
								
								
									
										163
									
								
								vendor/github.com/huandu/xstrings/convert_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								vendor/github.com/huandu/xstrings/convert_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"sort" | ||||||
|  | 	"strings" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestToSnakeCase(t *testing.T) { | ||||||
|  | 	runTestCases(t, ToSnakeCase, _M{ | ||||||
|  | 		"HTTPServer":         "http_server", | ||||||
|  | 		"_camelCase":         "_camel_case", | ||||||
|  | 		"NoHTTPS":            "no_https", | ||||||
|  | 		"Wi_thF":             "wi_th_f", | ||||||
|  | 		"_AnotherTES_TCaseP": "_another_tes_t_case_p", | ||||||
|  | 		"ALL":                "all", | ||||||
|  | 		"_HELLO_WORLD_":      "_hello_world_", | ||||||
|  | 		"HELLO_WORLD":        "hello_world", | ||||||
|  | 		"HELLO____WORLD":     "hello____world", | ||||||
|  | 		"TW":                 "tw", | ||||||
|  | 		"_C":                 "_c", | ||||||
|  |  | ||||||
|  | 		"  sentence case  ":                                    "__sentence_case__", | ||||||
|  | 		" Mixed-hyphen case _and SENTENCE_case and UPPER-case": "_mixed_hyphen_case__and_sentence_case_and_upper_case", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestToCamelCase(t *testing.T) { | ||||||
|  | 	runTestCases(t, ToCamelCase, _M{ | ||||||
|  | 		"http_server":     "HttpServer", | ||||||
|  | 		"_camel_case":     "_CamelCase", | ||||||
|  | 		"no_https":        "NoHttps", | ||||||
|  | 		"_complex__case_": "_Complex_Case_", | ||||||
|  | 		"all":             "All", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestSwapCase(t *testing.T) { | ||||||
|  | 	runTestCases(t, SwapCase, _M{ | ||||||
|  | 		"swapCase": "SWAPcASE", | ||||||
|  | 		"Θ~λa云Ξπ":  "θ~ΛA云ξΠ", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestFirstRuneToUpper(t *testing.T) { | ||||||
|  | 	runTestCases(t, FirstRuneToUpper, _M{ | ||||||
|  | 		"hello, world!": "Hello, world!", | ||||||
|  | 		"Hello, world!": "Hello, world!", | ||||||
|  | 		"你好,世界!":        "你好,世界!", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestFirstRuneToLower(t *testing.T) { | ||||||
|  | 	runTestCases(t, FirstRuneToLower, _M{ | ||||||
|  | 		"hello, world!": "hello, world!", | ||||||
|  | 		"Hello, world!": "hello, world!", | ||||||
|  | 		"你好,世界!":        "你好,世界!", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestShuffle(t *testing.T) { | ||||||
|  | 	// It seems there is no reliable way to test shuffled string. | ||||||
|  | 	// Runner just make sure shuffled string has the same runes as origin string. | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		s := Shuffle(str) | ||||||
|  | 		slice := sort.StringSlice(strings.Split(s, "")) | ||||||
|  | 		slice.Sort() | ||||||
|  | 		return strings.Join(slice, "") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		"":            "", | ||||||
|  | 		"facgbheidjk": "abcdefghijk", | ||||||
|  | 		"尝试中文":        "中尝文试", | ||||||
|  | 		"zh英文hun排":    "hhnuz排文英", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type testShuffleSource int | ||||||
|  |  | ||||||
|  | // A generated random number sequance just for testing. | ||||||
|  | var testShuffleTable = []int64{ | ||||||
|  | 	1874068156324778273, | ||||||
|  | 	3328451335138149956, | ||||||
|  | 	5263531936693774911, | ||||||
|  | 	7955079406183515637, | ||||||
|  | 	2703501726821866378, | ||||||
|  | 	2740103009342231109, | ||||||
|  | 	6941261091797652072, | ||||||
|  | 	1905388747193831650, | ||||||
|  | 	7981306761429961588, | ||||||
|  | 	6426100070888298971, | ||||||
|  | 	4831389563158288344, | ||||||
|  | 	261049867304784443, | ||||||
|  | 	1460320609597786623, | ||||||
|  | 	5600924393587988459, | ||||||
|  | 	8995016276575641803, | ||||||
|  | 	732830328053361739, | ||||||
|  | 	5486140987150761883, | ||||||
|  | 	545291762129038907, | ||||||
|  | 	6382800227808658932, | ||||||
|  | 	2781055864473387780, | ||||||
|  | 	1598098976185383115, | ||||||
|  | 	4990765271833742716, | ||||||
|  | 	5018949295715050020, | ||||||
|  | 	2568779411109623071, | ||||||
|  | 	3902890183311134652, | ||||||
|  | 	4893789450120281907, | ||||||
|  | 	2338498362660772719, | ||||||
|  | 	2601737961087659062, | ||||||
|  | 	7273596521315663110, | ||||||
|  | 	3337066551442961397, | ||||||
|  | 	8121576815539813105, | ||||||
|  | 	2740376916591569721, | ||||||
|  | 	8249030965139585917, | ||||||
|  | 	898860202204764712, | ||||||
|  | 	9010467728050264449, | ||||||
|  | 	685213522303989579, | ||||||
|  | 	2050257992909156333, | ||||||
|  | 	6281838661429879825, | ||||||
|  | 	2227583514184312746, | ||||||
|  | 	2873287401706343734, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (src testShuffleSource) Int63() int64 { | ||||||
|  | 	n := testShuffleTable[int(src)%len(testShuffleTable)] | ||||||
|  | 	src++ | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (src testShuffleSource) Seed(int64) {} | ||||||
|  |  | ||||||
|  | func TestShuffleSource(t *testing.T) { | ||||||
|  | 	var src testShuffleSource | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		return ShuffleSource(str, src) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		"":            "", | ||||||
|  | 		"facgbheidjk": "bakefjgichd", | ||||||
|  | 		"尝试中文怎么样":     "怎试中样尝么文", | ||||||
|  | 		"zh英文hun排":    "hh英nzu文排", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestSuccessor(t *testing.T) { | ||||||
|  | 	runTestCases(t, Successor, _M{ | ||||||
|  | 		"":          "", | ||||||
|  | 		"abcd":      "abce", | ||||||
|  | 		"THX1138":   "THX1139", | ||||||
|  | 		"<<koala>>": "<<koalb>>", | ||||||
|  | 		"1999zzz":   "2000aaa", | ||||||
|  | 		"ZZZ9999":   "AAAA0000", | ||||||
|  | 		"***":       "**+", | ||||||
|  |  | ||||||
|  | 		"来点中文试试":               "来点中文试诖", | ||||||
|  | 		"中cZ英ZZ文zZ混9zZ9杂99进z位": "中dA英AA文aA混0aA0杂00进a位", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
							
								
								
									
										120
									
								
								vendor/github.com/huandu/xstrings/count.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								vendor/github.com/huandu/xstrings/count.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"unicode" | ||||||
|  | 	"unicode/utf8" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // Get str's utf8 rune length. | ||||||
|  | func Len(str string) int { | ||||||
|  | 	return utf8.RuneCountInString(str) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Count number of words in a string. | ||||||
|  | // | ||||||
|  | // Word is defined as a locale dependent string containing alphabetic characters, | ||||||
|  | // which may also contain but not start with `'` and `-` characters. | ||||||
|  | func WordCount(str string) int { | ||||||
|  | 	var r rune | ||||||
|  | 	var size, n int | ||||||
|  |  | ||||||
|  | 	inWord := false | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		r, size = utf8.DecodeRuneInString(str) | ||||||
|  |  | ||||||
|  | 		switch { | ||||||
|  | 		case isAlphabet(r): | ||||||
|  | 			if !inWord { | ||||||
|  | 				inWord = true | ||||||
|  | 				n++ | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 		case inWord && (r == '\'' || r == '-'): | ||||||
|  | 			// Still in word. | ||||||
|  |  | ||||||
|  | 		default: | ||||||
|  | 			inWord = false | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		str = str[size:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const minCJKCharacter = '\u3400' | ||||||
|  |  | ||||||
|  | // Checks r is a letter but not CJK character. | ||||||
|  | func isAlphabet(r rune) bool { | ||||||
|  | 	if !unicode.IsLetter(r) { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	switch { | ||||||
|  | 	// Quick check for non-CJK character. | ||||||
|  | 	case r < minCJKCharacter: | ||||||
|  | 		return true | ||||||
|  |  | ||||||
|  | 	// Common CJK characters. | ||||||
|  | 	case r >= '\u4E00' && r <= '\u9FCC': | ||||||
|  | 		return false | ||||||
|  |  | ||||||
|  | 	// Rare CJK characters. | ||||||
|  | 	case r >= '\u3400' && r <= '\u4D85': | ||||||
|  | 		return false | ||||||
|  |  | ||||||
|  | 	// Rare and historic CJK characters. | ||||||
|  | 	case r >= '\U00020000' && r <= '\U0002B81D': | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Width returns string width in monotype font. | ||||||
|  | // Multi-byte characters are usually twice the width of single byte characters. | ||||||
|  | // | ||||||
|  | // Algorithm comes from `mb_strwidth` in PHP. | ||||||
|  | // http://php.net/manual/en/function.mb-strwidth.php | ||||||
|  | func Width(str string) int { | ||||||
|  | 	var r rune | ||||||
|  | 	var size, n int | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		r, size = utf8.DecodeRuneInString(str) | ||||||
|  | 		n += RuneWidth(r) | ||||||
|  | 		str = str[size:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // RuneWidth returns character width in monotype font. | ||||||
|  | // Multi-byte characters are usually twice the width of single byte characters. | ||||||
|  | // | ||||||
|  | // Algorithm comes from `mb_strwidth` in PHP. | ||||||
|  | // http://php.net/manual/en/function.mb-strwidth.php | ||||||
|  | func RuneWidth(r rune) int { | ||||||
|  | 	switch { | ||||||
|  | 	case r == utf8.RuneError || r < '\x20': | ||||||
|  | 		return 0 | ||||||
|  |  | ||||||
|  | 	case '\x20' <= r && r < '\u2000': | ||||||
|  | 		return 1 | ||||||
|  |  | ||||||
|  | 	case '\u2000' <= r && r < '\uFF61': | ||||||
|  | 		return 2 | ||||||
|  |  | ||||||
|  | 	case '\uFF61' <= r && r < '\uFFA0': | ||||||
|  | 		return 1 | ||||||
|  |  | ||||||
|  | 	case '\uFFA0' <= r: | ||||||
|  | 		return 2 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
							
								
								
									
										62
									
								
								vendor/github.com/huandu/xstrings/count_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								vendor/github.com/huandu/xstrings/count_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestLen(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		return fmt.Sprint(Len(str)) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		"abcdef":    "6", | ||||||
|  | 		"中文":        "2", | ||||||
|  | 		"中yin文hun排": "9", | ||||||
|  | 		"":          "0", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestWordCount(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		return fmt.Sprint(WordCount(str)) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		"one word: λ":             "3", | ||||||
|  | 		"中文":                      "0", | ||||||
|  | 		"你好,sekai!":               "1", | ||||||
|  | 		"oh, it's super-fancy!!a": "4", | ||||||
|  | 		"":        "0", | ||||||
|  | 		"-":       "0", | ||||||
|  | 		"it's-'s": "1", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestWidth(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		return fmt.Sprint(Width(str)) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		"abcd\t0123\n7890": "12", | ||||||
|  | 		"中zh英eng文混排":       "15", | ||||||
|  | 		"": "0", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestRuneWidth(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		return fmt.Sprint(RuneWidth([]rune(str)[0])) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		"a":    "1", | ||||||
|  | 		"中":    "2", | ||||||
|  | 		"\x11": "0", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
							
								
								
									
										8
									
								
								vendor/github.com/huandu/xstrings/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/huandu/xstrings/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | // Package `xstrings` is to provide string algorithms which are useful but not included in `strings` package. | ||||||
|  | // See project home page for details. https://github.com/huandu/xstrings | ||||||
|  | // | ||||||
|  | // Package `xstrings` assumes all strings are encoded in utf8. | ||||||
|  | package xstrings | ||||||
							
								
								
									
										170
									
								
								vendor/github.com/huandu/xstrings/format.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								vendor/github.com/huandu/xstrings/format.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,170 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"unicode/utf8" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // ExpandTabs can expand tabs ('\t') rune in str to one or more spaces dpending on | ||||||
|  | // current column and tabSize. | ||||||
|  | // The column number is reset to zero after each newline ('\n') occurring in the str. | ||||||
|  | // | ||||||
|  | // ExpandTabs uses RuneWidth to decide rune's width. | ||||||
|  | // For example, CJK characters will be treated as two characters. | ||||||
|  | // | ||||||
|  | // If tabSize <= 0, ExpandTabs panics with error. | ||||||
|  | // | ||||||
|  | // Samples: | ||||||
|  | //     ExpandTabs("a\tbc\tdef\tghij\tk", 4) => "a   bc  def ghij    k" | ||||||
|  | //     ExpandTabs("abcdefg\thij\nk\tl", 4)  => "abcdefg hij\nk   l" | ||||||
|  | //     ExpandTabs("z中\t文\tw", 4)           => "z中 文  w" | ||||||
|  | func ExpandTabs(str string, tabSize int) string { | ||||||
|  | 	if tabSize <= 0 { | ||||||
|  | 		panic("tab size must be positive") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	var r rune | ||||||
|  | 	var i, size, column, expand int | ||||||
|  | 	var output *bytes.Buffer | ||||||
|  |  | ||||||
|  | 	orig := str | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		r, size = utf8.DecodeRuneInString(str) | ||||||
|  |  | ||||||
|  | 		if r == '\t' { | ||||||
|  | 			expand = tabSize - column%tabSize | ||||||
|  |  | ||||||
|  | 			if output == nil { | ||||||
|  | 				output = allocBuffer(orig, str) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			for i = 0; i < expand; i++ { | ||||||
|  | 				output.WriteByte(byte(' ')) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			column += expand | ||||||
|  | 		} else { | ||||||
|  | 			if r == '\n' { | ||||||
|  | 				column = 0 | ||||||
|  | 			} else { | ||||||
|  | 				column += RuneWidth(r) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if output != nil { | ||||||
|  | 				output.WriteRune(r) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		str = str[size:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if output == nil { | ||||||
|  | 		return orig | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return output.String() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // LeftJustify returns a string with pad string at right side if str's rune length is smaller than length. | ||||||
|  | // If str's rune length is larger than length, str itself will be returned. | ||||||
|  | // | ||||||
|  | // If pad is an empty string, str will be returned. | ||||||
|  | // | ||||||
|  | // Samples: | ||||||
|  | //     LeftJustify("hello", 4, " ")    => "hello" | ||||||
|  | //     LeftJustify("hello", 10, " ")   => "hello     " | ||||||
|  | //     LeftJustify("hello", 10, "123") => "hello12312" | ||||||
|  | func LeftJustify(str string, length int, pad string) string { | ||||||
|  | 	l := Len(str) | ||||||
|  |  | ||||||
|  | 	if l >= length || pad == "" { | ||||||
|  | 		return str | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	remains := length - l | ||||||
|  | 	padLen := Len(pad) | ||||||
|  |  | ||||||
|  | 	output := &bytes.Buffer{} | ||||||
|  | 	output.Grow(len(str) + (remains/padLen+1)*len(pad)) | ||||||
|  | 	output.WriteString(str) | ||||||
|  | 	writePadString(output, pad, padLen, remains) | ||||||
|  | 	return output.String() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // RightJustify returns a string with pad string at left side if str's rune length is smaller than length. | ||||||
|  | // If str's rune length is larger than length, str itself will be returned. | ||||||
|  | // | ||||||
|  | // If pad is an empty string, str will be returned. | ||||||
|  | // | ||||||
|  | // Samples: | ||||||
|  | //     RightJustify("hello", 4, " ")    => "hello" | ||||||
|  | //     RightJustify("hello", 10, " ")   => "     hello" | ||||||
|  | //     RightJustify("hello", 10, "123") => "12312hello" | ||||||
|  | func RightJustify(str string, length int, pad string) string { | ||||||
|  | 	l := Len(str) | ||||||
|  |  | ||||||
|  | 	if l >= length || pad == "" { | ||||||
|  | 		return str | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	remains := length - l | ||||||
|  | 	padLen := Len(pad) | ||||||
|  |  | ||||||
|  | 	output := &bytes.Buffer{} | ||||||
|  | 	output.Grow(len(str) + (remains/padLen+1)*len(pad)) | ||||||
|  | 	writePadString(output, pad, padLen, remains) | ||||||
|  | 	output.WriteString(str) | ||||||
|  | 	return output.String() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Center returns a string with pad string at both side if str's rune length is smaller than length. | ||||||
|  | // If str's rune length is larger than length, str itself will be returned. | ||||||
|  | // | ||||||
|  | // If pad is an empty string, str will be returned. | ||||||
|  | // | ||||||
|  | // Samples: | ||||||
|  | //     Center("hello", 4, " ")    => "hello" | ||||||
|  | //     Center("hello", 10, " ")   => "  hello   " | ||||||
|  | //     Center("hello", 10, "123") => "12hello123" | ||||||
|  | func Center(str string, length int, pad string) string { | ||||||
|  | 	l := Len(str) | ||||||
|  |  | ||||||
|  | 	if l >= length || pad == "" { | ||||||
|  | 		return str | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	remains := length - l | ||||||
|  | 	padLen := Len(pad) | ||||||
|  |  | ||||||
|  | 	output := &bytes.Buffer{} | ||||||
|  | 	output.Grow(len(str) + (remains/padLen+1)*len(pad)) | ||||||
|  | 	writePadString(output, pad, padLen, remains/2) | ||||||
|  | 	output.WriteString(str) | ||||||
|  | 	writePadString(output, pad, padLen, (remains+1)/2) | ||||||
|  | 	return output.String() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func writePadString(output *bytes.Buffer, pad string, padLen, remains int) { | ||||||
|  | 	var r rune | ||||||
|  | 	var size int | ||||||
|  |  | ||||||
|  | 	repeats := remains / padLen | ||||||
|  |  | ||||||
|  | 	for i := 0; i < repeats; i++ { | ||||||
|  | 		output.WriteString(pad) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	remains = remains % padLen | ||||||
|  |  | ||||||
|  | 	if remains != 0 { | ||||||
|  | 		for i := 0; i < remains; i++ { | ||||||
|  | 			r, size = utf8.DecodeRuneInString(pad) | ||||||
|  | 			output.WriteRune(r) | ||||||
|  | 			pad = pad[size:] | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										100
									
								
								vendor/github.com/huandu/xstrings/format_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								vendor/github.com/huandu/xstrings/format_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"strconv" | ||||||
|  | 	"strings" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestExpandTabs(t *testing.T) { | ||||||
|  | 	runner := func(str string) (result string) { | ||||||
|  | 		defer func() { | ||||||
|  | 			if e := recover(); e != nil { | ||||||
|  | 				result = e.(string) | ||||||
|  | 			} | ||||||
|  | 		}() | ||||||
|  |  | ||||||
|  | 		input := strings.Split(str, separator) | ||||||
|  | 		n, _ := strconv.Atoi(input[1]) | ||||||
|  | 		return ExpandTabs(input[0], n) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("a\tbc\tdef\tghij\tk", "4"): "a   bc  def ghij    k", | ||||||
|  | 		sep("abcdefg\thij\nk\tl", "4"):  "abcdefg hij\nk   l", | ||||||
|  | 		sep("z中\t文\tw", "4"):            "z中 文  w", | ||||||
|  | 		sep("abcdef", "4"):              "abcdef", | ||||||
|  |  | ||||||
|  | 		sep("abc\td\tef\tghij\nk\tl", "3"): "abc   d  ef ghij\nk  l", | ||||||
|  | 		sep("abc\td\tef\tghij\nk\tl", "1"): "abc d ef ghij\nk l", | ||||||
|  |  | ||||||
|  | 		sep("abc", "0"):  "tab size must be positive", | ||||||
|  | 		sep("abc", "-1"): "tab size must be positive", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestLeftJustify(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		input := strings.Split(str, separator) | ||||||
|  | 		n, _ := strconv.Atoi(input[1]) | ||||||
|  | 		return LeftJustify(input[0], n, input[2]) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("hello", "4", " "):    "hello", | ||||||
|  | 		sep("hello", "10", " "):   "hello     ", | ||||||
|  | 		sep("hello", "10", "123"): "hello12312", | ||||||
|  |  | ||||||
|  | 		sep("hello中文test", "4", " "):    "hello中文test", | ||||||
|  | 		sep("hello中文test", "12", " "):   "hello中文test ", | ||||||
|  | 		sep("hello中文test", "18", "测试!"): "hello中文test测试!测试!测", | ||||||
|  |  | ||||||
|  | 		sep("hello中文test", "0", "123"): "hello中文test", | ||||||
|  | 		sep("hello中文test", "18", ""):   "hello中文test", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestRightJustify(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		input := strings.Split(str, separator) | ||||||
|  | 		n, _ := strconv.Atoi(input[1]) | ||||||
|  | 		return RightJustify(input[0], n, input[2]) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("hello", "4", " "):    "hello", | ||||||
|  | 		sep("hello", "10", " "):   "     hello", | ||||||
|  | 		sep("hello", "10", "123"): "12312hello", | ||||||
|  |  | ||||||
|  | 		sep("hello中文test", "4", " "):    "hello中文test", | ||||||
|  | 		sep("hello中文test", "12", " "):   " hello中文test", | ||||||
|  | 		sep("hello中文test", "18", "测试!"): "测试!测试!测hello中文test", | ||||||
|  |  | ||||||
|  | 		sep("hello中文test", "0", "123"): "hello中文test", | ||||||
|  | 		sep("hello中文test", "18", ""):   "hello中文test", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestCenter(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		input := strings.Split(str, separator) | ||||||
|  | 		n, _ := strconv.Atoi(input[1]) | ||||||
|  | 		return Center(input[0], n, input[2]) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("hello", "4", " "):    "hello", | ||||||
|  | 		sep("hello", "10", " "):   "  hello   ", | ||||||
|  | 		sep("hello", "10", "123"): "12hello123", | ||||||
|  |  | ||||||
|  | 		sep("hello中文test", "4", " "):    "hello中文test", | ||||||
|  | 		sep("hello中文test", "12", " "):   "hello中文test ", | ||||||
|  | 		sep("hello中文test", "18", "测试!"): "测试!hello中文test测试!测", | ||||||
|  |  | ||||||
|  | 		sep("hello中文test", "0", "123"): "hello中文test", | ||||||
|  | 		sep("hello中文test", "18", ""):   "hello中文test", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
							
								
								
									
										217
									
								
								vendor/github.com/huandu/xstrings/manipulate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										217
									
								
								vendor/github.com/huandu/xstrings/manipulate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,217 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"strings" | ||||||
|  | 	"unicode/utf8" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // Reverse a utf8 encoded string. | ||||||
|  | func Reverse(str string) string { | ||||||
|  | 	var size int | ||||||
|  |  | ||||||
|  | 	tail := len(str) | ||||||
|  | 	buf := make([]byte, tail) | ||||||
|  | 	s := buf | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		_, size = utf8.DecodeRuneInString(str) | ||||||
|  | 		tail -= size | ||||||
|  | 		s = append(s[:tail], []byte(str[:size])...) | ||||||
|  | 		str = str[size:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return string(buf) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Slice a string by rune. | ||||||
|  | // | ||||||
|  | // Start must satisfy 0 <= start <= rune length. | ||||||
|  | // | ||||||
|  | // End can be positive, zero or negative. | ||||||
|  | // If end >= 0, start and end must satisfy start <= end <= rune length. | ||||||
|  | // If end < 0, it means slice to the end of string. | ||||||
|  | // | ||||||
|  | // Otherwise, Slice will panic as out of range. | ||||||
|  | func Slice(str string, start, end int) string { | ||||||
|  | 	var size, startPos, endPos int | ||||||
|  |  | ||||||
|  | 	origin := str | ||||||
|  |  | ||||||
|  | 	if start < 0 || end > len(str) || (end >= 0 && start > end) { | ||||||
|  | 		panic("out of range") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if end >= 0 { | ||||||
|  | 		end -= start | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	for start > 0 && len(str) > 0 { | ||||||
|  | 		_, size = utf8.DecodeRuneInString(str) | ||||||
|  | 		start-- | ||||||
|  | 		startPos += size | ||||||
|  | 		str = str[size:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if end < 0 { | ||||||
|  | 		return origin[startPos:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	endPos = startPos | ||||||
|  |  | ||||||
|  | 	for end > 0 && len(str) > 0 { | ||||||
|  | 		_, size = utf8.DecodeRuneInString(str) | ||||||
|  | 		end-- | ||||||
|  | 		endPos += size | ||||||
|  | 		str = str[size:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(str) == 0 && (start > 0 || end > 0) { | ||||||
|  | 		panic("out of range") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return origin[startPos:endPos] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Partition splits a string by sep into three parts. | ||||||
|  | // The return value is a slice of strings with head, match and tail. | ||||||
|  | // | ||||||
|  | // If str contains sep, for example "hello" and "l", Partition returns | ||||||
|  | //     "he", "l", "lo" | ||||||
|  | // | ||||||
|  | // If str doesn't contain sep, for example "hello" and "x", Partition returns | ||||||
|  | //     "hello", "", "" | ||||||
|  | func Partition(str, sep string) (head, match, tail string) { | ||||||
|  | 	index := strings.Index(str, sep) | ||||||
|  |  | ||||||
|  | 	if index == -1 { | ||||||
|  | 		head = str | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	head = str[:index] | ||||||
|  | 	match = str[index : index+len(sep)] | ||||||
|  | 	tail = str[index+len(sep):] | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // LastPartition splits a string by last instance of sep into three parts. | ||||||
|  | // The return value is a slice of strings with head, match and tail. | ||||||
|  | // | ||||||
|  | // If str contains sep, for example "hello" and "l", LastPartition returns | ||||||
|  | //     "hel", "l", "o" | ||||||
|  | // | ||||||
|  | // If str doesn't contain sep, for example "hello" and "x", LastPartition returns | ||||||
|  | //     "", "", "hello" | ||||||
|  | func LastPartition(str, sep string) (head, match, tail string) { | ||||||
|  | 	index := strings.LastIndex(str, sep) | ||||||
|  |  | ||||||
|  | 	if index == -1 { | ||||||
|  | 		tail = str | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	head = str[:index] | ||||||
|  | 	match = str[index : index+len(sep)] | ||||||
|  | 	tail = str[index+len(sep):] | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Insert src into dst at given rune index. | ||||||
|  | // Index is counted by runes instead of bytes. | ||||||
|  | // | ||||||
|  | // If index is out of range of dst, panic with out of range. | ||||||
|  | func Insert(dst, src string, index int) string { | ||||||
|  | 	return Slice(dst, 0, index) + src + Slice(dst, index, -1) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Scrubs invalid utf8 bytes with repl string. | ||||||
|  | // Adjacent invalid bytes are replaced only once. | ||||||
|  | func Scrub(str, repl string) string { | ||||||
|  | 	var buf *bytes.Buffer | ||||||
|  | 	var r rune | ||||||
|  | 	var size, pos int | ||||||
|  | 	var hasError bool | ||||||
|  |  | ||||||
|  | 	origin := str | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		r, size = utf8.DecodeRuneInString(str) | ||||||
|  |  | ||||||
|  | 		if r == utf8.RuneError { | ||||||
|  | 			if !hasError { | ||||||
|  | 				if buf == nil { | ||||||
|  | 					buf = &bytes.Buffer{} | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				buf.WriteString(origin[:pos]) | ||||||
|  | 				hasError = true | ||||||
|  | 			} | ||||||
|  | 		} else if hasError { | ||||||
|  | 			hasError = false | ||||||
|  | 			buf.WriteString(repl) | ||||||
|  |  | ||||||
|  | 			origin = origin[pos:] | ||||||
|  | 			pos = 0 | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		pos += size | ||||||
|  | 		str = str[size:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if buf != nil { | ||||||
|  | 		buf.WriteString(origin) | ||||||
|  | 		return buf.String() | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// No invalid byte. | ||||||
|  | 	return origin | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Splits a string into words. Returns a slice of words. | ||||||
|  | // If there is no word in a string, return nil. | ||||||
|  | // | ||||||
|  | // Word is defined as a locale dependent string containing alphabetic characters, | ||||||
|  | // which may also contain but not start with `'` and `-` characters. | ||||||
|  | func WordSplit(str string) []string { | ||||||
|  | 	var word string | ||||||
|  | 	var words []string | ||||||
|  | 	var r rune | ||||||
|  | 	var size, pos int | ||||||
|  |  | ||||||
|  | 	inWord := false | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		r, size = utf8.DecodeRuneInString(str) | ||||||
|  |  | ||||||
|  | 		switch { | ||||||
|  | 		case isAlphabet(r): | ||||||
|  | 			if !inWord { | ||||||
|  | 				inWord = true | ||||||
|  | 				word = str | ||||||
|  | 				pos = 0 | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 		case inWord && (r == '\'' || r == '-'): | ||||||
|  | 			// Still in word. | ||||||
|  |  | ||||||
|  | 		default: | ||||||
|  | 			if inWord { | ||||||
|  | 				inWord = false | ||||||
|  | 				words = append(words, word[:pos]) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		pos += size | ||||||
|  | 		str = str[size:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if inWord { | ||||||
|  | 		words = append(words, word[:pos]) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return words | ||||||
|  | } | ||||||
							
								
								
									
										142
									
								
								vendor/github.com/huandu/xstrings/manipulate_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								vendor/github.com/huandu/xstrings/manipulate_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,142 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"strconv" | ||||||
|  | 	"strings" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestReverse(t *testing.T) { | ||||||
|  | 	runTestCases(t, Reverse, _M{ | ||||||
|  | 		"reverse string": "gnirts esrever", | ||||||
|  | 		"中文如何?":          "?何如文中", | ||||||
|  | 		"中en文混~排怎样?a":    "a?样怎排~混文ne中", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestSlice(t *testing.T) { | ||||||
|  | 	runner := func(str string) (result string) { | ||||||
|  | 		defer func() { | ||||||
|  | 			if e := recover(); e != nil { | ||||||
|  | 				result = e.(string) | ||||||
|  | 			} | ||||||
|  | 		}() | ||||||
|  |  | ||||||
|  | 		strs := split(str) | ||||||
|  | 		start, _ := strconv.ParseInt(strs[1], 10, 0) | ||||||
|  | 		end, _ := strconv.ParseInt(strs[2], 10, 0) | ||||||
|  |  | ||||||
|  | 		result = Slice(strs[0], int(start), int(end)) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("abcdefghijk", "3", "8"):      "defgh", | ||||||
|  | 		sep("来点中文如何?", "2", "7"):          "中文如何?", | ||||||
|  | 		sep("中en文混~排总是少不了的a", "2", "8"):   "n文混~排总", | ||||||
|  | 		sep("中en文混~排总是少不了的a", "0", "0"):   "", | ||||||
|  | 		sep("中en文混~排总是少不了的a", "14", "14"): "", | ||||||
|  | 		sep("中en文混~排总是少不了的a", "5", "-1"):  "~排总是少不了的a", | ||||||
|  | 		sep("中en文混~排总是少不了的a", "14", "-1"): "", | ||||||
|  |  | ||||||
|  | 		sep("let us slice out of range", "-3", "3"): "out of range", | ||||||
|  | 		sep("超出范围哦", "2", "6"):                      "out of range", | ||||||
|  | 		sep("don't do this", "3", "2"):              "out of range", | ||||||
|  | 		sep("千gan万de不piao要liang", "19", "19"):       "out of range", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestPartition(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		input := strings.Split(str, separator) | ||||||
|  | 		head, match, tail := Partition(input[0], input[1]) | ||||||
|  | 		return sep(head, match, tail) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("hello", "l"):           sep("he", "l", "lo"), | ||||||
|  | 		sep("中文总少不了", "少"):          sep("中文总", "少", "不了"), | ||||||
|  | 		sep("z这个zh英文混排hao不", "h英文"): sep("z这个z", "h英文", "混排hao不"), | ||||||
|  | 		sep("边界tiao件zen能忘", "边界"):   sep("", "边界", "tiao件zen能忘"), | ||||||
|  | 		sep("尾巴ye别忘le", "忘le"):      sep("尾巴ye别", "忘le", ""), | ||||||
|  |  | ||||||
|  | 		sep("hello", "x"):     sep("hello", "", ""), | ||||||
|  | 		sep("不是晩香玉", "晚"):     sep("不是晩香玉", "", ""), // Hint: 晩 is not 晚 :) | ||||||
|  | 		sep("来ge混排ba", "e 混"): sep("来ge混排ba", "", ""), | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestLastPartition(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		input := strings.Split(str, separator) | ||||||
|  | 		head, match, tail := LastPartition(input[0], input[1]) | ||||||
|  | 		return sep(head, match, tail) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("hello", "l"):               sep("hel", "l", "o"), | ||||||
|  | 		sep("少量中文总少不了", "少"):            sep("少量中文总", "少", "不了"), | ||||||
|  | 		sep("z这个zh英文ch英文混排hao不", "h英文"): sep("z这个zh英文c", "h英文", "混排hao不"), | ||||||
|  | 		sep("边界tiao件zen能忘边界", "边界"):     sep("边界tiao件zen能忘", "边界", ""), | ||||||
|  | 		sep("尾巴ye别忘le", "尾巴"):           sep("", "尾巴", "ye别忘le"), | ||||||
|  |  | ||||||
|  | 		sep("hello", "x"):     sep("", "", "hello"), | ||||||
|  | 		sep("不是晩香玉", "晚"):     sep("", "", "不是晩香玉"), // Hint: 晩 is not 晚 :) | ||||||
|  | 		sep("来ge混排ba", "e 混"): sep("", "", "来ge混排ba"), | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestInsert(t *testing.T) { | ||||||
|  | 	runner := func(str string) (result string) { | ||||||
|  | 		defer func() { | ||||||
|  | 			if e := recover(); e != nil { | ||||||
|  | 				result = e.(string) | ||||||
|  | 			} | ||||||
|  | 		}() | ||||||
|  |  | ||||||
|  | 		strs := split(str) | ||||||
|  | 		index, _ := strconv.ParseInt(strs[2], 10, 0) | ||||||
|  | 		result = Insert(strs[0], strs[1], int(index)) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("abcdefg", "hi", "3"):    "abchidefg", | ||||||
|  | 		sep("少量中文是必须的", "混pai", "4"): "少量中文混pai是必须的", | ||||||
|  | 		sep("zh英文hun排", "~!", "5"):   "zh英文h~!un排", | ||||||
|  | 		sep("插在begining", "我", "0"):  "我插在begining", | ||||||
|  | 		sep("插在ending", "我", "8"):    "插在ending我", | ||||||
|  |  | ||||||
|  | 		sep("超tian出yuan边tu界po", "foo", "-1"): "out of range", | ||||||
|  | 		sep("超tian出yuan边tu界po", "foo", "17"): "out of range", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestScrub(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		strs := split(str) | ||||||
|  | 		return Scrub(strs[0], strs[1]) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("ab\uFFFDcd\xFF\xCEefg\xFF\xFC\xFD\xFAhijk", "*"): "ab*cd*efg*hijk", | ||||||
|  | 		sep("no错误です", "*"):                                    "no错误です", | ||||||
|  | 		sep("", "*"):                                          "", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestWordSplit(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		return sep(WordSplit(str)...) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		"one word":                   sep("one", "word"), | ||||||
|  | 		"一个字:把他给我拿下!":                "", | ||||||
|  | 		"it's a super-fancy one!!!a": sep("it's", "a", "super-fancy", "one", "a"), | ||||||
|  | 		"a -b-c' 'd'e":               sep("a", "b-c'", "d'e"), | ||||||
|  | 	}) | ||||||
|  | } | ||||||
							
								
								
									
										545
									
								
								vendor/github.com/huandu/xstrings/translate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										545
									
								
								vendor/github.com/huandu/xstrings/translate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,545 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"unicode" | ||||||
|  | 	"unicode/utf8" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type runeRangeMap struct { | ||||||
|  | 	FromLo rune // Lower bound of range map. | ||||||
|  | 	FromHi rune // An inclusive higher bound of range map. | ||||||
|  | 	ToLo   rune | ||||||
|  | 	ToHi   rune | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type runeDict struct { | ||||||
|  | 	Dict [unicode.MaxASCII + 1]rune | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type runeMap map[rune]rune | ||||||
|  |  | ||||||
|  | // Translator can translate string with pre-compiled from and to patterns. | ||||||
|  | // If a from/to pattern pair needs to be used more than once, it's recommended | ||||||
|  | // to create a Translator and reuse it. | ||||||
|  | type Translator struct { | ||||||
|  | 	quickDict  *runeDict       // A quick dictionary to look up rune by index. Only availabe for latin runes. | ||||||
|  | 	runeMap    runeMap         // Rune map for translation. | ||||||
|  | 	ranges     []*runeRangeMap // Ranges of runes. | ||||||
|  | 	mappedRune rune            // If mappedRune >= 0, all matched runes are translated to the mappedRune. | ||||||
|  | 	reverted   bool            // If to pattern is empty, all matched characters will be deleted. | ||||||
|  | 	hasPattern bool | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // NewTranslator creates new Translator through a from/to pattern pair. | ||||||
|  | func NewTranslator(from, to string) *Translator { | ||||||
|  | 	tr := &Translator{} | ||||||
|  |  | ||||||
|  | 	if from == "" { | ||||||
|  | 		return tr | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	reverted := from[0] == '^' | ||||||
|  | 	deletion := len(to) == 0 | ||||||
|  |  | ||||||
|  | 	if reverted { | ||||||
|  | 		from = from[1:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	var fromStart, fromEnd, fromRangeStep rune | ||||||
|  | 	var toStart, toEnd, toRangeStep rune | ||||||
|  | 	var fromRangeSize, toRangeSize rune | ||||||
|  | 	var singleRunes []rune | ||||||
|  |  | ||||||
|  | 	// Update the to rune range. | ||||||
|  | 	updateRange := func() { | ||||||
|  | 		// No more rune to read in the to rune pattern. | ||||||
|  | 		if toEnd == utf8.RuneError { | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if toRangeStep == 0 { | ||||||
|  | 			to, toStart, toEnd, toRangeStep = nextRuneRange(to, toEnd) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Current range is not empty. Consume 1 rune from start. | ||||||
|  | 		if toStart != toEnd { | ||||||
|  | 			toStart += toRangeStep | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// No more rune. Repeat the last rune. | ||||||
|  | 		if to == "" { | ||||||
|  | 			toEnd = utf8.RuneError | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Both start and end are used. Read two more runes from the to pattern. | ||||||
|  | 		to, toStart, toEnd, toRangeStep = nextRuneRange(to, utf8.RuneError) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if deletion { | ||||||
|  | 		toStart = utf8.RuneError | ||||||
|  | 		toEnd = utf8.RuneError | ||||||
|  | 	} else { | ||||||
|  | 		// If from pattern is reverted, only the last rune in the to pattern will be used. | ||||||
|  | 		if reverted { | ||||||
|  | 			var size int | ||||||
|  |  | ||||||
|  | 			for len(to) > 0 { | ||||||
|  | 				toStart, size = utf8.DecodeRuneInString(to) | ||||||
|  | 				to = to[size:] | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			toEnd = utf8.RuneError | ||||||
|  | 		} else { | ||||||
|  | 			to, toStart, toEnd, toRangeStep = nextRuneRange(to, utf8.RuneError) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	fromEnd = utf8.RuneError | ||||||
|  |  | ||||||
|  | 	for len(from) > 0 { | ||||||
|  | 		from, fromStart, fromEnd, fromRangeStep = nextRuneRange(from, fromEnd) | ||||||
|  |  | ||||||
|  | 		// fromStart is a single character. Just map it with a rune in the to pattern. | ||||||
|  | 		if fromRangeStep == 0 { | ||||||
|  | 			singleRunes = tr.addRune(fromStart, toStart, singleRunes) | ||||||
|  | 			updateRange() | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		for toEnd != utf8.RuneError && fromStart != fromEnd { | ||||||
|  | 			// If mapped rune is a single character instead of a range, simply shift first | ||||||
|  | 			// rune in the range. | ||||||
|  | 			if toRangeStep == 0 { | ||||||
|  | 				singleRunes = tr.addRune(fromStart, toStart, singleRunes) | ||||||
|  | 				updateRange() | ||||||
|  | 				fromStart += fromRangeStep | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			fromRangeSize = (fromEnd - fromStart) * fromRangeStep | ||||||
|  | 			toRangeSize = (toEnd - toStart) * toRangeStep | ||||||
|  |  | ||||||
|  | 			// Not enough runes in the to pattern. Need to read more. | ||||||
|  | 			if fromRangeSize > toRangeSize { | ||||||
|  | 				fromStart, toStart = tr.addRuneRange(fromStart, fromStart+toRangeSize*fromRangeStep, toStart, toEnd, singleRunes) | ||||||
|  | 				fromStart += fromRangeStep | ||||||
|  | 				updateRange() | ||||||
|  |  | ||||||
|  | 				// Edge case: If fromRangeSize == toRangeSize + 1, the last fromStart value needs be considered | ||||||
|  | 				// as a single rune. | ||||||
|  | 				if fromStart == fromEnd { | ||||||
|  | 					singleRunes = tr.addRune(fromStart, toStart, singleRunes) | ||||||
|  | 					updateRange() | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			fromStart, toStart = tr.addRuneRange(fromStart, fromEnd, toStart, toStart+fromRangeSize*toRangeStep, singleRunes) | ||||||
|  | 			updateRange() | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if fromStart == fromEnd { | ||||||
|  | 			fromEnd = utf8.RuneError | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		fromStart, toStart = tr.addRuneRange(fromStart, fromEnd, toStart, toStart, singleRunes) | ||||||
|  | 		fromEnd = utf8.RuneError | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if fromEnd != utf8.RuneError { | ||||||
|  | 		singleRunes = tr.addRune(fromEnd, toStart, singleRunes) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	tr.reverted = reverted | ||||||
|  | 	tr.mappedRune = -1 | ||||||
|  | 	tr.hasPattern = true | ||||||
|  |  | ||||||
|  | 	// Translate RuneError only if in deletion or reverted mode. | ||||||
|  | 	if deletion || reverted { | ||||||
|  | 		tr.mappedRune = toStart | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return tr | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (tr *Translator) addRune(from, to rune, singleRunes []rune) []rune { | ||||||
|  | 	if from <= unicode.MaxASCII { | ||||||
|  | 		if tr.quickDict == nil { | ||||||
|  | 			tr.quickDict = &runeDict{} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		tr.quickDict.Dict[from] = to | ||||||
|  | 	} else { | ||||||
|  | 		if tr.runeMap == nil { | ||||||
|  | 			tr.runeMap = make(runeMap) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		tr.runeMap[from] = to | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	singleRunes = append(singleRunes, from) | ||||||
|  | 	return singleRunes | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (tr *Translator) addRuneRange(fromLo, fromHi, toLo, toHi rune, singleRunes []rune) (rune, rune) { | ||||||
|  | 	var r rune | ||||||
|  | 	var rrm *runeRangeMap | ||||||
|  |  | ||||||
|  | 	if fromLo < fromHi { | ||||||
|  | 		rrm = &runeRangeMap{ | ||||||
|  | 			FromLo: fromLo, | ||||||
|  | 			FromHi: fromHi, | ||||||
|  | 			ToLo:   toLo, | ||||||
|  | 			ToHi:   toHi, | ||||||
|  | 		} | ||||||
|  | 	} else { | ||||||
|  | 		rrm = &runeRangeMap{ | ||||||
|  | 			FromLo: fromHi, | ||||||
|  | 			FromHi: fromLo, | ||||||
|  | 			ToLo:   toHi, | ||||||
|  | 			ToHi:   toLo, | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// If there is any single rune conflicts with this rune range, clear single rune record. | ||||||
|  | 	for _, r = range singleRunes { | ||||||
|  | 		if rrm.FromLo <= r && r <= rrm.FromHi { | ||||||
|  | 			if r <= unicode.MaxASCII { | ||||||
|  | 				tr.quickDict.Dict[r] = 0 | ||||||
|  | 			} else { | ||||||
|  | 				delete(tr.runeMap, r) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	tr.ranges = append(tr.ranges, rrm) | ||||||
|  | 	return fromHi, toHi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func nextRuneRange(str string, last rune) (remaining string, start, end rune, rangeStep rune) { | ||||||
|  | 	var r rune | ||||||
|  | 	var size int | ||||||
|  |  | ||||||
|  | 	remaining = str | ||||||
|  | 	escaping := false | ||||||
|  | 	isRange := false | ||||||
|  |  | ||||||
|  | 	for len(remaining) > 0 { | ||||||
|  | 		r, size = utf8.DecodeRuneInString(remaining) | ||||||
|  | 		remaining = remaining[size:] | ||||||
|  |  | ||||||
|  | 		// Parse special characters. | ||||||
|  | 		if !escaping { | ||||||
|  | 			if r == '\\' { | ||||||
|  | 				escaping = true | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if r == '-' { | ||||||
|  | 				// Ignore slash at beginning of string. | ||||||
|  | 				if last == utf8.RuneError { | ||||||
|  | 					continue | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				start = last | ||||||
|  | 				isRange = true | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		escaping = false | ||||||
|  |  | ||||||
|  | 		if last != utf8.RuneError { | ||||||
|  | 			// This is a range which start and end are the same. | ||||||
|  | 			// Considier it as a normal character. | ||||||
|  | 			if isRange && last == r { | ||||||
|  | 				isRange = false | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			start = last | ||||||
|  | 			end = r | ||||||
|  |  | ||||||
|  | 			if isRange { | ||||||
|  | 				if start < end { | ||||||
|  | 					rangeStep = 1 | ||||||
|  | 				} else { | ||||||
|  | 					rangeStep = -1 | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		last = r | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	start = last | ||||||
|  | 	end = utf8.RuneError | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Translate str with a from/to pattern pair. | ||||||
|  | // | ||||||
|  | // See comment in Translate function for usage and samples. | ||||||
|  | func (tr *Translator) Translate(str string) string { | ||||||
|  | 	if !tr.hasPattern || str == "" { | ||||||
|  | 		return str | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	var r rune | ||||||
|  | 	var size int | ||||||
|  | 	var needTr bool | ||||||
|  |  | ||||||
|  | 	orig := str | ||||||
|  |  | ||||||
|  | 	var output *bytes.Buffer | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		r, size = utf8.DecodeRuneInString(str) | ||||||
|  | 		r, needTr = tr.TranslateRune(r) | ||||||
|  |  | ||||||
|  | 		if needTr && output == nil { | ||||||
|  | 			output = allocBuffer(orig, str) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if r != utf8.RuneError && output != nil { | ||||||
|  | 			output.WriteRune(r) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		str = str[size:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// No character is translated. | ||||||
|  | 	if output == nil { | ||||||
|  | 		return orig | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return output.String() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // TranslateRune return translated rune and true if r matches the from pattern. | ||||||
|  | // If r doesn't match the pattern, original r is returned and translated is false. | ||||||
|  | func (tr *Translator) TranslateRune(r rune) (result rune, translated bool) { | ||||||
|  | 	switch { | ||||||
|  | 	case tr.quickDict != nil: | ||||||
|  | 		if r <= unicode.MaxASCII { | ||||||
|  | 			result = tr.quickDict.Dict[r] | ||||||
|  |  | ||||||
|  | 			if result != 0 { | ||||||
|  | 				translated = true | ||||||
|  |  | ||||||
|  | 				if tr.mappedRune >= 0 { | ||||||
|  | 					result = tr.mappedRune | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		fallthrough | ||||||
|  |  | ||||||
|  | 	case tr.runeMap != nil: | ||||||
|  | 		var ok bool | ||||||
|  |  | ||||||
|  | 		if result, ok = tr.runeMap[r]; ok { | ||||||
|  | 			translated = true | ||||||
|  |  | ||||||
|  | 			if tr.mappedRune >= 0 { | ||||||
|  | 				result = tr.mappedRune | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		fallthrough | ||||||
|  |  | ||||||
|  | 	default: | ||||||
|  | 		var rrm *runeRangeMap | ||||||
|  | 		ranges := tr.ranges | ||||||
|  |  | ||||||
|  | 		for i := len(ranges) - 1; i >= 0; i-- { | ||||||
|  | 			rrm = ranges[i] | ||||||
|  |  | ||||||
|  | 			if rrm.FromLo <= r && r <= rrm.FromHi { | ||||||
|  | 				translated = true | ||||||
|  |  | ||||||
|  | 				if tr.mappedRune >= 0 { | ||||||
|  | 					result = tr.mappedRune | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if rrm.ToLo < rrm.ToHi { | ||||||
|  | 					result = rrm.ToLo + r - rrm.FromLo | ||||||
|  | 				} else if rrm.ToLo > rrm.ToHi { | ||||||
|  | 					// ToHi can be smaller than ToLo if range is from higher to lower. | ||||||
|  | 					result = rrm.ToLo - r + rrm.FromLo | ||||||
|  | 				} else { | ||||||
|  | 					result = rrm.ToLo | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if tr.reverted { | ||||||
|  | 		if !translated { | ||||||
|  | 			result = tr.mappedRune | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		translated = !translated | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if !translated { | ||||||
|  | 		result = r | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // HasPattern returns true if Translator has one pattern at least. | ||||||
|  | func (tr *Translator) HasPattern() bool { | ||||||
|  | 	return tr.hasPattern | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Translate str with the characters defined in from replaced by characters defined in to. | ||||||
|  | // | ||||||
|  | // From and to are patterns representing a set of characters. Pattern is defined as following. | ||||||
|  | // | ||||||
|  | //     * Special characters | ||||||
|  | //       * '-' means a range of runes, e.g. | ||||||
|  | //         * "a-z" means all characters from 'a' to 'z' inclusive; | ||||||
|  | //         * "z-a" means all characters from 'z' to 'a' inclusive. | ||||||
|  | //       * '^' as first character means a set of all runes excepted listed, e.g. | ||||||
|  | //         * "^a-z" means all characters except 'a' to 'z' inclusive. | ||||||
|  | //       * '\' escapes special characters. | ||||||
|  | //     * Normal character represents itself, e.g. "abc" is a set including 'a', 'b' and 'c'. | ||||||
|  | // | ||||||
|  | // Translate will try to find a 1:1 mapping from from to to. | ||||||
|  | // If to is smaller than from, last rune in to will be used to map "out of range" characters in from. | ||||||
|  | // | ||||||
|  | // Note that '^' only works in the from pattern. It will be considered as a normal character in the to pattern. | ||||||
|  | // | ||||||
|  | // If the to pattern is an empty string, Translate works exactly the same as Delete. | ||||||
|  | // | ||||||
|  | // Samples: | ||||||
|  | //     Translate("hello", "aeiou", "12345")    => "h2ll4" | ||||||
|  | //     Translate("hello", "a-z", "A-Z")        => "HELLO" | ||||||
|  | //     Translate("hello", "z-a", "a-z")        => "svool" | ||||||
|  | //     Translate("hello", "aeiou", "*")        => "h*ll*" | ||||||
|  | //     Translate("hello", "^l", "*")           => "**ll*" | ||||||
|  | //     Translate("hello ^ world", `\^lo`, "*") => "he*** * w*r*d" | ||||||
|  | func Translate(str, from, to string) string { | ||||||
|  | 	tr := NewTranslator(from, to) | ||||||
|  | 	return tr.Translate(str) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Delete runes in str matching the pattern. | ||||||
|  | // Pattern is defined in Translate function. | ||||||
|  | // | ||||||
|  | // Samples: | ||||||
|  | //     Delete("hello", "aeiou") => "hll" | ||||||
|  | //     Delete("hello", "a-k")   => "llo" | ||||||
|  | //     Delete("hello", "^a-k")  => "he" | ||||||
|  | func Delete(str, pattern string) string { | ||||||
|  | 	tr := NewTranslator(pattern, "") | ||||||
|  | 	return tr.Translate(str) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Count how many runes in str match the pattern. | ||||||
|  | // Pattern is defined in Translate function. | ||||||
|  | // | ||||||
|  | // Samples: | ||||||
|  | //     Count("hello", "aeiou") => 3 | ||||||
|  | //     Count("hello", "a-k")   => 3 | ||||||
|  | //     Count("hello", "^a-k")  => 2 | ||||||
|  | func Count(str, pattern string) int { | ||||||
|  | 	if pattern == "" || str == "" { | ||||||
|  | 		return 0 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	var r rune | ||||||
|  | 	var size int | ||||||
|  | 	var matched bool | ||||||
|  |  | ||||||
|  | 	tr := NewTranslator(pattern, "") | ||||||
|  | 	cnt := 0 | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		r, size = utf8.DecodeRuneInString(str) | ||||||
|  | 		str = str[size:] | ||||||
|  |  | ||||||
|  | 		if _, matched = tr.TranslateRune(r); matched { | ||||||
|  | 			cnt++ | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return cnt | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Squeeze deletes adjacent repeated runes in str. | ||||||
|  | // If pattern is not empty, only runes matching the pattern will be squeezed. | ||||||
|  | // | ||||||
|  | // Samples: | ||||||
|  | //     Squeeze("hello", "")    => "helo" | ||||||
|  | //     Squeeze("hello", "m-z") => "hello" | ||||||
|  | func Squeeze(str, pattern string) string { | ||||||
|  | 	var last, r rune | ||||||
|  | 	var size int | ||||||
|  | 	var skipSqueeze, matched bool | ||||||
|  | 	var tr *Translator | ||||||
|  | 	var output *bytes.Buffer | ||||||
|  |  | ||||||
|  | 	orig := str | ||||||
|  | 	last = -1 | ||||||
|  |  | ||||||
|  | 	if len(pattern) > 0 { | ||||||
|  | 		tr = NewTranslator(pattern, "") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	for len(str) > 0 { | ||||||
|  | 		r, size = utf8.DecodeRuneInString(str) | ||||||
|  |  | ||||||
|  | 		// Need to squeeze the str. | ||||||
|  | 		if last == r && !skipSqueeze { | ||||||
|  | 			if tr != nil { | ||||||
|  | 				if _, matched = tr.TranslateRune(r); !matched { | ||||||
|  | 					skipSqueeze = true | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if output == nil { | ||||||
|  | 				output = allocBuffer(orig, str) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if skipSqueeze { | ||||||
|  | 				output.WriteRune(r) | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			if output != nil { | ||||||
|  | 				output.WriteRune(r) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			last = r | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		str = str[size:] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if output == nil { | ||||||
|  | 		return orig | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return output.String() | ||||||
|  | } | ||||||
							
								
								
									
										92
									
								
								vendor/github.com/huandu/xstrings/translate_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								vendor/github.com/huandu/xstrings/translate_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,92 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"strings" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestTranslate(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		input := strings.Split(str, separator) | ||||||
|  | 		return Translate(input[0], input[1], input[2]) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("hello", "aeiou", "12345"):    "h2ll4", | ||||||
|  | 		sep("hello", "aeiou", ""):         "hll", | ||||||
|  | 		sep("hello", "a-z", "A-Z"):        "HELLO", | ||||||
|  | 		sep("hello", "z-a", "a-z"):        "svool", | ||||||
|  | 		sep("hello", "aeiou", "*"):        "h*ll*", | ||||||
|  | 		sep("hello", "^l", "*"):           "**ll*", | ||||||
|  | 		sep("hello", "p-z", "*"):          "hello", | ||||||
|  | 		sep("hello ^ world", `\^lo`, "*"): "he*** * w*r*d", | ||||||
|  |  | ||||||
|  | 		sep("中文字符测试", "文中谁敢试?", "123456"):  "21字符测5", | ||||||
|  | 		sep("中文字符测试", "^文中谁敢试?", "123456"): "中文666试", | ||||||
|  | 		sep("中文字符测试", "字-试", "0-9"):        "中90999", | ||||||
|  |  | ||||||
|  | 		sep("h1e2l3l4o, w5o6r7l8d", "a-z,0-9", `A-Z\-a-czk-p`):       "HbEcLzLkO- WlOmRnLoD", | ||||||
|  | 		sep("h1e2l3l4o, w5o6r7l8d", "a-zoh-n", "b-zakt-z"):           "t1f2x3x4k, x5k6s7x8e", | ||||||
|  | 		sep("h1e2l3l4o, w5o6r7l8d", "helloa-zoh-n", "99999b-zakt-z"): "t1f2x3x4k, x5k6s7x8e", | ||||||
|  |  | ||||||
|  | 		sep("hello", "e-", "p"):        "hpllo", | ||||||
|  | 		sep("hello", "-e-", "p"):       "hpllo", | ||||||
|  | 		sep("hello", "----e---", "p"):  "hpllo", | ||||||
|  | 		sep("hello", "^---e----", "p"): "peppp", | ||||||
|  |  | ||||||
|  | 		sep("hel\uFFFDlo", "\uFFFD", "H"):    "helHlo", | ||||||
|  | 		sep("hel\uFFFDlo", "^\uFFFD", "H"):   "HHHHH", | ||||||
|  | 		sep("hel\uFFFDlo", "o-\uFFFDh", "H"): "HelHlH", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestDelete(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		input := strings.Split(str, separator) | ||||||
|  | 		return Delete(input[0], input[1]) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("hello", "aeiou"): "hll", | ||||||
|  | 		sep("hello", "a-k"):   "llo", | ||||||
|  | 		sep("hello", "^a-k"):  "he", | ||||||
|  |  | ||||||
|  | 		sep("中文字符测试", "文中谁敢试?"): "字符测", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestCount(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		input := strings.Split(str, separator) | ||||||
|  | 		return fmt.Sprint(Count(input[0], input[1])) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("hello", "aeiou"): "2", | ||||||
|  | 		sep("hello", "a-k"):   "2", | ||||||
|  | 		sep("hello", "^a-k"):  "3", | ||||||
|  |  | ||||||
|  | 		sep("中文字符测试", "文中谁敢试?"): "3", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestSqueeze(t *testing.T) { | ||||||
|  | 	runner := func(str string) string { | ||||||
|  | 		input := strings.Split(str, separator) | ||||||
|  | 		return Squeeze(input[0], input[1]) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	runTestCases(t, runner, _M{ | ||||||
|  | 		sep("hello", ""):     "helo", | ||||||
|  | 		sep("hello", "a-k"):  "hello", | ||||||
|  | 		sep("hello", "^a-k"): "helo", | ||||||
|  | 		sep("hello", "^a-l"): "hello", | ||||||
|  |  | ||||||
|  | 		sep("打打打打个劫!!", ""):  "打个劫!", | ||||||
|  | 		sep("打打打打个劫!!", "打"): "打个劫!!", | ||||||
|  | 	}) | ||||||
|  | } | ||||||
							
								
								
									
										33
									
								
								vendor/github.com/huandu/xstrings/util_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								vendor/github.com/huandu/xstrings/util_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | // Copyright 2015 Huan Du. All rights reserved. | ||||||
|  | // Licensed under the MIT license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package xstrings | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"strings" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type _M map[string]string | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	separator = " ¶ " | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func runTestCases(t *testing.T, converter func(string) string, cases map[string]string) { | ||||||
|  | 	for k, v := range cases { | ||||||
|  | 		s := converter(k) | ||||||
|  |  | ||||||
|  | 		if s != v { | ||||||
|  | 			t.Fatalf("case fails. [case:%v]\nshould => %#v\nactual => %#v", k, v, s) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func sep(strs ...string) string { | ||||||
|  | 	return strings.Join(strs, separator) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func split(str string) []string { | ||||||
|  | 	return strings.Split(str, separator) | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user