提交 4d957dfd 编写于 作者: W wenzhi

Merge branch 'dev' of https://github.com/XiaoMi/soar into dev

......@@ -10,18 +10,18 @@
## SOAR
SOAR(SQL Optimizer And Rewriter)是一个对SQL进行优化和改写的自动化工具。 由小米人工智能与云平台的数据库团队开发与维护。
SOAR(SQL Optimizer And Rewriter) 是一个对 SQL 进行优化和改写的自动化工具。 由小米人工智能与云平台的数据库团队开发与维护。
## 功能特点
* 跨平台支持(支持Linux, Mac环境,Windows环境理论上也支持,不过未全面测试)
* 目前只支持 MySQL 语法族协议的SQL优化
* 跨平台支持(支持 Linux, Mac 环境,Windows 环境理论上也支持,不过未全面测试)
* 目前只支持 MySQL 语法族协议的 SQL 优化
* 支持基于启发式算法的语句优化
* 支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT)
* 支持EXPLAIN信息丰富解读
* 支持SQL指纹、压缩和美化
* 支持同一张表多条ALTER请求合并
* 支持自定义规则的SQL改写
* 支持 EXPLAIN 信息丰富解读
* 支持 SQL 指纹、压缩和美化
* 支持同一张表多条 ALTER 请求合并
* 支持自定义规则的 SQL 改写
## 快速入门
......@@ -34,8 +34,8 @@ SOAR(SQL Optimizer And Rewriter)是一个对SQL进行优化和改写的自动化
## 交流与反馈
* 欢迎通过Github Issues提交问题报告与建议
* QQ群: 779359816(满) 758940447(新)
* 欢迎通过 Github Issues 提交问题报告与建议
* QQ 群:779359816(满) 758940447(新)
* [Gitter](https://gitter.im/xiaomi-dba/soar) 推荐
![xiaomi_sa](https://raw.githubusercontent.com/XiaoMi/soar/master/doc/images/xiaomi_sa.png)
......
......@@ -1409,6 +1409,35 @@ const (
LockTypeExclusive
)
// AlterAlgorithm is the algorithm of the DDL operations.
// See https://dev.mysql.com/doc/refman/8.0/en/alter-table.html#alter-table-performance.
type AlterAlgorithm byte
// DDL alter algorithms.
// For now, TiDB only supported inplace and instance algorithms. If the user specify `copy`,
// will get an error.
const (
AlterAlgorithmDefault AlterAlgorithm = iota
AlterAlgorithmCopy
AlterAlgorithmInplace
AlterAlgorithmInstant
)
func (a AlterAlgorithm) String() string {
switch a {
case AlterAlgorithmDefault:
return "DEFAULT"
case AlterAlgorithmCopy:
return "COPY"
case AlterAlgorithmInplace:
return "INPLACE"
case AlterAlgorithmInstant:
return "INSTANT"
default:
return "DEFAULT"
}
}
// AlterTableSpec represents alter table specification.
type AlterTableSpec struct {
node
......@@ -1422,6 +1451,7 @@ type AlterTableSpec struct {
OldColumnName *ColumnName
Position *ColumnPosition
LockType LockType
Algorithm AlterAlgorithm
Comment string
FromKey model.CIStr
ToKey model.CIStr
......@@ -1543,11 +1573,9 @@ func (n *AlterTableSpec) Restore(ctx *RestoreCtx) error {
ctx.WritePlain("= ")
ctx.WriteKeyWord(n.LockType.String())
case AlterTableAlgorithm:
// TODO: not support
ctx.WriteKeyWord("ALGORITHM ")
ctx.WritePlain("= ")
ctx.WriteKeyWord("DEFAULT")
ctx.WritePlain(" /* AlterTableAlgorithm is not supported */ ")
ctx.WriteKeyWord(n.Algorithm.String())
case AlterTableRenameIndex:
ctx.WriteKeyWord("RENAME INDEX ")
ctx.WriteName(n.FromKey.O)
......
......@@ -1755,6 +1755,8 @@ const (
ShowPrivileges
ShowErrors
ShowBindings
ShowPumpStatus
ShowDrainerStatus
)
// ShowStmt is a statement to provide information about databases, tables, columns and so on.
......@@ -1937,6 +1939,10 @@ func (n *ShowStmt) Restore(ctx *RestoreCtx) error {
ctx.WriteKeyWord("SESSION ")
}
ctx.WriteKeyWord("BINDINGS")
case ShowPumpStatus:
ctx.WriteKeyWord("PUMP STATUS")
case ShowDrainerStatus:
ctx.WriteKeyWord("DRAINER STATUS")
default:
return errors.New("Unknown ShowStmt type")
}
......
......@@ -725,6 +725,7 @@ func (n *SetPwdStmt) Accept(v Visitor) (Node, bool) {
type UserSpec struct {
User *auth.UserIdentity
AuthOpt *AuthOption
IsRole bool
}
// Restore implements Node interface.
......
......@@ -33,6 +33,11 @@ type UserIdentity struct {
AuthHostname string // Match in privs system (i.e. could be a wildcard)
}
type RoleIdentity struct {
Username string
Hostname string
}
// Restore implements Node interface.
func (user *UserIdentity) Restore(ctx *RestoreCtx) error {
if user.CurrentUser {
......
......@@ -11,14 +11,19 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cznic/golex v0.0.0-20181122101858-9c343928389c h1:G8zTsaqyVfIHpgMFcGgdbhHSFhlNc77rAKkhVbQ9kQg=
github.com/cznic/golex v0.0.0-20181122101858-9c343928389c/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc=
github.com/cznic/mathutil v0.0.0-20181021201202-eba54fb065b7/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM=
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso=
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM=
github.com/cznic/parser v0.0.0-20160622100904-31edd927e5b1 h1:uWcWCkSP+E1w1z8r082miT+c+9vzg+5UdrgGCo15lMo=
github.com/cznic/parser v0.0.0-20160622100904-31edd927e5b1/go.mod h1:2B43mz36vGZNZEwkWi8ayRSSUXLfjL8OkbzwW4NcPMM=
github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ=
github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8 h1:LpMLYGyy67BoAFGda1NeOBQwqlv7nUXpm+rIVHGxZZ4=
github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ=
github.com/cznic/strutil v0.0.0-20171016134553-529a34b1c186 h1:0rkFMAbn5KBKNpJyHQ6Prb95vIKanmAe62KxsrN+sqA=
github.com/cznic/strutil v0.0.0-20171016134553-529a34b1c186/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc=
github.com/cznic/y v0.0.0-20170802143616-045f81c6662a h1:N2rDAvHuM46OGscJkGX4Dw4BBqZgg6mGNGLYs5utVVo=
github.com/cznic/y v0.0.0-20170802143616-045f81c6662a/go.mod h1:1rk5VM7oSnA4vjp+hrLQ3HWHa+Y4yPCa3/CsJrcNnvs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
......
......@@ -234,6 +234,7 @@ var tokenMap = map[string]int{
"DIV": div,
"DO": do,
"DOUBLE": doubleType,
"DRAINER": drainer,
"DROP": drop,
"DUAL": dual,
"DUPLICATE": duplicate,
......@@ -250,6 +251,7 @@ var tokenMap = map[string]int{
"EVENT": event,
"EVENTS": events,
"EXCLUSIVE": exclusive,
"EXCEPT": except,
"EXECUTE": execute,
"EXISTS": exists,
"EXPLAIN": explain,
......@@ -292,6 +294,7 @@ var tokenMap = map[string]int{
"INFILE": infile,
"INNER": inner,
"INPLACE": inplace,
"INSTANT": instant,
"INSERT": insert,
"INT": intType,
"INT1": int1Type,
......@@ -390,6 +393,7 @@ var tokenMap = map[string]int{
"PROCESS": process,
"PROCESSLIST": processlist,
"PROFILES": profiles,
"PUMP": pump,
"QUARTER": quarter,
"QUERY": query,
"QUERIES": queries,
......@@ -416,6 +420,7 @@ var tokenMap = map[string]int{
"REVOKE": revoke,
"RIGHT": right,
"RLIKE": rlike,
"ROLE": role,
"ROLLBACK": rollback,
"ROUTINE": routine,
"ROW": row,
......
因为 它太大了无法显示 source diff 。你可以改为 查看blob
......@@ -119,6 +119,7 @@ import (
escaped "ESCAPED"
exists "EXISTS"
explain "EXPLAIN"
except "EXCEPT"
falseKwd "FALSE"
firstValue "FIRST_VALUE"
floatType "FLOAT"
......@@ -379,6 +380,7 @@ import (
respect "RESPECT"
replication "REPLICATION"
reverse "REVERSE"
role "ROLE"
rollback "ROLLBACK"
routine "ROUTINE"
rowCount "ROW_COUNT"
......@@ -447,6 +449,7 @@ import (
groupConcat "GROUP_CONCAT"
next_row_id "NEXT_ROW_ID"
inplace "INPLACE"
instant "INSTANT"
internal "INTERNAL"
min "MIN"
max "MAX"
......@@ -474,8 +477,10 @@ import (
buckets "BUCKETS"
cancel "CANCEL"
ddl "DDL"
drainer "DRAINER"
jobs "JOBS"
job "JOB"
pump "PUMP"
stats "STATS"
statsMeta "STATS_META"
statsHistograms "STATS_HISTOGRAMS"
......@@ -574,6 +579,7 @@ import (
CreateTableStmt "CREATE TABLE statement"
CreateViewStmt "CREATE VIEW stetement"
CreateUserStmt "CREATE User statement"
CreateRoleStmt "CREATE Role statement"
CreateDatabaseStmt "Create Database Statement"
CreateIndexStmt "CREATE INDEX statement"
CreateBindingStmt "CREATE BINDING statement"
......@@ -583,6 +589,7 @@ import (
DropStatsStmt "DROP STATS statement"
DropTableStmt "DROP TABLE statement"
DropUserStmt "DROP USER"
DropRoleStmt "DROP ROLE"
DropViewStmt "DROP VIEW statement"
DropBindingStmt "DROP BINDING statement"
DeallocateStmt "Deallocate prepared statement"
......@@ -593,6 +600,7 @@ import (
ExplainableStmt "explainable statement"
FlushStmt "Flush statement"
GrantStmt "Grant statement"
GrantRoleStmt "Grant role statement"
InsertIntoStmt "INSERT INTO statement"
KillStmt "Kill statement"
LoadDataStmt "Load data statement"
......@@ -603,8 +611,11 @@ import (
RenameTableStmt "rename table statement"
ReplaceIntoStmt "REPLACE INTO statement"
RevokeStmt "Revoke statement"
RevokeRoleStmt "Revoke role statement"
RollbackStmt "ROLLBACK statement"
SetStmt "Set variable statement"
SetRoleStmt "Set active role statement"
SetDefaultRoleStmt "Set default statement for some user"
ShowStmt "Show engines/databases/tables/user/columns/warnings/status statement"
Statement "statement"
TraceStmt "TRACE statement"
......@@ -617,7 +628,8 @@ import (
%type <item>
AdminShowSlow "Admin Show Slow statement"
AlterTableOptionListOpt "alter table option list opt"
AlterAlgorithm "Alter table algorithm"
AlterTableOptionListOpt "Alter table option list opt"
AlterTableSpec "Alter table specification"
AlterTableSpecList "Alter table specification list"
AnyOrAll "Any or All for subquery"
......@@ -748,6 +760,11 @@ import (
OnUpdateOpt "optional ON UPDATE clause"
OptGConcatSeparator "optional GROUP_CONCAT SEPARATOR"
ReferOpt "reference option"
Rolename "Rolename"
RolenameList "RolenameList"
RoleSpec "Rolename and auth option"
RoleSpecList "Rolename and auth option list"
RoleNameString "role name string"
RowFormat "Row format option"
RowValue "Row value"
SelectLockOpt "FOR UPDATE or LOCK IN SHARE MODE,"
......@@ -761,6 +778,8 @@ import (
SelectStmtFromDualTable "SELECT statement from dual table"
SelectStmtFromTable "SELECT statement from table"
SelectStmtGroup "SELECT statement optional GROUP BY clause"
SetRoleOpt "Set role options"
SetDefaultRoleOpt "Set default role options"
ShowTargetFilterable "Show target that can be filtered by WHERE or LIKE"
ShowDatabaseNameOpt "Show tables/columns statement database name option"
ShowTableAliasOpt "Show table alias option"
......@@ -1201,6 +1220,7 @@ AlterTableSpec:
// Parse it and ignore it. Just for compatibility.
$$ = &ast.AlterTableSpec{
Tp: ast.AlterTableAlgorithm,
Algorithm: $3.(ast.AlterAlgorithm),
}
}
| "FORCE"
......@@ -1213,7 +1233,23 @@ AlterTableSpec:
AlterAlgorithm:
"DEFAULT" | "INPLACE" | "COPY"
"DEFAULT"
{
$$ = ast.AlterAlgorithmDefault
}
| "COPY"
{
$$ = ast.AlterAlgorithmCopy
}
| "INPLACE"
{
$$ = ast.AlterAlgorithmInplace
}
| "INSTANT"
{
$$ = ast.AlterAlgorithmInstant
}
LockClauseOpt:
{}
......@@ -2392,6 +2428,14 @@ DropUserStmt:
$$ = &ast.DropUserStmt{IfExists: true, UserList: $5.([]*auth.UserIdentity)}
}
DropRoleStmt:
"DROP" "ROLE" RolenameList
{
}
| "DROP" "ROLE" "IF" "EXISTS" RolenameList
{
}
DropStatsStmt:
"DROP" "STATS" TableName
{
......@@ -2990,7 +3034,7 @@ UnReservedKeyword:
| "COLUMNS" | "COMMIT" | "COMPACT" | "COMPRESSED" | "CONSISTENT" | "CURRENT" | "DATA" | "DATE" %prec lowerThanStringLitToken| "DATETIME" | "DAY" | "DEALLOCATE" | "DO" | "DUPLICATE"
| "DYNAMIC"| "END" | "ENGINE" | "ENGINES" | "ENUM" | "ERRORS" | "ESCAPE" | "EXECUTE" | "FIELDS" | "FIRST" | "FIXED" | "FLUSH" | "FOLLOWING" | "FORMAT" | "FULL" |"GLOBAL"
| "HASH" | "HOUR" | "LESS" | "LOCAL" | "LAST" | "NAMES" | "OFFSET" | "PASSWORD" %prec lowerThanEq | "PREPARE" | "QUICK" | "REDUNDANT"
| "ROLLBACK" | "SESSION" | "SIGNED" | "SNAPSHOT" | "START" | "STATUS" | "SUBPARTITIONS" | "SUBPARTITION" | "TABLES" | "TABLESPACE" | "TEXT" | "THAN" | "TIME" %prec lowerThanStringLitToken
| "ROLE" |"ROLLBACK" | "SESSION" | "SIGNED" | "SNAPSHOT" | "START" | "STATUS" | "SUBPARTITIONS" | "SUBPARTITION" | "TABLES" | "TABLESPACE" | "TEXT" | "THAN" | "TIME" %prec lowerThanStringLitToken
| "TIMESTAMP" %prec lowerThanStringLitToken | "TRACE" | "TRANSACTION" | "TRUNCATE" | "UNBOUNDED" | "UNKNOWN" | "VALUE" | "WARNINGS" | "YEAR" | "MODE" | "WEEK" | "ANY" | "SOME" | "USER" | "IDENTIFIED"
| "COLLATION" | "COMMENT" | "AVG_ROW_LENGTH" | "CONNECTION" | "CHECKSUM" | "COMPRESSION" | "KEY_BLOCK_SIZE" | "MASTER" | "MAX_ROWS"
| "MIN_ROWS" | "NATIONAL" | "ROW_FORMAT" | "QUARTER" | "GRANTS" | "TRIGGERS" | "DELAY_KEY_WRITE" | "ISOLATION" | "JSON"
......@@ -3003,11 +3047,11 @@ UnReservedKeyword:
TiDBKeyword:
"ADMIN" | "BUCKETS" | "CANCEL" | "DDL" | "JOBS" | "JOB" | "STATS" | "STATS_META" | "STATS_HISTOGRAMS" | "STATS_BUCKETS" | "STATS_HEALTHY" | "TIDB" | "TIDB_HJ" | "TIDB_SMJ" | "TIDB_INLJ" | "RESTORE"
"ADMIN" | "BUCKETS" | "CANCEL" | "DDL" | "DRAINER" | "JOBS" | "JOB" | "PUMP" | "STATS" | "STATS_META" | "STATS_HISTOGRAMS" | "STATS_BUCKETS" | "STATS_HEALTHY" | "TIDB" | "TIDB_HJ" | "TIDB_SMJ" | "TIDB_INLJ" | "RESTORE"
NotKeywordToken:
"ADDDATE" | "BIT_AND" | "BIT_OR" | "BIT_XOR" | "CAST" | "COPY" | "COUNT" | "CURTIME" | "DATE_ADD" | "DATE_SUB" | "EXTRACT" | "GET_FORMAT" | "GROUP_CONCAT"
| "INPLACE" | "INTERNAL" |"MIN" | "MAX" | "MAX_EXECUTION_TIME" | "NOW" | "RECENT" | "POSITION" | "SUBDATE" | "SUBSTRING" | "SUM"
| "INPLACE" | "INSTANT" | "INTERNAL" |"MIN" | "MAX" | "MAX_EXECUTION_TIME" | "NOW" | "RECENT" | "POSITION" | "SUBDATE" | "SUBSTRING" | "SUM"
| "STD" | "STDDEV" | "STDDEV_POP" | "STDDEV_SAMP" | "VARIANCE" | "VAR_POP" | "VAR_SAMP"
| "TIMESTAMPADD" | "TIMESTAMPDIFF" | "TOP" | "TRIM" | "NEXT_ROW_ID"
......@@ -5500,6 +5544,39 @@ SetStmt:
$$ = &ast.SetStmt{Variables: assigns}
}
SetRoleStmt:
"SET" "ROLE" SetRoleOpt
{
}
SetDefaultRoleStmt:
"SET" "DEFAULT" "ROLE" SetDefaultRoleOpt "TO" UsernameList
{
}
SetDefaultRoleOpt:
"NONE"
{
}
| "ALL"
{
}
| RolenameList
{
}
SetRoleOpt:
"ALL" "EXCEPT" RolenameList
{
}
| SetDefaultRoleOpt
{
}
| "DEFAULT"
{
}
TransactionChars:
TransactionChar
{
......@@ -5739,6 +5816,41 @@ AuthString:
$$ = $1
}
RoleNameString:
stringLit
{
$$ = $1
}
| identifier
{
$$ = $1
}
Rolename:
RoleNameString
{
$$ = &auth.RoleIdentity{Username: $1.(string), Hostname: "%"}
}
| StringName '@' StringName
{
$$ = &auth.RoleIdentity{Username: $1.(string), Hostname: $3.(string)}
}
| StringName singleAtIdentifier
{
$$ = &auth.RoleIdentity{Username: $1.(string), Hostname: strings.TrimPrefix($2, "@")}
}
RolenameList:
Rolename
{
$$ = []*auth.RoleIdentity{$1.(*auth.RoleIdentity)}
}
| RolenameList ',' Rolename
{
$$ = append($1.([]*auth.RoleIdentity), $3.(*auth.RoleIdentity))
}
/****************************Admin Statement*******************************/
AdminStmt:
"ADMIN" "SHOW" "DDL"
......@@ -6172,6 +6284,18 @@ ShowTargetFilterable:
Tp: ast.ShowProcedureStatus,
}
}
| "PUMP" "STATUS"
{
$$ = &ast.ShowStmt {
Tp: ast.ShowPumpStatus,
}
}
| "DRAINER" "STATUS"
{
$$ = &ast.ShowStmt {
Tp: ast.ShowDrainerStatus,
}
}
| "FUNCTION" "STATUS"
{
// This statement is similar to SHOW PROCEDURE STATUS but for stored functions.
......@@ -6345,6 +6469,7 @@ Statement:
| CreateTableStmt
| CreateViewStmt
| CreateUserStmt
| CreateRoleStmt
| CreateBindingStmt
| DoStmt
| DropDatabaseStmt
......@@ -6352,10 +6477,12 @@ Statement:
| DropTableStmt
| DropViewStmt
| DropUserStmt
| DropRoleStmt
| DropStatsStmt
| DropBindingStmt
| FlushStmt
| GrantStmt
| GrantRoleStmt
| InsertIntoStmt
| KillStmt
| LoadDataStmt
......@@ -6365,9 +6492,12 @@ Statement:
| RenameTableStmt
| ReplaceIntoStmt
| RevokeStmt
| RevokeRoleStmt
| SelectStmt
| UnionStmt
| SetStmt
| SetRoleStmt
| SetDefaultRoleStmt
| ShowStmt
| SubSelect
{
......@@ -7271,6 +7401,11 @@ CreateUserStmt:
}
}
CreateRoleStmt:
"CREATE" "ROLE" IfNotExists RoleSpecList
{
}
/* See http://dev.mysql.com/doc/refman/5.7/en/alter-user.html */
AlterUserStmt:
"ALTER" "USER" IfExists UserSpecList
......@@ -7355,6 +7490,30 @@ HashString:
$$ = $1
}
RoleSpec:
Rolename
{
role := $1.(*auth.RoleIdentity)
roleSpec := &ast.UserSpec{
User: &auth.UserIdentity {
Username: role.Username,
Hostname: role.Hostname,
},
IsRole: true,
}
$$ = roleSpec
}
RoleSpecList:
RoleSpec
{
$$ = []*ast.UserSpec{$1.(*ast.UserSpec)}
}
| RoleSpecList ',' RoleSpec
{
$$ = append($1.([]*ast.UserSpec), $3.(*ast.UserSpec))
}
/*******************************************************************
*
* Create Binding Statement
......@@ -7420,6 +7579,11 @@ GrantStmt:
}
}
GrantRoleStmt:
"GRANT" RolenameList "TO" UsernameList
{
}
WithGrantOptionOpt:
{
$$ = false
......@@ -7647,6 +7811,11 @@ RevokeStmt:
}
}
RevokeRoleStmt:
"REVOKE" RolenameList "FROM" UsernameList
{
}
/**************************************LoadDataStmt*****************************************
* See https://dev.mysql.com/doc/refman/5.7/en/load-data.html
*******************************************************************************************/
......
......@@ -15,10 +15,13 @@ package execdetails
import (
"fmt"
"sort"
"strings"
"sync"
"sync/atomic"
"time"
"github.com/pingcap/tipb/go-tipb"
)
// CommitDetailCtxKey presents CommitDetail info key in context.
......@@ -26,6 +29,7 @@ const CommitDetailCtxKey = "commitDetail"
// ExecDetails contains execution detail information.
type ExecDetails struct {
CalleeAddress string
ProcessTime time.Duration
WaitTime time.Duration
BackoffTime time.Duration
......@@ -108,10 +112,58 @@ func (d ExecDetails) String() string {
return strings.Join(parts, " ")
}
// CopRuntimeStats collects cop tasks' execution info.
type CopRuntimeStats struct {
sync.Mutex
// stats stores the runtime statistics of coprocessor tasks.
// The key of the map is the tikv-server address. Because a tikv-server can
// have many region leaders, several coprocessor tasks can be sent to the
// same tikv-server instance. We have to use a list to maintain all tasks
// executed on each instance.
stats map[string][]*RuntimeStats
}
// RecordOneCopTask records a specific cop tasks's execution detail.
func (crs *CopRuntimeStats) RecordOneCopTask(address string, summary *tipb.ExecutorExecutionSummary) {
crs.Lock()
defer crs.Unlock()
crs.stats[address] = append(crs.stats[address],
&RuntimeStats{int32(*summary.NumIterations), int64(*summary.TimeProcessedNs), int64(*summary.NumProducedRows)})
}
func (crs *CopRuntimeStats) String() string {
if len(crs.stats) == 0 {
return ""
}
var totalRows, totalTasks int64
var totalIters int32
procTimes := make([]time.Duration, 0, 32)
for _, instanceStats := range crs.stats {
for _, stat := range instanceStats {
procTimes = append(procTimes, time.Duration(stat.consume)*time.Nanosecond)
totalRows += stat.rows
totalIters += stat.loop
totalTasks++
}
}
if totalTasks == 1 {
return fmt.Sprintf("time:%v, loops:%d, rows:%d", procTimes[0], totalIters, totalRows)
}
n := len(procTimes)
sort.Slice(procTimes, func(i, j int) bool { return procTimes[i] < procTimes[j] })
return fmt.Sprintf("proc max:%v, min:%v, p80:%v, p95:%v, rows:%v, iters:%v, tasks:%v",
procTimes[n-1], procTimes[0], procTimes[n*4/5], procTimes[n*19/20], totalRows, totalIters, totalTasks)
}
// RuntimeStatsColl collects executors's execution info.
type RuntimeStatsColl struct {
mu sync.Mutex
stats map[string]*RuntimeStats
mu sync.Mutex
rootStats map[string]*RuntimeStats
copStats map[string]*CopRuntimeStats
}
// RuntimeStats collects one executor's execution info.
......@@ -126,26 +178,53 @@ type RuntimeStats struct {
// NewRuntimeStatsColl creates new executor collector.
func NewRuntimeStatsColl() *RuntimeStatsColl {
return &RuntimeStatsColl{stats: make(map[string]*RuntimeStats)}
return &RuntimeStatsColl{rootStats: make(map[string]*RuntimeStats),
copStats: make(map[string]*CopRuntimeStats)}
}
// Get gets execStat for a executor.
func (e *RuntimeStatsColl) Get(planID string) *RuntimeStats {
// GetRootStats gets execStat for a executor.
func (e *RuntimeStatsColl) GetRootStats(planID string) *RuntimeStats {
e.mu.Lock()
defer e.mu.Unlock()
runtimeStats, exists := e.stats[planID]
runtimeStats, exists := e.rootStats[planID]
if !exists {
runtimeStats = &RuntimeStats{}
e.stats[planID] = runtimeStats
e.rootStats[planID] = runtimeStats
}
return runtimeStats
}
// Exists checks if the planID exists in the stats collection.
func (e *RuntimeStatsColl) Exists(planID string) bool {
// GetCopStats gets the CopRuntimeStats specified by planID.
func (e *RuntimeStatsColl) GetCopStats(planID string) *CopRuntimeStats {
e.mu.Lock()
defer e.mu.Unlock()
copStats, ok := e.copStats[planID]
if !ok {
copStats = &CopRuntimeStats{stats: make(map[string][]*RuntimeStats)}
e.copStats[planID] = copStats
}
return copStats
}
// RecordOneCopTask records a specific cop tasks's execution detail.
func (e *RuntimeStatsColl) RecordOneCopTask(planID, address string, summary *tipb.ExecutorExecutionSummary) {
copStats := e.GetCopStats(planID)
copStats.RecordOneCopTask(address, summary)
}
// ExistsRootStats checks if the planID exists in the rootStats collection.
func (e *RuntimeStatsColl) ExistsRootStats(planID string) bool {
e.mu.Lock()
defer e.mu.Unlock()
_, exists := e.rootStats[planID]
return exists
}
// ExistsCopStats checks if the planID exists in the copStats collection.
func (e *RuntimeStatsColl) ExistsCopStats(planID string) bool {
e.mu.Lock()
defer e.mu.Unlock()
_, exists := e.stats[planID]
_, exists := e.copStats[planID]
return exists
}
......
......@@ -34,6 +34,7 @@
Aggregation
TopN
Limit
ExecutorExecutionSummary
FieldType
Expr
ByItem
......@@ -53,12 +54,10 @@ package tipb
import (
"fmt"
proto "github.com/golang/protobuf/proto"
io "io"
math "math"
io "io"
proto "github.com/golang/protobuf/proto"
)
// Reference imports to suppress errors if they are not otherwise used.
......
......@@ -5,12 +5,10 @@ package tipb
import (
"fmt"
proto "github.com/golang/protobuf/proto"
io "io"
math "math"
io "io"
proto "github.com/golang/protobuf/proto"
)
// Reference imports to suppress errors if they are not otherwise used.
......
......@@ -5,12 +5,10 @@ package tipb
import (
"fmt"
proto "github.com/golang/protobuf/proto"
io "io"
math "math"
io "io"
proto "github.com/golang/protobuf/proto"
)
// Reference imports to suppress errors if they are not otherwise used.
......@@ -339,6 +337,42 @@ func (m *Limit) GetLimit() uint64 {
return 0
}
type ExecutorExecutionSummary struct {
// Total time cost in this executor. Includes self time cost and children time cost.
TimeProcessedNs *uint64 `protobuf:"varint,1,opt,name=time_processed_ns,json=timeProcessedNs" json:"time_processed_ns,omitempty"`
// How many rows this executor produced totally.
NumProducedRows *uint64 `protobuf:"varint,2,opt,name=num_produced_rows,json=numProducedRows" json:"num_produced_rows,omitempty"`
// How many times executor's `next()` is called.
NumIterations *uint64 `protobuf:"varint,3,opt,name=num_iterations,json=numIterations" json:"num_iterations,omitempty"`
XXX_unrecognized []byte `json:"-"`
}
func (m *ExecutorExecutionSummary) Reset() { *m = ExecutorExecutionSummary{} }
func (m *ExecutorExecutionSummary) String() string { return proto.CompactTextString(m) }
func (*ExecutorExecutionSummary) ProtoMessage() {}
func (*ExecutorExecutionSummary) Descriptor() ([]byte, []int) { return fileDescriptorExecutor, []int{8} }
func (m *ExecutorExecutionSummary) GetTimeProcessedNs() uint64 {
if m != nil && m.TimeProcessedNs != nil {
return *m.TimeProcessedNs
}
return 0
}
func (m *ExecutorExecutionSummary) GetNumProducedRows() uint64 {
if m != nil && m.NumProducedRows != nil {
return *m.NumProducedRows
}
return 0
}
func (m *ExecutorExecutionSummary) GetNumIterations() uint64 {
if m != nil && m.NumIterations != nil {
return *m.NumIterations
}
return 0
}
func init() {
proto.RegisterType((*Executor)(nil), "tipb.Executor")
proto.RegisterType((*TableScan)(nil), "tipb.TableScan")
......@@ -348,6 +382,7 @@ func init() {
proto.RegisterType((*Aggregation)(nil), "tipb.Aggregation")
proto.RegisterType((*TopN)(nil), "tipb.TopN")
proto.RegisterType((*Limit)(nil), "tipb.Limit")
proto.RegisterType((*ExecutorExecutionSummary)(nil), "tipb.ExecutorExecutionSummary")
proto.RegisterEnum("tipb.ExecType", ExecType_name, ExecType_value)
}
func (m *Executor) Marshal() (dAtA []byte, err error) {
......@@ -724,6 +759,42 @@ func (m *Limit) MarshalTo(dAtA []byte) (int, error) {
return i, nil
}
func (m *ExecutorExecutionSummary) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *ExecutorExecutionSummary) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if m.TimeProcessedNs != nil {
dAtA[i] = 0x8
i++
i = encodeVarintExecutor(dAtA, i, uint64(*m.TimeProcessedNs))
}
if m.NumProducedRows != nil {
dAtA[i] = 0x10
i++
i = encodeVarintExecutor(dAtA, i, uint64(*m.NumProducedRows))
}
if m.NumIterations != nil {
dAtA[i] = 0x18
i++
i = encodeVarintExecutor(dAtA, i, uint64(*m.NumIterations))
}
if m.XXX_unrecognized != nil {
i += copy(dAtA[i:], m.XXX_unrecognized)
}
return i, nil
}
func encodeVarintExecutor(dAtA []byte, offset int, v uint64) int {
for v >= 1<<7 {
dAtA[offset] = uint8(v&0x7f | 0x80)
......@@ -887,6 +958,24 @@ func (m *Limit) Size() (n int) {
return n
}
func (m *ExecutorExecutionSummary) Size() (n int) {
var l int
_ = l
if m.TimeProcessedNs != nil {
n += 1 + sovExecutor(uint64(*m.TimeProcessedNs))
}
if m.NumProducedRows != nil {
n += 1 + sovExecutor(uint64(*m.NumProducedRows))
}
if m.NumIterations != nil {
n += 1 + sovExecutor(uint64(*m.NumIterations))
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
return n
}
func sovExecutor(x uint64) (n int) {
for {
n++
......@@ -1951,6 +2040,117 @@ func (m *Limit) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *ExecutorExecutionSummary) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecutor
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: ExecutorExecutionSummary: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: ExecutorExecutionSummary: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field TimeProcessedNs", wireType)
}
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecutor
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.TimeProcessedNs = &v
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field NumProducedRows", wireType)
}
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecutor
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.NumProducedRows = &v
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field NumIterations", wireType)
}
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecutor
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.NumIterations = &v
default:
iNdEx = preIndex
skippy, err := skipExecutor(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthExecutor
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipExecutor(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
......@@ -2059,45 +2259,50 @@ var (
func init() { proto.RegisterFile("executor.proto", fileDescriptorExecutor) }
var fileDescriptorExecutor = []byte{
// 630 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcd, 0x6e, 0xd3, 0x40,
0x10, 0xc7, 0x6b, 0xc7, 0x69, 0x9c, 0x49, 0x3f, 0xdc, 0xe5, 0x43, 0x56, 0x0f, 0x69, 0x30, 0x20,
0x4a, 0x24, 0x02, 0x2a, 0x07, 0xce, 0x0d, 0x02, 0x29, 0x02, 0x55, 0x95, 0xdb, 0x7b, 0xe4, 0xac,
0xb7, 0xcb, 0xa2, 0x64, 0x77, 0xb1, 0xd7, 0x52, 0x72, 0xe0, 0xce, 0x23, 0xf0, 0x0e, 0xbc, 0x48,
0x8f, 0x3c, 0x01, 0x82, 0xf2, 0x22, 0x68, 0x77, 0x6d, 0xc7, 0x85, 0x22, 0x38, 0xed, 0xce, 0x7f,
0x7e, 0x33, 0x3b, 0x9a, 0x99, 0x85, 0x1d, 0xb2, 0x24, 0xb8, 0x50, 0x22, 0x1b, 0xc9, 0x4c, 0x28,
0x81, 0x3c, 0xc5, 0xe4, 0x6c, 0x3f, 0x20, 0x4b, 0x99, 0x91, 0x3c, 0x67, 0x82, 0x5b, 0x7d, 0x7f,
0x2b, 0xc7, 0xef, 0xc8, 0x22, 0x29, 0xad, 0xdb, 0x54, 0x50, 0x61, 0xae, 0x4f, 0xf5, 0xcd, 0xaa,
0xd1, 0x0f, 0x17, 0xfc, 0x57, 0x65, 0x3a, 0xf4, 0x00, 0x5c, 0x25, 0x43, 0x67, 0xe0, 0x1c, 0xee,
0x1c, 0xed, 0x8c, 0x74, 0xd6, 0x91, 0xf6, 0x9d, 0xaf, 0x24, 0x19, 0x7b, 0x97, 0xdf, 0x0e, 0x36,
0x62, 0x57, 0x49, 0x34, 0x04, 0x5f, 0xcd, 0xe6, 0xd3, 0x1c, 0x27, 0x3c, 0x74, 0x07, 0xce, 0x61,
0xef, 0x68, 0xd7, 0xb2, 0xe7, 0xc9, 0x6c, 0x4e, 0xce, 0x70, 0xc2, 0xe3, 0x8e, 0x9a, 0xcd, 0xf5,
0x45, 0xb3, 0x2c, 0x5d, 0x5a, 0xb6, 0xd5, 0x64, 0x27, 0x3c, 0x25, 0x4b, 0xcb, 0xb2, 0xd4, 0x5c,
0xd0, 0x13, 0xe8, 0xe6, 0x64, 0x4e, 0xb0, 0x62, 0x82, 0x87, 0x5e, 0x13, 0x3e, 0xab, 0xe4, 0x78,
0x4d, 0xa0, 0xe7, 0xd0, 0x4b, 0x28, 0xcd, 0x08, 0x4d, 0x4c, 0x40, 0xdb, 0x04, 0xec, 0xd9, 0x80,
0xe3, 0xb5, 0x23, 0x6e, 0x52, 0xa8, 0x0f, 0x9e, 0x12, 0xf2, 0x24, 0xdc, 0x34, 0x34, 0x94, 0x75,
0x0b, 0x79, 0x12, 0x1b, 0x1d, 0xdd, 0x83, 0xf6, 0x9c, 0x2d, 0x98, 0x0a, 0x3b, 0x06, 0xe8, 0x59,
0xe0, 0xad, 0x96, 0x62, 0xeb, 0x41, 0xcf, 0x00, 0x72, 0x95, 0x91, 0x64, 0x31, 0x4d, 0x28, 0x0d,
0xfd, 0xbf, 0x3d, 0xdb, 0xb5, 0xd0, 0x31, 0xa5, 0x51, 0x06, 0xdd, 0xba, 0x35, 0xe8, 0x00, 0x7c,
0xa5, 0x8d, 0x29, 0x4b, 0x4d, 0xa7, 0x5b, 0x65, 0x67, 0x3b, 0x46, 0x9d, 0xa4, 0x68, 0x08, 0x1d,
0x2c, 0xe6, 0xc5, 0x82, 0xe7, 0xa1, 0x3b, 0x68, 0x1d, 0xf6, 0x8e, 0x02, 0x9b, 0xfc, 0xa5, 0x11,
0x27, 0xfc, 0x42, 0xc4, 0x15, 0x80, 0x42, 0xf0, 0x52, 0x92, 0x63, 0xd3, 0x5a, 0xbf, 0x4c, 0x64,
0x94, 0xe8, 0x8b, 0x03, 0xdd, 0xba, 0xc7, 0xff, 0x7e, 0xf4, 0x00, 0x7c, 0xa6, 0x69, 0x0d, 0xb8,
0x4d, 0xc0, 0xa8, 0xd7, 0xab, 0x6a, 0xfd, 0x6f, 0x55, 0xde, 0xef, 0x55, 0xa1, 0xbb, 0xb0, 0x59,
0x70, 0xf6, 0xa1, 0x20, 0x66, 0x5c, 0x7e, 0x5c, 0x5a, 0xd1, 0x0b, 0xe8, 0xd6, 0x33, 0x46, 0x43,
0x00, 0x2c, 0x78, 0xca, 0xb4, 0x91, 0x87, 0x8e, 0x79, 0x0d, 0xaa, 0x6d, 0x94, 0x59, 0xdc, 0xf0,
0x46, 0x23, 0x80, 0xd3, 0x4c, 0xbc, 0x2f, 0x23, 0x07, 0xd0, 0xd6, 0x9f, 0xe0, 0xa6, 0x20, 0xeb,
0x88, 0x3e, 0x42, 0xaf, 0x31, 0x24, 0xf4, 0x10, 0x7c, 0x9a, 0x89, 0x42, 0x4e, 0x67, 0xab, 0x1b,
0x62, 0x3a, 0xc6, 0x37, 0x5e, 0x69, 0x2c, 0xa1, 0x74, 0x7a, 0x51, 0x70, 0x5c, 0xce, 0xe4, 0x1a,
0x96, 0x50, 0xfa, 0xba, 0xe0, 0x18, 0x0d, 0xc0, 0xb7, 0x43, 0x27, 0xe9, 0xb5, 0x89, 0xd4, 0x6a,
0xf4, 0x06, 0x3c, 0xbd, 0x6c, 0xe8, 0x11, 0xf8, 0x22, 0x4b, 0x49, 0xb6, 0x7e, 0x77, 0xcb, 0x26,
0x1c, 0xaf, 0x26, 0x8a, 0x2c, 0xe2, 0x8e, 0xf1, 0x8e, 0x57, 0x68, 0xbf, 0xda, 0x47, 0x3d, 0x14,
0xaf, 0xcc, 0x67, 0xa5, 0xe8, 0x3e, 0xb4, 0xcd, 0x62, 0xae, 0x21, 0xe7, 0x0f, 0x68, 0xf8, 0xc9,
0xb1, 0xff, 0x5b, 0xff, 0x61, 0xb4, 0x07, 0xdb, 0xfa, 0xac, 0x97, 0x31, 0xd8, 0xa8, 0xa4, 0x7a,
0x55, 0x02, 0xa7, 0x92, 0xea, 0x81, 0x04, 0x2e, 0xba, 0x05, 0xbb, 0x5a, 0x6a, 0xb4, 0x2e, 0x68,
0xa1, 0x2d, 0xf0, 0x4d, 0x36, 0x21, 0x4f, 0x02, 0x0f, 0x6d, 0x43, 0x57, 0x5b, 0xa6, 0xa2, 0xa0,
0x5d, 0x27, 0xa9, 0x3e, 0x41, 0xb0, 0x39, 0x7e, 0x7c, 0x79, 0xd5, 0x77, 0xbe, 0x5e, 0xf5, 0x9d,
0xef, 0x57, 0x7d, 0xe7, 0xf3, 0xcf, 0xfe, 0x06, 0xdc, 0xc1, 0x62, 0x31, 0x92, 0x8c, 0x53, 0x9c,
0xc8, 0x91, 0x62, 0xe9, 0xcc, 0x34, 0xe1, 0xd4, 0xf9, 0x15, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x05,
0x10, 0x17, 0xe2, 0x04, 0x00, 0x00,
// 718 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xcf, 0x6e, 0xdb, 0x38,
0x10, 0xc6, 0x23, 0x5b, 0x8e, 0xe5, 0x71, 0x62, 0x2b, 0xdc, 0x3f, 0x10, 0x72, 0x70, 0xbc, 0xda,
0x0d, 0xd6, 0x6b, 0x60, 0xbd, 0x8b, 0xf4, 0xd0, 0x73, 0x5c, 0xb4, 0x80, 0xd1, 0xc2, 0x30, 0x94,
0xdc, 0x05, 0x59, 0x62, 0x58, 0x16, 0x16, 0xa9, 0x52, 0x14, 0x62, 0x1f, 0x7a, 0xef, 0x23, 0xb4,
0xcf, 0xd0, 0x17, 0xc9, 0xb1, 0x4f, 0x50, 0xb4, 0xe9, 0x8b, 0x14, 0x24, 0x25, 0xd9, 0x69, 0x53,
0xb4, 0x27, 0x91, 0xdf, 0xfc, 0x66, 0x48, 0xcc, 0x37, 0x14, 0xf4, 0xf0, 0x1a, 0xc7, 0x85, 0xe4,
0x62, 0x92, 0x09, 0x2e, 0x39, 0xb2, 0x25, 0xcd, 0x96, 0xc7, 0x2e, 0x5e, 0x67, 0x02, 0xe7, 0x39,
0xe5, 0xcc, 0xe8, 0xc7, 0x07, 0x79, 0xfc, 0x1c, 0xa7, 0x51, 0xb9, 0xfb, 0x95, 0x70, 0xc2, 0xf5,
0xf2, 0x3f, 0xb5, 0x32, 0xaa, 0xff, 0xa9, 0x01, 0xce, 0xe3, 0xb2, 0x1c, 0xfa, 0x0b, 0x1a, 0x32,
0xf3, 0xac, 0xa1, 0x35, 0xea, 0x9d, 0xf5, 0x26, 0xaa, 0xea, 0x44, 0xc5, 0x2e, 0x37, 0x19, 0x9e,
0xda, 0x37, 0x1f, 0x4e, 0xf6, 0x82, 0x86, 0xcc, 0xd0, 0x18, 0x1c, 0xb9, 0x5c, 0x85, 0x79, 0x1c,
0x31, 0xaf, 0x31, 0xb4, 0x46, 0xdd, 0xb3, 0xbe, 0x61, 0x2f, 0xa3, 0xe5, 0x0a, 0x5f, 0xc4, 0x11,
0x0b, 0xda, 0x72, 0xb9, 0x52, 0x0b, 0xc5, 0xd2, 0x64, 0x6d, 0xd8, 0xe6, 0x2e, 0x3b, 0x63, 0x09,
0x5e, 0x1b, 0x96, 0x26, 0x7a, 0x81, 0xfe, 0x85, 0x4e, 0x8e, 0x57, 0x38, 0x96, 0x94, 0x33, 0xcf,
0xde, 0x85, 0x2f, 0x2a, 0x39, 0xd8, 0x12, 0xe8, 0x01, 0x74, 0x23, 0x42, 0x04, 0x26, 0x91, 0x4e,
0x68, 0xe9, 0x84, 0x23, 0x93, 0x70, 0xbe, 0x0d, 0x04, 0xbb, 0x14, 0x1a, 0x80, 0x2d, 0x79, 0x36,
0xf7, 0xf6, 0x35, 0x0d, 0xe5, 0xbd, 0x79, 0x36, 0x0f, 0xb4, 0x8e, 0xfe, 0x80, 0xd6, 0x8a, 0xa6,
0x54, 0x7a, 0x6d, 0x0d, 0x74, 0x0d, 0xf0, 0x4c, 0x49, 0x81, 0x89, 0xa0, 0xff, 0x01, 0x72, 0x29,
0x70, 0x94, 0x86, 0x11, 0x21, 0x9e, 0xf3, 0xbd, 0x63, 0x3b, 0x06, 0x3a, 0x27, 0xc4, 0x17, 0xd0,
0xa9, 0x5b, 0x83, 0x4e, 0xc0, 0x91, 0x6a, 0x13, 0xd2, 0x44, 0x77, 0xba, 0x59, 0x76, 0xb6, 0xad,
0xd5, 0x59, 0x82, 0xc6, 0xd0, 0x8e, 0xf9, 0xaa, 0x48, 0x59, 0xee, 0x35, 0x86, 0xcd, 0x51, 0xf7,
0xcc, 0x35, 0xc5, 0x1f, 0x69, 0x71, 0xc6, 0xae, 0x78, 0x50, 0x01, 0xc8, 0x03, 0x3b, 0xc1, 0x79,
0xac, 0x5b, 0xeb, 0x94, 0x85, 0xb4, 0xe2, 0xbf, 0xb3, 0xa0, 0x53, 0xf7, 0xf8, 0xc7, 0x87, 0x9e,
0x80, 0x43, 0x15, 0xad, 0x80, 0xc6, 0x2e, 0xa0, 0xd5, 0xbb, 0xb7, 0x6a, 0xfe, 0xec, 0xad, 0xec,
0xaf, 0x6f, 0x85, 0x7e, 0x87, 0xfd, 0x82, 0xd1, 0x97, 0x05, 0xd6, 0x76, 0x39, 0x41, 0xb9, 0xf3,
0x1f, 0x42, 0xa7, 0xf6, 0x18, 0x8d, 0x01, 0x62, 0xce, 0x12, 0xaa, 0x36, 0xb9, 0x67, 0xe9, 0xd3,
0xa0, 0x9a, 0xc6, 0x4c, 0x04, 0x3b, 0x51, 0x7f, 0x02, 0xb0, 0x10, 0xfc, 0x45, 0x99, 0x39, 0x84,
0x96, 0x7a, 0x04, 0xf7, 0x25, 0x99, 0x80, 0xff, 0x0a, 0xba, 0x3b, 0x26, 0xa1, 0x53, 0x70, 0x88,
0xe0, 0x45, 0x16, 0x2e, 0x37, 0xf7, 0xe4, 0xb4, 0x75, 0x6c, 0xba, 0x51, 0x58, 0x44, 0x48, 0x78,
0x55, 0xb0, 0xb8, 0xf4, 0xe4, 0x0e, 0x16, 0x11, 0xf2, 0xa4, 0x60, 0x31, 0x1a, 0x82, 0x63, 0x4c,
0xc7, 0xc9, 0x1d, 0x47, 0x6a, 0xd5, 0x7f, 0x0a, 0xb6, 0x1a, 0x36, 0xf4, 0x37, 0x38, 0x5c, 0x24,
0x58, 0x6c, 0xcf, 0x3d, 0x30, 0x05, 0xa7, 0x9b, 0x99, 0xc4, 0x69, 0xd0, 0xd6, 0xd1, 0xe9, 0x06,
0x1d, 0x57, 0xf3, 0xa8, 0x4c, 0xb1, 0xcb, 0x7a, 0x46, 0xf2, 0xff, 0x84, 0x96, 0x1e, 0xcc, 0x2d,
0x64, 0x7d, 0x0b, 0xbd, 0xb5, 0xc0, 0xab, 0xde, 0xb7, 0xf9, 0x52, 0xce, 0x2e, 0x8a, 0x34, 0x8d,
0xc4, 0x06, 0x8d, 0xe1, 0x48, 0xd2, 0x14, 0x87, 0x99, 0xe0, 0x31, 0xce, 0x73, 0x9c, 0x84, 0xba,
0xe1, 0xd6, 0xc8, 0x0e, 0xfa, 0x2a, 0xb0, 0xa8, 0xf4, 0x79, 0xae, 0x58, 0x56, 0xa4, 0x0a, 0x4d,
0x8a, 0x18, 0x27, 0xa1, 0xe0, 0xd7, 0xb9, 0xb9, 0x55, 0xd0, 0x67, 0x45, 0xba, 0x28, 0xf5, 0x80,
0x5f, 0xe7, 0xe8, 0x14, 0x7a, 0x8a, 0xa5, 0x12, 0x8b, 0xc8, 0xb8, 0xd8, 0xd4, 0xe0, 0x21, 0x2b,
0xd2, 0x59, 0x2d, 0x8e, 0x5f, 0x5b, 0xe6, 0xdf, 0xa3, 0xfe, 0x2f, 0xe8, 0x08, 0x0e, 0xd5, 0xb7,
0x7e, 0x28, 0xee, 0x5e, 0x25, 0xd5, 0x63, 0xec, 0x5a, 0x95, 0x54, 0x0f, 0x8b, 0xdb, 0x40, 0xbf,
0x40, 0x5f, 0x49, 0x3b, 0xb6, 0xba, 0x4d, 0x74, 0x00, 0x8e, 0xae, 0xc6, 0xb3, 0xb9, 0x6b, 0xa3,
0x43, 0xe8, 0xa8, 0x9d, 0xee, 0x96, 0xdb, 0xaa, 0x8b, 0x54, 0x0f, 0xd4, 0xdd, 0x9f, 0xfe, 0x73,
0x73, 0x3b, 0xb0, 0xde, 0xdf, 0x0e, 0xac, 0x8f, 0xb7, 0x03, 0xeb, 0xcd, 0xe7, 0xc1, 0x1e, 0xfc,
0x16, 0xf3, 0x74, 0x92, 0x51, 0x46, 0xe2, 0x28, 0x9b, 0x48, 0x9a, 0x2c, 0xb5, 0x41, 0x0b, 0xeb,
0x4b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x99, 0xfc, 0xf8, 0x28, 0x7e, 0x05, 0x00, 0x00,
}
......@@ -5,12 +5,10 @@ package tipb
import (
"fmt"
proto "github.com/golang/protobuf/proto"
io "io"
math "math"
io "io"
proto "github.com/golang/protobuf/proto"
)
// Reference imports to suppress errors if they are not otherwise used.
......@@ -479,7 +477,7 @@ const (
ScalarFuncSig_JsonMergeSig ScalarFuncSig = 5008
ScalarFuncSig_JsonObjectSig ScalarFuncSig = 5009
ScalarFuncSig_JsonArraySig ScalarFuncSig = 5010
ScalarFuncSig_JsonValidSig ScalarFuncSig = 5011
ScalarFuncSig_JsonValidJsonSig ScalarFuncSig = 5011
ScalarFuncSig_JsonContainsSig ScalarFuncSig = 5012
ScalarFuncSig_JsonArrayAppendSig ScalarFuncSig = 5013
ScalarFuncSig_JsonArrayInsertSig ScalarFuncSig = 5014
......@@ -494,6 +492,7 @@ const (
ScalarFuncSig_JsonKeysSig ScalarFuncSig = 5023
ScalarFuncSig_JsonLengthSig ScalarFuncSig = 5024
ScalarFuncSig_JsonKeys2ArgsSig ScalarFuncSig = 5025
ScalarFuncSig_JsonValidStringSig ScalarFuncSig = 5026
// time
ScalarFuncSig_DateFormatSig ScalarFuncSig = 6001
ScalarFuncSig_DateLiteral ScalarFuncSig = 6002
......@@ -968,7 +967,7 @@ var ScalarFuncSig_name = map[int32]string{
5008: "JsonMergeSig",
5009: "JsonObjectSig",
5010: "JsonArraySig",
5011: "JsonValidSig",
5011: "JsonValidJsonSig",
5012: "JsonContainsSig",
5013: "JsonArrayAppendSig",
5014: "JsonArrayInsertSig",
......@@ -983,6 +982,7 @@ var ScalarFuncSig_name = map[int32]string{
5023: "JsonKeysSig",
5024: "JsonLengthSig",
5025: "JsonKeys2ArgsSig",
5026: "JsonValidStringSig",
6001: "DateFormatSig",
6002: "DateLiteral",
6003: "DateDiff",
......@@ -1454,7 +1454,7 @@ var ScalarFuncSig_value = map[string]int32{
"JsonMergeSig": 5008,
"JsonObjectSig": 5009,
"JsonArraySig": 5010,
"JsonValidSig": 5011,
"JsonValidJsonSig": 5011,
"JsonContainsSig": 5012,
"JsonArrayAppendSig": 5013,
"JsonArrayInsertSig": 5014,
......@@ -1469,6 +1469,7 @@ var ScalarFuncSig_value = map[string]int32{
"JsonKeysSig": 5023,
"JsonLengthSig": 5024,
"JsonKeys2ArgsSig": 5025,
"JsonValidStringSig": 5026,
"DateFormatSig": 6001,
"DateLiteral": 6002,
"DateDiff": 6003,
......@@ -2582,274 +2583,275 @@ var (
func init() { proto.RegisterFile("expression.proto", fileDescriptorExpression) }
var fileDescriptorExpression = []byte{
// 4300 bytes of a gzipped FileDescriptorProto
// 4312 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x5a, 0x67, 0x74, 0x1c, 0x55,
0x96, 0xa6, 0x6d, 0x19, 0xec, 0x72, 0xba, 0x14, 0x36, 0x6a, 0xd8, 0xb3, 0xb6, 0x8c, 0xe6, 0xac,
0x18, 0x66, 0x57, 0x3d, 0x63, 0x4c, 0x6b, 0x7f, 0x6c, 0x6a, 0xa9, 0x65, 0xd1, 0xb3, 0x92, 0x2c,
0xab, 0x5b, 0x66, 0xf6, 0xd7, 0x9c, 0x52, 0xf7, 0x53, 0xab, 0xa0, 0xbb, 0xaa, 0xa9, 0x7a, 0x2d,
0x4b, 0x6c, 0x38, 0xe4, 0x1c, 0x6c, 0x82, 0x6d, 0x72, 0x86, 0x21, 0x87, 0x19, 0x72, 0x4e, 0x83,
0x8d, 0x89, 0x03, 0x38, 0x00, 0xc3, 0x30, 0x66, 0x12, 0x61, 0x02, 0x43, 0x8e, 0xb3, 0xe7, 0x7e,
0xef, 0xbd, 0xea, 0x6a, 0x89, 0x5f, 0xaa, 0xf7, 0xbd, 0x7b, 0xbf, 0xfb, 0xbd, 0xfb, 0xf2, 0x53,
0x5b, 0x24, 0x26, 0x6b, 0x81, 0x08, 0x43, 0xd7, 0xf7, 0x3a, 0x6b, 0x81, 0x2f, 0x7d, 0xbb, 0x45,
0xba, 0xb5, 0xd1, 0x03, 0x97, 0x94, 0xfd, 0xb2, 0x0f, 0x20, 0xc5, 0x5f, 0xaa, 0xee, 0xa0, 0xbb,
0x12, 0xd6, 0xbc, 0xd5, 0xae, 0xa8, 0x94, 0x0a, 0x53, 0x35, 0x61, 0x2f, 0xb1, 0x66, 0xc9, 0x5a,
0x32, 0xd1, 0x96, 0x38, 0x78, 0x4e, 0x77, 0xcb, 0xd6, 0x37, 0x97, 0xef, 0x35, 0x3c, 0x4b, 0xd6,
0xec, 0xa4, 0xd5, 0x32, 0x56, 0x71, 0xca, 0xc9, 0x59, 0x6d, 0x89, 0x83, 0x17, 0x6a, 0x1c, 0x88,
0xaa, 0x11, 0x5e, 0x72, 0x76, 0xcc, 0x03, 0x88, 0xbd, 0xcc, 0xda, 0xa7, 0x24, 0x8a, 0x6e, 0xd5,
0xa9, 0x24, 0x5b, 0x62, 0x95, 0x06, 0xe4, 0xfa, 0xa2, 0x5f, 0xa9, 0x38, 0x52, 0x24, 0xe7, 0xc4,
0xeb, 0x35, 0x88, 0xfa, 0x71, 0x27, 0x08, 0x85, 0x4c, 0xee, 0xdd, 0x96, 0x38, 0x78, 0x5e, 0x54,
0xaf, 0xc0, 0x83, 0x9e, 0x48, 0x58, 0x2d, 0xbd, 0x93, 0xb5, 0xc0, 0xfe, 0x4e, 0x24, 0x79, 0xd1,
0xca, 0x45, 0x9d, 0xdc, 0xd2, 0x4e, 0xc6, 0xb9, 0x39, 0xb1, 0x26, 0x90, 0x35, 0x7b, 0xc2, 0xa9,
0xa0, 0x05, 0x0b, 0x86, 0xf9, 0xd3, 0xfe, 0x07, 0x6b, 0x6e, 0x71, 0xdc, 0xad, 0x94, 0x02, 0xc8,
0x9f, 0x7d, 0xf0, 0xfc, 0x95, 0x56, 0xc3, 0x7b, 0x38, 0xaa, 0xb3, 0xbf, 0x67, 0xcd, 0x0e, 0xdd,
0x32, 0x1a, 0xb1, 0x68, 0xe5, 0x7e, 0xca, 0x24, 0x5f, 0x74, 0x2a, 0x4e, 0xb0, 0xba, 0xee, 0x15,
0xf3, 0x6e, 0x59, 0x47, 0x61, 0x2b, 0xbb, 0xd3, 0xb2, 0xc6, 0x38, 0x99, 0x3f, 0x96, 0x53, 0x35,
0xd5, 0xb0, 0xf9, 0x2b, 0x17, 0x2b, 0x9f, 0x28, 0xc9, 0xc3, 0xf3, 0xc6, 0xcc, 0xe7, 0x41, 0xdd,
0xd6, 0xde, 0xdd, 0x53, 0x39, 0x29, 0xaa, 0xf6, 0x32, 0xab, 0x85, 0xfb, 0x0d, 0x0d, 0x69, 0x96,
0x02, 0x9c, 0x33, 0x5d, 0x12, 0x61, 0x11, 0x2d, 0x98, 0x6b, 0x32, 0xcd, 0xc8, 0x21, 0x9b, 0x5a,
0xac, 0xb9, 0xa6, 0xc5, 0xf6, 0x5c, 0xab, 0x65, 0xb0, 0x5e, 0xa9, 0xd0, 0x5e, 0xf6, 0x3c, 0x6b,
0x4e, 0xce, 0x93, 0xe9, 0x55, 0x94, 0xb0, 0x2d, 0x6b, 0xef, 0x11, 0x17, 0xdf, 0xb3, 0xec, 0xf9,
0xd6, 0x3e, 0xab, 0x2b, 0xbe, 0x23, 0x0f, 0x5d, 0x49, 0xb3, 0xa3, 0x42, 0x7a, 0x15, 0xb5, 0xb0,
0x55, 0x5e, 0x06, 0xae, 0x57, 0xa6, 0x39, 0xec, 0xdc, 0x3d, 0x25, 0x45, 0x48, 0x7b, 0xdb, 0x0b,
0xac, 0xb9, 0x03, 0x53, 0xe1, 0xd1, 0x95, 0x6e, 0x57, 0x92, 0xb0, 0xc9, 0x5a, 0x80, 0x52, 0x56,
0x75, 0x23, 0x8d, 0xd9, 0xfb, 0x5a, 0x0b, 0x15, 0x52, 0x0f, 0x1c, 0xe9, 0xfa, 0x1e, 0x95, 0xed,
0x85, 0xd6, 0x3c, 0x40, 0xbd, 0x5e, 0xbd, 0x4a, 0xe3, 0x11, 0xc3, 0xe1, 0x62, 0x92, 0xdc, 0xa8,
0x94, 0x17, 0x92, 0x8e, 0x8c, 0x4c, 0x0b, 0x6e, 0x55, 0xd0, 0x51, 0x51, 0xf1, 0x87, 0xa1, 0xef,
0x51, 0xc5, 0x5e, 0x64, 0xcd, 0x5b, 0xe7, 0x54, 0xea, 0xa2, 0xdf, 0x0d, 0x25, 0x6d, 0x4e, 0x70,
0xb9, 0xc7, 0xaf, 0xd4, 0xab, 0xde, 0xb0, 0x18, 0xa3, 0x6d, 0xdc, 0xb0, 0x39, 0x3d, 0x7e, 0xdd,
0x93, 0x74, 0x5f, 0xab, 0x3d, 0xd7, 0x9a, 0x9d, 0xaf, 0x57, 0xe9, 0x7e, 0x7c, 0x65, 0x26, 0xca,
0xf4, 0x00, 0xbe, 0x06, 0x5c, 0x8f, 0x1e, 0x54, 0x5f, 0xce, 0x24, 0x3d, 0xd4, 0xca, 0x3e, 0xab,
0xdd, 0x20, 0x94, 0xf4, 0x70, 0xab, 0x4d, 0xd6, 0xfc, 0xbe, 0xc0, 0xaf, 0xd7, 0x7a, 0x7c, 0xaf,
0xe8, 0x48, 0x7a, 0xa4, 0xd5, 0x5e, 0x6c, 0x59, 0x99, 0x72, 0xf9, 0xc7, 0xdd, 0xae, 0xcc, 0x78,
0x25, 0x7a, 0xb4, 0x95, 0x43, 0x6a, 0x60, 0x4d, 0x40, 0x8f, 0xc5, 0x0d, 0x7e, 0xe4, 0x07, 0xf4,
0xb8, 0x8a, 0x2b, 0x4b, 0xf4, 0x44, 0xab, 0x3d, 0x9f, 0x13, 0x58, 0x2a, 0x89, 0x09, 0x7a, 0x12,
0x7e, 0xaa, 0x30, 0xe4, 0xd7, 0xe8, 0x29, 0xf8, 0xa9, 0x72, 0xde, 0xa9, 0xd6, 0xe8, 0xe7, 0xb0,
0x5e, 0xe7, 0x04, 0x5c, 0xfb, 0x74, 0xab, 0xbd, 0xc0, 0xda, 0x67, 0x9d, 0x13, 0xa0, 0x6a, 0x6b,
0xab, 0xbd, 0xd0, 0x9a, 0xbb, 0xce, 0x09, 0x5c, 0xc7, 0x2b, 0x0a, 0xda, 0xd6, 0x6a, 0xef, 0x6b,
0x2d, 0xe0, 0x7c, 0x64, 0x82, 0xc0, 0x99, 0xca, 0x94, 0xcb, 0xf4, 0x4c, 0xab, 0x6d, 0x5b, 0x0b,
0x19, 0x5a, 0x33, 0x7a, 0xa4, 0x28, 0x4a, 0xc6, 0xb6, 0xab, 0x08, 0xd1, 0xb8, 0xa4, 0x0d, 0x83,
0x87, 0x7c, 0x9a, 0xb5, 0x16, 0x36, 0x8d, 0x54, 0xee, 0xbd, 0x1e, 0x27, 0x94, 0x39, 0x4f, 0x66,
0xc2, 0x9c, 0x27, 0x69, 0x2f, 0xee, 0xbd, 0x08, 0x19, 0x16, 0x4e, 0x85, 0x12, 0xf6, 0x7e, 0xd6,
0xe2, 0x08, 0xd2, 0x03, 0x62, 0x96, 0xbd, 0xc4, 0xa2, 0x08, 0x34, 0x7d, 0x3f, 0xbb, 0xc9, 0x1b,
0x3d, 0xd8, 0x62, 0x2f, 0xb5, 0xf6, 0x6d, 0x18, 0x9a, 0x21, 0x31, 0xa7, 0xc9, 0x12, 0x9d, 0xbb,
0xb7, 0x81, 0x38, 0xaa, 0x52, 0x63, 0xd9, 0xb6, 0xb5, 0xa8, 0x01, 0x41, 0xce, 0x7c, 0x13, 0x59,
0x61, 0x5a, 0xcf, 0x02, 0x13, 0x46, 0xa1, 0x46, 0xd0, 0xc2, 0x66, 0x02, 0x28, 0x5a, 0x64, 0xef,
0x6f, 0xd9, 0x31, 0x53, 0x23, 0x69, 0x71, 0xb3, 0x2d, 0x34, 0x91, 0x09, 0xa6, 0x09, 0x95, 0xac,
0x25, 0x26, 0x58, 0x84, 0x42, 0xd9, 0x52, 0xbb, 0xd5, 0xda, 0xaf, 0x09, 0xd6, 0xe2, 0xf6, 0xb7,
0x93, 0xd6, 0x92, 0xa6, 0x0a, 0xa3, 0xaf, 0x75, 0x06, 0x13, 0x24, 0x26, 0xed, 0x03, 0xac, 0xa5,
0xcd, 0x0e, 0x46, 0xe5, 0x01, 0x33, 0x3c, 0x20, 0xf4, 0x40, 0xd3, 0x49, 0x2a, 0xa4, 0xd2, 0xb9,
0xcc, 0xa8, 0x37, 0x20, 0x64, 0x2e, 0x37, 0xed, 0x37, 0xa8, 0x56, 0xd9, 0x66, 0xe4, 0x1b, 0xdc,
0x88, 0x5c, 0x31, 0x9d, 0x06, 0x1a, 0x0f, 0x32, 0x8d, 0x8a, 0xcc, 0x8d, 0xc4, 0xf6, 0xe9, 0xf6,
0x50, 0xf8, 0x1d, 0xd3, 0xbd, 0xec, 0xad, 0xf4, 0x1d, 0x6c, 0x32, 0xae, 0x20, 0xa8, 0xfb, 0xae,
0x71, 0x56, 0x98, 0xd6, 0x76, 0x88, 0x69, 0xb5, 0x42, 0x8d, 0xb2, 0xef, 0x35, 0x13, 0x40, 0xd7,
0x3f, 0x9a, 0xe6, 0x69, 0x53, 0xa3, 0xea, 0x9f, 0x9a, 0x6d, 0xa1, 0xa9, 0x33, 0x4a, 0xa6, 0xb6,
0x52, 0xba, 0x56, 0x1a, 0x8a, 0x06, 0x0c, 0x6d, 0x87, 0x46, 0xfd, 0x18, 0xe1, 0x5a, 0xdf, 0xaa,
0xa8, 0xc3, 0xa2, 0x1a, 0xa3, 0xf1, 0xb0, 0x99, 0x64, 0xd0, 0x99, 0xb6, 0x0f, 0xb4, 0xf6, 0x9f,
0xe6, 0x62, 0xb4, 0x76, 0xcd, 0xf4, 0x81, 0xde, 0x7f, 0x36, 0x39, 0xc4, 0xec, 0x87, 0xd6, 0x7f,
0x31, 0xcd, 0x52, 0x10, 0x74, 0xfe, 0xab, 0xc9, 0xa1, 0xc2, 0xb4, 0xc6, 0x7f, 0x33, 0x8d, 0x55,
0xa8, 0xd1, 0xf7, 0xef, 0xcd, 0x04, 0xd0, 0xf6, 0x1f, 0x26, 0xbe, 0x36, 0x35, 0xba, 0x32, 0xcd,
0xb6, 0xd0, 0xd4, 0xcd, 0x6b, 0x66, 0x8f, 0xef, 0x54, 0x44, 0x58, 0x14, 0xac, 0xe8, 0x9d, 0x36,
0x5e, 0x9f, 0x0c, 0x02, 0x41, 0xef, 0xb6, 0xd9, 0x4b, 0xac, 0xc5, 0x06, 0x32, 0x91, 0xdf, 0x6b,
0xb3, 0xf7, 0xb3, 0x16, 0x19, 0x54, 0xab, 0x7c, 0xbf, 0xc9, 0x1b, 0x6a, 0xfe, 0xd8, 0x66, 0x2f,
0xb5, 0x28, 0xf2, 0x36, 0x62, 0xfe, 0xd4, 0x64, 0x09, 0x2d, 0x7f, 0x6e, 0xe3, 0x7d, 0xaa, 0xbf,
0xc0, 0x32, 0x4a, 0xbc, 0x7d, 0xf5, 0x17, 0x10, 0x5f, 0xf0, 0x36, 0xd2, 0x5f, 0x68, 0x6c, 0x51,
0x0b, 0xac, 0xb9, 0xfd, 0x05, 0x1d, 0xb1, 0xac, 0x0c, 0x11, 0x6a, 0xdc, 0x5e, 0x64, 0x59, 0xfd,
0x85, 0x28, 0x86, 0xab, 0xea, 0x40, 0x7e, 0x24, 0xb8, 0x7b, 0x99, 0xdb, 0x03, 0xdc, 0x0b, 0x6e,
0x1f, 0xdc, 0xbd, 0x86, 0xbb, 0x06, 0xee, 0x5e, 0xcd, 0x7d, 0xb4, 0x32, 0x04, 0x77, 0x00, 0xee,
0xde, 0x88, 0x3b, 0x54, 0x75, 0xe0, 0x96, 0xcc, 0xdd, 0x07, 0xdd, 0x93, 0x0c, 0xf7, 0x29, 0xdd,
0x53, 0xcc, 0xdd, 0x17, 0xe9, 0x3e, 0x86, 0xb9, 0xfb, 0x8c, 0xee, 0xff, 0x56, 0x86, 0xe0, 0xfe,
0x1f, 0xe6, 0xee, 0x6b, 0xe8, 0xfe, 0x5f, 0x55, 0x07, 0xee, 0xff, 0x53, 0x9b, 0x9a, 0x70, 0xa4,
0xc0, 0x72, 0x4b, 0x9f, 0x22, 0x71, 0x06, 0x41, 0xa0, 0xcf, 0xd0, 0x41, 0x06, 0x32, 0xf1, 0x3e,
0x47, 0x07, 0x19, 0x54, 0x87, 0xfd, 0xa2, 0xc9, 0x1b, 0xd1, 0xbf, 0x6c, 0xe3, 0x0d, 0xaa, 0x5f,
0xa8, 0xe5, 0x9c, 0xbe, 0x6a, 0xe3, 0xbd, 0x0e, 0x45, 0x90, 0x7f, 0x0d, 0x0f, 0x94, 0x0d, 0xf3,
0x37, 0x6d, 0x2c, 0x0a, 0x90, 0xa6, 0xfd, 0x5b, 0xc3, 0x09, 0x9c, 0xc7, 0xae, 0x60, 0x8b, 0x9c,
0x27, 0x45, 0x30, 0xe1, 0x54, 0x98, 0xf6, 0xb8, 0x15, 0x4c, 0x63, 0x10, 0x30, 0x1f, 0xbf, 0x82,
0x37, 0xef, 0x3e, 0xf4, 0xc9, 0xf1, 0x09, 0xde, 0x40, 0xfb, 0x54, 0xa7, 0x9c, 0x80, 0x93, 0x41,
0x5f, 0xd4, 0x2b, 0x27, 0x26, 0x58, 0x61, 0x9f, 0xe9, 0x96, 0x93, 0xb4, 0x2d, 0x22, 0x9d, 0x9c,
0xe0, 0x8d, 0xb2, 0xaf, 0xd1, 0x31, 0xa7, 0xe8, 0x5a, 0x64, 0xef, 0x54, 0x9c, 0x29, 0x7a, 0xd7,
0x72, 0x88, 0x33, 0x51, 0xd1, 0xbb, 0x16, 0x21, 0xce, 0x42, 0x88, 0xde, 0xb5, 0x26, 0xc4, 0xd9,
0x08, 0xd1, 0xbb, 0x56, 0x87, 0x38, 0x47, 0xdb, 0x22, 0xc4, 0x06, 0x84, 0xe8, 0x5d, 0x1b, 0x85,
0xd8, 0xa8, 0x6b, 0x11, 0xe2, 0x5c, 0x84, 0x18, 0x44, 0x2b, 0x36, 0xa1, 0x62, 0x50, 0xb5, 0x42,
0x9d, 0x6f, 0x06, 0xa3, 0x56, 0x6c, 0x41, 0x88, 0x41, 0xd3, 0x8a, 0x0b, 0xb5, 0x2d, 0x42, 0x5c,
0x84, 0x10, 0x83, 0x8d, 0x56, 0x5c, 0xac, 0x6b, 0x11, 0xe2, 0x12, 0xc5, 0x54, 0xaf, 0x54, 0x54,
0x4b, 0xae, 0x50, 0xd6, 0x28, 0x23, 0xd4, 0x95, 0x09, 0x3e, 0x41, 0x28, 0xc0, 0x84, 0xbb, 0x2a,
0xc1, 0x09, 0x57, 0x98, 0x0e, 0x79, 0x75, 0xcc, 0x0f, 0x61, 0xaf, 0xe1, 0xd3, 0xc1, 0x22, 0xed,
0x67, 0x42, 0x5f, 0x1b, 0xb3, 0x42, 0xf8, 0xeb, 0x20, 0x7c, 0xa8, 0x52, 0x57, 0xeb, 0xd3, 0xd6,
0x04, 0xf7, 0x2d, 0x17, 0x4d, 0xa8, 0x6d, 0x09, 0x3e, 0xf0, 0x30, 0xc2, 0xea, 0xb6, 0x43, 0xed,
0x80, 0xeb, 0x69, 0xfb, 0x67, 0x21, 0x04, 0x65, 0xe3, 0xf0, 0x1c, 0x18, 0x01, 0xb1, 0xc7, 0x0b,
0xca, 0xa2, 0x5e, 0x91, 0x6e, 0xad, 0x32, 0x05, 0xa7, 0x17, 0x13, 0x3c, 0xa4, 0x0d, 0x64, 0xfc,
0x5e, 0x42, 0x68, 0x83, 0xb2, 0xeb, 0x2f, 0x20, 0x36, 0xeb, 0x4e, 0xb8, 0x25, 0xb5, 0x58, 0xbd,
0x8c, 0x54, 0x28, 0xc0, 0xb8, 0xbd, 0x92, 0xd0, 0x63, 0x4f, 0xc1, 0xec, 0xf7, 0x6a, 0x82, 0x57,
0xa5, 0x08, 0x32, 0x96, 0x3b, 0xd0, 0x92, 0x01, 0xbf, 0x04, 0xae, 0x9d, 0x20, 0x1f, 0xf0, 0x4b,
0xa6, 0x7a, 0x17, 0x7a, 0x65, 0xc0, 0x2f, 0x31, 0xc5, 0xee, 0x84, 0x9d, 0xb4, 0xf6, 0x8b, 0x89,
0x19, 0xf1, 0x42, 0xb7, 0xec, 0x89, 0x12, 0xbd, 0x06, 0xb3, 0xcc, 0x28, 0x1a, 0x77, 0x17, 0x31,
0x65, 0x66, 0x34, 0x1c, 0xe1, 0xd2, 0xdd, 0xa6, 0x84, 0x00, 0xf7, 0x10, 0xce, 0x9f, 0xa3, 0x51,
0x62, 0xee, 0x25, 0xac, 0x8a, 0xc2, 0xe5, 0x39, 0x53, 0xf0, 0xb3, 0xa2, 0x48, 0xf7, 0x35, 0x43,
0x4c, 0x72, 0x7f, 0x04, 0x65, 0x45, 0x51, 0x41, 0x0f, 0x34, 0x43, 0xec, 0xf8, 0x20, 0x71, 0x92,
0x19, 0x42, 0xac, 0x87, 0x88, 0x13, 0xb3, 0xba, 0xe2, 0xfb, 0x41, 0xc4, 0xfd, 0xf0, 0x34, 0x8c,
0x99, 0x1e, 0x69, 0x60, 0x11, 0xfb, 0xa3, 0xd3, 0x30, 0xf6, 0x7d, 0x8c, 0xb8, 0x9b, 0x81, 0x81,
0xff, 0x71, 0x94, 0x87, 0xfd, 0xba, 0xa7, 0x92, 0xb7, 0x0d, 0xe1, 0x51, 0x66, 0x8a, 0x67, 0x1a,
0x45, 0xf6, 0xde, 0x4e, 0xf6, 0xfe, 0xd6, 0xbe, 0x28, 0x1e, 0xe1, 0xca, 0xf1, 0xd5, 0x81, 0x53,
0x54, 0x83, 0x85, 0xb8, 0x5f, 0x9a, 0x70, 0xf6, 0x7e, 0x6e, 0x26, 0xcc, 0x2c, 0xcf, 0x23, 0x9b,
0xfd, 0x7e, 0xf9, 0x07, 0x99, 0xa0, 0x4c, 0x2f, 0x23, 0x44, 0xbf, 0x5f, 0x5e, 0x99, 0x09, 0xca,
0x21, 0xbd, 0x42, 0xf6, 0x3c, 0xab, 0x85, 0x8b, 0xf4, 0x2a, 0xf1, 0x1c, 0x65, 0xbb, 0xef, 0xd3,
0x0e, 0xc0, 0xc3, 0x8e, 0x57, 0xa2, 0x9d, 0x48, 0x1a, 0x7f, 0x32, 0x69, 0x5e, 0x88, 0x12, 0xed,
0x22, 0xbe, 0x00, 0x0c, 0xf9, 0xeb, 0x69, 0x37, 0xec, 0x7a, 0x7c, 0x6f, 0x82, 0x5e, 0x83, 0x7b,
0xcf, 0x70, 0xcf, 0xa1, 0x2b, 0xe9, 0x75, 0xc0, 0x79, 0xb7, 0xec, 0xd1, 0x1b, 0xea, 0xf3, 0xe8,
0x40, 0xd2, 0x2f, 0xf1, 0x99, 0x29, 0xfa, 0x21, 0xbd, 0xa9, 0x3e, 0x43, 0xd7, 0xa3, 0x5f, 0x41,
0x50, 0x46, 0x3a, 0x1e, 0xf4, 0xbd, 0x85, 0x0c, 0x71, 0x51, 0x09, 0xfc, 0x35, 0x62, 0xf5, 0xf8,
0x21, 0xed, 0xd1, 0x5f, 0x92, 0xde, 0x46, 0x8b, 0xb2, 0xa2, 0x1c, 0x08, 0x11, 0xd2, 0x6f, 0x80,
0xf7, 0x4e, 0xd6, 0xe8, 0xb7, 0x64, 0xef, 0x63, 0xcd, 0x1a, 0xca, 0xd1, 0xef, 0x60, 0x30, 0xec,
0x94, 0x5c, 0xc7, 0x0b, 0xe9, 0xf7, 0x30, 0xc8, 0xbb, 0x1e, 0xfd, 0x01, 0x5f, 0x05, 0xc7, 0xa3,
0x77, 0x88, 0x27, 0x49, 0x21, 0xa8, 0xf3, 0x1d, 0x08, 0x83, 0xfd, 0x5d, 0xb4, 0xd3, 0x20, 0xc8,
0xf3, 0x7b, 0x7c, 0x36, 0x5e, 0x6c, 0x20, 0x33, 0xfc, 0xde, 0xc7, 0x78, 0xec, 0xf7, 0xcb, 0x6e,
0xd1, 0xa9, 0xf0, 0x85, 0xe9, 0xd2, 0x24, 0xd6, 0x75, 0x05, 0xac, 0x09, 0xe8, 0xb2, 0x64, 0xcc,
0x80, 0x2f, 0x4c, 0x97, 0x27, 0xb9, 0x89, 0x23, 0x9e, 0x13, 0x4c, 0x0d, 0xfa, 0x92, 0xae, 0x48,
0xf2, 0x40, 0x41, 0x31, 0x9a, 0xdd, 0xd7, 0x24, 0x79, 0x91, 0x69, 0x60, 0x88, 0x7f, 0x6d, 0x92,
0xfb, 0xbf, 0x01, 0x1a, 0x05, 0xd7, 0x81, 0x40, 0x97, 0x72, 0x21, 0xee, 0xbe, 0xd7, 0x83, 0xc0,
0xac, 0x4f, 0x1a, 0xfc, 0x09, 0x94, 0x30, 0x97, 0x06, 0x6e, 0x48, 0x72, 0x23, 0xd5, 0x4a, 0xa7,
0xa1, 0x1b, 0x61, 0xc3, 0x2b, 0x9d, 0x06, 0x6e, 0x42, 0x73, 0x72, 0x9e, 0xd4, 0xe5, 0x9b, 0x61,
0xc0, 0x8b, 0x9c, 0x06, 0x6e, 0x81, 0x81, 0xba, 0x2d, 0xe6, 0xdd, 0x32, 0xdd, 0x8a, 0xe6, 0xe1,
0xb2, 0xc8, 0xc5, 0xdb, 0x4c, 0xf5, 0x8f, 0x7c, 0x94, 0x6f, 0x37, 0xe5, 0x41, 0x51, 0xe6, 0xf2,
0x1d, 0x0d, 0xfe, 0x42, 0x50, 0x17, 0x74, 0x67, 0x4c, 0x24, 0x80, 0x9f, 0x36, 0x37, 0x0f, 0xd8,
0xcf, 0x60, 0x04, 0xa7, 0xd5, 0x4e, 0x25, 0x14, 0x74, 0x57, 0x92, 0x3b, 0x50, 0x79, 0x29, 0xe4,
0x6e, 0x95, 0x01, 0xe3, 0xa6, 0xc0, 0x7b, 0x54, 0xdf, 0x88, 0x31, 0x99, 0x1f, 0x77, 0xc7, 0x24,
0xdd, 0xa7, 0x82, 0xb9, 0xe5, 0x71, 0x0d, 0xdc, 0x6f, 0xc4, 0xab, 0x3b, 0xf5, 0xbd, 0x20, 0xe9,
0x13, 0x72, 0xc8, 0x09, 0x9c, 0xaa, 0xde, 0x12, 0x1e, 0x48, 0x62, 0xb7, 0x14, 0x72, 0x9d, 0x13,
0xd0, 0x83, 0x28, 0x0c, 0xfb, 0xeb, 0xb9, 0x2d, 0x0f, 0xa1, 0x90, 0x57, 0x35, 0x0f, 0x43, 0x37,
0xee, 0xee, 0x51, 0x57, 0x3d, 0x02, 0x3e, 0x8d, 0x99, 0xcd, 0xe3, 0xd1, 0x64, 0x74, 0xc9, 0x47,
0xe7, 0x3f, 0x06, 0x51, 0xaa, 0xfc, 0xc3, 0xfc, 0x9a, 0x41, 0x7a, 0x3c, 0x06, 0x60, 0x24, 0x3c,
0x81, 0x7e, 0x53, 0x80, 0x16, 0xf5, 0x64, 0xcc, 0x06, 0xfb, 0xd4, 0x53, 0x49, 0x9e, 0x80, 0x39,
0x8f, 0x19, 0xaf, 0x5c, 0xce, 0xba, 0x72, 0x1e, 0x9c, 0xaf, 0x5a, 0xae, 0x12, 0x6e, 0x34, 0x5d,
0xbd, 0x9c, 0x9b, 0x9c, 0xf3, 0x34, 0xd1, 0x35, 0xda, 0x16, 0x24, 0xd7, 0x2e, 0x57, 0x79, 0x8e,
0xb4, 0x5e, 0xa7, 0x6b, 0xb1, 0xc9, 0x5d, 0xaf, 0x98, 0xc6, 0x78, 0x18, 0x70, 0x98, 0x93, 0xda,
0x60, 0x8d, 0x32, 0x42, 0x9d, 0xdc, 0xc6, 0x29, 0x50, 0x80, 0x09, 0x77, 0x0a, 0xce, 0x46, 0x0a,
0xd3, 0x21, 0x4f, 0x8d, 0xf9, 0x21, 0xec, 0x69, 0x38, 0x86, 0x69, 0x3f, 0x13, 0xfa, 0xf4, 0x36,
0x34, 0x68, 0x8c, 0x23, 0x9d, 0xd1, 0x06, 0x19, 0x63, 0x88, 0x72, 0x66, 0x9b, 0x92, 0x61, 0x22,
0x9c, 0x85, 0xc3, 0x59, 0x6e, 0x4c, 0xb3, 0x9f, 0xad, 0x6d, 0xc1, 0x7c, 0x8e, 0x0e, 0x15, 0xb1,
0x6e, 0x88, 0xc5, 0x46, 0xa3, 0x36, 0x6a, 0x73, 0x75, 0x50, 0xc1, 0xa9, 0xad, 0xc7, 0x09, 0xc5,
0x11, 0xe3, 0x02, 0xa9, 0xfc, 0x8b, 0x3a, 0x83, 0x6b, 0x04, 0xf1, 0x3f, 0x50, 0x67, 0x7d, 0x0d,
0x19, 0x15, 0x7f, 0x55, 0x67, 0x7d, 0x8d, 0x6a, 0x2d, 0x1f, 0x36, 0x79, 0x43, 0xd1, 0x47, 0xea,
0xac, 0x6f, 0xbc, 0x8d, 0xae, 0x8f, 0x9b, 0x2c, 0x21, 0xe6, 0x13, 0x48, 0xcd, 0x60, 0x34, 0x05,
0x53, 0x35, 0x49, 0x17, 0xb4, 0x6b, 0xa0, 0xd7, 0x53, 0xc0, 0xa6, 0x76, 0x6c, 0x5f, 0x7e, 0x15,
0x8f, 0x9f, 0xb4, 0xb9, 0x1d, 0x6f, 0x3e, 0xd9, 0xc3, 0x68, 0x0b, 0x2a, 0x86, 0x9c, 0x30, 0x5c,
0xef, 0x07, 0x25, 0xba, 0xb0, 0x1d, 0xb3, 0xc5, 0xf1, 0x4a, 0x7e, 0x55, 0xbd, 0x71, 0x5d, 0xd4,
0x8e, 0x75, 0xf9, 0xf0, 0xcc, 0x0f, 0xe8, 0x62, 0xf3, 0xb9, 0x92, 0x2e, 0x41, 0x80, 0x11, 0xaf,
0x68, 0x18, 0x2f, 0x6d, 0xb7, 0x5b, 0x2d, 0xbb, 0x01, 0x88, 0x52, 0xbf, 0xf0, 0xca, 0x72, 0x9c,
0x2e, 0x43, 0x80, 0xac, 0x23, 0x9d, 0x51, 0x27, 0x14, 0x74, 0x43, 0x3b, 0x36, 0x3a, 0x6c, 0x6c,
0xfe, 0xfa, 0x90, 0x6e, 0x44, 0xc0, 0x9e, 0x7a, 0x10, 0x08, 0x4f, 0x8e, 0x84, 0x22, 0xa0, 0x9b,
0x10, 0x05, 0x9f, 0x37, 0xb7, 0xab, 0x6b, 0x8d, 0xe7, 0x89, 0x22, 0x56, 0xab, 0x2c, 0xdd, 0x02,
0xa8, 0x1f, 0xc7, 0xeb, 0x50, 0x04, 0x32, 0x97, 0xa5, 0x5b, 0x11, 0x3a, 0x0e, 0xf1, 0x06, 0x94,
0xcb, 0xd2, 0x6d, 0xed, 0x78, 0x3a, 0x12, 0x41, 0xc8, 0x79, 0xbb, 0x1d, 0x91, 0x0a, 0x6e, 0xb6,
0xdb, 0x20, 0x77, 0xb4, 0xab, 0x5d, 0x74, 0xbd, 0x9a, 0xd2, 0x77, 0xb6, 0xf3, 0x30, 0xca, 0x57,
0x84, 0xa8, 0xd1, 0xd3, 0xed, 0x6a, 0xbb, 0x2b, 0x1e, 0x45, 0x5b, 0x55, 0x4a, 0x44, 0x45, 0x38,
0xa1, 0x00, 0xb2, 0x8d, 0x6f, 0xf5, 0x8b, 0xcd, 0xa3, 0x83, 0x37, 0x85, 0xb9, 0x45, 0xcf, 0xb4,
0x73, 0x77, 0x45, 0xb7, 0x54, 0x03, 0x6f, 0x6f, 0xd7, 0x87, 0xf7, 0x08, 0x79, 0x16, 0x4d, 0xe0,
0xf9, 0x1b, 0x41, 0xcf, 0x01, 0xc2, 0x63, 0x8b, 0x81, 0x9e, 0x6f, 0xe7, 0x51, 0xa2, 0x9f, 0x0d,
0x0c, 0xf8, 0x02, 0xec, 0x70, 0x6b, 0x37, 0xd0, 0x8b, 0xed, 0x6a, 0x92, 0x0a, 0x99, 0x91, 0xbe,
0x47, 0x2f, 0x45, 0xc5, 0x41, 0xe9, 0x3b, 0xf4, 0x8b, 0x76, 0x35, 0xa5, 0x85, 0x4c, 0xa3, 0xfa,
0xe5, 0x46, 0x19, 0xf5, 0xaf, 0xb4, 0x63, 0x4c, 0x87, 0xb9, 0xa1, 0x89, 0x55, 0xf4, 0x2a, 0xd8,
0x55, 0x81, 0x87, 0x8a, 0x23, 0x69, 0x47, 0x0c, 0x1a, 0x70, 0x6a, 0x35, 0x51, 0xa2, 0x9d, 0x0d,
0x97, 0x34, 0xed, 0x52, 0x9d, 0x35, 0x92, 0xcb, 0xd2, 0x6e, 0x64, 0xbb, 0xdf, 0x3d, 0x4a, 0xf0,
0x82, 0xb7, 0x63, 0x05, 0xe7, 0x68, 0x58, 0x94, 0xc5, 0x64, 0xad, 0xdb, 0xe5, 0x9d, 0x89, 0xd1,
0x9d, 0x2b, 0x70, 0xac, 0x01, 0xca, 0xe5, 0x5d, 0x2b, 0xb8, 0x91, 0x3c, 0x86, 0x7b, 0x27, 0x65,
0xe0, 0x14, 0x25, 0x83, 0xa7, 0x75, 0x18, 0x70, 0xc4, 0x3b, 0xba, 0xee, 0x4b, 0xf0, 0x9d, 0xde,
0xc1, 0x69, 0x64, 0xb0, 0x30, 0x55, 0x03, 0x72, 0x46, 0x87, 0xd9, 0x6e, 0xf2, 0x02, 0x7e, 0x67,
0x76, 0x98, 0x97, 0x3f, 0x35, 0x0e, 0x18, 0x3b, 0x2b, 0xe2, 0x1a, 0x16, 0xb5, 0x8a, 0x53, 0x84,
0xe7, 0xd9, 0x91, 0xe1, 0xb0, 0xa8, 0xfa, 0x13, 0xc0, 0xce, 0xe9, 0x30, 0x2f, 0x89, 0x03, 0x22,
0x28, 0x03, 0xda, 0xd0, 0xd1, 0xfc, 0x92, 0xc8, 0xd8, 0xc6, 0x8e, 0xa6, 0x07, 0x47, 0x86, 0xce,
0x8d, 0xa0, 0x75, 0x4e, 0xc5, 0xc5, 0x46, 0x77, 0x5e, 0x07, 0x37, 0x9e, 0xa1, 0x1e, 0xdf, 0x93,
0x8e, 0xeb, 0x85, 0x8c, 0x9e, 0xdf, 0xc1, 0xe3, 0xb4, 0xf1, 0x58, 0x59, 0xab, 0x09, 0xb5, 0x2f,
0x5e, 0xd0, 0x5c, 0xd1, 0x50, 0xbf, 0xa9, 0x83, 0xf7, 0xf5, 0x48, 0xd4, 0x90, 0x23, 0x8b, 0xe3,
0x8c, 0x6f, 0xee, 0xb0, 0x0f, 0xb0, 0x96, 0x34, 0xf0, 0x40, 0x84, 0x22, 0x50, 0xed, 0xd8, 0xd2,
0xc1, 0xe7, 0xe8, 0x78, 0xe8, 0x21, 0x47, 0xc2, 0xe9, 0xc2, 0xa8, 0x39, 0x43, 0x81, 0x90, 0x12,
0xda, 0x2f, 0x8a, 0xb4, 0xaf, 0x35, 0x89, 0xbe, 0x38, 0x32, 0xcb, 0x0b, 0x27, 0x50, 0xf1, 0x2e,
0x89, 0x04, 0xe6, 0xa5, 0x1f, 0x38, 0x9c, 0x9e, 0x63, 0x60, 0x7c, 0x69, 0xe4, 0x9f, 0x15, 0x35,
0x15, 0xe6, 0xb2, 0xa8, 0xa3, 0xfe, 0x53, 0x4c, 0xa1, 0xdd, 0x97, 0x47, 0x8c, 0x6a, 0x49, 0x60,
0xec, 0x8a, 0x0e, 0x9e, 0x2c, 0xc6, 0x0a, 0x27, 0x38, 0x86, 0xaf, 0x84, 0x69, 0xd6, 0x91, 0x62,
0xb5, 0x1f, 0x54, 0x1d, 0x24, 0xe1, 0x83, 0x4e, 0x26, 0x64, 0xac, 0xdf, 0x95, 0x22, 0xe0, 0x05,
0xb4, 0x53, 0x2f, 0x29, 0x22, 0xeb, 0x8e, 0x8d, 0xd1, 0x87, 0x9d, 0xe6, 0x6e, 0xc6, 0x13, 0x03,
0xd0, 0x47, 0x9d, 0x2c, 0x98, 0x8b, 0x6a, 0x02, 0x45, 0x15, 0x1f, 0x77, 0xda, 0x7f, 0x67, 0xed,
0x6f, 0x26, 0xe9, 0xb4, 0xca, 0x4f, 0x3a, 0xed, 0xbf, 0xb7, 0x92, 0xa6, 0xd2, 0xfc, 0x8d, 0xaa,
0x3f, 0x05, 0x69, 0xc3, 0x27, 0xaa, 0xf8, 0x0c, 0xa4, 0xaa, 0x62, 0x86, 0xd7, 0xe7, 0x9d, 0xdc,
0x57, 0xaa, 0x72, 0x5a, 0xbc, 0x2f, 0x3a, 0x39, 0x09, 0x86, 0x2a, 0x82, 0xbf, 0xec, 0xe4, 0x39,
0xc5, 0xcd, 0xa3, 0xaf, 0xf0, 0x79, 0xb8, 0x5f, 0x0f, 0xe8, 0xeb, 0x4e, 0xdc, 0x96, 0x5c, 0xaf,
0x2e, 0x05, 0x7d, 0xd3, 0xa9, 0x8e, 0x13, 0x45, 0xdf, 0x2b, 0xd1, 0xdf, 0x90, 0xa0, 0x01, 0xb7,
0x18, 0xf8, 0x1a, 0x39, 0x36, 0xc5, 0x2b, 0xd9, 0x80, 0xef, 0xc9, 0x71, 0x3a, 0x2e, 0x85, 0x0b,
0x24, 0x7f, 0x0f, 0x3a, 0x55, 0x41, 0xc7, 0xa7, 0x70, 0x21, 0xf5, 0xd7, 0xf3, 0x22, 0xc9, 0x07,
0xe9, 0x13, 0x52, 0xb8, 0xee, 0x2a, 0xc0, 0xaf, 0x4b, 0xc6, 0x4e, 0x4c, 0xe1, 0xe0, 0xec, 0x4c,
0xc1, 0xe5, 0x24, 0xb8, 0x64, 0x9d, 0xa9, 0x35, 0x63, 0x8a, 0xf3, 0x64, 0x70, 0x02, 0x38, 0x42,
0x88, 0xa3, 0xe8, 0x94, 0x46, 0xf9, 0xbf, 0x84, 0x13, 0xd0, 0xa9, 0x29, 0xee, 0x11, 0xae, 0x62,
0xce, 0x01, 0xbf, 0x24, 0xe8, 0xb4, 0x14, 0x4f, 0x09, 0x03, 0xf9, 0x75, 0x09, 0xf4, 0x74, 0xc4,
0x61, 0x34, 0xeb, 0x4c, 0xd1, 0x19, 0x88, 0xc3, 0x25, 0xcd, 0x73, 0x66, 0x8a, 0x9b, 0x8f, 0xcf,
0xb3, 0x52, 0x9c, 0x2b, 0xfe, 0x6c, 0xa2, 0x3d, 0x3b, 0xc5, 0xc3, 0x3d, 0x0e, 0x1b, 0xea, 0x73,
0xa0, 0xa9, 0x4f, 0x48, 0x35, 0x92, 0x68, 0x43, 0x0a, 0xeb, 0xe9, 0x54, 0xc8, 0x89, 0xc5, 0xb5,
0x27, 0xac, 0xd1, 0xc6, 0x14, 0x4f, 0xb0, 0x18, 0xe8, 0xd7, 0x25, 0xe3, 0xe7, 0xa6, 0x62, 0xbb,
0x12, 0x7a, 0xe2, 0x3c, 0xe8, 0xd7, 0x08, 0x77, 0xd5, 0xf7, 0x39, 0x4f, 0xe7, 0x4f, 0x47, 0x71,
0x35, 0xb9, 0x00, 0xb2, 0xb1, 0x87, 0x6f, 0x4a, 0xa9, 0x4d, 0xa7, 0x1a, 0x0d, 0xde, 0xcd, 0x68,
0xf2, 0x48, 0xa1, 0x07, 0xb4, 0x5b, 0xa0, 0x7f, 0xa4, 0xd0, 0xc3, 0x26, 0xa1, 0x74, 0xaa, 0x35,
0xd3, 0x2d, 0x17, 0xa6, 0x78, 0x50, 0x4d, 0xaf, 0xd1, 0xfd, 0x73, 0x11, 0x2a, 0x33, 0xa5, 0x12,
0x93, 0x48, 0x6c, 0x07, 0xa5, 0xc6, 0x6b, 0x47, 0x8a, 0x47, 0x5c, 0x73, 0xa5, 0x3e, 0x65, 0x5c,
0x82, 0x70, 0x99, 0x52, 0x09, 0x83, 0xcd, 0x91, 0x18, 0x74, 0x38, 0xab, 0x5f, 0x6a, 0x9c, 0xcc,
0x8e, 0xd3, 0xe0, 0xbb, 0x2c, 0xc5, 0xe3, 0x3e, 0x5e, 0xa5, 0xd9, 0x2e, 0x47, 0xf6, 0x34, 0x9b,
0xc2, 0xc0, 0x75, 0x45, 0xa4, 0x2e, 0xda, 0x0c, 0x1b, 0x6c, 0x57, 0x46, 0xea, 0x1a, 0x95, 0x9a,
0xef, 0xaa, 0x26, 0x75, 0xba, 0x1a, 0x8c, 0x57, 0x1b, 0x09, 0xac, 0x39, 0xce, 0x76, 0x0d, 0x86,
0x45, 0xa3, 0x42, 0x33, 0x5d, 0x0b, 0x05, 0xf9, 0xfa, 0xe8, 0xb7, 0xe5, 0xe7, 0x3a, 0x28, 0x68,
0xae, 0xd4, 0x7e, 0xd7, 0x43, 0x41, 0xbe, 0x3e, 0x3a, 0x23, 0x3f, 0x3f, 0x31, 0x4e, 0x33, 0xf3,
0x73, 0x03, 0xc4, 0xc5, 0xab, 0x34, 0xdb, 0x8d, 0x6a, 0x74, 0x29, 0xb6, 0x58, 0x7e, 0x6e, 0x8a,
0xd4, 0x7d, 0x4b, 0x7e, 0x6e, 0x8e, 0xd4, 0xcd, 0xc8, 0xcf, 0x2d, 0x4d, 0xea, 0xe2, 0xf9, 0xb9,
0xd5, 0x48, 0x98, 0x9e, 0x9f, 0xdb, 0x90, 0x9f, 0x46, 0x85, 0x66, 0xba, 0x1d, 0x41, 0x46, 0x3c,
0x77, 0x32, 0x1a, 0x5d, 0x7a, 0x10, 0xd3, 0x1d, 0xf0, 0x68, 0xaa, 0xe2, 0xd3, 0xed, 0x9d, 0x33,
0xe1, 0xac, 0x28, 0xd2, 0x4f, 0x53, 0xea, 0xdf, 0x8e, 0xde, 0x84, 0x08, 0x64, 0xe1, 0x18, 0xfa,
0x59, 0x0a, 0x6f, 0x51, 0xce, 0x51, 0xc8, 0x1e, 0xdd, 0x15, 0x15, 0x31, 0x1b, 0xee, 0x86, 0xf5,
0x90, 0x08, 0x5c, 0xbf, 0x94, 0x29, 0x95, 0xe8, 0x1e, 0x4c, 0x78, 0x55, 0xc6, 0xd2, 0x77, 0x2f,
0x26, 0xc7, 0xda, 0xba, 0x13, 0x48, 0x11, 0xd0, 0x7d, 0x30, 0xcf, 0x8b, 0x62, 0xc1, 0x87, 0xfb,
0xfd, 0x28, 0x63, 0xad, 0xe4, 0x95, 0x8e, 0x1e, 0x48, 0x99, 0xd3, 0x10, 0xf4, 0x30, 0xe3, 0x83,
0x29, 0x5e, 0x18, 0x0b, 0x7e, 0xd6, 0x99, 0x0a, 0xe9, 0x21, 0x65, 0xaf, 0x57, 0xc5, 0x90, 0x1e,
0xc6, 0x12, 0xa0, 0xa7, 0x94, 0x99, 0x67, 0x8f, 0xa0, 0x93, 0x62, 0xa0, 0x9e, 0x62, 0x8f, 0x62,
0x59, 0x8c, 0xc8, 0x31, 0xb1, 0x1f, 0x03, 0x41, 0x84, 0xa9, 0x87, 0x87, 0xc7, 0x53, 0x66, 0x15,
0x07, 0x68, 0xe6, 0xf9, 0x13, 0x68, 0x0a, 0x9f, 0x4a, 0x79, 0x69, 0x7b, 0x12, 0x6c, 0x79, 0x19,
0xb0, 0x34, 0xa9, 0x92, 0xf3, 0x94, 0x1a, 0x1e, 0x71, 0x8c, 0x47, 0x23, 0xfd, 0x7c, 0x1a, 0x6e,
0xfa, 0xf2, 0x69, 0x04, 0x5a, 0x1d, 0xf8, 0x55, 0xd3, 0x0d, 0x10, 0xb5, 0x75, 0x06, 0xcc, 0xba,
0x68, 0x1b, 0x96, 0x26, 0x7d, 0xac, 0x8a, 0xb8, 0x9f, 0x69, 0x42, 0x0d, 0xf3, 0x76, 0x33, 0xf1,
0xd8, 0x2e, 0xbe, 0x55, 0xd1, 0xb3, 0xf1, 0xf9, 0xa5, 0x9f, 0x03, 0x3c, 0x49, 0xcf, 0xc5, 0x97,
0x18, 0xbd, 0xf1, 0xe9, 0xdb, 0xcd, 0xf3, 0x71, 0x8f, 0x9c, 0x67, 0xde, 0xb4, 0x5f, 0x40, 0x02,
0x1a, 0x30, 0xb3, 0xbc, 0x98, 0xb2, 0x0f, 0xb4, 0x96, 0x6a, 0xcc, 0x48, 0xd4, 0xf6, 0x2f, 0xc5,
0x67, 0xbc, 0xa9, 0xc3, 0x1b, 0xa5, 0x99, 0x04, 0x33, 0xb4, 0xbe, 0x1c, 0x1f, 0xeb, 0x0d, 0xad,
0xaf, 0xc4, 0xa7, 0x7b, 0xb3, 0xd6, 0x57, 0xe3, 0x1e, 0x0d, 0xad, 0x3b, 0x54, 0x67, 0x45, 0x30,
0xb3, 0xec, 0x84, 0x56, 0x8d, 0x4d, 0xd3, 0xba, 0x2b, 0x3e, 0xfb, 0xe2, 0x5a, 0x77, 0x63, 0xf8,
0x73, 0xd7, 0x60, 0x3c, 0xbe, 0x96, 0x32, 0x2f, 0x28, 0x7a, 0x4f, 0x7a, 0xbd, 0x79, 0x8c, 0x61,
0x0a, 0xbc, 0x91, 0xd2, 0xaf, 0x20, 0xfa, 0xfe, 0xb4, 0x3b, 0xcd, 0x57, 0xb5, 0x6e, 0xd7, 0xa3,
0xd7, 0xd2, 0xbc, 0xab, 0x67, 0xf2, 0x3d, 0xb9, 0x1c, 0xbd, 0x9e, 0xc6, 0x7b, 0xda, 0xb8, 0x13,
0xd0, 0x1b, 0x69, 0x66, 0xe5, 0x4f, 0xed, 0xf1, 0xcb, 0x34, 0xcf, 0x01, 0xfd, 0x5f, 0xfb, 0x37,
0xd3, 0xea, 0xe2, 0xc7, 0x85, 0x23, 0xf2, 0xf4, 0xab, 0x34, 0x8f, 0x4a, 0x3d, 0x5f, 0xe9, 0x2d,
0x70, 0xf7, 0x56, 0x24, 0xfd, 0x3a, 0xcd, 0x4a, 0x7a, 0x27, 0x6b, 0x7e, 0x20, 0xf3, 0x42, 0x1e,
0xca, 0x23, 0x68, 0x4f, 0x33, 0xb6, 0x8a, 0xb1, 0xb7, 0x9b, 0xb1, 0xc3, 0x18, 0xfb, 0x0d, 0x42,
0xe0, 0x17, 0x1c, 0xdc, 0xe8, 0xdf, 0xa6, 0x71, 0xc3, 0xe3, 0x22, 0x2e, 0xc1, 0xbf, 0x4b, 0xf3,
0x16, 0x88, 0xb2, 0xce, 0xd7, 0xef, 0xb5, 0x85, 0x57, 0xca, 0xf1, 0xd9, 0x9d, 0xfe, 0x00, 0xc1,
0x3a, 0x27, 0xef, 0xa4, 0x31, 0x9c, 0x51, 0xe0, 0xe9, 0xd8, 0xef, 0x17, 0x9d, 0x8a, 0xa0, 0x77,
0xd1, 0x4a, 0x4e, 0x65, 0xb7, 0x13, 0x8a, 0xf4, 0x2a, 0x7a, 0x0f, 0x24, 0x87, 0x8b, 0x49, 0xbe,
0x5a, 0x05, 0x65, 0x7a, 0xdf, 0x94, 0xf3, 0x32, 0xe0, 0xf2, 0x1f, 0xd3, 0xea, 0x3d, 0x82, 0xcf,
0xd2, 0xf4, 0xa7, 0xb4, 0x7a, 0xb3, 0xe6, 0x82, 0xba, 0x8d, 0xd0, 0x9f, 0xd3, 0xea, 0x15, 0x24,
0x94, 0x01, 0xfd, 0x25, 0xad, 0xee, 0x68, 0xa1, 0x0c, 0x74, 0xed, 0x07, 0xa8, 0xed, 0x2f, 0x04,
0x6e, 0x95, 0xfe, 0x8a, 0x5c, 0xf7, 0x8b, 0x31, 0x49, 0x1f, 0x42, 0x05, 0x7f, 0x6a, 0xbb, 0x8f,
0x10, 0x45, 0x27, 0xfe, 0x63, 0xd0, 0xb0, 0x60, 0x29, 0xd4, 0xda, 0xf0, 0x49, 0x0c, 0x39, 0x14,
0xc8, 0xa7, 0x69, 0x9e, 0xdc, 0x0a, 0x51, 0x1c, 0xca, 0xf2, 0xb3, 0x19, 0xb8, 0xb2, 0xff, 0x5c,
0x09, 0xf1, 0xd7, 0x8b, 0x80, 0xbe, 0x50, 0x42, 0x6a, 0x4e, 0x89, 0xbe, 0x54, 0x42, 0x6a, 0x4e,
0x49, 0x0b, 0xf9, 0x0a, 0x1d, 0xcb, 0x2b, 0x2d, 0x67, 0xf4, 0x6b, 0xc8, 0x5a, 0x53, 0xc4, 0xd0,
0xfd, 0x06, 0x99, 0x59, 0x53, 0x8c, 0xfe, 0xbd, 0x84, 0x5e, 0x5f, 0x13, 0x94, 0xe8, 0xd8, 0x2e,
0x26, 0xc7, 0xd1, 0x9f, 0x8e, 0xc3, 0xf7, 0x30, 0x5a, 0x7c, 0x7c, 0x17, 0x9e, 0xae, 0x44, 0x4d,
0x38, 0x92, 0x4e, 0xe8, 0xc2, 0x1b, 0xa9, 0xba, 0x3e, 0xd1, 0x89, 0xba, 0x34, 0x21, 0x82, 0x50,
0xd0, 0x49, 0x5d, 0x3c, 0x1c, 0x74, 0x49, 0x2b, 0x39, 0x59, 0x11, 0xb9, 0xe5, 0x71, 0x49, 0xa7,
0x74, 0xe1, 0xee, 0xcc, 0xdf, 0xba, 0xf6, 0xd4, 0x2e, 0x3c, 0x18, 0x73, 0x1b, 0x4e, 0xeb, 0xc2,
0x13, 0x5b, 0xa3, 0x0d, 0xa7, 0xc3, 0x33, 0x5f, 0xe3, 0x38, 0x67, 0x74, 0xa9, 0x5f, 0x8c, 0x04,
0xc5, 0x6a, 0x8d, 0xce, 0xec, 0xc2, 0xd9, 0xad, 0x3e, 0x1a, 0xa2, 0x05, 0x2a, 0x63, 0x67, 0x35,
0x83, 0x2a, 0x5d, 0x67, 0x77, 0xe9, 0xc9, 0xae, 0xc0, 0x78, 0x86, 0xcf, 0xf9, 0xb6, 0x2a, 0xe5,
0xb5, 0xa1, 0x99, 0x2a, 0xe7, 0x95, 0xc4, 0x24, 0x6d, 0xec, 0xe2, 0x61, 0x5d, 0xf0, 0xf5, 0x78,
0x3b, 0x57, 0x15, 0x03, 0xb7, 0x8a, 0x55, 0xf7, 0xbc, 0x2e, 0xec, 0x2d, 0x81, 0x5b, 0x55, 0xec,
0xe7, 0x47, 0x65, 0x45, 0x79, 0x01, 0xda, 0x32, 0xe2, 0x1d, 0x2e, 0x26, 0x69, 0x93, 0xfa, 0xae,
0xd5, 0x44, 0x40, 0x9b, 0xbb, 0xba, 0xbf, 0xbb, 0x75, 0xcf, 0xb2, 0xc4, 0x8b, 0x7b, 0x96, 0x25,
0xde, 0xda, 0xb3, 0x2c, 0xb1, 0xe5, 0xed, 0x65, 0x7b, 0x59, 0x4b, 0x8b, 0x7e, 0xb5, 0xb3, 0xe6,
0x7a, 0xe5, 0xa2, 0x53, 0xeb, 0x94, 0x6e, 0x69, 0x14, 0x3f, 0x70, 0x1a, 0x4a, 0xfc, 0x7f, 0x00,
0x00, 0x00, 0xff, 0xff, 0x98, 0xba, 0x44, 0x0b, 0xae, 0x26, 0x00, 0x00,
0x18, 0x66, 0x57, 0x3d, 0x63, 0x4c, 0x6b, 0x7f, 0x6c, 0x6a, 0x05, 0x8b, 0x9e, 0x95, 0x64, 0x59,
0xdd, 0x32, 0xb3, 0xbf, 0xe6, 0x94, 0xba, 0x9f, 0x5a, 0x05, 0xdd, 0x55, 0x4d, 0xd5, 0x6b, 0x59,
0x62, 0xc3, 0x21, 0x47, 0x47, 0x82, 0x6d, 0x72, 0x86, 0x21, 0x87, 0x19, 0x72, 0x4e, 0x83, 0x8d,
0x89, 0x03, 0x38, 0x00, 0xc3, 0x30, 0x66, 0x12, 0x61, 0x02, 0x43, 0x8e, 0xb3, 0xe7, 0x7e, 0xef,
0xbd, 0xea, 0x6a, 0x89, 0x5f, 0xaa, 0xf7, 0xbd, 0x7b, 0xbf, 0xfb, 0xbd, 0xfb, 0xf2, 0x53, 0x5b,
0x24, 0x26, 0xaa, 0x81, 0x08, 0x43, 0xd7, 0xf7, 0xda, 0xab, 0x81, 0x2f, 0x7d, 0xbb, 0x49, 0xba,
0xd5, 0x91, 0x43, 0x17, 0x95, 0xfc, 0x92, 0x0f, 0x20, 0xc5, 0x5f, 0xaa, 0xee, 0xb0, 0xbb, 0x12,
0xd6, 0x9c, 0x95, 0xae, 0x28, 0x17, 0xf3, 0x93, 0x55, 0x61, 0x2f, 0xb2, 0x66, 0xc8, 0x6a, 0x32,
0xd1, 0x92, 0x38, 0x7c, 0x56, 0x67, 0xd3, 0xf6, 0x37, 0x97, 0xee, 0x37, 0x34, 0x43, 0x56, 0xed,
0xa4, 0xd5, 0x34, 0x5a, 0x76, 0x4a, 0xc9, 0x19, 0x2d, 0x89, 0xc3, 0xe7, 0x6b, 0x1c, 0x88, 0xaa,
0x11, 0x5e, 0x72, 0x66, 0xcc, 0x03, 0x88, 0xbd, 0xc4, 0x3a, 0xa0, 0x28, 0x0a, 0x6e, 0xc5, 0x29,
0x27, 0x9b, 0x62, 0x95, 0x06, 0xe4, 0xfa, 0x82, 0x5f, 0x2e, 0x3b, 0x52, 0x24, 0x67, 0xc5, 0xeb,
0x35, 0x88, 0xfa, 0x31, 0x27, 0x08, 0x85, 0x4c, 0xee, 0xdf, 0x92, 0x38, 0x7c, 0x4e, 0x54, 0xaf,
0xc0, 0xc3, 0x9e, 0x48, 0x58, 0x4d, 0x3d, 0x13, 0xd5, 0xc0, 0xfe, 0x4e, 0x24, 0x79, 0xc1, 0xf2,
0x05, 0xed, 0xdc, 0xd2, 0x76, 0xc6, 0xb9, 0x39, 0xb1, 0x26, 0x90, 0x35, 0x73, 0xdc, 0x29, 0xa3,
0x05, 0xf3, 0x86, 0xf8, 0xd3, 0xfe, 0x07, 0x6b, 0x76, 0x61, 0xcc, 0x2d, 0x17, 0x03, 0xc8, 0x9f,
0x79, 0xf8, 0xdc, 0xe5, 0x56, 0xdd, 0x7b, 0x28, 0xaa, 0xb3, 0xbf, 0x67, 0xcd, 0x0c, 0xdd, 0x12,
0x1a, 0xb1, 0x60, 0xf9, 0x41, 0xca, 0x24, 0x57, 0x70, 0xca, 0x4e, 0xb0, 0xb2, 0xe6, 0x15, 0x72,
0x6e, 0x49, 0x47, 0x61, 0x2b, 0xbb, 0xdd, 0xb2, 0x46, 0x39, 0x99, 0x3f, 0x96, 0x93, 0x55, 0xd5,
0xb0, 0xb9, 0xcb, 0x17, 0x2a, 0x9f, 0x28, 0xc9, 0x43, 0x73, 0x46, 0xcd, 0xe7, 0x61, 0x9d, 0xd6,
0xfe, 0x9d, 0x93, 0x59, 0x29, 0x2a, 0xf6, 0x12, 0xab, 0x89, 0xfb, 0x0d, 0x0d, 0x69, 0x94, 0x02,
0x9c, 0x33, 0x5d, 0x14, 0x61, 0x01, 0x2d, 0x98, 0x6d, 0x32, 0xcd, 0xc8, 0x11, 0x5b, 0x9a, 0xac,
0xd9, 0xa6, 0xc5, 0xf6, 0x6c, 0xab, 0x69, 0xa0, 0x56, 0x2e, 0xd3, 0x7e, 0xf6, 0x1c, 0x6b, 0x56,
0xd6, 0x93, 0xe9, 0x15, 0x94, 0xb0, 0x2d, 0x6b, 0xff, 0x61, 0x17, 0xdf, 0x33, 0xec, 0xb9, 0xd6,
0x01, 0x2b, 0xcb, 0xbe, 0x23, 0x8f, 0x5c, 0x4e, 0x33, 0xa3, 0x42, 0x7a, 0x05, 0x35, 0xb1, 0x55,
0x4e, 0x06, 0xae, 0x57, 0xa2, 0x59, 0xec, 0xdc, 0x39, 0x29, 0x45, 0x48, 0xfb, 0xdb, 0xf3, 0xac,
0xd9, 0xfd, 0x93, 0xe1, 0xf1, 0xe5, 0x4e, 0x57, 0x92, 0xb0, 0xc9, 0x9a, 0x87, 0x52, 0xb7, 0xea,
0x46, 0x1a, 0xb5, 0x0f, 0xb4, 0xe6, 0x2b, 0xa4, 0x16, 0x38, 0xd2, 0xf5, 0x3d, 0x2a, 0xd9, 0xf3,
0xad, 0x39, 0x80, 0x7a, 0xbc, 0x5a, 0x85, 0xc6, 0x22, 0x86, 0xa3, 0xc5, 0x04, 0xb9, 0x51, 0x29,
0x27, 0x24, 0x1d, 0x1b, 0x99, 0xe6, 0xdd, 0x8a, 0xa0, 0xe3, 0xa2, 0xe2, 0x0f, 0x43, 0xdf, 0xa3,
0xb2, 0xbd, 0xc0, 0x9a, 0xb3, 0xc6, 0x29, 0xd7, 0x44, 0x9f, 0x1b, 0x4a, 0xda, 0x9a, 0xe0, 0x72,
0x97, 0x5f, 0xae, 0x55, 0xbc, 0x21, 0x31, 0x4a, 0x3b, 0xb8, 0x61, 0xb3, 0xba, 0xfc, 0x9a, 0x27,
0xe9, 0xbe, 0x66, 0x7b, 0xb6, 0x35, 0x33, 0x57, 0xab, 0xd0, 0xfd, 0xf8, 0xca, 0x8c, 0x97, 0xe8,
0x01, 0x7c, 0xf5, 0xbb, 0x1e, 0x3d, 0xa8, 0xbe, 0x9c, 0x09, 0x7a, 0xa8, 0x99, 0x7d, 0x56, 0xba,
0x41, 0x28, 0xe9, 0xe1, 0x66, 0x9b, 0xac, 0xb9, 0xbd, 0x81, 0x5f, 0xab, 0x76, 0xf9, 0x5e, 0xc1,
0x91, 0xf4, 0x48, 0xb3, 0xbd, 0xd0, 0xb2, 0x32, 0xa5, 0xd2, 0x8f, 0x3b, 0x5d, 0x99, 0xf1, 0x8a,
0xf4, 0x68, 0x33, 0x87, 0xd4, 0xc0, 0xaa, 0x80, 0x1e, 0x8b, 0x1b, 0xfc, 0xc8, 0x0f, 0xe8, 0x71,
0x15, 0x57, 0x16, 0xe9, 0x89, 0x66, 0x7b, 0x2e, 0x27, 0xb0, 0x58, 0x14, 0xe3, 0xf4, 0x24, 0xfc,
0x54, 0x61, 0xd0, 0xaf, 0xd2, 0x53, 0xf0, 0x53, 0xe5, 0x9c, 0x53, 0xa9, 0xd2, 0xcf, 0x61, 0xbd,
0xc6, 0x09, 0xb8, 0xf6, 0xe9, 0x66, 0x7b, 0x9e, 0x75, 0xc0, 0x1a, 0x27, 0x40, 0xd5, 0xf6, 0x66,
0x7b, 0xbe, 0x35, 0x7b, 0x8d, 0x13, 0xb8, 0x8e, 0x57, 0x10, 0xb4, 0xa3, 0xd9, 0x3e, 0xd0, 0x9a,
0xc7, 0xf9, 0xc8, 0x04, 0x81, 0x33, 0x99, 0x29, 0x95, 0xe8, 0x99, 0x66, 0xdb, 0xb6, 0xe6, 0x33,
0xb4, 0x6a, 0xe4, 0x58, 0x51, 0x90, 0x8c, 0xed, 0x54, 0x11, 0xa2, 0x71, 0x49, 0x9b, 0x06, 0x8e,
0x38, 0xbf, 0xc7, 0x9a, 0xdf, 0x30, 0x52, 0xb9, 0xf7, 0xba, 0x9c, 0x50, 0x66, 0x3d, 0x99, 0x09,
0xb3, 0x9e, 0xa4, 0xfd, 0xb8, 0xf7, 0x22, 0x64, 0x48, 0x38, 0x65, 0x4a, 0xd8, 0x07, 0x59, 0x0b,
0x23, 0x48, 0x0f, 0x88, 0x19, 0xf6, 0x22, 0x8b, 0x22, 0xd0, 0xf4, 0xfd, 0xcc, 0x06, 0x6f, 0xf4,
0x60, 0x93, 0xbd, 0xd8, 0x3a, 0xb0, 0x6e, 0x68, 0x86, 0xc4, 0xac, 0x06, 0x4b, 0x74, 0xee, 0xfe,
0x06, 0xe2, 0xa8, 0x4a, 0x8d, 0x65, 0xdb, 0xd6, 0x82, 0x3a, 0x04, 0x39, 0x73, 0x4d, 0x64, 0x85,
0x69, 0x3d, 0xf3, 0x4c, 0x18, 0x85, 0x1a, 0x41, 0xf3, 0x1b, 0x09, 0xa0, 0x68, 0x81, 0x7d, 0xb0,
0x65, 0xc7, 0x4c, 0x8d, 0xa4, 0x85, 0x8d, 0xb6, 0xd0, 0x44, 0x26, 0x98, 0x26, 0x54, 0xb2, 0x16,
0x99, 0x60, 0x11, 0x0a, 0x65, 0x8b, 0xed, 0x66, 0xeb, 0xa0, 0x06, 0x58, 0x8b, 0x3b, 0xd8, 0x4e,
0x5a, 0x8b, 0x1a, 0x2a, 0x8c, 0xbe, 0xe6, 0x69, 0x4c, 0x90, 0x98, 0xb4, 0x0f, 0xb1, 0x16, 0x37,
0x3a, 0x18, 0x95, 0x87, 0x4c, 0xf3, 0x80, 0xd0, 0x43, 0x4d, 0x27, 0xa9, 0x90, 0x4a, 0xe7, 0x12,
0xa3, 0xde, 0x80, 0x90, 0xb9, 0xd4, 0xb4, 0xdf, 0xa0, 0x5a, 0x65, 0x8b, 0x91, 0x6f, 0x70, 0x23,
0x72, 0xd9, 0x54, 0x1a, 0x68, 0x3c, 0xcc, 0x34, 0x2a, 0x32, 0x37, 0x12, 0x5b, 0xa7, 0xda, 0x43,
0xe1, 0x77, 0x4c, 0xf7, 0xb2, 0xb7, 0xd2, 0x77, 0xb8, 0xc9, 0xb8, 0x82, 0xa0, 0xee, 0xbb, 0xc6,
0x59, 0x61, 0x5a, 0xdb, 0x11, 0xa6, 0xd5, 0x0a, 0x35, 0xca, 0xbe, 0xd7, 0x48, 0x00, 0x5d, 0xff,
0x68, 0x9a, 0xa7, 0x4d, 0x8d, 0xaa, 0x7f, 0x6a, 0xb4, 0x85, 0xa6, 0xf6, 0x28, 0x99, 0xda, 0x4a,
0xe9, 0x5a, 0x6e, 0x28, 0xea, 0x30, 0xb4, 0x1d, 0x19, 0xf5, 0x63, 0x84, 0x6b, 0x7d, 0x2b, 0xa2,
0x0e, 0x8b, 0x6a, 0x8c, 0xc6, 0xa3, 0xa6, 0x93, 0x41, 0x67, 0xda, 0x3e, 0xd4, 0x3a, 0x78, 0x8a,
0x8b, 0xd1, 0xda, 0x31, 0xdd, 0x07, 0x7a, 0xff, 0xd9, 0xe4, 0x10, 0xb3, 0x1f, 0x5a, 0xff, 0xc5,
0x34, 0x4b, 0x41, 0xd0, 0xf9, 0xaf, 0x26, 0x87, 0x0a, 0xd3, 0x1a, 0xff, 0xcd, 0x34, 0x56, 0xa1,
0x46, 0xdf, 0xbf, 0x37, 0x12, 0x40, 0xdb, 0x7f, 0x98, 0xf8, 0xda, 0xd4, 0xe8, 0xca, 0x34, 0xda,
0x42, 0x53, 0x27, 0xaf, 0x99, 0x5d, 0xbe, 0x53, 0x16, 0x61, 0x41, 0xb0, 0xa2, 0x77, 0x5a, 0x78,
0x7d, 0x32, 0x08, 0x04, 0xbd, 0xdb, 0x62, 0x2f, 0xb2, 0x16, 0x1a, 0xc8, 0x44, 0x7e, 0xaf, 0xc5,
0x3e, 0xc8, 0x5a, 0x60, 0x50, 0xad, 0xf2, 0xfd, 0x06, 0x6f, 0xa8, 0xf9, 0x63, 0x8b, 0xbd, 0xd8,
0xa2, 0xc8, 0xdb, 0x88, 0xf9, 0x53, 0x83, 0x25, 0xb4, 0xfc, 0xb9, 0x85, 0xf7, 0xa9, 0xbe, 0x3c,
0xcb, 0x28, 0xf2, 0xf6, 0xd5, 0x97, 0x47, 0x7c, 0xc1, 0xdb, 0x48, 0x5f, 0xbe, 0xbe, 0x45, 0xcd,
0xb3, 0x66, 0xf7, 0xe5, 0x75, 0xc4, 0x92, 0x32, 0x44, 0xa8, 0x31, 0x7b, 0x81, 0x65, 0xf5, 0xe5,
0xa3, 0x18, 0xae, 0xaa, 0x03, 0xf9, 0xb1, 0xe0, 0xee, 0x61, 0x6e, 0x0f, 0x70, 0x0f, 0xb8, 0x7d,
0x70, 0xf7, 0x18, 0xee, 0x2a, 0xb8, 0x7b, 0x34, 0xf7, 0xf1, 0xca, 0x10, 0xdc, 0x01, 0xb8, 0x7b,
0x22, 0xee, 0x50, 0xd5, 0x81, 0x5b, 0x32, 0x77, 0x2f, 0x74, 0x4f, 0x30, 0xdc, 0xab, 0x74, 0x4f,
0x32, 0x77, 0x6f, 0xa4, 0xfb, 0x04, 0xe6, 0xee, 0x35, 0xba, 0xff, 0x5b, 0x19, 0x82, 0xfb, 0x7f,
0x98, 0xbb, 0xb7, 0xae, 0xfb, 0x7f, 0x55, 0x1d, 0xb8, 0xff, 0x4f, 0x6d, 0x6a, 0xc2, 0x91, 0x02,
0xcb, 0x2d, 0x7d, 0x8a, 0xc4, 0x19, 0x04, 0x81, 0x3e, 0x43, 0x07, 0x19, 0xc8, 0xc4, 0xfb, 0x1c,
0x1d, 0x64, 0x50, 0x1d, 0xf6, 0x8b, 0x06, 0x6f, 0x44, 0xff, 0xb2, 0x85, 0x37, 0xa8, 0x3e, 0xa1,
0x96, 0x73, 0xfa, 0xaa, 0x85, 0xf7, 0x3a, 0x14, 0x41, 0xfe, 0x35, 0x3c, 0x50, 0x36, 0xcc, 0xdf,
0xb4, 0xb0, 0x28, 0x40, 0x9a, 0xf6, 0x6f, 0x75, 0x27, 0x70, 0x9e, 0xb8, 0x8c, 0x2d, 0xb2, 0x9e,
0x14, 0xc1, 0xb8, 0x53, 0x66, 0xda, 0x93, 0x96, 0x31, 0x8d, 0x41, 0xc0, 0x7c, 0xf2, 0x32, 0xde,
0xbc, 0x7b, 0xd1, 0x27, 0x27, 0x27, 0x78, 0x03, 0xed, 0x55, 0x9d, 0x72, 0x0a, 0x4e, 0x06, 0xbd,
0x51, 0xaf, 0x9c, 0x9a, 0x60, 0x85, 0xbd, 0xa6, 0x5b, 0x4e, 0xd3, 0xb6, 0x88, 0x74, 0x7a, 0x82,
0x37, 0xca, 0xde, 0x7a, 0xc7, 0x9c, 0xa1, 0x6b, 0x91, 0xbd, 0x33, 0x71, 0xa6, 0xe8, 0x59, 0xcd,
0x21, 0xd6, 0xa1, 0xa2, 0x67, 0x35, 0x42, 0xac, 0x47, 0x88, 0x9e, 0xd5, 0x26, 0xc4, 0x06, 0x84,
0xe8, 0x59, 0xad, 0x43, 0x6c, 0xd4, 0xb6, 0x08, 0xb1, 0x09, 0x21, 0x7a, 0x56, 0x47, 0x21, 0x36,
0xeb, 0x5a, 0x84, 0x38, 0x17, 0x21, 0x06, 0xd0, 0x8a, 0x2d, 0xa8, 0x18, 0x50, 0xad, 0x50, 0xe7,
0x9b, 0x81, 0xa8, 0x15, 0xdb, 0x10, 0x62, 0xc0, 0xb4, 0xe2, 0x42, 0x6d, 0x8b, 0x10, 0x17, 0x21,
0xc4, 0x40, 0xbd, 0x15, 0x17, 0xeb, 0x5a, 0x84, 0xb8, 0x44, 0x31, 0xd5, 0xca, 0x65, 0xd5, 0x92,
0x2b, 0x94, 0x35, 0xca, 0x08, 0x75, 0x65, 0x82, 0x4f, 0x10, 0x0a, 0x30, 0xe1, 0xae, 0x4a, 0x70,
0xc2, 0x15, 0xa6, 0x43, 0x5e, 0x1d, 0xf3, 0x43, 0xd8, 0x6b, 0xf8, 0x74, 0xb0, 0x40, 0xfb, 0x99,
0xd0, 0xd7, 0xc6, 0xac, 0x10, 0xfe, 0x3a, 0x08, 0x1f, 0x2c, 0xd7, 0xd4, 0xfa, 0xb4, 0x3d, 0xc1,
0x7d, 0xcb, 0x45, 0x13, 0x6a, 0x47, 0x82, 0x0f, 0x3c, 0x8c, 0xb0, 0xba, 0x9d, 0x50, 0xdb, 0xef,
0x7a, 0xda, 0xfe, 0x59, 0x08, 0x41, 0xd9, 0x38, 0x3c, 0x07, 0x46, 0x40, 0xec, 0xf1, 0x82, 0xb2,
0xa8, 0x95, 0xa5, 0x5b, 0x2d, 0x4f, 0xc2, 0xe9, 0xc5, 0x04, 0x0f, 0x69, 0x03, 0x19, 0xbf, 0x97,
0x10, 0xda, 0xa0, 0xec, 0xfa, 0x0b, 0x88, 0xed, 0x76, 0xc7, 0xdd, 0xa2, 0x5a, 0xac, 0x5e, 0x46,
0x2a, 0x14, 0x60, 0xdc, 0x5e, 0x49, 0xe8, 0xb1, 0xa7, 0x60, 0xf6, 0x7b, 0x35, 0xc1, 0xab, 0x52,
0x04, 0x19, 0xcb, 0x5d, 0x68, 0x49, 0xbf, 0x5f, 0x04, 0xd7, 0x6e, 0x90, 0xf7, 0xfb, 0x45, 0x53,
0xbd, 0x07, 0xbd, 0xd2, 0xef, 0x17, 0x99, 0x62, 0x6f, 0xc2, 0x4e, 0x5a, 0x07, 0xc5, 0xc4, 0x0c,
0x7b, 0xa1, 0x5b, 0xf2, 0x44, 0x91, 0x5e, 0x83, 0x59, 0x66, 0x04, 0x8d, 0xbb, 0x8b, 0x98, 0x32,
0x33, 0x12, 0x0e, 0x73, 0xe9, 0x6e, 0x53, 0x42, 0x80, 0x7b, 0x08, 0xe7, 0xcf, 0x91, 0x28, 0x31,
0xf7, 0x12, 0x56, 0x45, 0xe1, 0xf2, 0x9c, 0xc9, 0xfb, 0xdd, 0xa2, 0x40, 0xf7, 0x35, 0x42, 0x4c,
0x72, 0x7f, 0x04, 0x75, 0x8b, 0x82, 0x82, 0x1e, 0x68, 0x84, 0xd8, 0xf1, 0x41, 0xe2, 0x24, 0x33,
0x84, 0x58, 0x0f, 0x11, 0x27, 0x66, 0x65, 0xd9, 0xf7, 0x83, 0x88, 0xfb, 0xe1, 0x29, 0x18, 0x33,
0x3d, 0x52, 0xc7, 0x22, 0xf6, 0x47, 0xa7, 0x60, 0xec, 0xfb, 0x18, 0x71, 0x37, 0x03, 0x03, 0xff,
0xe3, 0x28, 0x0f, 0xf9, 0x35, 0x4f, 0x25, 0x6f, 0x07, 0xc2, 0xa3, 0xcc, 0x14, 0xcf, 0xd4, 0x8b,
0xec, 0xbd, 0x93, 0xec, 0x83, 0xad, 0x03, 0x51, 0x3c, 0xc6, 0x95, 0x63, 0x2b, 0x03, 0xa7, 0xa0,
0x06, 0x0b, 0x71, 0xbf, 0x34, 0xe0, 0xec, 0xfd, 0xdc, 0x74, 0x98, 0x59, 0x9e, 0x47, 0x36, 0xfb,
0xfc, 0xd2, 0x0f, 0x32, 0x41, 0x89, 0x5e, 0x46, 0x88, 0x3e, 0xbf, 0xb4, 0x3c, 0x13, 0x94, 0x42,
0x7a, 0x85, 0xec, 0x39, 0x56, 0x13, 0x17, 0xe9, 0x55, 0xe2, 0x39, 0xca, 0x76, 0xdf, 0xa7, 0x5d,
0x80, 0x87, 0x1c, 0xaf, 0x48, 0xbb, 0x91, 0x34, 0xfe, 0x64, 0xd2, 0x9c, 0x10, 0x45, 0xda, 0x43,
0x7c, 0x01, 0x18, 0xf4, 0xd7, 0xd2, 0x5e, 0xd8, 0x75, 0xf9, 0xde, 0x38, 0xbd, 0x06, 0xf7, 0xae,
0xa1, 0xae, 0x23, 0x97, 0xd3, 0xeb, 0x80, 0x73, 0x6e, 0xc9, 0xa3, 0x37, 0xd4, 0xe7, 0xf1, 0x81,
0xa4, 0x5f, 0xe2, 0x33, 0x53, 0xf0, 0x43, 0x7a, 0x53, 0x7d, 0x86, 0xae, 0x47, 0xbf, 0x82, 0xa0,
0x8c, 0x74, 0x3c, 0xe8, 0x7b, 0x0b, 0x19, 0xe2, 0xa2, 0x12, 0xf8, 0x6b, 0xc4, 0xea, 0xf2, 0x43,
0xda, 0xa7, 0xbf, 0x24, 0xbd, 0x8d, 0x16, 0x75, 0x8b, 0x52, 0x20, 0x44, 0x48, 0xbf, 0x01, 0xde,
0x33, 0x51, 0xa5, 0xdf, 0x92, 0x7d, 0x80, 0x35, 0x63, 0x30, 0x4b, 0xbf, 0x83, 0xc1, 0x90, 0x53,
0x74, 0x1d, 0x2f, 0xa4, 0xdf, 0xc3, 0x20, 0xe7, 0x7a, 0xf4, 0x07, 0x7c, 0xe5, 0x1d, 0x8f, 0xde,
0x21, 0x9e, 0x24, 0xf9, 0xa0, 0xc6, 0x77, 0x20, 0x0c, 0xf6, 0x77, 0xd1, 0x4e, 0x83, 0x20, 0xcf,
0xef, 0xf1, 0xd9, 0x78, 0xa1, 0x81, 0xcc, 0xf0, 0x7b, 0x1f, 0xe3, 0xb1, 0xcf, 0x2f, 0xb9, 0x05,
0xa7, 0xcc, 0x17, 0xa6, 0x4b, 0x93, 0x58, 0xd7, 0x15, 0xb0, 0x2a, 0xa0, 0xcb, 0x92, 0x31, 0x03,
0xbe, 0x30, 0x5d, 0x9e, 0xe4, 0x26, 0x0e, 0x7b, 0x4e, 0x30, 0x39, 0xe0, 0x4b, 0xba, 0x22, 0xc9,
0x03, 0x05, 0xc5, 0x68, 0x76, 0x5f, 0x93, 0xe4, 0x45, 0xa6, 0x8e, 0x21, 0xfe, 0xb5, 0x49, 0xee,
0xff, 0x3a, 0x68, 0x14, 0x5c, 0x07, 0x02, 0x5d, 0xca, 0x86, 0xb8, 0xfb, 0x5e, 0x0f, 0x02, 0xb3,
0x3e, 0x69, 0xf0, 0x27, 0x50, 0xc2, 0x5c, 0x1a, 0xb8, 0x21, 0xc9, 0x8d, 0x54, 0x2b, 0x9d, 0x86,
0x6e, 0x84, 0x0d, 0xaf, 0x74, 0x1a, 0xb8, 0x09, 0xcd, 0xc9, 0x7a, 0x52, 0x97, 0x6f, 0x86, 0x01,
0x2f, 0x72, 0x1a, 0xb8, 0x05, 0x06, 0xea, 0xb6, 0x98, 0x73, 0x4b, 0x74, 0x2b, 0x9a, 0x87, 0xcb,
0x22, 0x17, 0x6f, 0x33, 0xd5, 0x3f, 0xf2, 0x51, 0xbe, 0xdd, 0x94, 0x07, 0x44, 0x89, 0xcb, 0x77,
0xd4, 0xf9, 0xf3, 0x41, 0x4d, 0xd0, 0x9d, 0x31, 0x91, 0x00, 0x7e, 0xda, 0xd8, 0x3c, 0x60, 0x3f,
0x83, 0x11, 0x9c, 0x56, 0x3a, 0xe5, 0x50, 0xd0, 0x5d, 0x49, 0xee, 0x40, 0xe5, 0xa5, 0x90, 0xbb,
0x55, 0x06, 0x8c, 0x9b, 0x02, 0xef, 0x51, 0x7d, 0x23, 0x46, 0x65, 0x6e, 0xcc, 0x1d, 0x95, 0x74,
0x9f, 0x0a, 0xe6, 0x96, 0xc6, 0x34, 0x70, 0xbf, 0x11, 0xaf, 0xee, 0xd4, 0xf7, 0x82, 0xa4, 0x57,
0xc8, 0x41, 0x27, 0x70, 0x2a, 0x7a, 0x4b, 0x78, 0x20, 0x89, 0xdd, 0x52, 0xc8, 0x35, 0x4e, 0x40,
0x0f, 0xa2, 0x30, 0xe4, 0xaf, 0xe5, 0xb6, 0x3c, 0x84, 0x42, 0x4e, 0xd5, 0x3c, 0x0c, 0xdd, 0xb8,
0xbb, 0x47, 0x5d, 0xf5, 0x08, 0xf8, 0x34, 0x66, 0x36, 0x8f, 0x47, 0x93, 0xd1, 0x25, 0x1f, 0x9d,
0xff, 0x18, 0x44, 0xa9, 0xf2, 0x0f, 0x73, 0xab, 0x06, 0xe8, 0xf1, 0x18, 0x80, 0x91, 0xf0, 0x04,
0xfa, 0x4d, 0x01, 0x5a, 0xd4, 0x93, 0x31, 0x1b, 0xec, 0x53, 0x4f, 0x25, 0x79, 0x02, 0x66, 0x3d,
0x66, 0xbc, 0x72, 0x29, 0xeb, 0xca, 0x7a, 0x70, 0xbe, 0x6a, 0xa9, 0x4a, 0xb8, 0xd1, 0x74, 0xf5,
0x52, 0x6e, 0x72, 0xd6, 0xd3, 0x44, 0xd7, 0x68, 0x5b, 0x90, 0x5c, 0xbb, 0x54, 0xe5, 0x39, 0xd2,
0x7a, 0x9d, 0xae, 0xc5, 0x26, 0x77, 0xbd, 0x62, 0x1a, 0xe5, 0x61, 0xc0, 0x61, 0x4e, 0x6b, 0x81,
0x35, 0xca, 0x08, 0x75, 0x7a, 0x0b, 0xa7, 0x40, 0x01, 0x26, 0xdc, 0x19, 0x38, 0x1b, 0x29, 0x4c,
0x87, 0x3c, 0x33, 0xe6, 0x87, 0xb0, 0x67, 0xe1, 0x18, 0xa6, 0xfd, 0x4c, 0xe8, 0xb3, 0x5b, 0xd0,
0xa0, 0x51, 0x8e, 0x74, 0x4e, 0x0b, 0x64, 0x8c, 0x22, 0xca, 0xba, 0x16, 0x25, 0xc3, 0x44, 0x58,
0x8f, 0xc3, 0x59, 0x76, 0x54, 0xb3, 0x6f, 0xd0, 0xb6, 0x60, 0xde, 0xa8, 0x43, 0x45, 0xac, 0x9b,
0x62, 0xb1, 0xd1, 0xa8, 0xcd, 0xda, 0x5c, 0x1d, 0x54, 0x70, 0x6a, 0xeb, 0x72, 0x42, 0x71, 0xcc,
0x98, 0x40, 0x2a, 0xff, 0xa2, 0xce, 0xe0, 0x1a, 0x41, 0xfc, 0x0f, 0xd4, 0x59, 0x5f, 0x43, 0x46,
0xc5, 0x5f, 0xd5, 0x59, 0x5f, 0xa3, 0x5a, 0xcb, 0x87, 0x0d, 0xde, 0x50, 0xf4, 0x91, 0x3a, 0xeb,
0x1b, 0x6f, 0xa3, 0xeb, 0xe3, 0x06, 0x4b, 0x88, 0xf9, 0x04, 0x52, 0x33, 0x18, 0x4d, 0xc1, 0x64,
0x55, 0xd2, 0x05, 0xad, 0x1a, 0xe8, 0xf1, 0x14, 0xb0, 0xa5, 0x15, 0xdb, 0x97, 0x5f, 0xc1, 0xe3,
0x27, 0x6d, 0x6d, 0xc5, 0x9b, 0x4f, 0xf7, 0x51, 0xb4, 0x0d, 0x15, 0x83, 0x4e, 0x18, 0xae, 0xf5,
0x83, 0x22, 0x5d, 0xd8, 0x8a, 0xd9, 0xe2, 0x78, 0x45, 0xbf, 0xa2, 0xde, 0xb8, 0x2e, 0x6a, 0xc5,
0xba, 0x7c, 0x74, 0xe6, 0x07, 0x74, 0xb1, 0xf9, 0x5c, 0x4e, 0x97, 0x20, 0xc0, 0xb0, 0x57, 0x30,
0x8c, 0x97, 0xb6, 0xda, 0xcd, 0x96, 0x5d, 0x07, 0x44, 0xb1, 0x4f, 0x78, 0x25, 0x39, 0x46, 0x97,
0x21, 0x40, 0xb7, 0x23, 0x9d, 0x11, 0x27, 0x14, 0x74, 0x43, 0x2b, 0x36, 0x3a, 0x6c, 0x6c, 0xfe,
0xda, 0x90, 0x6e, 0x44, 0xc0, 0xae, 0x5a, 0x10, 0x08, 0x4f, 0x0e, 0x87, 0x22, 0xa0, 0x9b, 0x10,
0x05, 0x9f, 0x37, 0xb7, 0xaa, 0x6b, 0x8d, 0xe7, 0x89, 0x02, 0x56, 0xab, 0x6e, 0xba, 0x05, 0x50,
0x1f, 0x8e, 0xd7, 0xa1, 0x08, 0x64, 0xb6, 0x9b, 0x6e, 0x45, 0xe8, 0x38, 0xc4, 0x1b, 0x50, 0xb6,
0x9b, 0x6e, 0x6b, 0xc5, 0xd3, 0x91, 0x08, 0x42, 0xce, 0xdb, 0xed, 0x88, 0x94, 0x77, 0xbb, 0x3b,
0x0d, 0x72, 0x47, 0xab, 0xda, 0x45, 0xd7, 0xaa, 0x29, 0x7d, 0x67, 0x2b, 0x0f, 0xa3, 0x5c, 0x59,
0x88, 0x2a, 0x3d, 0xdd, 0xaa, 0xb6, 0xbb, 0xc2, 0x71, 0xb4, 0x5d, 0xa5, 0x44, 0x94, 0x85, 0x13,
0x0a, 0x20, 0x3b, 0xf8, 0x56, 0xbf, 0xd0, 0x3c, 0x3a, 0x78, 0x93, 0x98, 0x5b, 0xf4, 0x4c, 0x2b,
0x77, 0x57, 0x74, 0x4b, 0x35, 0xf0, 0xce, 0x56, 0x7d, 0x78, 0x8f, 0x90, 0x67, 0xd1, 0x04, 0x9e,
0xbf, 0x11, 0xf4, 0x1c, 0x20, 0x3c, 0xb6, 0x18, 0xe8, 0xf9, 0x56, 0x1e, 0x25, 0xfa, 0xd9, 0xc0,
0x80, 0x2f, 0xc0, 0x0e, 0xb7, 0x76, 0x03, 0xbd, 0xd8, 0xaa, 0x26, 0xa9, 0x90, 0x19, 0xe9, 0x7b,
0xf4, 0x52, 0x54, 0x1c, 0x90, 0xbe, 0x43, 0xbf, 0x68, 0x55, 0x53, 0x5a, 0xc8, 0x34, 0xaa, 0x5f,
0xae, 0x97, 0x51, 0xff, 0x4a, 0x2b, 0xc6, 0x74, 0x98, 0x1d, 0x1c, 0x5f, 0x41, 0xaf, 0x82, 0x5d,
0x15, 0x78, 0xa8, 0x38, 0x92, 0x76, 0xc5, 0xa0, 0x7e, 0xa7, 0x5a, 0x15, 0x45, 0xda, 0x5d, 0x77,
0x49, 0xd3, 0x1e, 0xd5, 0x59, 0xc3, 0xd9, 0x6e, 0xda, 0x8b, 0x6c, 0xf7, 0xb9, 0xc7, 0x09, 0x5e,
0xf0, 0x76, 0x2d, 0xe3, 0x1c, 0x0d, 0x89, 0x92, 0x98, 0xa8, 0x76, 0xba, 0xbc, 0x33, 0x31, 0xba,
0x7b, 0x19, 0x8e, 0x35, 0x40, 0xb9, 0xbc, 0x67, 0x19, 0x37, 0x92, 0xc7, 0x70, 0xcf, 0x84, 0x0c,
0x9c, 0x82, 0x64, 0xf0, 0xac, 0x36, 0x03, 0x0e, 0x7b, 0xc7, 0xd7, 0x7c, 0x09, 0xbe, 0xb3, 0xdb,
0x38, 0x8d, 0x0c, 0xe6, 0x27, 0xab, 0x40, 0xce, 0x69, 0x33, 0xdb, 0x4d, 0x4e, 0xc0, 0x6f, 0x5d,
0x9b, 0x79, 0xf9, 0x53, 0xe3, 0x80, 0xb1, 0xf5, 0x11, 0xd7, 0x90, 0xa8, 0x96, 0x9d, 0x02, 0x3c,
0x37, 0x44, 0x86, 0x43, 0xa2, 0xe2, 0x8f, 0x03, 0xdb, 0xd8, 0x66, 0x5e, 0x12, 0xfb, 0x45, 0x50,
0x02, 0xb4, 0xa9, 0xad, 0xf1, 0x25, 0x91, 0xb1, 0xcd, 0x6d, 0x0d, 0x0f, 0x8e, 0x0c, 0x9d, 0xdb,
0xc6, 0xfd, 0xce, 0xd0, 0x1a, 0xa7, 0xec, 0x16, 0x21, 0xc8, 0x2d, 0xd1, 0x79, 0x6d, 0x9c, 0x00,
0x2e, 0x75, 0xf9, 0x9e, 0x74, 0x5c, 0x2f, 0x64, 0xf4, 0xfc, 0x36, 0x1e, 0xab, 0xf5, 0x07, 0xcb,
0x6a, 0x55, 0xa8, 0xbd, 0xf1, 0x82, 0xc6, 0x8a, 0x7a, 0x0b, 0xb6, 0xb4, 0xf1, 0xde, 0x1e, 0x09,
0x1b, 0x74, 0x64, 0x61, 0x8c, 0xf1, 0xad, 0x6d, 0xf6, 0x21, 0xd6, 0xa2, 0x3a, 0x1e, 0x88, 0x50,
0x04, 0xaa, 0x2d, 0xdb, 0xda, 0xf8, 0x2c, 0x1d, 0x0f, 0x3d, 0xe8, 0x48, 0x38, 0x5d, 0x18, 0x35,
0x69, 0x30, 0x10, 0x52, 0x42, 0xff, 0x45, 0x51, 0x93, 0x56, 0x9b, 0x64, 0x5f, 0x1c, 0x99, 0xe5,
0x84, 0x13, 0xa8, 0x78, 0x97, 0x44, 0x02, 0x73, 0xd2, 0x0f, 0x1c, 0x4e, 0xd1, 0x09, 0x30, 0xbe,
0x34, 0xf2, 0xef, 0x16, 0x55, 0x15, 0xe6, 0xb2, 0xa8, 0xb3, 0xfe, 0x53, 0x4c, 0xa2, 0xdd, 0x97,
0x47, 0x8c, 0x6a, 0x59, 0x60, 0xec, 0x8a, 0x28, 0x71, 0x6c, 0x85, 0x53, 0x1c, 0xc3, 0x57, 0x46,
0x81, 0x90, 0x4f, 0x35, 0x03, 0xb8, 0xe2, 0x2a, 0x70, 0x74, 0x3b, 0x52, 0xac, 0xf4, 0x83, 0x8a,
0x83, 0xec, 0x7c, 0xd0, 0xce, 0x91, 0x18, 0xeb, 0x73, 0xa5, 0x08, 0x78, 0x75, 0x6d, 0xd7, 0xeb,
0x8d, 0xe8, 0x76, 0x47, 0x47, 0xe9, 0xc3, 0x76, 0x73, 0x71, 0xe3, 0x59, 0x03, 0xe8, 0xa3, 0x76,
0x0e, 0xc0, 0x45, 0xc5, 0x1d, 0x55, 0x7c, 0xdc, 0x6e, 0xff, 0x9d, 0x75, 0xb0, 0x99, 0xc1, 0x53,
0x2a, 0x3f, 0x69, 0xb7, 0xff, 0xde, 0x4a, 0x9a, 0x4a, 0xf3, 0x37, 0xaa, 0xfe, 0x14, 0xa4, 0x75,
0x9f, 0xa8, 0xe2, 0x33, 0x90, 0xaa, 0x8a, 0x69, 0x5e, 0x9f, 0xb7, 0x73, 0x27, 0xea, 0x26, 0x36,
0xc6, 0xfb, 0xa2, 0x9d, 0xb3, 0x63, 0xa8, 0x22, 0xf8, 0xcb, 0x76, 0x9e, 0x70, 0xdc, 0x3c, 0xfa,
0x0a, 0x9f, 0x47, 0xfb, 0xb5, 0x80, 0xbe, 0x6e, 0xc7, 0x55, 0xca, 0xf5, 0x6a, 0x52, 0xd0, 0x37,
0xed, 0xea, 0xac, 0x51, 0xf0, 0xbd, 0x22, 0xfd, 0x0d, 0x09, 0xea, 0x77, 0x0b, 0x81, 0xaf, 0x91,
0x13, 0x53, 0xbc, 0xcc, 0xf5, 0xfb, 0x9e, 0x1c, 0xa3, 0x93, 0x52, 0xb8, 0x5d, 0xf2, 0xf7, 0x80,
0x53, 0x11, 0x74, 0x72, 0x0a, 0xb7, 0x55, 0x7f, 0x2d, 0xaf, 0xa0, 0x7c, 0xca, 0x3e, 0x25, 0x85,
0xbb, 0xb0, 0x02, 0xfc, 0x9a, 0x64, 0xec, 0xd4, 0x14, 0x4e, 0xd5, 0xce, 0x24, 0x5c, 0x4e, 0x83,
0x4b, 0xb7, 0x33, 0xb9, 0x6a, 0x54, 0x71, 0x9e, 0x0e, 0x4e, 0x00, 0xc7, 0x08, 0x71, 0x1c, 0x9d,
0x51, 0x2f, 0xff, 0x97, 0x70, 0x02, 0x3a, 0x33, 0xc5, 0x3d, 0xc2, 0x55, 0xcc, 0xd9, 0xef, 0x17,
0x05, 0x9d, 0x95, 0xe2, 0xb9, 0x62, 0x20, 0xbf, 0x26, 0x81, 0x9e, 0x8d, 0x38, 0x8c, 0x76, 0x3b,
0x93, 0x74, 0x0e, 0xe2, 0x70, 0x49, 0xf3, 0xac, 0x4b, 0x71, 0xf3, 0xf1, 0xb9, 0x3e, 0xc5, 0xb9,
0xe2, 0xcf, 0x06, 0xda, 0x0d, 0x29, 0x9e, 0x07, 0x71, 0xd8, 0x50, 0x6f, 0x84, 0xa6, 0x5e, 0x21,
0xd5, 0x48, 0xa2, 0x4d, 0x29, 0x2c, 0xb6, 0x93, 0x21, 0x27, 0x16, 0x77, 0xa2, 0xb0, 0x4a, 0x9b,
0x53, 0x3c, 0xf3, 0x62, 0xa0, 0x5f, 0x93, 0x8c, 0x9f, 0x9b, 0x8a, 0x6d, 0x59, 0xe8, 0x89, 0xf3,
0xa0, 0x5f, 0x23, 0xdc, 0x55, 0xdf, 0xe7, 0x3c, 0x9d, 0x3f, 0x15, 0xc5, 0xbd, 0xe5, 0x02, 0xc8,
0xc6, 0x06, 0xbf, 0x25, 0xa5, 0x76, 0xa4, 0x4a, 0x34, 0x78, 0xb7, 0xa2, 0xc9, 0xc3, 0xf9, 0x2e,
0xd0, 0x6e, 0x83, 0xfe, 0xe1, 0x7c, 0x17, 0x9b, 0x84, 0xd2, 0xa9, 0x54, 0x4d, 0xb7, 0x5c, 0x98,
0xe2, 0x41, 0x35, 0xb5, 0x46, 0xf7, 0xcf, 0x45, 0xa8, 0xcc, 0x14, 0x8b, 0x4c, 0x22, 0xb1, 0x57,
0x14, 0xeb, 0x4f, 0x21, 0x29, 0x1e, 0x71, 0x8d, 0x95, 0xfa, 0x08, 0x72, 0x09, 0xc2, 0x65, 0x8a,
0x45, 0x0c, 0x36, 0x47, 0x62, 0xd0, 0xe1, 0x20, 0x7f, 0xa9, 0x71, 0x32, 0xdb, 0x51, 0x9d, 0xef,
0xb2, 0x14, 0x8f, 0xfb, 0x78, 0x95, 0x66, 0xbb, 0x1c, 0xd9, 0xd3, 0x6c, 0x0a, 0x03, 0xd7, 0x15,
0x91, 0xba, 0x68, 0xa7, 0xac, 0xb3, 0x5d, 0x19, 0xa9, 0xab, 0x57, 0x6a, 0xbe, 0xab, 0x1a, 0xd4,
0xe9, 0x6a, 0x30, 0x5e, 0x6d, 0x24, 0xb0, 0xe6, 0x38, 0xdb, 0x35, 0x18, 0x16, 0xf5, 0x0a, 0xcd,
0x74, 0x2d, 0x14, 0xe4, 0x6a, 0x23, 0xdf, 0x96, 0x9f, 0xeb, 0xa0, 0xa0, 0xb1, 0x52, 0xfb, 0x5d,
0x0f, 0x05, 0xb9, 0xda, 0xc8, 0xb4, 0xfc, 0xfc, 0xc4, 0x38, 0x4d, 0xcf, 0xcf, 0x0d, 0x10, 0x17,
0xaf, 0xd2, 0x6c, 0x37, 0xaa, 0xd1, 0xa5, 0xd8, 0x62, 0xf9, 0xb9, 0x29, 0x52, 0xf7, 0x2d, 0xf9,
0xb9, 0x39, 0x52, 0x37, 0x2d, 0x3f, 0xb7, 0x34, 0xa8, 0x8b, 0xe7, 0xe7, 0x56, 0x23, 0x61, 0x6a,
0x7e, 0x6e, 0x43, 0x7e, 0xea, 0x15, 0x9a, 0xe9, 0x76, 0x04, 0x19, 0xf6, 0xdc, 0x89, 0x68, 0x74,
0xe9, 0x41, 0x4c, 0x77, 0xc0, 0xa3, 0xa1, 0x8a, 0x8f, 0xbe, 0x77, 0x4e, 0x87, 0xbb, 0x45, 0x81,
0x7e, 0x9a, 0x52, 0xff, 0x93, 0xf4, 0xc6, 0x45, 0x20, 0xf3, 0x27, 0xd0, 0xcf, 0x52, 0x78, 0xa8,
0x72, 0x8e, 0x43, 0xf6, 0xe8, 0xae, 0xa8, 0x88, 0xd9, 0x70, 0x37, 0xac, 0x07, 0x45, 0xe0, 0xfa,
0xc5, 0x4c, 0xb1, 0x48, 0xf7, 0x60, 0xc2, 0xab, 0x32, 0x96, 0xbe, 0x7b, 0x31, 0x39, 0x56, 0xd7,
0x9c, 0x40, 0x8a, 0x80, 0xee, 0x83, 0x79, 0x4e, 0x14, 0xf2, 0x3e, 0xdc, 0xef, 0x47, 0x19, 0x6b,
0x25, 0xaf, 0x74, 0xf4, 0x40, 0xca, 0x1c, 0x95, 0xa0, 0x87, 0x19, 0x1f, 0x4c, 0xf1, 0xc2, 0x98,
0xf7, 0xbb, 0x9d, 0xc9, 0x90, 0x1e, 0x52, 0xf6, 0x7a, 0x55, 0x0c, 0xe9, 0x61, 0x2c, 0x01, 0x7a,
0x4a, 0x99, 0x79, 0xf6, 0x08, 0x3a, 0x29, 0x06, 0xea, 0x29, 0xf6, 0x28, 0x96, 0xc5, 0x88, 0x1c,
0x13, 0xfb, 0x31, 0x10, 0x44, 0x98, 0x7a, 0x95, 0x78, 0x3c, 0x65, 0x56, 0x71, 0x80, 0x66, 0x9e,
0x3f, 0x81, 0xa6, 0xf0, 0x91, 0x95, 0x97, 0xb6, 0x27, 0xc1, 0x96, 0x93, 0x01, 0x4b, 0x93, 0x2a,
0x39, 0x4f, 0xa9, 0xe1, 0x11, 0xc7, 0x78, 0x34, 0xd2, 0xcf, 0xa7, 0xe0, 0xa6, 0x2f, 0x9f, 0x46,
0xa0, 0x95, 0x81, 0x5f, 0x31, 0xdd, 0x00, 0x51, 0xdb, 0xa7, 0xc1, 0xac, 0x8b, 0x76, 0x60, 0x69,
0xd2, 0x67, 0xae, 0x88, 0xfb, 0x99, 0x06, 0xd4, 0x30, 0xef, 0x34, 0x13, 0x8f, 0xed, 0xe2, 0x5b,
0x15, 0x3d, 0x1b, 0x9f, 0x5f, 0xfa, 0xad, 0xc0, 0x93, 0xf4, 0x5c, 0x7c, 0x89, 0xd1, 0x1b, 0x9f,
0xbe, 0xfa, 0x3c, 0x1f, 0xf7, 0xc8, 0x7a, 0xe6, 0xc1, 0xfb, 0x05, 0x24, 0xa0, 0x0e, 0x33, 0xcb,
0x8b, 0x29, 0xfb, 0x50, 0x6b, 0xb1, 0xc6, 0x8c, 0x44, 0x6d, 0xff, 0x52, 0x7c, 0xc6, 0x9b, 0x3a,
0x3c, 0x60, 0x9a, 0x49, 0x30, 0x4d, 0xeb, 0xcb, 0xf1, 0xb1, 0x5e, 0xd7, 0xfa, 0x4a, 0x7c, 0xba,
0x37, 0x6a, 0x7d, 0x35, 0xee, 0x51, 0xd7, 0xba, 0x4b, 0x75, 0x56, 0x04, 0x33, 0xcb, 0x6e, 0x68,
0xd5, 0xd8, 0x14, 0xad, 0x7b, 0xe2, 0xb3, 0x2f, 0xae, 0x75, 0x2f, 0x86, 0x3f, 0x77, 0x0d, 0xc6,
0xe3, 0x6b, 0x29, 0xf3, 0xbc, 0xa2, 0xf7, 0xa4, 0xd7, 0x1b, 0xc7, 0x18, 0xa6, 0xc0, 0x1b, 0x29,
0xfd, 0x44, 0xa2, 0x2f, 0x57, 0x7b, 0xd3, 0x7c, 0x8f, 0xeb, 0x74, 0x3d, 0x7a, 0x2d, 0xcd, 0xbb,
0x7a, 0x26, 0xd7, 0x95, 0xcd, 0xd2, 0xeb, 0x69, 0x3c, 0xb6, 0x8d, 0x39, 0x01, 0xbd, 0x91, 0x66,
0x56, 0xfe, 0xd4, 0x1e, 0xbf, 0x4c, 0xf3, 0x1c, 0xd0, 0xff, 0xd2, 0x7f, 0x33, 0xad, 0x6e, 0x85,
0x5c, 0x38, 0x26, 0x47, 0xbf, 0x4a, 0xf3, 0xa8, 0xd4, 0xf3, 0x95, 0xde, 0x02, 0x77, 0x4f, 0x59,
0xd2, 0xaf, 0xd3, 0xac, 0xa4, 0x67, 0xa2, 0xea, 0x07, 0x32, 0x27, 0xe4, 0x91, 0x3c, 0x82, 0xf6,
0x35, 0x62, 0x2b, 0x18, 0x7b, 0xbb, 0x11, 0x3b, 0x8a, 0xb1, 0xdf, 0x20, 0x04, 0x7e, 0xde, 0xc1,
0x8d, 0xfe, 0x6d, 0x1a, 0xd7, 0x3f, 0x2e, 0xe2, 0x86, 0xfc, 0xbb, 0x34, 0x6f, 0x81, 0x28, 0xeb,
0x7c, 0xfd, 0x5e, 0x5b, 0x78, 0xc5, 0x2c, 0x1f, 0xec, 0xe9, 0x0f, 0x10, 0xac, 0x73, 0xf2, 0x4e,
0x1a, 0xc3, 0x19, 0x05, 0x9e, 0x8e, 0x7d, 0x7e, 0xc1, 0x29, 0x0b, 0x7a, 0x17, 0xad, 0xe4, 0x54,
0x76, 0x3a, 0xa1, 0x48, 0xaf, 0xa0, 0xf7, 0x40, 0x72, 0xb4, 0x98, 0xe0, 0x7b, 0x57, 0x50, 0xa2,
0xf7, 0x4d, 0x39, 0x27, 0x03, 0x2e, 0xff, 0x31, 0xad, 0x1e, 0x2b, 0xf8, 0x90, 0x4d, 0x7f, 0x4a,
0xab, 0x07, 0x6d, 0x2e, 0xa8, 0xab, 0x0a, 0xfd, 0x39, 0xad, 0x9e, 0x48, 0x42, 0x19, 0xd0, 0x5f,
0xd2, 0xea, 0x02, 0x17, 0xca, 0x40, 0xd7, 0x7e, 0x80, 0xda, 0xbe, 0x7c, 0xe0, 0x56, 0xe8, 0xaf,
0xc8, 0x75, 0x9f, 0x18, 0x95, 0xf4, 0x21, 0x54, 0xf0, 0xa7, 0xb6, 0xfb, 0x08, 0x51, 0x74, 0xe2,
0x3f, 0x06, 0x0d, 0x0b, 0x96, 0x42, 0xad, 0x0d, 0x9f, 0xc4, 0x90, 0x23, 0x81, 0x7c, 0x9a, 0xe6,
0xc9, 0xad, 0x10, 0xc5, 0xa1, 0x2c, 0x3f, 0x9b, 0x86, 0x2b, 0xfb, 0xcf, 0x95, 0x10, 0x7f, 0xad,
0x08, 0xe8, 0x0b, 0x25, 0xa4, 0xea, 0x14, 0xe9, 0x4b, 0x25, 0xa4, 0xea, 0x14, 0xb5, 0x90, 0xaf,
0xd0, 0xb1, 0xbc, 0xd2, 0x72, 0x46, 0xbf, 0x86, 0xac, 0x55, 0x05, 0x0c, 0xdd, 0x6f, 0x90, 0x99,
0x55, 0x85, 0xe8, 0x7f, 0x4f, 0xe8, 0xf5, 0x55, 0x41, 0x91, 0x4e, 0xec, 0x60, 0x72, 0xdc, 0x09,
0xe8, 0x24, 0x7c, 0x0f, 0xa1, 0xc5, 0x27, 0x77, 0xe0, 0x5d, 0x4b, 0x54, 0x85, 0x23, 0xe9, 0x94,
0x0e, 0x3c, 0xa0, 0xaa, 0xbb, 0x15, 0x9d, 0xaa, 0x4b, 0xe3, 0x22, 0x08, 0x05, 0x9d, 0xd6, 0xc1,
0xc3, 0x41, 0x97, 0xb4, 0x92, 0xd3, 0x15, 0x91, 0x5b, 0x1a, 0x93, 0x74, 0x46, 0x07, 0x2e, 0xd6,
0xfc, 0xad, 0x6b, 0xcf, 0xec, 0xc0, 0x6b, 0x32, 0xb7, 0xe1, 0xac, 0x0e, 0xbc, 0xbf, 0xd5, 0xdb,
0x70, 0x36, 0x3c, 0x73, 0x55, 0x8e, 0x73, 0x4e, 0x87, 0xfa, 0x39, 0x49, 0x50, 0xa8, 0x54, 0x69,
0x5d, 0x07, 0xce, 0x6e, 0xb5, 0x91, 0x10, 0x2d, 0x50, 0x19, 0x5b, 0xdf, 0x08, 0xaa, 0x74, 0x6d,
0xe8, 0xd0, 0x93, 0x5d, 0x81, 0xf1, 0x0c, 0x6f, 0xfc, 0xb6, 0x2a, 0xe5, 0xb5, 0xa9, 0x91, 0x2a,
0xeb, 0x15, 0xc5, 0x04, 0x6d, 0xee, 0xe0, 0x61, 0x9d, 0xf7, 0xf5, 0x78, 0x3b, 0x57, 0x15, 0x03,
0xb7, 0x82, 0x55, 0xf7, 0xbc, 0x0e, 0xec, 0x2d, 0x81, 0x5b, 0x51, 0xec, 0xe7, 0x47, 0x65, 0x45,
0x79, 0x01, 0xda, 0x32, 0xec, 0x1d, 0x2d, 0x26, 0x68, 0x8b, 0xfa, 0xae, 0x56, 0x45, 0x40, 0x5b,
0x3b, 0x3a, 0xbf, 0xbb, 0x7d, 0xdf, 0x92, 0xc4, 0x8b, 0xfb, 0x96, 0x24, 0xde, 0xda, 0xb7, 0x24,
0xb1, 0xed, 0xed, 0x25, 0xfb, 0x59, 0x8b, 0x0b, 0x7e, 0xa5, 0xbd, 0xea, 0x7a, 0xa5, 0x82, 0x53,
0x6d, 0x97, 0x6e, 0x71, 0x04, 0xbf, 0x7e, 0x1a, 0x4c, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff,
0x9c, 0x1e, 0xa1, 0x4b, 0xcb, 0x26, 0x00, 0x00,
}
......@@ -5,12 +5,10 @@ package tipb
import (
"fmt"
proto "github.com/golang/protobuf/proto"
io "io"
math "math"
io "io"
proto "github.com/golang/protobuf/proto"
)
// Reference imports to suppress errors if they are not otherwise used.
......
......@@ -5,14 +5,11 @@ package tipb
import (
"fmt"
proto "github.com/golang/protobuf/proto"
io "io"
math "math"
proto "github.com/golang/protobuf/proto"
github_com_pingcap_tipb_sharedbytes "github.com/pingcap/tipb/sharedbytes"
io "io"
)
// Reference imports to suppress errors if they are not otherwise used.
......@@ -112,12 +109,14 @@ type SelectResponse struct {
Rows []*Row `protobuf:"bytes,2,rep,name=rows" json:"rows,omitempty"`
// Use multiple chunks to reduce memory allocation and
// avoid allocating large contiguous memory.
Chunks []Chunk `protobuf:"bytes,3,rep,name=chunks" json:"chunks"`
Warnings []*Error `protobuf:"bytes,4,rep,name=warnings" json:"warnings,omitempty"`
OutputCounts []int64 `protobuf:"varint,5,rep,name=output_counts,json=outputCounts" json:"output_counts,omitempty"`
WarningCount *int64 `protobuf:"varint,6,opt,name=warning_count,json=warningCount" json:"warning_count,omitempty"`
RowBatchData github_com_pingcap_tipb_sharedbytes.SharedBytes `protobuf:"bytes,7,opt,name=row_batch_data,json=rowBatchData,customtype=github.com/pingcap/tipb/sharedbytes.SharedBytes" json:"row_batch_data"`
XXX_unrecognized []byte `json:"-"`
Chunks []Chunk `protobuf:"bytes,3,rep,name=chunks" json:"chunks"`
Warnings []*Error `protobuf:"bytes,4,rep,name=warnings" json:"warnings,omitempty"`
OutputCounts []int64 `protobuf:"varint,5,rep,name=output_counts,json=outputCounts" json:"output_counts,omitempty"`
WarningCount *int64 `protobuf:"varint,6,opt,name=warning_count,json=warningCount" json:"warning_count,omitempty"`
RowBatchData github_com_pingcap_tipb_sharedbytes.SharedBytes `protobuf:"bytes,7,opt,name=row_batch_data,json=rowBatchData,customtype=github.com/pingcap/tipb/sharedbytes.SharedBytes" json:"row_batch_data"`
// The execution summary of each executor, in the order in request.
ExecutionSummaries []*ExecutorExecutionSummary `protobuf:"bytes,8,rep,name=execution_summaries,json=executionSummaries" json:"execution_summaries,omitempty"`
XXX_unrecognized []byte `json:"-"`
}
func (m *SelectResponse) Reset() { *m = SelectResponse{} }
......@@ -167,6 +166,13 @@ func (m *SelectResponse) GetWarningCount() int64 {
return 0
}
func (m *SelectResponse) GetExecutionSummaries() []*ExecutorExecutionSummary {
if m != nil {
return m.ExecutionSummaries
}
return nil
}
// Chunk contains multiple rows data and rows meta.
type Chunk struct {
// Data for all rows in the chunk.
......@@ -241,11 +247,13 @@ type DAGRequest struct {
EncodeType EncodeType `protobuf:"varint,8,opt,name=encode_type,json=encodeType,enum=tipb.EncodeType" json:"encode_type"`
// It indicates the sql_mode.
SqlMode *uint64 `protobuf:"varint,9,opt,name=sql_mode,json=sqlMode" json:"sql_mode,omitempty"`
// It indicates whether the sql mode is strict.
IsStrictSqlMode *bool `protobuf:"varint,10,opt,name=is_strict_sql_mode,json=isStrictSqlMode" json:"is_strict_sql_mode,omitempty"`
// supply offset is not enough since we have daylight saving time present in some regions
TimeZoneName string `protobuf:"bytes,11,opt,name=time_zone_name,json=timeZoneName" json:"time_zone_name"`
XXX_unrecognized []byte `json:"-"`
TimeZoneName string `protobuf:"bytes,11,opt,name=time_zone_name,json=timeZoneName" json:"time_zone_name"`
// It represents whether or not TiKV should collect execution summaries.
// Execution summaries will be collected into `execution_summaries` field
// in the response.
CollectExecutionSummaries *bool `protobuf:"varint,12,opt,name=collect_execution_summaries,json=collectExecutionSummaries" json:"collect_execution_summaries,omitempty"`
XXX_unrecognized []byte `json:"-"`
}
func (m *DAGRequest) Reset() { *m = DAGRequest{} }
......@@ -316,13 +324,6 @@ func (m *DAGRequest) GetSqlMode() uint64 {
return 0
}
func (m *DAGRequest) GetIsStrictSqlMode() bool {
if m != nil && m.IsStrictSqlMode != nil {
return *m.IsStrictSqlMode
}
return false
}
func (m *DAGRequest) GetTimeZoneName() string {
if m != nil {
return m.TimeZoneName
......@@ -330,6 +331,13 @@ func (m *DAGRequest) GetTimeZoneName() string {
return ""
}
func (m *DAGRequest) GetCollectExecutionSummaries() bool {
if m != nil && m.CollectExecutionSummaries != nil {
return *m.CollectExecutionSummaries
}
return false
}
type StreamResponse struct {
Error *Error `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"`
// Data for all rows
......@@ -526,6 +534,18 @@ func (m *SelectResponse) MarshalTo(dAtA []byte) (int, error) {
return 0, err
}
i += n2
if len(m.ExecutionSummaries) > 0 {
for _, msg := range m.ExecutionSummaries {
dAtA[i] = 0x42
i++
i = encodeVarintSelect(dAtA, i, uint64(msg.Size()))
n, err := msg.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n
}
}
if m.XXX_unrecognized != nil {
i += copy(dAtA[i:], m.XXX_unrecognized)
}
......@@ -666,20 +686,20 @@ func (m *DAGRequest) MarshalTo(dAtA []byte) (int, error) {
i++
i = encodeVarintSelect(dAtA, i, uint64(*m.SqlMode))
}
if m.IsStrictSqlMode != nil {
dAtA[i] = 0x50
dAtA[i] = 0x5a
i++
i = encodeVarintSelect(dAtA, i, uint64(len(m.TimeZoneName)))
i += copy(dAtA[i:], m.TimeZoneName)
if m.CollectExecutionSummaries != nil {
dAtA[i] = 0x60
i++
if *m.IsStrictSqlMode {
if *m.CollectExecutionSummaries {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i++
}
dAtA[i] = 0x5a
i++
i = encodeVarintSelect(dAtA, i, uint64(len(m.TimeZoneName)))
i += copy(dAtA[i:], m.TimeZoneName)
if m.XXX_unrecognized != nil {
i += copy(dAtA[i:], m.XXX_unrecognized)
}
......@@ -822,6 +842,12 @@ func (m *SelectResponse) Size() (n int) {
}
l = m.RowBatchData.Size()
n += 1 + l + sovSelect(uint64(l))
if len(m.ExecutionSummaries) > 0 {
for _, e := range m.ExecutionSummaries {
l = e.Size()
n += 1 + l + sovSelect(uint64(l))
}
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
......@@ -883,11 +909,11 @@ func (m *DAGRequest) Size() (n int) {
if m.SqlMode != nil {
n += 1 + sovSelect(uint64(*m.SqlMode))
}
if m.IsStrictSqlMode != nil {
n += 2
}
l = len(m.TimeZoneName)
n += 1 + l + sovSelect(uint64(l))
if m.CollectExecutionSummaries != nil {
n += 2
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
......@@ -1415,6 +1441,37 @@ func (m *SelectResponse) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 8:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ExecutionSummaries", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowSelect
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthSelect
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ExecutionSummaries = append(m.ExecutionSummaries, &ExecutorExecutionSummary{})
if err := m.ExecutionSummaries[len(m.ExecutionSummaries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipSelect(dAtA[iNdEx:])
......@@ -1897,27 +1954,6 @@ func (m *DAGRequest) Unmarshal(dAtA []byte) error {
}
}
m.SqlMode = &v
case 10:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field IsStrictSqlMode", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowSelect
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
b := bool(v != 0)
m.IsStrictSqlMode = &b
case 11:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field TimeZoneName", wireType)
......@@ -1947,6 +1983,27 @@ func (m *DAGRequest) Unmarshal(dAtA []byte) error {
}
m.TimeZoneName = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 12:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field CollectExecutionSummaries", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowSelect
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
b := bool(v != 0)
m.CollectExecutionSummaries = &b
default:
iNdEx = preIndex
skippy, err := skipSelect(dAtA[iNdEx:])
......@@ -2304,52 +2361,55 @@ var (
func init() { proto.RegisterFile("select.proto", fileDescriptorSelect) }
var fileDescriptorSelect = []byte{
// 748 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x54, 0xcd, 0x4e, 0xdb, 0x4a,
0x18, 0xc5, 0xd8, 0xf9, 0xfb, 0x92, 0x98, 0xdc, 0x11, 0x17, 0xf9, 0x22, 0x6e, 0xc8, 0xcd, 0x55,
0xd5, 0x40, 0x91, 0x43, 0xd9, 0xa0, 0x2e, 0x09, 0xa0, 0x2e, 0x2a, 0xda, 0xca, 0x41, 0xaa, 0x54,
0xa9, 0xb2, 0x26, 0xce, 0xc4, 0xb1, 0x6a, 0x7b, 0xcc, 0xcc, 0x58, 0x81, 0xbe, 0x44, 0xb7, 0x7d,
0x24, 0x76, 0xed, 0xb6, 0x5d, 0xa0, 0x8a, 0x3e, 0x42, 0x5f, 0xa0, 0x9a, 0xf1, 0x24, 0x81, 0x65,
0xc5, 0xa2, 0xab, 0x4c, 0xce, 0x39, 0x73, 0xbe, 0xcf, 0xdf, 0x9c, 0x19, 0x68, 0x70, 0x12, 0x93,
0x40, 0xb8, 0x19, 0xa3, 0x82, 0x22, 0x4b, 0x44, 0xd9, 0x68, 0xd3, 0x26, 0x97, 0x24, 0xc8, 0x05,
0x65, 0x05, 0xba, 0xb9, 0x1e, 0xd2, 0x90, 0xaa, 0x65, 0x5f, 0xae, 0x0a, 0xb4, 0xfb, 0x14, 0x4c,
0x8f, 0xce, 0xd0, 0x06, 0x94, 0xa7, 0x38, 0x1d, 0xc7, 0xc4, 0x31, 0x3a, 0x46, 0xaf, 0xe1, 0xe9,
0x7f, 0x08, 0x81, 0x35, 0xc6, 0x02, 0x3b, 0xab, 0x0a, 0x55, 0xeb, 0xee, 0x33, 0x28, 0x9d, 0x32,
0x46, 0x19, 0x72, 0xc0, 0x0a, 0xe8, 0xb8, 0xd8, 0x52, 0x1a, 0x58, 0xd7, 0x37, 0xdb, 0x2b, 0x9e,
0x42, 0xd0, 0x06, 0x98, 0x09, 0x0f, 0xd5, 0xae, 0x9a, 0x26, 0x24, 0xd0, 0xfd, 0xbc, 0x0a, 0xf6,
0x50, 0xb5, 0xea, 0x11, 0x9e, 0xd1, 0x94, 0x13, 0xf4, 0x1f, 0x94, 0x88, 0x74, 0x53, 0x2e, 0xf5,
0x83, 0xba, 0x2b, 0x9b, 0x77, 0x55, 0x01, 0xaf, 0x60, 0xd0, 0xbf, 0x60, 0x31, 0x3a, 0xe3, 0xce,
0x6a, 0xc7, 0xec, 0xd5, 0x0f, 0x6a, 0x85, 0xc2, 0xa3, 0x33, 0x4f, 0xc1, 0x68, 0x07, 0xca, 0xc1,
0x34, 0x4f, 0xdf, 0x73, 0xc7, 0x54, 0x02, 0x6d, 0x71, 0x2c, 0x31, 0x5d, 0x5c, 0x0b, 0xd0, 0x63,
0xa8, 0xce, 0x30, 0x4b, 0xa3, 0x34, 0xe4, 0x8e, 0x75, 0x57, 0x5c, 0xd4, 0x5b, 0x90, 0xe8, 0x7f,
0x68, 0xd2, 0x5c, 0x64, 0xb9, 0xf0, 0x03, 0x9a, 0xa7, 0x82, 0x3b, 0xa5, 0x8e, 0xd9, 0x33, 0xbd,
0x46, 0x01, 0x1e, 0x2b, 0x4c, 0x8a, 0xf4, 0x86, 0x42, 0xe5, 0x94, 0x3b, 0x86, 0x14, 0x69, 0x50,
0xa9, 0xd0, 0x3b, 0xb0, 0x19, 0x9d, 0xf9, 0x23, 0x2c, 0x82, 0xa9, 0xaf, 0x66, 0x59, 0x91, 0xb3,
0x1c, 0x1c, 0xca, 0xc6, 0xbe, 0xdd, 0x6c, 0xf7, 0xc3, 0x48, 0x4c, 0xf3, 0x91, 0x1b, 0xd0, 0xa4,
0x9f, 0x45, 0x69, 0x18, 0xe0, 0xac, 0x2f, 0x5b, 0xea, 0xf3, 0x29, 0x66, 0x64, 0x3c, 0xba, 0x12,
0x84, 0xbb, 0x43, 0xb5, 0x1e, 0xc8, 0xb5, 0xd7, 0x60, 0x74, 0x36, 0x90, 0x6e, 0x27, 0xf2, 0x30,
0x3e, 0x1a, 0x50, 0x52, 0x5f, 0x8a, 0xce, 0xa1, 0x26, 0xc7, 0x51, 0xd4, 0x30, 0x1f, 0x56, 0xa3,
0x2a, 0x9d, 0xa4, 0x3f, 0xda, 0xd7, 0xae, 0x09, 0x11, 0x58, 0x8f, 0xac, 0xb9, 0x38, 0x80, 0x33,
0x22, 0xb0, 0x9e, 0xb0, 0xda, 0x21, 0xff, 0x77, 0x4f, 0xa1, 0xa2, 0x29, 0xb4, 0x75, 0x2f, 0x55,
0xe6, 0xfc, 0x30, 0x74, 0xb6, 0xb6, 0xa0, 0x1c, 0x93, 0x34, 0x14, 0x53, 0x95, 0x93, 0x05, 0x5b,
0x60, 0xdd, 0xaf, 0x26, 0xc0, 0xc9, 0xd1, 0x73, 0x8f, 0x5c, 0xe4, 0x84, 0x0b, 0xb4, 0x0d, 0x55,
0x2e, 0x30, 0x13, 0xbe, 0xe0, 0xca, 0xcc, 0xd2, 0xf2, 0x8a, 0x42, 0xcf, 0x39, 0xda, 0x83, 0xda,
0x3c, 0xf0, 0xf3, 0xa4, 0xd8, 0xfa, 0x6c, 0x35, 0xec, 0x2d, 0x05, 0xc8, 0x85, 0x96, 0x88, 0x12,
0xe2, 0x7f, 0xa0, 0x29, 0xf1, 0xe9, 0x64, 0xc2, 0x89, 0x50, 0x33, 0x9b, 0x77, 0x61, 0x4b, 0xf6,
0x2d, 0x4d, 0xc9, 0x2b, 0xc5, 0xa1, 0x4d, 0x28, 0x4d, 0x62, 0xac, 0x52, 0xb3, 0xac, 0x5d, 0x40,
0xe8, 0x11, 0xd8, 0x3a, 0x2b, 0x85, 0x51, 0x11, 0x96, 0xa6, 0xa7, 0x13, 0x54, 0x38, 0x70, 0xb4,
0x0f, 0xeb, 0x01, 0x8d, 0x65, 0xf6, 0x7d, 0x86, 0xd3, 0x90, 0xcc, 0x93, 0x25, 0x43, 0x53, 0xf5,
0x90, 0xe6, 0x3c, 0x49, 0xe9, 0x7c, 0xed, 0xc2, 0x5f, 0x09, 0xbe, 0xf4, 0xef, 0x67, 0x4c, 0xa6,
0xc7, 0xf2, 0xd6, 0x12, 0x7c, 0xf9, 0xe6, 0x6e, 0xcc, 0x0e, 0xa1, 0x4e, 0x52, 0x79, 0xf7, 0x7c,
0x71, 0x95, 0x11, 0xa7, 0xda, 0x31, 0x7a, 0xf6, 0x41, 0x4b, 0x0f, 0x40, 0x11, 0xe7, 0x57, 0x19,
0xd1, 0x8d, 0x03, 0x59, 0x20, 0xe8, 0x1f, 0xa8, 0xf2, 0x8b, 0xd8, 0x4f, 0xe4, 0x45, 0xae, 0x29,
0xef, 0x0a, 0xbf, 0x88, 0xcf, 0xe4, 0x2d, 0x7e, 0x02, 0x28, 0xe2, 0x3e, 0x17, 0x2c, 0x0a, 0x84,
0xbf, 0x10, 0x81, 0xea, 0x77, 0x2d, 0xe2, 0x43, 0x45, 0x0c, 0xb5, 0x78, 0x17, 0xec, 0xe5, 0x44,
0x53, 0x9c, 0x10, 0xa7, 0x7e, 0xe7, 0xf6, 0x37, 0xe6, 0xf3, 0x7c, 0x89, 0x13, 0xd2, 0xfd, 0x69,
0x80, 0x3d, 0x14, 0x8c, 0xe0, 0xe4, 0x77, 0x9e, 0x81, 0x17, 0xfa, 0x2d, 0x7a, 0x60, 0xb6, 0x95,
0xc9, 0x1f, 0x78, 0x09, 0x76, 0xf7, 0x00, 0x96, 0x27, 0x81, 0xd6, 0xa0, 0x2e, 0x7f, 0x4f, 0xc8,
0x04, 0xe7, 0xb1, 0x68, 0xad, 0xa0, 0x26, 0xd4, 0x24, 0x70, 0xc4, 0x18, 0x9d, 0xb5, 0x8c, 0xc1,
0xce, 0xf5, 0x6d, 0xdb, 0xf8, 0x72, 0xdb, 0x36, 0xbe, 0xdf, 0xb6, 0x8d, 0x4f, 0x3f, 0xda, 0x2b,
0xf0, 0x77, 0x40, 0x13, 0x57, 0x7f, 0xa2, 0x2b, 0xa2, 0xf1, 0x48, 0x35, 0xfc, 0xda, 0xf8, 0x15,
0x00, 0x00, 0xff, 0xff, 0x04, 0xb1, 0xa6, 0x66, 0xfe, 0x05, 0x00, 0x00,
// 785 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x54, 0xcf, 0x6f, 0xe3, 0x44,
0x14, 0xae, 0xd7, 0xce, 0xaf, 0x97, 0xc4, 0x1b, 0x86, 0x65, 0xe5, 0x2d, 0x4b, 0x1a, 0x82, 0x10,
0xd9, 0x6a, 0xe5, 0x2c, 0xbd, 0xac, 0xb8, 0x20, 0x35, 0x6d, 0xc4, 0x01, 0x95, 0xa2, 0x49, 0x25,
0x24, 0x24, 0x64, 0x4d, 0x9c, 0x89, 0x63, 0x61, 0x7b, 0xdc, 0x99, 0xb1, 0xd2, 0xf0, 0x4f, 0x70,
0xe5, 0xc8, 0x9f, 0xd3, 0x23, 0x67, 0x0e, 0x15, 0x2a, 0x57, 0x6e, 0xfc, 0x03, 0x68, 0xc6, 0xe3,
0xa4, 0x11, 0x5c, 0x50, 0x0f, 0x7b, 0xf2, 0xf8, 0x7b, 0xdf, 0x7c, 0xf3, 0xe6, 0xbd, 0x6f, 0x1e,
0x74, 0x04, 0x4d, 0x68, 0x28, 0xfd, 0x9c, 0x33, 0xc9, 0x90, 0x23, 0xe3, 0x7c, 0x7e, 0xe8, 0xd2,
0x1b, 0x1a, 0x16, 0x92, 0xf1, 0x12, 0x3d, 0x7c, 0x16, 0xb1, 0x88, 0xe9, 0xe5, 0x58, 0xad, 0x4a,
0x74, 0xf8, 0x39, 0xd8, 0x98, 0xad, 0xd1, 0x73, 0xa8, 0xaf, 0x48, 0xb6, 0x48, 0xa8, 0x67, 0x0d,
0xac, 0x51, 0x07, 0x9b, 0x3f, 0x84, 0xc0, 0x59, 0x10, 0x49, 0xbc, 0x27, 0x1a, 0xd5, 0xeb, 0xe1,
0x17, 0x50, 0x9b, 0x72, 0xce, 0x38, 0xf2, 0xc0, 0x09, 0xd9, 0xa2, 0xdc, 0x52, 0x9b, 0x38, 0xb7,
0x77, 0x47, 0x07, 0x58, 0x23, 0xe8, 0x39, 0xd8, 0xa9, 0x88, 0xf4, 0xae, 0x96, 0x09, 0x28, 0x60,
0xf8, 0xab, 0x0d, 0xee, 0x4c, 0xa7, 0x8a, 0xa9, 0xc8, 0x59, 0x26, 0x28, 0xfa, 0x18, 0x6a, 0x54,
0xa9, 0x69, 0x95, 0xf6, 0x49, 0xdb, 0x57, 0xc9, 0xfb, 0xfa, 0x00, 0x5c, 0x46, 0xd0, 0x47, 0xe0,
0x70, 0xb6, 0x16, 0xde, 0x93, 0x81, 0x3d, 0x6a, 0x9f, 0xb4, 0x4a, 0x06, 0x66, 0x6b, 0xac, 0x61,
0xf4, 0x0a, 0xea, 0xe1, 0xaa, 0xc8, 0x7e, 0x14, 0x9e, 0xad, 0x09, 0x46, 0xe2, 0x4c, 0x61, 0xe6,
0x70, 0x43, 0x40, 0x9f, 0x41, 0x73, 0x4d, 0x78, 0x16, 0x67, 0x91, 0xf0, 0x9c, 0x87, 0xe4, 0xf2,
0xbc, 0x6d, 0x10, 0x7d, 0x02, 0x5d, 0x56, 0xc8, 0xbc, 0x90, 0x41, 0xc8, 0x8a, 0x4c, 0x0a, 0xaf,
0x36, 0xb0, 0x47, 0x36, 0xee, 0x94, 0xe0, 0x99, 0xc6, 0x14, 0xc9, 0x6c, 0x28, 0x59, 0x5e, 0x7d,
0x60, 0x29, 0x92, 0x01, 0x35, 0x0b, 0xfd, 0x00, 0x2e, 0x67, 0xeb, 0x60, 0x4e, 0x64, 0xb8, 0x0a,
0x74, 0x2d, 0x1b, 0xaa, 0x96, 0x93, 0xb7, 0x2a, 0xb1, 0xdf, 0xef, 0x8e, 0xc6, 0x51, 0x2c, 0x57,
0xc5, 0xdc, 0x0f, 0x59, 0x3a, 0xce, 0xe3, 0x2c, 0x0a, 0x49, 0x3e, 0x56, 0x29, 0x8d, 0xc5, 0x8a,
0x70, 0xba, 0x98, 0x6f, 0x24, 0x15, 0xfe, 0x4c, 0xaf, 0x27, 0x6a, 0x8d, 0x3b, 0x9c, 0xad, 0x27,
0x4a, 0xed, 0x9c, 0x48, 0x82, 0x2e, 0xe1, 0xfd, 0xb2, 0xcf, 0x31, 0xcb, 0x02, 0x51, 0xa4, 0x29,
0xe1, 0x31, 0x15, 0x5e, 0x53, 0x5f, 0xae, 0x6f, 0x2e, 0x67, 0x8c, 0x30, 0xad, 0x88, 0x33, 0xcd,
0xdb, 0x60, 0x44, 0xf7, 0x91, 0x98, 0x8a, 0xe1, 0xcf, 0x16, 0xd4, 0x74, 0xe9, 0xd0, 0x15, 0xb4,
0x54, 0x7d, 0xcb, 0xa4, 0xed, 0xc7, 0x25, 0xdd, 0x54, 0x4a, 0x3a, 0xe1, 0x37, 0x46, 0x35, 0xa5,
0x92, 0x98, 0x1e, 0x74, 0xb7, 0x1d, 0xbd, 0xa0, 0x92, 0x98, 0x96, 0xe9, 0x1d, 0xea, 0x7f, 0x38,
0x85, 0x86, 0x09, 0xa1, 0x97, 0x7b, 0x36, 0xb5, 0xab, 0xee, 0x1a, 0xb3, 0xbe, 0x84, 0x7a, 0x42,
0xb3, 0x48, 0xae, 0xb4, 0xf1, 0xb6, 0xd1, 0x12, 0x1b, 0xfe, 0x65, 0x03, 0x9c, 0x9f, 0x7e, 0x85,
0xe9, 0x75, 0x41, 0x85, 0x44, 0x47, 0xd0, 0x14, 0x92, 0x70, 0x19, 0x48, 0xa1, 0xc5, 0x1c, 0x43,
0x6f, 0x68, 0xf4, 0x4a, 0xa0, 0xd7, 0xd0, 0xaa, 0x5e, 0x50, 0x65, 0x3d, 0x77, 0xbf, 0x9e, 0x78,
0x47, 0x40, 0x3e, 0xf4, 0x64, 0x9c, 0xd2, 0xe0, 0x27, 0x96, 0xd1, 0x80, 0x2d, 0x97, 0x82, 0x4a,
0x5d, 0xb3, 0x2a, 0x0b, 0x57, 0x45, 0xbf, 0x67, 0x19, 0xbd, 0xd4, 0x31, 0x74, 0x08, 0xb5, 0x65,
0x42, 0xb4, 0x0d, 0x77, 0x67, 0x97, 0x10, 0xfa, 0x14, 0x5c, 0x63, 0xbe, 0x52, 0xa8, 0x74, 0x5f,
0x17, 0x1b, 0x4b, 0x96, 0x0a, 0x02, 0xbd, 0x81, 0x67, 0x21, 0x4b, 0xd4, 0x63, 0x0a, 0x38, 0xc9,
0x22, 0x5a, 0x59, 0x55, 0xb9, 0xb0, 0x89, 0x91, 0x89, 0x61, 0x15, 0x32, 0x86, 0x3d, 0x86, 0xf7,
0x52, 0x72, 0x13, 0xec, 0x9b, 0x56, 0xd9, 0xd1, 0xc1, 0x4f, 0x53, 0x72, 0xf3, 0xdd, 0x43, 0xdf,
0xbe, 0x85, 0x36, 0xcd, 0xd4, 0x63, 0x0e, 0xe4, 0x26, 0xa7, 0x5e, 0x73, 0x60, 0x8d, 0xdc, 0x93,
0x9e, 0x29, 0x80, 0x0e, 0x5c, 0x6d, 0x72, 0x6a, 0x12, 0x07, 0xba, 0x45, 0xd0, 0x0b, 0x68, 0x8a,
0xeb, 0x24, 0x48, 0xd5, 0x64, 0x68, 0x69, 0xed, 0x86, 0xb8, 0x4e, 0x2e, 0xd4, 0x58, 0x38, 0x06,
0x77, 0x57, 0xa4, 0x8c, 0xa4, 0xd4, 0x6b, 0x3f, 0x98, 0x10, 0x9d, 0xaa, 0x44, 0xdf, 0x90, 0x94,
0xa2, 0x2f, 0xe1, 0xc3, 0xea, 0x76, 0xff, 0x65, 0xf0, 0x8e, 0xbe, 0xe4, 0x0b, 0x43, 0x99, 0xfe,
0xdb, 0xc7, 0x7f, 0x5b, 0xe0, 0xce, 0x24, 0xa7, 0x24, 0xfd, 0x3f, 0xa3, 0xe6, 0x6b, 0x33, 0xef,
0x1e, 0x69, 0x77, 0x2d, 0xf2, 0x0e, 0xa6, 0xcd, 0xf1, 0x6b, 0x80, 0x5d, 0x73, 0xd0, 0x53, 0x68,
0xab, 0xef, 0x39, 0x5d, 0x92, 0x22, 0x91, 0xbd, 0x03, 0xd4, 0x85, 0x96, 0x02, 0x4e, 0x39, 0x67,
0xeb, 0x9e, 0x35, 0x79, 0x75, 0x7b, 0xdf, 0xb7, 0x7e, 0xbb, 0xef, 0x5b, 0x7f, 0xdc, 0xf7, 0xad,
0x5f, 0xfe, 0xec, 0x1f, 0xc0, 0x07, 0x21, 0x4b, 0x7d, 0x73, 0x45, 0x5f, 0xc6, 0x8b, 0xb9, 0x4e,
0xf8, 0x5b, 0xeb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0x9c, 0xdb, 0x62, 0x06, 0x00,
0x00,
}
......@@ -111,118 +111,118 @@
"revisionTime": "2018-10-24T15:10:47Z"
},
{
"checksumSHA1": "zdNB/SusrolFBEotWrfqZ08+MCk=",
"checksumSHA1": "SEiIj/X95cyoI8/a0z2XBpzE+CI=",
"path": "github.com/pingcap/parser",
"revision": "64957c596663a56fe176881aadea6baa4890f710",
"revisionTime": "2019-02-19T02:02:13Z"
"revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-21T06:24:14Z"
},
{
"checksumSHA1": "JdLK0084PE81bjMLcH+qUZFq10M=",
"checksumSHA1": "saYDWHgFCkZAYZeOGfowg2TEAss=",
"path": "github.com/pingcap/parser/ast",
"revision": "64957c596663a56fe176881aadea6baa4890f710",
"revisionTime": "2019-02-19T02:02:13Z"
"revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-21T06:24:14Z"
},
{
"checksumSHA1": "npMzF75Vg7tO28nM3MNFq7ciqRY=",
"checksumSHA1": "40q2uTuOqgcdXxoauVNVO+FCxe8=",
"path": "github.com/pingcap/parser/auth",
"revision": "64957c596663a56fe176881aadea6baa4890f710",
"revisionTime": "2019-02-19T02:02:13Z"
"revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-21T06:24:14Z"
},
{
"checksumSHA1": "t4UHo966WzU9Z0IJkyGHRp0loOk=",
"path": "github.com/pingcap/parser/charset",
"revision": "64957c596663a56fe176881aadea6baa4890f710",
"revisionTime": "2019-02-19T02:02:13Z"
"revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-21T06:24:14Z"
},
{
"checksumSHA1": "ohLJW2u9NJEzYIJL/AjOqcuKfMY=",
"path": "github.com/pingcap/parser/format",
"revision": "64957c596663a56fe176881aadea6baa4890f710",
"revisionTime": "2019-02-19T02:02:13Z"
"revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-21T06:24:14Z"
},
{
"checksumSHA1": "AqNgtzIGY8g7Ojd9ofE8EtKW2mk=",
"path": "github.com/pingcap/parser/model",
"revision": "64957c596663a56fe176881aadea6baa4890f710",
"revisionTime": "2019-02-19T02:02:13Z"
"revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-21T06:24:14Z"
},
{
"checksumSHA1": "SrliCbNvJrQExC1gULpw7FAiE6s=",
"path": "github.com/pingcap/parser/mysql",
"revision": "64957c596663a56fe176881aadea6baa4890f710",
"revisionTime": "2019-02-19T02:02:13Z"
"revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-21T06:24:14Z"
},
{
"checksumSHA1": "olapD16WCMBU9vrA5PtlERGFfXw=",
"path": "github.com/pingcap/parser/opcode",
"revision": "64957c596663a56fe176881aadea6baa4890f710",
"revisionTime": "2019-02-19T02:02:13Z"
"revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-21T06:24:14Z"
},
{
"checksumSHA1": "TF2rMYy9ewgZpFsJb+jaGXXqZqc=",
"path": "github.com/pingcap/parser/terror",
"revision": "64957c596663a56fe176881aadea6baa4890f710",
"revisionTime": "2019-02-19T02:02:13Z"
"revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-21T06:24:14Z"
},
{
"checksumSHA1": "dxjAHfRcmXkQdf0HeueDrUO+BcM=",
"path": "github.com/pingcap/parser/types",
"revision": "64957c596663a56fe176881aadea6baa4890f710",
"revisionTime": "2019-02-19T02:02:13Z"
"revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-21T06:24:14Z"
},
{
"checksumSHA1": "uOrWw9c47zwN6COxonFJ0t2IMcM=",
"path": "github.com/pingcap/tidb/sessionctx/stmtctx",
"revision": "ed7bb004170311e73664c280e77298760de74425",
"revisionTime": "2019-02-19T02:02:46Z"
"revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-21T13:18:03Z"
},
{
"checksumSHA1": "IJSv0YocnSmIZRpgQJ1pLtHL8vY=",
"path": "github.com/pingcap/tidb/types",
"revision": "ed7bb004170311e73664c280e77298760de74425",
"revisionTime": "2019-02-19T02:02:46Z"
"revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-21T13:18:03Z"
},
{
"checksumSHA1": "fPdBwAtPVKOr7YAyOMnRxyHixoM=",
"path": "github.com/pingcap/tidb/types/json",
"revision": "ed7bb004170311e73664c280e77298760de74425",
"revisionTime": "2019-02-19T02:02:46Z"
"revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-21T13:18:03Z"
},
{
"checksumSHA1": "tY4KSNzuTGm+dgV6ByZEGa6mv5E=",
"path": "github.com/pingcap/tidb/types/parser_driver",
"revision": "ed7bb004170311e73664c280e77298760de74425",
"revisionTime": "2019-02-19T02:02:46Z"
"revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-21T13:18:03Z"
},
{
"checksumSHA1": "OOig47D9TSVOUAYkNj2yJok1Hmo=",
"checksumSHA1": "oSpVUrmVZl6RPxrpwtKgeNodckQ=",
"path": "github.com/pingcap/tidb/util/execdetails",
"revision": "ed7bb004170311e73664c280e77298760de74425",
"revisionTime": "2019-02-19T02:02:46Z"
"revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-21T13:18:03Z"
},
{
"checksumSHA1": "RdbHgQWMHjRtKjqPcTX81k1V3sw=",
"path": "github.com/pingcap/tidb/util/hack",
"revision": "ed7bb004170311e73664c280e77298760de74425",
"revisionTime": "2019-02-19T02:02:46Z"
"revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-21T13:18:03Z"
},
{
"checksumSHA1": "xSyepiuqsoaaeDch7cXeumvVHKM=",
"path": "github.com/pingcap/tidb/util/memory",
"revision": "ed7bb004170311e73664c280e77298760de74425",
"revisionTime": "2019-02-19T02:02:46Z"
"revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-21T13:18:03Z"
},
{
"checksumSHA1": "SmYeIK/fIYXNu8IKxD6HOVQVTuU=",
"checksumSHA1": "QPIBwDNUFF5Whrnd41S3mkKa4gQ=",
"path": "github.com/pingcap/tipb/go-tipb",
"revision": "11e33c750323a0267a6aee335eaaeb7831bdae67",
"revisionTime": "2018-10-12T11:26:00Z"
"revision": "aa146c1ab9bb2b7ec5e00e8904aa95465f3f106b",
"revisionTime": "2019-02-21T05:42:54Z"
},
{
"checksumSHA1": "l0hSacaw5sInpzZkFwGLH/azUD4=",
"path": "github.com/pingcap/tipb/sharedbytes",
"revision": "11e33c750323a0267a6aee335eaaeb7831bdae67",
"revisionTime": "2018-10-12T11:26:00Z"
"revision": "aa146c1ab9bb2b7ec5e00e8904aa95465f3f106b",
"revisionTime": "2019-02-21T05:42:54Z"
},
{
"checksumSHA1": "I7hloldMJZTqUx6hbVDp5nk9fZQ=",
......@@ -413,62 +413,62 @@
{
"checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=",
"path": "vitess.io/vitess/go/bytes2",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245",
"revisionTime": "2019-02-18T03:34:22Z"
"revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-20T22:32:46Z"
},
{
"checksumSHA1": "bhE6CGQgZTIgLPp9lnvlKW/47xc=",
"path": "vitess.io/vitess/go/hack",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245",
"revisionTime": "2019-02-18T03:34:22Z"
"revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-20T22:32:46Z"
},
{
"checksumSHA1": "w4BH8HL/CgT6aBWojJeZHOj5DZg=",
"path": "vitess.io/vitess/go/sqltypes",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245",
"revisionTime": "2019-02-18T03:34:22Z"
"revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-20T22:32:46Z"
},
{
"checksumSHA1": "vAIRxI6MHsq3x1hLQwIyw5AvqtI=",
"path": "vitess.io/vitess/go/vt/log",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245",
"revisionTime": "2019-02-18T03:34:22Z"
"revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-20T22:32:46Z"
},
{
"checksumSHA1": "nRmynSAD/uvTjH0/Ftr9Iz/VsN4=",
"path": "vitess.io/vitess/go/vt/proto/query",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245",
"revisionTime": "2019-02-18T03:34:22Z"
"revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-20T22:32:46Z"
},
{
"checksumSHA1": "YLWTmL+rvz0htn0niRMrIUI6rKc=",
"path": "vitess.io/vitess/go/vt/proto/topodata",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245",
"revisionTime": "2019-02-18T03:34:22Z"
"revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-20T22:32:46Z"
},
{
"checksumSHA1": "1gA4wbQ2DiVjeLJauYSQiuBJiE0=",
"path": "vitess.io/vitess/go/vt/proto/vtgate",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245",
"revisionTime": "2019-02-18T03:34:22Z"
"revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-20T22:32:46Z"
},
{
"checksumSHA1": "qz32abYdmm9NfKTc++K0l1EvXXM=",
"path": "vitess.io/vitess/go/vt/proto/vtrpc",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245",
"revisionTime": "2019-02-18T03:34:22Z"
"revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-20T22:32:46Z"
},
{
"checksumSHA1": "lpx8L51nDqrhQis64dEBk7RI32k=",
"path": "vitess.io/vitess/go/vt/sqlparser",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245",
"revisionTime": "2019-02-18T03:34:22Z"
"revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-20T22:32:46Z"
},
{
"checksumSHA1": "Jx+gOh/kiBDSZxEIWHyYn9brjdo=",
"path": "vitess.io/vitess/go/vt/vterrors",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245",
"revisionTime": "2019-02-18T03:34:22Z"
"revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-20T22:32:46Z"
}
],
"rootPath": "github.com/XiaoMi/soar"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册