From f60665f3b93177f517b8ff41956835056dd763e3 Mon Sep 17 00:00:00 2001 From: gouhongshen Date: Fri, 1 Aug 2025 09:57:37 +0800 Subject: [PATCH 1/8] wip --- pkg/common/moerr/error.go | 5 ++ pkg/sql/colexec/multi_update/insert.go | 12 +++ pkg/sql/compile/compile.go | 16 ++-- pkg/sql/compile/ddl.go | 9 ++- pkg/sql/compile/operator.go | 29 +++---- pkg/sql/plan/build_alter_table.go | 16 ++++ pkg/sql/plan/build_table_clone.go | 102 ++++++++++++++++--------- pkg/vm/engine/disttae/txn_database.go | 1 + proto/plan.proto | 12 +++ 9 files changed, 142 insertions(+), 60 deletions(-) diff --git a/pkg/common/moerr/error.go b/pkg/common/moerr/error.go index 8305bf2791d86..2cbfd5a58dca5 100644 --- a/pkg/common/moerr/error.go +++ b/pkg/common/moerr/error.go @@ -20,6 +20,7 @@ import ( "encoding/hex" "fmt" "io" + "strings" "sync/atomic" moerrpb "github.com/matrixorigin/matrixone/pkg/pb/moerr" @@ -1020,6 +1021,10 @@ func NewNotLeaseHolder(ctx context.Context, holderId uint64) *Error { } func NewNoSuchTable(ctx context.Context, db, tbl string) *Error { + if strings.Contains(tbl, "index") { + x := 0 + x++ + } return newError(ctx, ErrNoSuchTable, db, tbl) } diff --git a/pkg/sql/colexec/multi_update/insert.go b/pkg/sql/colexec/multi_update/insert.go index dc19b31f9781c..88a8a02ccf2d7 100644 --- a/pkg/sql/colexec/multi_update/insert.go +++ b/pkg/sql/colexec/multi_update/insert.go @@ -109,6 +109,7 @@ func (update *MultiUpdate) insert_secondary_index_table( attrs = append(attrs, col.Name) } } + ctr.insertBuf[tableIndex] = batch.New(attrs) for insertIdx, inputIdx := range updateCtx.InsertCols { ctr.insertBuf[tableIndex].Vecs[insertIdx] = vector.NewVec(*inputBatch.Vecs[inputIdx].GetType()) @@ -131,6 +132,17 @@ func (update *MultiUpdate) insert_table( inputBatch *batch.Batch, insertBatch *batch.Batch, ) (err error) { + + if updateCtx.TableDef.DbName == "test" { + fmt.Println( + updateCtx.TableDef.Name, + inputBatch.Attrs, + len(inputBatch.Vecs), + insertBatch.Attrs, + len(insertBatch.Vecs), + ) + } + insertBatch.CleanOnlyData() for insertIdx, inputIdx := range updateCtx.InsertCols { err = insertBatch.Vecs[insertIdx].UnionBatch(inputBatch.Vecs[inputIdx], 0, inputBatch.Vecs[inputIdx].Length(), nil, proc.GetMPool()) diff --git a/pkg/sql/compile/compile.go b/pkg/sql/compile/compile.go index 8d77aac6b1b27..3e90671c7fe15 100644 --- a/pkg/sql/compile/compile.go +++ b/pkg/sql/compile/compile.go @@ -4950,26 +4950,20 @@ func (c *Compile) compileTableClone( err error s1 *Scope - nodes []engine.Node - cloneQry = pn.GetDdl().Query + node engine.Node + clonePlan = pn.GetDdl().GetCloneTable() ) - nodes, err = c.generateNodes(cloneQry.Nodes[0]) - if err != nil { - return nil, err - } + node = getEngineNode(c) - copyOp, err := constructTableClone(c, cloneQry.Nodes[0]) + copyOp, err := constructTableClone(c, clonePlan) if err != nil { return nil, err } s1 = newScope(TableClone) - s1.NodeInfo = nodes[0] + s1.NodeInfo = node s1.TxnOffset = c.TxnOffset - s1.DataSource = &Source{ - node: cloneQry.Nodes[0], - } s1.Plan = pn s1.Proc = c.proc.NewNoContextChildProc(0) diff --git a/pkg/sql/compile/ddl.go b/pkg/sql/compile/ddl.go index b0abc4cba04f4..c59cab17582ce 100644 --- a/pkg/sql/compile/ddl.go +++ b/pkg/sql/compile/ddl.go @@ -2943,8 +2943,13 @@ func (s *Scope) TableClone(c *Compile) error { err error ) - if err = s.CreateTable(c); err != nil { - return err + clonePlan := s.Plan.GetDdl().GetCloneTable() + + if clonePlan.CreateTable != nil { + s.Plan = clonePlan.CreateTable + if err = s.CreateTable(c); err != nil { + return err + } } return s.Run(c) diff --git a/pkg/sql/compile/operator.go b/pkg/sql/compile/operator.go index befd1efa772ae..45ea47ad2adc5 100644 --- a/pkg/sql/compile/operator.go +++ b/pkg/sql/compile/operator.go @@ -2376,19 +2376,19 @@ func constructPostDml(n *plan.Node, eg engine.Engine) *postdml.PostDml { func constructTableClone( c *Compile, - n *plan.Node, + clonePlan *plan.CloneTable, ) (*table_clone.TableClone, error) { metaCopy := table_clone.NewTableClone() metaCopy.Ctx = &table_clone.TableCloneCtx{ Eng: c.e, - SrcTblDef: n.TableDef, - SrcObjDef: n.ObjRef, + SrcTblDef: clonePlan.SrcTableDef, + SrcObjDef: clonePlan.SrcObjDef, - ScanSnapshot: n.ScanSnapshot, - DstTblName: n.InsertCtx.TableDef.Name, - DstDatabaseName: n.InsertCtx.TableDef.DbName, + ScanSnapshot: clonePlan.ScanSnapshot, + DstTblName: clonePlan.DstTableName, + DstDatabaseName: clonePlan.DstDatabaseName, } var ( @@ -2401,7 +2401,7 @@ func constructTableClone( hasAutoIncr bool ) - for _, colDef := range n.TableDef.Cols { + for _, colDef := range clonePlan.SrcTableDef.Cols { if colDef.Typ.AutoIncr { hasAutoIncr = true break @@ -2413,17 +2413,20 @@ func constructTableClone( } sql = fmt.Sprintf( - "select col_index, offset from mo_catalog.mo_increment_columns where table_id = %d", n.TableDef.TblId) + "select col_index, offset from mo_catalog.mo_increment_columns where table_id = %d", + clonePlan.SrcTableDef.TblId, + ) - if n.ScanSnapshot != nil { - if n.ScanSnapshot.Tenant != nil { - account = n.ScanSnapshot.Tenant.TenantID + if clonePlan.ScanSnapshot != nil { + if clonePlan.ScanSnapshot.Tenant != nil { + account = clonePlan.ScanSnapshot.Tenant.TenantID } - if n.ScanSnapshot.TS != nil { + if clonePlan.ScanSnapshot.TS != nil { sql = fmt.Sprintf( "select col_index, offset from mo_catalog.mo_increment_columns {MO_TS = %d} where table_id = %d", - n.ScanSnapshot.TS.PhysicalTime, n.TableDef.TblId) + clonePlan.ScanSnapshot.TS.PhysicalTime, clonePlan.SrcTableDef.TblId, + ) } } diff --git a/pkg/sql/plan/build_alter_table.go b/pkg/sql/plan/build_alter_table.go index 0e734a4d70f3b..bdc54b5f42a34 100644 --- a/pkg/sql/plan/build_alter_table.go +++ b/pkg/sql/plan/build_alter_table.go @@ -21,6 +21,7 @@ import ( "math" "slices" "strings" + "sync/atomic" "github.com/google/uuid" "github.com/matrixorigin/matrixone/pkg/catalog" @@ -135,12 +136,15 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er unsupportedErrorFmt := "unsupported alter option in copy mode: %s" + affectedCols := make([]string, 0) + for _, spec := range validAlterSpecs { switch option := spec.(type) { case *tree.AlterOptionAdd: switch optionAdd := option.Def.(type) { case *tree.PrimaryKeyIndex: err = AddPrimaryKey(cctx, alterTablePlan, optionAdd, alterTableCtx) + affectedCols = append(affectedCols, optionAdd.Name) default: // column adding is handled in *tree.AlterAddCol // various indexes\fks adding are handled in inplace mode. @@ -151,8 +155,10 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er switch option.Typ { case tree.AlterTableDropColumn: err = DropColumn(cctx, alterTablePlan, string(option.Name), alterTableCtx) + affectedCols = append(affectedCols, string(option.Name)) case tree.AlterTableDropPrimaryKey: err = DropPrimaryKey(cctx, alterTablePlan, alterTableCtx) + affectedCols = append(affectedCols, string(option.Name)) default: // various indexes\fks dropping are handled in inplace mode. return nil, moerr.NewInvalidInputf(ctx, @@ -160,12 +166,16 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er } case *tree.AlterAddCol: err = AddColumn(cctx, alterTablePlan, option, alterTableCtx) + affectedCols = append(affectedCols, option.Column.Name.ColName()) case *tree.AlterTableModifyColumnClause: err = ModifyColumn(cctx, alterTablePlan, option, alterTableCtx) + affectedCols = append(affectedCols, option.NewColumn.Name.ColName()) case *tree.AlterTableChangeColumnClause: err = ChangeColumn(cctx, alterTablePlan, option, alterTableCtx) + affectedCols = append(affectedCols, option.NewColumn.Name.ColName()) case *tree.AlterTableRenameColumnClause: err = RenameColumn(cctx, alterTablePlan, option, alterTableCtx) + //affectedCols case *tree.AlterTableAlterColumnClause: err = AlterColumn(cctx, alterTablePlan, option, alterTableCtx) case *tree.AlterTableOrderByColumnClause: @@ -219,6 +229,8 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er }, nil } +var ID atomic.Int64 + func buildAlterInsertDataSQL(ctx CompilerContext, alterCtx *AlterTableContext) (string, error) { schemaName := alterCtx.schemaName originTableName := alterCtx.originTableName @@ -251,6 +263,10 @@ func buildAlterInsertDataSQL(ctx CompilerContext, alterCtx *AlterTableContext) ( insertSQL := fmt.Sprintf("INSERT INTO `%s`.`%s` (%s) SELECT %s FROM `%s`.`%s`", formatStr(schemaName), formatStr(copyTableName), insertBuffer.String(), selectBuffer.String(), formatStr(schemaName), formatStr(originTableName)) + + fmt.Println(ID.Add(1), insertSQL) + fmt.Println() + return insertSQL, nil } diff --git a/pkg/sql/plan/build_table_clone.go b/pkg/sql/plan/build_table_clone.go index 0b6f2e43a057d..c07f026ec0cdf 100644 --- a/pkg/sql/plan/build_table_clone.go +++ b/pkg/sql/plan/build_table_clone.go @@ -17,10 +17,11 @@ package plan import ( "context" "fmt" - "go.uber.org/zap" "slices" "strings" + "go.uber.org/zap" + "github.com/matrixorigin/matrixone/pkg/catalog" "github.com/matrixorigin/matrixone/pkg/common/moerr" "github.com/matrixorigin/matrixone/pkg/logutil" @@ -35,11 +36,14 @@ func buildCloneTable( var ( err error - id int32 + + //id int32 srcTblDef *TableDef - srcObj *ObjectRef - query *Query + + srcObj *ObjectRef + + //query *Query createTablePlan *Plan @@ -92,28 +96,38 @@ func buildCloneTable( "table %v-%v does not exist", srcDatabaseName.String(), srcTableName.String()) } - dstTblDef := DeepCopyTableDef(srcTblDef, true) - dstTblDef.Name = stmt.CreateTable.Table.ObjectName.String() - dstTblDef.DbName = stmt.CreateTable.Table.SchemaName.String() + var ( + dstTableName string + dstDatabaseName string + ) + + dstTableName = stmt.CreateTable.Table.ObjectName.String() + dstDatabaseName = stmt.CreateTable.Table.SchemaName.String() + //dstTblDef := DeepCopyTableDef(srcTblDef, true) + //dstTblDef.Name = stmt.CreateTable.Table.ObjectName.String() + //dstTblDef.DbName = stmt.CreateTable.Table.SchemaName.String() - if dstTblDef.DbName == "" { - dstTblDef.DbName = ctx.DefaultDatabase() + if dstDatabaseName == "" { + dstDatabaseName = ctx.DefaultDatabase() } - id = builder.appendNode(&plan.Node{ - ObjRef: srcObj, - NodeType: plan.Node_TABLE_CLONE, - TableDef: srcTblDef, - ScanSnapshot: bindCtx.snapshot, - InsertCtx: &plan.InsertCtx{ - TableDef: dstTblDef, - }, - BindingTags: []int32{builder.genNewTag()}, - }, bindCtx) - - builder.qry.Steps = append(builder.qry.Steps, id) - builder.qry.Nodes[0].Stats.ForceOneCN = true - builder.skipStats = true + //node := &plan.Node{ + // ObjRef: srcObj, + // NodeType: plan.Node_TABLE_CLONE, + // TableDef: srcTblDef, + // ScanSnapshot: bindCtx.snapshot, + // //InsertCtx: &plan.InsertCtx{ + // // TableDef: dstTblDef, + // //}, + // BindingTags: []int32{builder.genNewTag()}, + // Stats: &plan.Stats{ + // ForceOneCN: true, + // }, + //} + + //builder.qry.Steps = append(builder.qry.Steps, id) + //builder.qry.Nodes[0].Stats.ForceOneCN = true + //builder.skipStats = true var ( opAccount uint32 @@ -139,12 +153,12 @@ func buildCloneTable( stmt.StmtType = tree.DecideCloneStmtType( ctx.GetContext(), stmt, - srcTblDef.DbName, dstTblDef.DbName, + srcTblDef.DbName, dstDatabaseName, dstAccount, srcAccount, ) if err = checkPrivilege( - ctx.GetContext(), stmt, opAccount, srcAccount, dstAccount, srcTblDef, dstTblDef, bindCtx.snapshot, + ctx.GetContext(), stmt, opAccount, srcAccount, dstAccount, srcTblDef, dstTableName, dstDatabaseName, bindCtx.snapshot, ); err != nil { return nil, err } @@ -153,14 +167,33 @@ func buildCloneTable( return nil, err } - if query, err = builder.createQuery(); err != nil { - return nil, err - } - - createTablePlan.Plan.(*plan.Plan_Ddl).Ddl.Query = query - createTablePlan.Plan.(*plan.Plan_Ddl).Ddl.DdlType = plan.DataDefinition_CREATE_TABLE_WITH_CLONE + //if query, err = builder.createQuery(); err != nil { + // return nil, err + //} + + //createTablePlan.Plan.(*plan.Plan_Ddl).Ddl.Query = query + //createTablePlan.Plan.(*plan.Plan_Ddl).Ddl.DdlType = plan.DataDefinition_CREATE_TABLE_WITH_CLONE + + return &Plan{ + Plan: &plan.Plan_Ddl{ + Ddl: &plan.DataDefinition{ + DdlType: plan.DataDefinition_CREATE_TABLE_WITH_CLONE, + Definition: &plan.DataDefinition_CloneTable{ + CloneTable: &plan.CloneTable{ + SrcTableDef: srcTblDef, + SrcObjDef: srcObj, + DstDatabaseName: dstDatabaseName, + DstTableName: dstTableName, + SkipMainTable: false, + CreateTable: createTablePlan, + ScanSnapshot: bindCtx.snapshot, + }, + }, + }, + }, + }, nil - return createTablePlan, nil + //return createTablePlan, nil } func checkPrivilege( @@ -170,7 +203,8 @@ func checkPrivilege( srcAccount uint32, dstAccount uint32, srcTblDef *TableDef, - dstTblDef *TableDef, + dstTableName string, + dstDatabaseName string, scanSnapshot *Snapshot, ) (err error) { @@ -243,7 +277,7 @@ func checkPrivilege( // clone from system databases typ = 1 } else if slices.Index( - catalog.SystemDatabases, strings.ToLower(dstTblDef.DbName), + catalog.SystemDatabases, strings.ToLower(dstDatabaseName), ) != -1 { // clone to a system database typ = 2 diff --git a/pkg/vm/engine/disttae/txn_database.go b/pkg/vm/engine/disttae/txn_database.go index 283baf3a2c697..211700f702d15 100644 --- a/pkg/vm/engine/disttae/txn_database.go +++ b/pkg/vm/engine/disttae/txn_database.go @@ -166,6 +166,7 @@ func (db *txnDatabase) Relation(ctx context.Context, name string, proc any) (eng return nil, err } if rel == nil { + if db.databaseName == "snapshot_read" && strings. err := moerr.NewNoSuchTable(ctx, db.databaseName, name) return nil, err } diff --git a/proto/plan.proto b/proto/plan.proto index 8466ba1f3cc1c..5d831070dca3b 100644 --- a/proto/plan.proto +++ b/proto/plan.proto @@ -1199,6 +1199,7 @@ message DataDefinition { DropPitr drop_pitr = 101; CreateCDC create_cdc = 102; DropCDC drop_cdc = 103; + CloneTable clone_table = 104; } } @@ -1639,3 +1640,14 @@ message DropCDC { bool all = 3; uint32 account_id = 4; } + +message CloneTable { + Plan create_table = 1; + Snapshot scan_snapshot = 2; + TableDef src_table_def = 3; + ObjectRef src_obj_def = 4; + string dst_database_name = 5; + string dst_table_name = 6; + bool skip_main_table = 7; + repeated string skip_indexes = 8; +} \ No newline at end of file From 9aca6392738cde4c9593f56557a7c6d2cf000ea7 Mon Sep 17 00:00:00 2001 From: gouhongshen Date: Fri, 1 Aug 2025 18:24:18 +0800 Subject: [PATCH 2/8] fix read the newly created table as data srouce --- pkg/sql/colexec/table_clone/table_clone.go | 14 +++++++++++--- pkg/vm/engine/disttae/txn_database.go | 3 +-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/pkg/sql/colexec/table_clone/table_clone.go b/pkg/sql/colexec/table_clone/table_clone.go index f105e7eab1b1b..e7c85cdbf2772 100644 --- a/pkg/sql/colexec/table_clone/table_clone.go +++ b/pkg/sql/colexec/table_clone/table_clone.go @@ -137,9 +137,17 @@ func (tc *TableClone) Prepare(proc *process.Process) error { // the src table is a publication tc.Ctx.SrcCtx = defines.AttachAccountId(tc.Ctx.SrcCtx, uint32(tc.Ctx.SrcObjDef.PubInfo.TenantId)) - } else if tc.Ctx.ScanSnapshot != nil && tc.Ctx.ScanSnapshot.Tenant != nil { - // the source data may be coming from a different account. - tc.Ctx.SrcCtx = defines.AttachAccountId(tc.Ctx.SrcCtx, tc.Ctx.ScanSnapshot.Tenant.TenantID) + } else if tc.Ctx.ScanSnapshot != nil { + if tc.Ctx.ScanSnapshot.Tenant != nil { + // the source data may be coming from a different account. + tc.Ctx.SrcCtx = defines.AttachAccountId(tc.Ctx.SrcCtx, tc.Ctx.ScanSnapshot.Tenant.TenantID) + } + + // without setting this scan ts, we could read the newly created table !!! + if tc.Ctx.ScanSnapshot.TS != nil { + txnOp = proc.GetTxnOperator().CloneSnapshotOp(*tc.Ctx.ScanSnapshot.TS) + proc.SetCloneTxnOperator(txnOp) + } } txnOp = proc.GetCloneTxnOperator() diff --git a/pkg/vm/engine/disttae/txn_database.go b/pkg/vm/engine/disttae/txn_database.go index 211700f702d15..e52aef2dcfd28 100644 --- a/pkg/vm/engine/disttae/txn_database.go +++ b/pkg/vm/engine/disttae/txn_database.go @@ -166,8 +166,7 @@ func (db *txnDatabase) Relation(ctx context.Context, name string, proc any) (eng return nil, err } if rel == nil { - if db.databaseName == "snapshot_read" && strings. - err := moerr.NewNoSuchTable(ctx, db.databaseName, name) + err = moerr.NewNoSuchTable(ctx, db.databaseName, name) return nil, err } return rel, nil From 24a1d52df16e6346d0c935c6a4521059c62fca7b Mon Sep 17 00:00:00 2001 From: gouhongshen Date: Mon, 18 Aug 2025 13:33:07 +0800 Subject: [PATCH 3/8] wip: index table is empty --- pkg/defines/type.go | 2 +- pkg/sql/colexec/multi_update/insert.go | 1 + pkg/sql/compile/alter.go | 121 ++++++++++++++++++++++--- pkg/sql/compile/sql_executor.go | 2 +- pkg/sql/plan/bind_insert.go | 27 ++++-- pkg/sql/plan/build_alter_table.go | 32 +++++-- pkg/sql/plan/build_dml_util.go | 4 +- pkg/sql/plan/build_table_clone.go | 1 - pkg/util/executor/options.go | 8 +- pkg/util/executor/types.go | 16 ++-- proto/plan.proto | 20 ++-- 11 files changed, 179 insertions(+), 55 deletions(-) diff --git a/pkg/defines/type.go b/pkg/defines/type.go index 904e33a2b8506..7104bb81c52ea 100644 --- a/pkg/defines/type.go +++ b/pkg/defines/type.go @@ -230,7 +230,7 @@ type SourceScanResKey struct{} type IgnoreForeignKey struct{} -type AlterCopyDedupOpt struct{} +type AlterCopyOpt struct{} // Determine if now is a bg sql. type BgKey struct{} diff --git a/pkg/sql/colexec/multi_update/insert.go b/pkg/sql/colexec/multi_update/insert.go index 88a8a02ccf2d7..11999ad2db4fa 100644 --- a/pkg/sql/colexec/multi_update/insert.go +++ b/pkg/sql/colexec/multi_update/insert.go @@ -135,6 +135,7 @@ func (update *MultiUpdate) insert_table( if updateCtx.TableDef.DbName == "test" { fmt.Println( + "insert table", updateCtx.TableDef.Name, inputBatch.Attrs, len(inputBatch.Vecs), diff --git a/pkg/sql/compile/alter.go b/pkg/sql/compile/alter.go index d55a1d950ac31..a0ec757dc5358 100644 --- a/pkg/sql/compile/alter.go +++ b/pkg/sql/compile/alter.go @@ -17,6 +17,8 @@ package compile import ( "context" "fmt" + "github.com/matrixorigin/matrixone/pkg/sql/colexec/table_clone" + "slices" "github.com/matrixorigin/matrixone/pkg/catalog" "github.com/matrixorigin/matrixone/pkg/common/moerr" @@ -141,8 +143,8 @@ func (s *Scope) AlterTableCopy(c *Compile) error { return err } opt := executor.StatementOption{} - if qry.DedupOpt.SkipPkDedup || len(qry.DedupOpt.SkipUniqueIdxDedup) > 0 { - opt = opt.WithAlterCopyDedupOpt(qry.DedupOpt) + if qry.Options.SkipPkDedup || len(qry.Options.SkipUniqueIdxDedup) > 0 { + opt = opt.WithAlterCopyOpt(qry.Options) } // 4. copy the original table data to the temporary replica table err = c.runSqlWithOptions(qry.InsertTmpDataSql, opt) @@ -156,6 +158,31 @@ func (s *Scope) AlterTableCopy(c *Compile) error { return err } + var ( + cloneSnapshot = &plan.Snapshot{} + ) + + newRel, err := dbSource.Relation(c.proc.Ctx, qry.CopyTableDef.Name, nil) + if err != nil { + c.proc.Error(c.proc.Ctx, "obtain new relation for copy table for alter table", + zap.String("databaseName", dbName), + zap.String("origin tableName", qry.GetTableDef().Name), + zap.String("copy table name", qry.CopyTableDef.Name), + zap.Error(err)) + return err + } + + // copy on write unaffected index table + if err = cowUnaffectedIndexes( + c, dbName, qry.AffectedCols, newRel, qry.TableDef, cloneSnapshot, + ); err != nil { + return err + } + + //// get this snapshot before drop operation + //ts := c.proc.GetTxnOperator().SnapshotTS() + //cloneSnapshot.TS = &ts + // 5. drop original table dropSql := fmt.Sprintf("drop table `%s`.`%s`", dbName, tblName) if err := c.runSqlWithOptions( @@ -191,15 +218,6 @@ func (s *Scope) AlterTableCopy(c *Compile) error { } //6. obtain relation for new tables - newRel, err := dbSource.Relation(c.proc.Ctx, qry.CopyTableDef.Name, nil) - if err != nil { - c.proc.Error(c.proc.Ctx, "obtain new relation for copy table for alter table", - zap.String("databaseName", dbName), - zap.String("origin tableName", qry.GetTableDef().Name), - zap.String("copy table name", qry.CopyTableDef.Name), - zap.Error(err)) - return err - } newId := newRel.GetTableID(c.proc.Ctx) //------------------------------------------------------------------------- @@ -545,3 +563,84 @@ func notifyParentTableFkTableIdChange(c *Compile, fkey *plan.ForeignKeyDef, oldT } return fatherRelation.UpdateConstraint(c.proc.Ctx, oldCt) } + +func cowUnaffectedIndexes( + c *Compile, + dbName string, + affectedCols []string, + newRel engine.Relation, + oriTblDef *plan.TableDef, + cloneSnapshot *plan.Snapshot, +) (err error) { + + var ( + clone *table_clone.TableClone + + oriIdxTblDef *plan.TableDef + oriIdxObjRef *plan.ObjectRef + + newTblDef = newRel.GetTableDef(c.proc.Ctx) + + oriIdxColNameToTblName = make(map[string]string) + newIdxTColNameToTblName = make(map[string]string) + ) + + defer func() { + if clone != nil { + clone.Free(c.proc, false, err) + } + }() + + for _, idxTbl := range oriTblDef.Indexes { + if slices.Index(affectedCols, idxTbl.IndexName) != -1 { + continue + } + + oriIdxColNameToTblName[idxTbl.IndexName] = idxTbl.IndexTableName + } + + for _, idxTbl := range newTblDef.Indexes { + newIdxTColNameToTblName[idxTbl.IndexName] = idxTbl.IndexTableName + } + + cctx := compilerContext{ + ctx: c.proc.Ctx, + defaultDB: dbName, + engine: c.e, + proc: c.proc, + } + + for colName, oriIdxTblName := range oriIdxColNameToTblName { + newIdxTblName, ok := newIdxTColNameToTblName[colName] + if !ok { + continue + } + + oriIdxObjRef, oriIdxTblDef, err = cctx.Resolve(dbName, oriIdxTblName, cloneSnapshot) + + clonePlan := plan.CloneTable{ + CreateTable: nil, + ScanSnapshot: cloneSnapshot, + SrcTableDef: oriIdxTblDef, + SrcObjDef: oriIdxObjRef, + DstDatabaseName: dbName, + DstTableName: newIdxTblName, + } + + if clone, err = constructTableClone(c, &clonePlan); err != nil { + return err + } + + if err = clone.Prepare(c.proc); err != nil { + return err + } + + if _, err = clone.Call(c.proc); err != nil { + return err + } + + clone.Free(c.proc, false, err) + } + + return nil +} diff --git a/pkg/sql/compile/sql_executor.go b/pkg/sql/compile/sql_executor.go index 11611b6240159..066a25e249e04 100644 --- a/pkg/sql/compile/sql_executor.go +++ b/pkg/sql/compile/sql_executor.go @@ -275,7 +275,7 @@ func (exec *txnExecutor) Exec( if v := statementOption.AlterCopyDedupOpt(); v != nil { exec.ctx = context.WithValue(exec.ctx, - defines.AlterCopyDedupOpt{}, v) + defines.AlterCopyOpt{}, v) } receiveAt := time.Now() diff --git a/pkg/sql/plan/bind_insert.go b/pkg/sql/plan/bind_insert.go index 7a619f20eea91..9ec875c9766fb 100644 --- a/pkg/sql/plan/bind_insert.go +++ b/pkg/sql/plan/bind_insert.go @@ -279,16 +279,22 @@ func (builder *QueryBuilder) appendDedupAndMultiUpdateNodesForBindInsert( } } } else { - var skipPkDedup bool - var skipUniqueIdxDedup map[string]bool - if v := builder.compCtx.GetContext().Value(defines.AlterCopyDedupOpt{}); v != nil { - dedupOpt := v.(*plan.AlterCopyDedupOpt) - if dedupOpt.TargetTableName == tableDef.Name { + + var ( + option *plan.AlterCopyOpt + skipPkDedup bool + skipUniqueIdxDedup map[string]bool + ) + + if v := builder.compCtx.GetContext().Value(defines.AlterCopyOpt{}); v != nil { + option = v.(*plan.AlterCopyOpt) + if option.TargetTableName == tableDef.Name { logutil.Info("alter copy dedup exec", zap.String("tableDef", tableDef.Name), - zap.Any("dedupOpt", dedupOpt)) - skipPkDedup = dedupOpt.SkipPkDedup - skipUniqueIdxDedup = dedupOpt.SkipUniqueIdxDedup + zap.Any("option", option), + ) + skipPkDedup = option.SkipPkDedup + skipUniqueIdxDedup = option.SkipUniqueIdxDedup } } @@ -382,6 +388,11 @@ func (builder *QueryBuilder) appendDedupAndMultiUpdateNodesForBindInsert( continue } + if option != nil && option.SkipIndexesCopy[idxDef.IndexName] { + fmt.Println("skip index copy", idxDef.IndexName) + continue + } + idxObjRefs[i], idxTableDefs[i], err = builder.compCtx.ResolveIndexTableByRef(objRef, idxDef.IndexTableName, bindCtx.snapshot) if err != nil { return 0, err diff --git a/pkg/sql/plan/build_alter_table.go b/pkg/sql/plan/build_alter_table.go index bdc54b5f42a34..74e17763559a4 100644 --- a/pkg/sql/plan/build_alter_table.go +++ b/pkg/sql/plan/build_alter_table.go @@ -55,7 +55,7 @@ func skipPkDedup(old, new *TableDef) bool { func skipUniqueIdxDedup(old, new *TableDef) map[string]bool { var skip map[string]bool - + fmt.Println("GG2") // In spite of the O(n^2) complexity, // it's rare for a table to have enough indexes to cause // meaningful performance degradation. @@ -134,9 +134,10 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er AlgorithmType: plan.AlterTable_COPY, } - unsupportedErrorFmt := "unsupported alter option in copy mode: %s" - - affectedCols := make([]string, 0) + var ( + affectedCols = make([]string, 0) + unsupportedErrorFmt = "unsupported alter option in copy mode: %s" + ) for _, spec := range validAlterSpecs { switch option := spec.(type) { @@ -175,11 +176,15 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er affectedCols = append(affectedCols, option.NewColumn.Name.ColName()) case *tree.AlterTableRenameColumnClause: err = RenameColumn(cctx, alterTablePlan, option, alterTableCtx) - //affectedCols + affectedCols = append(affectedCols, option.OldColumnName.ColName()) case *tree.AlterTableAlterColumnClause: err = AlterColumn(cctx, alterTablePlan, option, alterTableCtx) + affectedCols = append(affectedCols, option.ColumnName.String()) case *tree.AlterTableOrderByColumnClause: err = OrderByColumn(cctx, alterTablePlan, option, alterTableCtx) + for _, order := range option.AlterOrderByList { + affectedCols = append(affectedCols, order.Column.ColName()) + } default: return nil, moerr.NewInvalidInputf(ctx, unsupportedErrorFmt, formatTreeNode(option)) @@ -194,18 +199,27 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er return nil, err } alterTablePlan.CreateTmpTableSql = createTmpDdl + alterTablePlan.AffectedCols = affectedCols - dedupOpt := &plan.AlterCopyDedupOpt{ + opt := &plan.AlterCopyOpt{ SkipPkDedup: skipPkDedup(tableDef, copyTableDef), TargetTableName: copyTableDef.Name, SkipUniqueIdxDedup: skipUniqueIdxDedup(tableDef, copyTableDef), } - alterTablePlan.DedupOpt = dedupOpt - logutil.Info("alter copy dedup opt", + opt.SkipIndexesCopy = make(map[string]bool) + for _, idxCol := range tableDef.Indexes { + if slices.Index(affectedCols, idxCol.IndexName) == -1 { + opt.SkipIndexesCopy[idxCol.IndexName] = true + } + } + + alterTablePlan.Options = opt + logutil.Info("alter copy option", zap.Any("originPk", tableDef.Pkey), zap.Any("copyPk", copyTableDef.Pkey), - zap.Any("dedupOpt", dedupOpt)) + zap.Strings("affectedCols", affectedCols), + zap.Any("option", opt)) insertTmpDml, err := buildAlterInsertDataSQL(cctx, alterTableCtx) if err != nil { diff --git a/pkg/sql/plan/build_dml_util.go b/pkg/sql/plan/build_dml_util.go index a6f05c0cf190c..628b42a1276c2 100644 --- a/pkg/sql/plan/build_dml_util.go +++ b/pkg/sql/plan/build_dml_util.go @@ -159,8 +159,8 @@ func buildInsertPlans( var indexSourceColTypes []*plan.Type var fuzzymessage *OriginTableMessageForFuzzy - if v := builder.compCtx.GetContext().Value(defines.AlterCopyDedupOpt{}); v != nil { - dedupOpt := v.(*plan.AlterCopyDedupOpt) + if v := builder.compCtx.GetContext().Value(defines.AlterCopyOpt{}); v != nil { + dedupOpt := v.(*plan.AlterCopyOpt) if dedupOpt.TargetTableName == tableDef.Name { logutil.Info("alter copy dedup exec", zap.String("tableDef", tableDef.Name), diff --git a/pkg/sql/plan/build_table_clone.go b/pkg/sql/plan/build_table_clone.go index c07f026ec0cdf..f9aa41058ace4 100644 --- a/pkg/sql/plan/build_table_clone.go +++ b/pkg/sql/plan/build_table_clone.go @@ -184,7 +184,6 @@ func buildCloneTable( SrcObjDef: srcObj, DstDatabaseName: dstDatabaseName, DstTableName: dstTableName, - SkipMainTable: false, CreateTable: createTablePlan, ScanSnapshot: bindCtx.snapshot, }, diff --git a/pkg/util/executor/options.go b/pkg/util/executor/options.go index 01520df64f298..832d9b7e8e46c 100644 --- a/pkg/util/executor/options.go +++ b/pkg/util/executor/options.go @@ -165,13 +165,13 @@ func (opts StatementOption) WithAccountID(accountID uint32) StatementOption { return opts } -func (opts StatementOption) WithAlterCopyDedupOpt(dedupOpt *plan.AlterCopyDedupOpt) StatementOption { - opts.alterCopyDedupOpt = dedupOpt +func (opts StatementOption) WithAlterCopyOpt(opt *plan.AlterCopyOpt) StatementOption { + opts.alterCopyOpt = opt return opts } -func (opts StatementOption) AlterCopyDedupOpt() *plan.AlterCopyDedupOpt { - return opts.alterCopyDedupOpt +func (opts StatementOption) AlterCopyDedupOpt() *plan.AlterCopyOpt { + return opts.alterCopyOpt } func (opts StatementOption) AccountID() uint32 { diff --git a/pkg/util/executor/types.go b/pkg/util/executor/types.go index 938b8e69272b0..869ec4b70354f 100644 --- a/pkg/util/executor/types.go +++ b/pkg/util/executor/types.go @@ -71,14 +71,14 @@ type Options struct { // StatementOption statement execute option. type StatementOption struct { - waitPolicy lock.WaitPolicy - accountId uint32 - roleId uint32 - userId uint32 - disableLog bool - ignoreForeignKey bool - params []string - alterCopyDedupOpt *plan.AlterCopyDedupOpt + waitPolicy lock.WaitPolicy + accountId uint32 + roleId uint32 + userId uint32 + disableLog bool + ignoreForeignKey bool + params []string + alterCopyOpt *plan.AlterCopyOpt } // Result exec sql result diff --git a/proto/plan.proto b/proto/plan.proto index 5d831070dca3b..f17992594c915 100644 --- a/proto/plan.proto +++ b/proto/plan.proto @@ -1375,10 +1375,11 @@ message AlterRenameColumn { } -message AlterCopyDedupOpt { +message AlterCopyOpt { map skip_unique_idx_dedup = 1; bool skip_pk_dedup = 2; string target_table_name = 3; + map skip_indexes_copy = 4; } message AlterTable { @@ -1422,7 +1423,8 @@ message AlterTable { // into mo_foreign_keys repeated string updateFkSqls = 11; string RawSQL = 12; - AlterCopyDedupOpt dedup_opt = 13; + AlterCopyOpt Options = 13; + repeated string AffectedCols = 14; } message DropTable { @@ -1642,12 +1644,10 @@ message DropCDC { } message CloneTable { - Plan create_table = 1; - Snapshot scan_snapshot = 2; - TableDef src_table_def = 3; - ObjectRef src_obj_def = 4; - string dst_database_name = 5; - string dst_table_name = 6; - bool skip_main_table = 7; - repeated string skip_indexes = 8; + Plan create_table = 1; + Snapshot scan_snapshot = 2; + TableDef src_table_def = 3; + ObjectRef src_obj_def = 4; + string dst_database_name = 5; + string dst_table_name = 6; } \ No newline at end of file From 4470c2608dcb72609aabfeeb04bbabce7219e5d5 Mon Sep 17 00:00:00 2001 From: gouhongshen Date: Tue, 19 Aug 2025 18:01:52 +0800 Subject: [PATCH 4/8] copy index done --- pkg/sql/colexec/multi_update/insert.go | 11 -- pkg/sql/compile/alter.go | 34 +++--- pkg/sql/compile/compile.go | 7 +- pkg/sql/plan/bind_insert.go | 1 - pkg/sql/plan/build_alter_add_column.go | 56 ++++++---- pkg/sql/plan/build_alter_change_column.go | 12 +-- pkg/sql/plan/build_alter_modify_column.go | 27 ++--- pkg/sql/plan/build_alter_rename_column.go | 14 ++- pkg/sql/plan/build_alter_table.go | 66 +++++++++--- pkg/sql/plan/build_ddl.go | 2 +- .../clone/clone_in_alter_table.result | 102 ++++++++++++++++++ .../snapshot/clone/clone_in_alter_table.sql | 77 +++++++++++++ 12 files changed, 318 insertions(+), 91 deletions(-) create mode 100644 test/distributed/cases/snapshot/clone/clone_in_alter_table.result create mode 100644 test/distributed/cases/snapshot/clone/clone_in_alter_table.sql diff --git a/pkg/sql/colexec/multi_update/insert.go b/pkg/sql/colexec/multi_update/insert.go index 11999ad2db4fa..28b0e66f861c2 100644 --- a/pkg/sql/colexec/multi_update/insert.go +++ b/pkg/sql/colexec/multi_update/insert.go @@ -133,17 +133,6 @@ func (update *MultiUpdate) insert_table( insertBatch *batch.Batch, ) (err error) { - if updateCtx.TableDef.DbName == "test" { - fmt.Println( - "insert table", - updateCtx.TableDef.Name, - inputBatch.Attrs, - len(inputBatch.Vecs), - insertBatch.Attrs, - len(insertBatch.Vecs), - ) - } - insertBatch.CleanOnlyData() for insertIdx, inputIdx := range updateCtx.InsertCols { err = insertBatch.Vecs[insertIdx].UnionBatch(inputBatch.Vecs[inputIdx], 0, inputBatch.Vecs[inputIdx].Length(), nil, proc.GetMPool()) diff --git a/pkg/sql/compile/alter.go b/pkg/sql/compile/alter.go index a0ec757dc5358..17b721f0ac04a 100644 --- a/pkg/sql/compile/alter.go +++ b/pkg/sql/compile/alter.go @@ -158,10 +158,7 @@ func (s *Scope) AlterTableCopy(c *Compile) error { return err } - var ( - cloneSnapshot = &plan.Snapshot{} - ) - + //5. obtain relation for new tables newRel, err := dbSource.Relation(c.proc.Ctx, qry.CopyTableDef.Name, nil) if err != nil { c.proc.Error(c.proc.Ctx, "obtain new relation for copy table for alter table", @@ -172,18 +169,14 @@ func (s *Scope) AlterTableCopy(c *Compile) error { return err } - // copy on write unaffected index table + //6. copy on writing unaffected index table if err = cowUnaffectedIndexes( - c, dbName, qry.AffectedCols, newRel, qry.TableDef, cloneSnapshot, + c, dbName, qry.AffectedCols, newRel, qry.TableDef, nil, ); err != nil { return err } - //// get this snapshot before drop operation - //ts := c.proc.GetTxnOperator().SnapshotTS() - //cloneSnapshot.TS = &ts - - // 5. drop original table + // 7. drop original table dropSql := fmt.Sprintf("drop table `%s`.`%s`", dbName, tblName) if err := c.runSqlWithOptions( dropSql, @@ -197,7 +190,7 @@ func (s *Scope) AlterTableCopy(c *Compile) error { return err } - // 5.1 delete all index objects of the table in mo_catalog.mo_indexes + // 7.1 delete all index objects of the table in mo_catalog.mo_indexes if qry.Database != catalog.MO_CATALOG && qry.TableDef.Name != catalog.MO_INDEXES { if qry.GetTableDef().Pkey != nil || len(qry.GetTableDef().Indexes) > 0 { deleteSql := fmt.Sprintf( @@ -217,11 +210,9 @@ func (s *Scope) AlterTableCopy(c *Compile) error { } } - //6. obtain relation for new tables - newId := newRel.GetTableID(c.proc.Ctx) //------------------------------------------------------------------------- - // 7. rename temporary replica table into the original table(Table Id remains unchanged) + // 8. rename temporary replica table into the original table(Table Id remains unchanged) copyTblName := qry.CopyTableDef.Name req := api.NewRenameTableReq( newRel.GetDBID(c.proc.Ctx), @@ -244,7 +235,7 @@ func (s *Scope) AlterTableCopy(c *Compile) error { } //-------------------------------------------------------------------------------------------------------------- { - // 8. invoke reindex for the new table, if it contains ivf index. + // 9. invoke reindex for the new table, if it contains ivf index. multiTableIndexes := make(map[string]*MultiTableIndex) newTableDef := newRel.CopyTableDef(c.proc.Ctx) extra := newRel.GetExtraInfo() @@ -585,10 +576,15 @@ func cowUnaffectedIndexes( newIdxTColNameToTblName = make(map[string]string) ) - defer func() { + releaseClone := func() { if clone != nil { clone.Free(c.proc, false, err) + clone = nil } + } + + defer func() { + releaseClone() }() for _, idxTbl := range oriTblDef.Indexes { @@ -632,14 +628,16 @@ func cowUnaffectedIndexes( } if err = clone.Prepare(c.proc); err != nil { + releaseClone() return err } if _, err = clone.Call(c.proc); err != nil { + releaseClone() return err } - clone.Free(c.proc, false, err) + releaseClone() } return nil diff --git a/pkg/sql/compile/compile.go b/pkg/sql/compile/compile.go index 3e90671c7fe15..a36c6ab0edc26 100644 --- a/pkg/sql/compile/compile.go +++ b/pkg/sql/compile/compile.go @@ -406,7 +406,12 @@ func (c *Compile) run(s *Scope) error { case AlterView: return s.AlterView(c) case AlterTable: - return s.AlterTable(c) + err := s.AlterTable(c) + if err != nil { + x := 0 + x++ + } + return err case RenameTable: return s.RenameTable(c) case DropTable: diff --git a/pkg/sql/plan/bind_insert.go b/pkg/sql/plan/bind_insert.go index 9ec875c9766fb..3653b2a2db319 100644 --- a/pkg/sql/plan/bind_insert.go +++ b/pkg/sql/plan/bind_insert.go @@ -389,7 +389,6 @@ func (builder *QueryBuilder) appendDedupAndMultiUpdateNodesForBindInsert( } if option != nil && option.SkipIndexesCopy[idxDef.IndexName] { - fmt.Println("skip index copy", idxDef.IndexName) continue } diff --git a/pkg/sql/plan/build_alter_add_column.go b/pkg/sql/plan/build_alter_add_column.go index 5163cb7cae557..881b9a4926a0e 100644 --- a/pkg/sql/plan/build_alter_add_column.go +++ b/pkg/sql/plan/build_alter_add_column.go @@ -29,33 +29,39 @@ import ( ) // AddColumn will add a new column to the table. -func AddColumn(ctx CompilerContext, alterPlan *plan.AlterTable, spec *tree.AlterAddCol, alterCtx *AlterTableContext) error { +func AddColumn( + ctx CompilerContext, + alterPlan *plan.AlterTable, + spec *tree.AlterAddCol, + alterCtx *AlterTableContext, +) (bool, error) { + tableDef := alterPlan.CopyTableDef if len(tableDef.Cols) == TableColumnCountLimit { - return moerr.NewErrTooManyFields(ctx.GetContext()) + return false, moerr.NewErrTooManyFields(ctx.GetContext()) } specNewColumn := spec.Column // Check whether added column has existed. newColName := specNewColumn.Name.ColName() if col := FindColumn(tableDef.Cols, newColName); col != nil { - return moerr.NewErrDupFieldName(ctx.GetContext(), newColName) + return false, moerr.NewErrDupFieldName(ctx.GetContext(), newColName) } colType, err := getTypeFromAst(ctx.GetContext(), specNewColumn.Type) if err != nil { - return err + return false, err } if err = checkTypeCapSize(ctx.GetContext(), &colType, newColName); err != nil { - return err + return false, err } newCol, err := buildAddColumnAndConstraint(ctx, alterPlan, specNewColumn, colType) if err != nil { - return err + return false, err } if err = handleAddColumnPosition(ctx.GetContext(), tableDef, newCol, spec.Position); err != nil { - return err + return false, err } if !newCol.Default.NullAbility && len(newCol.Default.OriginString) == 0 { @@ -65,7 +71,7 @@ func AddColumn(ctx CompilerContext, alterPlan *plan.AlterTable, spec *tree.Alter } } - return nil + return newCol.Primary, nil } // checkModifyNewColumn Check the position information of the newly formed column and place the new column in the target location @@ -331,39 +337,45 @@ func findPositionRelativeColumn( } // AddColumn will add a new column to the table. -func DropColumn(ctx CompilerContext, alterPlan *plan.AlterTable, colName string, alterCtx *AlterTableContext) error { +func DropColumn( + ctx CompilerContext, + alterPlan *plan.AlterTable, + colName string, + alterCtx *AlterTableContext, +) (bool, error) { + tableDef := alterPlan.CopyTableDef // Check whether original column has existed. - col := FindColumn(tableDef.Cols, colName) - if col == nil || col.Hidden { - return moerr.NewErrCantDropFieldOrKey(ctx.GetContext(), colName) + column := FindColumn(tableDef.Cols, colName) + if column == nil || column.Hidden { + return false, moerr.NewErrCantDropFieldOrKey(ctx.GetContext(), colName) } // We only support dropping column with single-value none Primary Key index covered now. if err := handleDropColumnWithIndex(ctx.GetContext(), colName, tableDef); err != nil { - return err + return column.Primary, err } if err := handleDropColumnWithPrimaryKey(ctx.GetContext(), colName, tableDef); err != nil { - return err + return column.Primary, err } // Check the column with foreign key. - if err := checkDropColumnWithForeignKey(ctx, tableDef, col); err != nil { - return err + if err := checkDropColumnWithForeignKey(ctx, tableDef, column); err != nil { + return column.Primary, err } if err := checkVisibleColumnCnt(ctx.GetContext(), tableDef, 0, 1); err != nil { - return err + return column.Primary, err } - if err := handleDropColumnPosition(ctx.GetContext(), tableDef, col); err != nil { - return err + if err := handleDropColumnPosition(ctx.GetContext(), tableDef, column); err != nil { + return column.Primary, err } - if err := handleDropColumnWithClusterBy(ctx.GetContext(), tableDef, col); err != nil { - return err + if err := handleDropColumnWithClusterBy(ctx.GetContext(), tableDef, column); err != nil { + return column.Primary, err } delete(alterCtx.alterColMap, colName) - return nil + return column.Primary, nil } func checkVisibleColumnCnt(ctx context.Context, tblInfo *TableDef, addCount, dropCount int) error { diff --git a/pkg/sql/plan/build_alter_change_column.go b/pkg/sql/plan/build_alter_change_column.go index 9a233a3636328..44210f5a67d31 100644 --- a/pkg/sql/plan/build_alter_change_column.go +++ b/pkg/sql/plan/build_alter_change_column.go @@ -34,7 +34,7 @@ func ChangeColumn( alterPlan *plan.AlterTable, spec *tree.AlterTableChangeColumnClause, alterCtx *AlterTableContext, -) error { +) (bool, error) { tableDef := alterPlan.CopyTableDef ctx := cctx.GetContext() @@ -50,7 +50,7 @@ func ChangeColumn( // Check whether original column has existed. oCol := FindColumn(tableDef.Cols, oldColName) if oCol == nil || oCol.Hidden { - return moerr.NewBadFieldError( + return false, moerr.NewBadFieldError( ctx, oldColNameOrigin, alterPlan.TableDef.Name, @@ -61,7 +61,7 @@ func ChangeColumn( // you need to first check if the new name already exists. if newColName != oldColName && FindColumn(tableDef.Cols, newColName) != nil { - return moerr.NewErrDupFieldName(ctx, newColName) + return false, moerr.NewErrDupFieldName(ctx, newColName) } //change the name of the column in the foreign key constraint @@ -73,11 +73,11 @@ func ChangeColumn( newColNameOrigin)...) } - err := updateNewColumnInTableDef( + pkAffected, err := updateNewColumnInTableDef( cctx, tableDef, oCol, specNewColumn, spec.Position, ) if err != nil { - return err + return false, err } updateClusterByInTableDef(ctx, tableDef, newColName, oldColName) @@ -92,7 +92,7 @@ func ChangeColumn( tmpCol.Name = newColName tmpCol.OriginName = newColNameOrigin } - return nil + return pkAffected, nil } // buildColumnAndConstraint Build the changed new column definition, and check its column level integrity constraints, diff --git a/pkg/sql/plan/build_alter_modify_column.go b/pkg/sql/plan/build_alter_modify_column.go index 90b0ef1e4717f..955e85f668dfa 100644 --- a/pkg/sql/plan/build_alter_modify_column.go +++ b/pkg/sql/plan/build_alter_modify_column.go @@ -31,38 +31,38 @@ func updateNewColumnInTableDef( oCol *ColDef, nColSpec *tree.ColumnTableDef, nPos *tree.ColumnPosition, -) error { +) (bool, error) { ctx := cctx.GetContext() nTy, err := getTypeFromAst(ctx, nColSpec.Type) if err != nil { - return err + return false, err } if err = checkTypeCapSize(ctx, &nTy, nColSpec.Name.ColName()); err != nil { - return err + return false, err } // check if the type of the new column is compatible with the old column if err = checkChangeTypeCompatible(ctx, &oCol.Typ, &nTy); err != nil { - return err + return false, err } nCol, err := buildColumnAndConstraint(cctx, tableDef, oCol, nColSpec, nTy) if err != nil { - return err + return false, err } // Check new column foreign key constraints if err = checkColumnForeignkeyConstraint(cctx, tableDef, oCol, nCol); err != nil { - return err + return false, err } if err = modifyColPosition(ctx, tableDef, oCol, nCol, nPos); err != nil { - return err + return false, err } - return nil + return nCol.Primary, nil } @@ -74,7 +74,7 @@ func ModifyColumn( alterPlan *plan.AlterTable, spec *tree.AlterTableModifyColumnClause, alterCtx *AlterTableContext, -) error { +) (bool, error) { tableDef := alterPlan.CopyTableDef nColSpec := spec.NewColumn nPos := spec.Position @@ -83,15 +83,16 @@ func ModifyColumn( // Check whether added column has existed. oCol := FindColumn(tableDef.Cols, nColName) if oCol == nil || oCol.Hidden { - return moerr.NewBadFieldError( + return false, moerr.NewBadFieldError( cctx.GetContext(), nColSpec.Name.ColNameOrigin(), alterPlan.TableDef.Name, ) } - err := updateNewColumnInTableDef(cctx, tableDef, oCol, nColSpec, nPos) + + pkAffected, err := updateNewColumnInTableDef(cctx, tableDef, oCol, nColSpec, nPos) if err != nil { - return err + return false, err } alterCtx.alterColMap[nColName] = selectExpr{ @@ -99,7 +100,7 @@ func ModifyColumn( sexprStr: oCol.Name, } - return nil + return pkAffected, nil } // modifyColPosition Check the position information of the newly formed column diff --git a/pkg/sql/plan/build_alter_rename_column.go b/pkg/sql/plan/build_alter_rename_column.go index 0bc073e6e94f8..62bae922e9e15 100644 --- a/pkg/sql/plan/build_alter_rename_column.go +++ b/pkg/sql/plan/build_alter_rename_column.go @@ -204,7 +204,13 @@ func addRenameContextToAlterCtx( // AlterColumn ALTER ... SET DEFAULT or ALTER ... DROP DEFAULT specify a new default value for a column or remove the old default value, respectively. // If the old default is removed and the column can be NULL, the new default is NULL. If the column cannot be NULL, MySQL assigns a default value -func AlterColumn(ctx CompilerContext, alterPlan *plan.AlterTable, spec *tree.AlterTableAlterColumnClause, alterCtx *AlterTableContext) error { +func AlterColumn( + ctx CompilerContext, + alterPlan *plan.AlterTable, + spec *tree.AlterTableAlterColumnClause, + alterCtx *AlterTableContext, +) (bool, error) { + tableDef := alterPlan.CopyTableDef // get the original column name @@ -213,7 +219,7 @@ func AlterColumn(ctx CompilerContext, alterPlan *plan.AlterTable, spec *tree.Alt // Check whether original column has existed. originalCol := FindColumn(tableDef.Cols, originalColName) if originalCol == nil || originalCol.Hidden { - return moerr.NewBadFieldError(ctx.GetContext(), spec.ColumnName.ColNameOrigin(), alterPlan.TableDef.Name) + return false, moerr.NewBadFieldError(ctx.GetContext(), spec.ColumnName.ColNameOrigin(), alterPlan.TableDef.Name) } for i, col := range tableDef.Cols { @@ -226,7 +232,7 @@ func AlterColumn(ctx CompilerContext, alterPlan *plan.AlterTable, spec *tree.Alt }() defaultValue, err := buildDefaultExpr(tmpColumnDef, colDef.Typ, ctx.GetProcess()) if err != nil { - return err + return false, err } defaultValue.NullAbility = colDef.Default.NullAbility colDef.Default = defaultValue @@ -238,7 +244,7 @@ func AlterColumn(ctx CompilerContext, alterPlan *plan.AlterTable, spec *tree.Alt break } } - return nil + return originalCol.Primary, nil } // OrderByColumn Currently, Mo only performs semantic checks on alter table order by diff --git a/pkg/sql/plan/build_alter_table.go b/pkg/sql/plan/build_alter_table.go index 74e17763559a4..0f508cf589815 100644 --- a/pkg/sql/plan/build_alter_table.go +++ b/pkg/sql/plan/build_alter_table.go @@ -55,7 +55,6 @@ func skipPkDedup(old, new *TableDef) bool { func skipUniqueIdxDedup(old, new *TableDef) map[string]bool { var skip map[string]bool - fmt.Println("GG2") // In spite of the O(n^2) complexity, // it's rare for a table to have enough indexes to cause // meaningful performance degradation. @@ -135,17 +134,28 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er } var ( - affectedCols = make([]string, 0) + pkAffected bool + + affectedCols = make([]string, 0, len(tableDef.Indexes)) unsupportedErrorFmt = "unsupported alter option in copy mode: %s" + hasFakePK = catalog.IsFakePkName(tableDef.Pkey.PkeyColName) ) + affectedAllIdxCols := func() { + hasFakePK = false + affectedCols = affectedCols[:0] + for _, idxDef := range tableDef.Indexes { + affectedCols = append(affectedCols, idxDef.IndexName) + } + } + for _, spec := range validAlterSpecs { switch option := spec.(type) { case *tree.AlterOptionAdd: switch optionAdd := option.Def.(type) { case *tree.PrimaryKeyIndex: err = AddPrimaryKey(cctx, alterTablePlan, optionAdd, alterTableCtx) - affectedCols = append(affectedCols, optionAdd.Name) + affectedAllIdxCols() default: // column adding is handled in *tree.AlterAddCol // various indexes\fks adding are handled in inplace mode. @@ -155,30 +165,30 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er case *tree.AlterOptionDrop: switch option.Typ { case tree.AlterTableDropColumn: - err = DropColumn(cctx, alterTablePlan, string(option.Name), alterTableCtx) + pkAffected, err = DropColumn(cctx, alterTablePlan, string(option.Name), alterTableCtx) affectedCols = append(affectedCols, string(option.Name)) case tree.AlterTableDropPrimaryKey: err = DropPrimaryKey(cctx, alterTablePlan, alterTableCtx) - affectedCols = append(affectedCols, string(option.Name)) + affectedAllIdxCols() default: // various indexes\fks dropping are handled in inplace mode. return nil, moerr.NewInvalidInputf(ctx, unsupportedErrorFmt, formatTreeNode(option)) } case *tree.AlterAddCol: - err = AddColumn(cctx, alterTablePlan, option, alterTableCtx) + pkAffected, err = AddColumn(cctx, alterTablePlan, option, alterTableCtx) affectedCols = append(affectedCols, option.Column.Name.ColName()) case *tree.AlterTableModifyColumnClause: - err = ModifyColumn(cctx, alterTablePlan, option, alterTableCtx) + pkAffected, err = ModifyColumn(cctx, alterTablePlan, option, alterTableCtx) affectedCols = append(affectedCols, option.NewColumn.Name.ColName()) case *tree.AlterTableChangeColumnClause: - err = ChangeColumn(cctx, alterTablePlan, option, alterTableCtx) + pkAffected, err = ChangeColumn(cctx, alterTablePlan, option, alterTableCtx) affectedCols = append(affectedCols, option.NewColumn.Name.ColName()) case *tree.AlterTableRenameColumnClause: err = RenameColumn(cctx, alterTablePlan, option, alterTableCtx) affectedCols = append(affectedCols, option.OldColumnName.ColName()) case *tree.AlterTableAlterColumnClause: - err = AlterColumn(cctx, alterTablePlan, option, alterTableCtx) + pkAffected, err = AlterColumn(cctx, alterTablePlan, option, alterTableCtx) affectedCols = append(affectedCols, option.ColumnName.String()) case *tree.AlterTableOrderByColumnClause: err = OrderByColumn(cctx, alterTablePlan, option, alterTableCtx) @@ -198,7 +208,13 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er if err != nil { return nil, err } + alterTablePlan.CreateTmpTableSql = createTmpDdl + + if pkAffected { + affectedAllIdxCols() + } + alterTablePlan.AffectedCols = affectedCols opt := &plan.AlterCopyOpt{ @@ -221,7 +237,7 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er zap.Strings("affectedCols", affectedCols), zap.Any("option", opt)) - insertTmpDml, err := buildAlterInsertDataSQL(cctx, alterTableCtx) + insertTmpDml, err := buildAlterInsertDataSQL(cctx, alterTableCtx, hasFakePK) if err != nil { return nil, err } @@ -245,7 +261,12 @@ func buildAlterTableCopy(stmt *tree.AlterTable, cctx CompilerContext) (*Plan, er var ID atomic.Int64 -func buildAlterInsertDataSQL(ctx CompilerContext, alterCtx *AlterTableContext) (string, error) { +func buildAlterInsertDataSQL( + ctx CompilerContext, + alterCtx *AlterTableContext, + hasFakePK bool, +) (string, error) { + schemaName := alterCtx.schemaName originTableName := alterCtx.originTableName copyTableName := alterCtx.copyTableName @@ -274,13 +295,30 @@ func buildAlterInsertDataSQL(ctx CompilerContext, alterCtx *AlterTableContext) ( } } + if hasFakePK { + // why select fake pk col here? + // we want to clone unaffected indexes to avoid deep copy table. + // but if the primary table has tombstones, the re-generated fake pk column + // will be mismatched with these index tables, the shallow copy won't work. + // so we need to select these fake pks into the new table. + // + // example: + // create table t1(a int, b int, index(b)); + // insert into t1 select *, * from generate_series(1,1000*100)g; + // delete from t1 where a = 1; + // alter table t1 add column c int; + // delete from t1 where a = 2; + // fails, cannot find this row by join index table and the primary table. + // + str := fmt.Sprintf(", `%s`", catalog.FakePrimaryKeyColName) + insertBuffer.WriteString(str) + selectBuffer.WriteString(str) + } + insertSQL := fmt.Sprintf("INSERT INTO `%s`.`%s` (%s) SELECT %s FROM `%s`.`%s`", formatStr(schemaName), formatStr(copyTableName), insertBuffer.String(), selectBuffer.String(), formatStr(schemaName), formatStr(originTableName)) - fmt.Println(ID.Add(1), insertSQL) - fmt.Println() - return insertSQL, nil } diff --git a/pkg/sql/plan/build_ddl.go b/pkg/sql/plan/build_ddl.go index 0e2b3dafb0f70..2d9e56e123a63 100644 --- a/pkg/sql/plan/build_ddl.go +++ b/pkg/sql/plan/build_ddl.go @@ -4100,7 +4100,7 @@ func buildAlterTableInplace(stmt *tree.AlterTable, ctx CompilerContext) (*Plan, } // update new column info to copy_table_def - err := updateNewColumnInTableDef( + _, err := updateNewColumnInTableDef( ctx, alterTable.CopyTableDef, FindColumn(tableDef.Cols, opt.NewColumn.Name.ColName()), diff --git a/test/distributed/cases/snapshot/clone/clone_in_alter_table.result b/test/distributed/cases/snapshot/clone/clone_in_alter_table.result new file mode 100644 index 0000000000000..6b962e70e3178 --- /dev/null +++ b/test/distributed/cases/snapshot/clone/clone_in_alter_table.result @@ -0,0 +1,102 @@ +drop database if exists test; +create database test; +use test; +create table t1(a int, b int, c int, d int, e int, index(b), index compIdx(c, d), unique index(e)); +insert into t1 select *,*,*,*,* from generate_series(1, 100*100*10)g; +delete from t1 where a in (1, 1111, 11111); +select * from t1 where a in (1, 1111, 11111); +a b c d e +select count(*) from t1; +count(*) +99997 +alter table t1 add column f int; +select count(*) from t1; +count(*) +99997 +delete from t1 where a in (2, 2222, 22222); +select * from t1 where a in (2, 2222, 22222); +a b c d e +select a from t1 where b = 9; +a +9 +select a from t1 where c = 9000 and d = 9000; +a +9000 +select a from t1 where e = 27000; +a +27000 +alter table t1 drop column f; +select a from t1 where b = 9; +a +9 +select a from t1 where c = 9000 and d = 9000; +a +9000 +select a from t1 where e = 27000; +a +27000 +alter table t1 modify column a int primary key; +select a from t1 where b = 9; +a +9 +select a from t1 where c = 9000 and d = 9000; +a +9000 +select a from t1 where e = 27000; +a +27000 +alter table t1 drop primary key; +select a from t1 where b = 9; +a +9 +select a from t1 where c = 9000 and d = 9000; +a +9000 +select a from t1 where e = 27000; +a +27000 +alter table t1 add primary key(a); +select a from t1 where b = 9; +a +9 +select a from t1 where c = 9000 and d = 9000; +a +9000 +select a from t1 where e = 27000; +a +27000 +alter table t1 drop primary key; +alter table t1 modify b double; +select a from t1 where b = 9; +a +9 +select a from t1 where c = 9000 and d = 9000; +a +9000 +select a from t1 where e = 27000; +a +27000 +alter table t1 rename column b to b_2; +select a from t1 where b_2 = 9; +a +9 +select a from t1 where c = 9000 and d = 9000; +a +9000 +select a from t1 where e = 27000; +a +27000 +delete from t1 where a mod 19 = 0; +select * from t1 where b_2 in (1, 10, 19, 38, 100); +a b_2 c d e +10 10.0 10 10 10 +100 100.0 100 100 100 +select * from t1 where c in (1, 10, 19, 38, 100) and d in (1, 10, 19, 38, 100); +a b_2 c d e +10 10.0 10 10 10 +100 100.0 100 100 100 +select * from t1 where e in (1, 10, 19, 38, 100); +a b_2 c d e +10 10.0 10 10 10 +100 100.0 100 100 100 +drop database test; \ No newline at end of file diff --git a/test/distributed/cases/snapshot/clone/clone_in_alter_table.sql b/test/distributed/cases/snapshot/clone/clone_in_alter_table.sql new file mode 100644 index 0000000000000..d51a688891863 --- /dev/null +++ b/test/distributed/cases/snapshot/clone/clone_in_alter_table.sql @@ -0,0 +1,77 @@ +drop database if exists test; +create database test; +use test; + +create table t1(a int, b int, c int, d int, e int, index(b), index compIdx(c, d), unique index(e)); + +-- test 1: add normal col +insert into t1 select *,*,*,*,* from generate_series(1, 100*100*10)g; +delete from t1 where a in (1, 1111, 11111); +select * from t1 where a in (1, 1111, 11111); + +select count(*) from t1; +alter table t1 add column f int; +select count(*) from t1; + +delete from t1 where a in (2, 2222, 22222); +select * from t1 where a in (2, 2222, 22222); + +-- index table scan +select a from t1 where b = 9; +select a from t1 where c = 9000 and d = 9000; +select a from t1 where e = 27000; + + +-- test2: drop normal column; +alter table t1 drop column f; +-- index table scan +select a from t1 where b = 9; +select a from t1 where c = 9000 and d = 9000; +select a from t1 where e = 27000; + + +-- test3: modify normal column to pk +alter table t1 modify column a int primary key; +-- index table scan +select a from t1 where b = 9; +select a from t1 where c = 9000 and d = 9000; +select a from t1 where e = 27000; + +-- test4: modify pk column to normal column +alter table t1 drop primary key; +-- index table scan +select a from t1 where b = 9; +select a from t1 where c = 9000 and d = 9000; +select a from t1 where e = 27000; + +-- test5: add primary key column +alter table t1 add primary key(a); +-- index table scan +select a from t1 where b = 9; +select a from t1 where c = 9000 and d = 9000; +select a from t1 where e = 27000; +alter table t1 drop primary key; + + +-- test6: modify index column type +alter table t1 modify b double; +-- index table scan +select a from t1 where b = 9; +select a from t1 where c = 9000 and d = 9000; +select a from t1 where e = 27000; + +-- test7: rename index column +alter table t1 rename column b to b_2; +-- index table scan +select a from t1 where b_2 = 9; +select a from t1 where c = 9000 and d = 9000; +select a from t1 where e = 27000; + +-- index scan +delete from t1 where a mod 19 = 0; +select * from t1 where b_2 in (1, 10, 19, 38, 100); +select * from t1 where c in (1, 10, 19, 38, 100) and d in (1, 10, 19, 38, 100); +select * from t1 where e in (1, 10, 19, 38, 100); + + +drop database test; \ No newline at end of file From 32540e66a1d8201da9de389d11317dd86d3f3e3f Mon Sep 17 00:00:00 2001 From: gouhongshen Date: Tue, 19 Aug 2025 18:40:39 +0800 Subject: [PATCH 5/8] fix sca and free clone --- pkg/common/moerr/error.go | 5 ---- pkg/sql/compile/alter.go | 2 ++ pkg/sql/compile/compile.go | 7 +----- pkg/sql/plan/build_table_clone.go | 40 ++----------------------------- 4 files changed, 5 insertions(+), 49 deletions(-) diff --git a/pkg/common/moerr/error.go b/pkg/common/moerr/error.go index 2cbfd5a58dca5..8305bf2791d86 100644 --- a/pkg/common/moerr/error.go +++ b/pkg/common/moerr/error.go @@ -20,7 +20,6 @@ import ( "encoding/hex" "fmt" "io" - "strings" "sync/atomic" moerrpb "github.com/matrixorigin/matrixone/pkg/pb/moerr" @@ -1021,10 +1020,6 @@ func NewNotLeaseHolder(ctx context.Context, holderId uint64) *Error { } func NewNoSuchTable(ctx context.Context, db, tbl string) *Error { - if strings.Contains(tbl, "index") { - x := 0 - x++ - } return newError(ctx, ErrNoSuchTable, db, tbl) } diff --git a/pkg/sql/compile/alter.go b/pkg/sql/compile/alter.go index 17b721f0ac04a..670c0791304a9 100644 --- a/pkg/sql/compile/alter.go +++ b/pkg/sql/compile/alter.go @@ -17,6 +17,7 @@ package compile import ( "context" "fmt" + "github.com/matrixorigin/matrixone/pkg/common/reuse" "github.com/matrixorigin/matrixone/pkg/sql/colexec/table_clone" "slices" @@ -579,6 +580,7 @@ func cowUnaffectedIndexes( releaseClone := func() { if clone != nil { clone.Free(c.proc, false, err) + reuse.Free[table_clone.TableClone](clone, nil) clone = nil } } diff --git a/pkg/sql/compile/compile.go b/pkg/sql/compile/compile.go index a36c6ab0edc26..3e90671c7fe15 100644 --- a/pkg/sql/compile/compile.go +++ b/pkg/sql/compile/compile.go @@ -406,12 +406,7 @@ func (c *Compile) run(s *Scope) error { case AlterView: return s.AlterView(c) case AlterTable: - err := s.AlterTable(c) - if err != nil { - x := 0 - x++ - } - return err + return s.AlterTable(c) case RenameTable: return s.RenameTable(c) case DropTable: diff --git a/pkg/sql/plan/build_table_clone.go b/pkg/sql/plan/build_table_clone.go index f9aa41058ace4..4287648855a88 100644 --- a/pkg/sql/plan/build_table_clone.go +++ b/pkg/sql/plan/build_table_clone.go @@ -35,15 +35,9 @@ func buildCloneTable( ) (*Plan, error) { var ( - err error - - //id int32 - + err error srcTblDef *TableDef - - srcObj *ObjectRef - - //query *Query + srcObj *ObjectRef createTablePlan *Plan @@ -103,32 +97,11 @@ func buildCloneTable( dstTableName = stmt.CreateTable.Table.ObjectName.String() dstDatabaseName = stmt.CreateTable.Table.SchemaName.String() - //dstTblDef := DeepCopyTableDef(srcTblDef, true) - //dstTblDef.Name = stmt.CreateTable.Table.ObjectName.String() - //dstTblDef.DbName = stmt.CreateTable.Table.SchemaName.String() if dstDatabaseName == "" { dstDatabaseName = ctx.DefaultDatabase() } - //node := &plan.Node{ - // ObjRef: srcObj, - // NodeType: plan.Node_TABLE_CLONE, - // TableDef: srcTblDef, - // ScanSnapshot: bindCtx.snapshot, - // //InsertCtx: &plan.InsertCtx{ - // // TableDef: dstTblDef, - // //}, - // BindingTags: []int32{builder.genNewTag()}, - // Stats: &plan.Stats{ - // ForceOneCN: true, - // }, - //} - - //builder.qry.Steps = append(builder.qry.Steps, id) - //builder.qry.Nodes[0].Stats.ForceOneCN = true - //builder.skipStats = true - var ( opAccount uint32 dstAccount uint32 @@ -167,13 +140,6 @@ func buildCloneTable( return nil, err } - //if query, err = builder.createQuery(); err != nil { - // return nil, err - //} - - //createTablePlan.Plan.(*plan.Plan_Ddl).Ddl.Query = query - //createTablePlan.Plan.(*plan.Plan_Ddl).Ddl.DdlType = plan.DataDefinition_CREATE_TABLE_WITH_CLONE - return &Plan{ Plan: &plan.Plan_Ddl{ Ddl: &plan.DataDefinition{ @@ -191,8 +157,6 @@ func buildCloneTable( }, }, }, nil - - //return createTablePlan, nil } func checkPrivilege( From fdf736c86a89b22889204ff841ba9766e1ef2f84 Mon Sep 17 00:00:00 2001 From: gouhongshen Date: Wed, 20 Aug 2025 10:25:59 +0800 Subject: [PATCH 6/8] add bvt --- .../snapshot/clone/clone_in_alter_table.result | 17 +++++++++++++++++ .../snapshot/clone/clone_in_alter_table.sql | 5 +++++ 2 files changed, 22 insertions(+) diff --git a/test/distributed/cases/snapshot/clone/clone_in_alter_table.result b/test/distributed/cases/snapshot/clone/clone_in_alter_table.result index 6b962e70e3178..c60638aa90521 100644 --- a/test/distributed/cases/snapshot/clone/clone_in_alter_table.result +++ b/test/distributed/cases/snapshot/clone/clone_in_alter_table.result @@ -99,4 +99,21 @@ select * from t1 where e in (1, 10, 19, 38, 100); a b_2 c d e 10 10.0 10 10 10 100 100.0 100 100 100 +update t1 set a = a + 1 where c in (8,88,888,8888,88888); +select * from t1 where c in (8,88,888,8888,88888); +a b_2 c d e +9 8.0 8 8 8 +89 88.0 88 88 88 +889 888.0 888 888 888 +8889 8888.0 8888 8888 8888 +88889 88888.0 88888 88888 88888 +alter table t1 add column f int; +update t1 set a = a + 1 where c in (8,88,888,8888,88888); +select * from t1 where c in (8,88,888,8888,88888); +a b_2 c d e f +10 8.0 8 8 8 null +90 88.0 88 88 88 null +890 888.0 888 888 888 null +8890 8888.0 8888 8888 8888 null +88890 88888.0 88888 88888 88888 null drop database test; \ No newline at end of file diff --git a/test/distributed/cases/snapshot/clone/clone_in_alter_table.sql b/test/distributed/cases/snapshot/clone/clone_in_alter_table.sql index d51a688891863..9a05b770405c4 100644 --- a/test/distributed/cases/snapshot/clone/clone_in_alter_table.sql +++ b/test/distributed/cases/snapshot/clone/clone_in_alter_table.sql @@ -73,5 +73,10 @@ select * from t1 where b_2 in (1, 10, 19, 38, 100); select * from t1 where c in (1, 10, 19, 38, 100) and d in (1, 10, 19, 38, 100); select * from t1 where e in (1, 10, 19, 38, 100); +update t1 set a = a + 1 where c in (8,88,888,8888,88888); +select * from t1 where c in (8,88,888,8888,88888); +alter table t1 add column f int; +update t1 set a = a + 1 where c in (8,88,888,8888,88888); +select * from t1 where c in (8,88,888,8888,88888); drop database test; \ No newline at end of file From a7775a3fecde85826ba0811dcc6cea1d38f359d8 Mon Sep 17 00:00:00 2001 From: gouhongshen Date: Wed, 27 Aug 2025 13:56:43 +0800 Subject: [PATCH 7/8] update bvt --- pkg/sql/colexec/table_clone/table_clone.go | 1 + .../clone/clone_in_alter_table.result | 19 +++++++++++++++++++ .../snapshot/clone/clone_in_alter_table.sql | 16 ++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/pkg/sql/colexec/table_clone/table_clone.go b/pkg/sql/colexec/table_clone/table_clone.go index e7c85cdbf2772..8471a4a59c8d0 100644 --- a/pkg/sql/colexec/table_clone/table_clone.go +++ b/pkg/sql/colexec/table_clone/table_clone.go @@ -18,6 +18,7 @@ import ( "bytes" "context" "fmt" + "github.com/matrixorigin/matrixone/pkg/common/moerr" "github.com/matrixorigin/matrixone/pkg/common/mpool" "github.com/matrixorigin/matrixone/pkg/common/reuse" diff --git a/test/distributed/cases/snapshot/clone/clone_in_alter_table.result b/test/distributed/cases/snapshot/clone/clone_in_alter_table.result index c60638aa90521..f1cece83f0e05 100644 --- a/test/distributed/cases/snapshot/clone/clone_in_alter_table.result +++ b/test/distributed/cases/snapshot/clone/clone_in_alter_table.result @@ -116,4 +116,23 @@ a b_2 c d e f 890 888.0 888 888 888 null 8890 8888.0 8888 8888 8888 null 88890 88888.0 88888 88888 88888 null +set experimental_fulltext_index=1; +set experimental_ivf_index = 1; +set experimental_hnsw_index = 1; +create table t2 (a bigint primary key auto_increment, b vecf32(3), c vecf32(3), d text, index ivfIdx using ivfflat(b) lists=5 op_type "vector_l2_ops", index hnswIdx using hnsw(c) op_type 'vector_l2_ops', fulltext(d)); +insert into t2(b,c,d) select CONCAT('[',FLOOR(RAND() * 9),',', FLOOR(RAND() * 9), ',', FLOOR(RAND() * 9),']'), CONCAT('[',FLOOR(RAND() * 9),',', FLOOR(RAND() * 9), ',', FLOOR(RAND() * 9),']'), * from generate_series(1, 1000)g; +insert into t2(b,c,d) values("[1,1,1]","[1,1,1]","111"),("[9,9,9]","[9,9,9]","999"); +alter table t2 add column f int; +select floor(max(l2_distance(b, "[1,1,1]"))) from t2; +floor(max(l2_distance(b, [1,1,1]))) +13.0 +select floor(max(l2_distance(c, "[1,1,1]"))) from t2; +floor(max(l2_distance(c, [1,1,1]))) +13.0 +select a,d from t2 where match(d) against('234' in boolean mode); +a d +234 234 +set experimental_fulltext_index=0; +set experimental_ivf_index = 0; +set experimental_hnsw_index = 0; drop database test; \ No newline at end of file diff --git a/test/distributed/cases/snapshot/clone/clone_in_alter_table.sql b/test/distributed/cases/snapshot/clone/clone_in_alter_table.sql index 9a05b770405c4..588d3930fe20d 100644 --- a/test/distributed/cases/snapshot/clone/clone_in_alter_table.sql +++ b/test/distributed/cases/snapshot/clone/clone_in_alter_table.sql @@ -79,4 +79,20 @@ alter table t1 add column f int; update t1 set a = a + 1 where c in (8,88,888,8888,88888); select * from t1 where c in (8,88,888,8888,88888); +set experimental_fulltext_index=1; +set experimental_ivf_index = 1; +set experimental_hnsw_index = 1; +create table t2 (a bigint primary key auto_increment, b vecf32(3), c vecf32(3), d text, index ivfIdx using ivfflat(b) lists=5 op_type "vector_l2_ops", index hnswIdx using hnsw(c) op_type 'vector_l2_ops', fulltext(d)); +insert into t2(b,c,d) select CONCAT('[',FLOOR(RAND() * 9),',', FLOOR(RAND() * 9), ',', FLOOR(RAND() * 9),']'), CONCAT('[',FLOOR(RAND() * 9),',', FLOOR(RAND() * 9), ',', FLOOR(RAND() * 9),']'), * from generate_series(1, 1000)g; +insert into t2(b,c,d) values("[1,1,1]","[1,1,1]","111"),("[9,9,9]","[9,9,9]","999"); + +alter table t2 add column f int; +select floor(max(l2_distance(b, "[1,1,1]"))) from t2; +select floor(max(l2_distance(c, "[1,1,1]"))) from t2; +select a,d from t2 where match(d) against('234' in boolean mode); + +set experimental_fulltext_index=0; +set experimental_ivf_index = 0; +set experimental_hnsw_index = 0; + drop database test; \ No newline at end of file From 64884a3d7995dc189fdf854dcf03129ccdcdce4c Mon Sep 17 00:00:00 2001 From: gouhongshen Date: Thu, 28 Aug 2025 10:17:52 +0800 Subject: [PATCH 8/8] merge main --- pkg/pb/plan/plan.pb.go | 2496 ++++++++++++++++++++++++++-------------- 1 file changed, 1635 insertions(+), 861 deletions(-) diff --git a/pkg/pb/plan/plan.pb.go b/pkg/pb/plan/plan.pb.go index be495c44c2c07..e481a1930f10d 100644 --- a/pkg/pb/plan/plan.pb.go +++ b/pkg/pb/plan/plan.pb.go @@ -8663,6 +8663,7 @@ type DataDefinition struct { // *DataDefinition_DropPitr // *DataDefinition_CreateCdc // *DataDefinition_DropCdc + // *DataDefinition_CloneTable Definition isDataDefinition_Definition `protobuf_oneof:"definition"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -8777,6 +8778,9 @@ type DataDefinition_CreateCdc struct { type DataDefinition_DropCdc struct { DropCdc *DropCDC `protobuf:"bytes,103,opt,name=drop_cdc,json=dropCdc,proto3,oneof" json:"drop_cdc,omitempty"` } +type DataDefinition_CloneTable struct { + CloneTable *CloneTable `protobuf:"bytes,104,opt,name=clone_table,json=cloneTable,proto3,oneof" json:"clone_table,omitempty"` +} func (*DataDefinition_CreateDatabase) isDataDefinition_Definition() {} func (*DataDefinition_AlterDatabase) isDataDefinition_Definition() {} @@ -8801,6 +8805,7 @@ func (*DataDefinition_CreatePitr) isDataDefinition_Definition() {} func (*DataDefinition_DropPitr) isDataDefinition_Definition() {} func (*DataDefinition_CreateCdc) isDataDefinition_Definition() {} func (*DataDefinition_DropCdc) isDataDefinition_Definition() {} +func (*DataDefinition_CloneTable) isDataDefinition_Definition() {} func (m *DataDefinition) GetDefinition() isDataDefinition_Definition { if m != nil { @@ -8984,6 +8989,13 @@ func (m *DataDefinition) GetDropCdc() *DropCDC { return nil } +func (m *DataDefinition) GetCloneTable() *CloneTable { + if x, ok := m.GetDefinition().(*DataDefinition_CloneTable); ok { + return x.CloneTable + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*DataDefinition) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -9010,6 +9022,7 @@ func (*DataDefinition) XXX_OneofWrappers() []interface{} { (*DataDefinition_DropPitr)(nil), (*DataDefinition_CreateCdc)(nil), (*DataDefinition_DropCdc)(nil), + (*DataDefinition_CloneTable)(nil), } } @@ -10434,27 +10447,28 @@ func (m *AlterRenameColumn) GetSequenceNum() int32 { return 0 } -type AlterCopyDedupOpt struct { +type AlterCopyOpt struct { SkipUniqueIdxDedup map[string]bool `protobuf:"bytes,1,rep,name=skip_unique_idx_dedup,json=skipUniqueIdxDedup,proto3" json:"skip_unique_idx_dedup,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` SkipPkDedup bool `protobuf:"varint,2,opt,name=skip_pk_dedup,json=skipPkDedup,proto3" json:"skip_pk_dedup,omitempty"` TargetTableName string `protobuf:"bytes,3,opt,name=target_table_name,json=targetTableName,proto3" json:"target_table_name,omitempty"` + SkipIndexesCopy map[string]bool `protobuf:"bytes,4,rep,name=skip_indexes_copy,json=skipIndexesCopy,proto3" json:"skip_indexes_copy,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } -func (m *AlterCopyDedupOpt) Reset() { *m = AlterCopyDedupOpt{} } -func (m *AlterCopyDedupOpt) String() string { return proto.CompactTextString(m) } -func (*AlterCopyDedupOpt) ProtoMessage() {} -func (*AlterCopyDedupOpt) Descriptor() ([]byte, []int) { +func (m *AlterCopyOpt) Reset() { *m = AlterCopyOpt{} } +func (m *AlterCopyOpt) String() string { return proto.CompactTextString(m) } +func (*AlterCopyOpt) ProtoMessage() {} +func (*AlterCopyOpt) Descriptor() ([]byte, []int) { return fileDescriptor_2d655ab2f7683c23, []int{102} } -func (m *AlterCopyDedupOpt) XXX_Unmarshal(b []byte) error { +func (m *AlterCopyOpt) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *AlterCopyDedupOpt) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *AlterCopyOpt) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_AlterCopyDedupOpt.Marshal(b, m, deterministic) + return xxx_messageInfo_AlterCopyOpt.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -10464,39 +10478,46 @@ func (m *AlterCopyDedupOpt) XXX_Marshal(b []byte, deterministic bool) ([]byte, e return b[:n], nil } } -func (m *AlterCopyDedupOpt) XXX_Merge(src proto.Message) { - xxx_messageInfo_AlterCopyDedupOpt.Merge(m, src) +func (m *AlterCopyOpt) XXX_Merge(src proto.Message) { + xxx_messageInfo_AlterCopyOpt.Merge(m, src) } -func (m *AlterCopyDedupOpt) XXX_Size() int { +func (m *AlterCopyOpt) XXX_Size() int { return m.ProtoSize() } -func (m *AlterCopyDedupOpt) XXX_DiscardUnknown() { - xxx_messageInfo_AlterCopyDedupOpt.DiscardUnknown(m) +func (m *AlterCopyOpt) XXX_DiscardUnknown() { + xxx_messageInfo_AlterCopyOpt.DiscardUnknown(m) } -var xxx_messageInfo_AlterCopyDedupOpt proto.InternalMessageInfo +var xxx_messageInfo_AlterCopyOpt proto.InternalMessageInfo -func (m *AlterCopyDedupOpt) GetSkipUniqueIdxDedup() map[string]bool { +func (m *AlterCopyOpt) GetSkipUniqueIdxDedup() map[string]bool { if m != nil { return m.SkipUniqueIdxDedup } return nil } -func (m *AlterCopyDedupOpt) GetSkipPkDedup() bool { +func (m *AlterCopyOpt) GetSkipPkDedup() bool { if m != nil { return m.SkipPkDedup } return false } -func (m *AlterCopyDedupOpt) GetTargetTableName() string { +func (m *AlterCopyOpt) GetTargetTableName() string { if m != nil { return m.TargetTableName } return "" } +func (m *AlterCopyOpt) GetSkipIndexesCopy() map[string]bool { + if m != nil { + return m.SkipIndexesCopy + } + return nil +} + type AlterTable struct { Database string `protobuf:"bytes,1,opt,name=database,proto3" json:"database,omitempty"` TableDef *TableDef `protobuf:"bytes,2,opt,name=table_def,json=tableDef,proto3" json:"table_def,omitempty"` @@ -10511,12 +10532,13 @@ type AlterTable struct { DetectSqls []string `protobuf:"bytes,10,rep,name=detectSqls,proto3" json:"detectSqls,omitempty"` // alter table may insert fk records related to this table // into mo_foreign_keys - UpdateFkSqls []string `protobuf:"bytes,11,rep,name=updateFkSqls,proto3" json:"updateFkSqls,omitempty"` - RawSQL string `protobuf:"bytes,12,opt,name=RawSQL,proto3" json:"RawSQL,omitempty"` - DedupOpt *AlterCopyDedupOpt `protobuf:"bytes,13,opt,name=dedup_opt,json=dedupOpt,proto3" json:"dedup_opt,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + UpdateFkSqls []string `protobuf:"bytes,11,rep,name=updateFkSqls,proto3" json:"updateFkSqls,omitempty"` + RawSQL string `protobuf:"bytes,12,opt,name=RawSQL,proto3" json:"RawSQL,omitempty"` + Options *AlterCopyOpt `protobuf:"bytes,13,opt,name=Options,proto3" json:"Options,omitempty"` + AffectedCols []string `protobuf:"bytes,14,rep,name=AffectedCols,proto3" json:"AffectedCols,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AlterTable) Reset() { *m = AlterTable{} } @@ -10636,9 +10658,16 @@ func (m *AlterTable) GetRawSQL() string { return "" } -func (m *AlterTable) GetDedupOpt() *AlterCopyDedupOpt { +func (m *AlterTable) GetOptions() *AlterCopyOpt { + if m != nil { + return m.Options + } + return nil +} + +func (m *AlterTable) GetAffectedCols() []string { if m != nil { - return m.DedupOpt + return m.AffectedCols } return nil } @@ -12798,6 +12827,93 @@ func (m *DropCDC) GetAccountId() uint32 { return 0 } +type CloneTable struct { + CreateTable *Plan `protobuf:"bytes,1,opt,name=create_table,json=createTable,proto3" json:"create_table,omitempty"` + ScanSnapshot *Snapshot `protobuf:"bytes,2,opt,name=scan_snapshot,json=scanSnapshot,proto3" json:"scan_snapshot,omitempty"` + SrcTableDef *TableDef `protobuf:"bytes,3,opt,name=src_table_def,json=srcTableDef,proto3" json:"src_table_def,omitempty"` + SrcObjDef *ObjectRef `protobuf:"bytes,4,opt,name=src_obj_def,json=srcObjDef,proto3" json:"src_obj_def,omitempty"` + DstDatabaseName string `protobuf:"bytes,5,opt,name=dst_database_name,json=dstDatabaseName,proto3" json:"dst_database_name,omitempty"` + DstTableName string `protobuf:"bytes,6,opt,name=dst_table_name,json=dstTableName,proto3" json:"dst_table_name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CloneTable) Reset() { *m = CloneTable{} } +func (m *CloneTable) String() string { return proto.CompactTextString(m) } +func (*CloneTable) ProtoMessage() {} +func (*CloneTable) Descriptor() ([]byte, []int) { + return fileDescriptor_2d655ab2f7683c23, []int{131} +} +func (m *CloneTable) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CloneTable) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CloneTable.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *CloneTable) XXX_Merge(src proto.Message) { + xxx_messageInfo_CloneTable.Merge(m, src) +} +func (m *CloneTable) XXX_Size() int { + return m.ProtoSize() +} +func (m *CloneTable) XXX_DiscardUnknown() { + xxx_messageInfo_CloneTable.DiscardUnknown(m) +} + +var xxx_messageInfo_CloneTable proto.InternalMessageInfo + +func (m *CloneTable) GetCreateTable() *Plan { + if m != nil { + return m.CreateTable + } + return nil +} + +func (m *CloneTable) GetScanSnapshot() *Snapshot { + if m != nil { + return m.ScanSnapshot + } + return nil +} + +func (m *CloneTable) GetSrcTableDef() *TableDef { + if m != nil { + return m.SrcTableDef + } + return nil +} + +func (m *CloneTable) GetSrcObjDef() *ObjectRef { + if m != nil { + return m.SrcObjDef + } + return nil +} + +func (m *CloneTable) GetDstDatabaseName() string { + if m != nil { + return m.DstDatabaseName + } + return "" +} + +func (m *CloneTable) GetDstTableName() string { + if m != nil { + return m.DstTableName + } + return "" +} + func init() { proto.RegisterEnum("plan.CompressType", CompressType_name, CompressType_value) proto.RegisterEnum("plan.ShuffleType", ShuffleType_name, ShuffleType_value) @@ -12933,8 +13049,9 @@ func init() { proto.RegisterType((*AlterVarcharLength)(nil), "plan.AlterVarcharLength") proto.RegisterType((*AlterReplaceDef)(nil), "plan.AlterReplaceDef") proto.RegisterType((*AlterRenameColumn)(nil), "plan.AlterRenameColumn") - proto.RegisterType((*AlterCopyDedupOpt)(nil), "plan.AlterCopyDedupOpt") - proto.RegisterMapType((map[string]bool)(nil), "plan.AlterCopyDedupOpt.SkipUniqueIdxDedupEntry") + proto.RegisterType((*AlterCopyOpt)(nil), "plan.AlterCopyOpt") + proto.RegisterMapType((map[string]bool)(nil), "plan.AlterCopyOpt.SkipIndexesCopyEntry") + proto.RegisterMapType((map[string]bool)(nil), "plan.AlterCopyOpt.SkipUniqueIdxDedupEntry") proto.RegisterType((*AlterTable)(nil), "plan.AlterTable") proto.RegisterMapType((map[uint64]*ColDef)(nil), "plan.AlterTable.ChangeTblColIdMapEntry") proto.RegisterType((*AlterTable_Action)(nil), "plan.AlterTable.Action") @@ -12965,781 +13082,792 @@ func init() { proto.RegisterType((*DropPitr)(nil), "plan.DropPitr") proto.RegisterType((*CreateCDC)(nil), "plan.CreateCDC") proto.RegisterType((*DropCDC)(nil), "plan.DropCDC") + proto.RegisterType((*CloneTable)(nil), "plan.CloneTable") } func init() { proto.RegisterFile("plan.proto", fileDescriptor_2d655ab2f7683c23) } var fileDescriptor_2d655ab2f7683c23 = []byte{ - // 12296 bytes of a gzipped FileDescriptorProto + // 12451 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0xbd, 0x5d, 0x6c, 0x1b, 0x59, 0x96, 0x18, 0x2c, 0x8a, 0xa4, 0x48, 0x1e, 0x52, 0x54, 0xe9, 0x5a, 0xb6, 0x69, 0xb7, 0xdb, 0x96, - 0xcb, 0x6e, 0xb7, 0xc7, 0xdd, 0xed, 0xee, 0xb6, 0xfb, 0xc7, 0x3d, 0x3b, 0xb3, 0x33, 0x14, 0x45, - 0x59, 0x1c, 0x53, 0xa4, 0xa6, 0x48, 0xd9, 0xdd, 0xb3, 0xf8, 0x50, 0x28, 0xb2, 0x8a, 0x52, 0xb5, - 0x8a, 0x55, 0xec, 0xaa, 0xa2, 0x25, 0x0d, 0xb0, 0xc0, 0xe0, 0x4b, 0xb2, 0x9b, 0x1f, 0x20, 0x2f, - 0xc1, 0x6e, 0xf2, 0x90, 0x00, 0x93, 0x05, 0x16, 0x08, 0x82, 0x04, 0x48, 0x82, 0x0d, 0x36, 0xef, - 0x79, 0xd9, 0x24, 0xc8, 0x22, 0x40, 0x80, 0x04, 0x49, 0x80, 0x4d, 0x30, 0x79, 0x4e, 0x36, 0x41, - 0x02, 0xe4, 0x31, 0xc1, 0x39, 0xf7, 0xde, 0xe2, 0x2d, 0x91, 0xb2, 0xbb, 0x7b, 0x66, 0x81, 0xe4, + 0xcb, 0x6e, 0xb7, 0xc7, 0xdd, 0x6d, 0x77, 0xdb, 0xfd, 0xe3, 0x9e, 0x9d, 0xd9, 0x19, 0x8a, 0xa2, + 0x2d, 0x8e, 0x29, 0x52, 0x53, 0xa4, 0xec, 0xee, 0x59, 0x2c, 0x0a, 0x45, 0x56, 0x51, 0xaa, 0x56, + 0xb1, 0x8a, 0x5d, 0x55, 0xb4, 0xa4, 0x01, 0x16, 0x18, 0x7c, 0x1f, 0xb0, 0xfb, 0xfd, 0x3c, 0x06, + 0xbb, 0xc9, 0x43, 0x16, 0x98, 0x5d, 0x60, 0x91, 0x20, 0x48, 0x80, 0x24, 0xd8, 0x60, 0x93, 0xe7, + 0xbc, 0x6c, 0x12, 0x64, 0x11, 0x20, 0x40, 0x82, 0x24, 0xc0, 0x26, 0x98, 0x3c, 0x27, 0x9b, 0x20, + 0x01, 0xf2, 0x98, 0xe0, 0x9c, 0x7b, 0x6f, 0xf1, 0x16, 0x49, 0xb7, 0xbb, 0x7b, 0x66, 0x81, 0xe4, 0x45, 0xaa, 0x7b, 0x7e, 0xee, 0xff, 0x3d, 0xf7, 0x9c, 0x73, 0xcf, 0xbd, 0x04, 0x98, 0x78, 0x96, - 0xff, 0x70, 0x12, 0x06, 0x71, 0xc0, 0x72, 0xf8, 0x7d, 0xfd, 0xbd, 0x43, 0x37, 0x3e, 0x9a, 0x0e, - 0x1e, 0x0e, 0x83, 0xf1, 0xfb, 0x87, 0xc1, 0x61, 0xf0, 0x3e, 0x21, 0x07, 0xd3, 0x11, 0xa5, 0x28, - 0x41, 0x5f, 0x9c, 0xe9, 0x3a, 0x78, 0xc1, 0xf0, 0x58, 0x7c, 0xaf, 0xc5, 0xee, 0xd8, 0x89, 0x62, - 0x6b, 0x3c, 0xe1, 0x00, 0xfd, 0x0f, 0x33, 0x90, 0xeb, 0x9f, 0x4d, 0x1c, 0x56, 0x85, 0x65, 0xd7, - 0xae, 0x65, 0x36, 0x33, 0xf7, 0xf3, 0xc6, 0xb2, 0x6b, 0xb3, 0x4d, 0x28, 0xfb, 0x41, 0xdc, 0x99, - 0x7a, 0x9e, 0x35, 0xf0, 0x9c, 0xda, 0xf2, 0x66, 0xe6, 0x7e, 0xd1, 0x50, 0x41, 0xec, 0x0d, 0x28, - 0x59, 0xd3, 0x38, 0x30, 0x5d, 0x7f, 0x18, 0xd6, 0xb2, 0x84, 0x2f, 0x22, 0xa0, 0xe5, 0x0f, 0x43, - 0xb6, 0x01, 0xf9, 0x13, 0xd7, 0x8e, 0x8f, 0x6a, 0x39, 0xca, 0x91, 0x27, 0x10, 0x1a, 0x0d, 0x2d, - 0xcf, 0xa9, 0xe5, 0x39, 0x94, 0x12, 0x08, 0x8d, 0xa9, 0x90, 0x95, 0xcd, 0xcc, 0xfd, 0x92, 0xc1, - 0x13, 0xec, 0x26, 0x80, 0xe3, 0x4f, 0xc7, 0x2f, 0x2d, 0x6f, 0xea, 0x44, 0xb5, 0x02, 0xa1, 0x14, - 0x88, 0xfe, 0x03, 0x28, 0x8d, 0xa3, 0xc3, 0x5d, 0xc7, 0xb2, 0x9d, 0x90, 0x5d, 0x85, 0xc2, 0x38, - 0x3a, 0x34, 0x63, 0xeb, 0x50, 0x34, 0x61, 0x65, 0x1c, 0x1d, 0xf6, 0xad, 0x43, 0x76, 0x0d, 0x8a, - 0x84, 0x38, 0x9b, 0xf0, 0x36, 0xe4, 0x0d, 0x24, 0xc4, 0x16, 0xeb, 0x7f, 0x9a, 0x87, 0x42, 0xdb, - 0x8d, 0x9d, 0xd0, 0xf2, 0xd8, 0x15, 0x58, 0x71, 0x23, 0x7f, 0xea, 0x79, 0xc4, 0x5e, 0x34, 0x44, - 0x8a, 0x5d, 0x81, 0xbc, 0xfb, 0xe4, 0xa5, 0xe5, 0x71, 0xde, 0xdd, 0x25, 0x83, 0x27, 0x59, 0x0d, - 0x56, 0xdc, 0x0f, 0x3f, 0x41, 0x44, 0x56, 0x20, 0x44, 0x9a, 0x30, 0x8f, 0x1f, 0x21, 0x26, 0x97, - 0x60, 0x28, 0x4d, 0x98, 0x4f, 0x3e, 0x42, 0x0c, 0xb6, 0x3e, 0x4b, 0x18, 0x4a, 0x63, 0x29, 0x53, - 0x2a, 0x05, 0x3b, 0x60, 0x15, 0x4b, 0x99, 0xca, 0x52, 0xa6, 0xbc, 0x94, 0x82, 0x40, 0x88, 0x34, - 0x61, 0x78, 0x29, 0xc5, 0x04, 0x93, 0x94, 0x32, 0xe5, 0xa5, 0x94, 0x36, 0x33, 0xf7, 0x73, 0x84, - 0xe1, 0xa5, 0x6c, 0x40, 0xce, 0x46, 0x38, 0x6c, 0x66, 0xee, 0x67, 0x76, 0x97, 0x0c, 0x4a, 0x21, - 0x34, 0x42, 0x68, 0x19, 0x3b, 0x18, 0xa1, 0x91, 0x80, 0x0e, 0x10, 0x5a, 0xc1, 0xde, 0x40, 0xe8, - 0x40, 0x40, 0x47, 0x08, 0x5d, 0xdd, 0xcc, 0xdc, 0x5f, 0x46, 0x28, 0xa6, 0xd8, 0x75, 0x28, 0xd8, - 0x56, 0xec, 0x20, 0xa2, 0x2a, 0x9a, 0x2c, 0x01, 0x88, 0xc3, 0x19, 0x87, 0xb8, 0x35, 0xd1, 0x68, - 0x09, 0x60, 0x3a, 0x94, 0x91, 0x4c, 0xe2, 0x35, 0x81, 0x57, 0x81, 0xec, 0x63, 0xa8, 0xd8, 0xce, - 0xd0, 0x1d, 0x5b, 0x1e, 0x6f, 0xd3, 0xfa, 0x66, 0xe6, 0x7e, 0xf9, 0xd1, 0xda, 0x43, 0x5a, 0x13, - 0x09, 0x66, 0x77, 0xc9, 0x48, 0x91, 0xb1, 0x27, 0xb0, 0x2a, 0xd2, 0x1f, 0x3e, 0xa2, 0x8e, 0x65, - 0xc4, 0xa7, 0xa5, 0xf8, 0x3e, 0x7c, 0xf4, 0x64, 0x77, 0xc9, 0x48, 0x13, 0xb2, 0xbb, 0x50, 0x49, - 0x96, 0x08, 0x32, 0x5e, 0x12, 0xb5, 0x4a, 0x41, 0xb1, 0x59, 0x5f, 0x46, 0x81, 0x8f, 0x04, 0x1b, - 0xa2, 0xdf, 0x24, 0x80, 0x6d, 0x02, 0xd8, 0xce, 0xc8, 0x9a, 0x7a, 0x31, 0xa2, 0x2f, 0x8b, 0x0e, - 0x54, 0x60, 0xec, 0x26, 0x94, 0xa6, 0x13, 0x6c, 0xe5, 0x73, 0xcb, 0xab, 0x5d, 0x11, 0x04, 0x33, - 0x10, 0xe6, 0x8e, 0xf3, 0x1c, 0xb1, 0x57, 0xc5, 0xe8, 0x4a, 0x00, 0xae, 0x15, 0x37, 0xda, 0x72, - 0xfd, 0x5a, 0x8d, 0xe6, 0x29, 0x4f, 0xb0, 0x1b, 0x90, 0x8d, 0xc2, 0x61, 0xed, 0x1a, 0xb5, 0x12, - 0x78, 0x2b, 0x9b, 0xa7, 0x93, 0xd0, 0x40, 0xf0, 0x56, 0x01, 0xf2, 0xb4, 0x66, 0xf4, 0x1b, 0x50, - 0xdc, 0xb7, 0x42, 0x6b, 0x6c, 0x38, 0x23, 0xa6, 0x41, 0x76, 0x12, 0x44, 0x62, 0xb5, 0xe0, 0xa7, - 0xde, 0x86, 0x95, 0xe7, 0x56, 0x88, 0x38, 0x06, 0x39, 0xdf, 0x1a, 0x3b, 0x84, 0x2c, 0x19, 0xf4, - 0x8d, 0x2b, 0x24, 0x3a, 0x8b, 0x62, 0x67, 0x2c, 0x44, 0x81, 0x48, 0x21, 0xfc, 0xd0, 0x0b, 0x06, - 0x62, 0x25, 0x14, 0x0d, 0x91, 0xd2, 0xff, 0xff, 0x0c, 0xac, 0x34, 0x02, 0x0f, 0xb3, 0xbb, 0x0a, - 0x85, 0xd0, 0xf1, 0xcc, 0x59, 0x71, 0x2b, 0xa1, 0xe3, 0xed, 0x07, 0x11, 0x22, 0x86, 0x01, 0x47, - 0xf0, 0xb5, 0xb9, 0x32, 0x0c, 0x08, 0x21, 0x2b, 0x90, 0x55, 0x2a, 0x70, 0x0d, 0x8a, 0xf1, 0xc0, - 0x33, 0x09, 0x9e, 0x23, 0x78, 0x21, 0x1e, 0x78, 0x1d, 0x44, 0x5d, 0x85, 0x82, 0x3d, 0xe0, 0x98, - 0x3c, 0x61, 0x56, 0xec, 0x01, 0x22, 0xf4, 0xcf, 0xa0, 0x64, 0x58, 0x27, 0xa2, 0x1a, 0x97, 0x61, - 0x05, 0x33, 0x10, 0x52, 0x2e, 0x67, 0xe4, 0xe3, 0x81, 0xd7, 0xb2, 0x11, 0x8c, 0x95, 0x70, 0x6d, - 0xaa, 0x43, 0xce, 0xc8, 0x0f, 0x03, 0xaf, 0x65, 0xeb, 0x7d, 0x80, 0x46, 0x10, 0x86, 0xdf, 0xba, - 0x09, 0x1b, 0x90, 0xb7, 0x9d, 0x49, 0x7c, 0xc4, 0x05, 0x84, 0xc1, 0x13, 0xfa, 0x03, 0x28, 0xe2, - 0xb8, 0xb4, 0xdd, 0x28, 0x66, 0x37, 0x21, 0xe7, 0xb9, 0x51, 0x5c, 0xcb, 0x6c, 0x66, 0xcf, 0x8d, - 0x1a, 0xc1, 0xf5, 0x4d, 0x28, 0xee, 0x59, 0xa7, 0xcf, 0x71, 0xe4, 0x30, 0x37, 0x1a, 0x42, 0x31, - 0x24, 0x62, 0x3c, 0x2b, 0x00, 0x7d, 0x2b, 0x3c, 0x74, 0x62, 0x92, 0x67, 0xff, 0x23, 0x03, 0xe5, - 0xde, 0x74, 0xf0, 0xd5, 0xd4, 0x09, 0xcf, 0xb0, 0xce, 0xf7, 0x21, 0x1b, 0x9f, 0x4d, 0x88, 0xa3, - 0xfa, 0xe8, 0x0a, 0xcf, 0x5e, 0xc1, 0x3f, 0x44, 0x26, 0x03, 0x49, 0xb0, 0x11, 0x7e, 0x60, 0x3b, - 0xb2, 0x0f, 0xf2, 0xc6, 0x0a, 0x26, 0x5b, 0x36, 0x6e, 0x0a, 0xc1, 0x44, 0x8c, 0xc2, 0x72, 0x30, - 0x61, 0x9b, 0x90, 0x1f, 0x1e, 0xb9, 0x9e, 0x4d, 0x03, 0x90, 0xae, 0x33, 0x47, 0xe0, 0x28, 0x85, - 0xc1, 0x89, 0x19, 0xb9, 0x3f, 0x95, 0x42, 0xbe, 0x10, 0x06, 0x27, 0x3d, 0xf7, 0xa7, 0x8e, 0xde, - 0x17, 0x3b, 0x0d, 0xc0, 0x4a, 0xaf, 0x51, 0x6f, 0xd7, 0x0d, 0x6d, 0x09, 0xbf, 0x9b, 0x9f, 0xb7, - 0x7a, 0xfd, 0x9e, 0x96, 0x61, 0x55, 0x80, 0x4e, 0xb7, 0x6f, 0x8a, 0xf4, 0x32, 0x5b, 0x81, 0xe5, - 0x56, 0x47, 0xcb, 0x22, 0x0d, 0xc2, 0x5b, 0x1d, 0x2d, 0xc7, 0x0a, 0x90, 0xad, 0x77, 0xbe, 0xd0, - 0xf2, 0xf4, 0xd1, 0x6e, 0x6b, 0x2b, 0xfa, 0x1f, 0x2f, 0x43, 0xa9, 0x3b, 0xf8, 0xd2, 0x19, 0xc6, - 0xd8, 0x66, 0x9c, 0xa5, 0x4e, 0xf8, 0xd2, 0x09, 0xa9, 0xd9, 0x59, 0x43, 0xa4, 0xb0, 0x21, 0xf6, - 0x80, 0x1a, 0x97, 0x35, 0x96, 0xed, 0x01, 0xd1, 0x0d, 0x8f, 0x9c, 0xb1, 0x45, 0x8d, 0x43, 0x3a, - 0x4a, 0xe1, 0xaa, 0x08, 0x06, 0x5f, 0x52, 0xf3, 0xb2, 0x06, 0x7e, 0xb2, 0x5b, 0x50, 0xe6, 0x79, - 0xa8, 0xf3, 0x0b, 0x38, 0xe8, 0xfc, 0xe4, 0x5b, 0x51, 0x27, 0x1f, 0x71, 0x52, 0xae, 0x1c, 0x29, - 0x76, 0x30, 0x0e, 0xea, 0x88, 0x19, 0x1d, 0x0c, 0xbe, 0xe4, 0xd8, 0x22, 0x9f, 0xd1, 0xc1, 0xe0, - 0x4b, 0x42, 0xbd, 0x03, 0xeb, 0xd1, 0x74, 0x10, 0x0d, 0x43, 0x77, 0x12, 0xbb, 0x81, 0xcf, 0x69, - 0x4a, 0x44, 0xa3, 0xa9, 0x08, 0x22, 0xbe, 0x0f, 0xc5, 0xc9, 0x74, 0x60, 0xba, 0xfe, 0x28, 0x20, - 0xe1, 0x5e, 0x7e, 0xb4, 0xca, 0x07, 0x66, 0x7f, 0x3a, 0x68, 0xf9, 0xa3, 0xc0, 0x28, 0x4c, 0xf8, - 0x07, 0xd3, 0x61, 0xd5, 0x0f, 0x62, 0x13, 0x15, 0x02, 0x73, 0xec, 0xc4, 0x16, 0x49, 0x7d, 0xbe, - 0xad, 0xb7, 0x83, 0xe1, 0xf1, 0x9e, 0x13, 0x5b, 0xfa, 0x3d, 0x28, 0x08, 0x3e, 0xdc, 0xe1, 0x63, - 0xc7, 0xb7, 0xfc, 0xd8, 0x4c, 0x54, 0x83, 0x22, 0x07, 0xb4, 0x6c, 0xfd, 0x0f, 0x32, 0xa0, 0xf5, - 0x94, 0xaa, 0x20, 0xf3, 0x42, 0xc9, 0xf1, 0x26, 0x80, 0x35, 0x1c, 0x06, 0x53, 0x9e, 0x0d, 0x9f, - 0x60, 0x25, 0x01, 0x69, 0xd9, 0x6a, 0xff, 0x65, 0x53, 0xfd, 0x77, 0x1b, 0x2a, 0x92, 0x4f, 0x59, - 0xf4, 0x65, 0x01, 0x93, 0x3d, 0x18, 0x4d, 0x53, 0x2b, 0xbf, 0x10, 0x4d, 0x39, 0xf7, 0x15, 0x58, - 0x21, 0x3d, 0x22, 0x92, 0xa3, 0xc2, 0x53, 0xfa, 0xbf, 0xcd, 0xc0, 0x6a, 0xcb, 0xb7, 0x9d, 0xd3, - 0xde, 0xd0, 0xf2, 0x65, 0xa7, 0xb8, 0x91, 0xe9, 0x22, 0xcc, 0x8c, 0x86, 0x96, 0x2f, 0x54, 0x80, - 0xb2, 0x1b, 0x25, 0x74, 0xd8, 0x06, 0x4e, 0x40, 0x45, 0x2d, 0x53, 0x8e, 0x25, 0x82, 0x50, 0x61, - 0xf7, 0x60, 0x6d, 0xe0, 0x78, 0x81, 0x7f, 0x68, 0xc6, 0x81, 0xc9, 0x75, 0x19, 0xde, 0x96, 0x55, - 0x0e, 0xee, 0x07, 0x7d, 0xd2, 0x69, 0x36, 0x20, 0x3f, 0xb1, 0xc2, 0x38, 0xaa, 0xe5, 0x36, 0xb3, - 0xb8, 0x8c, 0x29, 0x81, 0xdd, 0xec, 0x46, 0xe6, 0xd4, 0x77, 0xbf, 0x9a, 0xf2, 0x66, 0x14, 0x8d, - 0xa2, 0x1b, 0x1d, 0x50, 0x9a, 0xdd, 0x07, 0x8d, 0x97, 0x4c, 0xd9, 0xaa, 0xf3, 0xac, 0x4a, 0x70, - 0xca, 0x98, 0x84, 0xdd, 0x5f, 0x5e, 0x86, 0xe2, 0xce, 0xd4, 0x1f, 0xe2, 0x60, 0xb0, 0x3b, 0x90, - 0x1b, 0x4d, 0xfd, 0x21, 0xb5, 0x25, 0xd9, 0x30, 0x93, 0x75, 0x62, 0x10, 0x12, 0x25, 0x90, 0x15, - 0x1e, 0xa2, 0xe4, 0x9a, 0x93, 0x40, 0x08, 0xd7, 0xff, 0x49, 0x86, 0xe7, 0xb8, 0xe3, 0x59, 0x87, - 0xac, 0x08, 0xb9, 0x4e, 0xb7, 0xd3, 0xd4, 0x96, 0x58, 0x05, 0x8a, 0xad, 0x4e, 0xbf, 0x69, 0x74, - 0xea, 0x6d, 0x2d, 0x43, 0xcb, 0xb9, 0x5f, 0xdf, 0x6a, 0x37, 0xb5, 0x65, 0xc4, 0x3c, 0xef, 0xb6, - 0xeb, 0xfd, 0x56, 0xbb, 0xa9, 0xe5, 0x38, 0xc6, 0x68, 0x35, 0xfa, 0x5a, 0x91, 0x69, 0x50, 0xd9, - 0x37, 0xba, 0xdb, 0x07, 0x8d, 0xa6, 0xd9, 0x39, 0x68, 0xb7, 0x35, 0x8d, 0x5d, 0x82, 0xb5, 0x04, - 0xd2, 0xe5, 0xc0, 0x4d, 0x64, 0x79, 0x5e, 0x37, 0xea, 0xc6, 0x53, 0xed, 0x87, 0xac, 0x08, 0xd9, - 0xfa, 0xd3, 0xa7, 0xda, 0xcf, 0x50, 0x32, 0x94, 0x5e, 0xb4, 0x3a, 0xe6, 0xf3, 0x7a, 0xfb, 0xa0, - 0xa9, 0xfd, 0x6c, 0x59, 0xa6, 0xbb, 0xc6, 0x76, 0xd3, 0xd0, 0x7e, 0x96, 0x63, 0xeb, 0x50, 0xf9, - 0x49, 0xb7, 0xd3, 0xdc, 0xab, 0xef, 0xef, 0x53, 0x45, 0x7e, 0x56, 0xd4, 0xff, 0x4b, 0x0e, 0x72, - 0xd8, 0x12, 0xa6, 0xcf, 0xa4, 0x60, 0xd2, 0x44, 0x14, 0x43, 0x5b, 0xb9, 0x3f, 0xfa, 0x93, 0x5b, - 0x4b, 0x5c, 0xfe, 0xdd, 0x86, 0xac, 0xe7, 0xc6, 0x34, 0xac, 0xc9, 0xda, 0x11, 0x9a, 0xe1, 0xee, - 0x92, 0x81, 0x38, 0x76, 0x13, 0x32, 0x5c, 0x10, 0x96, 0x1f, 0x55, 0xc5, 0xe2, 0x12, 0x3b, 0xe9, - 0xee, 0x92, 0x91, 0x99, 0xb0, 0x1b, 0x90, 0x79, 0x29, 0xa4, 0x62, 0x85, 0xe3, 0xf9, 0x5e, 0x8a, - 0xd8, 0x97, 0x6c, 0x13, 0xb2, 0xc3, 0x80, 0xeb, 0x7d, 0x09, 0x9e, 0xef, 0x2c, 0x98, 0xff, 0x30, - 0xf0, 0xd8, 0x1d, 0xc8, 0x86, 0xd6, 0x09, 0x8d, 0x6c, 0x32, 0x5c, 0xc9, 0xd6, 0x85, 0x44, 0xa1, - 0x75, 0x82, 0x95, 0x18, 0x91, 0x1c, 0x49, 0x2a, 0x21, 0xc7, 0x1b, 0x8b, 0x19, 0xb1, 0x4d, 0xc8, - 0x9c, 0x90, 0x24, 0x49, 0x54, 0x9d, 0x17, 0xae, 0x6f, 0x07, 0x27, 0xbd, 0x89, 0x33, 0x44, 0x8a, - 0x13, 0xf6, 0x16, 0x64, 0xa3, 0xe9, 0x80, 0x24, 0x49, 0xf9, 0xd1, 0xfa, 0xdc, 0x9e, 0x80, 0x05, - 0x45, 0xd3, 0x01, 0xbb, 0x07, 0xb9, 0x61, 0x10, 0x86, 0x42, 0x9a, 0x68, 0xb2, 0xc2, 0x72, 0x3b, - 0x44, 0xd5, 0x0f, 0xf1, 0x58, 0x60, 0x4c, 0x32, 0x24, 0x21, 0x9a, 0xed, 0x47, 0x58, 0x60, 0xcc, - 0xee, 0x8a, 0x4d, 0xae, 0xa2, 0xd6, 0x5a, 0x6e, 0x81, 0x98, 0x0f, 0x62, 0x71, 0x90, 0xc6, 0xd6, - 0x29, 0xe9, 0x95, 0x09, 0x91, 0xdc, 0xfb, 0xb0, 0x4e, 0x63, 0xeb, 0x94, 0xdd, 0x85, 0xec, 0x4b, - 0x67, 0x48, 0x2a, 0x66, 0x52, 0x9a, 0x18, 0xa4, 0xe7, 0xd4, 0x3c, 0x44, 0xd3, 0xbc, 0x0f, 0x3c, - 0x9b, 0xb4, 0xcd, 0x64, 0x2c, 0x77, 0x02, 0xcf, 0x7e, 0x4e, 0x63, 0x49, 0x48, 0xdc, 0xf2, 0xad, - 0xe9, 0x29, 0x4a, 0x23, 0x8d, 0x6f, 0xce, 0xd6, 0xf4, 0xb4, 0x65, 0xa3, 0xf0, 0xf7, 0xed, 0x97, + 0x7f, 0x7f, 0x12, 0x06, 0x71, 0xc0, 0x72, 0xf8, 0x7d, 0xf5, 0xbd, 0x23, 0x37, 0x3e, 0x9e, 0x0e, + 0xee, 0x0f, 0x83, 0xf1, 0x83, 0xa3, 0xe0, 0x28, 0x78, 0x40, 0xc8, 0xc1, 0x74, 0x44, 0x29, 0x4a, + 0xd0, 0x17, 0x67, 0xba, 0x0a, 0x5e, 0x30, 0x3c, 0x11, 0xdf, 0x1b, 0xb1, 0x3b, 0x76, 0xa2, 0xd8, + 0x1a, 0x4f, 0x38, 0x40, 0xff, 0x93, 0x0c, 0xe4, 0xfa, 0xe7, 0x13, 0x87, 0x55, 0x61, 0xd5, 0xb5, + 0x6b, 0x99, 0xed, 0xcc, 0xdd, 0xbc, 0xb1, 0xea, 0xda, 0x6c, 0x1b, 0xca, 0x7e, 0x10, 0x77, 0xa6, + 0x9e, 0x67, 0x0d, 0x3c, 0xa7, 0xb6, 0xba, 0x9d, 0xb9, 0x5b, 0x34, 0x54, 0x10, 0x7b, 0x03, 0x4a, + 0xd6, 0x34, 0x0e, 0x4c, 0xd7, 0x1f, 0x86, 0xb5, 0x2c, 0xe1, 0x8b, 0x08, 0x68, 0xf9, 0xc3, 0x90, + 0x6d, 0x41, 0xfe, 0xd4, 0xb5, 0xe3, 0xe3, 0x5a, 0x8e, 0x72, 0xe4, 0x09, 0x84, 0x46, 0x43, 0xcb, + 0x73, 0x6a, 0x79, 0x0e, 0xa5, 0x04, 0x42, 0x63, 0x2a, 0x64, 0x6d, 0x3b, 0x73, 0xb7, 0x64, 0xf0, + 0x04, 0xbb, 0x0e, 0xe0, 0xf8, 0xd3, 0xf1, 0x4b, 0xcb, 0x9b, 0x3a, 0x51, 0xad, 0x40, 0x28, 0x05, + 0xa2, 0xff, 0x00, 0x4a, 0xe3, 0xe8, 0x68, 0xcf, 0xb1, 0x6c, 0x27, 0x64, 0x97, 0xa1, 0x30, 0x8e, + 0x8e, 0xcc, 0xd8, 0x3a, 0x12, 0x4d, 0x58, 0x1b, 0x47, 0x47, 0x7d, 0xeb, 0x88, 0x5d, 0x81, 0x22, + 0x21, 0xce, 0x27, 0xbc, 0x0d, 0x79, 0x03, 0x09, 0xb1, 0xc5, 0xfa, 0x5f, 0xe4, 0xa1, 0xd0, 0x76, + 0x63, 0x27, 0xb4, 0x3c, 0x76, 0x09, 0xd6, 0xdc, 0xc8, 0x9f, 0x7a, 0x1e, 0xb1, 0x17, 0x0d, 0x91, + 0x62, 0x97, 0x20, 0xef, 0x3e, 0x7e, 0x69, 0x79, 0x9c, 0x77, 0x6f, 0xc5, 0xe0, 0x49, 0x56, 0x83, + 0x35, 0xf7, 0x83, 0x8f, 0x11, 0x91, 0x15, 0x08, 0x91, 0x26, 0xcc, 0xa3, 0x87, 0x88, 0xc9, 0x25, + 0x18, 0x4a, 0x13, 0xe6, 0xe3, 0x0f, 0x11, 0x83, 0xad, 0xcf, 0x12, 0x86, 0xd2, 0x58, 0xca, 0x94, + 0x4a, 0xc1, 0x0e, 0x58, 0xc7, 0x52, 0xa6, 0xb2, 0x94, 0x29, 0x2f, 0xa5, 0x20, 0x10, 0x22, 0x4d, + 0x18, 0x5e, 0x4a, 0x31, 0xc1, 0x24, 0xa5, 0x4c, 0x79, 0x29, 0xa5, 0xed, 0xcc, 0xdd, 0x1c, 0x61, + 0x78, 0x29, 0x5b, 0x90, 0xb3, 0x11, 0x0e, 0xdb, 0x99, 0xbb, 0x99, 0xbd, 0x15, 0x83, 0x52, 0x08, + 0x8d, 0x10, 0x5a, 0xc6, 0x0e, 0x46, 0x68, 0x24, 0xa0, 0x03, 0x84, 0x56, 0xb0, 0x37, 0x10, 0x3a, + 0x10, 0xd0, 0x11, 0x42, 0xd7, 0xb7, 0x33, 0x77, 0x57, 0x11, 0x8a, 0x29, 0x76, 0x15, 0x0a, 0xb6, + 0x15, 0x3b, 0x88, 0xa8, 0x8a, 0x26, 0x4b, 0x00, 0xe2, 0x70, 0xc6, 0x21, 0x6e, 0x43, 0x34, 0x5a, + 0x02, 0x98, 0x0e, 0x65, 0x24, 0x93, 0x78, 0x4d, 0xe0, 0x55, 0x20, 0xfb, 0x08, 0x2a, 0xb6, 0x33, + 0x74, 0xc7, 0x96, 0xc7, 0xdb, 0xb4, 0xb9, 0x9d, 0xb9, 0x5b, 0x7e, 0xb8, 0x71, 0x9f, 0xd6, 0x44, + 0x82, 0xd9, 0x5b, 0x31, 0x52, 0x64, 0xec, 0x31, 0xac, 0x8b, 0xf4, 0x07, 0x0f, 0xa9, 0x63, 0x19, + 0xf1, 0x69, 0x29, 0xbe, 0x0f, 0x1e, 0x3e, 0xde, 0x5b, 0x31, 0xd2, 0x84, 0xec, 0x36, 0x54, 0x92, + 0x25, 0x82, 0x8c, 0x17, 0x44, 0xad, 0x52, 0x50, 0x6c, 0xd6, 0x17, 0x51, 0xe0, 0x23, 0xc1, 0x96, + 0xe8, 0x37, 0x09, 0x60, 0xdb, 0x00, 0xb6, 0x33, 0xb2, 0xa6, 0x5e, 0x8c, 0xe8, 0x8b, 0xa2, 0x03, + 0x15, 0x18, 0xbb, 0x0e, 0xa5, 0xe9, 0x04, 0x5b, 0xf9, 0xdc, 0xf2, 0x6a, 0x97, 0x04, 0xc1, 0x0c, + 0x84, 0xb9, 0xe3, 0x3c, 0x47, 0xec, 0x65, 0x31, 0xba, 0x12, 0x80, 0x6b, 0xc5, 0x8d, 0x76, 0x5c, + 0xbf, 0x56, 0xa3, 0x79, 0xca, 0x13, 0xec, 0x1a, 0x64, 0xa3, 0x70, 0x58, 0xbb, 0x42, 0xad, 0x04, + 0xde, 0xca, 0xe6, 0xd9, 0x24, 0x34, 0x10, 0xbc, 0x53, 0x80, 0x3c, 0xad, 0x19, 0xfd, 0x1a, 0x14, + 0x0f, 0xac, 0xd0, 0x1a, 0x1b, 0xce, 0x88, 0x69, 0x90, 0x9d, 0x04, 0x91, 0x58, 0x2d, 0xf8, 0xa9, + 0xb7, 0x61, 0xed, 0xb9, 0x15, 0x22, 0x8e, 0x41, 0xce, 0xb7, 0xc6, 0x0e, 0x21, 0x4b, 0x06, 0x7d, + 0xe3, 0x0a, 0x89, 0xce, 0xa3, 0xd8, 0x19, 0x0b, 0x51, 0x20, 0x52, 0x08, 0x3f, 0xf2, 0x82, 0x81, + 0x58, 0x09, 0x45, 0x43, 0xa4, 0xf4, 0xff, 0x2b, 0x03, 0x6b, 0x8d, 0xc0, 0xc3, 0xec, 0x2e, 0x43, + 0x21, 0x74, 0x3c, 0x73, 0x56, 0xdc, 0x5a, 0xe8, 0x78, 0x07, 0x41, 0x84, 0x88, 0x61, 0xc0, 0x11, + 0x7c, 0x6d, 0xae, 0x0d, 0x03, 0x42, 0xc8, 0x0a, 0x64, 0x95, 0x0a, 0x5c, 0x81, 0x62, 0x3c, 0xf0, + 0x4c, 0x82, 0xe7, 0x08, 0x5e, 0x88, 0x07, 0x5e, 0x07, 0x51, 0x97, 0xa1, 0x60, 0x0f, 0x38, 0x26, + 0x4f, 0x98, 0x35, 0x7b, 0x80, 0x08, 0xfd, 0x53, 0x28, 0x19, 0xd6, 0xa9, 0xa8, 0xc6, 0x45, 0x58, + 0xc3, 0x0c, 0x84, 0x94, 0xcb, 0x19, 0xf9, 0x78, 0xe0, 0xb5, 0x6c, 0x04, 0x63, 0x25, 0x5c, 0x9b, + 0xea, 0x90, 0x33, 0xf2, 0xc3, 0xc0, 0x6b, 0xd9, 0x7a, 0x1f, 0xa0, 0x11, 0x84, 0xe1, 0xb7, 0x6e, + 0xc2, 0x16, 0xe4, 0x6d, 0x67, 0x12, 0x1f, 0x73, 0x01, 0x61, 0xf0, 0x84, 0x7e, 0x0f, 0x8a, 0x38, + 0x2e, 0x6d, 0x37, 0x8a, 0xd9, 0x75, 0xc8, 0x79, 0x6e, 0x14, 0xd7, 0x32, 0xdb, 0xd9, 0xb9, 0x51, + 0x23, 0xb8, 0xbe, 0x0d, 0xc5, 0x7d, 0xeb, 0xec, 0x39, 0x8e, 0x1c, 0xe6, 0x46, 0x43, 0x28, 0x86, + 0x44, 0x8c, 0x67, 0x05, 0xa0, 0x6f, 0x85, 0x47, 0x4e, 0x4c, 0xf2, 0xec, 0xbf, 0x65, 0xa0, 0xdc, + 0x9b, 0x0e, 0xbe, 0x9c, 0x3a, 0xe1, 0x39, 0xd6, 0xf9, 0x2e, 0x64, 0xe3, 0xf3, 0x09, 0x71, 0x54, + 0x1f, 0x5e, 0xe2, 0xd9, 0x2b, 0xf8, 0xfb, 0xc8, 0x64, 0x20, 0x09, 0x36, 0xc2, 0x0f, 0x6c, 0x47, + 0xf6, 0x41, 0xde, 0x58, 0xc3, 0x64, 0xcb, 0xc6, 0x4d, 0x21, 0x98, 0x88, 0x51, 0x58, 0x0d, 0x26, + 0x6c, 0x1b, 0xf2, 0xc3, 0x63, 0xd7, 0xb3, 0x69, 0x00, 0xd2, 0x75, 0xe6, 0x08, 0x1c, 0xa5, 0x30, + 0x38, 0x35, 0x23, 0xf7, 0xa7, 0x52, 0xc8, 0x17, 0xc2, 0xe0, 0xb4, 0xe7, 0xfe, 0xd4, 0xd1, 0xfb, + 0x62, 0xa7, 0x01, 0x58, 0xeb, 0x35, 0xea, 0xed, 0xba, 0xa1, 0xad, 0xe0, 0x77, 0xf3, 0xb3, 0x56, + 0xaf, 0xdf, 0xd3, 0x32, 0xac, 0x0a, 0xd0, 0xe9, 0xf6, 0x4d, 0x91, 0x5e, 0x65, 0x6b, 0xb0, 0xda, + 0xea, 0x68, 0x59, 0xa4, 0x41, 0x78, 0xab, 0xa3, 0xe5, 0x58, 0x01, 0xb2, 0xf5, 0xce, 0xe7, 0x5a, + 0x9e, 0x3e, 0xda, 0x6d, 0x6d, 0x4d, 0xff, 0xb3, 0x55, 0x28, 0x75, 0x07, 0x5f, 0x38, 0xc3, 0x18, + 0xdb, 0x8c, 0xb3, 0xd4, 0x09, 0x5f, 0x3a, 0x21, 0x35, 0x3b, 0x6b, 0x88, 0x14, 0x36, 0xc4, 0x1e, + 0x50, 0xe3, 0xb2, 0xc6, 0xaa, 0x3d, 0x20, 0xba, 0xe1, 0xb1, 0x33, 0xb6, 0xa8, 0x71, 0x48, 0x47, + 0x29, 0x5c, 0x15, 0xc1, 0xe0, 0x0b, 0x6a, 0x5e, 0xd6, 0xc0, 0x4f, 0x76, 0x03, 0xca, 0x3c, 0x0f, + 0x75, 0x7e, 0x01, 0x07, 0xcd, 0x4f, 0xbe, 0x35, 0x75, 0xf2, 0x11, 0x27, 0xe5, 0xca, 0x91, 0x62, + 0x07, 0xe3, 0xa0, 0x8e, 0x98, 0xd1, 0xc1, 0xe0, 0x0b, 0x8e, 0x2d, 0xf2, 0x19, 0x1d, 0x0c, 0xbe, + 0x20, 0xd4, 0x3b, 0xb0, 0x19, 0x4d, 0x07, 0xd1, 0x30, 0x74, 0x27, 0xb1, 0x1b, 0xf8, 0x9c, 0xa6, + 0x44, 0x34, 0x9a, 0x8a, 0x20, 0xe2, 0xbb, 0x50, 0x9c, 0x4c, 0x07, 0xa6, 0xeb, 0x8f, 0x02, 0x12, + 0xee, 0xe5, 0x87, 0xeb, 0x7c, 0x60, 0x0e, 0xa6, 0x83, 0x96, 0x3f, 0x0a, 0x8c, 0xc2, 0x84, 0x7f, + 0x30, 0x1d, 0xd6, 0xfd, 0x20, 0x36, 0x51, 0x21, 0x30, 0xc7, 0x4e, 0x6c, 0x91, 0xd4, 0xe7, 0xdb, + 0x7a, 0x3b, 0x18, 0x9e, 0xec, 0x3b, 0xb1, 0xa5, 0xdf, 0x81, 0x82, 0xe0, 0xc3, 0x1d, 0x3e, 0x76, + 0x7c, 0xcb, 0x8f, 0xcd, 0x44, 0x35, 0x28, 0x72, 0x40, 0xcb, 0xd6, 0xff, 0x38, 0x03, 0x5a, 0x4f, + 0xa9, 0x0a, 0x32, 0x2f, 0x95, 0x1c, 0x6f, 0x02, 0x58, 0xc3, 0x61, 0x30, 0xe5, 0xd9, 0xf0, 0x09, + 0x56, 0x12, 0x90, 0x96, 0xad, 0xf6, 0x5f, 0x36, 0xd5, 0x7f, 0x37, 0xa1, 0x22, 0xf9, 0x94, 0x45, + 0x5f, 0x16, 0x30, 0xd9, 0x83, 0xd1, 0x34, 0xb5, 0xf2, 0x0b, 0xd1, 0x94, 0x73, 0x5f, 0x82, 0x35, + 0xd2, 0x23, 0x22, 0x39, 0x2a, 0x3c, 0xa5, 0xff, 0xeb, 0x0c, 0xac, 0xb7, 0x7c, 0xdb, 0x39, 0xeb, + 0x0d, 0x2d, 0x5f, 0x76, 0x8a, 0x1b, 0x99, 0x2e, 0xc2, 0xcc, 0x68, 0x68, 0xf9, 0x42, 0x05, 0x28, + 0xbb, 0x51, 0x42, 0x87, 0x6d, 0xe0, 0x04, 0x54, 0xd4, 0x2a, 0xe5, 0x58, 0x22, 0x08, 0x15, 0x76, + 0x07, 0x36, 0x06, 0x8e, 0x17, 0xf8, 0x47, 0x66, 0x1c, 0x98, 0x5c, 0x97, 0xe1, 0x6d, 0x59, 0xe7, + 0xe0, 0x7e, 0xd0, 0x27, 0x9d, 0x66, 0x0b, 0xf2, 0x13, 0x2b, 0x8c, 0xa3, 0x5a, 0x6e, 0x3b, 0x8b, + 0xcb, 0x98, 0x12, 0xd8, 0xcd, 0x6e, 0x64, 0x4e, 0x7d, 0xf7, 0xcb, 0x29, 0x6f, 0x46, 0xd1, 0x28, + 0xba, 0xd1, 0x21, 0xa5, 0xd9, 0x5d, 0xd0, 0x78, 0xc9, 0x94, 0xad, 0x3a, 0xcf, 0xaa, 0x04, 0xa7, + 0x8c, 0x49, 0xd8, 0xfd, 0x7f, 0xab, 0x50, 0x7c, 0x32, 0xf5, 0x87, 0x38, 0x18, 0xec, 0x16, 0xe4, + 0x46, 0x53, 0x7f, 0x48, 0x6d, 0x49, 0x36, 0xcc, 0x64, 0x9d, 0x18, 0x84, 0x44, 0x09, 0x64, 0x85, + 0x47, 0x28, 0xb9, 0x16, 0x24, 0x10, 0xc2, 0xf5, 0x7f, 0x98, 0xe1, 0x39, 0x3e, 0xf1, 0xac, 0x23, + 0x56, 0x84, 0x5c, 0xa7, 0xdb, 0x69, 0x6a, 0x2b, 0xac, 0x02, 0xc5, 0x56, 0xa7, 0xdf, 0x34, 0x3a, + 0xf5, 0xb6, 0x96, 0xa1, 0xe5, 0xdc, 0xaf, 0xef, 0xb4, 0x9b, 0xda, 0x2a, 0x62, 0x9e, 0x77, 0xdb, + 0xf5, 0x7e, 0xab, 0xdd, 0xd4, 0x72, 0x1c, 0x63, 0xb4, 0x1a, 0x7d, 0xad, 0xc8, 0x34, 0xa8, 0x1c, + 0x18, 0xdd, 0xdd, 0xc3, 0x46, 0xd3, 0xec, 0x1c, 0xb6, 0xdb, 0x9a, 0xc6, 0x2e, 0xc0, 0x46, 0x02, + 0xe9, 0x72, 0xe0, 0x36, 0xb2, 0x3c, 0xaf, 0x1b, 0x75, 0xe3, 0xa9, 0xf6, 0x43, 0x56, 0x84, 0x6c, + 0xfd, 0xe9, 0x53, 0xed, 0x67, 0x28, 0x19, 0x4a, 0x2f, 0x5a, 0x1d, 0xf3, 0x79, 0xbd, 0x7d, 0xd8, + 0xd4, 0x7e, 0xb6, 0x2a, 0xd3, 0x5d, 0x63, 0xb7, 0x69, 0x68, 0x3f, 0xcb, 0xb1, 0x4d, 0xa8, 0xfc, + 0xa4, 0xdb, 0x69, 0xee, 0xd7, 0x0f, 0x0e, 0xa8, 0x22, 0x3f, 0x2b, 0xea, 0xff, 0x29, 0x07, 0x39, + 0x6c, 0x09, 0xd3, 0x67, 0x52, 0x30, 0x69, 0x22, 0x8a, 0xa1, 0x9d, 0xdc, 0x9f, 0xfe, 0xf9, 0x8d, + 0x15, 0x2e, 0xff, 0x6e, 0x42, 0xd6, 0x73, 0x63, 0x1a, 0xd6, 0x64, 0xed, 0x08, 0xcd, 0x70, 0x6f, + 0xc5, 0x40, 0x1c, 0xbb, 0x0e, 0x19, 0x2e, 0x08, 0xcb, 0x0f, 0xab, 0x62, 0x71, 0x89, 0x9d, 0x74, + 0x6f, 0xc5, 0xc8, 0x4c, 0xd8, 0x35, 0xc8, 0xbc, 0x14, 0x52, 0xb1, 0xc2, 0xf1, 0x7c, 0x2f, 0x45, + 0xec, 0x4b, 0xb6, 0x0d, 0xd9, 0x61, 0xc0, 0xf5, 0xbe, 0x04, 0xcf, 0x77, 0x16, 0xcc, 0x7f, 0x18, + 0x78, 0xec, 0x16, 0x64, 0x43, 0xeb, 0x94, 0x46, 0x36, 0x19, 0xae, 0x64, 0xeb, 0x42, 0xa2, 0xd0, + 0x3a, 0xc5, 0x4a, 0x8c, 0x48, 0x8e, 0x24, 0x95, 0x90, 0xe3, 0x8d, 0xc5, 0x8c, 0xd8, 0x36, 0x64, + 0x4e, 0x49, 0x92, 0x24, 0xaa, 0xce, 0x0b, 0xd7, 0xb7, 0x83, 0xd3, 0xde, 0xc4, 0x19, 0x22, 0xc5, + 0x29, 0x7b, 0x0b, 0xb2, 0xd1, 0x74, 0x40, 0x92, 0xa4, 0xfc, 0x70, 0x73, 0x61, 0x4f, 0xc0, 0x82, + 0xa2, 0xe9, 0x80, 0xdd, 0x81, 0xdc, 0x30, 0x08, 0x43, 0x21, 0x4d, 0x34, 0x59, 0x61, 0xb9, 0x1d, + 0xa2, 0xea, 0x87, 0x78, 0x2c, 0x30, 0x26, 0x19, 0x92, 0x10, 0xcd, 0xf6, 0x23, 0x2c, 0x30, 0x66, + 0xb7, 0xc5, 0x26, 0x57, 0x51, 0x6b, 0x2d, 0xb7, 0x40, 0xcc, 0x07, 0xb1, 0x38, 0x48, 0x63, 0xeb, + 0x8c, 0xf4, 0xca, 0x84, 0x48, 0xee, 0x7d, 0x58, 0xa7, 0xb1, 0x75, 0xc6, 0x6e, 0x43, 0xf6, 0xa5, + 0x33, 0x24, 0x15, 0x33, 0x29, 0x4d, 0x0c, 0xd2, 0x73, 0x6a, 0x1e, 0xa2, 0x69, 0xde, 0x07, 0x9e, + 0x4d, 0xda, 0x66, 0x32, 0x96, 0x4f, 0x02, 0xcf, 0x7e, 0x4e, 0x63, 0x49, 0x48, 0xdc, 0xf2, 0xad, + 0xe9, 0x19, 0x4a, 0x23, 0x8d, 0x6f, 0xce, 0xd6, 0xf4, 0xac, 0x65, 0xa3, 0xf0, 0xf7, 0xed, 0x97, 0xa4, 0x63, 0x66, 0x0c, 0xfc, 0x44, 0x23, 0x28, 0x72, 0x3c, 0x67, 0x18, 0xbb, 0x2f, 0xdd, 0xf8, - 0x8c, 0xb4, 0xc8, 0x8c, 0xa1, 0x82, 0xb6, 0x56, 0x20, 0xe7, 0x9c, 0x4e, 0x42, 0x7d, 0x17, 0x0a, - 0xa2, 0x94, 0x39, 0x4b, 0xea, 0x1a, 0x14, 0xdd, 0xc8, 0x1c, 0x06, 0x7e, 0x14, 0x0b, 0xdd, 0xa9, - 0xe0, 0x46, 0x0d, 0x4c, 0xa2, 0xb8, 0xb4, 0xad, 0x98, 0x6f, 0x42, 0x15, 0x83, 0xbe, 0xf5, 0x47, - 0x00, 0xb3, 0x66, 0x61, 0x9d, 0x3c, 0xc7, 0x97, 0x6a, 0x9a, 0xe7, 0xf8, 0x09, 0xcf, 0xb2, 0xc2, - 0x73, 0x0d, 0x4a, 0x89, 0xfe, 0xcb, 0x2a, 0x90, 0xb1, 0xc4, 0xf6, 0x97, 0xb1, 0xf4, 0xfb, 0xa8, + 0x9c, 0xb4, 0xc8, 0x8c, 0xa1, 0x82, 0x76, 0xd6, 0x20, 0xe7, 0x9c, 0x4d, 0x42, 0x7d, 0x0f, 0x0a, + 0xa2, 0x94, 0x05, 0x4b, 0xea, 0x0a, 0x14, 0xdd, 0xc8, 0x1c, 0x06, 0x7e, 0x14, 0x0b, 0xdd, 0xa9, + 0xe0, 0x46, 0x0d, 0x4c, 0xa2, 0xb8, 0xb4, 0xad, 0x98, 0x6f, 0x42, 0x15, 0x83, 0xbe, 0xf5, 0x87, + 0x00, 0xb3, 0x66, 0x61, 0x9d, 0x3c, 0xc7, 0x97, 0x6a, 0x9a, 0xe7, 0xf8, 0x09, 0xcf, 0xaa, 0xc2, + 0x73, 0x05, 0x4a, 0x89, 0xfe, 0xcb, 0x2a, 0x90, 0xb1, 0xc4, 0xf6, 0x97, 0xb1, 0xf4, 0xbb, 0xa8, 0x8e, 0x4a, 0x0d, 0x37, 0x8d, 0xc3, 0x94, 0xdc, 0x14, 0x33, 0x03, 0xfd, 0x7b, 0x50, 0x31, 0x9c, - 0x68, 0xea, 0xc5, 0x8d, 0xc0, 0xdb, 0x76, 0x46, 0xec, 0x5d, 0x80, 0x24, 0x1d, 0x09, 0x2d, 0x65, - 0x36, 0x77, 0xb7, 0x9d, 0x91, 0xa1, 0xe0, 0xf5, 0xbf, 0x93, 0x23, 0x7d, 0x6f, 0x9b, 0x2b, 0x5a, - 0x42, 0xa3, 0xca, 0x28, 0x1a, 0x55, 0xb2, 0x37, 0x2c, 0xa7, 0xb5, 0xca, 0x23, 0xd7, 0xb6, 0x1d, - 0x5f, 0x6a, 0x8f, 0x3c, 0x85, 0x83, 0x6d, 0x79, 0x87, 0xb4, 0xa0, 0xaa, 0x8f, 0x98, 0x2c, 0x74, - 0x3c, 0x09, 0x9d, 0x28, 0xe2, 0x7a, 0x8b, 0xe5, 0x1d, 0xca, 0xb5, 0x9d, 0x7f, 0xd5, 0xda, 0xbe, - 0x06, 0x45, 0xdc, 0xf2, 0xc8, 0xb6, 0x5b, 0xe1, 0xbd, 0x2f, 0x8c, 0x58, 0xf6, 0x36, 0x14, 0x84, - 0x56, 0x2e, 0x16, 0x95, 0x98, 0x2e, 0xdb, 0x1c, 0x68, 0x48, 0x2c, 0xab, 0xa1, 0x92, 0x37, 0x1e, - 0x3b, 0x7e, 0x2c, 0xf7, 0x69, 0x91, 0x64, 0xef, 0x40, 0x29, 0xf0, 0x4d, 0xae, 0xba, 0x8b, 0x55, - 0x25, 0xa6, 0x6f, 0xd7, 0x3f, 0x20, 0xa8, 0x51, 0x0c, 0xc4, 0x17, 0x56, 0xc5, 0x0b, 0x4e, 0xcc, - 0xa1, 0x15, 0xda, 0xb4, 0xb2, 0x8a, 0x46, 0xc1, 0x0b, 0x4e, 0x1a, 0x56, 0x68, 0x73, 0xbd, 0xe5, - 0x2b, 0x7f, 0x3a, 0xa6, 0xd5, 0xb4, 0x6a, 0x88, 0x14, 0xbb, 0x01, 0xa5, 0xa1, 0x37, 0x8d, 0x62, - 0x27, 0xdc, 0x3a, 0xe3, 0xc6, 0x98, 0x31, 0x03, 0x60, 0xbd, 0x26, 0xa1, 0x3b, 0xb6, 0xc2, 0x33, - 0x5a, 0x3a, 0x45, 0x43, 0x26, 0x69, 0xa3, 0x39, 0x76, 0xed, 0x53, 0x6e, 0x91, 0x19, 0x3c, 0x81, - 0xf4, 0x47, 0x64, 0x2f, 0x47, 0xb4, 0x3e, 0x8a, 0x86, 0x4c, 0xd2, 0x38, 0xd0, 0x27, 0xad, 0x88, - 0x92, 0x21, 0x52, 0x29, 0xa5, 0x7b, 0xfd, 0x42, 0xa5, 0x9b, 0x9d, 0xd7, 0x7b, 0x82, 0xd0, 0x3d, - 0x74, 0x85, 0xd6, 0x72, 0x89, 0xeb, 0x3d, 0x1c, 0x44, 0x1b, 0xd5, 0x57, 0x50, 0x10, 0x5d, 0x8c, - 0x3b, 0x10, 0x2e, 0x9f, 0xb4, 0x78, 0xe6, 0x3b, 0x10, 0xc2, 0xd9, 0x1d, 0x58, 0x15, 0x79, 0x45, - 0x71, 0xe8, 0xfa, 0x87, 0x62, 0xf2, 0x54, 0x38, 0xb0, 0x47, 0x30, 0x54, 0x14, 0x70, 0x78, 0x4d, - 0x6b, 0xe0, 0x7a, 0xb8, 0x4c, 0xb3, 0x42, 0xa9, 0x99, 0x7a, 0x5e, 0x9d, 0x83, 0xf4, 0x2e, 0x14, - 0xe5, 0x80, 0xfc, 0x4a, 0xca, 0xd4, 0x7f, 0x2b, 0x03, 0x65, 0x52, 0x0f, 0xba, 0xa4, 0xfc, 0xb0, - 0x77, 0x81, 0x0d, 0x43, 0xc7, 0x8a, 0x1d, 0xd3, 0x39, 0x8d, 0x43, 0x4b, 0x28, 0x01, 0x5c, 0x93, - 0xd0, 0x38, 0xa6, 0x89, 0x08, 0xae, 0x07, 0xdc, 0x82, 0xf2, 0xc4, 0x0a, 0x23, 0xa9, 0x54, 0xf2, - 0x02, 0x80, 0x83, 0x84, 0x4a, 0xa7, 0xf9, 0x87, 0xa1, 0x35, 0x36, 0xe3, 0xe0, 0xd8, 0xf1, 0xb9, - 0x3a, 0xcd, 0x0d, 0x89, 0x2a, 0xc1, 0xfb, 0x08, 0x26, 0xad, 0xfa, 0xdf, 0x67, 0x60, 0x75, 0x9f, - 0x8f, 0xfa, 0x33, 0xe7, 0x6c, 0x9b, 0x5b, 0x6f, 0x43, 0xb9, 0x62, 0x73, 0x06, 0x7d, 0xb3, 0x9b, - 0x50, 0x9e, 0x1c, 0x3b, 0x67, 0x66, 0xca, 0xd2, 0x29, 0x21, 0xa8, 0x41, 0x6b, 0xf3, 0x3b, 0xb0, - 0x12, 0x50, 0x43, 0xc4, 0x1e, 0x27, 0xb6, 0x06, 0xa5, 0x85, 0x86, 0x20, 0x40, 0x75, 0x29, 0xc9, - 0x4a, 0xd5, 0xcb, 0x44, 0x66, 0x54, 0xfd, 0x0d, 0xc8, 0x23, 0x2a, 0xaa, 0xe5, 0xb9, 0x9e, 0x43, - 0x09, 0xf6, 0x01, 0xac, 0x0e, 0x83, 0xf1, 0xc4, 0x94, 0xec, 0x62, 0xb7, 0x4b, 0xcb, 0x94, 0x32, - 0x92, 0xec, 0xf3, 0xbc, 0xf4, 0xdf, 0xcd, 0x42, 0x91, 0xea, 0x20, 0xc4, 0x8a, 0x6b, 0x9f, 0x4a, - 0xb1, 0x52, 0x32, 0xf2, 0xae, 0x8d, 0x52, 0xfb, 0x35, 0xaa, 0x59, 0xa2, 0x72, 0x65, 0x55, 0x95, - 0xeb, 0x0a, 0xac, 0x08, 0x7d, 0x2b, 0xc7, 0xe5, 0xce, 0xf4, 0x62, 0x6d, 0x2b, 0xbf, 0x48, 0xdb, - 0xc2, 0x21, 0xe4, 0x34, 0xce, 0x29, 0xee, 0x6f, 0x5c, 0xb4, 0x00, 0x81, 0x9a, 0x08, 0x51, 0x85, - 0x46, 0x21, 0x2d, 0x34, 0x6a, 0x50, 0x78, 0xe9, 0x46, 0x2e, 0x4e, 0x90, 0x22, 0x5f, 0x86, 0x22, - 0xa9, 0x0c, 0x43, 0xe9, 0x75, 0xc3, 0x90, 0x34, 0xdb, 0xf2, 0x0e, 0xb9, 0xda, 0x2f, 0x9b, 0x5d, - 0xf7, 0x0e, 0x03, 0xf6, 0x21, 0x5c, 0x9e, 0xa1, 0x45, 0x6b, 0xc8, 0x09, 0x46, 0x7e, 0x1e, 0x83, - 0x25, 0x94, 0xd4, 0x22, 0xb2, 0xcb, 0x1e, 0xc0, 0xba, 0xc2, 0x32, 0x41, 0xf5, 0x26, 0x22, 0x99, - 0x53, 0x32, 0xd6, 0x12, 0x72, 0xd2, 0x7a, 0x22, 0xfd, 0x9f, 0x2d, 0xc3, 0xea, 0x4e, 0x10, 0x3a, - 0xee, 0xa1, 0x3f, 0x9b, 0x75, 0x73, 0x9a, 0xbf, 0x9c, 0x89, 0xcb, 0xca, 0x4c, 0xbc, 0x05, 0xe5, - 0x11, 0x67, 0x34, 0xe3, 0x01, 0x77, 0x1a, 0xe4, 0x0c, 0x10, 0xa0, 0xfe, 0xc0, 0xc3, 0xd5, 0x2c, - 0x09, 0x88, 0x39, 0x47, 0xcc, 0x92, 0x09, 0xf7, 0x1a, 0xf6, 0x5d, 0x92, 0xba, 0xb6, 0xe3, 0x39, - 0x31, 0x1f, 0x9e, 0xea, 0xa3, 0x37, 0xe5, 0x4e, 0xaf, 0xd4, 0xe9, 0xa1, 0xe1, 0x8c, 0xea, 0xa4, - 0x1e, 0xa1, 0x10, 0xde, 0x26, 0x72, 0xc1, 0x2b, 0x24, 0xf6, 0xca, 0xd7, 0xe4, 0xe5, 0x92, 0x43, - 0xef, 0x43, 0x29, 0x01, 0xa3, 0xae, 0x6b, 0x34, 0x85, 0x7e, 0xbb, 0xc4, 0xca, 0x50, 0x68, 0xd4, - 0x7b, 0x8d, 0xfa, 0x76, 0x53, 0xcb, 0x20, 0xaa, 0xd7, 0xec, 0x73, 0x9d, 0x76, 0x99, 0xad, 0x41, - 0x19, 0x53, 0xdb, 0xcd, 0x9d, 0xfa, 0x41, 0xbb, 0xaf, 0x65, 0xd9, 0x2a, 0x94, 0x3a, 0x5d, 0xb3, - 0xde, 0xe8, 0xb7, 0xba, 0x1d, 0x2d, 0xa7, 0xff, 0x10, 0x8a, 0x8d, 0x23, 0x67, 0x78, 0x7c, 0x51, - 0x2f, 0x92, 0xd1, 0xed, 0x0c, 0x8f, 0x85, 0x7e, 0x7a, 0xce, 0xe8, 0x76, 0x86, 0xc7, 0x7a, 0x13, - 0x4a, 0xfb, 0x56, 0x18, 0xbb, 0x54, 0xaf, 0x27, 0xb0, 0x9a, 0x24, 0xb6, 0x9d, 0x91, 0xdc, 0xb9, - 0x59, 0xa2, 0xb5, 0x26, 0x28, 0x23, 0x4d, 0xa8, 0xbf, 0x0b, 0x15, 0x15, 0xc0, 0x6e, 0x40, 0xd6, - 0x76, 0x46, 0x0b, 0xe4, 0x24, 0x82, 0xf5, 0xe7, 0x50, 0x69, 0xc8, 0x9d, 0xe8, 0xa2, 0xaa, 0x3f, - 0x82, 0x2a, 0xad, 0xf8, 0xe1, 0x40, 0x2e, 0xf9, 0xe5, 0x05, 0x4b, 0xbe, 0x82, 0x34, 0x8d, 0x81, - 0x58, 0xf3, 0x1f, 0x43, 0x79, 0x3f, 0x0c, 0x26, 0x4e, 0x18, 0x53, 0xb6, 0x1a, 0x64, 0x8f, 0x9d, - 0x33, 0x91, 0x2b, 0x7e, 0xce, 0x7c, 0x21, 0xcb, 0xaa, 0x2f, 0xe4, 0x11, 0x14, 0x25, 0xdb, 0xd7, - 0xe6, 0xf9, 0x01, 0x8a, 0x4e, 0xe2, 0x71, 0x9d, 0x08, 0x0b, 0x7b, 0x08, 0x30, 0x49, 0x00, 0xa2, - 0xe3, 0xa4, 0xba, 0x2f, 0x32, 0x37, 0x14, 0x0a, 0xfd, 0x4d, 0x28, 0x3c, 0x77, 0x9d, 0x13, 0xd1, - 0xfc, 0x97, 0xae, 0x73, 0x22, 0x9b, 0x8f, 0xdf, 0xfa, 0x5f, 0x29, 0x41, 0x91, 0xd6, 0xd7, 0xf6, - 0xc5, 0xee, 0xa7, 0x6f, 0xa2, 0x15, 0x6d, 0x8a, 0xf5, 0x94, 0x5b, 0xa0, 0x8b, 0xf1, 0xd5, 0xf5, - 0x26, 0x80, 0xb2, 0xd6, 0xb9, 0xe4, 0x2a, 0xc5, 0xc9, 0x12, 0x47, 0x75, 0x82, 0xf6, 0xa2, 0xe8, - 0x2b, 0x4f, 0x58, 0x91, 0x33, 0x00, 0x7b, 0xc8, 0x37, 0x7b, 0xb2, 0x1b, 0xb9, 0x42, 0x74, 0x49, - 0x2a, 0xf5, 0x03, 0xcf, 0x91, 0xa6, 0x06, 0x69, 0x00, 0x98, 0x20, 0x39, 0xe6, 0x84, 0x11, 0x8a, - 0x2b, 0xf2, 0x42, 0x1b, 0x32, 0xc9, 0xde, 0x86, 0x1c, 0x0a, 0x79, 0x61, 0x1a, 0x5c, 0x92, 0x3d, - 0xa8, 0xec, 0x52, 0x06, 0x11, 0xb0, 0xfb, 0x50, 0x20, 0xd1, 0xe2, 0xa0, 0xa4, 0x51, 0x7a, 0x5b, - 0x0a, 0x7d, 0x43, 0xa2, 0xd9, 0x77, 0x20, 0x3f, 0x3a, 0x76, 0xce, 0xa2, 0xda, 0x2a, 0xd1, 0x5d, - 0x5a, 0xb0, 0x66, 0x0d, 0x4e, 0xc1, 0xee, 0x42, 0x35, 0x74, 0x46, 0x26, 0x39, 0xa4, 0x50, 0xc8, - 0x44, 0xb5, 0x2a, 0xc9, 0x90, 0x4a, 0xe8, 0x8c, 0x1a, 0x08, 0xec, 0x0f, 0xbc, 0x88, 0xdd, 0x83, - 0x15, 0x5a, 0x3d, 0xa8, 0x0b, 0x29, 0x25, 0xcb, 0xa5, 0x68, 0x08, 0x2c, 0xfb, 0x10, 0x40, 0x68, - 0x5c, 0xe6, 0xe0, 0x8c, 0xdc, 0xb5, 0xc9, 0x62, 0x52, 0xe7, 0xbf, 0xaa, 0x97, 0xbd, 0x0d, 0x79, - 0x9c, 0x24, 0x51, 0xed, 0x2a, 0xe5, 0xbc, 0x9e, 0x9e, 0x41, 0x54, 0x53, 0xc2, 0xb3, 0xfb, 0x50, - 0xc4, 0x89, 0x62, 0xe2, 0x70, 0xd4, 0x54, 0x15, 0x54, 0xcc, 0x2a, 0xdc, 0x19, 0x9c, 0x93, 0xde, - 0x57, 0x1e, 0x7b, 0x00, 0x39, 0x1b, 0x17, 0xf3, 0x35, 0xca, 0xf1, 0x8a, 0x32, 0x2e, 0x28, 0xac, - 0xb6, 0x9d, 0x11, 0x69, 0xc5, 0x44, 0xc3, 0x76, 0xa1, 0x8a, 0xd3, 0xe8, 0x11, 0x6d, 0xf6, 0xd8, - 0x7d, 0xb5, 0xeb, 0xc4, 0x75, 0xfb, 0x1c, 0x57, 0x47, 0x10, 0x51, 0x67, 0x37, 0xfd, 0x38, 0x3c, - 0x33, 0x56, 0x7d, 0x15, 0xc6, 0xae, 0xa3, 0xe9, 0xd2, 0x0e, 0x86, 0xc7, 0x8e, 0x5d, 0x7b, 0x43, - 0x3a, 0x26, 0x78, 0x9a, 0x7d, 0x06, 0xab, 0x34, 0xb1, 0x30, 0x89, 0x85, 0xd7, 0x6e, 0x90, 0x30, - 0x55, 0xa7, 0x8c, 0x44, 0x19, 0x69, 0x4a, 0x14, 0xf1, 0x6e, 0x64, 0xc6, 0xce, 0x78, 0x12, 0x84, - 0xa8, 0xbc, 0xbe, 0x29, 0x1d, 0x2e, 0x7d, 0x09, 0xc2, 0x8d, 0x38, 0x39, 0x5c, 0x32, 0x83, 0xd1, - 0x28, 0x72, 0xe2, 0xda, 0x4d, 0x5a, 0x37, 0x55, 0x79, 0xc6, 0xd4, 0x25, 0x28, 0x6d, 0x84, 0x91, - 0x69, 0x9f, 0xf9, 0xd6, 0xd8, 0x1d, 0xd6, 0x6e, 0x71, 0x1d, 0xd9, 0x8d, 0xb6, 0x39, 0x40, 0x55, - 0x53, 0x37, 0x53, 0x6a, 0xea, 0x25, 0xc8, 0xdb, 0x03, 0x5c, 0x8e, 0xb7, 0x29, 0xdb, 0x9c, 0x3d, - 0x68, 0xd9, 0xec, 0x3d, 0x28, 0x4d, 0xa4, 0x08, 0xac, 0xe9, 0xaa, 0x31, 0x9e, 0x48, 0x46, 0x63, - 0x46, 0x81, 0xf6, 0xe1, 0x8e, 0x63, 0xc5, 0xd3, 0xd0, 0xd9, 0xf1, 0xac, 0xc3, 0xda, 0x1d, 0xca, - 0x49, 0x05, 0x5d, 0x7f, 0x4a, 0xba, 0x2e, 0xb5, 0xfa, 0xe3, 0x73, 0xc2, 0x25, 0xb5, 0x34, 0x14, - 0x29, 0xb4, 0xbb, 0xa4, 0xca, 0x98, 0xad, 0x3c, 0x49, 0xe1, 0xeb, 0x3f, 0x04, 0x36, 0x3f, 0x5e, - 0xaf, 0x93, 0x74, 0x79, 0x21, 0xe9, 0xbe, 0xbb, 0xfc, 0x24, 0xa3, 0x3f, 0x87, 0xd5, 0xd4, 0x42, - 0x5e, 0x28, 0xb1, 0xb9, 0xba, 0x64, 0x8d, 0x85, 0x79, 0xc9, 0x13, 0xc2, 0x43, 0x15, 0xb9, 0xfe, - 0xa1, 0xf0, 0x6c, 0xd1, 0x44, 0xe8, 0x51, 0x5a, 0xff, 0xe3, 0x2c, 0x54, 0x76, 0xad, 0xe8, 0x68, - 0xcf, 0x9a, 0xf4, 0x62, 0x2b, 0x8e, 0x70, 0x78, 0x8f, 0xac, 0xe8, 0x68, 0x6c, 0x4d, 0xb8, 0xe2, - 0x9a, 0xe1, 0x66, 0xb3, 0x80, 0xa1, 0xd6, 0x8a, 0x13, 0x0b, 0x93, 0x5d, 0x7f, 0xff, 0x99, 0xb0, - 0x89, 0x93, 0x34, 0x8a, 0x95, 0xe8, 0x68, 0x3a, 0x1a, 0x25, 0x45, 0xc9, 0x24, 0xbb, 0x0b, 0xab, - 0xe2, 0x93, 0xb4, 0xd6, 0x53, 0x71, 0xb8, 0x98, 0x06, 0xb2, 0xc7, 0x50, 0x16, 0x80, 0xbe, 0x14, - 0x82, 0xd5, 0xc4, 0xd7, 0x31, 0x43, 0x18, 0x2a, 0x15, 0xfb, 0x31, 0x5c, 0x56, 0x92, 0x3b, 0x41, - 0xb8, 0x37, 0xf5, 0x62, 0xb7, 0xd1, 0x11, 0x2a, 0xc2, 0x1b, 0x73, 0xec, 0x33, 0x12, 0x63, 0x31, - 0x67, 0xba, 0xb6, 0x7b, 0xae, 0x4f, 0x32, 0x35, 0x6b, 0xa4, 0x81, 0xe7, 0xa8, 0xac, 0x53, 0x12, - 0xa5, 0x69, 0x2a, 0xeb, 0x14, 0x17, 0x9b, 0x00, 0xec, 0x39, 0xf1, 0x51, 0x60, 0x93, 0x7e, 0x98, - 0x2c, 0xb6, 0x9e, 0x8a, 0x32, 0xd2, 0x94, 0xd8, 0x9d, 0x68, 0x09, 0x0d, 0xfd, 0x98, 0xb4, 0xc4, - 0xac, 0x21, 0x93, 0xb8, 0xcd, 0x84, 0x96, 0x7f, 0xe8, 0x44, 0xb5, 0xf2, 0x66, 0xf6, 0x7e, 0xc6, - 0x10, 0x29, 0xfd, 0xf7, 0x97, 0x21, 0xcf, 0x47, 0xf2, 0x0d, 0x28, 0x0d, 0xc8, 0x59, 0x8c, 0x96, - 0xa9, 0x70, 0x00, 0x13, 0xa0, 0x33, 0x1d, 0x73, 0xed, 0x4e, 0xf8, 0x34, 0x32, 0x06, 0x7d, 0x63, - 0x96, 0xc1, 0x34, 0xc6, 0xb2, 0xb2, 0x04, 0x15, 0x29, 0xac, 0x44, 0x18, 0x9c, 0xd0, 0x6c, 0xc8, - 0x11, 0x42, 0x26, 0xc9, 0xc7, 0x4c, 0x3b, 0x16, 0x32, 0xe5, 0x09, 0x57, 0x24, 0x40, 0xc3, 0x8f, - 0xcf, 0xfb, 0x5f, 0x56, 0xe6, 0xfc, 0x2f, 0xec, 0x26, 0xa0, 0xee, 0x38, 0x74, 0xba, 0xbe, 0xd3, - 0xe8, 0x50, 0x0f, 0x17, 0x0d, 0x05, 0x82, 0x0b, 0xc4, 0x0e, 0x26, 0xd4, 0xa9, 0x79, 0x03, 0x3f, - 0xd9, 0x27, 0xc9, 0xec, 0xa4, 0x36, 0x0a, 0x4d, 0x5b, 0x48, 0x74, 0x75, 0x1e, 0x1b, 0x29, 0x3a, - 0xcc, 0x09, 0xc5, 0x34, 0xd7, 0xb4, 0xf1, 0x53, 0x6f, 0x02, 0x18, 0xc1, 0x49, 0xe4, 0xc4, 0xe4, - 0x68, 0xbc, 0x4a, 0x4d, 0x4c, 0x1d, 0x11, 0x05, 0x27, 0xfb, 0x41, 0x94, 0xd8, 0x9b, 0xcb, 0x8b, - 0xed, 0x4d, 0xfd, 0x7d, 0x28, 0xe0, 0x1e, 0x6e, 0xc5, 0x16, 0xbb, 0x2b, 0x7c, 0x3b, 0x5c, 0xf3, - 0x10, 0x4e, 0xae, 0x59, 0x19, 0xc2, 0xdb, 0xd3, 0x96, 0xe5, 0x12, 0xcf, 0x6d, 0xc5, 0xdc, 0x4b, - 0xf6, 0x0f, 0x91, 0xa1, 0xd0, 0x0a, 0xde, 0x80, 0x12, 0x56, 0x8d, 0xfc, 0xe6, 0x42, 0x2e, 0x14, - 0xc3, 0xe0, 0xa4, 0x81, 0x69, 0xfd, 0x3f, 0x64, 0xa0, 0xdc, 0x0d, 0x6d, 0xdc, 0xb8, 0x7a, 0x13, - 0x67, 0xf8, 0x5a, 0xf3, 0x18, 0x75, 0x88, 0xc0, 0xf3, 0x2c, 0x12, 0x91, 0xc2, 0xdc, 0x4a, 0x00, - 0xec, 0x43, 0xc8, 0x8d, 0x50, 0x14, 0x66, 0x55, 0xcd, 0x5a, 0xc9, 0x5e, 0x7e, 0xa3, 0x70, 0x34, - 0x88, 0x54, 0xff, 0x8d, 0xa4, 0x7c, 0xf2, 0x33, 0xab, 0xde, 0xe5, 0x25, 0x3a, 0xe7, 0xe9, 0x35, - 0xb4, 0x0c, 0x2b, 0x42, 0x6e, 0xbb, 0xd9, 0x6b, 0x70, 0x7d, 0x1a, 0x35, 0xeb, 0x9e, 0xb9, 0xd3, - 0x32, 0x7a, 0x7d, 0x2d, 0x47, 0x07, 0x47, 0x04, 0x68, 0xd7, 0x7b, 0x7d, 0xad, 0xc8, 0x00, 0x56, - 0x0e, 0x3a, 0xad, 0x1f, 0x1f, 0x34, 0x35, 0x4d, 0xff, 0xd7, 0x19, 0x80, 0x99, 0x13, 0x94, 0xbd, - 0x03, 0xe5, 0x13, 0x4a, 0x99, 0x8a, 0x77, 0x5c, 0x6d, 0x23, 0x70, 0x34, 0xe9, 0x37, 0xef, 0x41, - 0x25, 0x11, 0xf5, 0xb8, 0xf7, 0xcf, 0xbb, 0xc9, 0xcb, 0x09, 0x7e, 0xeb, 0x8c, 0xbd, 0x0b, 0xc5, - 0x00, 0xdb, 0x81, 0xa4, 0x59, 0x75, 0xe3, 0x57, 0x9a, 0x6f, 0x14, 0x02, 0x9e, 0x40, 0x1d, 0x61, - 0x14, 0x4a, 0xf3, 0x39, 0x21, 0xdd, 0x41, 0x50, 0xc3, 0xb3, 0xa6, 0x91, 0x63, 0x70, 0x7c, 0x22, - 0xa5, 0xf3, 0x33, 0x29, 0xad, 0xff, 0x04, 0xaa, 0x3d, 0x6b, 0x3c, 0xe1, 0xb2, 0x9c, 0x1a, 0xc6, - 0x20, 0x87, 0x73, 0x42, 0x4c, 0x3d, 0xfa, 0xc6, 0x45, 0xb7, 0xef, 0x84, 0x43, 0xc7, 0x97, 0x6b, - 0x54, 0x26, 0x51, 0xfc, 0x1e, 0xa0, 0x34, 0x37, 0x82, 0x13, 0x29, 0xce, 0x65, 0x5a, 0xff, 0x7b, - 0x19, 0x28, 0x2b, 0xd5, 0x60, 0xef, 0x43, 0x8e, 0x94, 0xc9, 0x8c, 0x2a, 0x08, 0x15, 0x02, 0xfe, - 0xcd, 0xd5, 0x0f, 0x24, 0x64, 0xf7, 0x20, 0x1f, 0xc5, 0x56, 0x28, 0xfd, 0xe9, 0x9a, 0xc2, 0xb1, - 0x15, 0x4c, 0x7d, 0xdb, 0xe0, 0x68, 0xa6, 0x43, 0xd6, 0xf1, 0x6d, 0xe1, 0x70, 0x98, 0xa7, 0x42, - 0xa4, 0xbe, 0x09, 0xa5, 0x24, 0x7b, 0x9c, 0x02, 0x46, 0xf7, 0x45, 0x4f, 0x5b, 0x62, 0x25, 0xc8, - 0x1b, 0xf5, 0xce, 0xd3, 0xa6, 0x96, 0xd1, 0xff, 0x20, 0x03, 0x30, 0xe3, 0x62, 0x0f, 0x53, 0xb5, - 0xbd, 0x7e, 0x3e, 0xd7, 0x87, 0xf4, 0x57, 0xa9, 0xec, 0x0d, 0x28, 0x4d, 0x7d, 0x02, 0x3a, 0xb6, - 0xd8, 0x89, 0x66, 0x00, 0xb4, 0x80, 0x64, 0x8c, 0xc7, 0x39, 0x0b, 0xe8, 0xa5, 0xe5, 0xe9, 0xdf, - 0x85, 0x52, 0x92, 0x1d, 0x1a, 0x75, 0x3b, 0xdd, 0x76, 0xbb, 0xfb, 0xa2, 0xd5, 0x79, 0xaa, 0x2d, - 0x61, 0x72, 0xdf, 0x68, 0x36, 0x9a, 0xdb, 0x98, 0xcc, 0xe0, 0x9c, 0x6d, 0x1c, 0x18, 0x46, 0xb3, - 0xd3, 0x37, 0x8d, 0xee, 0x0b, 0x6d, 0x59, 0xff, 0x73, 0x39, 0x58, 0xef, 0xfa, 0xdb, 0xd3, 0x89, - 0xe7, 0x0e, 0xad, 0xd8, 0x79, 0xe6, 0x9c, 0x35, 0xe2, 0x53, 0xdc, 0x7d, 0xad, 0x38, 0x0e, 0xf9, - 0x62, 0x2e, 0x19, 0x3c, 0xc1, 0x9d, 0x12, 0x91, 0x13, 0xc6, 0xe4, 0x73, 0x51, 0x57, 0x71, 0x95, - 0xc3, 0x1b, 0x81, 0x47, 0x6b, 0x99, 0x7d, 0x1f, 0x2e, 0x73, 0x47, 0x06, 0xa7, 0x44, 0x05, 0xd6, - 0xa4, 0xc5, 0x9c, 0x9d, 0x9b, 0xba, 0x8c, 0x13, 0x22, 0x2b, 0x92, 0x91, 0x08, 0xbb, 0x05, 0xe5, - 0x19, 0xbb, 0x3c, 0xa4, 0x82, 0x84, 0x90, 0x6a, 0x82, 0x86, 0xb7, 0xac, 0xb5, 0xe9, 0xda, 0xa7, - 0xe4, 0xe2, 0xc9, 0x1b, 0xd5, 0x60, 0xd6, 0x18, 0xdc, 0x84, 0x3f, 0x87, 0xf5, 0x14, 0x25, 0xd5, - 0x62, 0x85, 0x6a, 0xf1, 0xae, 0x74, 0x90, 0x9e, 0x6b, 0xbd, 0x0a, 0xc1, 0xea, 0x70, 0x8d, 0x74, - 0x2d, 0x48, 0x43, 0x85, 0x2e, 0xe2, 0x1e, 0xfa, 0x41, 0xe8, 0x08, 0x81, 0x5f, 0x74, 0xa3, 0x16, - 0xa5, 0x67, 0xf6, 0x8f, 0x72, 0xa8, 0xca, 0xf7, 0x17, 0x79, 0x5e, 0xc8, 0xd1, 0x2e, 0xdf, 0x41, - 0x73, 0x46, 0x81, 0xd2, 0x2d, 0x9b, 0xdd, 0x11, 0xea, 0xac, 0x29, 0x4d, 0x1a, 0x20, 0x93, 0xa6, - 0x42, 0xc0, 0xe7, 0x1c, 0x76, 0xbd, 0x03, 0x1b, 0x8b, 0x2a, 0xb9, 0x40, 0x0d, 0xdb, 0x54, 0xd5, - 0xb0, 0x73, 0x46, 0xfb, 0x4c, 0x25, 0xfb, 0x07, 0x19, 0xa8, 0x6c, 0x3b, 0xf6, 0x74, 0xf2, 0xa3, - 0xc0, 0xf5, 0x71, 0x02, 0x7c, 0x04, 0x95, 0xc0, 0xb3, 0x69, 0xf4, 0x94, 0xd8, 0x80, 0xd4, 0x89, - 0x91, 0x70, 0x6e, 0x43, 0xe0, 0xd9, 0x8d, 0xc0, 0xa3, 0x48, 0x82, 0xf7, 0xe0, 0x12, 0x77, 0x68, - 0x08, 0xff, 0xde, 0x29, 0x67, 0x5e, 0xa6, 0x91, 0xd1, 0x38, 0x8a, 0x2b, 0x47, 0x44, 0xfe, 0x6b, - 0xb0, 0xa1, 0x90, 0xe3, 0xc8, 0x70, 0xfa, 0xf9, 0x49, 0xb2, 0x9e, 0xf0, 0xca, 0x23, 0x1b, 0xfd, - 0xb7, 0x97, 0xa1, 0xc4, 0xdd, 0x21, 0x58, 0xdf, 0xfb, 0x50, 0x08, 0x06, 0x5f, 0x9a, 0x61, 0xe2, - 0x26, 0x98, 0x3b, 0x69, 0x5c, 0x09, 0x06, 0x5f, 0x1a, 0xce, 0x88, 0xbd, 0x23, 0xf7, 0x79, 0xdb, - 0x19, 0x89, 0x4e, 0xa9, 0xa6, 0xed, 0x11, 0xb1, 0xef, 0xa3, 0xad, 0xfc, 0x18, 0xca, 0xb3, 0x19, - 0x1f, 0xd5, 0x0a, 0x17, 0xf7, 0x42, 0xb2, 0x00, 0x22, 0x64, 0xe2, 0x2e, 0x21, 0xce, 0x54, 0xbc, - 0x98, 0x89, 0x93, 0x11, 0xd3, 0x67, 0x50, 0x9d, 0xc9, 0x78, 0xe2, 0x2b, 0x5d, 0xc8, 0xb7, 0x9a, - 0x50, 0xd2, 0x89, 0xc7, 0x3f, 0xcc, 0x40, 0xa9, 0xc5, 0x8b, 0x8f, 0x4f, 0xd9, 0x6d, 0xc8, 0xbe, - 0xa2, 0x17, 0x10, 0xc7, 0x1e, 0xc0, 0xba, 0x65, 0xdb, 0xa6, 0x35, 0x1a, 0x39, 0xc3, 0xd8, 0xb1, - 0x4d, 0x54, 0x81, 0x84, 0xcc, 0x59, 0xb3, 0x6c, 0xbb, 0x2e, 0xe0, 0x24, 0xbb, 0x71, 0xcd, 0x47, - 0xa6, 0x34, 0x3c, 0x67, 0x47, 0xca, 0x45, 0xa3, 0xea, 0x46, 0xc2, 0xee, 0xe4, 0xbe, 0xe4, 0x54, - 0xc7, 0xe6, 0x5e, 0xdd, 0xb1, 0xfa, 0xef, 0x2c, 0x03, 0x18, 0xce, 0xc4, 0xb3, 0x86, 0xce, 0xff, - 0x33, 0x95, 0x46, 0xb1, 0x94, 0x0c, 0xac, 0x6f, 0xcb, 0x10, 0x0c, 0x39, 0x88, 0xbe, 0xcd, 0x7e, - 0x08, 0x6f, 0x86, 0xce, 0x49, 0xe8, 0xc6, 0x8e, 0x39, 0x0a, 0x83, 0xb1, 0x99, 0x92, 0x3c, 0xb8, - 0x30, 0x4b, 0x54, 0x89, 0x6b, 0x82, 0x68, 0x27, 0x0c, 0xc6, 0x69, 0xe9, 0xa3, 0xff, 0xd7, 0x22, - 0x94, 0xeb, 0xbe, 0xe5, 0x9d, 0xfd, 0xd4, 0xa1, 0x98, 0x00, 0xf2, 0xae, 0x4e, 0xa6, 0x31, 0x6f, - 0x2e, 0x3f, 0x30, 0x2b, 0x11, 0x84, 0x1a, 0x7a, 0x0b, 0xca, 0xc1, 0x34, 0x4e, 0xf0, 0xfc, 0x08, - 0x0d, 0x38, 0x88, 0x08, 0x12, 0xfe, 0xc4, 0x73, 0x2f, 0xf9, 0xc9, 0xfc, 0x99, 0xf1, 0x27, 0x2a, - 0x71, 0xc2, 0x4f, 0x04, 0x28, 0x8d, 0xdc, 0x31, 0x35, 0x38, 0x9a, 0x8e, 0x1d, 0xde, 0xe8, 0x2c, - 0x8f, 0x42, 0x6b, 0x08, 0x18, 0xe6, 0x32, 0x76, 0xc6, 0x41, 0x78, 0xc6, 0x73, 0x59, 0xe1, 0xb9, - 0x70, 0x10, 0xe5, 0xf2, 0x2e, 0xb0, 0x13, 0xcb, 0x8d, 0xcd, 0x74, 0x56, 0xdc, 0x0c, 0xd1, 0x10, - 0xd3, 0x57, 0xb3, 0xbb, 0x02, 0x2b, 0xb6, 0x1b, 0x1d, 0xb7, 0xba, 0xc2, 0x04, 0x11, 0x29, 0x6c, - 0x4b, 0x34, 0xb4, 0x50, 0x03, 0x8a, 0x1d, 0xae, 0x2e, 0x67, 0x8d, 0x12, 0x42, 0xb6, 0x10, 0x80, - 0x3b, 0xa8, 0xef, 0xc4, 0x27, 0x41, 0x88, 0x9c, 0xdc, 0xc2, 0x98, 0x01, 0x50, 0xd3, 0x40, 0x52, - 0x2c, 0x88, 0xbc, 0x41, 0x59, 0x23, 0x49, 0xa3, 0xee, 0xce, 0x97, 0x2f, 0x61, 0x2b, 0xbc, 0xfa, - 0x33, 0x08, 0xbb, 0x0b, 0x55, 0xaa, 0x3e, 0x59, 0x20, 0xd8, 0x06, 0x3a, 0xe5, 0xca, 0x1a, 0x15, - 0x84, 0x92, 0x33, 0x01, 0xa9, 0x3e, 0x83, 0x6b, 0xa9, 0xf6, 0x99, 0x56, 0x18, 0x5a, 0x67, 0xe6, - 0xd8, 0xfa, 0x32, 0x08, 0xc9, 0xf1, 0x93, 0x35, 0xae, 0xa8, 0xdd, 0x56, 0x47, 0xf4, 0x1e, 0x62, - 0x2f, 0x64, 0x75, 0xfd, 0x20, 0x24, 0xaf, 0xd0, 0x42, 0x56, 0xc4, 0x92, 0x0b, 0x83, 0x06, 0x98, - 0xcc, 0xa1, 0x88, 0x47, 0x2f, 0x1a, 0x65, 0x82, 0x6d, 0x11, 0x08, 0x0d, 0x82, 0xe8, 0x31, 0x97, - 0xac, 0xeb, 0x22, 0xc8, 0xe8, 0x31, 0xc9, 0x5f, 0x8e, 0x38, 0x72, 0x2c, 0x9b, 0x4e, 0xce, 0x08, - 0xb1, 0xeb, 0x58, 0x74, 0x2e, 0x1d, 0x3d, 0x36, 0x27, 0xd3, 0x98, 0x87, 0x1d, 0x1a, 0xf9, 0xe8, - 0xf1, 0xfe, 0x34, 0x16, 0xe0, 0x43, 0x27, 0xa6, 0x60, 0x43, 0x02, 0x3f, 0x75, 0x62, 0xdc, 0x08, - 0xa3, 0xc7, 0xd2, 0x0b, 0x7e, 0x59, 0xf4, 0xed, 0x63, 0xe1, 0xe6, 0xd6, 0x61, 0x35, 0x41, 0x9a, - 0xe3, 0x29, 0x8f, 0x33, 0xcc, 0x1a, 0x65, 0x49, 0xb0, 0x37, 0xf5, 0x70, 0x60, 0x87, 0xd6, 0xf0, - 0xc8, 0x31, 0x43, 0xac, 0xca, 0x55, 0x3e, 0x74, 0x04, 0x31, 0xb0, 0x36, 0x6f, 0x00, 0x4f, 0x98, - 0x47, 0x6e, 0x4c, 0xde, 0xa9, 0xac, 0x51, 0x24, 0xc0, 0xae, 0x1b, 0xa3, 0x58, 0xe0, 0x48, 0x31, - 0x03, 0x29, 0x8b, 0x6b, 0x44, 0xb4, 0x46, 0x88, 0x3d, 0x82, 0x53, 0x46, 0xf7, 0x41, 0x4b, 0xd1, - 0x62, 0x7e, 0xd7, 0x89, 0xb4, 0xaa, 0x90, 0x62, 0xae, 0xf7, 0x80, 0x33, 0x9b, 0x38, 0xf5, 0x78, - 0x9e, 0x6f, 0x70, 0x73, 0x98, 0xc0, 0xdb, 0x6e, 0x74, 0x4c, 0x39, 0xde, 0x85, 0xaa, 0x42, 0x87, - 0xf9, 0xdd, 0xe0, 0x33, 0x23, 0x21, 0x4b, 0xd5, 0x31, 0x74, 0xc6, 0x41, 0x2c, 0x9a, 0xf9, 0xa6, - 0x52, 0x47, 0x83, 0xe0, 0xe9, 0x3a, 0x0a, 0x5a, 0xcc, 0xf3, 0xa6, 0x52, 0x47, 0x4e, 0x8a, 0xb9, - 0xde, 0x86, 0x0a, 0x4a, 0x91, 0xd8, 0xf1, 0xf9, 0xe2, 0xbf, 0xc5, 0x3b, 0x56, 0xc0, 0x68, 0xf5, - 0xdf, 0x86, 0x0a, 0xef, 0x79, 0x21, 0x2e, 0x37, 0x39, 0x89, 0x80, 0x21, 0x89, 0xfe, 0xb3, 0x0c, - 0x5c, 0xef, 0xd2, 0x81, 0x22, 0x09, 0xbc, 0x3d, 0x27, 0x8a, 0xac, 0x43, 0x67, 0x27, 0x08, 0x77, - 0xa6, 0x3f, 0xfd, 0xe9, 0x19, 0xbb, 0x0f, 0x6b, 0xfb, 0x56, 0xe8, 0xf8, 0x71, 0x72, 0xe0, 0x24, - 0x94, 0x8b, 0xf3, 0x60, 0xf6, 0x04, 0x34, 0x0e, 0x3a, 0x48, 0xd4, 0x34, 0x61, 0xa8, 0xa4, 0xfd, - 0xc3, 0x73, 0x54, 0xfa, 0xff, 0xda, 0x84, 0x5c, 0x27, 0xb0, 0x1d, 0xf6, 0x01, 0x94, 0x28, 0xfc, - 0x4f, 0x51, 0x9c, 0x85, 0x63, 0x01, 0xd1, 0xf4, 0x87, 0x34, 0xe6, 0xa2, 0x2f, 0xbe, 0x2e, 0x0e, - 0x18, 0xbc, 0x4d, 0xba, 0x3f, 0x9d, 0xb6, 0xa1, 0x4c, 0x2f, 0x0b, 0xff, 0x04, 0x99, 0xd3, 0x1c, - 0x83, 0x12, 0x81, 0x3c, 0xb3, 0xa1, 0xe3, 0x93, 0x86, 0x99, 0x37, 0x92, 0x34, 0x59, 0x5c, 0x61, - 0x80, 0xfb, 0x0f, 0x5f, 0x37, 0xf9, 0x05, 0x16, 0x17, 0xc7, 0xd3, 0x42, 0xfa, 0x00, 0x4a, 0x5f, - 0x06, 0xae, 0xcf, 0x2b, 0xbe, 0x32, 0x57, 0x71, 0x54, 0xaa, 0x78, 0xc5, 0xbf, 0x14, 0x5f, 0xec, - 0x0e, 0x14, 0x02, 0x9f, 0xe7, 0x5d, 0x98, 0xcb, 0x7b, 0x25, 0xf0, 0xdb, 0x3c, 0x1a, 0x65, 0xd5, - 0x8d, 0xcc, 0xd0, 0x3d, 0x3c, 0x8a, 0x4d, 0xe4, 0x14, 0xa7, 0x74, 0x65, 0x37, 0x32, 0x10, 0x86, - 0xd9, 0xa2, 0x21, 0x39, 0x72, 0x3d, 0xdc, 0xe6, 0x28, 0xb3, 0xd2, 0x5c, 0x66, 0xc0, 0xd1, 0x94, - 0xe1, 0x5b, 0x50, 0x3c, 0x0c, 0x83, 0xe9, 0x04, 0x2d, 0x43, 0x98, 0xa3, 0x2c, 0x10, 0x6e, 0xeb, - 0x0c, 0x85, 0x3e, 0x7d, 0xba, 0xfe, 0xa1, 0x49, 0x46, 0x74, 0x79, 0x33, 0x7b, 0xbf, 0x68, 0x54, - 0x24, 0x90, 0xcc, 0xe3, 0xb7, 0xa0, 0x68, 0x1d, 0x1e, 0x9a, 0x22, 0xa8, 0x66, 0x2e, 0x2f, 0xeb, - 0xf0, 0x90, 0x8a, 0x7c, 0x08, 0xab, 0x27, 0xae, 0x6f, 0x46, 0x13, 0x67, 0xc8, 0x69, 0x57, 0xe7, - 0xbb, 0xf2, 0xc4, 0xf5, 0xd1, 0x76, 0x24, 0x7a, 0xd5, 0x78, 0xad, 0xbe, 0xd6, 0x78, 0xdd, 0x84, - 0xbc, 0xe7, 0x8e, 0xdd, 0x58, 0x84, 0xd9, 0xa4, 0xb4, 0x5b, 0x42, 0x30, 0x1d, 0x56, 0x84, 0xd7, - 0x56, 0x9b, 0x23, 0x11, 0x98, 0xb4, 0x12, 0xb0, 0xfe, 0x1a, 0x25, 0x40, 0xd1, 0x34, 0xd9, 0xab, - 0x35, 0xcd, 0x8f, 0x49, 0xa5, 0x73, 0xfc, 0xd8, 0x94, 0x0c, 0x97, 0x16, 0x33, 0x54, 0x38, 0x59, - 0x97, 0xb3, 0x7d, 0x08, 0xe5, 0x90, 0xbc, 0x2a, 0x26, 0xb9, 0x60, 0x36, 0x54, 0xb3, 0x74, 0xe6, - 0x6e, 0x31, 0x20, 0x9c, 0xb9, 0x5e, 0xea, 0xb0, 0x36, 0x0b, 0x1b, 0xe4, 0xf1, 0x97, 0x97, 0x55, - 0xb7, 0x6e, 0x2a, 0xce, 0x50, 0x2a, 0x91, 0x6e, 0x2a, 0xf8, 0xf0, 0x0e, 0xac, 0xf2, 0x80, 0x01, - 0x7e, 0xac, 0x1b, 0x91, 0x9c, 0x2e, 0x19, 0x15, 0x02, 0xf2, 0x23, 0xdf, 0x88, 0x3d, 0x04, 0x90, - 0x0a, 0x50, 0x7c, 0x4a, 0x82, 0x3a, 0x69, 0x0d, 0x97, 0xe6, 0x8d, 0xf8, 0xd4, 0x28, 0xd9, 0xf2, - 0x13, 0xe5, 0xcf, 0xc0, 0xf5, 0x6d, 0x9c, 0x47, 0xb1, 0x75, 0x18, 0xd5, 0x6a, 0xb4, 0xcc, 0xca, - 0x02, 0xd6, 0xb7, 0x0e, 0x23, 0x34, 0x34, 0x2c, 0xae, 0xef, 0xf0, 0x7a, 0x5f, 0x53, 0xbd, 0x10, - 0x8a, 0x26, 0x64, 0x94, 0x2d, 0x45, 0x2d, 0xfa, 0x14, 0x98, 0x3c, 0x21, 0x52, 0xec, 0x86, 0xeb, - 0x73, 0x53, 0x6b, 0x4d, 0x1c, 0x11, 0x25, 0xb1, 0xce, 0x9f, 0xc2, 0x6a, 0x5a, 0x2d, 0xbc, 0xb1, - 0xe0, 0x1c, 0x85, 0x46, 0xdd, 0xa8, 0x0c, 0x55, 0x45, 0xf1, 0x0e, 0x8f, 0x58, 0x25, 0x19, 0x4c, - 0x8c, 0xfc, 0xac, 0xa0, 0xe2, 0x07, 0x71, 0x43, 0xc2, 0xb0, 0x7f, 0xa4, 0xb9, 0x10, 0x9f, 0x92, - 0xd8, 0x4e, 0xfa, 0x27, 0x51, 0xd0, 0x51, 0xfd, 0x92, 0xba, 0x3a, 0x0e, 0x35, 0x57, 0x82, 0x89, - 0xe1, 0x56, 0x6a, 0xa8, 0x13, 0xed, 0xd8, 0x80, 0x70, 0xa6, 0x29, 0xdf, 0x82, 0x72, 0x14, 0x4c, - 0xc3, 0xa1, 0x63, 0x46, 0xb1, 0x33, 0xa9, 0x6d, 0x52, 0x8f, 0x02, 0x07, 0xf5, 0x62, 0x67, 0xc2, - 0x9e, 0x40, 0x75, 0x12, 0x62, 0x67, 0x26, 0xf5, 0xd0, 0xd5, 0x26, 0xee, 0x87, 0xce, 0xac, 0x2a, - 0x95, 0x89, 0x92, 0x62, 0x3f, 0x80, 0x75, 0x85, 0x73, 0x7a, 0x4c, 0xcc, 0x77, 0x88, 0x79, 0xe3, - 0x1c, 0xf3, 0xc1, 0x31, 0xb2, 0x57, 0x27, 0xa9, 0x34, 0xab, 0x9f, 0xb3, 0xca, 0x51, 0xe3, 0xbd, - 0x4b, 0xfc, 0x57, 0x2f, 0x30, 0xb5, 0x53, 0xe6, 0xfa, 0x33, 0x7e, 0x6a, 0xd0, 0x8a, 0x9a, 0xbe, - 0x5d, 0x7b, 0x8b, 0x5f, 0x2b, 0xa0, 0x04, 0x7b, 0x0c, 0x15, 0xae, 0x7b, 0x51, 0x50, 0x5f, 0x54, - 0xbb, 0xa7, 0xba, 0x25, 0x49, 0x01, 0x23, 0x84, 0x51, 0xf6, 0x92, 0xef, 0x88, 0x7d, 0x02, 0xeb, - 0xdc, 0x67, 0xac, 0xca, 0xc7, 0xb7, 0xe7, 0xa7, 0x08, 0x11, 0xed, 0xcc, 0x84, 0xa4, 0x01, 0xd7, - 0xc2, 0xa9, 0x4f, 0xfa, 0x98, 0xe0, 0x9c, 0x84, 0xc1, 0xc0, 0xe1, 0xfc, 0xf7, 0x89, 0x5f, 0x34, - 0xc7, 0xe0, 0x64, 0x9c, 0x97, 0x04, 0xd3, 0x95, 0x50, 0x05, 0xed, 0x23, 0xdf, 0x05, 0x79, 0x0e, - 0xa6, 0xae, 0x67, 0xf3, 0x3c, 0xbf, 0xf3, 0x4d, 0xf2, 0xdc, 0x42, 0x3e, 0xca, 0x93, 0x41, 0x6e, - 0x3a, 0x75, 0xed, 0xda, 0x03, 0x1e, 0x7f, 0x87, 0xdf, 0xec, 0x2d, 0xa8, 0x86, 0xce, 0x70, 0x1a, - 0x46, 0xee, 0x4b, 0xc7, 0x8c, 0x5c, 0xff, 0xb8, 0xf6, 0x0e, 0xf5, 0xe3, 0x6a, 0x02, 0xed, 0xb9, - 0xfe, 0x31, 0xce, 0x3b, 0xe7, 0x34, 0x76, 0x42, 0x9f, 0xc7, 0x19, 0xbf, 0xab, 0xce, 0xbb, 0x26, - 0x21, 0x50, 0x2e, 0x18, 0xe0, 0x24, 0xdf, 0xe7, 0x26, 0x47, 0xc4, 0x27, 0xc7, 0xc3, 0xaf, 0x35, - 0x39, 0x7a, 0x34, 0x39, 0xee, 0x41, 0xd1, 0xf5, 0x63, 0x27, 0x7c, 0x69, 0x79, 0xb5, 0xf7, 0xe7, - 0x44, 0x71, 0x82, 0x63, 0x77, 0xa1, 0x10, 0x79, 0x2e, 0xca, 0x87, 0xda, 0x07, 0x73, 0x64, 0x12, - 0xc5, 0xee, 0x43, 0x29, 0xb9, 0x08, 0x53, 0xfb, 0x70, 0x8e, 0x6e, 0x86, 0x64, 0x37, 0x21, 0x77, - 0x82, 0x13, 0xea, 0xd1, 0xbc, 0x1b, 0x19, 0xe1, 0xb8, 0x77, 0x8f, 0x5c, 0xcf, 0xe3, 0x7b, 0xf7, - 0xe3, 0xb9, 0xbd, 0x7b, 0xc7, 0xf5, 0x3c, 0xbe, 0x77, 0x8f, 0xc4, 0x17, 0xee, 0x7c, 0xc4, 0x81, - 0x2d, 0xf9, 0x68, 0x7e, 0xe7, 0x43, 0xdc, 0x73, 0xba, 0x32, 0x54, 0x8e, 0xc8, 0x37, 0xca, 0x5d, - 0xbc, 0x1f, 0xab, 0x7d, 0x95, 0x76, 0x9a, 0x1a, 0x10, 0x25, 0x69, 0x54, 0x86, 0x85, 0x67, 0xd8, - 0xb5, 0x4f, 0x6b, 0x9f, 0xf0, 0x28, 0x75, 0x0e, 0x69, 0xd9, 0xa7, 0xec, 0x03, 0x58, 0x95, 0x61, - 0x20, 0x58, 0x5c, 0x54, 0xfb, 0x74, 0xae, 0x06, 0x69, 0x02, 0xb6, 0x0d, 0x95, 0x11, 0xea, 0x72, - 0x63, 0xae, 0xda, 0xd5, 0x9e, 0x50, 0x45, 0x36, 0xe5, 0xae, 0x7a, 0x91, 0xea, 0x67, 0xa4, 0xb8, - 0xd8, 0x43, 0x60, 0xee, 0x88, 0x8f, 0x27, 0x9a, 0xad, 0x5c, 0x7d, 0xab, 0x7d, 0x46, 0xb3, 0x6b, - 0x01, 0x86, 0x0e, 0x8a, 0x1c, 0xdf, 0x36, 0xc7, 0x91, 0xd0, 0x11, 0xbe, 0x4b, 0xf5, 0x14, 0xd2, - 0x30, 0xb9, 0x30, 0x27, 0x36, 0xa3, 0x32, 0xd2, 0xee, 0x45, 0x5c, 0x65, 0xf8, 0x0c, 0x70, 0xba, - 0xbe, 0x9c, 0xb1, 0xfe, 0xda, 0x2b, 0x59, 0x91, 0x56, 0xb2, 0x3e, 0x81, 0xaa, 0xed, 0xd8, 0xd3, - 0x09, 0xa9, 0x4b, 0x34, 0x45, 0xbf, 0xa7, 0x0a, 0x3f, 0xd5, 0xc5, 0x65, 0x54, 0x6c, 0xd5, 0xe1, - 0xf5, 0x29, 0xac, 0x49, 0x5f, 0x54, 0x2c, 0xdc, 0x56, 0xdf, 0x57, 0x8b, 0x4d, 0x5c, 0x4d, 0xc6, - 0xea, 0x54, 0x7e, 0x52, 0x91, 0x8f, 0x61, 0x95, 0x76, 0xdd, 0xc8, 0xb7, 0x26, 0xd1, 0x51, 0x10, - 0xd7, 0x7e, 0x5d, 0x55, 0x20, 0x7a, 0x02, 0x6a, 0x54, 0x90, 0x48, 0xa6, 0x70, 0x37, 0x99, 0xad, - 0xd3, 0x61, 0xec, 0xd4, 0x7e, 0xc0, 0x77, 0x93, 0x04, 0xd8, 0x88, 0x1d, 0xf6, 0x18, 0xc0, 0x9a, - 0x4c, 0xbc, 0x33, 0x3e, 0x35, 0x7f, 0x48, 0x53, 0x73, 0x43, 0x99, 0x9a, 0x75, 0x44, 0xd2, 0xdc, - 0x2c, 0x59, 0xf2, 0x93, 0x3d, 0x82, 0xca, 0x24, 0x88, 0x62, 0xd3, 0x1e, 0x7b, 0xd4, 0xfe, 0xba, - 0xba, 0xb6, 0xf7, 0x83, 0x28, 0xde, 0x1e, 0x7b, 0xb4, 0xa7, 0x4c, 0x92, 0x6f, 0xd6, 0x86, 0x4b, - 0x29, 0xb9, 0x6d, 0xd1, 0xb1, 0x6c, 0x6d, 0x8b, 0x4a, 0xbc, 0xa1, 0x94, 0xa8, 0xc8, 0x6f, 0x11, - 0x93, 0xb4, 0x1e, 0x9c, 0x07, 0xa1, 0x4d, 0xc4, 0xc7, 0x20, 0x09, 0xcc, 0x6b, 0x70, 0x55, 0x82, - 0xa0, 0x32, 0x32, 0xef, 0x09, 0xac, 0xcd, 0xa8, 0xb0, 0x81, 0x51, 0x6d, 0x5b, 0x9d, 0xc9, 0x4a, - 0xf8, 0xec, 0xaa, 0x64, 0x44, 0x58, 0x44, 0x7d, 0x17, 0x78, 0xde, 0x74, 0x22, 0x44, 0x69, 0xad, - 0x29, 0xfa, 0x8e, 0x80, 0x5c, 0x4a, 0xea, 0xff, 0x22, 0x0f, 0x45, 0x69, 0x2f, 0xb0, 0x32, 0x14, - 0x0e, 0x3a, 0xcf, 0x3a, 0xdd, 0x17, 0x1d, 0x7e, 0xd3, 0xa7, 0xde, 0xeb, 0x35, 0x8d, 0xbe, 0x66, - 0xb3, 0x2a, 0x00, 0xc5, 0xf2, 0x9b, 0xbd, 0x46, 0xbd, 0xc3, 0x6f, 0xfe, 0xd0, 0x0d, 0x02, 0x9e, - 0x5e, 0x66, 0xeb, 0xb0, 0xba, 0x73, 0xd0, 0xa1, 0xf8, 0x28, 0x0e, 0xca, 0x22, 0xa8, 0xf9, 0x39, - 0x3f, 0x15, 0xe2, 0xa0, 0x1c, 0x82, 0xf6, 0xea, 0xfd, 0xa6, 0xd1, 0x92, 0xa0, 0x3c, 0x85, 0x5a, - 0x75, 0x0f, 0x8c, 0x86, 0xc8, 0x69, 0x85, 0x5d, 0x86, 0xf5, 0x84, 0x4d, 0x66, 0xa9, 0x15, 0xb0, - 0x66, 0xfb, 0x46, 0xf7, 0x47, 0xcd, 0x46, 0x5f, 0x03, 0x3a, 0x62, 0x7a, 0xfa, 0x54, 0x2b, 0xb3, - 0x0a, 0x14, 0xb7, 0x5b, 0xbd, 0x7e, 0xab, 0xd3, 0xe8, 0x6b, 0x15, 0xac, 0xf0, 0x4e, 0xab, 0xdd, - 0x6f, 0x1a, 0xda, 0x2a, 0x2b, 0x42, 0xee, 0x47, 0xdd, 0x56, 0x47, 0xab, 0xd2, 0x9d, 0x86, 0xfa, - 0xde, 0x7e, 0xbb, 0xa9, 0xad, 0x21, 0xb4, 0xd7, 0x35, 0xfa, 0x9a, 0x86, 0xd0, 0x17, 0xad, 0xce, - 0x76, 0xf7, 0x85, 0xb6, 0xce, 0x4a, 0x90, 0x3f, 0xe8, 0x60, 0x31, 0x8c, 0xad, 0x42, 0x89, 0x3e, - 0xcd, 0x7a, 0xbb, 0xad, 0x5d, 0x52, 0xce, 0xa5, 0x36, 0x10, 0x45, 0xa7, 0x5c, 0x3d, 0xac, 0xc3, - 0x65, 0x6c, 0x4b, 0x92, 0x24, 0xea, 0x2b, 0x98, 0xcf, 0x5e, 0xab, 0x73, 0xd0, 0xd3, 0xae, 0x22, - 0x31, 0x7d, 0x12, 0xa6, 0x86, 0xf9, 0xb4, 0x3a, 0xd4, 0x95, 0x37, 0xf1, 0x7b, 0xbb, 0xd9, 0x6e, - 0xf6, 0x9b, 0xda, 0x2d, 0x6c, 0x95, 0xd1, 0xdc, 0x6f, 0xd7, 0x1b, 0x4d, 0x6d, 0x13, 0x13, 0xed, - 0x6e, 0xe3, 0x99, 0xd9, 0xdd, 0xd7, 0x6e, 0xb3, 0x0d, 0xd0, 0xba, 0x1d, 0x73, 0xfb, 0x60, 0xbf, - 0xdd, 0x6a, 0xd4, 0xfb, 0x4d, 0xf3, 0x59, 0xf3, 0x0b, 0x4d, 0xc7, 0x6e, 0xdf, 0x37, 0x9a, 0xa6, - 0xc8, 0xeb, 0x0e, 0xd3, 0xa0, 0xb2, 0x73, 0xf0, 0x93, 0x9f, 0x7c, 0x61, 0x8a, 0x76, 0xbf, 0x85, - 0xd5, 0x9a, 0x51, 0x98, 0x07, 0xcf, 0xb4, 0x7b, 0xe7, 0x40, 0xbd, 0x67, 0xda, 0xdb, 0xd8, 0x6f, - 0x72, 0x20, 0xb4, 0xfb, 0x48, 0x60, 0x34, 0x1b, 0x07, 0x46, 0xaf, 0xf5, 0xbc, 0x69, 0x36, 0xfa, - 0x4d, 0xed, 0x3b, 0xd4, 0x51, 0xad, 0xce, 0x33, 0xed, 0x01, 0xb6, 0x04, 0xbf, 0xf8, 0xf0, 0xbc, - 0xc3, 0x18, 0x54, 0x67, 0xb4, 0x04, 0x7b, 0x17, 0x49, 0xb6, 0x8c, 0x6e, 0x7d, 0xbb, 0x51, 0xef, - 0xf5, 0xb5, 0xf7, 0xb0, 0x1b, 0x7a, 0xfb, 0xed, 0x56, 0x5f, 0x7b, 0x88, 0x6d, 0x7d, 0x5a, 0xef, - 0xef, 0x36, 0x0d, 0xed, 0x7d, 0x1c, 0xe9, 0x7e, 0x6b, 0xaf, 0x69, 0x8a, 0x6e, 0x7f, 0x84, 0x65, - 0xec, 0xb4, 0xda, 0x6d, 0xed, 0x31, 0x1d, 0xbd, 0xd4, 0x8d, 0x7e, 0x8b, 0xc6, 0xfa, 0x23, 0xcc, - 0xa0, 0xbe, 0xbf, 0xdf, 0xfe, 0x42, 0xfb, 0x18, 0x1b, 0xb8, 0x77, 0xd0, 0xee, 0xb7, 0xcc, 0x83, - 0xfd, 0xed, 0x7a, 0xbf, 0xa9, 0x7d, 0x42, 0x13, 0xa1, 0xdb, 0xeb, 0x6f, 0xef, 0xb5, 0xb5, 0x4f, - 0x29, 0x4f, 0x9a, 0x86, 0x8d, 0x76, 0xb7, 0xd3, 0xd4, 0x9e, 0xe8, 0xbf, 0x09, 0x45, 0x69, 0x43, - 0x62, 0x36, 0xad, 0x4e, 0xa7, 0x69, 0x68, 0x4b, 0x58, 0x54, 0xbb, 0xb9, 0xd3, 0xd7, 0x32, 0x74, - 0x0e, 0xd5, 0x7a, 0xba, 0xdb, 0xd7, 0x96, 0xf1, 0xb3, 0x7b, 0x80, 0xbd, 0x96, 0xa5, 0xe6, 0x36, - 0xf7, 0x5a, 0x5a, 0x0e, 0xbf, 0xea, 0x9d, 0x7e, 0x4b, 0xcb, 0xd3, 0xbc, 0x69, 0x75, 0x9e, 0xb6, - 0x9b, 0xda, 0x0a, 0x42, 0xf7, 0xea, 0xc6, 0x33, 0xad, 0xc0, 0x33, 0xdd, 0x6e, 0x7e, 0xae, 0x15, - 0xd9, 0x0a, 0x2c, 0xb7, 0x1f, 0x69, 0x25, 0x04, 0x6d, 0x37, 0xb7, 0x0f, 0xf6, 0x35, 0xd0, 0xef, - 0x43, 0xa1, 0x7e, 0x78, 0xb8, 0x87, 0x26, 0x3a, 0xb6, 0xee, 0xa0, 0xdd, 0xe6, 0xeb, 0x68, 0xab, - 0xdb, 0xef, 0x77, 0xf7, 0xb4, 0x0c, 0xce, 0xdc, 0x7e, 0x77, 0x5f, 0x5b, 0xd6, 0x5b, 0x50, 0x94, - 0x1b, 0xa6, 0x72, 0x4f, 0xa7, 0x08, 0xb9, 0x7d, 0xa3, 0xf9, 0x9c, 0x1f, 0x9e, 0x76, 0x9a, 0x9f, - 0x63, 0x35, 0xf1, 0x0b, 0x33, 0xca, 0x62, 0x41, 0xfc, 0x42, 0x0d, 0x5d, 0xd4, 0x69, 0xb7, 0x3a, - 0xcd, 0xba, 0xa1, 0xe5, 0xf5, 0x8f, 0x53, 0xe7, 0x52, 0x42, 0xb6, 0x60, 0xf1, 0xf5, 0x96, 0x28, - 0xbe, 0xf5, 0xb4, 0xd3, 0x35, 0x9a, 0xfc, 0xe6, 0x8f, 0xe8, 0xc8, 0x65, 0xfd, 0x1d, 0x28, 0x25, - 0x72, 0x11, 0x27, 0x56, 0xc3, 0xe8, 0xf6, 0x7a, 0xbc, 0xdf, 0x97, 0x30, 0x4d, 0x7d, 0xc3, 0xd3, - 0x19, 0xbd, 0x07, 0xeb, 0x52, 0x24, 0x53, 0x50, 0x34, 0xd9, 0x16, 0x1b, 0x90, 0x6f, 0x3b, 0x2f, - 0x1d, 0x4f, 0x46, 0xf7, 0x52, 0x02, 0xa1, 0xdd, 0xc1, 0x97, 0xad, 0xe4, 0x72, 0x26, 0x25, 0x50, - 0x07, 0xeb, 0x28, 0xf7, 0x43, 0x29, 0xaa, 0xfc, 0x77, 0x32, 0x50, 0x4c, 0x04, 0xfd, 0x5d, 0x58, - 0xee, 0xf7, 0x84, 0x5f, 0x7b, 0xe3, 0xe1, 0xec, 0xd2, 0x7b, 0x5f, 0x7e, 0x19, 0xcb, 0xfd, 0x1e, - 0x7b, 0x17, 0x56, 0xf8, 0x75, 0x36, 0x71, 0x20, 0xb1, 0x91, 0xde, 0x3c, 0xfa, 0x84, 0x33, 0x04, - 0x0d, 0xfb, 0x18, 0x4a, 0x49, 0x6d, 0x85, 0x7f, 0xe3, 0x6a, 0x9a, 0x21, 0x41, 0x1b, 0x33, 0x4a, - 0xbd, 0x0d, 0xd5, 0x74, 0x86, 0xec, 0x26, 0x00, 0xcf, 0x52, 0xf1, 0xeb, 0x28, 0x10, 0x76, 0x1d, - 0xe4, 0x2d, 0xbb, 0x6d, 0xaa, 0xd8, 0x6a, 0x72, 0xeb, 0x6e, 0x5b, 0xff, 0x9b, 0x59, 0x80, 0x99, - 0xaa, 0x88, 0x1d, 0x91, 0x78, 0x6d, 0xf2, 0xe2, 0x48, 0xf3, 0x0d, 0x28, 0x79, 0x81, 0x65, 0xab, - 0x77, 0xde, 0x8b, 0x08, 0xa0, 0xa1, 0x51, 0x6f, 0x9c, 0x94, 0x78, 0x3c, 0x01, 0xbb, 0x02, 0x2b, - 0xa3, 0x20, 0x1c, 0x5b, 0xb1, 0x08, 0xe5, 0x16, 0x29, 0x94, 0xf8, 0xfc, 0x98, 0x0d, 0x15, 0x66, - 0x9f, 0xa2, 0xb9, 0x71, 0x0c, 0x2a, 0x02, 0xd8, 0x46, 0x18, 0x1a, 0x46, 0x8e, 0x3f, 0xf4, 0x82, - 0xc8, 0xb1, 0xcd, 0x01, 0x0f, 0xd1, 0xa8, 0x18, 0x20, 0x41, 0x5b, 0x67, 0xbc, 0xb5, 0xe1, 0xd8, - 0xf5, 0xad, 0x58, 0x38, 0x9f, 0xa9, 0xb5, 0x12, 0x82, 0xd5, 0xfd, 0x32, 0x0a, 0x84, 0x13, 0x87, - 0x9f, 0xd8, 0x15, 0x11, 0x40, 0xd5, 0x7d, 0x13, 0xc0, 0x89, 0x86, 0xd6, 0x84, 0x67, 0x5e, 0xa2, - 0xcc, 0x4b, 0x02, 0xb2, 0x75, 0xc6, 0xda, 0x50, 0xed, 0x0f, 0x70, 0x87, 0x0a, 0xd0, 0x1e, 0x6f, - 0x04, 0x9e, 0x70, 0xaf, 0xdc, 0x3d, 0xaf, 0x53, 0x3f, 0x4c, 0x93, 0xf1, 0xa3, 0xc5, 0x73, 0xbc, - 0xd7, 0xeb, 0x70, 0x69, 0x01, 0xd9, 0x37, 0x8a, 0xb1, 0xf2, 0xe4, 0xe8, 0xd4, 0xe3, 0x98, 0x6e, - 0x4f, 0x24, 0x9b, 0x71, 0x46, 0xc6, 0x80, 0xf3, 0x7d, 0xf8, 0x0d, 0x8a, 0xa2, 0x10, 0xe1, 0x79, - 0x62, 0x90, 0x92, 0xb0, 0xbb, 0x7b, 0xb0, 0x86, 0xc8, 0x91, 0xeb, 0x78, 0xb6, 0x20, 0xe1, 0xc1, - 0xff, 0xab, 0xc3, 0xc0, 0xdb, 0x41, 0x28, 0xd1, 0xe9, 0x7f, 0x3d, 0x0f, 0x30, 0x33, 0xc3, 0x52, - 0xa7, 0x9b, 0x99, 0xf4, 0xe9, 0xe6, 0x23, 0xb8, 0x22, 0xae, 0x86, 0x24, 0x47, 0x84, 0xae, 0x6f, - 0x0e, 0x2c, 0x79, 0x90, 0xcc, 0x04, 0x96, 0x9f, 0x12, 0xb6, 0xfc, 0x2d, 0x0b, 0x95, 0xba, 0x35, - 0x95, 0x27, 0x3e, 0x9b, 0xa4, 0x0f, 0xc2, 0x55, 0x55, 0x61, 0xc6, 0xde, 0x3f, 0x9b, 0xb0, 0x0f, - 0xe0, 0x72, 0xe8, 0x8c, 0x42, 0x27, 0x3a, 0x32, 0xe3, 0x48, 0x2d, 0x8c, 0xc7, 0x6b, 0xad, 0x0b, - 0x64, 0x3f, 0x4a, 0xca, 0xfa, 0x00, 0x2e, 0x0b, 0x03, 0xed, 0x5c, 0xf5, 0xf8, 0x1d, 0xe2, 0x75, - 0x8e, 0x54, 0x6b, 0xf7, 0x26, 0x80, 0xb0, 0x4d, 0xe5, 0xcb, 0x11, 0x45, 0xa3, 0xc4, 0xed, 0x50, - 0x71, 0xd3, 0x92, 0x0c, 0x4c, 0x71, 0xf4, 0xc3, 0x13, 0x4c, 0x87, 0x1c, 0x8a, 0x53, 0x3a, 0xa6, - 0xa8, 0x3e, 0xaa, 0x3e, 0xa4, 0x97, 0x31, 0xe8, 0xe6, 0x6b, 0x60, 0x3b, 0x06, 0xe1, 0xd8, 0x7b, - 0x70, 0x49, 0x6d, 0xb6, 0xbc, 0xf6, 0x5d, 0xa6, 0x8a, 0x68, 0xb3, 0x86, 0x1a, 0xfc, 0x02, 0xf8, - 0x3b, 0xc0, 0x94, 0x9a, 0x4b, 0xea, 0x0a, 0x51, 0xaf, 0x25, 0xd5, 0x16, 0xc4, 0x6f, 0x03, 0x55, - 0x91, 0x7b, 0x85, 0x57, 0xe7, 0xad, 0x31, 0x44, 0x92, 0x07, 0xf9, 0x03, 0xb8, 0x3c, 0x6b, 0x9d, - 0x69, 0xc5, 0x66, 0x7c, 0xe4, 0x98, 0x8e, 0x6f, 0xd3, 0x7d, 0x9e, 0xa2, 0xb1, 0x9e, 0x34, 0xb4, - 0x1e, 0xf7, 0x8f, 0x1c, 0xb4, 0xa7, 0x14, 0xff, 0xd8, 0xda, 0xab, 0xfd, 0x63, 0x9f, 0x40, 0x2d, - 0x75, 0xe4, 0xa9, 0x76, 0x37, 0xbf, 0x0f, 0xb7, 0xa1, 0x1e, 0x74, 0x26, 0x3d, 0xfe, 0x00, 0xd6, - 0x8f, 0xac, 0xc8, 0x4c, 0xf1, 0x92, 0xdb, 0xae, 0x68, 0xac, 0x1d, 0x59, 0xd1, 0xbe, 0xc2, 0xa3, - 0xff, 0xad, 0x0c, 0x54, 0xd3, 0x86, 0x29, 0xbf, 0x0f, 0xe1, 0x4d, 0xc7, 0x3e, 0x8f, 0x6e, 0xc8, - 0x1b, 0x32, 0x89, 0x6b, 0x61, 0x72, 0x6c, 0xf2, 0x94, 0x5c, 0x0b, 0x93, 0xe3, 0x06, 0xa5, 0xd9, - 0x77, 0xa0, 0x30, 0x39, 0xe6, 0xc2, 0xe1, 0xa2, 0xd9, 0xb7, 0x32, 0xe1, 0x61, 0xa5, 0xdf, 0x81, - 0xc2, 0x54, 0x90, 0xe6, 0x2e, 0x22, 0x9d, 0x12, 0xa9, 0xfe, 0x2f, 0x97, 0xa1, 0xa2, 0xba, 0x64, - 0xbe, 0xce, 0x49, 0xe8, 0x37, 0x3a, 0xc1, 0xde, 0xa4, 0x28, 0x33, 0x93, 0x62, 0x58, 0xb1, 0x9f, - 0xf8, 0x31, 0x28, 0x1c, 0x59, 0x51, 0x7d, 0x1a, 0x07, 0x8d, 0x80, 0x9f, 0xbe, 0x04, 0x9e, 0x8c, - 0x6d, 0xe5, 0x2b, 0x03, 0x65, 0x82, 0x08, 0x6b, 0xfd, 0x40, 0x84, 0xce, 0xd3, 0x65, 0x19, 0x8a, - 0x9e, 0xc8, 0xcf, 0xcd, 0x97, 0x8a, 0xbc, 0x2b, 0x43, 0x81, 0x11, 0x8f, 0x60, 0x6d, 0x16, 0xa8, - 0x2c, 0x03, 0x2e, 0xce, 0xb3, 0xac, 0x26, 0x51, 0xca, 0xe2, 0x76, 0xec, 0xaa, 0x1b, 0x99, 0x81, - 0x67, 0xcb, 0x1b, 0x11, 0x05, 0xe9, 0xea, 0xee, 0x7a, 0xb6, 0xb8, 0x2f, 0xc5, 0x69, 0x7c, 0xe7, - 0x44, 0xd2, 0x24, 0xee, 0xf0, 0x8e, 0x73, 0x22, 0x6e, 0x46, 0xfc, 0x7e, 0x06, 0xd6, 0xe7, 0x5c, - 0x28, 0x28, 0x39, 0x67, 0x2f, 0xb2, 0xe0, 0x27, 0xbb, 0x0d, 0x95, 0xb1, 0x15, 0x0f, 0x8f, 0xcc, - 0x49, 0xe8, 0x8c, 0xdc, 0x53, 0xf9, 0xac, 0x0c, 0xc1, 0xf6, 0x09, 0x44, 0x41, 0x28, 0x93, 0x09, - 0x39, 0x8e, 0xc6, 0x6e, 0x2c, 0x04, 0x1f, 0x10, 0xa8, 0x4d, 0xae, 0x65, 0x19, 0xa0, 0x96, 0xbb, - 0x20, 0x40, 0xed, 0x3a, 0x94, 0xfc, 0x20, 0x36, 0x03, 0xdf, 0x9c, 0x1c, 0x8b, 0xeb, 0xd4, 0x05, - 0x3f, 0x88, 0xbb, 0xfe, 0xfe, 0xb1, 0x7e, 0x03, 0x56, 0x5a, 0x89, 0x1b, 0x27, 0x89, 0xb0, 0xc8, - 0x8a, 0x17, 0x17, 0x02, 0x28, 0x35, 0xe8, 0xf5, 0x86, 0x3d, 0x6b, 0xc2, 0x1e, 0x40, 0x76, 0x6c, - 0x4d, 0x44, 0x04, 0x46, 0x2d, 0x39, 0x4b, 0xe1, 0xd8, 0x87, 0x7b, 0xd6, 0x84, 0x6f, 0x22, 0x48, - 0x74, 0xfd, 0x13, 0x28, 0x4a, 0xc0, 0x37, 0xda, 0x2e, 0xfe, 0xcd, 0x32, 0x94, 0xb6, 0x55, 0xb7, - 0x2d, 0x5a, 0xb4, 0x71, 0x38, 0xf5, 0x51, 0xf7, 0x92, 0xf7, 0xd0, 0x87, 0x96, 0xdf, 0x17, 0x20, - 0x39, 0x4d, 0x97, 0x5f, 0x31, 0x4d, 0x6f, 0x00, 0x84, 0xe4, 0xc5, 0x20, 0x47, 0x46, 0x36, 0x89, - 0xf6, 0x6b, 0xd9, 0x2d, 0xfb, 0x74, 0xf1, 0x71, 0x7e, 0xee, 0xeb, 0x1f, 0xe7, 0xe7, 0x17, 0x1e, - 0xe7, 0xdf, 0x9b, 0x6d, 0x15, 0x38, 0x5d, 0xb1, 0xe0, 0x12, 0xdf, 0xb0, 0x26, 0x49, 0xd0, 0x3f, - 0x96, 0xfe, 0x5d, 0xa8, 0xca, 0xd6, 0x89, 0xfc, 0x20, 0x75, 0xcf, 0x40, 0xe0, 0xb8, 0x23, 0x78, - 0x35, 0x56, 0x93, 0xe9, 0xe5, 0x57, 0x7e, 0x4d, 0x9c, 0xc3, 0xdf, 0xce, 0x00, 0x13, 0x56, 0xf7, - 0xce, 0xd4, 0xf3, 0xfa, 0xce, 0x29, 0xad, 0xf2, 0x07, 0xb0, 0x2e, 0xbc, 0xb8, 0x4a, 0x94, 0x90, - 0x38, 0x58, 0xe3, 0x88, 0xd9, 0xc1, 0xda, 0xa2, 0xab, 0x60, 0xcb, 0x0b, 0xaf, 0x82, 0x2d, 0xbe, - 0x62, 0x76, 0x0b, 0xca, 0xea, 0x45, 0x2a, 0xae, 0x5a, 0x81, 0x35, 0xbb, 0x43, 0xf5, 0xef, 0x96, - 0x01, 0x66, 0x9e, 0x81, 0x5f, 0x75, 0x2c, 0xc6, 0x82, 0x21, 0xc9, 0x2e, 0x1a, 0x92, 0xfb, 0xa0, - 0xa9, 0x74, 0xca, 0x8d, 0xbe, 0xea, 0x8c, 0x50, 0xaa, 0x2c, 0x6e, 0xa4, 0xde, 0xba, 0xa2, 0xc0, - 0x2b, 0x71, 0xde, 0x2c, 0xa2, 0xb2, 0x48, 0x9e, 0x8a, 0xdd, 0xb8, 0xe8, 0x46, 0x5c, 0xbe, 0xb2, - 0xcf, 0xe0, 0x5a, 0xc2, 0x69, 0x9e, 0xb8, 0xf1, 0x51, 0x30, 0x8d, 0x85, 0x17, 0x21, 0x12, 0x12, - 0xe7, 0x8a, 0xcc, 0xe9, 0x05, 0x47, 0x73, 0x29, 0x12, 0xa1, 0xd2, 0x3d, 0x9a, 0x7a, 0x9e, 0x19, - 0x3b, 0xa7, 0xb1, 0xb8, 0xda, 0x5e, 0x4b, 0x39, 0x55, 0x94, 0xe1, 0x35, 0x8a, 0x23, 0x91, 0xd0, - 0xff, 0x71, 0x16, 0xf2, 0x3f, 0x9e, 0x3a, 0xe1, 0x19, 0xfb, 0x04, 0x4a, 0x51, 0x3c, 0x8e, 0xd5, - 0xc3, 0xcd, 0x6b, 0x3c, 0x03, 0xc2, 0xd3, 0xd9, 0xa4, 0x33, 0x76, 0xfc, 0x98, 0x7b, 0x1b, 0x91, - 0x96, 0x36, 0x93, 0x0d, 0xc8, 0x47, 0xb1, 0x33, 0x89, 0x44, 0x14, 0x15, 0x4f, 0xb0, 0x4d, 0xc8, - 0xfb, 0x81, 0xed, 0x44, 0xe9, 0x58, 0xa9, 0x0e, 0x6a, 0x0f, 0x1c, 0xc1, 0x74, 0x58, 0x49, 0x46, - 0x7c, 0xee, 0x80, 0x91, 0x63, 0x28, 0xfa, 0xdd, 0xb1, 0x6c, 0xd7, 0x3f, 0x94, 0x37, 0x24, 0x93, - 0x34, 0x6e, 0x93, 0xa4, 0xac, 0x5b, 0x87, 0xf2, 0xba, 0xb2, 0x48, 0xb2, 0x4d, 0x28, 0xe3, 0xe7, - 0x8b, 0xd0, 0x8d, 0x9d, 0xde, 0x63, 0x29, 0xa9, 0x15, 0x10, 0xaa, 0xda, 0xb6, 0x13, 0x3b, 0xc3, - 0xb8, 0xf7, 0x95, 0x08, 0x80, 0xa2, 0x38, 0x19, 0x09, 0x61, 0xdf, 0x05, 0x36, 0xb0, 0x86, 0xc7, - 0x87, 0x61, 0x30, 0xf5, 0x6d, 0xf3, 0xab, 0xa9, 0x13, 0xba, 0x8e, 0x0c, 0x78, 0x2a, 0x2b, 0x9d, - 0x62, 0xac, 0xcf, 0xc8, 0x7e, 0xcc, 0xa9, 0x74, 0x1b, 0x56, 0x53, 0x5d, 0x35, 0xe7, 0xdd, 0xe9, - 0x35, 0xdb, 0xcd, 0x46, 0x9f, 0x9b, 0x85, 0xc2, 0xa5, 0xb0, 0xac, 0xba, 0x24, 0xb2, 0x8a, 0xaf, - 0x22, 0xa7, 0xd8, 0x8e, 0x79, 0xf2, 0x74, 0x34, 0x8d, 0xa7, 0x4d, 0x6d, 0x45, 0xff, 0xbd, 0x65, - 0x58, 0xef, 0x87, 0x96, 0x1f, 0x59, 0x5c, 0x93, 0xf0, 0xe3, 0x30, 0xf0, 0xd8, 0x77, 0xa1, 0x18, - 0x0f, 0x3d, 0x75, 0x08, 0x6f, 0x49, 0x81, 0x71, 0x8e, 0xf4, 0x61, 0x7f, 0xc8, 0xdd, 0xc6, 0x85, - 0x98, 0x7f, 0xb0, 0xf7, 0x20, 0x3f, 0x70, 0x0e, 0x5d, 0x5f, 0xc8, 0xcc, 0xcb, 0xe7, 0x19, 0xb7, - 0x10, 0xb9, 0xbb, 0x64, 0x70, 0x2a, 0xf6, 0x01, 0xac, 0x0c, 0x83, 0xb1, 0xdc, 0x78, 0x66, 0x37, - 0x6d, 0x94, 0x82, 0x10, 0xbb, 0xbb, 0x64, 0x08, 0x3a, 0xf6, 0x09, 0x14, 0xc3, 0xc0, 0xf3, 0xb0, - 0xc7, 0xc4, 0x96, 0x54, 0x3b, 0xcf, 0x63, 0x08, 0xfc, 0xee, 0x92, 0x91, 0xd0, 0xea, 0x0f, 0xa1, - 0x20, 0x2a, 0x8b, 0x1d, 0xb0, 0xd5, 0x7c, 0xda, 0x12, 0x1d, 0xd9, 0xe8, 0xee, 0xed, 0xb5, 0xfa, - 0xfc, 0x1a, 0xa1, 0xd1, 0x6d, 0xb7, 0xb7, 0xea, 0x8d, 0x67, 0xda, 0xf2, 0x56, 0x11, 0x56, 0xb8, - 0x83, 0x50, 0xff, 0xad, 0x0c, 0xac, 0x9d, 0x6b, 0x00, 0x7b, 0x02, 0xb9, 0x31, 0x6a, 0xb6, 0xbc, - 0x7b, 0xee, 0x2e, 0x6c, 0xa5, 0x92, 0xe6, 0xfa, 0x2e, 0x72, 0xe8, 0x9f, 0x41, 0x35, 0x0d, 0x57, - 0x3c, 0x08, 0xab, 0x50, 0x32, 0x9a, 0xf5, 0x6d, 0xb3, 0xdb, 0x41, 0xbb, 0x1d, 0xed, 0x78, 0x4a, - 0xbe, 0x30, 0x5a, 0x64, 0xf4, 0xff, 0x06, 0x68, 0xe7, 0x3b, 0x86, 0x3d, 0x45, 0xdb, 0x65, 0x3c, - 0xf1, 0x1c, 0x52, 0x11, 0x95, 0x21, 0xbb, 0xb9, 0xa0, 0x27, 0x05, 0x19, 0x8d, 0x58, 0x75, 0x98, - 0x4a, 0xeb, 0xff, 0x1f, 0xb0, 0xf9, 0x1e, 0xfc, 0xd5, 0x65, 0xff, 0x3f, 0x33, 0x90, 0xdb, 0xf7, - 0x2c, 0x9f, 0xdd, 0x81, 0x3c, 0x3d, 0x7f, 0x21, 0x24, 0xaf, 0xba, 0x0e, 0x70, 0x5a, 0x10, 0x8e, - 0xbd, 0x03, 0xd9, 0x78, 0x28, 0x6f, 0x2f, 0x5e, 0xbd, 0x60, 0xf2, 0xed, 0x2e, 0x19, 0x48, 0xc5, - 0xee, 0x43, 0xd6, 0xb6, 0x65, 0xd4, 0xb0, 0xf0, 0x29, 0xa0, 0x45, 0xb9, 0xed, 0x8c, 0x5c, 0xdf, - 0x15, 0xcf, 0x75, 0x20, 0x09, 0x7b, 0x0b, 0xb2, 0xf6, 0xd0, 0x4b, 0x87, 0x80, 0x73, 0xdb, 0x33, - 0xc9, 0xd0, 0x1e, 0x7a, 0xa8, 0x81, 0xc5, 0xe1, 0x99, 0x19, 0x4e, 0x7d, 0x0a, 0x83, 0x8a, 0x84, - 0x55, 0x54, 0x46, 0xfd, 0x63, 0x4a, 0xb1, 0x54, 0x91, 0xb8, 0x06, 0x35, 0x09, 0x9d, 0x89, 0x15, - 0x26, 0xf6, 0x90, 0x1b, 0xed, 0x73, 0xc0, 0xd6, 0x0a, 0xd0, 0xdb, 0x81, 0xfa, 0xbb, 0xf4, 0x36, - 0x03, 0x2a, 0xd6, 0xba, 0xfc, 0x5a, 0xf0, 0x00, 0x95, 0xc0, 0xe8, 0x7f, 0x92, 0x85, 0xb2, 0x52, - 0x1f, 0xf6, 0x11, 0x14, 0xed, 0xf4, 0x42, 0xbc, 0x36, 0x57, 0xe9, 0x87, 0xdb, 0x72, 0x09, 0xda, - 0x62, 0x7a, 0xd3, 0x99, 0x44, 0x6c, 0xbe, 0xb4, 0x42, 0x97, 0xbf, 0xc8, 0xb3, 0xac, 0x1e, 0x0e, - 0xf4, 0x9c, 0xf8, 0xb9, 0xc4, 0xec, 0x2e, 0x19, 0x95, 0x48, 0x49, 0x93, 0xf6, 0x2f, 0x9a, 0x94, - 0x4d, 0xbd, 0x6c, 0xc4, 0x81, 0xbb, 0x4b, 0x86, 0xc4, 0x23, 0xa9, 0x73, 0xea, 0x0c, 0xa7, 0xb1, - 0xd4, 0xfe, 0x57, 0x65, 0x83, 0x08, 0x48, 0x8f, 0xa8, 0xf1, 0x4f, 0xf6, 0x08, 0xe5, 0xa4, 0xe5, - 0x79, 0x01, 0xa9, 0x59, 0x79, 0xd5, 0x55, 0xbf, 0x9d, 0xc0, 0xf9, 0xa3, 0x6d, 0x32, 0xc5, 0xee, - 0x41, 0x3e, 0x88, 0x8f, 0x1c, 0xa9, 0x53, 0xcb, 0x57, 0x1e, 0x10, 0xb4, 0xdd, 0x68, 0xe3, 0x4c, - 0x21, 0xb4, 0xfe, 0xf3, 0x0c, 0x14, 0x44, 0x0f, 0xb0, 0x75, 0x58, 0xed, 0x35, 0xfb, 0xe6, 0xf3, - 0xba, 0xd1, 0xaa, 0x6f, 0xb5, 0x9b, 0x22, 0x72, 0xfd, 0xa9, 0x51, 0xef, 0x08, 0x39, 0x69, 0x34, - 0x9f, 0x77, 0x9f, 0x35, 0xb9, 0x5b, 0x6e, 0xbb, 0xd9, 0xf9, 0x42, 0xcb, 0x72, 0xd7, 0x74, 0x73, - 0xbf, 0x6e, 0xa0, 0x94, 0x2c, 0x43, 0xa1, 0xf9, 0x79, 0xb3, 0x71, 0x40, 0x62, 0xb2, 0x0a, 0xb0, - 0xdd, 0xac, 0xb7, 0xdb, 0xdd, 0x06, 0x8a, 0xcd, 0x15, 0xc6, 0xa0, 0xda, 0x30, 0x9a, 0xf5, 0x7e, - 0xd3, 0xac, 0x37, 0x1a, 0xdd, 0x83, 0x4e, 0x5f, 0x2b, 0x60, 0x89, 0xf5, 0x76, 0xbf, 0x69, 0x24, - 0x20, 0x7a, 0x79, 0x67, 0xdb, 0xe8, 0xee, 0x27, 0x90, 0xd2, 0x56, 0x09, 0x2d, 0x31, 0x1a, 0x2b, - 0xfd, 0xcf, 0xaf, 0x43, 0x35, 0x3d, 0x35, 0xd9, 0xa7, 0x50, 0xb4, 0xed, 0xd4, 0x18, 0xdf, 0x58, - 0x34, 0x85, 0x1f, 0x6e, 0xdb, 0x72, 0x98, 0xf9, 0x07, 0xbb, 0x2d, 0x17, 0xd2, 0xf2, 0xdc, 0x42, - 0x92, 0xcb, 0xe8, 0x07, 0xb0, 0x26, 0x5e, 0x49, 0xb0, 0xad, 0xd8, 0x1a, 0x58, 0x91, 0x93, 0x5e, - 0x25, 0x0d, 0x42, 0x6e, 0x0b, 0xdc, 0xee, 0x92, 0x51, 0x1d, 0xa6, 0x20, 0xec, 0x7b, 0x50, 0xb5, - 0xc8, 0xd8, 0x4e, 0xf8, 0x73, 0xaa, 0x02, 0x59, 0x47, 0x9c, 0xc2, 0xbe, 0x6a, 0xa9, 0x00, 0x9c, - 0x88, 0x76, 0x18, 0x4c, 0x66, 0xcc, 0xf9, 0xd4, 0x29, 0x55, 0x18, 0x4c, 0x14, 0xde, 0x8a, 0xad, - 0xa4, 0xd9, 0x27, 0x50, 0x11, 0x35, 0x9f, 0x39, 0x1c, 0x92, 0x25, 0xcb, 0xab, 0x4d, 0x0a, 0xe1, - 0xee, 0x92, 0x51, 0x1e, 0xce, 0x92, 0xec, 0x31, 0x6a, 0x81, 0x33, 0xf5, 0xb9, 0xa0, 0xce, 0x35, - 0xaa, 0xad, 0xe4, 0x02, 0x2b, 0x49, 0xb1, 0x0f, 0x00, 0xa8, 0x9e, 0x9c, 0xa7, 0x98, 0x8a, 0xf7, - 0x08, 0x83, 0x89, 0x64, 0x29, 0xd9, 0x32, 0xa1, 0x54, 0x8f, 0xbb, 0x8b, 0x4a, 0xf3, 0xd5, 0x23, - 0x97, 0xd1, 0xac, 0x7a, 0xdc, 0xd3, 0x94, 0x54, 0x8f, 0xb3, 0xc1, 0x5c, 0xf5, 0x24, 0x17, 0xaf, - 0x1e, 0x67, 0x92, 0xd5, 0xe3, 0x3c, 0xe5, 0xf3, 0xd5, 0x93, 0x2c, 0x54, 0x3d, 0xce, 0xf1, 0xbd, - 0x39, 0xbd, 0xbf, 0x72, 0xa1, 0xde, 0x8f, 0xc3, 0x96, 0xd6, 0xfc, 0xbf, 0x07, 0xd5, 0xe8, 0x28, - 0x38, 0x51, 0x04, 0xc8, 0xaa, 0xca, 0xdd, 0x3b, 0x0a, 0x4e, 0x54, 0x09, 0xb2, 0x1a, 0xa9, 0x00, - 0xac, 0x2d, 0x6f, 0x22, 0x5d, 0xcf, 0xae, 0xaa, 0xb5, 0xa5, 0x16, 0x3e, 0x77, 0x9d, 0x13, 0xac, - 0xad, 0x25, 0x13, 0xd8, 0x29, 0x33, 0xe7, 0x4b, 0x24, 0xdc, 0x29, 0xa9, 0xa8, 0x07, 0x51, 0x12, - 0x24, 0x6e, 0x98, 0x08, 0xe7, 0xd6, 0xd4, 0x57, 0xd9, 0x34, 0x75, 0x6e, 0x1d, 0xf8, 0x29, 0xc6, - 0x0a, 0x27, 0x15, 0xac, 0xb3, 0x55, 0x11, 0x39, 0x5f, 0x4d, 0x1d, 0x7f, 0xe8, 0x88, 0x68, 0xa8, - 0xd4, 0xaa, 0xe8, 0x09, 0xdc, 0x6c, 0x55, 0x48, 0x48, 0x32, 0xaf, 0x13, 0x76, 0x76, 0x7e, 0x5e, - 0x2b, 0xcc, 0x34, 0xaf, 0x13, 0xd6, 0x64, 0x41, 0x25, 0xbc, 0x97, 0xe6, 0x16, 0x94, 0xc2, 0xcc, - 0x17, 0x54, 0xc2, 0xfd, 0x18, 0xc4, 0x6c, 0xe2, 0x9d, 0x9b, 0x8a, 0x99, 0xe2, 0xb5, 0x16, 0xbd, - 0x0b, 0xc3, 0x24, 0x85, 0x73, 0x35, 0x74, 0xd0, 0xce, 0x10, 0x53, 0xe1, 0xb2, 0x3a, 0x57, 0x0d, - 0xc2, 0x24, 0x4b, 0x29, 0x9c, 0x25, 0x95, 0xc2, 0x26, 0x6e, 0x1c, 0xd6, 0xec, 0xf9, 0xc2, 0xf6, - 0xdd, 0x38, 0x9c, 0x15, 0x86, 0x29, 0xf6, 0x1e, 0xd0, 0x34, 0xe4, 0x2c, 0x8e, 0x2a, 0xba, 0xb1, - 0x5b, 0x04, 0x43, 0xd1, 0x16, 0xdf, 0x38, 0x59, 0x44, 0x19, 0x43, 0x7b, 0x58, 0x1b, 0xa9, 0x93, - 0x85, 0x17, 0xd1, 0xd8, 0x6e, 0xe0, 0x64, 0xe1, 0x44, 0x0d, 0x7b, 0xc8, 0x1e, 0x00, 0x71, 0x13, - 0xfd, 0x61, 0xea, 0x15, 0xa1, 0x30, 0x98, 0x70, 0xea, 0x02, 0x12, 0x34, 0xec, 0xa1, 0xfe, 0x17, - 0x57, 0xa0, 0x20, 0xc4, 0x26, 0xbb, 0x04, 0x6b, 0x42, 0x7a, 0x6f, 0xd7, 0xfb, 0xf5, 0xad, 0x7a, - 0x0f, 0xf5, 0x2d, 0x06, 0x55, 0x2e, 0xbe, 0x13, 0x58, 0x06, 0x45, 0x3a, 0xc9, 0xef, 0x04, 0xb4, - 0x8c, 0x22, 0x5d, 0xf0, 0xf2, 0x87, 0xd7, 0xb2, 0x6c, 0x0d, 0xca, 0x9c, 0x91, 0x03, 0xe8, 0x4e, - 0x1c, 0x71, 0xf1, 0x74, 0x5e, 0x61, 0xe1, 0x07, 0x4e, 0x2b, 0x33, 0x16, 0x0e, 0x28, 0x24, 0x2c, - 0xf2, 0x44, 0x8a, 0x41, 0xb5, 0x6f, 0x1c, 0x74, 0x1a, 0xb3, 0x72, 0x4a, 0x74, 0x8f, 0x89, 0x67, - 0xf3, 0xbc, 0xd5, 0x7c, 0xa1, 0x01, 0x32, 0xf1, 0x5c, 0x28, 0x5d, 0x46, 0x8d, 0x91, 0x32, 0xa1, - 0x64, 0x85, 0x5d, 0x85, 0x4b, 0xbd, 0xdd, 0xee, 0x0b, 0x93, 0x33, 0x25, 0x4d, 0x58, 0x65, 0x1b, - 0xa0, 0x29, 0x08, 0x9e, 0x7d, 0x15, 0x8b, 0x24, 0xa8, 0x24, 0xec, 0x69, 0x6b, 0x74, 0xa6, 0x8b, - 0xb0, 0x3e, 0xdf, 0x42, 0x35, 0x6c, 0x0a, 0x67, 0xed, 0xb6, 0x0f, 0xf6, 0x3a, 0x3d, 0x6d, 0x1d, - 0x2b, 0x41, 0x10, 0x5e, 0x73, 0x96, 0x64, 0x33, 0xdb, 0x78, 0x2f, 0xd1, 0x5e, 0x8c, 0xb0, 0x17, - 0x75, 0xa3, 0xd3, 0xea, 0x3c, 0xed, 0x69, 0x1b, 0x49, 0xce, 0x4d, 0xc3, 0xe8, 0x1a, 0x3d, 0xed, - 0x72, 0x02, 0xe8, 0xf5, 0xeb, 0xfd, 0x83, 0x9e, 0x76, 0x25, 0xa9, 0xe5, 0xbe, 0xd1, 0x6d, 0x34, - 0x7b, 0xbd, 0x76, 0xab, 0xd7, 0xd7, 0xae, 0xb2, 0xcb, 0xb0, 0x3e, 0xab, 0x91, 0x24, 0xae, 0x29, - 0x15, 0x35, 0x9e, 0x36, 0xfb, 0xda, 0xb5, 0xa4, 0x1a, 0x8d, 0x6e, 0xbb, 0x5d, 0xa7, 0xd3, 0xc8, - 0xeb, 0x48, 0x44, 0xc7, 0xb2, 0xa2, 0x35, 0x6f, 0x60, 0xbd, 0x0e, 0x3a, 0x2a, 0xe8, 0x86, 0x32, - 0x35, 0x7a, 0xcd, 0x1f, 0x1f, 0x34, 0x3b, 0x8d, 0xa6, 0xf6, 0xe6, 0x6c, 0x6a, 0x24, 0xb0, 0x9b, - 0xc9, 0xd4, 0x48, 0x40, 0xb7, 0x92, 0x32, 0x25, 0xa8, 0xa7, 0x6d, 0x62, 0x7e, 0xa2, 0x1e, 0x9d, - 0x4e, 0xb3, 0xd1, 0xc7, 0xb6, 0xde, 0x4e, 0x7a, 0xf1, 0x60, 0xff, 0xa9, 0x51, 0xdf, 0x6e, 0x6a, - 0x3a, 0x42, 0x8c, 0x66, 0xa7, 0xbe, 0x27, 0x47, 0xfb, 0x8e, 0x32, 0xda, 0xfb, 0xad, 0xbe, 0xa1, - 0xdd, 0x4d, 0x46, 0x97, 0x92, 0x6f, 0xb1, 0x37, 0xe0, 0xaa, 0x3a, 0x0f, 0xcd, 0x17, 0xad, 0xfe, - 0xae, 0x38, 0x3c, 0xbd, 0xc7, 0x0f, 0x01, 0x09, 0xd9, 0xd8, 0x6e, 0xf0, 0x53, 0x62, 0xe2, 0xc5, - 0xd4, 0xfd, 0xad, 0x0a, 0xbd, 0x92, 0x2b, 0x74, 0x09, 0xfd, 0x47, 0xc0, 0xd4, 0xa7, 0x24, 0xc5, - 0x9b, 0x4a, 0x0c, 0x72, 0xa3, 0x30, 0x18, 0xcb, 0xfb, 0xe9, 0xf8, 0x8d, 0x46, 0xf0, 0x64, 0x3a, - 0xa0, 0xc3, 0xc9, 0xd9, 0xfd, 0x53, 0x15, 0xa4, 0xff, 0xfd, 0x0c, 0x54, 0xd3, 0x7a, 0x04, 0x79, - 0x30, 0x47, 0xa6, 0x1f, 0xc4, 0xfc, 0xb1, 0x9e, 0x28, 0x79, 0xe1, 0x71, 0xd4, 0x09, 0x62, 0x7a, - 0xad, 0x87, 0x6c, 0xf2, 0x44, 0x2d, 0xe0, 0xb9, 0x26, 0x69, 0xd6, 0x82, 0x4b, 0xa9, 0xd7, 0x38, - 0x53, 0x4f, 0x25, 0xd5, 0x92, 0x57, 0xf4, 0xce, 0xd5, 0xdf, 0x60, 0xd1, 0x7c, 0x9b, 0xc4, 0x2d, - 0xe2, 0xdc, 0xec, 0x16, 0xf1, 0x2e, 0xac, 0xa6, 0xd4, 0x16, 0x72, 0xa5, 0x8c, 0xd2, 0x35, 0x2d, - 0xba, 0xa3, 0xd7, 0x57, 0x53, 0xff, 0xbb, 0x19, 0xa8, 0xa8, 0x4a, 0xcc, 0xb7, 0xce, 0x89, 0x6e, - 0xdc, 0x88, 0x6f, 0xd3, 0xb5, 0xe5, 0x23, 0x3d, 0x12, 0xd4, 0xa2, 0xd7, 0xc1, 0xb9, 0x33, 0x78, - 0xe7, 0xb8, 0x97, 0x34, 0x47, 0x05, 0xb1, 0x9b, 0x00, 0x74, 0xff, 0x70, 0xe7, 0x19, 0x12, 0x88, - 0x3b, 0x3b, 0x33, 0x88, 0x7e, 0x0b, 0x4a, 0x3b, 0xc7, 0x32, 0x2a, 0x45, 0x7d, 0xb2, 0xaa, 0xc4, - 0x2f, 0x2d, 0xeb, 0x7f, 0x98, 0x81, 0xea, 0xec, 0x79, 0x0f, 0x3a, 0x22, 0xe6, 0xaf, 0xb8, 0xf2, - 0xe9, 0xb0, 0x6c, 0x0f, 0x66, 0x0f, 0x87, 0x2f, 0xab, 0x0f, 0x87, 0xdf, 0x11, 0x99, 0x65, 0x55, - 0xe9, 0x9d, 0x94, 0x25, 0xae, 0x44, 0x3f, 0x86, 0x0a, 0xfe, 0x37, 0x9c, 0x91, 0x13, 0x86, 0x8e, - 0x7c, 0xd0, 0x76, 0x8e, 0x38, 0x45, 0x44, 0xe6, 0x9a, 0x33, 0x12, 0x5a, 0xe3, 0xc2, 0x17, 0x48, - 0xe8, 0x65, 0x9c, 0xff, 0x96, 0x85, 0xb2, 0xa2, 0x12, 0x7e, 0xad, 0xe9, 0x77, 0x03, 0x4a, 0xb3, - 0xf7, 0x30, 0xc4, 0x3d, 0xd4, 0x04, 0x90, 0x1a, 0xab, 0xec, 0xb9, 0xb1, 0xaa, 0x41, 0x41, 0xc4, - 0xa9, 0x0a, 0x3f, 0xae, 0x4c, 0xa6, 0x3d, 0xa6, 0xf9, 0xd7, 0x1c, 0x58, 0x7c, 0x08, 0x15, 0xc5, - 0xdd, 0x19, 0x89, 0xbb, 0x9a, 0xe7, 0xe9, 0xcb, 0x33, 0xd7, 0x67, 0xc4, 0x2e, 0xc3, 0xca, 0xe8, - 0xd8, 0xb4, 0x07, 0xfc, 0x82, 0x5e, 0xc9, 0xc8, 0x8f, 0x8e, 0xb7, 0x07, 0x74, 0x9c, 0x33, 0x4a, - 0xb4, 0x20, 0xee, 0x84, 0x2a, 0x8e, 0xa4, 0xae, 0x73, 0x1f, 0x0a, 0xa3, 0x63, 0xf5, 0xa2, 0xdd, - 0x5c, 0x97, 0xaf, 0x8c, 0x8e, 0xe9, 0x66, 0xde, 0xfb, 0xb0, 0x21, 0xb6, 0x62, 0x2b, 0x32, 0xf9, - 0x95, 0x7f, 0x7a, 0x27, 0x85, 0x3f, 0x60, 0xb5, 0xce, 0x71, 0xf5, 0xa8, 0x47, 0x18, 0x9c, 0x71, - 0x3a, 0x54, 0x94, 0x09, 0xc8, 0x1f, 0x94, 0x29, 0x19, 0x29, 0x18, 0x7b, 0x02, 0x95, 0xd1, 0x31, - 0x1f, 0xd0, 0x7e, 0xb0, 0xe7, 0x88, 0xa8, 0xf8, 0x8d, 0xf3, 0x43, 0x49, 0x67, 0xf8, 0x29, 0x4a, - 0x76, 0x05, 0x56, 0x0c, 0xeb, 0xa4, 0xf7, 0xe3, 0x36, 0xe9, 0x83, 0x25, 0x43, 0xa4, 0x7e, 0x94, - 0x2b, 0x56, 0xb5, 0x35, 0xfd, 0x9f, 0x66, 0xa0, 0x3a, 0x53, 0xe7, 0x71, 0x11, 0xb2, 0x07, 0xea, - 0xf3, 0xcb, 0xb5, 0xf3, 0x1a, 0x3f, 0x92, 0x3c, 0xec, 0x9f, 0x4d, 0xf8, 0x23, 0x85, 0x8b, 0x1e, - 0x01, 0x5a, 0xe4, 0x7f, 0xce, 0x2e, 0x7c, 0xf8, 0xf5, 0x29, 0x64, 0xfb, 0x67, 0x13, 0xee, 0x3a, - 0xc2, 0x2d, 0x91, 0x9b, 0x99, 0x7c, 0x33, 0xa4, 0x20, 0x91, 0x67, 0xcd, 0x2f, 0xf8, 0xbd, 0xf9, - 0x7d, 0xa3, 0xb5, 0x57, 0x37, 0xbe, 0xa0, 0xf8, 0x1f, 0x52, 0x1a, 0x76, 0xba, 0x46, 0xb3, 0xf5, - 0xb4, 0x43, 0x80, 0x1c, 0x39, 0x96, 0x66, 0x55, 0xac, 0xdb, 0xf6, 0xce, 0xb1, 0xfa, 0x7e, 0x4a, - 0x26, 0xf5, 0x7e, 0x4a, 0xfa, 0xaa, 0xed, 0xf2, 0xf9, 0xab, 0xb6, 0x2c, 0x59, 0x85, 0xc9, 0x92, - 0x66, 0x6f, 0x43, 0x6e, 0x74, 0xec, 0x9c, 0xa5, 0x6d, 0xb6, 0xf4, 0x02, 0x22, 0x02, 0xfd, 0x17, - 0x19, 0x60, 0xa9, 0x8a, 0x70, 0x33, 0xe2, 0xdb, 0xd6, 0xe5, 0x53, 0xa8, 0x89, 0x17, 0xfd, 0x38, - 0x95, 0xe2, 0xf0, 0x16, 0x5d, 0x7a, 0x39, 0x98, 0x05, 0x64, 0xce, 0xde, 0x29, 0x62, 0xef, 0x03, - 0x7f, 0x52, 0x8d, 0x42, 0x3e, 0x72, 0x17, 0x98, 0x7c, 0xc6, 0x8c, 0x66, 0xf6, 0x86, 0x9a, 0xfa, - 0x36, 0x1c, 0xf7, 0x95, 0xaf, 0xcd, 0x46, 0x8d, 0xd6, 0xbc, 0xfe, 0xbb, 0x19, 0xb8, 0x94, 0x9e, - 0x10, 0xbf, 0x5c, 0x2b, 0xd3, 0x0f, 0xe1, 0x65, 0xcf, 0x3f, 0x84, 0xb7, 0x68, 0x3e, 0xe5, 0x16, - 0xce, 0xa7, 0xdf, 0xce, 0xc0, 0x86, 0xd2, 0xfb, 0x33, 0xc3, 0xef, 0xcf, 0xa8, 0x66, 0xca, 0x7b, - 0x78, 0xb9, 0xd4, 0x7b, 0x78, 0xfa, 0xef, 0x65, 0xe0, 0xca, 0xb9, 0x9a, 0x18, 0xce, 0x9f, 0x69, - 0x5d, 0xd2, 0xef, 0xe6, 0x91, 0xbf, 0x9e, 0x47, 0xa5, 0xf2, 0x3b, 0x9a, 0x2c, 0xfd, 0x10, 0x1e, - 0xdd, 0x88, 0xfe, 0x08, 0xd6, 0x67, 0x75, 0x6c, 0x88, 0x37, 0xfe, 0x6e, 0x41, 0xd9, 0x77, 0x4e, - 0x4c, 0xf9, 0x02, 0xa0, 0x08, 0xf2, 0xf1, 0x9d, 0x13, 0x41, 0xa0, 0xef, 0xa8, 0x02, 0x23, 0x79, - 0x0e, 0xdc, 0xb3, 0x53, 0xd1, 0x22, 0x81, 0x67, 0x4b, 0x14, 0xe6, 0xa6, 0xb4, 0xa8, 0xe0, 0x3b, - 0x27, 0x34, 0x58, 0x27, 0x22, 0x9f, 0xba, 0x6d, 0x8b, 0x13, 0xf3, 0x45, 0xcf, 0xfa, 0x5c, 0x83, - 0xe2, 0x24, 0x4c, 0x75, 0x49, 0x61, 0x12, 0xf2, 0x62, 0xef, 0x8a, 0x10, 0xa2, 0x8b, 0x4e, 0xd7, - 0x79, 0x50, 0x91, 0xf8, 0xb9, 0x80, 0xdc, 0xec, 0xe7, 0x02, 0x3e, 0x16, 0xb2, 0x82, 0xec, 0x1c, - 0x5e, 0xb2, 0x06, 0x59, 0xd7, 0x3e, 0xa5, 0x82, 0x57, 0x0d, 0xfc, 0x24, 0x75, 0xc7, 0xf9, 0x4a, - 0x44, 0x31, 0xe1, 0xa7, 0xbe, 0x05, 0x65, 0x23, 0x65, 0xd4, 0x55, 0x14, 0xff, 0x48, 0x94, 0x7e, - 0xf9, 0x64, 0xd6, 0x41, 0x46, 0x79, 0xe6, 0x1e, 0x89, 0xf4, 0x48, 0x48, 0x87, 0xe7, 0x56, 0x38, - 0x3c, 0xb2, 0xc2, 0xb6, 0xe3, 0x1f, 0xc6, 0x47, 0xd8, 0xe5, 0xdc, 0x6d, 0xa9, 0x76, 0x21, 0x70, - 0x90, 0x1c, 0x7a, 0xec, 0x45, 0x8f, 0xc8, 0xe5, 0x43, 0xe4, 0xbe, 0x73, 0x22, 0xf8, 0xdf, 0x04, - 0xc0, 0xfe, 0x17, 0x68, 0x7e, 0x58, 0x56, 0x0a, 0x3c, 0x9b, 0xa3, 0xf5, 0x75, 0xd1, 0x5e, 0x71, - 0x41, 0x64, 0xdb, 0x19, 0xe9, 0x9e, 0x18, 0x79, 0xde, 0x20, 0xd1, 0x09, 0xdf, 0x6a, 0x18, 0xd9, - 0x6d, 0xa8, 0x48, 0x0b, 0x9c, 0x1e, 0xdb, 0xe1, 0xc5, 0x97, 0x25, 0xac, 0x33, 0x1d, 0xeb, 0x7f, - 0x75, 0x59, 0x14, 0xd7, 0x08, 0x26, 0x67, 0x14, 0x52, 0xdd, 0x9d, 0xc4, 0x6c, 0x00, 0x97, 0xa3, - 0x63, 0x77, 0x22, 0x9e, 0x0f, 0xa7, 0x58, 0x0e, 0x8a, 0xdb, 0x15, 0x3d, 0xf9, 0xbe, 0xd2, 0x93, - 0x2a, 0xdf, 0xc3, 0xde, 0xb1, 0x3b, 0xe1, 0x31, 0xe3, 0x2d, 0xfb, 0x94, 0xa0, 0xfc, 0x3c, 0x9b, - 0x45, 0x73, 0x08, 0xba, 0x4c, 0x8a, 0x65, 0x4c, 0x8e, 0x45, 0xde, 0xe2, 0xd8, 0x1e, 0x81, 0xfb, - 0xc7, 0x9c, 0xe6, 0x01, 0xac, 0xf3, 0x6b, 0x22, 0xf3, 0xfb, 0xd5, 0x1a, 0x47, 0x24, 0x33, 0xfd, - 0x7a, 0x13, 0xae, 0x5e, 0x50, 0xfc, 0xeb, 0x4e, 0xcf, 0x8b, 0xea, 0xe9, 0xf9, 0x5f, 0xa8, 0x00, - 0xcc, 0xa6, 0x48, 0x4a, 0x49, 0xca, 0x9c, 0x53, 0x92, 0xbe, 0x51, 0xec, 0xc6, 0x47, 0x50, 0x1d, - 0x06, 0x93, 0x33, 0x73, 0xc6, 0x91, 0x5d, 0xc8, 0x51, 0x41, 0xaa, 0xfe, 0xec, 0x82, 0xda, 0xfc, - 0x69, 0x79, 0x6e, 0xe1, 0x69, 0xf9, 0x87, 0x50, 0xe0, 0x27, 0x39, 0x91, 0xb8, 0xe0, 0x78, 0xf5, - 0xfc, 0x74, 0x7f, 0x28, 0xc2, 0xbc, 0x25, 0x1d, 0x6b, 0x42, 0x15, 0x05, 0x52, 0xe8, 0xc6, 0x47, - 0x63, 0xf5, 0xba, 0xe3, 0xcd, 0x79, 0x4e, 0x49, 0xc6, 0x1f, 0x5e, 0xb3, 0xd4, 0xa4, 0xa2, 0x53, - 0xc5, 0x63, 0xe1, 0x5e, 0x24, 0x9d, 0xaa, 0xa0, 0xea, 0x54, 0xfd, 0x31, 0x77, 0x2a, 0xa2, 0x4e, - 0xf5, 0x1e, 0x5c, 0x12, 0x57, 0x4f, 0x90, 0x01, 0xbb, 0x93, 0xe8, 0x79, 0x98, 0x9e, 0x78, 0x95, - 0xa4, 0x3f, 0x26, 0x8b, 0x03, 0xc9, 0x3f, 0x87, 0x8d, 0xe1, 0x91, 0xe5, 0x1f, 0x3a, 0x66, 0x3c, - 0xf0, 0x4c, 0x7a, 0xf6, 0xd9, 0x1c, 0x5b, 0x13, 0xa1, 0xea, 0xbd, 0x3d, 0x57, 0xd9, 0x06, 0x11, - 0xf7, 0x07, 0x1e, 0xc5, 0x19, 0x25, 0x31, 0x15, 0xeb, 0xc3, 0xf3, 0xf0, 0x73, 0x47, 0x9b, 0x30, - 0x77, 0xb4, 0x79, 0x5e, 0xf9, 0x2b, 0x2f, 0x50, 0xfe, 0x66, 0x2a, 0x5c, 0x45, 0x55, 0xe1, 0xd8, - 0x47, 0x50, 0xe2, 0x31, 0xf1, 0xc1, 0x24, 0x16, 0xae, 0xc5, 0xab, 0x17, 0x2c, 0x1b, 0xa3, 0x68, - 0x8b, 0xaf, 0xeb, 0xff, 0x3d, 0x0f, 0x2b, 0x22, 0x3c, 0xf6, 0x01, 0xe4, 0xec, 0x30, 0x98, 0x24, - 0xf1, 0xa6, 0x0b, 0x74, 0x3d, 0xfa, 0xbd, 0x1d, 0x54, 0x0b, 0x1f, 0xc2, 0x8a, 0x65, 0xdb, 0xe6, - 0xe8, 0x38, 0x7d, 0x20, 0x79, 0x4e, 0xed, 0xda, 0x5d, 0x32, 0xf2, 0x16, 0xe9, 0x5f, 0x9f, 0x42, - 0x09, 0xe9, 0x67, 0x51, 0x80, 0xe5, 0x79, 0x65, 0x52, 0x2a, 0x48, 0xbb, 0x4b, 0x46, 0xd1, 0x92, - 0xca, 0xd2, 0xf7, 0xd3, 0xae, 0x5d, 0xae, 0xbd, 0x5c, 0x9f, 0x63, 0xbd, 0xc8, 0xc9, 0xfb, 0xeb, - 0xc0, 0x7d, 0x7d, 0xc9, 0x16, 0x96, 0x9f, 0xeb, 0x18, 0x75, 0xc3, 0xdb, 0x5d, 0x32, 0xb8, 0x20, - 0x97, 0x1b, 0xe0, 0xc7, 0xd2, 0xed, 0x9a, 0xfc, 0x62, 0xc1, 0x82, 0x9e, 0x41, 0x69, 0x90, 0xf8, - 0x5e, 0x49, 0x0e, 0x22, 0x9b, 0x6d, 0xcb, 0x60, 0xb0, 0xc2, 0x1c, 0x5b, 0xb2, 0xcd, 0x11, 0x5b, - 0xb2, 0xe7, 0x3d, 0x81, 0x32, 0xf7, 0xc2, 0x71, 0xbe, 0xe2, 0x5c, 0xd7, 0xce, 0x76, 0x29, 0x3a, - 0xd7, 0x99, 0xed, 0x59, 0x0d, 0xd9, 0xce, 0xd0, 0x51, 0x5d, 0xe7, 0x37, 0x16, 0x76, 0x94, 0x91, - 0x78, 0xd1, 0x79, 0x63, 0x0d, 0xce, 0xc3, 0xda, 0xb0, 0x21, 0x7c, 0xcc, 0x7c, 0x47, 0x92, 0x9b, - 0x08, 0xcc, 0x8d, 0x57, 0x6a, 0xcb, 0xda, 0x5d, 0x32, 0x98, 0x35, 0xbf, 0x91, 0x35, 0x60, 0x5d, - 0x56, 0x89, 0x5f, 0x52, 0x9c, 0x45, 0xbc, 0xa8, 0x4d, 0x9a, 0x6d, 0x44, 0xbb, 0x4b, 0xc6, 0x9a, - 0x95, 0x06, 0xb1, 0x16, 0x5c, 0x92, 0x99, 0x90, 0xaf, 0x55, 0xf4, 0x4c, 0x65, 0x6e, 0x14, 0xd5, - 0xcd, 0x6b, 0x77, 0xc9, 0x58, 0xb7, 0xce, 0x03, 0x67, 0x27, 0xcf, 0xd7, 0x0d, 0xb8, 0xb2, 0x78, - 0xc9, 0xaa, 0x72, 0x3b, 0xc7, 0xe5, 0xb6, 0x9e, 0x7e, 0x01, 0x27, 0x7d, 0x1b, 0x5d, 0x91, 0xe2, - 0x3f, 0x84, 0xd5, 0x94, 0xcc, 0x62, 0x65, 0x28, 0xc8, 0xb7, 0x72, 0x29, 0x86, 0xbd, 0xd1, 0xdd, - 0xff, 0x42, 0xcb, 0x20, 0xb8, 0xd5, 0xe9, 0xf5, 0xeb, 0x1d, 0x11, 0x57, 0xd0, 0xea, 0x88, 0xb8, - 0x02, 0xfd, 0x6f, 0x64, 0xa1, 0x94, 0x9c, 0x8b, 0x7c, 0x7b, 0xa7, 0x47, 0xe2, 0x4d, 0xc8, 0xaa, - 0xde, 0x84, 0x73, 0x1a, 0x3d, 0x7f, 0xd6, 0x9a, 0xbf, 0x8c, 0xb4, 0x96, 0xd6, 0x9b, 0xa3, 0xf9, - 0x5b, 0xae, 0xf9, 0xaf, 0x79, 0xcb, 0x55, 0x8d, 0xdc, 0x5d, 0x49, 0x47, 0xee, 0x9e, 0x7b, 0x2f, - 0xb9, 0x40, 0x2f, 0x99, 0xaa, 0xef, 0x25, 0xd3, 0x4f, 0x97, 0x3d, 0x77, 0x9d, 0x13, 0x11, 0xea, - 0x2a, 0x52, 0xe9, 0x2d, 0x0f, 0x5e, 0xb3, 0xe5, 0x7d, 0x1d, 0xf1, 0xf9, 0x08, 0x36, 0x46, 0xc7, - 0xc9, 0xfb, 0xa9, 0x33, 0x1b, 0xba, 0x42, 0x55, 0x5a, 0x88, 0xd3, 0xff, 0x5a, 0x06, 0x60, 0x76, - 0x10, 0xf0, 0x4b, 0x3b, 0xe2, 0x14, 0x5f, 0x47, 0xf6, 0x15, 0xbe, 0x8e, 0xd7, 0xbd, 0x82, 0xf3, - 0x15, 0x94, 0x92, 0xa3, 0x9f, 0x6f, 0x3f, 0x5f, 0xbe, 0x51, 0x91, 0xbf, 0x29, 0x9d, 0x92, 0xc9, - 0xd9, 0xc9, 0x2f, 0xdb, 0x17, 0xa9, 0xe2, 0xb3, 0xaf, 0x29, 0xfe, 0x94, 0x7b, 0x06, 0x93, 0xc2, - 0x7f, 0xc5, 0x8b, 0x44, 0x9d, 0xbf, 0xb9, 0xd4, 0xfc, 0xd5, 0xa7, 0xc2, 0xbd, 0xf9, 0xcb, 0x17, - 0xfd, 0x8d, 0x1a, 0xfc, 0xa7, 0x19, 0xe9, 0x83, 0x4b, 0x5e, 0xb2, 0xbd, 0x50, 0x39, 0x5c, 0xec, - 0x46, 0xfc, 0x26, 0xc5, 0xbd, 0xd2, 0xc3, 0x90, 0x7b, 0x95, 0x87, 0xe1, 0x6d, 0xc8, 0xf3, 0x6d, - 0x27, 0x7f, 0x91, 0x77, 0x81, 0xe3, 0x5f, 0xfb, 0xde, 0xbc, 0xae, 0x0b, 0x65, 0x98, 0xb7, 0x77, - 0x43, 0xe6, 0x2b, 0xdf, 0xca, 0xa7, 0x0b, 0x03, 0xbf, 0x95, 0xe1, 0x92, 0xf2, 0xdb, 0xf6, 0xc9, - 0xaf, 0xcc, 0xc5, 0xf0, 0xbf, 0x33, 0xb0, 0x9a, 0x3a, 0xf5, 0xfd, 0x16, 0x95, 0x59, 0x28, 0x99, - 0xb3, 0xff, 0x17, 0x49, 0xe6, 0x54, 0xc0, 0x64, 0x31, 0x1d, 0x30, 0x89, 0x92, 0xb1, 0x92, 0xb2, - 0x0a, 0x16, 0xd9, 0x0f, 0x99, 0x85, 0xf6, 0xc3, 0xcd, 0xe4, 0x07, 0xb5, 0x5a, 0xdb, 0x3c, 0x3e, - 0x71, 0xd5, 0x50, 0x20, 0xec, 0x33, 0xb8, 0x26, 0x0c, 0x61, 0xde, 0x3f, 0xc1, 0xc8, 0x4c, 0x7e, - 0x6e, 0x4b, 0x18, 0x96, 0x57, 0x38, 0x01, 0xff, 0x61, 0x81, 0x51, 0x5d, 0x62, 0xf5, 0x16, 0xac, - 0xa6, 0x8e, 0xd3, 0x95, 0x9f, 0xf7, 0xcb, 0xa8, 0x3f, 0xef, 0xc7, 0x36, 0x21, 0x7f, 0x72, 0xe4, - 0x84, 0xce, 0x82, 0x47, 0x31, 0x39, 0x42, 0xff, 0x1e, 0x54, 0xd4, 0xd0, 0x1e, 0xf6, 0x2e, 0xe4, - 0xdd, 0xd8, 0x19, 0x4b, 0x13, 0xff, 0xca, 0x7c, 0xf4, 0x4f, 0x2b, 0x76, 0xc6, 0x06, 0x27, 0xd2, - 0x7f, 0x9e, 0x01, 0xed, 0x3c, 0x4e, 0xf9, 0x0d, 0xc2, 0xcc, 0x05, 0xbf, 0x41, 0xb8, 0x9c, 0xaa, - 0xe4, 0xa2, 0x9f, 0x11, 0x4c, 0x1e, 0xe6, 0xcb, 0x5d, 0xf0, 0x30, 0x1f, 0xbb, 0x07, 0xc5, 0xd0, - 0xa1, 0x1f, 0x78, 0xb3, 0x17, 0xc4, 0xdc, 0x27, 0x38, 0xfd, 0x2f, 0x65, 0xa0, 0x20, 0xe2, 0x90, - 0x16, 0xfa, 0x5c, 0xbe, 0x03, 0x05, 0xfe, 0x63, 0x6f, 0xf2, 0x41, 0x9e, 0xb9, 0xa0, 0x5e, 0x89, - 0x67, 0x37, 0x79, 0x74, 0x56, 0xda, 0x07, 0xb3, 0xef, 0x59, 0xbe, 0x41, 0x70, 0xf1, 0x7b, 0x21, - 0xd6, 0x58, 0xdc, 0xd8, 0xe5, 0xcf, 0xe6, 0x00, 0x81, 0xe8, 0x72, 0xae, 0xfe, 0x7d, 0x28, 0x88, - 0x38, 0xa7, 0x85, 0x55, 0x79, 0xdd, 0x0f, 0x7d, 0x6d, 0x02, 0xcc, 0x02, 0x9f, 0x16, 0xe5, 0xa0, - 0x3f, 0x80, 0xa2, 0x8c, 0x75, 0xc2, 0xf9, 0x37, 0x2b, 0x5a, 0x5c, 0xe6, 0x50, 0x2b, 0xe3, 0x89, - 0x87, 0xa6, 0xdb, 0xc1, 0xf0, 0x98, 0xbc, 0xa2, 0xef, 0x03, 0xdd, 0x6c, 0xe9, 0xcf, 0xbd, 0x2f, - 0x94, 0x7e, 0x25, 0x3c, 0x21, 0x62, 0x0f, 0x20, 0x11, 0xad, 0xaf, 0xb3, 0xd6, 0xf5, 0xba, 0xbc, - 0x03, 0x45, 0xb3, 0xec, 0xb1, 0xf0, 0xfe, 0xb5, 0xe9, 0x55, 0xae, 0x8c, 0xfa, 0x56, 0x7c, 0xaa, - 0x4e, 0x86, 0x42, 0xa6, 0x57, 0xa1, 0xa2, 0x06, 0x68, 0xe8, 0x75, 0x58, 0xdf, 0x73, 0x62, 0x0b, - 0xe5, 0x8f, 0x7c, 0xa8, 0x85, 0xcf, 0x5f, 0xfc, 0x48, 0xcf, 0xdf, 0xf3, 0x74, 0x06, 0x27, 0xd2, - 0x7f, 0x9e, 0x03, 0xed, 0x3c, 0xee, 0x55, 0xf7, 0xc1, 0x6e, 0x41, 0x39, 0xa0, 0x79, 0x91, 0xfa, - 0x45, 0x18, 0x0e, 0x52, 0xa2, 0xaf, 0x53, 0x3f, 0x0b, 0x50, 0x74, 0xa3, 0x5d, 0xfe, 0xc3, 0x00, - 0x57, 0xf9, 0xe5, 0x1f, 0x2f, 0x18, 0xd2, 0xb4, 0xae, 0xd0, 0x5d, 0x9f, 0x76, 0x30, 0xa4, 0x6b, - 0x66, 0xc2, 0xe0, 0xe7, 0x51, 0x83, 0x15, 0xa3, 0x28, 0xac, 0x7c, 0x3a, 0xa8, 0x11, 0x31, 0xd9, - 0x71, 0x24, 0x2e, 0xee, 0x15, 0x39, 0xa0, 0x1f, 0xc9, 0xe7, 0x8c, 0x87, 0xe2, 0xe7, 0x4b, 0xb2, - 0xf4, 0x9c, 0x71, 0xc3, 0xa7, 0x5b, 0x66, 0xf4, 0x6b, 0x3b, 0x43, 0xf1, 0x6b, 0x48, 0xe2, 0x41, - 0x69, 0x44, 0xdd, 0xe1, 0x3f, 0xf0, 0x12, 0x3a, 0x51, 0xc4, 0x9f, 0xa4, 0x2b, 0x89, 0x57, 0xb9, - 0x04, 0x30, 0x79, 0xfb, 0x4e, 0xfc, 0xbc, 0x0e, 0x92, 0x80, 0x78, 0xfb, 0x8e, 0xff, 0xb8, 0x0e, - 0x12, 0x5c, 0x83, 0xe2, 0x4f, 0x03, 0xdf, 0x21, 0xc7, 0x41, 0x99, 0x6a, 0x55, 0xc0, 0xf4, 0x9e, - 0x35, 0xd1, 0xff, 0x79, 0x06, 0x36, 0xce, 0xf7, 0x2a, 0x4d, 0x98, 0x0a, 0x14, 0x1b, 0xdd, 0xb6, - 0xd9, 0xa9, 0xef, 0x35, 0xb5, 0x25, 0xb6, 0x06, 0xe5, 0xee, 0xd6, 0x8f, 0x9a, 0x8d, 0x3e, 0x07, - 0x64, 0xe8, 0xb6, 0x75, 0xcf, 0xdc, 0x6d, 0x6d, 0x6f, 0x37, 0x3b, 0xdc, 0x7a, 0xe8, 0x6e, 0xfd, - 0xc8, 0x6c, 0x77, 0x1b, 0xfc, 0xd7, 0x38, 0xe4, 0x21, 0x76, 0x4f, 0xcb, 0xd1, 0x11, 0x37, 0x05, - 0x29, 0x63, 0x32, 0xcf, 0x63, 0x70, 0x5f, 0xf4, 0xcc, 0x46, 0xa7, 0xaf, 0xad, 0x60, 0xaa, 0x73, - 0xd0, 0x6e, 0x53, 0x8a, 0x82, 0xed, 0x1a, 0xdd, 0xbd, 0x7d, 0xa3, 0xd9, 0xeb, 0x99, 0xbd, 0xd6, - 0x4f, 0x9a, 0x5a, 0x91, 0x4a, 0x36, 0x5a, 0x4f, 0x5b, 0x1d, 0x0e, 0x28, 0xb1, 0x02, 0x64, 0xf7, - 0x5a, 0x1d, 0x7e, 0xcb, 0x7c, 0xaf, 0xfe, 0xb9, 0x56, 0xc6, 0x8f, 0xde, 0xc1, 0x9e, 0x56, 0xd1, - 0xff, 0x63, 0x56, 0xea, 0xc6, 0x14, 0x7a, 0xf2, 0x75, 0xf4, 0xc1, 0x45, 0xe7, 0x44, 0x1b, 0x90, - 0xf7, 0xe8, 0xde, 0xac, 0xf8, 0xa1, 0x51, 0x4a, 0x7c, 0x9d, 0x1f, 0x4f, 0xbc, 0x03, 0xab, 0xc9, - 0x21, 0xaf, 0xf2, 0xc2, 0x70, 0x45, 0x02, 0x17, 0x78, 0xd3, 0x57, 0x16, 0x78, 0xd3, 0x27, 0x6e, - 0x8c, 0x76, 0x2f, 0x8a, 0x54, 0x3e, 0x51, 0x4a, 0x08, 0xe1, 0x3f, 0x5b, 0xfa, 0x06, 0x50, 0xc2, - 0x9c, 0xfa, 0xae, 0xfc, 0xe9, 0xac, 0x22, 0x02, 0x0e, 0x7c, 0x37, 0x3e, 0x7f, 0xc8, 0x5c, 0x9a, - 0x3b, 0x64, 0x56, 0xf7, 0x5e, 0x48, 0xef, 0xbd, 0xe9, 0xdf, 0x94, 0xe4, 0xbf, 0x99, 0xa5, 0xfc, - 0xa6, 0xe4, 0xbb, 0xc0, 0x86, 0xd3, 0x90, 0xde, 0x80, 0x52, 0xc8, 0x2a, 0x44, 0xa6, 0x09, 0x4c, - 0xb2, 0xe9, 0xb1, 0xb7, 0x61, 0xed, 0x1c, 0x35, 0x79, 0x81, 0x4a, 0x46, 0x35, 0x4d, 0xca, 0x1e, - 0xc2, 0x25, 0x31, 0x75, 0x53, 0x7d, 0x2b, 0xee, 0xe4, 0x71, 0x54, 0x7d, 0xd6, 0xc3, 0xfa, 0xaf, - 0x41, 0x51, 0x46, 0x19, 0xbd, 0x5a, 0xed, 0x5d, 0x30, 0xae, 0xfa, 0x3f, 0x5a, 0x86, 0x52, 0x12, - 0x73, 0xf4, 0xb5, 0x66, 0x07, 0x3d, 0xa5, 0x1e, 0x1d, 0xab, 0x12, 0xa4, 0x88, 0x00, 0x39, 0x52, - 0xe2, 0xea, 0xcb, 0x34, 0x74, 0xa5, 0xea, 0xc6, 0x21, 0x07, 0xa1, 0x4b, 0x8f, 0x09, 0xba, 0xbe, - 0x72, 0x7b, 0xae, 0x64, 0x14, 0x11, 0x40, 0xab, 0xeb, 0x1a, 0xd0, 0x37, 0x71, 0xca, 0x9f, 0xd9, - 0x74, 0xfd, 0x63, 0xe4, 0xbb, 0xe0, 0x67, 0x36, 0xe9, 0x21, 0x78, 0x1e, 0x25, 0xc1, 0xcf, 0x86, - 0xe5, 0xcf, 0x16, 0xbd, 0x01, 0xa5, 0x69, 0xf2, 0xbb, 0x57, 0x62, 0x46, 0x4c, 0xe5, 0xaf, 0x5e, - 0xa5, 0x47, 0xb5, 0x74, 0x7e, 0x54, 0xcf, 0xcf, 0x69, 0x98, 0x9b, 0xd3, 0x7a, 0x0c, 0x05, 0x11, - 0x77, 0xf5, 0xea, 0x0e, 0x7f, 0x65, 0x57, 0x69, 0x90, 0xb5, 0x3c, 0x79, 0x65, 0x0f, 0x3f, 0xcf, - 0x55, 0x2c, 0x77, 0xae, 0x62, 0x0f, 0x6e, 0x43, 0x45, 0xfd, 0x71, 0x3a, 0x0a, 0xa0, 0x0f, 0x7c, - 0x87, 0x3f, 0x5f, 0xde, 0xfe, 0xe9, 0x47, 0x5a, 0xe6, 0x81, 0x0e, 0x65, 0xe5, 0xc7, 0x03, 0x90, - 0x62, 0xd7, 0x8a, 0x8e, 0xc4, 0x53, 0xd6, 0x96, 0x7f, 0xe8, 0x68, 0x99, 0x07, 0xf7, 0x50, 0xf9, - 0x52, 0x9f, 0xee, 0x07, 0x58, 0xe9, 0x04, 0xe1, 0xd8, 0xf2, 0x04, 0x9d, 0x33, 0x8d, 0x90, 0xee, - 0x7d, 0xb8, 0xbc, 0xf0, 0x87, 0x08, 0xe8, 0x16, 0x86, 0x3b, 0x9e, 0x78, 0x0e, 0xbf, 0x48, 0xb0, - 0x7b, 0x36, 0x08, 0x5d, 0x5b, 0xcb, 0x3c, 0x78, 0x22, 0x6f, 0x25, 0xcb, 0xb2, 0xdb, 0xdd, 0xfa, - 0x36, 0x97, 0x93, 0xc9, 0xeb, 0x18, 0xfd, 0x2d, 0xfe, 0x4c, 0xb5, 0xd1, 0xec, 0x1d, 0xb4, 0xfb, - 0xe2, 0x25, 0x8e, 0x07, 0x3f, 0x84, 0xda, 0x45, 0x11, 0xf5, 0x58, 0xa3, 0xc6, 0x6e, 0x9d, 0x6e, - 0x2d, 0xa0, 0x5c, 0xec, 0x9a, 0x3c, 0x95, 0xe1, 0x97, 0x3e, 0xda, 0x4d, 0x8a, 0x55, 0x7b, 0xf0, - 0xb3, 0x8c, 0xa2, 0x0d, 0xc8, 0xa8, 0xe8, 0x04, 0x20, 0xba, 0x49, 0x05, 0x19, 0x8e, 0x65, 0x6b, - 0x19, 0x76, 0x05, 0x58, 0x0a, 0xd4, 0x0e, 0x86, 0x96, 0xa7, 0x2d, 0x53, 0x54, 0x9a, 0x84, 0xd3, - 0xbd, 0x17, 0x2d, 0xcb, 0xde, 0x84, 0x6b, 0x09, 0xac, 0x1d, 0x9c, 0xec, 0x87, 0x6e, 0x10, 0xba, - 0xf1, 0x19, 0x47, 0xe7, 0xb6, 0x7e, 0xf0, 0x47, 0xbf, 0xb8, 0x99, 0xf9, 0x57, 0xbf, 0xb8, 0x99, - 0xf9, 0x4f, 0xbf, 0xb8, 0xb9, 0xf4, 0xf3, 0xff, 0x7c, 0x33, 0xf3, 0x13, 0xf5, 0x17, 0xf4, 0xc7, - 0x56, 0x1c, 0xba, 0xa7, 0x7c, 0xf1, 0xca, 0x84, 0xef, 0xbc, 0x3f, 0x39, 0x3e, 0x7c, 0x7f, 0x32, - 0x78, 0x1f, 0x37, 0xf9, 0xc1, 0x0a, 0xfd, 0x56, 0xfe, 0xe3, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, - 0x0d, 0x4c, 0x42, 0x43, 0x8b, 0x7f, 0x00, 0x00, + 0x68, 0xea, 0xc5, 0x8d, 0xc0, 0xdb, 0x75, 0x46, 0xec, 0x5d, 0x80, 0x24, 0x1d, 0x09, 0x2d, 0x65, + 0x36, 0x77, 0x77, 0x9d, 0x91, 0xa1, 0xe0, 0xf5, 0xbf, 0x99, 0x23, 0x7d, 0x6f, 0x97, 0x2b, 0x5a, + 0x42, 0xa3, 0xca, 0x28, 0x1a, 0x55, 0xb2, 0x37, 0xac, 0xa6, 0xb5, 0xca, 0x63, 0xd7, 0xb6, 0x1d, + 0x5f, 0x6a, 0x8f, 0x3c, 0x85, 0x83, 0x6d, 0x79, 0x47, 0xb4, 0xa0, 0xaa, 0x0f, 0x99, 0x2c, 0x74, + 0x3c, 0x09, 0x9d, 0x28, 0xe2, 0x7a, 0x8b, 0xe5, 0x1d, 0xc9, 0xb5, 0x9d, 0xff, 0xaa, 0xb5, 0x7d, + 0x05, 0x8a, 0xb8, 0xe5, 0x91, 0x6d, 0xb7, 0xc6, 0x7b, 0x5f, 0x18, 0xb1, 0xec, 0x6d, 0x28, 0x08, + 0xad, 0x5c, 0x2c, 0x2a, 0x31, 0x5d, 0x76, 0x39, 0xd0, 0x90, 0x58, 0x56, 0x43, 0x25, 0x6f, 0x3c, + 0x76, 0xfc, 0x58, 0xee, 0xd3, 0x22, 0xc9, 0xde, 0x81, 0x52, 0xe0, 0x9b, 0x5c, 0x75, 0x17, 0xab, + 0x4a, 0x4c, 0xdf, 0xae, 0x7f, 0x48, 0x50, 0xa3, 0x18, 0x88, 0x2f, 0xac, 0x8a, 0x17, 0x9c, 0x9a, + 0x43, 0x2b, 0xb4, 0x69, 0x65, 0x15, 0x8d, 0x82, 0x17, 0x9c, 0x36, 0xac, 0xd0, 0xe6, 0x7a, 0xcb, + 0x97, 0xfe, 0x74, 0x4c, 0xab, 0x69, 0xdd, 0x10, 0x29, 0x76, 0x0d, 0x4a, 0x43, 0x6f, 0x1a, 0xc5, + 0x4e, 0xb8, 0x73, 0xce, 0x8d, 0x31, 0x63, 0x06, 0xc0, 0x7a, 0x4d, 0x42, 0x77, 0x6c, 0x85, 0xe7, + 0xb4, 0x74, 0x8a, 0x86, 0x4c, 0xd2, 0x46, 0x73, 0xe2, 0xda, 0x67, 0xdc, 0x22, 0x33, 0x78, 0x02, + 0xe9, 0x8f, 0xc9, 0x5e, 0x8e, 0x68, 0x7d, 0x14, 0x0d, 0x99, 0xa4, 0x71, 0xa0, 0x4f, 0x5a, 0x11, + 0x25, 0x43, 0xa4, 0x52, 0x4a, 0xf7, 0xe6, 0x2b, 0x95, 0x6e, 0x36, 0xaf, 0xf7, 0x04, 0xa1, 0x7b, + 0xe4, 0x0a, 0xad, 0xe5, 0x02, 0xd7, 0x7b, 0x38, 0x88, 0x36, 0xaa, 0x2f, 0xa1, 0x20, 0xba, 0x18, + 0x77, 0x20, 0x5c, 0x3e, 0x69, 0xf1, 0xcc, 0x77, 0x20, 0x84, 0xb3, 0x5b, 0xb0, 0x2e, 0xf2, 0x8a, + 0xe2, 0xd0, 0xf5, 0x8f, 0xc4, 0xe4, 0xa9, 0x70, 0x60, 0x8f, 0x60, 0xa8, 0x28, 0xe0, 0xf0, 0x9a, + 0xd6, 0xc0, 0xf5, 0x70, 0x99, 0x66, 0x85, 0x52, 0x33, 0xf5, 0xbc, 0x3a, 0x07, 0xe9, 0x5d, 0x28, + 0xca, 0x01, 0xf9, 0x95, 0x94, 0xa9, 0xff, 0x76, 0x06, 0xca, 0xa4, 0x1e, 0x74, 0x49, 0xf9, 0x61, + 0xef, 0x02, 0x1b, 0x86, 0x8e, 0x15, 0x3b, 0xa6, 0x73, 0x16, 0x87, 0x96, 0x50, 0x02, 0xb8, 0x26, + 0xa1, 0x71, 0x4c, 0x13, 0x11, 0x5c, 0x0f, 0xb8, 0x01, 0xe5, 0x89, 0x15, 0x46, 0x52, 0xa9, 0xe4, + 0x05, 0x00, 0x07, 0x09, 0x95, 0x4e, 0xf3, 0x8f, 0x42, 0x6b, 0x6c, 0xc6, 0xc1, 0x89, 0xe3, 0x73, + 0x75, 0x9a, 0x1b, 0x12, 0x55, 0x82, 0xf7, 0x11, 0x4c, 0x5a, 0xf5, 0xbf, 0xcd, 0xc0, 0xfa, 0x01, + 0x1f, 0xf5, 0x67, 0xce, 0xf9, 0x2e, 0xb7, 0xde, 0x86, 0x72, 0xc5, 0xe6, 0x0c, 0xfa, 0x66, 0xd7, + 0xa1, 0x3c, 0x39, 0x71, 0xce, 0xcd, 0x94, 0xa5, 0x53, 0x42, 0x50, 0x83, 0xd6, 0xe6, 0x77, 0x60, + 0x2d, 0xa0, 0x86, 0x88, 0x3d, 0x4e, 0x6c, 0x0d, 0x4a, 0x0b, 0x0d, 0x41, 0x80, 0xea, 0x52, 0x92, + 0x95, 0xaa, 0x97, 0x89, 0xcc, 0xa8, 0xfa, 0x5b, 0x90, 0x47, 0x54, 0x54, 0xcb, 0x73, 0x3d, 0x87, + 0x12, 0xec, 0x7d, 0x58, 0x1f, 0x06, 0xe3, 0x89, 0x29, 0xd9, 0xc5, 0x6e, 0x97, 0x96, 0x29, 0x65, + 0x24, 0x39, 0xe0, 0x79, 0xe9, 0xbf, 0x97, 0x85, 0x22, 0xd5, 0x41, 0x88, 0x15, 0xd7, 0x3e, 0x93, + 0x62, 0xa5, 0x64, 0xe4, 0x5d, 0x1b, 0xa5, 0xf6, 0x6b, 0x54, 0xb3, 0x44, 0xe5, 0xca, 0xaa, 0x2a, + 0xd7, 0x25, 0x58, 0x13, 0xfa, 0x56, 0x8e, 0xcb, 0x9d, 0xe9, 0xab, 0xb5, 0xad, 0xfc, 0x32, 0x6d, + 0x0b, 0x87, 0x90, 0xd3, 0x38, 0x67, 0xb8, 0xbf, 0x71, 0xd1, 0x02, 0x04, 0x6a, 0x22, 0x44, 0x15, + 0x1a, 0x85, 0xb4, 0xd0, 0xa8, 0x41, 0xe1, 0xa5, 0x1b, 0xb9, 0x38, 0x41, 0x8a, 0x7c, 0x19, 0x8a, + 0xa4, 0x32, 0x0c, 0xa5, 0xd7, 0x0d, 0x43, 0xd2, 0x6c, 0xcb, 0x3b, 0xe2, 0x6a, 0xbf, 0x6c, 0x76, + 0xdd, 0x3b, 0x0a, 0xd8, 0x07, 0x70, 0x71, 0x86, 0x16, 0xad, 0x21, 0x27, 0x18, 0xf9, 0x79, 0x0c, + 0x96, 0x50, 0x52, 0x8b, 0xc8, 0x2e, 0xbb, 0x07, 0x9b, 0x0a, 0xcb, 0x04, 0xd5, 0x9b, 0x88, 0x64, + 0x4e, 0xc9, 0xd8, 0x48, 0xc8, 0x49, 0xeb, 0x89, 0xf4, 0x7f, 0xb2, 0x0a, 0xeb, 0x4f, 0x82, 0xd0, + 0x71, 0x8f, 0xfc, 0xd9, 0xac, 0x5b, 0xd0, 0xfc, 0xe5, 0x4c, 0x5c, 0x55, 0x66, 0xe2, 0x0d, 0x28, + 0x8f, 0x38, 0xa3, 0x19, 0x0f, 0xb8, 0xd3, 0x20, 0x67, 0x80, 0x00, 0xf5, 0x07, 0x1e, 0xae, 0x66, + 0x49, 0x40, 0xcc, 0x39, 0x62, 0x96, 0x4c, 0xb8, 0xd7, 0xb0, 0xef, 0x92, 0xd4, 0xb5, 0x1d, 0xcf, + 0x89, 0xf9, 0xf0, 0x54, 0x1f, 0xbe, 0x29, 0x77, 0x7a, 0xa5, 0x4e, 0xf7, 0x0d, 0x67, 0x54, 0x27, + 0xf5, 0x08, 0x85, 0xf0, 0x2e, 0x91, 0x0b, 0x5e, 0x21, 0xb1, 0xd7, 0xbe, 0x26, 0x2f, 0x97, 0x1c, + 0x7a, 0x1f, 0x4a, 0x09, 0x18, 0x75, 0x5d, 0xa3, 0x29, 0xf4, 0xdb, 0x15, 0x56, 0x86, 0x42, 0xa3, + 0xde, 0x6b, 0xd4, 0x77, 0x9b, 0x5a, 0x06, 0x51, 0xbd, 0x66, 0x9f, 0xeb, 0xb4, 0xab, 0x6c, 0x03, + 0xca, 0x98, 0xda, 0x6d, 0x3e, 0xa9, 0x1f, 0xb6, 0xfb, 0x5a, 0x96, 0xad, 0x43, 0xa9, 0xd3, 0x35, + 0xeb, 0x8d, 0x7e, 0xab, 0xdb, 0xd1, 0x72, 0xfa, 0x0f, 0xa1, 0xd8, 0x38, 0x76, 0x86, 0x27, 0xaf, + 0xea, 0x45, 0x32, 0xba, 0x9d, 0xe1, 0x89, 0xd0, 0x4f, 0xe7, 0x8c, 0x6e, 0x67, 0x78, 0xa2, 0x37, + 0xa1, 0x74, 0x60, 0x85, 0xb1, 0x4b, 0xf5, 0x7a, 0x0c, 0xeb, 0x49, 0x62, 0xd7, 0x19, 0xc9, 0x9d, + 0x9b, 0x25, 0x5a, 0x6b, 0x82, 0x32, 0xd2, 0x84, 0xfa, 0xbb, 0x50, 0x51, 0x01, 0xec, 0x1a, 0x64, + 0x6d, 0x67, 0xb4, 0x44, 0x4e, 0x22, 0x58, 0x7f, 0x0e, 0x95, 0x86, 0xdc, 0x89, 0x5e, 0x55, 0xf5, + 0x87, 0x50, 0xa5, 0x15, 0x3f, 0x1c, 0xc8, 0x25, 0xbf, 0xba, 0x64, 0xc9, 0x57, 0x90, 0xa6, 0x31, + 0x10, 0x6b, 0xfe, 0x23, 0x28, 0x1f, 0x84, 0xc1, 0xc4, 0x09, 0x63, 0xca, 0x56, 0x83, 0xec, 0x89, + 0x73, 0x2e, 0x72, 0xc5, 0xcf, 0x99, 0x2f, 0x64, 0x55, 0xf5, 0x85, 0x3c, 0x84, 0xa2, 0x64, 0xfb, + 0xda, 0x3c, 0x3f, 0x40, 0xd1, 0x49, 0x3c, 0xae, 0x13, 0x61, 0x61, 0xf7, 0x01, 0x26, 0x09, 0x40, + 0x74, 0x9c, 0x54, 0xf7, 0x45, 0xe6, 0x86, 0x42, 0xa1, 0xbf, 0x09, 0x85, 0xe7, 0xae, 0x73, 0x2a, + 0x9a, 0xff, 0xd2, 0x75, 0x4e, 0x65, 0xf3, 0xf1, 0x5b, 0xff, 0xff, 0x4b, 0x50, 0xa4, 0xf5, 0xb5, + 0xfb, 0x6a, 0xf7, 0xd3, 0x37, 0xd1, 0x8a, 0xb6, 0xc5, 0x7a, 0xca, 0x2d, 0xd1, 0xc5, 0xf8, 0xea, + 0x7a, 0x13, 0x40, 0x59, 0xeb, 0x5c, 0x72, 0x95, 0xe2, 0x64, 0x89, 0xa3, 0x3a, 0x41, 0x7b, 0x51, + 0xf4, 0xa5, 0x27, 0xac, 0xc8, 0x19, 0x80, 0xdd, 0xe7, 0x9b, 0x3d, 0xd9, 0x8d, 0x5c, 0x21, 0xba, + 0x20, 0x95, 0xfa, 0x81, 0xe7, 0x48, 0x53, 0x83, 0x34, 0x00, 0x4c, 0x90, 0x1c, 0x73, 0xc2, 0x08, + 0xc5, 0x15, 0x79, 0xa1, 0x0d, 0x99, 0x64, 0x6f, 0x43, 0x0e, 0x85, 0xbc, 0x30, 0x0d, 0x2e, 0xc8, + 0x1e, 0x54, 0x76, 0x29, 0x83, 0x08, 0xd8, 0x5d, 0x28, 0x90, 0x68, 0x71, 0x50, 0xd2, 0x28, 0xbd, + 0x2d, 0x85, 0xbe, 0x21, 0xd1, 0xec, 0x3b, 0x90, 0x1f, 0x9d, 0x38, 0xe7, 0x51, 0x6d, 0x9d, 0xe8, + 0x2e, 0x2c, 0x59, 0xb3, 0x06, 0xa7, 0x60, 0xb7, 0xa1, 0x1a, 0x3a, 0x23, 0x93, 0x1c, 0x52, 0x28, + 0x64, 0xa2, 0x5a, 0x95, 0x64, 0x48, 0x25, 0x74, 0x46, 0x0d, 0x04, 0xf6, 0x07, 0x5e, 0xc4, 0xee, + 0xc0, 0x1a, 0xad, 0x1e, 0xd4, 0x85, 0x94, 0x92, 0xe5, 0x52, 0x34, 0x04, 0x96, 0x7d, 0x00, 0x20, + 0x34, 0x2e, 0x73, 0x70, 0x4e, 0xee, 0xda, 0x64, 0x31, 0xa9, 0xf3, 0x5f, 0xd5, 0xcb, 0xde, 0x86, + 0x3c, 0x4e, 0x92, 0xa8, 0x76, 0x99, 0x72, 0xde, 0x4c, 0xcf, 0x20, 0xaa, 0x29, 0xe1, 0xd9, 0x5d, + 0x28, 0xe2, 0x44, 0x31, 0x71, 0x38, 0x6a, 0xaa, 0x0a, 0x2a, 0x66, 0x15, 0xee, 0x0c, 0xce, 0x69, + 0xef, 0x4b, 0x8f, 0xdd, 0x83, 0x9c, 0x8d, 0x8b, 0xf9, 0x0a, 0xe5, 0x78, 0x49, 0x19, 0x17, 0x14, + 0x56, 0xbb, 0xce, 0x88, 0xb4, 0x62, 0xa2, 0x61, 0x7b, 0x50, 0xc5, 0x69, 0xf4, 0x90, 0x36, 0x7b, + 0xec, 0xbe, 0xda, 0x55, 0xe2, 0xba, 0x39, 0xc7, 0xd5, 0x11, 0x44, 0xd4, 0xd9, 0x4d, 0x3f, 0x0e, + 0xcf, 0x8d, 0x75, 0x5f, 0x85, 0xb1, 0xab, 0x68, 0xba, 0xb4, 0x83, 0xe1, 0x89, 0x63, 0xd7, 0xde, + 0x90, 0x8e, 0x09, 0x9e, 0x66, 0x9f, 0xc2, 0x3a, 0x4d, 0x2c, 0x4c, 0x62, 0xe1, 0xb5, 0x6b, 0x24, + 0x4c, 0xd5, 0x29, 0x23, 0x51, 0x46, 0x9a, 0x12, 0x45, 0xbc, 0x1b, 0x99, 0xb1, 0x33, 0x9e, 0x04, + 0x21, 0x2a, 0xaf, 0x6f, 0x4a, 0x87, 0x4b, 0x5f, 0x82, 0x70, 0x23, 0x4e, 0x0e, 0x97, 0xcc, 0x60, + 0x34, 0x8a, 0x9c, 0xb8, 0x76, 0x9d, 0xd6, 0x4d, 0x55, 0x9e, 0x31, 0x75, 0x09, 0x4a, 0x1b, 0x61, + 0x64, 0xda, 0xe7, 0xbe, 0x35, 0x76, 0x87, 0xb5, 0x1b, 0x5c, 0x47, 0x76, 0xa3, 0x5d, 0x0e, 0x50, + 0xd5, 0xd4, 0xed, 0x94, 0x9a, 0x7a, 0x01, 0xf2, 0xf6, 0x00, 0x97, 0xe3, 0x4d, 0xca, 0x36, 0x67, + 0x0f, 0x5a, 0x36, 0x7b, 0x0f, 0x4a, 0x13, 0x29, 0x02, 0x6b, 0xba, 0x6a, 0x8c, 0x27, 0x92, 0xd1, + 0x98, 0x51, 0xa0, 0x7d, 0xf8, 0xc4, 0xb1, 0xe2, 0x69, 0xe8, 0x3c, 0xf1, 0xac, 0xa3, 0xda, 0x2d, + 0xca, 0x49, 0x05, 0x5d, 0x7d, 0x4a, 0xba, 0x2e, 0xb5, 0xfa, 0xa3, 0x39, 0xe1, 0x92, 0x5a, 0x1a, + 0x8a, 0x14, 0xda, 0x5b, 0x51, 0x65, 0xcc, 0x4e, 0x9e, 0xa4, 0xf0, 0xd5, 0x1f, 0x02, 0x5b, 0x1c, + 0xaf, 0xd7, 0x49, 0xba, 0xbc, 0x90, 0x74, 0xdf, 0x5d, 0x7d, 0x9c, 0xd1, 0x9f, 0xc3, 0x7a, 0x6a, + 0x21, 0x2f, 0x95, 0xd8, 0x5c, 0x5d, 0xb2, 0xc6, 0xc2, 0xbc, 0xe4, 0x09, 0xe1, 0xa1, 0x8a, 0x5c, + 0xff, 0x48, 0x78, 0xb6, 0x68, 0x22, 0xf4, 0x28, 0xad, 0xff, 0x59, 0x16, 0x2a, 0x7b, 0x56, 0x74, + 0xbc, 0x6f, 0x4d, 0x7a, 0xb1, 0x15, 0x47, 0x38, 0xbc, 0xc7, 0x56, 0x74, 0x3c, 0xb6, 0x26, 0x5c, + 0x71, 0xcd, 0x70, 0xb3, 0x59, 0xc0, 0x50, 0x6b, 0xc5, 0x89, 0x85, 0xc9, 0xae, 0x7f, 0xf0, 0x4c, + 0xd8, 0xc4, 0x49, 0x1a, 0xc5, 0x4a, 0x74, 0x3c, 0x1d, 0x8d, 0x92, 0xa2, 0x64, 0x92, 0xdd, 0x86, + 0x75, 0xf1, 0x49, 0x5a, 0xeb, 0x99, 0x38, 0x5c, 0x4c, 0x03, 0xd9, 0x23, 0x28, 0x0b, 0x40, 0x5f, + 0x0a, 0xc1, 0x6a, 0xe2, 0xeb, 0x98, 0x21, 0x0c, 0x95, 0x8a, 0xfd, 0x18, 0x2e, 0x2a, 0xc9, 0x27, + 0x41, 0xb8, 0x3f, 0xf5, 0x62, 0xb7, 0xd1, 0x11, 0x2a, 0xc2, 0x1b, 0x0b, 0xec, 0x33, 0x12, 0x63, + 0x39, 0x67, 0xba, 0xb6, 0xfb, 0xae, 0x4f, 0x32, 0x35, 0x6b, 0xa4, 0x81, 0x73, 0x54, 0xd6, 0x19, + 0x89, 0xd2, 0x34, 0x95, 0x75, 0x86, 0x8b, 0x4d, 0x00, 0xf6, 0x9d, 0xf8, 0x38, 0xb0, 0x49, 0x3f, + 0x4c, 0x16, 0x5b, 0x4f, 0x45, 0x19, 0x69, 0x4a, 0xec, 0x4e, 0xb4, 0x84, 0x86, 0x7e, 0x4c, 0x5a, + 0x62, 0xd6, 0x90, 0x49, 0xdc, 0x66, 0x42, 0xcb, 0x3f, 0x72, 0xa2, 0x5a, 0x79, 0x3b, 0x7b, 0x37, + 0x63, 0x88, 0x94, 0xfe, 0x47, 0xab, 0x90, 0xe7, 0x23, 0xf9, 0x06, 0x94, 0x06, 0xe4, 0x2c, 0x46, + 0xcb, 0x54, 0x38, 0x80, 0x09, 0xd0, 0x99, 0x8e, 0xb9, 0x76, 0x27, 0x7c, 0x1a, 0x19, 0x83, 0xbe, + 0x31, 0xcb, 0x60, 0x1a, 0x63, 0x59, 0x59, 0x82, 0x8a, 0x14, 0x56, 0x22, 0x0c, 0x4e, 0x69, 0x36, + 0xe4, 0x08, 0x21, 0x93, 0xe4, 0x63, 0xa6, 0x1d, 0x0b, 0x99, 0xf2, 0x84, 0x2b, 0x12, 0xa0, 0xe1, + 0xc7, 0xf3, 0xfe, 0x97, 0xb5, 0x05, 0xff, 0x0b, 0xbb, 0x0e, 0xa8, 0x3b, 0x0e, 0x9d, 0xae, 0xef, + 0x34, 0x3a, 0xd4, 0xc3, 0x45, 0x43, 0x81, 0xe0, 0x02, 0xb1, 0x83, 0x09, 0x75, 0x6a, 0xde, 0xc0, + 0x4f, 0xf6, 0x71, 0x32, 0x3b, 0xa9, 0x8d, 0x42, 0xd3, 0x16, 0x12, 0x5d, 0x9d, 0xc7, 0x46, 0x8a, + 0x0e, 0x73, 0x42, 0x31, 0xcd, 0x35, 0x6d, 0xfc, 0xd4, 0x9b, 0x00, 0x46, 0x70, 0x1a, 0x39, 0x31, + 0x39, 0x1a, 0x2f, 0x53, 0x13, 0x53, 0x47, 0x44, 0xc1, 0xe9, 0x41, 0x10, 0x25, 0xf6, 0xe6, 0xea, + 0x72, 0x7b, 0x53, 0x7f, 0x00, 0x05, 0xdc, 0xc3, 0xad, 0xd8, 0x62, 0xb7, 0x85, 0x6f, 0x87, 0x6b, + 0x1e, 0xc2, 0xc9, 0x35, 0x2b, 0x43, 0x78, 0x7b, 0xda, 0xb2, 0x5c, 0xe2, 0xb9, 0xa9, 0x98, 0x7b, + 0xc9, 0xfe, 0x21, 0x32, 0x14, 0x5a, 0xc1, 0x1b, 0x50, 0xc2, 0xaa, 0x91, 0xdf, 0x5c, 0xc8, 0x85, + 0x62, 0x18, 0x9c, 0x36, 0x30, 0xad, 0xff, 0xbb, 0x0c, 0x94, 0xbb, 0xa1, 0x8d, 0x1b, 0x57, 0x6f, + 0xe2, 0x0c, 0x5f, 0x6b, 0x1e, 0xa3, 0x0e, 0x11, 0x78, 0x9e, 0x45, 0x22, 0x52, 0x98, 0x5b, 0x09, + 0x80, 0x7d, 0x00, 0xb9, 0x11, 0x8a, 0xc2, 0xac, 0xaa, 0x59, 0x2b, 0xd9, 0xcb, 0x6f, 0x14, 0x8e, + 0x06, 0x91, 0xea, 0xbf, 0x91, 0x94, 0x4f, 0x7e, 0x66, 0xd5, 0xbb, 0xbc, 0x42, 0xe7, 0x3c, 0xbd, + 0x86, 0x96, 0x61, 0x45, 0xc8, 0xed, 0x36, 0x7b, 0x0d, 0xae, 0x4f, 0xa3, 0x66, 0xdd, 0x33, 0x9f, + 0xb4, 0x8c, 0x5e, 0x5f, 0xcb, 0xd1, 0xc1, 0x11, 0x01, 0xda, 0xf5, 0x5e, 0x5f, 0x2b, 0x32, 0x80, + 0xb5, 0xc3, 0x4e, 0xeb, 0xc7, 0x87, 0x4d, 0x4d, 0xd3, 0xff, 0x65, 0x06, 0x60, 0xe6, 0x04, 0x65, + 0xef, 0x40, 0xf9, 0x94, 0x52, 0xa6, 0xe2, 0x1d, 0x57, 0xdb, 0x08, 0x1c, 0x4d, 0xfa, 0xcd, 0x7b, + 0x50, 0x49, 0x44, 0x3d, 0xee, 0xfd, 0x8b, 0x6e, 0xf2, 0x72, 0x82, 0xdf, 0x39, 0x67, 0xef, 0x42, + 0x31, 0xc0, 0x76, 0x20, 0x69, 0x56, 0xdd, 0xf8, 0x95, 0xe6, 0x1b, 0x85, 0x80, 0x27, 0x50, 0x47, + 0x18, 0x85, 0xd2, 0x7c, 0x4e, 0x48, 0x9f, 0x20, 0xa8, 0xe1, 0x59, 0xd3, 0xc8, 0x31, 0x38, 0x3e, + 0x91, 0xd2, 0xf9, 0x99, 0x94, 0xd6, 0x7f, 0x02, 0xd5, 0x9e, 0x35, 0x9e, 0x70, 0x59, 0x4e, 0x0d, + 0x63, 0x90, 0xc3, 0x39, 0x21, 0xa6, 0x1e, 0x7d, 0xe3, 0xa2, 0x3b, 0x70, 0xc2, 0xa1, 0xe3, 0xcb, + 0x35, 0x2a, 0x93, 0x28, 0x7e, 0x0f, 0x51, 0x9a, 0x1b, 0xc1, 0xa9, 0x14, 0xe7, 0x32, 0xad, 0xff, + 0xed, 0x0c, 0x94, 0x95, 0x6a, 0xb0, 0x07, 0x90, 0x23, 0x65, 0x32, 0xa3, 0x0a, 0x42, 0x85, 0x80, + 0x7f, 0x73, 0xf5, 0x03, 0x09, 0xd9, 0x1d, 0xc8, 0x47, 0xb1, 0x15, 0x4a, 0x7f, 0xba, 0xa6, 0x70, + 0xec, 0x04, 0x53, 0xdf, 0x36, 0x38, 0x9a, 0xe9, 0x90, 0x75, 0x7c, 0x5b, 0x38, 0x1c, 0x16, 0xa9, + 0x10, 0xa9, 0x6f, 0x43, 0x29, 0xc9, 0x1e, 0xa7, 0x80, 0xd1, 0x7d, 0xd1, 0xd3, 0x56, 0x58, 0x09, + 0xf2, 0x46, 0xbd, 0xf3, 0xb4, 0xa9, 0x65, 0xf4, 0x3f, 0xce, 0x00, 0xcc, 0xb8, 0xd8, 0xfd, 0x54, + 0x6d, 0xaf, 0xce, 0xe7, 0x7a, 0x9f, 0xfe, 0x2a, 0x95, 0xbd, 0x06, 0xa5, 0xa9, 0x4f, 0x40, 0xc7, + 0x16, 0x3b, 0xd1, 0x0c, 0x80, 0x16, 0x90, 0x8c, 0xf1, 0x98, 0xb3, 0x80, 0x5e, 0x5a, 0x9e, 0xfe, + 0x5d, 0x28, 0x25, 0xd9, 0xa1, 0x51, 0xf7, 0xa4, 0xdb, 0x6e, 0x77, 0x5f, 0xb4, 0x3a, 0x4f, 0xb5, + 0x15, 0x4c, 0x1e, 0x18, 0xcd, 0x46, 0x73, 0x17, 0x93, 0x19, 0x9c, 0xb3, 0x8d, 0x43, 0xc3, 0x68, + 0x76, 0xfa, 0xa6, 0xd1, 0x7d, 0xa1, 0xad, 0xea, 0xff, 0x77, 0x0e, 0x36, 0xbb, 0xfe, 0xee, 0x74, + 0xe2, 0xb9, 0x43, 0x2b, 0x76, 0x9e, 0x39, 0xe7, 0x8d, 0xf8, 0x0c, 0x77, 0x5f, 0x2b, 0x8e, 0x43, + 0xbe, 0x98, 0x4b, 0x06, 0x4f, 0x70, 0xa7, 0x44, 0xe4, 0x84, 0x31, 0xf9, 0x5c, 0xd4, 0x55, 0x5c, + 0xe5, 0xf0, 0x46, 0xe0, 0xd1, 0x5a, 0x66, 0xdf, 0x87, 0x8b, 0xdc, 0x91, 0xc1, 0x29, 0x51, 0x81, + 0x35, 0x69, 0x31, 0x67, 0x17, 0xa6, 0x2e, 0xe3, 0x84, 0xc8, 0x8a, 0x64, 0x24, 0xc2, 0x6e, 0x40, + 0x79, 0xc6, 0x2e, 0x0f, 0xa9, 0x20, 0x21, 0xa4, 0x9a, 0xa0, 0xe1, 0x2d, 0x6b, 0x6d, 0xba, 0xf6, + 0x19, 0xb9, 0x78, 0xf2, 0x46, 0x35, 0x98, 0x35, 0x06, 0x37, 0xe1, 0xcf, 0x60, 0x33, 0x45, 0x49, + 0xb5, 0x58, 0xa3, 0x5a, 0xbc, 0x2b, 0x1d, 0xa4, 0x73, 0xad, 0x57, 0x21, 0x58, 0x1d, 0xae, 0x91, + 0x6e, 0x04, 0x69, 0xa8, 0xd0, 0x45, 0xdc, 0x23, 0x3f, 0x08, 0x1d, 0x21, 0xf0, 0x8b, 0x6e, 0xd4, + 0xa2, 0xf4, 0xcc, 0xfe, 0x51, 0x0e, 0x55, 0xf9, 0xfe, 0x22, 0xcf, 0x0b, 0x39, 0xda, 0xe5, 0x3b, + 0x68, 0xce, 0x28, 0x50, 0xba, 0x65, 0xb3, 0x5b, 0x42, 0x9d, 0x35, 0xa5, 0x49, 0x03, 0x64, 0xd2, + 0x54, 0x08, 0xf8, 0x9c, 0xc3, 0xae, 0x76, 0x60, 0x6b, 0x59, 0x25, 0x97, 0xa8, 0x61, 0xdb, 0xaa, + 0x1a, 0x36, 0x67, 0xb4, 0xcf, 0x54, 0xb2, 0xbf, 0x9b, 0x81, 0xca, 0xae, 0x63, 0x4f, 0x27, 0x3f, + 0x0a, 0x5c, 0x1f, 0x27, 0xc0, 0x87, 0x50, 0x09, 0x3c, 0x9b, 0x46, 0x4f, 0x89, 0x0d, 0x48, 0x9d, + 0x18, 0x09, 0xe7, 0x36, 0x04, 0x9e, 0xdd, 0x08, 0x3c, 0x8a, 0x24, 0x78, 0x0f, 0x2e, 0x70, 0x87, + 0x86, 0xf0, 0xef, 0x9d, 0x71, 0xe6, 0x55, 0x1a, 0x19, 0x8d, 0xa3, 0xb8, 0x72, 0x44, 0xe4, 0xbf, + 0x06, 0x5b, 0x0a, 0x39, 0x8e, 0x0c, 0xa7, 0x5f, 0x9c, 0x24, 0x9b, 0x09, 0xaf, 0x3c, 0xb2, 0xd1, + 0x7f, 0x67, 0x15, 0x4a, 0xdc, 0x1d, 0x82, 0xf5, 0xbd, 0x0b, 0x85, 0x60, 0xf0, 0x85, 0x19, 0x26, + 0x6e, 0x82, 0x85, 0x93, 0xc6, 0xb5, 0x60, 0xf0, 0x85, 0xe1, 0x8c, 0xd8, 0x3b, 0x72, 0x9f, 0xb7, + 0x9d, 0x91, 0xe8, 0x94, 0x6a, 0xda, 0x1e, 0x11, 0xfb, 0x3e, 0xda, 0xca, 0x8f, 0xa0, 0x3c, 0x9b, + 0xf1, 0x51, 0xad, 0xf0, 0xea, 0x5e, 0x48, 0x16, 0x40, 0x84, 0x4c, 0xdc, 0x25, 0xc4, 0x99, 0x8a, + 0xaf, 0x66, 0xe2, 0x64, 0xc4, 0xf4, 0x29, 0x54, 0x67, 0x32, 0x9e, 0xf8, 0x4a, 0xaf, 0xe4, 0x5b, + 0x4f, 0x28, 0xe9, 0xc4, 0xe3, 0xef, 0x65, 0xa0, 0xd4, 0xe2, 0xc5, 0xc7, 0x67, 0xec, 0x26, 0x64, + 0xbf, 0xa2, 0x17, 0x10, 0xc7, 0xee, 0xc1, 0xa6, 0x65, 0xdb, 0xa6, 0x35, 0x1a, 0x39, 0xc3, 0xd8, + 0xb1, 0x4d, 0x54, 0x81, 0x84, 0xcc, 0xd9, 0xb0, 0x6c, 0xbb, 0x2e, 0xe0, 0x24, 0xbb, 0x71, 0xcd, + 0x47, 0xa6, 0x34, 0x3c, 0x67, 0x47, 0xca, 0x45, 0xa3, 0xea, 0x46, 0xc2, 0xee, 0xe4, 0xbe, 0xe4, + 0x54, 0xc7, 0xe6, 0xbe, 0xba, 0x63, 0xf5, 0xdf, 0x5d, 0x05, 0x30, 0x9c, 0x89, 0x67, 0x0d, 0x9d, + 0xff, 0x63, 0x2a, 0x8d, 0x62, 0x29, 0x19, 0x58, 0xdf, 0x96, 0x21, 0x18, 0x72, 0x10, 0x7d, 0x9b, + 0xfd, 0x10, 0xde, 0x0c, 0x9d, 0xd3, 0xd0, 0x8d, 0x1d, 0x73, 0x14, 0x06, 0x63, 0x33, 0x25, 0x79, + 0x70, 0x61, 0x96, 0xa8, 0x12, 0x57, 0x04, 0xd1, 0x93, 0x30, 0x18, 0xa7, 0xa5, 0x8f, 0xfe, 0x9f, + 0x8b, 0x50, 0xae, 0xfb, 0x96, 0x77, 0xfe, 0x53, 0x87, 0x62, 0x02, 0xc8, 0xbb, 0x3a, 0x99, 0xc6, + 0xbc, 0xb9, 0xfc, 0xc0, 0xac, 0x44, 0x10, 0x6a, 0xe8, 0x0d, 0x28, 0x07, 0xd3, 0x38, 0xc1, 0xf3, + 0x23, 0x34, 0xe0, 0x20, 0x22, 0x48, 0xf8, 0x13, 0xcf, 0xbd, 0xe4, 0x27, 0xf3, 0x67, 0xc6, 0x9f, + 0xa8, 0xc4, 0x09, 0x3f, 0x11, 0xa0, 0x34, 0x72, 0xc7, 0xd4, 0xe0, 0x68, 0x3a, 0x76, 0x78, 0xa3, + 0xb3, 0x3c, 0x0a, 0xad, 0x21, 0x60, 0x98, 0xcb, 0xd8, 0x19, 0x07, 0xe1, 0x39, 0xcf, 0x65, 0x8d, + 0xe7, 0xc2, 0x41, 0x94, 0xcb, 0xbb, 0xc0, 0x4e, 0x2d, 0x37, 0x36, 0xd3, 0x59, 0x71, 0x33, 0x44, + 0x43, 0x4c, 0x5f, 0xcd, 0xee, 0x12, 0xac, 0xd9, 0x6e, 0x74, 0xd2, 0xea, 0x0a, 0x13, 0x44, 0xa4, + 0xb0, 0x2d, 0xd1, 0xd0, 0x42, 0x0d, 0x28, 0x76, 0xb8, 0xba, 0x9c, 0x35, 0x4a, 0x08, 0xd9, 0x41, + 0x00, 0xee, 0xa0, 0xbe, 0x13, 0x9f, 0x06, 0x21, 0x72, 0x72, 0x0b, 0x63, 0x06, 0x40, 0x4d, 0x03, + 0x49, 0xb1, 0x20, 0xf2, 0x06, 0x65, 0x8d, 0x24, 0x8d, 0xba, 0x3b, 0x5f, 0xbe, 0x84, 0xad, 0xf0, + 0xea, 0xcf, 0x20, 0xec, 0x36, 0x54, 0xa9, 0xfa, 0x64, 0x81, 0x60, 0x1b, 0xe8, 0x94, 0x2b, 0x6b, + 0x54, 0x10, 0x4a, 0xce, 0x04, 0xa4, 0xfa, 0x14, 0xae, 0xa4, 0xda, 0x67, 0x5a, 0x61, 0x68, 0x9d, + 0x9b, 0x63, 0xeb, 0x8b, 0x20, 0x24, 0xc7, 0x4f, 0xd6, 0xb8, 0xa4, 0x76, 0x5b, 0x1d, 0xd1, 0xfb, + 0x88, 0x7d, 0x25, 0xab, 0xeb, 0x07, 0x21, 0x79, 0x85, 0x96, 0xb2, 0x22, 0x96, 0x5c, 0x18, 0x34, + 0xc0, 0x64, 0x0e, 0x45, 0x3c, 0x7a, 0xd1, 0x28, 0x13, 0x6c, 0x87, 0x40, 0x68, 0x10, 0x44, 0x8f, + 0xb8, 0x64, 0xdd, 0x14, 0x41, 0x46, 0x8f, 0x48, 0xfe, 0x72, 0xc4, 0xb1, 0x63, 0xd9, 0x74, 0x72, + 0x46, 0x88, 0x3d, 0xc7, 0xa2, 0x73, 0xe9, 0xe8, 0x91, 0x39, 0x99, 0xc6, 0x3c, 0xec, 0xd0, 0xc8, + 0x47, 0x8f, 0x0e, 0xa6, 0xb1, 0x00, 0x1f, 0x39, 0x31, 0x05, 0x1b, 0x12, 0xf8, 0xa9, 0x13, 0xe3, + 0x46, 0x18, 0x3d, 0x92, 0x5e, 0xf0, 0x8b, 0xa2, 0x6f, 0x1f, 0x09, 0x37, 0xb7, 0x0e, 0xeb, 0x09, + 0xd2, 0x1c, 0x4f, 0x79, 0x9c, 0x61, 0xd6, 0x28, 0x4b, 0x82, 0xfd, 0xa9, 0x87, 0x03, 0x3b, 0xb4, + 0x86, 0xc7, 0x8e, 0x19, 0x62, 0x55, 0x2e, 0xf3, 0xa1, 0x23, 0x88, 0x81, 0xb5, 0x79, 0x03, 0x78, + 0xc2, 0x3c, 0x76, 0x63, 0xf2, 0x4e, 0x65, 0x8d, 0x22, 0x01, 0xf6, 0xdc, 0x18, 0xc5, 0x02, 0x47, + 0x8a, 0x19, 0x48, 0x59, 0x5c, 0x21, 0xa2, 0x0d, 0x42, 0xec, 0x13, 0x9c, 0x32, 0xba, 0x0b, 0x5a, + 0x8a, 0x16, 0xf3, 0xbb, 0x4a, 0xa4, 0x55, 0x85, 0x14, 0x73, 0xbd, 0x03, 0x9c, 0xd9, 0xc4, 0xa9, + 0xc7, 0xf3, 0x7c, 0x83, 0x9b, 0xc3, 0x04, 0xde, 0x75, 0xa3, 0x13, 0xca, 0xf1, 0x36, 0x54, 0x15, + 0x3a, 0xcc, 0xef, 0x1a, 0x9f, 0x19, 0x09, 0x59, 0xaa, 0x8e, 0xa1, 0x33, 0x0e, 0x62, 0xd1, 0xcc, + 0x37, 0x95, 0x3a, 0x1a, 0x04, 0x4f, 0xd7, 0x51, 0xd0, 0x62, 0x9e, 0xd7, 0x95, 0x3a, 0x72, 0x52, + 0xcc, 0xf5, 0x26, 0x54, 0x50, 0x8a, 0xc4, 0x8e, 0xcf, 0x17, 0xff, 0x0d, 0xde, 0xb1, 0x02, 0x46, + 0xab, 0xff, 0x26, 0x54, 0x78, 0xcf, 0x0b, 0x71, 0xb9, 0xcd, 0x49, 0x04, 0x0c, 0x49, 0xf4, 0x9f, + 0x65, 0xe0, 0x6a, 0x97, 0x0e, 0x14, 0x49, 0xe0, 0xed, 0x3b, 0x51, 0x64, 0x1d, 0x39, 0x4f, 0x82, + 0xf0, 0xc9, 0xf4, 0xa7, 0x3f, 0x3d, 0x67, 0x77, 0x61, 0xe3, 0xc0, 0x0a, 0x1d, 0x3f, 0x4e, 0x0e, + 0x9c, 0x84, 0x72, 0x31, 0x0f, 0x66, 0x8f, 0x41, 0xe3, 0xa0, 0xc3, 0x44, 0x4d, 0x13, 0x86, 0x4a, + 0xda, 0x3f, 0xbc, 0x40, 0xa5, 0xff, 0x8f, 0x6d, 0xc8, 0x75, 0x02, 0xdb, 0x61, 0xef, 0x43, 0x89, + 0xc2, 0xff, 0x14, 0xc5, 0x59, 0x38, 0x16, 0x10, 0x4d, 0x7f, 0x48, 0x63, 0x2e, 0xfa, 0xe2, 0xeb, + 0xd5, 0x01, 0x83, 0x37, 0x49, 0xf7, 0xa7, 0xd3, 0x36, 0x94, 0xe9, 0x65, 0xe1, 0x9f, 0x20, 0x73, + 0x9a, 0x63, 0x50, 0x22, 0x90, 0x67, 0x36, 0x74, 0x7c, 0xd2, 0x30, 0xf3, 0x46, 0x92, 0x26, 0x8b, + 0x2b, 0x0c, 0x70, 0xff, 0xe1, 0xeb, 0x26, 0xbf, 0xc4, 0xe2, 0xe2, 0x78, 0x5a, 0x48, 0xef, 0x43, + 0xe9, 0x8b, 0xc0, 0xf5, 0x79, 0xc5, 0xd7, 0x16, 0x2a, 0x8e, 0x4a, 0x15, 0xaf, 0xf8, 0x17, 0xe2, + 0x8b, 0xdd, 0x82, 0x42, 0xe0, 0xf3, 0xbc, 0x0b, 0x0b, 0x79, 0xaf, 0x05, 0x7e, 0x9b, 0x47, 0xa3, + 0xac, 0xbb, 0x91, 0x19, 0xba, 0x47, 0xc7, 0xb1, 0x89, 0x9c, 0xe2, 0x94, 0xae, 0xec, 0x46, 0x06, + 0xc2, 0x30, 0x5b, 0x34, 0x24, 0x47, 0xae, 0x87, 0xdb, 0x1c, 0x65, 0x56, 0x5a, 0xc8, 0x0c, 0x38, + 0x9a, 0x32, 0x7c, 0x0b, 0x8a, 0x47, 0x61, 0x30, 0x9d, 0xa0, 0x65, 0x08, 0x0b, 0x94, 0x05, 0xc2, + 0xed, 0x9c, 0xa3, 0xd0, 0xa7, 0x4f, 0xd7, 0x3f, 0x32, 0xc9, 0x88, 0x2e, 0x6f, 0x67, 0xef, 0x16, + 0x8d, 0x8a, 0x04, 0x92, 0x79, 0xfc, 0x16, 0x14, 0xad, 0xa3, 0x23, 0x53, 0x04, 0xd5, 0x2c, 0xe4, + 0x65, 0x1d, 0x1d, 0x51, 0x91, 0xf7, 0x61, 0xfd, 0xd4, 0xf5, 0xcd, 0x68, 0xe2, 0x0c, 0x39, 0xed, + 0xfa, 0x62, 0x57, 0x9e, 0xba, 0x3e, 0xda, 0x8e, 0x44, 0xaf, 0x1a, 0xaf, 0xd5, 0xd7, 0x1a, 0xaf, + 0xdb, 0x90, 0xf7, 0xdc, 0xb1, 0x1b, 0x8b, 0x30, 0x9b, 0x94, 0x76, 0x4b, 0x08, 0xa6, 0xc3, 0x9a, + 0xf0, 0xda, 0x6a, 0x0b, 0x24, 0x02, 0x93, 0x56, 0x02, 0x36, 0x5f, 0xa3, 0x04, 0x28, 0x9a, 0x26, + 0xfb, 0x6a, 0x4d, 0xf3, 0x23, 0x52, 0xe9, 0x1c, 0x3f, 0x36, 0x25, 0xc3, 0x85, 0xe5, 0x0c, 0x15, + 0x4e, 0xd6, 0xe5, 0x6c, 0x1f, 0x40, 0x39, 0x24, 0xaf, 0x8a, 0x49, 0x2e, 0x98, 0x2d, 0xd5, 0x2c, + 0x9d, 0xb9, 0x5b, 0x0c, 0x08, 0x67, 0xae, 0x97, 0x3a, 0x6c, 0xcc, 0xc2, 0x06, 0x79, 0xfc, 0xe5, + 0x45, 0xd5, 0xad, 0x9b, 0x8a, 0x33, 0x94, 0x4a, 0xa4, 0x9b, 0x0a, 0x3e, 0xbc, 0x05, 0xeb, 0x3c, + 0x60, 0x80, 0x1f, 0xeb, 0x46, 0x24, 0xa7, 0x4b, 0x46, 0x85, 0x80, 0xfc, 0xc8, 0x37, 0x62, 0xf7, + 0x01, 0xa4, 0x02, 0x14, 0x9f, 0x91, 0xa0, 0x4e, 0x5a, 0xc3, 0xa5, 0x79, 0x23, 0x3e, 0x33, 0x4a, + 0xb6, 0xfc, 0x44, 0xf9, 0x33, 0x70, 0x7d, 0x1b, 0xe7, 0x51, 0x6c, 0x1d, 0x45, 0xb5, 0x1a, 0x2d, + 0xb3, 0xb2, 0x80, 0xf5, 0xad, 0xa3, 0x08, 0x0d, 0x0d, 0x8b, 0xeb, 0x3b, 0xbc, 0xde, 0x57, 0x54, + 0x2f, 0x84, 0xa2, 0x09, 0x19, 0x65, 0x4b, 0x51, 0x8b, 0x3e, 0x01, 0x26, 0x4f, 0x88, 0x14, 0xbb, + 0xe1, 0xea, 0xc2, 0xd4, 0xda, 0x10, 0x47, 0x44, 0x49, 0xac, 0xf3, 0x27, 0xb0, 0x9e, 0x56, 0x0b, + 0xaf, 0x2d, 0x39, 0x47, 0xa1, 0x51, 0x37, 0x2a, 0x43, 0x55, 0x51, 0xbc, 0xc5, 0x23, 0x56, 0x49, + 0x06, 0x13, 0x23, 0x3f, 0x2b, 0xa8, 0xf8, 0x41, 0xdc, 0x90, 0x30, 0xec, 0x1f, 0x69, 0x2e, 0xc4, + 0x67, 0x24, 0xb6, 0x93, 0xfe, 0x49, 0x14, 0x74, 0x54, 0xbf, 0xa4, 0xae, 0x8e, 0x43, 0xcd, 0x95, + 0x60, 0x62, 0xb8, 0x91, 0x1a, 0xea, 0x44, 0x3b, 0x36, 0x20, 0x9c, 0x69, 0xca, 0x37, 0xa0, 0x1c, + 0x05, 0xd3, 0x70, 0xe8, 0x98, 0x51, 0xec, 0x4c, 0x6a, 0xdb, 0xd4, 0xa3, 0xc0, 0x41, 0xbd, 0xd8, + 0x99, 0xb0, 0xc7, 0x50, 0x9d, 0x84, 0xd8, 0x99, 0x49, 0x3d, 0x74, 0xb5, 0x89, 0x07, 0xa1, 0x33, + 0xab, 0x4a, 0x65, 0xa2, 0xa4, 0xd8, 0x0f, 0x60, 0x53, 0xe1, 0x9c, 0x9e, 0x10, 0xf3, 0x2d, 0x62, + 0xde, 0x9a, 0x63, 0x3e, 0x3c, 0x41, 0xf6, 0xea, 0x24, 0x95, 0x66, 0xf5, 0x39, 0xab, 0x1c, 0x35, + 0xde, 0xdb, 0xc4, 0x7f, 0xf9, 0x15, 0xa6, 0x76, 0xca, 0x5c, 0x7f, 0xc6, 0x4f, 0x0d, 0x5a, 0x51, + 0xd3, 0xb7, 0x6b, 0x6f, 0xf1, 0x6b, 0x05, 0x94, 0x60, 0x8f, 0xa0, 0xc2, 0x75, 0x2f, 0x0a, 0xea, + 0x8b, 0x6a, 0x77, 0x54, 0xb7, 0x24, 0x29, 0x60, 0x84, 0x30, 0xca, 0x5e, 0xf2, 0x1d, 0xb1, 0x8f, + 0x61, 0x93, 0xfb, 0x8c, 0x55, 0xf9, 0xf8, 0xf6, 0xe2, 0x14, 0x21, 0xa2, 0x27, 0x33, 0x21, 0x69, + 0xc0, 0x95, 0x70, 0xea, 0x93, 0x3e, 0x26, 0x38, 0x27, 0x61, 0x30, 0x70, 0x38, 0xff, 0x5d, 0xe2, + 0x17, 0xcd, 0x31, 0x38, 0x19, 0xe7, 0x25, 0xc1, 0x74, 0x29, 0x54, 0x41, 0x07, 0xc8, 0xf7, 0x8a, + 0x3c, 0x07, 0x53, 0xd7, 0xb3, 0x79, 0x9e, 0xdf, 0xf9, 0x26, 0x79, 0xee, 0x20, 0x1f, 0xe5, 0xc9, + 0x20, 0x37, 0x9d, 0xba, 0x76, 0xed, 0x1e, 0x8f, 0xbf, 0xc3, 0x6f, 0xf6, 0x16, 0x54, 0x43, 0x67, + 0x38, 0x0d, 0x23, 0xf7, 0xa5, 0x63, 0x46, 0xae, 0x7f, 0x52, 0x7b, 0x87, 0xfa, 0x71, 0x3d, 0x81, + 0xf6, 0x5c, 0xff, 0x04, 0xe7, 0x9d, 0x73, 0x16, 0x3b, 0xa1, 0xcf, 0xe3, 0x8c, 0xdf, 0x55, 0xe7, + 0x5d, 0x93, 0x10, 0x28, 0x17, 0x0c, 0x70, 0x92, 0xef, 0xb9, 0xc9, 0x11, 0xf1, 0xc9, 0x71, 0xff, + 0x6b, 0x4d, 0x8e, 0x1e, 0x4d, 0x8e, 0x3b, 0x50, 0x74, 0xfd, 0xd8, 0x09, 0x5f, 0x5a, 0x5e, 0xed, + 0xc1, 0x82, 0x28, 0x4e, 0x70, 0xec, 0x36, 0x14, 0x22, 0xcf, 0x45, 0xf9, 0x50, 0x7b, 0x7f, 0x81, + 0x4c, 0xa2, 0xd8, 0x5d, 0x28, 0x25, 0x17, 0x61, 0x6a, 0x1f, 0x2c, 0xd0, 0xcd, 0x90, 0xec, 0x3a, + 0xe4, 0x4e, 0x71, 0x42, 0x3d, 0x5c, 0x74, 0x23, 0x23, 0x1c, 0xf7, 0xee, 0x91, 0xeb, 0x79, 0x7c, + 0xef, 0x7e, 0xb4, 0xb0, 0x77, 0x3f, 0x71, 0x3d, 0x8f, 0xef, 0xdd, 0x23, 0xf1, 0x85, 0x3b, 0x1f, + 0x71, 0x60, 0x4b, 0x3e, 0x5c, 0xdc, 0xf9, 0x10, 0xf7, 0x9c, 0xae, 0x0c, 0x95, 0x23, 0xf2, 0x8d, + 0x72, 0x17, 0xef, 0x47, 0x6a, 0x5f, 0xa5, 0x9d, 0xa6, 0x06, 0x44, 0x49, 0x1a, 0x95, 0x61, 0xe1, + 0x19, 0x76, 0xed, 0xb3, 0xda, 0xc7, 0x3c, 0x4a, 0x9d, 0x43, 0x5a, 0xf6, 0x19, 0x7b, 0x1f, 0xd6, + 0x65, 0x18, 0x08, 0x16, 0x17, 0xd5, 0x3e, 0x59, 0xa8, 0x41, 0x9a, 0x80, 0xed, 0x42, 0x65, 0x84, + 0xba, 0xdc, 0x98, 0xab, 0x76, 0xb5, 0xc7, 0x54, 0x91, 0x6d, 0xb9, 0xab, 0xbe, 0x4a, 0xf5, 0x33, + 0x52, 0x5c, 0xec, 0x3e, 0x30, 0x77, 0xc4, 0xc7, 0x13, 0xcd, 0x56, 0xae, 0xbe, 0xd5, 0x3e, 0xa5, + 0xd9, 0xb5, 0x04, 0x43, 0x07, 0x45, 0x8e, 0x6f, 0x9b, 0xe3, 0x48, 0xe8, 0x08, 0xdf, 0xa5, 0x7a, + 0x0a, 0x69, 0x98, 0x5c, 0x98, 0x13, 0x9b, 0x51, 0x19, 0x69, 0xf7, 0x23, 0xae, 0x32, 0x7c, 0x0a, + 0x38, 0x5d, 0x5f, 0xce, 0x58, 0x7f, 0xed, 0x2b, 0x59, 0x91, 0x56, 0xb2, 0x3e, 0x86, 0xaa, 0xed, + 0xd8, 0xd3, 0x09, 0xa9, 0x4b, 0x34, 0x45, 0xbf, 0xa7, 0x0a, 0x3f, 0xd5, 0xc5, 0x65, 0x54, 0x6c, + 0xd5, 0xe1, 0xf5, 0x09, 0x6c, 0x48, 0x5f, 0x54, 0x2c, 0xdc, 0x56, 0xdf, 0x57, 0x8b, 0x4d, 0x5c, + 0x4d, 0xc6, 0xfa, 0x54, 0x7e, 0x52, 0x91, 0x8f, 0x60, 0x9d, 0x76, 0xdd, 0xc8, 0xb7, 0x26, 0xd1, + 0x71, 0x10, 0xd7, 0x7e, 0x5d, 0x55, 0x20, 0x7a, 0x02, 0x6a, 0x54, 0x90, 0x48, 0xa6, 0x70, 0x37, + 0x99, 0xad, 0xd3, 0x61, 0xec, 0xd4, 0x7e, 0xc0, 0x77, 0x93, 0x04, 0xd8, 0x88, 0x1d, 0xf6, 0x08, + 0xc0, 0x9a, 0x4c, 0xbc, 0x73, 0x3e, 0x35, 0x7f, 0x48, 0x53, 0x73, 0x4b, 0x99, 0x9a, 0x75, 0x44, + 0xd2, 0xdc, 0x2c, 0x59, 0xf2, 0x93, 0x3d, 0x84, 0xca, 0x24, 0x88, 0x62, 0xd3, 0x1e, 0x7b, 0xd4, + 0xfe, 0xba, 0xba, 0xb6, 0x0f, 0x82, 0x28, 0xde, 0x1d, 0x7b, 0xb4, 0xa7, 0x4c, 0x92, 0x6f, 0xd6, + 0x86, 0x0b, 0x29, 0xb9, 0x6d, 0xd1, 0xb1, 0x6c, 0x6d, 0x87, 0x4a, 0xbc, 0xa6, 0x94, 0xa8, 0xc8, + 0x6f, 0x11, 0x93, 0xb4, 0x19, 0xcc, 0x83, 0xd0, 0x26, 0xe2, 0x63, 0x90, 0x04, 0xe6, 0x35, 0xb8, + 0x2a, 0x41, 0x50, 0x19, 0x99, 0xf7, 0x18, 0x36, 0x66, 0x54, 0xd8, 0xc0, 0xa8, 0xb6, 0xab, 0xce, + 0x64, 0x25, 0x7c, 0x76, 0x5d, 0x32, 0x22, 0x2c, 0xa2, 0xbe, 0x0b, 0x3c, 0x6f, 0x3a, 0x11, 0xa2, + 0xb4, 0xd6, 0x14, 0x7d, 0x47, 0x40, 0x2e, 0x25, 0xf5, 0x7f, 0x96, 0x87, 0xa2, 0xb4, 0x17, 0x58, + 0x19, 0x0a, 0x87, 0x9d, 0x67, 0x9d, 0xee, 0x8b, 0x0e, 0xbf, 0xe9, 0x53, 0xef, 0xf5, 0x9a, 0x46, + 0x5f, 0xb3, 0x59, 0x15, 0x80, 0x62, 0xf9, 0xcd, 0x5e, 0xa3, 0xde, 0xe1, 0x37, 0x7f, 0xe8, 0x06, + 0x01, 0x4f, 0xaf, 0xb2, 0x4d, 0x58, 0x7f, 0x72, 0xd8, 0xa1, 0xf8, 0x28, 0x0e, 0xca, 0x22, 0xa8, + 0xf9, 0x19, 0x3f, 0x15, 0xe2, 0xa0, 0x1c, 0x82, 0xf6, 0xeb, 0xfd, 0xa6, 0xd1, 0x92, 0xa0, 0x3c, + 0x85, 0x5a, 0x75, 0x0f, 0x8d, 0x86, 0xc8, 0x69, 0x8d, 0x5d, 0x84, 0xcd, 0x84, 0x4d, 0x66, 0xa9, + 0x15, 0xb0, 0x66, 0x07, 0x46, 0xf7, 0x47, 0xcd, 0x46, 0x5f, 0x03, 0x3a, 0x62, 0x7a, 0xfa, 0x54, + 0x2b, 0xb3, 0x0a, 0x14, 0x77, 0x5b, 0xbd, 0x7e, 0xab, 0xd3, 0xe8, 0x6b, 0x15, 0xac, 0xf0, 0x93, + 0x56, 0xbb, 0xdf, 0x34, 0xb4, 0x75, 0x56, 0x84, 0xdc, 0x8f, 0xba, 0xad, 0x8e, 0x56, 0xa5, 0x3b, + 0x0d, 0xf5, 0xfd, 0x83, 0x76, 0x53, 0xdb, 0x40, 0x68, 0xaf, 0x6b, 0xf4, 0x35, 0x0d, 0xa1, 0x2f, + 0x5a, 0x9d, 0xdd, 0xee, 0x0b, 0x6d, 0x93, 0x95, 0x20, 0x7f, 0xd8, 0xc1, 0x62, 0x18, 0x5b, 0x87, + 0x12, 0x7d, 0x9a, 0xf5, 0x76, 0x5b, 0xbb, 0xa0, 0x9c, 0x4b, 0x6d, 0x21, 0x8a, 0x4e, 0xb9, 0x7a, + 0x58, 0x87, 0x8b, 0xd8, 0x96, 0x24, 0x49, 0xd4, 0x97, 0x30, 0x9f, 0xfd, 0x56, 0xe7, 0xb0, 0xa7, + 0x5d, 0x46, 0x62, 0xfa, 0x24, 0x4c, 0x0d, 0xf3, 0x69, 0x75, 0xa8, 0x2b, 0xaf, 0xe3, 0xf7, 0x6e, + 0xb3, 0xdd, 0xec, 0x37, 0xb5, 0x1b, 0xd8, 0x2a, 0xa3, 0x79, 0xd0, 0xae, 0x37, 0x9a, 0xda, 0x36, + 0x26, 0xda, 0xdd, 0xc6, 0x33, 0xb3, 0x7b, 0xa0, 0xdd, 0x64, 0x5b, 0xa0, 0x75, 0x3b, 0xe6, 0xee, + 0xe1, 0x41, 0xbb, 0xd5, 0xa8, 0xf7, 0x9b, 0xe6, 0xb3, 0xe6, 0xe7, 0x9a, 0x8e, 0xdd, 0x7e, 0x60, + 0x34, 0x4d, 0x91, 0xd7, 0x2d, 0xa6, 0x41, 0xe5, 0xc9, 0xe1, 0x4f, 0x7e, 0xf2, 0xb9, 0x29, 0xda, + 0xfd, 0x16, 0x56, 0x6b, 0x46, 0x61, 0x1e, 0x3e, 0xd3, 0xee, 0xcc, 0x81, 0x7a, 0xcf, 0xb4, 0xb7, + 0xb1, 0xdf, 0xe4, 0x40, 0x68, 0x77, 0x91, 0xc0, 0x68, 0x36, 0x0e, 0x8d, 0x5e, 0xeb, 0x79, 0xd3, + 0x6c, 0xf4, 0x9b, 0xda, 0x77, 0xa8, 0xa3, 0x5a, 0x9d, 0x67, 0xda, 0x3d, 0x6c, 0x09, 0x7e, 0xf1, + 0xe1, 0x79, 0x87, 0x31, 0xa8, 0xce, 0x68, 0x09, 0xf6, 0x2e, 0x92, 0xec, 0x18, 0xdd, 0xfa, 0x6e, + 0xa3, 0xde, 0xeb, 0x6b, 0xef, 0x61, 0x37, 0xf4, 0x0e, 0xda, 0xad, 0xbe, 0x76, 0x1f, 0xdb, 0xfa, + 0xb4, 0xde, 0xdf, 0x6b, 0x1a, 0xda, 0x03, 0x1c, 0xe9, 0x7e, 0x6b, 0xbf, 0x69, 0x8a, 0x6e, 0x7f, + 0x88, 0x65, 0x3c, 0x69, 0xb5, 0xdb, 0xda, 0x23, 0x3a, 0x7a, 0xa9, 0x1b, 0xfd, 0x16, 0x8d, 0xf5, + 0x87, 0x98, 0x41, 0xfd, 0xe0, 0xa0, 0xfd, 0xb9, 0xf6, 0x11, 0x36, 0x70, 0xff, 0xb0, 0xdd, 0x6f, + 0x99, 0x87, 0x07, 0xbb, 0xf5, 0x7e, 0x53, 0xfb, 0x98, 0x26, 0x42, 0xb7, 0xd7, 0xdf, 0xdd, 0x6f, + 0x6b, 0x9f, 0x50, 0x9e, 0x34, 0x0d, 0x1b, 0xed, 0x6e, 0xa7, 0xa9, 0x3d, 0xd6, 0x7f, 0x0b, 0x8a, + 0xd2, 0x86, 0xc4, 0x6c, 0x5a, 0x9d, 0x4e, 0xd3, 0xd0, 0x56, 0xb0, 0xa8, 0x76, 0xf3, 0x49, 0x5f, + 0xcb, 0xd0, 0x39, 0x54, 0xeb, 0xe9, 0x5e, 0x5f, 0x5b, 0xc5, 0xcf, 0xee, 0x21, 0xf6, 0x5a, 0x96, + 0x9a, 0xdb, 0xdc, 0x6f, 0x69, 0x39, 0xfc, 0xaa, 0x77, 0xfa, 0x2d, 0x2d, 0x4f, 0xf3, 0xa6, 0xd5, + 0x79, 0xda, 0x6e, 0x6a, 0x6b, 0x08, 0xdd, 0xaf, 0x1b, 0xcf, 0xb4, 0x02, 0xcf, 0x74, 0xb7, 0xf9, + 0x99, 0x56, 0x64, 0x6b, 0xb0, 0xda, 0x7e, 0xa8, 0x95, 0x10, 0xb4, 0xdb, 0xdc, 0x3d, 0x3c, 0xd0, + 0x40, 0xbf, 0x0b, 0x85, 0xfa, 0xd1, 0xd1, 0x3e, 0x9a, 0xe8, 0xd8, 0xba, 0xc3, 0x76, 0x9b, 0xaf, + 0xa3, 0x9d, 0x6e, 0xbf, 0xdf, 0xdd, 0xd7, 0x32, 0x38, 0x73, 0xfb, 0xdd, 0x03, 0x6d, 0x55, 0x6f, + 0x41, 0x51, 0x6e, 0x98, 0xca, 0x3d, 0x9d, 0x22, 0xe4, 0x0e, 0x8c, 0xe6, 0x73, 0x7e, 0x78, 0xda, + 0x69, 0x7e, 0x86, 0xd5, 0xc4, 0x2f, 0xcc, 0x28, 0x8b, 0x05, 0xf1, 0x0b, 0x35, 0x74, 0x51, 0xa7, + 0xdd, 0xea, 0x34, 0xeb, 0x86, 0x96, 0xd7, 0x3f, 0x4a, 0x9d, 0x4b, 0x09, 0xd9, 0x82, 0xc5, 0xd7, + 0x5b, 0xa2, 0xf8, 0xd6, 0xd3, 0x4e, 0xd7, 0x68, 0xf2, 0x9b, 0x3f, 0xa2, 0x23, 0x57, 0xf5, 0x77, + 0xa0, 0x94, 0xc8, 0x45, 0x9c, 0x58, 0x0d, 0xa3, 0xdb, 0xeb, 0xf1, 0x7e, 0x5f, 0xc1, 0x34, 0xf5, + 0x0d, 0x4f, 0x67, 0xf4, 0x1e, 0x6c, 0x4a, 0x91, 0x4c, 0x41, 0xd1, 0x64, 0x5b, 0x6c, 0x41, 0xbe, + 0xed, 0xbc, 0x74, 0x3c, 0x19, 0xdd, 0x4b, 0x09, 0x84, 0x76, 0x07, 0x5f, 0xb4, 0x92, 0xcb, 0x99, + 0x94, 0x40, 0x1d, 0xac, 0xa3, 0xdc, 0x0f, 0xa5, 0xa8, 0xf2, 0xdf, 0xcd, 0x40, 0x31, 0x11, 0xf4, + 0xb7, 0x61, 0xb5, 0xdf, 0x13, 0x7e, 0xed, 0xad, 0xfb, 0xb3, 0x4b, 0xef, 0x7d, 0xf9, 0x65, 0xac, + 0xf6, 0x7b, 0xec, 0x5d, 0x58, 0xe3, 0xd7, 0xd9, 0xc4, 0x81, 0xc4, 0x56, 0x7a, 0xf3, 0xe8, 0x13, + 0xce, 0x10, 0x34, 0xec, 0x23, 0x28, 0x25, 0xb5, 0x15, 0xfe, 0x8d, 0xcb, 0x69, 0x86, 0x04, 0x6d, + 0xcc, 0x28, 0xf5, 0x36, 0x54, 0xd3, 0x19, 0xb2, 0xeb, 0x00, 0x3c, 0x4b, 0xc5, 0xaf, 0xa3, 0x40, + 0xd8, 0x55, 0x90, 0xb7, 0xec, 0x76, 0xa9, 0x62, 0xeb, 0xc9, 0xad, 0xbb, 0x5d, 0xfd, 0xaf, 0x67, + 0x01, 0x66, 0xaa, 0x22, 0x76, 0x44, 0xe2, 0xb5, 0xc9, 0x8b, 0x23, 0xcd, 0x37, 0xa0, 0xe4, 0x05, + 0x96, 0xad, 0xde, 0x79, 0x2f, 0x22, 0x80, 0x86, 0x46, 0xbd, 0x71, 0x52, 0xe2, 0xf1, 0x04, 0xec, + 0x12, 0xac, 0x8d, 0x82, 0x70, 0x6c, 0xc5, 0x22, 0x94, 0x5b, 0xa4, 0x50, 0xe2, 0xf3, 0x63, 0x36, + 0x54, 0x98, 0x7d, 0x8a, 0xe6, 0xc6, 0x31, 0xa8, 0x08, 0x60, 0x1b, 0x61, 0x68, 0x18, 0x39, 0xfe, + 0xd0, 0x0b, 0x22, 0xc7, 0x36, 0x07, 0x3c, 0x44, 0xa3, 0x62, 0x80, 0x04, 0xed, 0x9c, 0xf3, 0xd6, + 0x86, 0x63, 0xd7, 0xb7, 0x62, 0xe1, 0x7c, 0xa6, 0xd6, 0x4a, 0x08, 0x56, 0xf7, 0x8b, 0x28, 0x10, + 0x4e, 0x1c, 0x7e, 0x62, 0x57, 0x44, 0x00, 0x55, 0xf7, 0x4d, 0x00, 0x27, 0x1a, 0x5a, 0x13, 0x9e, + 0x79, 0x89, 0x32, 0x2f, 0x09, 0xc8, 0xce, 0x39, 0x6b, 0x43, 0xb5, 0x3f, 0xc0, 0x1d, 0x2a, 0x40, + 0x7b, 0xbc, 0x11, 0x78, 0xc2, 0xbd, 0x72, 0x7b, 0x5e, 0xa7, 0xbe, 0x9f, 0x26, 0xe3, 0x47, 0x8b, + 0x73, 0xbc, 0x57, 0xeb, 0x70, 0x61, 0x09, 0xd9, 0x37, 0x8a, 0xb1, 0xf2, 0xe4, 0xe8, 0xd4, 0xe3, + 0x98, 0x6e, 0x4f, 0x24, 0x9b, 0x71, 0x46, 0xc6, 0x80, 0xf3, 0x7d, 0xf8, 0x0d, 0x8a, 0xa2, 0x10, + 0xe1, 0x79, 0x62, 0x90, 0x92, 0xb0, 0xbb, 0x3b, 0xb0, 0x81, 0xc8, 0x91, 0xeb, 0x78, 0xb6, 0x20, + 0xe1, 0xc1, 0xff, 0xeb, 0xc3, 0xc0, 0x7b, 0x82, 0x50, 0xa2, 0xd3, 0xff, 0x6a, 0x1e, 0x60, 0x66, + 0x86, 0xa5, 0x4e, 0x37, 0x33, 0xe9, 0xd3, 0xcd, 0x87, 0x70, 0x49, 0x5c, 0x0d, 0x49, 0x8e, 0x08, + 0x5d, 0xdf, 0x1c, 0x58, 0xf2, 0x20, 0x99, 0x09, 0x2c, 0x3f, 0x25, 0x6c, 0xf9, 0x3b, 0x16, 0x2a, + 0x75, 0x1b, 0x2a, 0x4f, 0x7c, 0x3e, 0x49, 0x1f, 0x84, 0xab, 0xaa, 0xc2, 0x8c, 0xbd, 0x7f, 0x3e, + 0x61, 0xef, 0xc3, 0xc5, 0xd0, 0x19, 0x85, 0x4e, 0x74, 0x6c, 0xc6, 0x91, 0x5a, 0x18, 0x8f, 0xd7, + 0xda, 0x14, 0xc8, 0x7e, 0x94, 0x94, 0xf5, 0x3e, 0x5c, 0x14, 0x06, 0xda, 0x5c, 0xf5, 0xf8, 0x1d, + 0xe2, 0x4d, 0x8e, 0x54, 0x6b, 0xf7, 0x26, 0x80, 0xb0, 0x4d, 0xe5, 0xcb, 0x11, 0x45, 0xa3, 0xc4, + 0xed, 0x50, 0x71, 0xd3, 0x92, 0x0c, 0x4c, 0x71, 0xf4, 0xc3, 0x13, 0x4c, 0x87, 0x1c, 0x8a, 0x53, + 0x3a, 0xa6, 0xa8, 0x3e, 0xac, 0xde, 0xa7, 0x97, 0x31, 0xe8, 0xe6, 0x6b, 0x60, 0x3b, 0x06, 0xe1, + 0xd8, 0x7b, 0x70, 0x41, 0x6d, 0xb6, 0xbc, 0xf6, 0x5d, 0xa6, 0x8a, 0x68, 0xb3, 0x86, 0x1a, 0xfc, + 0x02, 0xf8, 0x3b, 0xc0, 0x94, 0x9a, 0x4b, 0xea, 0x0a, 0x51, 0x6f, 0x24, 0xd5, 0x16, 0xc4, 0x6f, + 0x03, 0x55, 0x91, 0x7b, 0x85, 0xd7, 0x17, 0xad, 0x31, 0x44, 0x92, 0x07, 0xf9, 0x7d, 0xb8, 0x38, + 0x6b, 0x9d, 0x69, 0xc5, 0x66, 0x7c, 0xec, 0x98, 0x8e, 0x6f, 0xd3, 0x7d, 0x9e, 0xa2, 0xb1, 0x99, + 0x34, 0xb4, 0x1e, 0xf7, 0x8f, 0x1d, 0xb4, 0xa7, 0x14, 0xff, 0xd8, 0xc6, 0x57, 0xfb, 0xc7, 0x3e, + 0x86, 0x5a, 0xea, 0xc8, 0x53, 0xed, 0x6e, 0x7e, 0x1f, 0x6e, 0x4b, 0x3d, 0xe8, 0x4c, 0x7a, 0xfc, + 0x1e, 0x6c, 0x1e, 0x5b, 0x91, 0x99, 0xe2, 0x25, 0xb7, 0x5d, 0xd1, 0xd8, 0x38, 0xb6, 0xa2, 0x03, + 0x85, 0x47, 0xff, 0xfd, 0x0c, 0x54, 0xd3, 0x86, 0x29, 0xbf, 0x0f, 0xe1, 0x4d, 0xc7, 0x3e, 0x8f, + 0x6e, 0xc8, 0x1b, 0x32, 0x89, 0x6b, 0x61, 0x72, 0x62, 0xf2, 0x94, 0x5c, 0x0b, 0x93, 0x93, 0x06, + 0xa5, 0xd9, 0x77, 0xa0, 0x30, 0x39, 0xe1, 0xc2, 0xe1, 0x55, 0xb3, 0x6f, 0x6d, 0xc2, 0xc3, 0x4a, + 0xbf, 0x03, 0x85, 0xa9, 0x20, 0xcd, 0xbd, 0x8a, 0x74, 0x4a, 0xa4, 0xfa, 0x3f, 0x5f, 0x85, 0x8a, + 0xea, 0x92, 0xf9, 0x3a, 0x27, 0xa1, 0xdf, 0xe8, 0x04, 0x7b, 0x9b, 0xa2, 0xcc, 0x4c, 0x8a, 0x61, + 0xc5, 0x7e, 0xe2, 0xc7, 0xa0, 0x70, 0x6c, 0x45, 0xf5, 0x69, 0x1c, 0x34, 0x02, 0x7e, 0xfa, 0x12, + 0x78, 0x32, 0xb6, 0x95, 0xaf, 0x0c, 0x94, 0x09, 0x22, 0xac, 0xf5, 0x7d, 0x11, 0x3a, 0x4f, 0x97, + 0x65, 0x28, 0x7a, 0x22, 0xbf, 0x30, 0x5f, 0x2a, 0xf2, 0xae, 0x0c, 0x05, 0x46, 0x3c, 0x84, 0x8d, + 0x59, 0xa0, 0xb2, 0x0c, 0xb8, 0x98, 0x67, 0x59, 0x4f, 0xa2, 0x94, 0xc5, 0xed, 0xd8, 0x75, 0x37, + 0x32, 0x03, 0xcf, 0x96, 0x37, 0x22, 0x0a, 0xd2, 0xd5, 0xdd, 0xf5, 0x6c, 0x71, 0x5f, 0x8a, 0xd3, + 0xf8, 0xce, 0xa9, 0xa4, 0x49, 0xdc, 0xe1, 0x1d, 0xe7, 0x54, 0xdc, 0x8c, 0xf8, 0xa3, 0x0c, 0x6c, + 0x2e, 0xb8, 0x50, 0x50, 0x72, 0xce, 0x5e, 0x64, 0xc1, 0x4f, 0x76, 0x13, 0x2a, 0x63, 0x2b, 0x1e, + 0x1e, 0x9b, 0x93, 0xd0, 0x19, 0xb9, 0x67, 0xf2, 0x59, 0x19, 0x82, 0x1d, 0x10, 0x88, 0x82, 0x50, + 0x26, 0x13, 0x72, 0x1c, 0x8d, 0xdd, 0x58, 0x08, 0x3e, 0x20, 0x50, 0x9b, 0x5c, 0xcb, 0x32, 0x40, + 0x2d, 0xf7, 0x8a, 0x00, 0xb5, 0xab, 0x50, 0xf2, 0x83, 0xd8, 0x0c, 0x7c, 0x73, 0x72, 0x22, 0xae, + 0x53, 0x17, 0xfc, 0x20, 0xee, 0xfa, 0x07, 0x27, 0xfa, 0x35, 0x58, 0x6b, 0x25, 0x6e, 0x9c, 0x24, + 0xc2, 0x22, 0x2b, 0x5e, 0x5c, 0x08, 0xa0, 0xd4, 0xa0, 0xd7, 0x1b, 0xf6, 0xad, 0x09, 0xbb, 0x07, + 0xd9, 0xb1, 0x35, 0x11, 0x11, 0x18, 0xb5, 0xe4, 0x2c, 0x85, 0x63, 0xef, 0xef, 0x5b, 0x13, 0xbe, + 0x89, 0x20, 0xd1, 0xd5, 0x8f, 0xa1, 0x28, 0x01, 0xdf, 0x68, 0xbb, 0xf8, 0x57, 0xab, 0x50, 0xda, + 0x55, 0xdd, 0xb6, 0x68, 0xd1, 0xc6, 0xe1, 0xd4, 0x47, 0xdd, 0x4b, 0xde, 0x43, 0x1f, 0x5a, 0x7e, + 0x5f, 0x80, 0xe4, 0x34, 0x5d, 0xfd, 0x8a, 0x69, 0x7a, 0x0d, 0x20, 0x24, 0x2f, 0x06, 0x39, 0x32, + 0xb2, 0x49, 0xb4, 0x5f, 0xcb, 0x6e, 0xd9, 0x67, 0xcb, 0x8f, 0xf3, 0x73, 0x5f, 0xff, 0x38, 0x3f, + 0xbf, 0xf4, 0x38, 0xff, 0xce, 0x6c, 0xab, 0xc0, 0xe9, 0x8a, 0x05, 0x97, 0xf8, 0x86, 0x35, 0x49, + 0x82, 0xfe, 0xb1, 0xf4, 0xef, 0x42, 0x55, 0xb6, 0x4e, 0xe4, 0x07, 0xa9, 0x7b, 0x06, 0x02, 0xc7, + 0x1d, 0xc1, 0xeb, 0xb1, 0x9a, 0x4c, 0x2f, 0xbf, 0xf2, 0x6b, 0xe2, 0x1c, 0xfe, 0x20, 0x03, 0x4c, + 0x58, 0xdd, 0x4f, 0xa6, 0x9e, 0xd7, 0x77, 0xce, 0x68, 0x95, 0xdf, 0x83, 0x4d, 0xe1, 0xc5, 0x55, + 0xa2, 0x84, 0xc4, 0xc1, 0x1a, 0x47, 0xcc, 0x0e, 0xd6, 0x96, 0x5d, 0x05, 0x5b, 0x5d, 0x7a, 0x15, + 0x6c, 0xf9, 0x15, 0xb3, 0x1b, 0x50, 0x56, 0x2f, 0x52, 0x71, 0xd5, 0x0a, 0xac, 0xd9, 0x1d, 0xaa, + 0x7f, 0xb3, 0x0a, 0x30, 0xf3, 0x0c, 0xfc, 0xaa, 0x63, 0x31, 0x96, 0x0c, 0x49, 0x76, 0xd9, 0x90, + 0xdc, 0x05, 0x4d, 0xa5, 0x53, 0x6e, 0xf4, 0x55, 0x67, 0x84, 0x52, 0x65, 0x71, 0x23, 0xf5, 0xd6, + 0x15, 0x05, 0x5e, 0x89, 0xf3, 0x66, 0x11, 0x95, 0x45, 0xf2, 0x54, 0xec, 0xc6, 0x45, 0x37, 0xe2, + 0xf2, 0x95, 0x7d, 0x0a, 0x57, 0x12, 0x4e, 0xf3, 0xd4, 0x8d, 0x8f, 0x83, 0x69, 0x2c, 0xbc, 0x08, + 0x91, 0x90, 0x38, 0x97, 0x64, 0x4e, 0x2f, 0x38, 0x9a, 0x4b, 0x91, 0x08, 0x95, 0xee, 0xd1, 0xd4, + 0xf3, 0xcc, 0xd8, 0x39, 0x8b, 0xc5, 0xd5, 0xf6, 0x5a, 0xca, 0xa9, 0xa2, 0x0c, 0xaf, 0x51, 0x1c, + 0x89, 0x84, 0xfe, 0x0f, 0xb2, 0x90, 0xff, 0xf1, 0xd4, 0x09, 0xcf, 0xd9, 0xc7, 0x50, 0x8a, 0xe2, + 0x71, 0xac, 0x1e, 0x6e, 0x5e, 0xe1, 0x19, 0x10, 0x9e, 0xce, 0x26, 0x9d, 0xb1, 0xe3, 0xc7, 0xdc, + 0xdb, 0x88, 0xb4, 0xb4, 0x99, 0x6c, 0x41, 0x3e, 0x8a, 0x9d, 0x49, 0x24, 0xa2, 0xa8, 0x78, 0x82, + 0x6d, 0x43, 0xde, 0x0f, 0x6c, 0x27, 0x4a, 0xc7, 0x4a, 0x75, 0x50, 0x7b, 0xe0, 0x08, 0xa6, 0xc3, + 0x5a, 0x32, 0xe2, 0x0b, 0x07, 0x8c, 0x1c, 0x43, 0xd1, 0xef, 0x8e, 0x65, 0xbb, 0xfe, 0x91, 0xbc, + 0x21, 0x99, 0xa4, 0x71, 0x9b, 0x24, 0x65, 0xdd, 0x3a, 0x92, 0xd7, 0x95, 0x45, 0x92, 0x6d, 0x43, + 0x19, 0x3f, 0x5f, 0x84, 0x6e, 0xec, 0xf4, 0x1e, 0x49, 0x49, 0xad, 0x80, 0x50, 0xd5, 0xb6, 0x9d, + 0xd8, 0x19, 0xc6, 0xbd, 0x2f, 0x45, 0x00, 0x14, 0xc5, 0xc9, 0x48, 0x08, 0xfb, 0x2e, 0xb0, 0x81, + 0x35, 0x3c, 0x39, 0x0a, 0x83, 0xa9, 0x6f, 0x9b, 0x5f, 0x4e, 0x9d, 0xd0, 0x75, 0x64, 0xc0, 0x53, + 0x59, 0xe9, 0x14, 0x63, 0x73, 0x46, 0xf6, 0x63, 0x4e, 0xa5, 0xdb, 0xb0, 0x9e, 0xea, 0xaa, 0x05, + 0xef, 0x4e, 0xaf, 0xd9, 0x6e, 0x36, 0xfa, 0xdc, 0x2c, 0x14, 0x2e, 0x85, 0x55, 0xd5, 0x25, 0x91, + 0x55, 0x7c, 0x15, 0x39, 0xc5, 0x76, 0xcc, 0x93, 0xa7, 0xa3, 0x69, 0x3c, 0x6d, 0x6a, 0x6b, 0xfa, + 0x1f, 0xae, 0xc2, 0x66, 0x3f, 0xb4, 0xfc, 0xc8, 0xe2, 0x9a, 0x84, 0x1f, 0x87, 0x81, 0xc7, 0xbe, + 0x0b, 0xc5, 0x78, 0xe8, 0xa9, 0x43, 0x78, 0x43, 0x0a, 0x8c, 0x39, 0xd2, 0xfb, 0xfd, 0x21, 0x77, + 0x1b, 0x17, 0x62, 0xfe, 0xc1, 0xde, 0x83, 0xfc, 0xc0, 0x39, 0x72, 0x7d, 0x21, 0x33, 0x2f, 0xce, + 0x33, 0xee, 0x20, 0x72, 0x6f, 0xc5, 0xe0, 0x54, 0xec, 0x7d, 0x58, 0x1b, 0x06, 0x63, 0xb9, 0xf1, + 0xcc, 0x6e, 0xda, 0x28, 0x05, 0x21, 0x76, 0x6f, 0xc5, 0x10, 0x74, 0xec, 0x63, 0x28, 0x86, 0x81, + 0xe7, 0x61, 0x8f, 0x89, 0x2d, 0xa9, 0x36, 0xcf, 0x63, 0x08, 0xfc, 0xde, 0x8a, 0x91, 0xd0, 0xea, + 0xf7, 0xa1, 0x20, 0x2a, 0x8b, 0x1d, 0xb0, 0xd3, 0x7c, 0xda, 0x12, 0x1d, 0xd9, 0xe8, 0xee, 0xef, + 0xb7, 0xfa, 0xfc, 0x1a, 0xa1, 0xd1, 0x6d, 0xb7, 0x77, 0xea, 0x8d, 0x67, 0xda, 0xea, 0x4e, 0x11, + 0xd6, 0xb8, 0x83, 0x50, 0xff, 0xed, 0x0c, 0x6c, 0xcc, 0x35, 0x80, 0x3d, 0x86, 0xdc, 0x18, 0x35, + 0x5b, 0xde, 0x3d, 0xb7, 0x97, 0xb6, 0x52, 0x49, 0x73, 0x7d, 0x17, 0x39, 0xf4, 0x4f, 0xa1, 0x9a, + 0x86, 0x2b, 0x1e, 0x84, 0x75, 0x28, 0x19, 0xcd, 0xfa, 0xae, 0xd9, 0xed, 0xa0, 0xdd, 0x8e, 0x76, + 0x3c, 0x25, 0x5f, 0x18, 0x2d, 0x32, 0xfa, 0x7f, 0x03, 0xb4, 0xf9, 0x8e, 0x61, 0x4f, 0xd1, 0x76, + 0x19, 0x4f, 0x3c, 0x87, 0x54, 0x44, 0x65, 0xc8, 0xae, 0x2f, 0xe9, 0x49, 0x41, 0x46, 0x23, 0x56, + 0x1d, 0xa6, 0xd2, 0xfa, 0x6f, 0x02, 0x5b, 0xec, 0xc1, 0x5f, 0x5d, 0xf6, 0xff, 0x3d, 0x03, 0xb9, + 0x03, 0xcf, 0xf2, 0xd9, 0x2d, 0xc8, 0xd3, 0xf3, 0x17, 0x42, 0xf2, 0xaa, 0xeb, 0x00, 0xa7, 0x05, + 0xe1, 0xd8, 0x3b, 0x90, 0x8d, 0x87, 0xf2, 0xf6, 0xe2, 0xe5, 0x57, 0x4c, 0xbe, 0xbd, 0x15, 0x03, + 0xa9, 0xd8, 0x5d, 0xc8, 0xda, 0xb6, 0x8c, 0x1a, 0x16, 0x3e, 0x05, 0xb4, 0x28, 0x77, 0x9d, 0x91, + 0xeb, 0xbb, 0xe2, 0xb9, 0x0e, 0x24, 0x61, 0x6f, 0x41, 0xd6, 0x1e, 0x7a, 0xe9, 0x10, 0x70, 0x6e, + 0x7b, 0x26, 0x19, 0xda, 0x43, 0x0f, 0x35, 0xb0, 0x38, 0x3c, 0x37, 0xc3, 0xa9, 0x4f, 0x61, 0x50, + 0x91, 0xb0, 0x8a, 0xca, 0xa8, 0x7f, 0x4c, 0x29, 0x96, 0x2a, 0x12, 0xd7, 0xa0, 0x26, 0xa1, 0x33, + 0xb1, 0xc2, 0xc4, 0x1e, 0x72, 0xa3, 0x03, 0x0e, 0xd8, 0x59, 0x03, 0x7a, 0x3b, 0x50, 0x7f, 0x97, + 0xde, 0x66, 0x40, 0xc5, 0x5a, 0x97, 0x5f, 0x4b, 0x1e, 0xa0, 0x12, 0x18, 0xfd, 0xcf, 0xb3, 0x50, + 0x56, 0xea, 0xc3, 0x3e, 0x84, 0xa2, 0x9d, 0x5e, 0x88, 0x57, 0x16, 0x2a, 0x7d, 0x7f, 0x57, 0x2e, + 0x41, 0x5b, 0x4c, 0x6f, 0x3a, 0x93, 0x88, 0xcd, 0x97, 0x56, 0xe8, 0xf2, 0x17, 0x79, 0x56, 0xd5, + 0xc3, 0x81, 0x9e, 0x13, 0x3f, 0x97, 0x98, 0xbd, 0x15, 0xa3, 0x12, 0x29, 0x69, 0xd2, 0xfe, 0x45, + 0x93, 0xb2, 0xa9, 0x97, 0x8d, 0x38, 0x70, 0x6f, 0xc5, 0x90, 0x78, 0x24, 0x75, 0xce, 0x9c, 0xe1, + 0x34, 0x96, 0xda, 0xff, 0xba, 0x6c, 0x10, 0x01, 0xe9, 0x11, 0x35, 0xfe, 0xc9, 0x1e, 0xa2, 0x9c, + 0xb4, 0x3c, 0x2f, 0x20, 0x35, 0x2b, 0xaf, 0xba, 0xea, 0x77, 0x13, 0x38, 0x7f, 0xb4, 0x4d, 0xa6, + 0xd8, 0x1d, 0xc8, 0x07, 0xf1, 0xb1, 0x23, 0x75, 0x6a, 0xf9, 0xca, 0x03, 0x82, 0x76, 0x1b, 0x6d, + 0x9c, 0x29, 0x84, 0xd6, 0x7f, 0x9e, 0x81, 0x82, 0xe8, 0x01, 0xb6, 0x09, 0xeb, 0xbd, 0x66, 0xdf, + 0x7c, 0x5e, 0x37, 0x5a, 0xf5, 0x9d, 0x76, 0x53, 0x44, 0xae, 0x3f, 0x35, 0xea, 0x1d, 0x21, 0x27, + 0x8d, 0xe6, 0xf3, 0xee, 0xb3, 0x26, 0x77, 0xcb, 0xed, 0x36, 0x3b, 0x9f, 0x6b, 0x59, 0xee, 0x9a, + 0x6e, 0x1e, 0xd4, 0x0d, 0x94, 0x92, 0x65, 0x28, 0x34, 0x3f, 0x6b, 0x36, 0x0e, 0x49, 0x4c, 0x56, + 0x01, 0x76, 0x9b, 0xf5, 0x76, 0xbb, 0xdb, 0x40, 0xb1, 0xb9, 0xc6, 0x18, 0x54, 0x1b, 0x46, 0xb3, + 0xde, 0x6f, 0x9a, 0xf5, 0x46, 0xa3, 0x7b, 0xd8, 0xe9, 0x6b, 0x05, 0x2c, 0xb1, 0xde, 0xee, 0x37, + 0x8d, 0x04, 0x44, 0x2f, 0xef, 0xec, 0x1a, 0xdd, 0x83, 0x04, 0x52, 0xda, 0x29, 0xa1, 0x25, 0x46, + 0x63, 0xa5, 0xff, 0xa3, 0x4d, 0xa8, 0xa6, 0xa7, 0x26, 0xfb, 0x04, 0x8a, 0xb6, 0x9d, 0x1a, 0xe3, + 0x6b, 0xcb, 0xa6, 0xf0, 0xfd, 0x5d, 0x5b, 0x0e, 0x33, 0xff, 0x60, 0x37, 0xe5, 0x42, 0x5a, 0x5d, + 0x58, 0x48, 0x72, 0x19, 0xfd, 0x00, 0x36, 0xc4, 0x2b, 0x09, 0xb6, 0x15, 0x5b, 0x03, 0x2b, 0x72, + 0xd2, 0xab, 0xa4, 0x41, 0xc8, 0x5d, 0x81, 0xdb, 0x5b, 0x31, 0xaa, 0xc3, 0x14, 0x84, 0x7d, 0x0f, + 0xaa, 0x16, 0x19, 0xdb, 0x09, 0x7f, 0x4e, 0x55, 0x20, 0xeb, 0x88, 0x53, 0xd8, 0xd7, 0x2d, 0x15, + 0x80, 0x13, 0xd1, 0x0e, 0x83, 0xc9, 0x8c, 0x39, 0x9f, 0x3a, 0xa5, 0x0a, 0x83, 0x89, 0xc2, 0x5b, + 0xb1, 0x95, 0x34, 0xfb, 0x18, 0x2a, 0xa2, 0xe6, 0x33, 0x87, 0x43, 0xb2, 0x64, 0x79, 0xb5, 0x49, + 0x21, 0xdc, 0x5b, 0x31, 0xca, 0xc3, 0x59, 0x92, 0x3d, 0x42, 0x2d, 0x70, 0xa6, 0x3e, 0x17, 0xd4, + 0xb9, 0x46, 0xb5, 0x95, 0x5c, 0x60, 0x25, 0x29, 0xf6, 0x3e, 0x00, 0xd5, 0x93, 0xf3, 0x14, 0x53, + 0xf1, 0x1e, 0x61, 0x30, 0x91, 0x2c, 0x25, 0x5b, 0x26, 0x94, 0xea, 0x71, 0x77, 0x51, 0x69, 0xb1, + 0x7a, 0xe4, 0x32, 0x9a, 0x55, 0x8f, 0x7b, 0x9a, 0x92, 0xea, 0x71, 0x36, 0x58, 0xa8, 0x9e, 0xe4, + 0xe2, 0xd5, 0xe3, 0x4c, 0xb2, 0x7a, 0x9c, 0xa7, 0x3c, 0x5f, 0x3d, 0xc9, 0x42, 0xd5, 0xe3, 0x1c, + 0xdf, 0x5b, 0xd0, 0xfb, 0x2b, 0xaf, 0xd4, 0xfb, 0x71, 0xd8, 0xd2, 0x9a, 0xff, 0xf7, 0xa0, 0x1a, + 0x1d, 0x07, 0xa7, 0x8a, 0x00, 0x59, 0x57, 0xb9, 0x7b, 0xc7, 0xc1, 0xa9, 0x2a, 0x41, 0xd6, 0x23, + 0x15, 0x80, 0xb5, 0xe5, 0x4d, 0xa4, 0xeb, 0xd9, 0x55, 0xb5, 0xb6, 0xd4, 0xc2, 0xe7, 0xae, 0x73, + 0x8a, 0xb5, 0xb5, 0x64, 0x02, 0x3b, 0x65, 0xe6, 0x7c, 0x89, 0x84, 0x3b, 0x25, 0x15, 0xf5, 0x20, + 0x4a, 0x82, 0xc4, 0x0d, 0x13, 0xe1, 0xdc, 0x9a, 0xfa, 0x2a, 0x9b, 0xa6, 0xce, 0xad, 0x43, 0x3f, + 0xc5, 0x58, 0xe1, 0xa4, 0x82, 0x75, 0xb6, 0x2a, 0x22, 0xe7, 0xcb, 0xa9, 0xe3, 0x0f, 0x1d, 0x11, + 0x0d, 0x95, 0x5a, 0x15, 0x3d, 0x81, 0x9b, 0xad, 0x0a, 0x09, 0x49, 0xe6, 0x75, 0xc2, 0xce, 0xe6, + 0xe7, 0xb5, 0xc2, 0x4c, 0xf3, 0x3a, 0x61, 0x4d, 0x16, 0x54, 0xc2, 0x7b, 0x61, 0x61, 0x41, 0x29, + 0xcc, 0x7c, 0x41, 0x25, 0xdc, 0x8f, 0x40, 0xcc, 0x26, 0xde, 0xb9, 0xa9, 0x98, 0x29, 0x5e, 0x6b, + 0xd1, 0xbb, 0x30, 0x4c, 0x52, 0x38, 0x57, 0x43, 0x07, 0xed, 0x0c, 0x31, 0x15, 0x2e, 0xaa, 0x73, + 0xd5, 0x20, 0x4c, 0xb2, 0x94, 0xc2, 0x59, 0x52, 0x29, 0x6c, 0xe2, 0xc6, 0x61, 0xcd, 0x5e, 0x2c, + 0xec, 0xc0, 0x8d, 0xc3, 0x59, 0x61, 0x98, 0x62, 0xef, 0x01, 0x4d, 0x43, 0xce, 0xe2, 0xa8, 0xa2, + 0x1b, 0xbb, 0x45, 0x30, 0x14, 0x6d, 0xf1, 0x8d, 0x93, 0x45, 0x94, 0x31, 0xb4, 0x87, 0xb5, 0x91, + 0x3a, 0x59, 0x78, 0x11, 0x8d, 0xdd, 0x06, 0x4e, 0x16, 0x4e, 0xd4, 0xb0, 0x87, 0xec, 0x1e, 0x10, + 0x37, 0xd1, 0x1f, 0xa5, 0x5e, 0x11, 0x0a, 0x83, 0x09, 0xa7, 0x2e, 0x20, 0x01, 0xd2, 0x62, 0x0b, + 0xbc, 0xc0, 0x97, 0x0d, 0x3f, 0x4e, 0xb5, 0x00, 0x11, 0x89, 0x30, 0x18, 0x26, 0x29, 0xfd, 0xff, + 0x59, 0x83, 0x82, 0x90, 0xb5, 0xec, 0x02, 0x6c, 0x08, 0x91, 0xbf, 0x5b, 0xef, 0xd7, 0x77, 0xea, + 0x3d, 0x54, 0xd2, 0x18, 0x54, 0xb9, 0xcc, 0x4f, 0x60, 0x19, 0xdc, 0x07, 0x48, 0xe8, 0x27, 0xa0, + 0x55, 0xdc, 0x07, 0x04, 0x2f, 0x7f, 0xad, 0x2d, 0xcb, 0x36, 0xa0, 0xcc, 0x19, 0x39, 0x80, 0x2e, + 0xd2, 0x11, 0x17, 0x4f, 0xe7, 0x15, 0x16, 0x7e, 0x4a, 0xb5, 0x36, 0x63, 0xe1, 0x80, 0x42, 0xc2, + 0x22, 0x8f, 0xb1, 0x18, 0x54, 0xfb, 0xc6, 0x61, 0xa7, 0x31, 0x2b, 0xa7, 0x44, 0x97, 0x9f, 0x78, + 0x36, 0xcf, 0x5b, 0xcd, 0x17, 0x1a, 0x20, 0x13, 0xcf, 0x85, 0xd2, 0x65, 0x54, 0x33, 0x29, 0x13, + 0x4a, 0x56, 0xd8, 0x65, 0xb8, 0xd0, 0xdb, 0xeb, 0xbe, 0x30, 0x39, 0x53, 0xd2, 0x84, 0x75, 0xb6, + 0x05, 0x9a, 0x82, 0xe0, 0xd9, 0x57, 0xb1, 0x48, 0x82, 0x4a, 0xc2, 0x9e, 0xb6, 0x41, 0x07, 0xc1, + 0x08, 0xeb, 0xf3, 0x7d, 0x57, 0xc3, 0xa6, 0x70, 0xd6, 0x6e, 0xfb, 0x70, 0xbf, 0xd3, 0xd3, 0x36, + 0xb1, 0x12, 0x04, 0xe1, 0x35, 0x67, 0x49, 0x36, 0xb3, 0xdd, 0xfa, 0x02, 0x6d, 0xe0, 0x08, 0x7b, + 0x51, 0x37, 0x3a, 0xad, 0xce, 0xd3, 0x9e, 0xb6, 0x95, 0xe4, 0xdc, 0x34, 0x8c, 0xae, 0xd1, 0xd3, + 0x2e, 0x26, 0x80, 0x5e, 0xbf, 0xde, 0x3f, 0xec, 0x69, 0x97, 0x92, 0x5a, 0x1e, 0x18, 0xdd, 0x46, + 0xb3, 0xd7, 0x6b, 0xb7, 0x7a, 0x7d, 0xed, 0x32, 0xbb, 0x08, 0x9b, 0xb3, 0x1a, 0x49, 0xe2, 0x9a, + 0x52, 0x51, 0xe3, 0x69, 0xb3, 0xaf, 0x5d, 0x49, 0xaa, 0xd1, 0xe8, 0xb6, 0xdb, 0x75, 0x3a, 0xc2, + 0xbc, 0x8a, 0x44, 0x74, 0x96, 0x2b, 0x5a, 0xf3, 0x06, 0xd6, 0xeb, 0xb0, 0xa3, 0x82, 0xae, 0x29, + 0x53, 0xa3, 0xd7, 0xfc, 0xf1, 0x61, 0xb3, 0xd3, 0x68, 0x6a, 0x6f, 0xce, 0xa6, 0x46, 0x02, 0xbb, + 0x9e, 0x4c, 0x8d, 0x04, 0x74, 0x23, 0x29, 0x53, 0x82, 0x7a, 0xda, 0x36, 0xe6, 0x27, 0xea, 0xd1, + 0xe9, 0x34, 0x1b, 0x7d, 0x6c, 0xeb, 0xcd, 0xa4, 0x17, 0x0f, 0x0f, 0x9e, 0x1a, 0xf5, 0xdd, 0xa6, + 0xa6, 0x23, 0xc4, 0x68, 0x76, 0xea, 0xfb, 0x72, 0xb4, 0x6f, 0x29, 0xa3, 0x7d, 0xd0, 0xea, 0x1b, + 0xda, 0xed, 0x64, 0x74, 0x29, 0xf9, 0x16, 0x7b, 0x03, 0x2e, 0xab, 0xf3, 0xd0, 0x7c, 0xd1, 0xea, + 0xef, 0x89, 0x13, 0xd7, 0x3b, 0xfc, 0xe4, 0x90, 0x90, 0x8d, 0xdd, 0x06, 0x3f, 0x5a, 0x26, 0x5e, + 0x4c, 0xdd, 0xdd, 0xa9, 0xd0, 0xd3, 0xba, 0x42, 0x01, 0xd1, 0x7f, 0x04, 0x4c, 0x7d, 0x7f, 0x52, + 0x3c, 0xc4, 0xc4, 0x20, 0x37, 0x0a, 0x83, 0xb1, 0xbc, 0xd4, 0x8e, 0xdf, 0x68, 0x39, 0x4f, 0xa6, + 0x03, 0x3a, 0xd1, 0x9c, 0x5d, 0x5a, 0x55, 0x41, 0xfa, 0xdf, 0xc9, 0x40, 0x35, 0xad, 0x7c, 0x90, + 0xdb, 0x73, 0x64, 0xfa, 0x41, 0xcc, 0x5f, 0xf8, 0x89, 0x92, 0x67, 0x21, 0x47, 0x9d, 0x20, 0xa6, + 0x27, 0x7e, 0xc8, 0x90, 0x4f, 0x74, 0x09, 0x9e, 0x6b, 0x92, 0x66, 0x2d, 0xb8, 0x90, 0x7a, 0xc2, + 0x33, 0xf5, 0xbe, 0x52, 0x2d, 0x79, 0x7a, 0x6f, 0xae, 0xfe, 0x06, 0x8b, 0x16, 0xdb, 0x24, 0xae, + 0x1e, 0xe7, 0x66, 0x57, 0x8f, 0xf7, 0x60, 0x3d, 0xa5, 0xeb, 0x90, 0xff, 0x65, 0x94, 0xae, 0x69, + 0xd1, 0x1d, 0xbd, 0xbe, 0x9a, 0xfa, 0xdf, 0xca, 0x40, 0x45, 0xd5, 0x7c, 0xbe, 0x75, 0x4e, 0x74, + 0x4d, 0x47, 0x7c, 0x9b, 0xae, 0x2d, 0x5f, 0xf6, 0x91, 0xa0, 0x16, 0x3d, 0x29, 0xce, 0x3d, 0xc8, + 0x4f, 0x4e, 0x7a, 0x49, 0x73, 0x54, 0x10, 0xbb, 0x0e, 0x40, 0x97, 0x16, 0x9f, 0x3c, 0x43, 0x02, + 0x71, 0xd1, 0x67, 0x06, 0xd1, 0x6f, 0x40, 0xe9, 0xc9, 0x89, 0x0c, 0x65, 0x51, 0xdf, 0xb9, 0x2a, + 0xf1, 0x9b, 0xce, 0xfa, 0x9f, 0x64, 0xa0, 0x3a, 0x7b, 0x13, 0x84, 0xce, 0x95, 0xf9, 0xd3, 0xaf, + 0x7c, 0x3a, 0xac, 0xda, 0x83, 0xd9, 0x6b, 0xe3, 0xab, 0xea, 0x6b, 0xe3, 0xb7, 0x44, 0x66, 0x59, + 0x55, 0xe4, 0x27, 0x65, 0x89, 0x7b, 0xd4, 0x8f, 0xa0, 0x82, 0xff, 0x0d, 0x67, 0xe4, 0x84, 0xa1, + 0x23, 0x5f, 0xc1, 0x5d, 0x20, 0x4e, 0x11, 0x91, 0x8d, 0xe7, 0x8c, 0x84, 0xaa, 0xb9, 0xf4, 0xd9, + 0x12, 0x7a, 0x4e, 0xe7, 0xbf, 0x64, 0xa1, 0xac, 0xe8, 0x91, 0x5f, 0x6b, 0xfa, 0x5d, 0x83, 0xd2, + 0xec, 0x11, 0x0d, 0x71, 0x79, 0x35, 0x01, 0xa4, 0xc6, 0x2a, 0x3b, 0x37, 0x56, 0x35, 0x28, 0x88, + 0xe0, 0x56, 0xe1, 0xfc, 0x95, 0xc9, 0xb4, 0x9b, 0x35, 0xff, 0x9a, 0x53, 0x8e, 0x0f, 0xa0, 0xa2, + 0xf8, 0x48, 0x23, 0x71, 0xc1, 0x73, 0x9e, 0xbe, 0x3c, 0xf3, 0x97, 0x46, 0xec, 0x22, 0xac, 0x8d, + 0x4e, 0x4c, 0x7b, 0xc0, 0x6f, 0xf5, 0x95, 0x8c, 0xfc, 0xe8, 0x64, 0x77, 0x40, 0x67, 0x40, 0xa3, + 0x44, 0x75, 0xe2, 0x9e, 0xab, 0xe2, 0x48, 0x2a, 0x48, 0x77, 0xa1, 0x30, 0x3a, 0x51, 0x6f, 0xe7, + 0x2d, 0x74, 0xf9, 0xda, 0xe8, 0x84, 0xae, 0xf3, 0x3d, 0x80, 0x2d, 0xb1, 0x7f, 0x5b, 0x91, 0xc9, + 0xdf, 0x09, 0xa0, 0xc7, 0x55, 0xf8, 0xab, 0x57, 0x9b, 0x1c, 0x57, 0x8f, 0x7a, 0x84, 0xc1, 0x19, + 0xa7, 0x43, 0x45, 0x99, 0x80, 0xfc, 0x15, 0x9a, 0x92, 0x91, 0x82, 0xb1, 0xc7, 0x50, 0x19, 0x9d, + 0xf0, 0x01, 0xed, 0x07, 0xfb, 0x8e, 0x08, 0xa5, 0xdf, 0x9a, 0x1f, 0x4a, 0x3a, 0xf8, 0x4f, 0x51, + 0xb2, 0x4b, 0xb0, 0x66, 0x58, 0xa7, 0xbd, 0x1f, 0xb7, 0x49, 0x89, 0x2c, 0x19, 0x22, 0xf5, 0xa3, + 0x5c, 0xb1, 0xaa, 0x6d, 0xe8, 0xff, 0x38, 0x03, 0xd5, 0x99, 0x0d, 0x80, 0x8b, 0x90, 0xdd, 0x53, + 0xdf, 0x6c, 0xae, 0xcd, 0x9b, 0x09, 0x48, 0x72, 0xbf, 0x7f, 0x3e, 0xe1, 0x2f, 0x1b, 0x2e, 0x7b, + 0x39, 0x68, 0x99, 0xd3, 0x3a, 0xbb, 0xf4, 0xb5, 0xd8, 0xa7, 0x90, 0xed, 0x9f, 0x4f, 0xb8, 0xbf, + 0x09, 0xb7, 0x44, 0x6e, 0x9b, 0xf2, 0xcd, 0x90, 0x22, 0x4b, 0x9e, 0x35, 0x3f, 0xe7, 0x97, 0xed, + 0x0f, 0x8c, 0xd6, 0x7e, 0xdd, 0xf8, 0x9c, 0x82, 0x86, 0x48, 0x69, 0x78, 0xd2, 0x35, 0x9a, 0xad, + 0xa7, 0x1d, 0x02, 0xe4, 0xc8, 0x1b, 0x35, 0xab, 0x62, 0xdd, 0xb6, 0x9f, 0x9c, 0xa8, 0x8f, 0xae, + 0x64, 0x52, 0x8f, 0xae, 0xa4, 0xef, 0xe7, 0xae, 0xce, 0xdf, 0xcf, 0x65, 0xc9, 0x2a, 0x4c, 0x96, + 0x34, 0x7b, 0x1b, 0x72, 0xa3, 0x13, 0xe7, 0x3c, 0x6d, 0xe8, 0xa5, 0x17, 0x10, 0x11, 0xe8, 0xbf, + 0xc8, 0x00, 0x4b, 0x55, 0x84, 0xdb, 0x1e, 0xdf, 0xb6, 0x2e, 0x9f, 0x40, 0x4d, 0x3c, 0x03, 0xc8, + 0xa9, 0x14, 0x2f, 0xb9, 0xe8, 0xd2, 0x8b, 0xc1, 0x2c, 0x8a, 0x73, 0xf6, 0xb8, 0x11, 0x7b, 0x00, + 0xfc, 0x1d, 0x36, 0x8a, 0x13, 0xc9, 0xbd, 0xc2, 0x4e, 0x34, 0x66, 0x34, 0xb3, 0x87, 0xd7, 0xd4, + 0x07, 0xe5, 0xb8, 0x83, 0x7d, 0x63, 0x36, 0x6a, 0xb4, 0xe6, 0xf5, 0xdf, 0xcb, 0xc0, 0x85, 0xf4, + 0x84, 0xf8, 0xe5, 0x5a, 0x99, 0x7e, 0x3d, 0x2f, 0x3b, 0xff, 0x7a, 0xde, 0xb2, 0xf9, 0x94, 0x5b, + 0x3a, 0x9f, 0x7e, 0x27, 0x03, 0x5b, 0x4a, 0xef, 0xcf, 0xac, 0xc5, 0xbf, 0xa4, 0x9a, 0x29, 0x8f, + 0xe8, 0xe5, 0x52, 0x8f, 0xe8, 0xe9, 0x7f, 0x98, 0x81, 0x4b, 0x73, 0x35, 0x31, 0x9c, 0xbf, 0xd4, + 0xba, 0xa4, 0x1f, 0xdb, 0x23, 0x27, 0x3f, 0x0f, 0x65, 0xe5, 0x17, 0x3b, 0x59, 0xfa, 0xf5, 0x3c, + 0xba, 0x46, 0xfd, 0x21, 0x6c, 0xce, 0xea, 0xd8, 0x10, 0x0f, 0x03, 0xde, 0x80, 0xb2, 0xef, 0x9c, + 0x9a, 0xf2, 0xd9, 0x40, 0x11, 0x19, 0xe4, 0x3b, 0xa7, 0x82, 0x40, 0x7f, 0xa2, 0x0a, 0x8c, 0xe4, + 0x0d, 0x71, 0xcf, 0x4e, 0x85, 0x98, 0x04, 0x9e, 0x2d, 0x51, 0x98, 0x9b, 0xd2, 0xa2, 0x82, 0xef, + 0x9c, 0xd2, 0x60, 0x9d, 0x8a, 0x7c, 0xea, 0xb6, 0x2d, 0x8e, 0xd9, 0x97, 0xbd, 0x05, 0x74, 0x05, + 0x8a, 0x93, 0x30, 0xd5, 0x25, 0x85, 0x49, 0xc8, 0x8b, 0xbd, 0x2d, 0xe2, 0x8e, 0x5e, 0x75, 0x24, + 0xcf, 0x23, 0x91, 0xc4, 0x6f, 0x0c, 0xe4, 0x66, 0xbf, 0x31, 0xf0, 0x91, 0x90, 0x15, 0x64, 0x1c, + 0xf1, 0x92, 0x35, 0xc8, 0xba, 0xf6, 0x19, 0x15, 0xbc, 0x6e, 0xe0, 0x27, 0xa9, 0x3b, 0xce, 0x97, + 0x22, 0xf4, 0x09, 0x3f, 0xf5, 0x1d, 0x28, 0x1b, 0x29, 0x4b, 0xb0, 0xa2, 0x38, 0x55, 0xa2, 0xf4, + 0x73, 0x29, 0xb3, 0x0e, 0x32, 0xca, 0x33, 0x9f, 0x4a, 0xa4, 0x47, 0x42, 0x3a, 0x3c, 0xb7, 0xc2, + 0xe1, 0xb1, 0x15, 0xb6, 0x1d, 0xff, 0x28, 0x3e, 0xc6, 0x2e, 0xe7, 0xbe, 0x4e, 0xb5, 0x0b, 0x81, + 0x83, 0xe4, 0xd0, 0x63, 0x2f, 0x7a, 0x44, 0x2e, 0x5f, 0x2f, 0xf7, 0x9d, 0x53, 0xc1, 0xff, 0x26, + 0x00, 0xf6, 0xbf, 0x40, 0xf3, 0x13, 0xb6, 0x52, 0xe0, 0xd9, 0x1c, 0xad, 0x6f, 0x8a, 0xf6, 0x8a, + 0x5b, 0x25, 0xbb, 0xce, 0x48, 0xf7, 0xc4, 0xc8, 0xf3, 0x06, 0x89, 0x4e, 0xf8, 0x56, 0xc3, 0xc8, + 0x6e, 0x42, 0x45, 0x9a, 0xed, 0xf4, 0x42, 0x0f, 0x2f, 0xbe, 0x2c, 0x61, 0x9d, 0xe9, 0x58, 0xff, + 0xfd, 0x2c, 0x54, 0xea, 0x3c, 0x08, 0x65, 0x72, 0xde, 0x9d, 0xc4, 0xec, 0x37, 0xe1, 0x62, 0x74, + 0xe2, 0x4e, 0xc4, 0x73, 0xe3, 0x14, 0xfb, 0x41, 0x71, 0xbe, 0xa2, 0x13, 0xef, 0x29, 0x9d, 0x28, + 0x58, 0xee, 0xf7, 0x4e, 0xdc, 0x09, 0x0f, 0x2f, 0x6f, 0xd9, 0x67, 0x14, 0xcb, 0xcd, 0x8f, 0xbe, + 0x59, 0xb4, 0x80, 0xa0, 0x7b, 0xa7, 0x98, 0xfd, 0xe4, 0x44, 0x64, 0x2b, 0x4e, 0xf8, 0x11, 0x78, + 0x70, 0xc2, 0x69, 0xee, 0xc1, 0x26, 0xbf, 0x51, 0xb2, 0xb8, 0x4b, 0x6d, 0x70, 0xc4, 0x6c, 0x7e, + 0xf7, 0x60, 0x93, 0xf2, 0x13, 0xcf, 0xc0, 0x99, 0xc3, 0x60, 0x72, 0x2e, 0x4e, 0xd6, 0xde, 0x7e, + 0x45, 0x55, 0x5b, 0x9c, 0x14, 0x41, 0xe2, 0x09, 0x89, 0x28, 0x0d, 0xbd, 0xda, 0x84, 0xcb, 0xaf, + 0x68, 0xd3, 0xeb, 0x4e, 0xef, 0x8b, 0xca, 0xe9, 0xfd, 0xd5, 0x1d, 0xd8, 0x5a, 0x56, 0xde, 0x37, + 0xc9, 0x43, 0xff, 0x83, 0x0a, 0xc0, 0x6c, 0xc6, 0xa6, 0x74, 0xb6, 0xcc, 0x9c, 0xce, 0xf6, 0x8d, + 0xe2, 0x4f, 0x3e, 0x84, 0x2a, 0x76, 0x95, 0x39, 0xe3, 0xc8, 0x2e, 0xe5, 0xa8, 0x20, 0x55, 0x7f, + 0x76, 0xc9, 0x6e, 0xf1, 0xc4, 0x3f, 0xb7, 0xf4, 0xc4, 0xff, 0x03, 0x28, 0xf0, 0xd3, 0xa8, 0x48, + 0x5c, 0xd2, 0xbc, 0x3c, 0xbf, 0xfa, 0xee, 0x8b, 0x50, 0x75, 0x49, 0xc7, 0x9a, 0x50, 0x45, 0xf9, + 0x18, 0xba, 0xf1, 0xf1, 0x58, 0xbd, 0xb2, 0x79, 0x7d, 0x91, 0x53, 0x92, 0xf1, 0xc7, 0xe3, 0x2c, + 0x35, 0xa9, 0xa8, 0x78, 0xf1, 0x58, 0xb8, 0x48, 0x49, 0xc5, 0x2b, 0xa8, 0x2a, 0x5e, 0x7f, 0xcc, + 0x1d, 0xa3, 0xa8, 0xe2, 0xbd, 0x07, 0x17, 0xc4, 0xf5, 0x19, 0x64, 0xc0, 0xee, 0x24, 0x7a, 0x1e, + 0x6a, 0x28, 0x5e, 0x56, 0xe9, 0x8f, 0xc9, 0x00, 0x42, 0xf2, 0xcf, 0x60, 0x6b, 0x78, 0x6c, 0xf9, + 0x47, 0x8e, 0x19, 0x0f, 0x3c, 0x93, 0x9e, 0xae, 0x36, 0xc7, 0xd6, 0x44, 0x68, 0x9e, 0x6f, 0x2f, + 0x54, 0xb6, 0x41, 0xc4, 0xfd, 0x81, 0x47, 0xb1, 0x52, 0x49, 0x5c, 0xc8, 0xe6, 0x70, 0x1e, 0x3e, + 0x77, 0x3c, 0x0b, 0x0b, 0xc7, 0xb3, 0xf3, 0xba, 0x68, 0x79, 0x89, 0x2e, 0x3a, 0xd3, 0x28, 0x2b, + 0xaa, 0x46, 0xc9, 0xde, 0x85, 0x82, 0xb8, 0x2d, 0x28, 0x9c, 0xa3, 0x6c, 0x71, 0x75, 0x18, 0x92, + 0x04, 0x4b, 0x92, 0xc1, 0x02, 0x74, 0x61, 0xb8, 0xca, 0x4b, 0x52, 0x61, 0x57, 0xff, 0x6b, 0x1e, + 0xd6, 0x44, 0xf8, 0xef, 0x3d, 0xc8, 0xd9, 0x61, 0x30, 0x49, 0xe2, 0x69, 0x97, 0xa8, 0xa5, 0xf4, + 0x7b, 0x42, 0xa8, 0xc1, 0xde, 0x87, 0x35, 0xcb, 0xb6, 0xcd, 0xd1, 0x49, 0xfa, 0xc0, 0x75, 0x4e, + 0x43, 0xdc, 0x5b, 0x31, 0xf2, 0x16, 0xa9, 0x8a, 0x9f, 0x40, 0x09, 0xe9, 0x67, 0x51, 0x8e, 0xe5, + 0x45, 0xbd, 0x57, 0xea, 0x72, 0x7b, 0x2b, 0x46, 0xd1, 0x92, 0x7a, 0xdd, 0xf7, 0xd3, 0xae, 0x6b, + 0xae, 0x68, 0x5d, 0x5d, 0x60, 0x7d, 0x95, 0x13, 0xfb, 0xd7, 0x81, 0xfb, 0x32, 0x93, 0xdd, 0x36, + 0xaf, 0x9e, 0xed, 0x2d, 0xec, 0xcd, 0x7b, 0x2b, 0x06, 0xdf, 0x73, 0xe4, 0x5e, 0xfd, 0x91, 0x74, + 0x2b, 0x27, 0xbf, 0xc8, 0xb0, 0xa4, 0x67, 0x50, 0x84, 0x25, 0xbe, 0x65, 0x92, 0x67, 0xc8, 0x66, + 0xdb, 0x32, 0xd8, 0xad, 0xb0, 0xc0, 0x96, 0xec, 0xc8, 0xc4, 0x96, 0x6c, 0xcf, 0x8f, 0xa1, 0xcc, + 0xbd, 0x8c, 0x9c, 0xaf, 0xb8, 0xd0, 0xb5, 0xb3, 0x0d, 0x95, 0xce, 0xad, 0x66, 0xdb, 0x6b, 0x43, + 0xb6, 0x33, 0x74, 0xd4, 0xa3, 0x81, 0x6b, 0x4b, 0x3b, 0xca, 0x48, 0x4e, 0x09, 0x78, 0x63, 0x0d, + 0xce, 0xc3, 0xda, 0xb0, 0x25, 0x7c, 0xe8, 0x7c, 0xf3, 0x94, 0xfb, 0x1d, 0x2c, 0x8c, 0x57, 0x6a, + 0x77, 0xdd, 0x5b, 0x31, 0x98, 0xb5, 0xb8, 0xe7, 0x36, 0x60, 0x53, 0x56, 0x89, 0x5f, 0xc2, 0x9c, + 0x45, 0xf4, 0xa8, 0x4d, 0x9a, 0xed, 0x99, 0x7b, 0x2b, 0xc6, 0x86, 0x95, 0x06, 0xb1, 0x16, 0x5c, + 0x90, 0x99, 0x90, 0x2f, 0x59, 0xf4, 0x4c, 0x65, 0x61, 0x14, 0xd5, 0x7d, 0x76, 0x6f, 0xc5, 0xd8, + 0xb4, 0xe6, 0x81, 0xb3, 0x93, 0xf5, 0xab, 0x06, 0x5c, 0x5a, 0xbe, 0x9c, 0x55, 0x99, 0x9e, 0xe3, + 0x32, 0x5d, 0x4f, 0xbf, 0xf0, 0x93, 0xbe, 0x6d, 0xaf, 0x48, 0xf8, 0x1f, 0xc2, 0x7a, 0x4a, 0x9e, + 0xb1, 0x32, 0x14, 0xe4, 0x5b, 0xc0, 0x14, 0xa3, 0xdf, 0xe8, 0x1e, 0x7c, 0xae, 0x65, 0x10, 0xdc, + 0xea, 0xf4, 0xfa, 0xf5, 0x8e, 0x88, 0x9b, 0x68, 0x75, 0x44, 0xdc, 0x84, 0xfe, 0xd7, 0xb2, 0x50, + 0x4a, 0xce, 0x7d, 0xbe, 0xbd, 0x7f, 0x26, 0x71, 0x7c, 0x64, 0x55, 0xc7, 0xc7, 0x9c, 0xf1, 0xc1, + 0x9f, 0xed, 0xe6, 0x2f, 0x3f, 0x6d, 0xa4, 0x55, 0xfc, 0x68, 0xf1, 0x16, 0x6f, 0xfe, 0x6b, 0xde, + 0xe2, 0x55, 0x23, 0x93, 0xd7, 0xd2, 0x91, 0xc9, 0x73, 0xef, 0x41, 0x17, 0xe8, 0xa5, 0x56, 0xf5, + 0x3d, 0x68, 0xfa, 0x69, 0xb6, 0xe7, 0xae, 0x73, 0x2a, 0x42, 0x79, 0x45, 0x2a, 0xbd, 0x1d, 0xc2, + 0x6b, 0xb6, 0xc3, 0xaf, 0x23, 0x5a, 0x1f, 0xc2, 0xd6, 0xe8, 0x24, 0x79, 0x1f, 0x76, 0x66, 0xee, + 0x57, 0xa8, 0x4a, 0x4b, 0x71, 0xfa, 0x5f, 0xc9, 0x00, 0xcc, 0x0e, 0x3a, 0x7e, 0x69, 0x9f, 0xa1, + 0xe2, 0x96, 0xc9, 0x7e, 0x85, 0x5b, 0xe6, 0x75, 0xaf, 0xfc, 0x7c, 0x09, 0xa5, 0xe4, 0x68, 0xeb, + 0xdb, 0xcf, 0x97, 0x6f, 0x54, 0xe4, 0x6f, 0x49, 0xff, 0x69, 0x72, 0x36, 0xf4, 0xcb, 0xf6, 0x45, + 0xaa, 0xf8, 0xec, 0x6b, 0x8a, 0x3f, 0xe3, 0x4e, 0xcc, 0xa4, 0xf0, 0x5f, 0xf1, 0x22, 0x51, 0xe7, + 0x6f, 0x2e, 0x35, 0x7f, 0xf5, 0xa9, 0xf0, 0xc4, 0xfe, 0xf2, 0x45, 0x7f, 0xa3, 0x06, 0xff, 0x45, + 0x46, 0xba, 0x0b, 0x93, 0x97, 0x7a, 0x5f, 0xa9, 0x38, 0x2e, 0xf7, 0x78, 0x7e, 0x93, 0xe2, 0xbe, + 0xd2, 0x19, 0x92, 0xfb, 0x2a, 0x67, 0xc8, 0xdb, 0x90, 0xe7, 0xdb, 0x4e, 0xfe, 0x55, 0x8e, 0x10, + 0x8e, 0x7f, 0xed, 0x7b, 0xfa, 0xba, 0x2e, 0x14, 0x65, 0xde, 0xde, 0x2d, 0x99, 0xaf, 0xfc, 0x2d, + 0x00, 0xba, 0x10, 0xf1, 0xdb, 0x19, 0x2e, 0x29, 0xbf, 0x6d, 0x9f, 0xfc, 0xca, 0xbc, 0x21, 0xff, + 0x33, 0x03, 0xeb, 0xa9, 0x53, 0xed, 0x6f, 0x51, 0x99, 0xa5, 0x92, 0x39, 0xfb, 0xbf, 0x91, 0x64, + 0x4e, 0x05, 0x84, 0x16, 0xd3, 0x01, 0xa1, 0x28, 0x19, 0x2b, 0x29, 0x8b, 0x61, 0x99, 0x6d, 0x91, + 0x59, 0x6a, 0x5b, 0x5c, 0x4f, 0x7e, 0x30, 0xac, 0xb5, 0xcb, 0xe3, 0x2f, 0xd7, 0x0d, 0x05, 0xc2, + 0x3e, 0x85, 0x2b, 0xc2, 0x66, 0xe7, 0xfd, 0x13, 0x8c, 0xcc, 0xe4, 0xe7, 0xc4, 0x84, 0x0d, 0x7c, + 0x89, 0x13, 0xf0, 0x1f, 0x4e, 0x18, 0xd5, 0x25, 0x56, 0x6f, 0xc1, 0x7a, 0x2a, 0x5c, 0x40, 0xf9, + 0xf9, 0xc2, 0x8c, 0xfa, 0xf3, 0x85, 0x6c, 0x1b, 0xf2, 0xa7, 0xc7, 0x4e, 0xe8, 0x2c, 0x79, 0xf4, + 0x93, 0x23, 0xf4, 0xef, 0x41, 0x45, 0x0d, 0x5d, 0x62, 0xef, 0x42, 0xde, 0x8d, 0x9d, 0xb1, 0xf4, + 0x46, 0x5c, 0x5a, 0x8c, 0x6e, 0x6a, 0xc5, 0xce, 0xd8, 0xe0, 0x44, 0xfa, 0xcf, 0x33, 0xa0, 0xcd, + 0xe3, 0x94, 0xdf, 0x58, 0xcc, 0xbc, 0xe2, 0x37, 0x16, 0x57, 0x53, 0x95, 0x5c, 0xf6, 0x33, 0x89, + 0xc9, 0xc3, 0x83, 0xb9, 0x57, 0x3c, 0x3c, 0xc8, 0xee, 0x40, 0x31, 0x74, 0xe8, 0x07, 0xec, 0xec, + 0x25, 0x77, 0x0a, 0x12, 0x9c, 0xfe, 0xff, 0x66, 0xa0, 0x20, 0xe2, 0xac, 0x96, 0xba, 0x87, 0xbe, + 0x03, 0x05, 0xfe, 0x63, 0x76, 0xf2, 0xc1, 0xa1, 0x85, 0xa0, 0x65, 0x89, 0x67, 0xd7, 0x79, 0xf4, + 0x59, 0xda, 0x5d, 0x74, 0xe0, 0x59, 0xbe, 0x41, 0x70, 0xf1, 0x7b, 0x28, 0xd6, 0x58, 0xdc, 0x48, + 0xe6, 0xcf, 0x02, 0x01, 0x81, 0xe8, 0xf2, 0xb1, 0xfe, 0x7d, 0x28, 0x88, 0x38, 0xae, 0xa5, 0x55, + 0x79, 0xdd, 0x0f, 0x99, 0x6d, 0x03, 0xcc, 0x02, 0xbb, 0x96, 0xe5, 0xa0, 0xdf, 0x83, 0xa2, 0x8c, + 0xe5, 0xc2, 0xf9, 0x37, 0x2b, 0x5a, 0x5c, 0x56, 0x51, 0x2b, 0xe3, 0x89, 0x87, 0xb4, 0xdb, 0xc1, + 0xf0, 0x84, 0x1c, 0xb8, 0x0f, 0x80, 0x6e, 0xee, 0xf4, 0x17, 0xde, 0x4f, 0x4a, 0xbf, 0x82, 0x9e, + 0x10, 0xb1, 0x7b, 0x90, 0x88, 0xd6, 0xd7, 0x59, 0xf2, 0x7a, 0x5d, 0xde, 0xf1, 0xa2, 0x59, 0xf6, + 0x48, 0x38, 0x2a, 0xdb, 0xf4, 0xea, 0x58, 0x46, 0x7d, 0x0b, 0x3f, 0x55, 0x27, 0x43, 0x21, 0xd3, + 0xab, 0x50, 0x51, 0x03, 0x50, 0xf4, 0x3a, 0x6c, 0xee, 0x3b, 0xb1, 0x85, 0xf2, 0x47, 0x3e, 0x44, + 0xc3, 0xe7, 0x2f, 0x7e, 0xa4, 0xe7, 0xef, 0x3c, 0x9d, 0xc1, 0x89, 0xf4, 0x9f, 0xe7, 0x40, 0x9b, + 0xc7, 0x7d, 0xd5, 0x7d, 0xb7, 0x1b, 0x50, 0x0e, 0x68, 0x5e, 0xa4, 0x7e, 0xf1, 0x86, 0x83, 0x94, + 0xe8, 0xf2, 0xd4, 0xcf, 0x1e, 0x14, 0xdd, 0x68, 0x8f, 0xff, 0xf0, 0xc1, 0x65, 0x7e, 0xb9, 0xc9, + 0x0b, 0x86, 0x34, 0xad, 0x2b, 0x74, 0x97, 0xa9, 0x1d, 0x0c, 0xe9, 0x1a, 0x9d, 0x70, 0x06, 0xf0, + 0xa8, 0xc8, 0x8a, 0x51, 0x14, 0x1e, 0x00, 0x3a, 0x53, 0x12, 0x31, 0xe7, 0x71, 0x24, 0x2e, 0x26, + 0x16, 0x39, 0xa0, 0x1f, 0xc9, 0xe7, 0x9a, 0x87, 0xe2, 0xe7, 0x59, 0xb2, 0xf4, 0x5c, 0x73, 0xc3, + 0xa7, 0x5b, 0x74, 0xf4, 0x6b, 0x42, 0x43, 0xf1, 0x6b, 0x4f, 0xe2, 0xc1, 0x6c, 0x44, 0xdd, 0xe2, + 0x3f, 0x60, 0x13, 0x3a, 0x51, 0xc4, 0x9f, 0xdc, 0x2b, 0x89, 0x57, 0xc7, 0x04, 0x30, 0x79, 0xdb, + 0x4f, 0xfc, 0x7c, 0x10, 0x92, 0x80, 0x78, 0xdb, 0x8f, 0xff, 0x78, 0x10, 0x12, 0x5c, 0x81, 0xe2, + 0x4f, 0x03, 0xdf, 0x21, 0xa7, 0x42, 0x99, 0x6a, 0x55, 0xc0, 0xf4, 0xbe, 0x35, 0xd1, 0xff, 0x69, + 0x06, 0xb6, 0xe6, 0x7b, 0x95, 0x26, 0x4c, 0x05, 0x8a, 0x8d, 0x6e, 0xdb, 0xec, 0xd4, 0xf7, 0x9b, + 0xda, 0x0a, 0xdb, 0x80, 0x72, 0x77, 0xe7, 0x47, 0xcd, 0x46, 0x9f, 0x03, 0x32, 0x74, 0x9b, 0xbc, + 0x67, 0xee, 0xb5, 0x76, 0x77, 0x9b, 0x1d, 0x6e, 0x3d, 0x74, 0x77, 0x7e, 0x64, 0xb6, 0xbb, 0x0d, + 0xfe, 0x6b, 0x23, 0xf2, 0xbc, 0xbd, 0xa7, 0xe5, 0xe8, 0x34, 0x9e, 0x82, 0xb0, 0x31, 0x99, 0xe7, + 0x31, 0xc6, 0x2f, 0x7a, 0x66, 0xa3, 0xd3, 0xd7, 0xd6, 0x30, 0xd5, 0x39, 0x6c, 0xb7, 0x29, 0x45, + 0xc1, 0x84, 0x8d, 0xee, 0xfe, 0x81, 0xd1, 0xec, 0xf5, 0xcc, 0x5e, 0xeb, 0x27, 0x4d, 0xad, 0x48, + 0x25, 0x1b, 0xad, 0xa7, 0xad, 0x0e, 0x07, 0x94, 0x58, 0x01, 0xb2, 0xfb, 0xad, 0x0e, 0xbf, 0x45, + 0xbf, 0x5f, 0xff, 0x4c, 0x2b, 0xe3, 0x47, 0xef, 0x70, 0x5f, 0xab, 0xe8, 0xff, 0x3e, 0x2b, 0x75, + 0x63, 0x0a, 0xad, 0xf9, 0x3a, 0xfa, 0xe0, 0xb2, 0x23, 0xad, 0x2d, 0xc8, 0x7b, 0x74, 0x2f, 0x58, + 0xfc, 0x90, 0x2a, 0x25, 0xbe, 0xce, 0x8f, 0x43, 0xde, 0x82, 0xf5, 0xe4, 0x3c, 0x5a, 0x79, 0x41, + 0xb9, 0x22, 0x81, 0x4b, 0x1c, 0xff, 0x6b, 0x4b, 0x1c, 0xff, 0x13, 0x37, 0x46, 0xbb, 0x17, 0x45, + 0x2a, 0x9f, 0x28, 0x25, 0x84, 0xf0, 0x9f, 0x65, 0x7d, 0x03, 0x28, 0x61, 0x4e, 0x7d, 0x57, 0xfe, + 0x34, 0x58, 0x11, 0x01, 0x87, 0xbe, 0x1b, 0xcf, 0x9f, 0x87, 0x97, 0x16, 0xce, 0xc3, 0xd5, 0xbd, + 0x17, 0xd2, 0x7b, 0x6f, 0xfa, 0x37, 0x33, 0xf9, 0x6f, 0x82, 0x29, 0xbf, 0x99, 0xf9, 0x2e, 0xb0, + 0xe1, 0x34, 0xa4, 0x37, 0xae, 0x14, 0xb2, 0x0a, 0x91, 0x69, 0x02, 0x93, 0x6c, 0x7a, 0xec, 0x6d, + 0xd8, 0x98, 0xa3, 0x26, 0x1f, 0x51, 0xc9, 0xa8, 0xa6, 0x49, 0xd9, 0x7d, 0xb8, 0x20, 0xa6, 0x6e, + 0xaa, 0x6f, 0xc5, 0x9d, 0x43, 0x8e, 0xaa, 0xcf, 0x7a, 0x58, 0xff, 0x35, 0x28, 0xca, 0x28, 0xaa, + 0xaf, 0x56, 0x7b, 0x97, 0x8c, 0xab, 0xfe, 0xf7, 0x57, 0xa1, 0x94, 0xc4, 0x54, 0x7d, 0xad, 0xd9, + 0x41, 0x4f, 0xc5, 0x47, 0x27, 0xaa, 0x04, 0x29, 0x22, 0x40, 0x8e, 0x94, 0xb8, 0xda, 0x33, 0x0d, + 0x5d, 0xa9, 0xba, 0x71, 0xc8, 0x61, 0xe8, 0xd2, 0x63, 0x89, 0xae, 0xaf, 0xdc, 0x0e, 0x2c, 0x19, + 0x45, 0x04, 0xd0, 0xea, 0xba, 0x02, 0xf4, 0x4d, 0x9c, 0xf2, 0x67, 0x44, 0x5d, 0xff, 0x04, 0xf9, + 0x5e, 0xf1, 0x33, 0xa2, 0xf4, 0xd0, 0x3d, 0x0f, 0xe8, 0xe0, 0xc7, 0xd8, 0xf2, 0x67, 0x99, 0xde, + 0x80, 0xd2, 0x34, 0xf9, 0x5d, 0x2f, 0x31, 0x23, 0xa6, 0xf2, 0x57, 0xbd, 0xd2, 0xa3, 0x5a, 0x9a, + 0x1f, 0xd5, 0xf9, 0x39, 0x0d, 0x0b, 0x73, 0x5a, 0x8f, 0xa1, 0x20, 0xe2, 0xca, 0xbe, 0xba, 0xc3, + 0xbf, 0xb2, 0xab, 0x34, 0xc8, 0x5a, 0x9e, 0xbc, 0x92, 0x88, 0x9f, 0x73, 0x15, 0xcb, 0xcd, 0x55, + 0x4c, 0xff, 0x1b, 0xab, 0x00, 0xb3, 0xf8, 0x34, 0xf6, 0xde, 0x5c, 0x2c, 0x6c, 0x66, 0x61, 0x57, + 0x9f, 0x0b, 0x81, 0x9d, 0x7b, 0xa9, 0x65, 0xf5, 0x6b, 0xbc, 0xd4, 0xf2, 0x10, 0xd6, 0xa3, 0x70, + 0xf8, 0x5a, 0xf7, 0x75, 0x39, 0x0a, 0x87, 0x89, 0xf7, 0xfa, 0x01, 0x60, 0x92, 0x5e, 0x7d, 0x9b, + 0x99, 0xac, 0x0b, 0x4a, 0x49, 0x29, 0x0a, 0x87, 0xdd, 0xc1, 0x17, 0xbb, 0xfc, 0x3e, 0x95, 0x1d, + 0xc5, 0xe6, 0x32, 0x29, 0xb1, 0x61, 0x47, 0xf1, 0xae, 0x2a, 0x28, 0x6e, 0x43, 0x15, 0x69, 0x17, + 0x84, 0x45, 0xc5, 0x8e, 0x66, 0xc7, 0x15, 0xf7, 0x6e, 0x42, 0x45, 0xfd, 0x99, 0x42, 0xba, 0x4a, + 0x11, 0xf8, 0x0e, 0x7f, 0xc8, 0xbe, 0xfd, 0xd3, 0x0f, 0xb5, 0xcc, 0x3d, 0x1d, 0xca, 0xca, 0xcf, + 0x48, 0x20, 0xc5, 0x9e, 0x15, 0x1d, 0x8b, 0x47, 0xcd, 0x2d, 0xff, 0xc8, 0xd1, 0x32, 0xf7, 0xee, + 0xa0, 0x9a, 0xaa, 0xfe, 0x88, 0x03, 0xc0, 0x5a, 0x27, 0x08, 0xc7, 0x96, 0x27, 0xe8, 0x9c, 0x69, + 0x84, 0x74, 0x0f, 0xe0, 0xe2, 0xd2, 0x9f, 0xa4, 0xa0, 0xfb, 0x38, 0xee, 0x78, 0xe2, 0x39, 0xfc, + 0x4a, 0xc9, 0xde, 0xf9, 0x20, 0x74, 0x6d, 0x2d, 0x73, 0xef, 0xb1, 0xbc, 0x9f, 0x2e, 0xcb, 0x6e, + 0x77, 0xeb, 0xbb, 0x7c, 0x47, 0x49, 0xde, 0x49, 0xe9, 0xef, 0xf0, 0x07, 0xcb, 0x8d, 0x66, 0xef, + 0xb0, 0xdd, 0x17, 0x6f, 0xb2, 0xdc, 0xfb, 0x21, 0xd4, 0x5e, 0x75, 0xb7, 0x02, 0x6b, 0xd4, 0xd8, + 0xab, 0xd3, 0xfd, 0x15, 0xdc, 0x41, 0xba, 0x26, 0x4f, 0x65, 0xf8, 0xf5, 0x9f, 0x76, 0x93, 0x02, + 0x10, 0xef, 0xfd, 0x2c, 0xa3, 0xe8, 0x4d, 0x32, 0x3e, 0x3e, 0x01, 0x88, 0x6e, 0x52, 0x41, 0x86, + 0x63, 0xd9, 0x5a, 0x86, 0x5d, 0x02, 0x96, 0x02, 0xb5, 0x83, 0xa1, 0xe5, 0x69, 0xab, 0x14, 0x6a, + 0x28, 0xe1, 0x74, 0x03, 0x4a, 0xcb, 0xb2, 0x37, 0xe1, 0x4a, 0x02, 0x6b, 0x07, 0xa7, 0x07, 0xa1, + 0x1b, 0x84, 0x6e, 0x7c, 0xce, 0xd1, 0xb9, 0x9d, 0x1f, 0xfc, 0xe9, 0x2f, 0xae, 0x67, 0xfe, 0xc5, + 0x2f, 0xae, 0x67, 0xfe, 0xc3, 0x2f, 0xae, 0xaf, 0xfc, 0xfc, 0x3f, 0x5e, 0xcf, 0xfc, 0xe4, 0xbd, + 0x23, 0x37, 0x3e, 0x9e, 0x0e, 0xee, 0x0f, 0x83, 0xf1, 0x83, 0xb1, 0x15, 0x87, 0xee, 0x19, 0x17, + 0x73, 0x32, 0xe1, 0x3b, 0x0f, 0x26, 0x27, 0x47, 0x0f, 0x26, 0x83, 0x07, 0x38, 0x8d, 0x06, 0x6b, + 0x93, 0x30, 0x88, 0x83, 0x47, 0xff, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x4e, 0x0c, 0xc6, 0x85, 0x95, + 0x81, 0x00, 0x00, } func (m *Type) Marshal() (dAtA []byte, err error) { @@ -21467,6 +21595,29 @@ func (m *DataDefinition_DropCdc) MarshalToSizedBuffer(dAtA []byte) (int, error) } return len(dAtA) - i, nil } +func (m *DataDefinition_CloneTable) MarshalTo(dAtA []byte) (int, error) { + size := m.ProtoSize() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DataDefinition_CloneTable) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.CloneTable != nil { + { + size, err := m.CloneTable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPlan(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6 + i-- + dAtA[i] = 0xc2 + } + return len(dAtA) - i, nil +} func (m *SubscriptionOption) Marshal() (dAtA []byte, err error) { size := m.ProtoSize() dAtA = make([]byte, size) @@ -22620,7 +22771,7 @@ func (m *AlterRenameColumn) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *AlterCopyDedupOpt) Marshal() (dAtA []byte, err error) { +func (m *AlterCopyOpt) Marshal() (dAtA []byte, err error) { size := m.ProtoSize() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -22630,12 +22781,12 @@ func (m *AlterCopyDedupOpt) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *AlterCopyDedupOpt) MarshalTo(dAtA []byte) (int, error) { +func (m *AlterCopyOpt) MarshalTo(dAtA []byte) (int, error) { size := m.ProtoSize() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *AlterCopyDedupOpt) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *AlterCopyOpt) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -22644,6 +22795,28 @@ func (m *AlterCopyDedupOpt) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.SkipIndexesCopy) > 0 { + for k := range m.SkipIndexesCopy { + v := m.SkipIndexesCopy[k] + baseI := i + i-- + if v { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i -= len(k) + copy(dAtA[i:], k) + i = encodeVarintPlan(dAtA, i, uint64(len(k))) + i-- + dAtA[i] = 0xa + i = encodeVarintPlan(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x22 + } + } if len(m.TargetTableName) > 0 { i -= len(m.TargetTableName) copy(dAtA[i:], m.TargetTableName) @@ -22710,9 +22883,18 @@ func (m *AlterTable) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - if m.DedupOpt != nil { + if len(m.AffectedCols) > 0 { + for iNdEx := len(m.AffectedCols) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AffectedCols[iNdEx]) + copy(dAtA[i:], m.AffectedCols[iNdEx]) + i = encodeVarintPlan(dAtA, i, uint64(len(m.AffectedCols[iNdEx]))) + i-- + dAtA[i] = 0x72 + } + } + if m.Options != nil { { - size, err := m.DedupOpt.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Options.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -23161,20 +23343,20 @@ func (m *DropTable) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } if len(m.FkChildTblsReferToMe) > 0 { - dAtA189 := make([]byte, len(m.FkChildTblsReferToMe)*10) - var j188 int + dAtA190 := make([]byte, len(m.FkChildTblsReferToMe)*10) + var j189 int for _, num := range m.FkChildTblsReferToMe { for num >= 1<<7 { - dAtA189[j188] = uint8(uint64(num)&0x7f | 0x80) + dAtA190[j189] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j188++ + j189++ } - dAtA189[j188] = uint8(num) - j188++ + dAtA190[j189] = uint8(num) + j189++ } - i -= j188 - copy(dAtA[i:], dAtA189[:j188]) - i = encodeVarintPlan(dAtA, i, uint64(j188)) + i -= j189 + copy(dAtA[i:], dAtA190[:j189]) + i = encodeVarintPlan(dAtA, i, uint64(j189)) i-- dAtA[i] = 0x62 } @@ -23210,20 +23392,20 @@ func (m *DropTable) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x48 } if len(m.ForeignTbl) > 0 { - dAtA192 := make([]byte, len(m.ForeignTbl)*10) - var j191 int + dAtA193 := make([]byte, len(m.ForeignTbl)*10) + var j192 int for _, num := range m.ForeignTbl { for num >= 1<<7 { - dAtA192[j191] = uint8(uint64(num)&0x7f | 0x80) + dAtA193[j192] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j191++ + j192++ } - dAtA192[j191] = uint8(num) - j191++ + dAtA193[j192] = uint8(num) + j192++ } - i -= j191 - copy(dAtA[i:], dAtA192[:j191]) - i = encodeVarintPlan(dAtA, i, uint64(j191)) + i -= j192 + copy(dAtA[i:], dAtA193[:j192]) + i = encodeVarintPlan(dAtA, i, uint64(j192)) i-- dAtA[i] = 0x3a } @@ -23776,20 +23958,20 @@ func (m *TruncateTable) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x40 } if len(m.ForeignTbl) > 0 { - dAtA201 := make([]byte, len(m.ForeignTbl)*10) - var j200 int + dAtA202 := make([]byte, len(m.ForeignTbl)*10) + var j201 int for _, num := range m.ForeignTbl { for num >= 1<<7 { - dAtA201[j200] = uint8(uint64(num)&0x7f | 0x80) + dAtA202[j201] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j200++ + j201++ } - dAtA201[j200] = uint8(num) - j200++ + dAtA202[j201] = uint8(num) + j201++ } - i -= j200 - copy(dAtA[i:], dAtA201[:j200]) - i = encodeVarintPlan(dAtA, i, uint64(j200)) + i -= j201 + copy(dAtA[i:], dAtA202[:j201]) + i = encodeVarintPlan(dAtA, i, uint64(j201)) i-- dAtA[i] = 0x3a } @@ -23866,20 +24048,20 @@ func (m *ClusterTable) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x18 } if len(m.AccountIDs) > 0 { - dAtA204 := make([]byte, len(m.AccountIDs)*10) - var j203 int + dAtA205 := make([]byte, len(m.AccountIDs)*10) + var j204 int for _, num := range m.AccountIDs { for num >= 1<<7 { - dAtA204[j203] = uint8(uint64(num)&0x7f | 0x80) + dAtA205[j204] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j203++ + j204++ } - dAtA204[j203] = uint8(num) - j203++ + dAtA205[j204] = uint8(num) + j204++ } - i -= j203 - copy(dAtA[i:], dAtA204[:j203]) - i = encodeVarintPlan(dAtA, i, uint64(j203)) + i -= j204 + copy(dAtA[i:], dAtA205[:j204]) + i = encodeVarintPlan(dAtA, i, uint64(j204)) i-- dAtA[i] = 0x12 } @@ -24091,21 +24273,21 @@ func (m *Prepare) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } if len(m.ParamTypes) > 0 { - dAtA208 := make([]byte, len(m.ParamTypes)*10) - var j207 int + dAtA209 := make([]byte, len(m.ParamTypes)*10) + var j208 int for _, num1 := range m.ParamTypes { num := uint64(num1) for num >= 1<<7 { - dAtA208[j207] = uint8(uint64(num)&0x7f | 0x80) + dAtA209[j208] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j207++ + j208++ } - dAtA208[j207] = uint8(num) - j207++ + dAtA209[j208] = uint8(num) + j208++ } - i -= j207 - copy(dAtA[i:], dAtA208[:j207]) - i = encodeVarintPlan(dAtA, i, uint64(j207)) + i -= j208 + copy(dAtA[i:], dAtA209[:j208]) + i = encodeVarintPlan(dAtA, i, uint64(j208)) i-- dAtA[i] = 0x22 } @@ -24252,21 +24434,21 @@ func (m *OtherDCL) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } if len(m.ParamTypes) > 0 { - dAtA211 := make([]byte, len(m.ParamTypes)*10) - var j210 int + dAtA212 := make([]byte, len(m.ParamTypes)*10) + var j211 int for _, num1 := range m.ParamTypes { num := uint64(num1) for num >= 1<<7 { - dAtA211[j210] = uint8(uint64(num)&0x7f | 0x80) + dAtA212[j211] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j210++ + j211++ } - dAtA211[j210] = uint8(num) - j210++ + dAtA212[j211] = uint8(num) + j211++ } - i -= j210 - copy(dAtA[i:], dAtA211[:j210]) - i = encodeVarintPlan(dAtA, i, uint64(j210)) + i -= j211 + copy(dAtA[i:], dAtA212[:j211]) + i = encodeVarintPlan(dAtA, i, uint64(j211)) i-- dAtA[i] = 0xa } @@ -24847,6 +25029,95 @@ func (m *DropCDC) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *CloneTable) Marshal() (dAtA []byte, err error) { + size := m.ProtoSize() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CloneTable) MarshalTo(dAtA []byte) (int, error) { + size := m.ProtoSize() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CloneTable) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.DstTableName) > 0 { + i -= len(m.DstTableName) + copy(dAtA[i:], m.DstTableName) + i = encodeVarintPlan(dAtA, i, uint64(len(m.DstTableName))) + i-- + dAtA[i] = 0x32 + } + if len(m.DstDatabaseName) > 0 { + i -= len(m.DstDatabaseName) + copy(dAtA[i:], m.DstDatabaseName) + i = encodeVarintPlan(dAtA, i, uint64(len(m.DstDatabaseName))) + i-- + dAtA[i] = 0x2a + } + if m.SrcObjDef != nil { + { + size, err := m.SrcObjDef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPlan(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.SrcTableDef != nil { + { + size, err := m.SrcTableDef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPlan(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.ScanSnapshot != nil { + { + size, err := m.ScanSnapshot.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPlan(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.CreateTable != nil { + { + size, err := m.CreateTable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPlan(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintPlan(dAtA []byte, offset int, v uint64) int { offset -= sovPlan(v) base := offset @@ -28342,6 +28613,18 @@ func (m *DataDefinition_DropCdc) ProtoSize() (n int) { } return n } +func (m *DataDefinition_CloneTable) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.CloneTable != nil { + l = m.CloneTable.ProtoSize() + n += 2 + l + sovPlan(uint64(l)) + } + return n +} func (m *SubscriptionOption) ProtoSize() (n int) { if m == nil { return 0 @@ -28881,7 +29164,7 @@ func (m *AlterRenameColumn) ProtoSize() (n int) { return n } -func (m *AlterCopyDedupOpt) ProtoSize() (n int) { +func (m *AlterCopyOpt) ProtoSize() (n int) { if m == nil { return 0 } @@ -28902,6 +29185,14 @@ func (m *AlterCopyDedupOpt) ProtoSize() (n int) { if l > 0 { n += 1 + l + sovPlan(uint64(l)) } + if len(m.SkipIndexesCopy) > 0 { + for k, v := range m.SkipIndexesCopy { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovPlan(uint64(len(k))) + 1 + 1 + n += mapEntrySize + 1 + sovPlan(uint64(mapEntrySize)) + } + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -28975,10 +29266,16 @@ func (m *AlterTable) ProtoSize() (n int) { if l > 0 { n += 1 + l + sovPlan(uint64(l)) } - if m.DedupOpt != nil { - l = m.DedupOpt.ProtoSize() + if m.Options != nil { + l = m.Options.ProtoSize() n += 1 + l + sovPlan(uint64(l)) } + if len(m.AffectedCols) > 0 { + for _, s := range m.AffectedCols { + l = len(s) + n += 1 + l + sovPlan(uint64(l)) + } + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -29908,6 +30205,42 @@ func (m *DropCDC) ProtoSize() (n int) { return n } +func (m *CloneTable) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.CreateTable != nil { + l = m.CreateTable.ProtoSize() + n += 1 + l + sovPlan(uint64(l)) + } + if m.ScanSnapshot != nil { + l = m.ScanSnapshot.ProtoSize() + n += 1 + l + sovPlan(uint64(l)) + } + if m.SrcTableDef != nil { + l = m.SrcTableDef.ProtoSize() + n += 1 + l + sovPlan(uint64(l)) + } + if m.SrcObjDef != nil { + l = m.SrcObjDef.ProtoSize() + n += 1 + l + sovPlan(uint64(l)) + } + l = len(m.DstDatabaseName) + if l > 0 { + n += 1 + l + sovPlan(uint64(l)) + } + l = len(m.DstTableName) + if l > 0 { + n += 1 + l + sovPlan(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func sovPlan(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -48876,6 +49209,41 @@ func (m *DataDefinition) Unmarshal(dAtA []byte) error { } m.Definition = &DataDefinition_DropCdc{v} iNdEx = postIndex + case 104: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CloneTable", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPlan + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPlan + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &CloneTable{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Definition = &DataDefinition_CloneTable{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipPlan(dAtA[iNdEx:]) @@ -52097,7 +52465,7 @@ func (m *AlterRenameColumn) Unmarshal(dAtA []byte) error { } return nil } -func (m *AlterCopyDedupOpt) Unmarshal(dAtA []byte) error { +func (m *AlterCopyOpt) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -52120,10 +52488,10 @@ func (m *AlterCopyDedupOpt) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AlterCopyDedupOpt: wiretype end group for non-group") + return fmt.Errorf("proto: AlterCopyOpt: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AlterCopyDedupOpt: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AlterCopyOpt: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -52293,6 +52661,121 @@ func (m *AlterCopyDedupOpt) Unmarshal(dAtA []byte) error { } m.TargetTableName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SkipIndexesCopy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPlan + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPlan + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SkipIndexesCopy == nil { + m.SkipIndexesCopy = make(map[string]bool) + } + var mapkey string + var mapvalue bool + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthPlan + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthPlan + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapvaluetemp int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapvaluetemp |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + mapvalue = bool(mapvaluetemp != 0) + } else { + iNdEx = entryPreIndex + skippy, err := skipPlan(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPlan + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.SkipIndexesCopy[mapkey] = mapvalue + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipPlan(dAtA[iNdEx:]) @@ -52798,7 +53281,7 @@ func (m *AlterTable) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 13: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DedupOpt", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -52825,13 +53308,45 @@ func (m *AlterTable) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.DedupOpt == nil { - m.DedupOpt = &AlterCopyDedupOpt{} + if m.Options == nil { + m.Options = &AlterCopyOpt{} } - if err := m.DedupOpt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Options.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AffectedCols", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthPlan + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPlan + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AffectedCols = append(m.AffectedCols, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipPlan(dAtA[iNdEx:]) @@ -58085,6 +58600,265 @@ func (m *DropCDC) Unmarshal(dAtA []byte) error { } return nil } +func (m *CloneTable) 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 ErrIntOverflowPlan + } + 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: CloneTable: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CloneTable: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CreateTable", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPlan + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPlan + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CreateTable == nil { + m.CreateTable = &Plan{} + } + if err := m.CreateTable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ScanSnapshot", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPlan + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPlan + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ScanSnapshot == nil { + m.ScanSnapshot = &Snapshot{} + } + if err := m.ScanSnapshot.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SrcTableDef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPlan + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPlan + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SrcTableDef == nil { + m.SrcTableDef = &TableDef{} + } + if err := m.SrcTableDef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SrcObjDef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPlan + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPlan + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SrcObjDef == nil { + m.SrcObjDef = &ObjectRef{} + } + if err := m.SrcObjDef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DstDatabaseName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthPlan + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPlan + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DstDatabaseName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DstTableName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPlan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthPlan + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPlan + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DstTableName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipPlan(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPlan + } + 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 skipPlan(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0