From 3cc50491c23dca58ad01e5f07e9a0008b4fee937 Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Thu, 28 Nov 2024 15:14:49 +0000 Subject: [PATCH 1/8] pulls in the latest exif-terminator version with bugfix and performance optimizations (#3583) --- go.mod | 2 +- go.sum | 4 +- .../exif-terminator/jpeg.go | 16 ++-- .../exif-terminator/webp.go | 94 ++++++++++--------- vendor/modules.txt | 2 +- 5 files changed, 63 insertions(+), 55 deletions(-) diff --git a/go.mod b/go.mod index 6f1ec2b26..19fecf914 100644 --- a/go.mod +++ b/go.mod @@ -41,7 +41,7 @@ require ( codeberg.org/gruf/go-sched v1.2.4 codeberg.org/gruf/go-storage v0.2.0 codeberg.org/gruf/go-structr v0.8.11 - codeberg.org/superseriousbusiness/exif-terminator v0.9.0 + codeberg.org/superseriousbusiness/exif-terminator v0.9.1 github.com/DmitriyVTitov/size v1.5.0 github.com/KimMachineGun/automemlimit v0.6.1 github.com/buckket/go-blurhash v1.1.0 diff --git a/go.sum b/go.sum index d190203a1..34fe33d84 100644 --- a/go.sum +++ b/go.sum @@ -72,8 +72,8 @@ codeberg.org/gruf/go-storage v0.2.0 h1:mKj3Lx6AavEkuXXtxqPhdq+akW9YwrnP16yQBF7K5 codeberg.org/gruf/go-storage v0.2.0/go.mod h1:o3GzMDE5QNUaRnm/daUzFqvuAaC4utlgXDXYO79sWKU= codeberg.org/gruf/go-structr v0.8.11 h1:I3cQCHpK3fQSXWaaUfksAJRN4+efULiuF11Oi/m8c+o= codeberg.org/gruf/go-structr v0.8.11/go.mod h1:zkoXVrAnKosh8VFAsbP/Hhs8FmLBjbVVy5w/Ngm8ApM= -codeberg.org/superseriousbusiness/exif-terminator v0.9.0 h1:/EfyGI6HIrbkhFwgXGSjZ9o1kr/+k8v4mKdfXTH02Go= -codeberg.org/superseriousbusiness/exif-terminator v0.9.0/go.mod h1:gCWKduudUWFzsnixoMzu0FYVdxHWG+AbXnZ50DqxsUE= +codeberg.org/superseriousbusiness/exif-terminator v0.9.1 h1:8Pss29AVuvljHAYLnZUyoqJp/8IN1cD3Jz30bJbxme8= +codeberg.org/superseriousbusiness/exif-terminator v0.9.1/go.mod h1:gCWKduudUWFzsnixoMzu0FYVdxHWG+AbXnZ50DqxsUE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= diff --git a/vendor/codeberg.org/superseriousbusiness/exif-terminator/jpeg.go b/vendor/codeberg.org/superseriousbusiness/exif-terminator/jpeg.go index 3c8b7035f..01ca313ca 100644 --- a/vendor/codeberg.org/superseriousbusiness/exif-terminator/jpeg.go +++ b/vendor/codeberg.org/superseriousbusiness/exif-terminator/jpeg.go @@ -109,17 +109,17 @@ func (v *jpegVisitor) writeSegment(s *jpegstructure.Segment) error { sizeLen, found := markerLen[s.MarkerId] if !found || sizeLen == 2 { - sizeLen = 2 - l := uint16(len(s.Data) + sizeLen) - - if err := binary.Write(w, binary.BigEndian, &l); err != nil { + l := uint16(len(s.Data) + 2) + b := make([]byte, 2) + binary.BigEndian.PutUint16(b, l) + if _, err := w.Write(b); err != nil { return err } - } else if sizeLen == 4 { - l := uint32(len(s.Data) + sizeLen) - - if err := binary.Write(w, binary.BigEndian, &l); err != nil { + l := uint32(len(s.Data) + 4) + b := make([]byte, 4) + binary.BigEndian.PutUint32(b, l) + if _, err := w.Write(b); err != nil { return err } } else if sizeLen != 0 { diff --git a/vendor/codeberg.org/superseriousbusiness/exif-terminator/webp.go b/vendor/codeberg.org/superseriousbusiness/exif-terminator/webp.go index 392c4871d..b050f38fc 100644 --- a/vendor/codeberg.org/superseriousbusiness/exif-terminator/webp.go +++ b/vendor/codeberg.org/superseriousbusiness/exif-terminator/webp.go @@ -25,17 +25,16 @@ ) const ( - riffHeaderSize = 4 * 3 + riffHeader = "RIFF" + webpHeader = "WEBP" + exifFourcc = "EXIF" + xmpFourcc = "XMP " ) var ( - riffHeader = [4]byte{'R', 'I', 'F', 'F'} - webpHeader = [4]byte{'W', 'E', 'B', 'P'} - exifFourcc = [4]byte{'E', 'X', 'I', 'F'} - xmpFourcc = [4]byte{'X', 'M', 'P', ' '} - errNoRiffHeader = errors.New("no RIFF header") errNoWebpHeader = errors.New("not a WEBP file") + errInvalidChunk = errors.New("invalid chunk") ) type webpVisitor struct { @@ -43,59 +42,68 @@ type webpVisitor struct { doneHeader bool } -func fourCC(b []byte) [4]byte { - return [4]byte{b[0], b[1], b[2], b[3]} -} - func (v *webpVisitor) split(data []byte, atEOF bool) (advance int, token []byte, err error) { // parse/write the header first if !v.doneHeader { - if len(data) < riffHeaderSize { - // need the full header + + // const rifHeaderSize = 12 + if len(data) < 12 { + if atEOF { + err = errNoRiffHeader + } return } - if fourCC(data) != riffHeader { + + if string(data[:4]) != riffHeader { err = errNoRiffHeader return } - if fourCC(data[8:]) != webpHeader { + + if string(data[8:12]) != webpHeader { err = errNoWebpHeader return } - if _, err = v.writer.Write(data[:riffHeaderSize]); err != nil { + + if _, err = v.writer.Write(data[:12]); err != nil { return } - advance += riffHeaderSize - data = data[riffHeaderSize:] + + advance += 12 + data = data[12:] v.doneHeader = true } - // need enough for fourcc and size - if len(data) < 8 { - return - } - size := int64(binary.LittleEndian.Uint32(data[4:])) - if (size & 1) != 0 { - // odd chunk size - extra padding byte - size++ - } - // wait until there is enough - if int64(len(data)-8) < size { - return - } - - fourcc := fourCC(data) - rawChunkData := data[8 : 8+size] - if fourcc == exifFourcc || fourcc == xmpFourcc { - // replace exif/xmp with blank - rawChunkData = make([]byte, size) - } - - if _, err = v.writer.Write(data[:8]); err == nil { - if _, err = v.writer.Write(rawChunkData); err == nil { - advance += 8 + int(size) + for { + // need enough for + // fourcc and size + if len(data) < 8 { + return } - } - return + size := int64(binary.LittleEndian.Uint32(data[4:])) + + if (size & 1) != 0 { + // odd chunk size: + // extra padding byte + size++ + } + + // wait until there is enough + if int64(len(data)) < 8+size { + return + } + + // replace exif/xmp with blank + switch string(data[:4]) { + case exifFourcc, xmpFourcc: + clear(data[8 : 8+size]) + } + + if _, err = v.writer.Write(data[:8+size]); err != nil { + return + } + + advance += 8 + int(size) + data = data[8+size:] + } } diff --git a/vendor/modules.txt b/vendor/modules.txt index 07598062b..4c57a75de 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -66,7 +66,7 @@ codeberg.org/gruf/go-storage/s3 # codeberg.org/gruf/go-structr v0.8.11 ## explicit; go 1.21 codeberg.org/gruf/go-structr -# codeberg.org/superseriousbusiness/exif-terminator v0.9.0 +# codeberg.org/superseriousbusiness/exif-terminator v0.9.1 ## explicit; go 1.21 codeberg.org/superseriousbusiness/exif-terminator # github.com/DmitriyVTitov/size v1.5.0 From d9f67efae512673c826b27daeae404a6051d9817 Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Thu, 28 Nov 2024 15:37:37 +0000 Subject: [PATCH 2/8] send out poll votes as separate create activities given that no other AP servers support multiple objects in a single activity (#3582) --- internal/processing/workers/federate.go | 17 ++++--- internal/typeutils/internaltoas.go | 42 +++++++++------- internal/typeutils/internaltoas_test.go | 64 +++++++++++++++---------- 3 files changed, 75 insertions(+), 48 deletions(-) diff --git a/internal/processing/workers/federate.go b/internal/processing/workers/federate.go index a0fd6bf69..8c08c42b7 100644 --- a/internal/processing/workers/federate.go +++ b/internal/processing/workers/federate.go @@ -217,18 +217,23 @@ func (f *federate) CreatePollVote(ctx context.Context, poll *gtsmodel.Poll, vote return err } - // Convert vote to AS Create with vote choices as Objects. - create, err := f.converter.PollVoteToASCreate(ctx, vote) + // Convert vote to AS Creates with vote choices as Objects. + creates, err := f.converter.PollVoteToASCreates(ctx, vote) if err != nil { return gtserror.Newf("error converting to notes: %w", err) } - // Send the Create via the Actor's outbox. - if _, err := f.FederatingActor().Send(ctx, outboxIRI, create); err != nil { - return gtserror.Newf("error sending Create activity via outbox %s: %w", outboxIRI, err) + var errs gtserror.MultiError + + // Send each create activity. + actor := f.FederatingActor() + for _, create := range creates { + if _, err := actor.Send(ctx, outboxIRI, create); err != nil { + errs.Appendf("error sending Create activity via outbox %s: %w", outboxIRI, err) + } } - return nil + return errs.Combine() } func (f *federate) DeleteStatus(ctx context.Context, status *gtsmodel.Status) error { diff --git a/internal/typeutils/internaltoas.go b/internal/typeutils/internaltoas.go index ed8bc1d8d..a81e5d2c0 100644 --- a/internal/typeutils/internaltoas.go +++ b/internal/typeutils/internaltoas.go @@ -1701,10 +1701,14 @@ func (c *Converter) ReportToASFlag(ctx context.Context, r *gtsmodel.Report) (voc // PollVoteToASCreate converts a vote on a poll into a Create // activity, suitable for federation, with each choice in the // vote appended as a Note to the Create's Object field. -func (c *Converter) PollVoteToASCreate( +// +// TODO: as soon as other AP server implementations support +// the use of multiple objects in a single create, update this +// to return just the one create event again. +func (c *Converter) PollVoteToASCreates( ctx context.Context, vote *gtsmodel.PollVote, -) (vocab.ActivityStreamsCreate, error) { +) ([]vocab.ActivityStreamsCreate, error) { if len(vote.Choices) == 0 { panic("no vote.Choices") } @@ -1743,22 +1747,25 @@ func (c *Converter) PollVoteToASCreate( return nil, gtserror.Newf("invalid account uri: %w", err) } - // Allocate Create activity and address 'To' poll author. - create := streams.NewActivityStreamsCreate() - ap.AppendTo(create, pollAuthorIRI) + // Parse each choice to a Note and add it to the list of Creates. + creates := make([]vocab.ActivityStreamsCreate, len(vote.Choices)) + for i, choice := range vote.Choices { - // Create ID formatted as: {$voterIRI}/activity#vote/{$statusIRI}. - id := author.URI + "/activity#vote/" + poll.Status.URI - ap.MustSet(ap.SetJSONLDIdStr, ap.WithJSONLDId(create), id) + // Allocate Create activity and address 'To' poll author. + create := streams.NewActivityStreamsCreate() + ap.AppendTo(create, pollAuthorIRI) - // Set Create actor appropriately. - ap.AppendActorIRIs(create, authorIRI) + // Create ID formatted as: {$voterIRI}/activity#vote{$index}/{$statusIRI}. + createID := fmt.Sprintf("%s/activity#vote%d/%s", author.URI, i, poll.Status.URI) + ap.MustSet(ap.SetJSONLDIdStr, ap.WithJSONLDId(create), createID) - // Set publish time for activity. - ap.SetPublished(create, vote.CreatedAt) + // Set Create actor appropriately. + ap.AppendActorIRIs(create, authorIRI) - // Parse each choice to a Note and add it to the Create. - for _, choice := range vote.Choices { + // Set publish time for activity. + ap.SetPublished(create, vote.CreatedAt) + + // Allocate new note to hold the vote. note := streams.NewActivityStreamsNote() // For AP IRI generate from author URI + poll ID + vote choice. @@ -1775,11 +1782,14 @@ func (c *Converter) PollVoteToASCreate( ap.AppendInReplyTo(note, statusIRI) ap.AppendTo(note, pollAuthorIRI) - // Append this note as Create Object. + // Append this note to the Create Object. appendStatusableToActivity(create, note, false) + + // Set create in slice. + creates[i] = create } - return create, nil + return creates, nil } // populateValuesForProp appends the given PolicyValues diff --git a/internal/typeutils/internaltoas_test.go b/internal/typeutils/internaltoas_test.go index a97eee2b8..c847cfc93 100644 --- a/internal/typeutils/internaltoas_test.go +++ b/internal/typeutils/internaltoas_test.go @@ -1104,43 +1104,55 @@ func (suite *InternalToASTestSuite) TestPinnedStatusesToASOneItem() { func (suite *InternalToASTestSuite) TestPollVoteToASCreate() { vote := suite.testPollVotes["remote_account_1_status_2_poll_vote_local_account_1"] - create, err := suite.typeconverter.PollVoteToASCreate(context.Background(), vote) - if err != nil { - suite.FailNow(err.Error()) - } + creates, err := suite.typeconverter.PollVoteToASCreates(context.Background(), vote) + suite.NoError(err) + suite.Len(creates, 2) - createI, err := ap.Serialize(create) + createI0, err := ap.Serialize(creates[0]) suite.NoError(err) - bytes, err := json.MarshalIndent(createI, "", " ") + createI1, err := ap.Serialize(creates[1]) + suite.NoError(err) + + bytes0, err := json.MarshalIndent(createI0, "", " ") + suite.NoError(err) + + bytes1, err := json.MarshalIndent(createI1, "", " ") suite.NoError(err) suite.Equal(`{ "@context": "https://www.w3.org/ns/activitystreams", "actor": "http://localhost:8080/users/the_mighty_zork", - "id": "http://localhost:8080/users/the_mighty_zork/activity#vote/http://fossbros-anonymous.io/users/foss_satan/statuses/01HEN2QRFA8H3C6QPN7RD4KSR6", - "object": [ - { - "attributedTo": "http://localhost:8080/users/the_mighty_zork", - "id": "http://localhost:8080/users/the_mighty_zork#01HEN2R65468ZG657C4ZPHJ4EX/votes/1", - "inReplyTo": "http://fossbros-anonymous.io/users/foss_satan/statuses/01HEN2QRFA8H3C6QPN7RD4KSR6", - "name": "tissues", - "to": "http://fossbros-anonymous.io/users/foss_satan", - "type": "Note" - }, - { - "attributedTo": "http://localhost:8080/users/the_mighty_zork", - "id": "http://localhost:8080/users/the_mighty_zork#01HEN2R65468ZG657C4ZPHJ4EX/votes/2", - "inReplyTo": "http://fossbros-anonymous.io/users/foss_satan/statuses/01HEN2QRFA8H3C6QPN7RD4KSR6", - "name": "financial times", - "to": "http://fossbros-anonymous.io/users/foss_satan", - "type": "Note" - } - ], + "id": "http://localhost:8080/users/the_mighty_zork/activity#vote0/http://fossbros-anonymous.io/users/foss_satan/statuses/01HEN2QRFA8H3C6QPN7RD4KSR6", + "object": { + "attributedTo": "http://localhost:8080/users/the_mighty_zork", + "id": "http://localhost:8080/users/the_mighty_zork#01HEN2R65468ZG657C4ZPHJ4EX/votes/1", + "inReplyTo": "http://fossbros-anonymous.io/users/foss_satan/statuses/01HEN2QRFA8H3C6QPN7RD4KSR6", + "name": "tissues", + "to": "http://fossbros-anonymous.io/users/foss_satan", + "type": "Note" + }, "published": "2021-09-11T11:45:37+02:00", "to": "http://fossbros-anonymous.io/users/foss_satan", "type": "Create" -}`, string(bytes)) +}`, string(bytes0)) + + suite.Equal(`{ + "@context": "https://www.w3.org/ns/activitystreams", + "actor": "http://localhost:8080/users/the_mighty_zork", + "id": "http://localhost:8080/users/the_mighty_zork/activity#vote1/http://fossbros-anonymous.io/users/foss_satan/statuses/01HEN2QRFA8H3C6QPN7RD4KSR6", + "object": { + "attributedTo": "http://localhost:8080/users/the_mighty_zork", + "id": "http://localhost:8080/users/the_mighty_zork#01HEN2R65468ZG657C4ZPHJ4EX/votes/2", + "inReplyTo": "http://fossbros-anonymous.io/users/foss_satan/statuses/01HEN2QRFA8H3C6QPN7RD4KSR6", + "name": "financial times", + "to": "http://fossbros-anonymous.io/users/foss_satan", + "type": "Note" + }, + "published": "2021-09-11T11:45:37+02:00", + "to": "http://fossbros-anonymous.io/users/foss_satan", + "type": "Create" +}`, string(bytes1)) } func (suite *InternalToASTestSuite) TestInteractionReqToASAcceptAnnounce() { From c9d36f7e452654bed04d50c6a468831a4136e6b3 Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Fri, 29 Nov 2024 15:03:10 +0000 Subject: [PATCH 3/8] [performance] use new instance of bun.DB *after* migrations to reduce number of in-memory model schema (#3578) * use new instance of bun.DB *after* migrations to reduce number of model schema in-memory * update sqlite address comment --- internal/db/bundb/bundb.go | 122 +++++++++++++++++++------------------ 1 file changed, 63 insertions(+), 59 deletions(-) diff --git a/internal/db/bundb/bundb.go b/internal/db/bundb/bundb.go index 8756e086b..70132fe58 100644 --- a/internal/db/bundb/bundb.go +++ b/internal/db/bundb/bundb.go @@ -49,6 +49,7 @@ "github.com/uptrace/bun/dialect/pgdialect" "github.com/uptrace/bun/dialect/sqlitedialect" "github.com/uptrace/bun/migrate" + "github.com/uptrace/bun/schema" ) // DBService satisfies the DB interface @@ -131,18 +132,18 @@ func doMigration(ctx context.Context, db *bun.DB) error { // NewBunDBService returns a bunDB derived from the provided config, which implements the go-fed DB interface. // Under the hood, it uses https://github.com/uptrace/bun to create and maintain a database connection. func NewBunDBService(ctx context.Context, state *state.State) (db.DB, error) { - var db *bun.DB + var sqldb *sql.DB + var dialect func() schema.Dialect var err error - t := strings.ToLower(config.GetDbType()) - switch t { + switch t := strings.ToLower(config.GetDbType()); t { case "postgres": - db, err = pgConn(ctx) + sqldb, dialect, err = pgConn(ctx) if err != nil { return nil, err } case "sqlite": - db, err = sqliteConn(ctx) + sqldb, dialect, err = sqliteConn(ctx) if err != nil { return nil, err } @@ -150,34 +151,20 @@ func NewBunDBService(ctx context.Context, state *state.State) (db.DB, error) { return nil, fmt.Errorf("database type %s not supported for bundb", t) } - // Add database query hooks. - db.AddQueryHook(queryHook{}) - if config.GetTracingEnabled() { - db.AddQueryHook(tracing.InstrumentBun()) - } - if config.GetMetricsEnabled() { - db.AddQueryHook(metrics.InstrumentBun()) - } - - // table registration is needed for many-to-many, see: - // https://bun.uptrace.dev/orm/many-to-many-relation/ - for _, t := range []interface{}{ - >smodel.AccountToEmoji{}, - >smodel.ConversationToStatus{}, - >smodel.StatusToEmoji{}, - >smodel.StatusToTag{}, - >smodel.ThreadToStatus{}, - } { - db.RegisterModel(t) - } - - // perform any pending database migrations: this includes - // the very first 'migration' on startup which just creates - // necessary tables - if err := doMigration(ctx, db); err != nil { + // perform any pending database migrations: this includes the first + // 'migration' on startup which just creates necessary db tables. + // + // Note this uses its own instance of bun.DB as bun will automatically + // store in-memory reflect type schema of any Go models passed to it, + // and we still maintain lots of old model versions in the migrations. + if err := doMigration(ctx, bunDB(sqldb, dialect)); err != nil { return nil, fmt.Errorf("db migration error: %s", err) } + // Wrap sql.DB as bun.DB type, + // adding any connection hooks. + db := bunDB(sqldb, dialect) + ps := &DBService{ Account: &accountDB{ db: db, @@ -319,17 +306,47 @@ func NewBunDBService(ctx context.Context, state *state.State) (db.DB, error) { return ps, nil } -func pgConn(ctx context.Context) (*bun.DB, error) { +// bunDB returns a new bun.DB for given sql.DB connection pool and dialect +// function. This can be used to apply any necessary opts / hooks as we +// initialize a bun.DB object both before and after performing migrations. +func bunDB(sqldb *sql.DB, dialect func() schema.Dialect) *bun.DB { + db := bun.NewDB(sqldb, dialect()) + + // Add our SQL connection hooks. + db.AddQueryHook(queryHook{}) + if config.GetTracingEnabled() { + db.AddQueryHook(tracing.InstrumentBun()) + } + if config.GetMetricsEnabled() { + db.AddQueryHook(metrics.InstrumentBun()) + } + + // table registration is needed for many-to-many, see: + // https://bun.uptrace.dev/orm/many-to-many-relation/ + for _, t := range []interface{}{ + >smodel.AccountToEmoji{}, + >smodel.ConversationToStatus{}, + >smodel.StatusToEmoji{}, + >smodel.StatusToTag{}, + >smodel.ThreadToStatus{}, + } { + db.RegisterModel(t) + } + + return db +} + +func pgConn(ctx context.Context) (*sql.DB, func() schema.Dialect, error) { opts, err := deriveBunDBPGOptions() //nolint:contextcheck if err != nil { - return nil, fmt.Errorf("could not create bundb postgres options: %w", err) + return nil, nil, fmt.Errorf("could not create bundb postgres options: %w", err) } cfg := stdlib.RegisterConnConfig(opts) sqldb, err := sql.Open("pgx-gts", cfg) if err != nil { - return nil, fmt.Errorf("could not open postgres db: %w", err) + return nil, nil, fmt.Errorf("could not open postgres db: %w", err) } // Tune db connections for postgres, see: @@ -339,22 +356,20 @@ func pgConn(ctx context.Context) (*bun.DB, error) { sqldb.SetMaxIdleConns(2) // assume default 2; if max idle is less than max open, it will be automatically adjusted sqldb.SetConnMaxLifetime(5 * time.Minute) // fine to kill old connections - db := bun.NewDB(sqldb, pgdialect.New()) - // ping to check the db is there and listening - if err := db.PingContext(ctx); err != nil { - return nil, fmt.Errorf("postgres ping: %w", err) + if err := sqldb.PingContext(ctx); err != nil { + return nil, nil, fmt.Errorf("postgres ping: %w", err) } log.Info(ctx, "connected to POSTGRES database") - return db, nil + return sqldb, func() schema.Dialect { return pgdialect.New() }, nil } -func sqliteConn(ctx context.Context) (*bun.DB, error) { +func sqliteConn(ctx context.Context) (*sql.DB, func() schema.Dialect, error) { // validate db address has actually been set address := config.GetDbAddress() if address == "" { - return nil, fmt.Errorf("'%s' was not set when attempting to start sqlite", config.DbAddressFlag()) + return nil, nil, fmt.Errorf("'%s' was not set when attempting to start sqlite", config.DbAddressFlag()) } // Build SQLite connection address with prefs. @@ -363,7 +378,7 @@ func sqliteConn(ctx context.Context) (*bun.DB, error) { // Open new DB instance sqldb, err := sql.Open("sqlite-gts", address) if err != nil { - return nil, fmt.Errorf("could not open sqlite db with address %s: %w", address, err) + return nil, nil, fmt.Errorf("could not open sqlite db with address %s: %w", address, err) } // Tune db connections for sqlite, see: @@ -379,16 +394,14 @@ func sqliteConn(ctx context.Context) (*bun.DB, error) { sqldb.SetConnMaxLifetime(5 * time.Minute) } - db := bun.NewDB(sqldb, sqlitedialect.New()) - // ping to check the db is there and listening - if err := db.PingContext(ctx); err != nil { - return nil, fmt.Errorf("sqlite ping: %w", err) + if err := sqldb.PingContext(ctx); err != nil { + return nil, nil, fmt.Errorf("sqlite ping: %w", err) } log.Infof(ctx, "connected to SQLITE database with address %s", address) - return db, nil + return sqldb, func() schema.Dialect { return sqlitedialect.New() }, nil } /* @@ -517,15 +530,12 @@ func buildSQLiteAddress(addr string) (string, bool) { // // - SQLite by itself supports setting a subset of its configuration options // via URI query arguments in the connection. Namely `mode` and `cache`. - // This is the same situation for the directly transpiled C->Go code in - // modernc.org/sqlite, i.e. modernc.org/sqlite/lib, NOT the Go SQL driver. + // This is the same situation for our supported SQLite implementations. // - // - `modernc.org/sqlite` has a "shim" around it to allow the directly - // transpiled C code to be usable with a more native Go API. This is in - // the form of a `database/sql/driver.Driver{}` implementation that calls - // through to the transpiled C code. + // - Both implementations have a "shim" around them in the form of a + // `database/sql/driver.Driver{}` implementation. // - // - The SQLite shim we interface with adds support for setting ANY of the + // - The SQLite shims we interface with add support for setting ANY of the // configuration options via query arguments, through using a special `_pragma` // query key that specifies SQLite PRAGMAs to set upon opening each connection. // As such you will see below that most config is set with the `_pragma` key. @@ -551,12 +561,6 @@ func buildSQLiteAddress(addr string) (string, bool) { // reached. And for whatever reason (:shrug:) SQLite is very particular about // setting this BEFORE the `journal_mode` is set, otherwise you can end up // running into more of these `SQLITE_BUSY` return codes than you might expect. - // - // - One final thing (I promise!): `SQLITE_BUSY` is only handled by the internal - // `busy_timeout` handler in the case that a data race occurs contending for - // table locks. THERE ARE STILL OTHER SITUATIONS IN WHICH THIS MAY BE RETURNED! - // As such, we use our wrapping DB{} and Tx{} types (in "db.go") which make use - // of our own retry-busy handler. // Drop anything fancy from DB address addr = strings.Split(addr, "?")[0] // drop any provided query strings From 936b269b056a3b65556f6de655a8610328a76e61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 10:44:43 +0100 Subject: [PATCH 4/8] [chore]: Bump github.com/minio/minio-go/v7 from 7.0.80 to 7.0.81 (#3590) Bumps [github.com/minio/minio-go/v7](https://github.com/minio/minio-go) from 7.0.80 to 7.0.81. - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.80...v7.0.81) --- updated-dependencies: - dependency-name: github.com/minio/minio-go/v7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 +- .../minio/minio-go/v7/api-prompt-object.go | 78 + .../minio/minio-go/v7/api-prompt-options.go | 84 + .../minio-go/v7/api-put-object-fan-out.go | 5 +- vendor/github.com/minio/minio-go/v7/api.go | 2 +- .../minio/minio-go/v7/functional_tests.go | 1907 ++++------------- .../v7/pkg/credentials/sts_web_identity.go | 7 +- .../minio/minio-go/v7/post-policy.go | 71 +- .../minio/minio-go/v7/retry-continous.go | 10 +- vendor/github.com/minio/minio-go/v7/retry.go | 10 +- vendor/modules.txt | 2 +- 12 files changed, 603 insertions(+), 1579 deletions(-) create mode 100644 vendor/github.com/minio/minio-go/v7/api-prompt-object.go create mode 100644 vendor/github.com/minio/minio-go/v7/api-prompt-options.go diff --git a/go.mod b/go.mod index 19fecf914..ed2811b19 100644 --- a/go.mod +++ b/go.mod @@ -60,7 +60,7 @@ require ( github.com/k3a/html2text v1.2.1 github.com/microcosm-cc/bluemonday v1.0.27 github.com/miekg/dns v1.1.62 - github.com/minio/minio-go/v7 v7.0.80 + github.com/minio/minio-go/v7 v7.0.81 github.com/mitchellh/mapstructure v1.5.0 github.com/ncruces/go-sqlite3 v0.20.3 github.com/oklog/ulid v1.3.1 diff --git a/go.sum b/go.sum index 34fe33d84..4e33f2d61 100644 --- a/go.sum +++ b/go.sum @@ -413,8 +413,8 @@ github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.80 h1:2mdUHXEykRdY/BigLt3Iuu1otL0JTogT0Nmltg0wujk= -github.com/minio/minio-go/v7 v7.0.80/go.mod h1:84gmIilaX4zcvAWWzJ5Z1WI5axN+hAbM5w25xf8xvC0= +github.com/minio/minio-go/v7 v7.0.81 h1:SzhMN0TQ6T/xSBu6Nvw3M5M8voM+Ht8RH3hE8S7zxaA= +github.com/minio/minio-go/v7 v7.0.81/go.mod h1:84gmIilaX4zcvAWWzJ5Z1WI5axN+hAbM5w25xf8xvC0= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= diff --git a/vendor/github.com/minio/minio-go/v7/api-prompt-object.go b/vendor/github.com/minio/minio-go/v7/api-prompt-object.go new file mode 100644 index 000000000..dac062a75 --- /dev/null +++ b/vendor/github.com/minio/minio-go/v7/api-prompt-object.go @@ -0,0 +1,78 @@ +/* + * MinIO Go Library for Amazon S3 Compatible Cloud Storage + * Copyright 2015-2024 MinIO, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package minio + +import ( + "bytes" + "context" + "io" + "net/http" + + "github.com/goccy/go-json" + "github.com/minio/minio-go/v7/pkg/s3utils" +) + +// PromptObject performs language model inference with the prompt and referenced object as context. +// Inference is performed using a Lambda handler that can process the prompt and object. +// Currently, this functionality is limited to certain MinIO servers. +func (c *Client) PromptObject(ctx context.Context, bucketName, objectName, prompt string, opts PromptObjectOptions) (io.ReadCloser, error) { + // Input validation. + if err := s3utils.CheckValidBucketName(bucketName); err != nil { + return nil, ErrorResponse{ + StatusCode: http.StatusBadRequest, + Code: "InvalidBucketName", + Message: err.Error(), + } + } + if err := s3utils.CheckValidObjectName(objectName); err != nil { + return nil, ErrorResponse{ + StatusCode: http.StatusBadRequest, + Code: "XMinioInvalidObjectName", + Message: err.Error(), + } + } + + opts.AddLambdaArnToReqParams(opts.LambdaArn) + opts.SetHeader("Content-Type", "application/json") + opts.AddPromptArg("prompt", prompt) + promptReqBytes, err := json.Marshal(opts.PromptArgs) + if err != nil { + return nil, err + } + + // Execute POST on bucket/object. + resp, err := c.executeMethod(ctx, http.MethodPost, requestMetadata{ + bucketName: bucketName, + objectName: objectName, + queryValues: opts.toQueryValues(), + customHeader: opts.Header(), + contentSHA256Hex: sum256Hex(promptReqBytes), + contentBody: bytes.NewReader(promptReqBytes), + contentLength: int64(len(promptReqBytes)), + }) + if err != nil { + return nil, err + } + + if resp.StatusCode != http.StatusOK { + defer closeResponse(resp) + return nil, httpRespToErrorResponse(resp, bucketName, objectName) + } + + return resp.Body, nil +} diff --git a/vendor/github.com/minio/minio-go/v7/api-prompt-options.go b/vendor/github.com/minio/minio-go/v7/api-prompt-options.go new file mode 100644 index 000000000..4493a75d4 --- /dev/null +++ b/vendor/github.com/minio/minio-go/v7/api-prompt-options.go @@ -0,0 +1,84 @@ +/* + * MinIO Go Library for Amazon S3 Compatible Cloud Storage + * Copyright 2015-2024 MinIO, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package minio + +import ( + "net/http" + "net/url" +) + +// PromptObjectOptions provides options to PromptObject call. +// LambdaArn is the ARN of the Prompt Lambda to be invoked. +// PromptArgs is a map of key-value pairs to be passed to the inference action on the Prompt Lambda. +// "prompt" is a reserved key and should not be used as a key in PromptArgs. +type PromptObjectOptions struct { + LambdaArn string + PromptArgs map[string]any + headers map[string]string + reqParams url.Values +} + +// Header returns the http.Header representation of the POST options. +func (o PromptObjectOptions) Header() http.Header { + headers := make(http.Header, len(o.headers)) + for k, v := range o.headers { + headers.Set(k, v) + } + return headers +} + +// AddPromptArg Add a key value pair to the prompt arguments where the key is a string and +// the value is a JSON serializable. +func (o *PromptObjectOptions) AddPromptArg(key string, value any) { + if o.PromptArgs == nil { + o.PromptArgs = make(map[string]any) + } + o.PromptArgs[key] = value +} + +// AddLambdaArnToReqParams adds the lambdaArn to the request query string parameters. +func (o *PromptObjectOptions) AddLambdaArnToReqParams(lambdaArn string) { + if o.reqParams == nil { + o.reqParams = make(url.Values) + } + o.reqParams.Add("lambdaArn", lambdaArn) +} + +// SetHeader adds a key value pair to the options. The +// key-value pair will be part of the HTTP POST request +// headers. +func (o *PromptObjectOptions) SetHeader(key, value string) { + if o.headers == nil { + o.headers = make(map[string]string) + } + o.headers[http.CanonicalHeaderKey(key)] = value +} + +// toQueryValues - Convert the reqParams in Options to query string parameters. +func (o *PromptObjectOptions) toQueryValues() url.Values { + urlValues := make(url.Values) + if o.reqParams != nil { + for key, values := range o.reqParams { + for _, value := range values { + urlValues.Add(key, value) + } + } + } + + return urlValues +} diff --git a/vendor/github.com/minio/minio-go/v7/api-put-object-fan-out.go b/vendor/github.com/minio/minio-go/v7/api-put-object-fan-out.go index 0ae9142e1..3023b949c 100644 --- a/vendor/github.com/minio/minio-go/v7/api-put-object-fan-out.go +++ b/vendor/github.com/minio/minio-go/v7/api-put-object-fan-out.go @@ -85,7 +85,10 @@ func (c *Client) PutObjectFanOut(ctx context.Context, bucket string, fanOutData policy.SetEncryption(fanOutReq.SSE) // Set checksum headers if any. - policy.SetChecksum(fanOutReq.Checksum) + err := policy.SetChecksum(fanOutReq.Checksum) + if err != nil { + return nil, err + } url, formData, err := c.PresignedPostPolicy(ctx, policy) if err != nil { diff --git a/vendor/github.com/minio/minio-go/v7/api.go b/vendor/github.com/minio/minio-go/v7/api.go index 380ec4fde..88e8d4347 100644 --- a/vendor/github.com/minio/minio-go/v7/api.go +++ b/vendor/github.com/minio/minio-go/v7/api.go @@ -133,7 +133,7 @@ type Options struct { // Global constants. const ( libraryName = "minio-go" - libraryVersion = "v7.0.80" + libraryVersion = "v7.0.81" ) // User Agent should always following the below style. diff --git a/vendor/github.com/minio/minio-go/v7/functional_tests.go b/vendor/github.com/minio/minio-go/v7/functional_tests.go index c0180b36b..43383d134 100644 --- a/vendor/github.com/minio/minio-go/v7/functional_tests.go +++ b/vendor/github.com/minio/minio-go/v7/functional_tests.go @@ -160,7 +160,7 @@ func logError(testName, function string, args map[string]interface{}, startTime } else { logFailure(testName, function, args, startTime, alert, message, err) if !isRunOnFail() { - panic(err) + panic(fmt.Sprintf("Test failed with message: %s, err: %v", message, err)) } } } @@ -393,6 +393,42 @@ func getFuncNameLoc(caller int) string { return strings.TrimPrefix(runtime.FuncForPC(pc).Name(), "main.") } +type ClientConfig struct { + // MinIO client configuration + TraceOn bool // Turn on tracing of HTTP requests and responses to stderr + CredsV2 bool // Use V2 credentials if true, otherwise use v4 + TrailingHeaders bool // Send trailing headers in requests +} + +func NewClient(config ClientConfig) (*minio.Client, error) { + // Instantiate new MinIO client + var creds *credentials.Credentials + if config.CredsV2 { + creds = credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), "") + } else { + creds = credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), "") + } + opts := &minio.Options{ + Creds: creds, + Transport: createHTTPTransport(), + Secure: mustParseBool(os.Getenv(enableHTTPS)), + TrailingHeaders: config.TrailingHeaders, + } + client, err := minio.New(os.Getenv(serverEndpoint), opts) + if err != nil { + return nil, err + } + + if config.TraceOn { + client.TraceOn(os.Stderr) + } + + // Set user agent. + client.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + + return client, nil +} + // Tests bucket re-create errors. func testMakeBucketError() { region := "eu-central-1" @@ -407,27 +443,12 @@ function := "MakeBucket(bucketName, region)" "region": region, } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - Transport: createHTTPTransport(), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -462,20 +483,12 @@ function := "PutObject(bucketName, objectName, reader, objectSize, opts)" "objectName": "", "opts.UserMetadata": "", } - rand.Seed(startTime.Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - Transport: createHTTPTransport(), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client creation failed", err) return } - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -531,27 +544,12 @@ function := "MakeBucket(bucketName, region)" "region": region, } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -598,27 +596,12 @@ function := "PutObject(bucketName, objectName, reader, opts)" "opts": "objectContentType", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -697,27 +680,12 @@ function := "ListObjectVersions(bucketName, prefix, recursive)" "recursive": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -817,27 +785,12 @@ func testStatObjectWithVersioning() { function := "StatObject" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -935,27 +888,12 @@ func testGetObjectWithVersioning() { function := "GetObject()" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -1075,27 +1013,12 @@ func testPutObjectWithVersioning() { function := "GetObject()" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -1223,28 +1146,12 @@ func testListMultipartUpload() { function := "GetObject()" args := map[string]interface{}{} - // Instantiate new minio client object. - opts := &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - } - c, err := minio.New(os.Getenv(serverEndpoint), opts) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - core, err := minio.NewCore(os.Getenv(serverEndpoint), opts) - if err != nil { - logError(testName, function, args, startTime, "", "MinIO core client object creation failed", err) - return - } - - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + core := minio.Core{Client: c} // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") @@ -1347,27 +1254,12 @@ func testCopyObjectWithVersioning() { function := "CopyObject()" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -1485,27 +1377,12 @@ func testConcurrentCopyObjectWithVersioning() { function := "CopyObject()" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -1646,27 +1523,12 @@ func testComposeObjectWithVersioning() { function := "ComposeObject()" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -1787,27 +1649,12 @@ func testRemoveObjectWithVersioning() { function := "DeleteObject()" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -1900,27 +1747,12 @@ func testRemoveObjectsWithVersioning() { function := "DeleteObjects()" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -1996,27 +1828,12 @@ func testObjectTaggingWithVersioning() { function := "{Get,Set,Remove}ObjectTagging()" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -2164,27 +1981,12 @@ function := "PutObject(bucketName, objectName, reader,size, opts)" return } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -2230,7 +2032,7 @@ function := "PutObject(bucketName, objectName, reader,size, opts)" h := test.cs.Hasher() h.Reset() - // Test with Wrong CRC. + // Test with a bad CRC - we haven't called h.Write(b), so this is a checksum of empty data meta[test.cs.Key()] = base64.StdEncoding.EncodeToString(h.Sum(nil)) args["metadata"] = meta args["range"] = "false" @@ -2350,28 +2152,12 @@ function := "PutObject(bucketName, objectName, reader,size, opts)" return } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - TrailingHeaders: true, - }) + c, err := NewClient(ClientConfig{TrailingHeaders: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -2541,28 +2327,12 @@ function := "PutObject(bucketName, objectName, reader,size, opts)" return } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - TrailingHeaders: trailing, - }) + c, err := NewClient(ClientConfig{TrailingHeaders: trailing}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -2620,7 +2390,7 @@ function := "PutObject(bucketName, objectName, reader,size, opts)" cmpChecksum := func(got, want string) { if want != got { logError(testName, function, args, startTime, "", "checksum mismatch", fmt.Errorf("want %s, got %s", want, got)) - //fmt.Printf("want %s, got %s\n", want, got) + // fmt.Printf("want %s, got %s\n", want, got) return } } @@ -2741,25 +2511,12 @@ function := "PutObject(bucketName, objectName, reader,size, opts)" return } - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - TrailingHeaders: true, - }) + c, err := NewClient(ClientConfig{TrailingHeaders: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -2881,7 +2638,6 @@ function := "PutObject(bucketName, objectName, reader,size, opts)" test.ChecksumCRC32C = hashMultiPart(b, int(test.PO.PartSize), test.hasher) // Set correct CRC. - // c.TraceOn(os.Stderr) resp, err := c.PutObject(context.Background(), bucketName, objectName, bytes.NewReader(b), int64(bufSize), test.PO) if err != nil { logError(testName, function, args, startTime, "", "PutObject failed", err) @@ -2933,6 +2689,8 @@ function := "PutObject(bucketName, objectName, reader,size, opts)" delete(args, "metadata") } + + logSuccess(testName, function, args, startTime) } // Test PutObject with custom checksums. @@ -2952,25 +2710,12 @@ function := "PutObject(bucketName, objectName, reader,size, opts)" return } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - TrailingHeaders: true, - }) + c, err := NewClient(ClientConfig{TrailingHeaders: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -2997,8 +2742,6 @@ function := "PutObject(bucketName, objectName, reader,size, opts)" {header: "x-amz-checksum-crc32c", hasher: crc32.New(crc32.MakeTable(crc32.Castagnoli))}, } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) // defer c.TraceOff() for i, test := range tests { @@ -3108,20 +2851,12 @@ function := "GetObjectAttributes(ctx, bucketName, objectName, opts)" return } - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - TrailingHeaders: true, - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{TrailingHeaders: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName err = c.MakeBucket( @@ -3315,19 +3050,12 @@ function := "GetObjectAttributes(ctx, bucketName, objectName, opts)" return } - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - TrailingHeaders: true, - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - Transport: createHTTPTransport(), - }) + c, err := NewClient(ClientConfig{TrailingHeaders: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName err = c.MakeBucket( @@ -3401,19 +3129,12 @@ function := "GetObjectAttributes(ctx, bucketName, objectName, opts)" return } - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - TrailingHeaders: true, - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{TrailingHeaders: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) unknownBucket := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-bucket-") unknownObject := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-object-") @@ -3657,27 +3378,12 @@ function := "PutObject(bucketName, objectName, reader,size, opts)" return } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -3764,27 +3470,12 @@ function := "PutObject(bucketName, objectName, reader, size, opts)" "opts": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -3834,27 +3525,12 @@ function := "PutObject(bucketName, objectName, reader,size,opts)" "opts": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -3906,27 +3582,12 @@ func testGetObjectSeekEnd() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -4029,27 +3690,12 @@ func testGetObjectClosedTwice() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -4120,26 +3766,13 @@ function := "RemoveObjects(ctx, bucketName, objectsCh)" "bucketName": "", } - // Seed random based on current tie. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Enable tracing, write to stdout. - // c.TraceOn(os.Stderr) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -4217,27 +3850,12 @@ function := "RemoveObjects(bucketName, objectsCh)" "bucketName": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - - // Enable tracing, write to stdout. - // c.TraceOn(os.Stderr) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -4301,27 +3919,12 @@ function := "RemoveObjects(bucketName, objectsCh)" "bucketName": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - - // Enable tracing, write to stdout. - // c.TraceOn(os.Stderr) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -4437,27 +4040,12 @@ function := "FPutObject(bucketName, objectName, fileName, opts)" "opts": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -4543,27 +4131,12 @@ function := "FPutObject(bucketName, objectName, fileName, opts)" "opts": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") location := "us-east-1" @@ -4713,27 +4286,13 @@ function := "FPutObject(bucketName, objectName, fileName, opts)" "fileName": "", "opts": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -4814,27 +4373,13 @@ function := "FPutObjectContext(ctx, bucketName, objectName, fileName, opts)" "objectName": "", "opts": "minio.PutObjectOptions{ContentType:objectContentType}", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -4919,24 +4464,12 @@ function := "PutObject(ctx, bucketName, objectName, fileName, opts)" "opts": "", } - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Make a new bucket. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -4989,27 +4522,12 @@ func testGetObjectS3Zip() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{"x-minio-extract": true} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -5173,27 +4691,12 @@ func testGetObjectReadSeekFunctional() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -5343,27 +4846,12 @@ func testGetObjectReadAtFunctional() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -5521,27 +5009,12 @@ func testGetObjectReadAtWhenEOFWasReached() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -5641,27 +5114,12 @@ function := "PresignedPostPolicy(policy)" "policy": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") @@ -5689,50 +5147,22 @@ function := "PresignedPostPolicy(policy)" return } - // Save the data - _, err = c.PutObject(context.Background(), bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), minio.PutObjectOptions{ContentType: "binary/octet-stream"}) - if err != nil { - logError(testName, function, args, startTime, "", "PutObject failed", err) - return - } - policy := minio.NewPostPolicy() - - if err := policy.SetBucket(""); err == nil { - logError(testName, function, args, startTime, "", "SetBucket did not fail for invalid conditions", err) - return - } - if err := policy.SetKey(""); err == nil { - logError(testName, function, args, startTime, "", "SetKey did not fail for invalid conditions", err) - return - } - if err := policy.SetExpires(time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC)); err == nil { - logError(testName, function, args, startTime, "", "SetExpires did not fail for invalid conditions", err) - return - } - if err := policy.SetContentType(""); err == nil { - logError(testName, function, args, startTime, "", "SetContentType did not fail for invalid conditions", err) - return - } - if err := policy.SetContentLengthRange(1024*1024, 1024); err == nil { - logError(testName, function, args, startTime, "", "SetContentLengthRange did not fail for invalid conditions", err) - return - } - if err := policy.SetUserMetadata("", ""); err == nil { - logError(testName, function, args, startTime, "", "SetUserMetadata did not fail for invalid conditions", err) - return - } - policy.SetBucket(bucketName) policy.SetKey(objectName) policy.SetExpires(time.Now().UTC().AddDate(0, 0, 10)) // expires in 10 days policy.SetContentType("binary/octet-stream") policy.SetContentLengthRange(10, 1024*1024) policy.SetUserMetadata(metadataKey, metadataValue) + policy.SetContentEncoding("gzip") // Add CRC32C checksum := minio.ChecksumCRC32C.ChecksumBytes(buf) - policy.SetChecksum(checksum) + err = policy.SetChecksum(checksum) + if err != nil { + logError(testName, function, args, startTime, "", "SetChecksum failed", err) + return + } args["policy"] = policy.String() @@ -5828,7 +5258,7 @@ function := "PresignedPostPolicy(policy)" expectedLocation := scheme + os.Getenv(serverEndpoint) + "/" + bucketName + "/" + objectName expectedLocationBucketDNS := scheme + bucketName + "." + os.Getenv(serverEndpoint) + "/" + objectName - if !strings.Contains(expectedLocation, "s3.amazonaws.com/") { + if !strings.Contains(expectedLocation, ".amazonaws.com/") { // Test when not against AWS S3. if val, ok := res.Header["Location"]; ok { if val[0] != expectedLocation && val[0] != expectedLocationBucketDNS { @@ -5840,9 +5270,194 @@ function := "PresignedPostPolicy(policy)" return } } - want := checksum.Encoded() - if got := res.Header.Get("X-Amz-Checksum-Crc32c"); got != want { - logError(testName, function, args, startTime, "", fmt.Sprintf("Want checksum %q, got %q", want, got), nil) + wantChecksumCrc32c := checksum.Encoded() + if got := res.Header.Get("X-Amz-Checksum-Crc32c"); got != wantChecksumCrc32c { + logError(testName, function, args, startTime, "", fmt.Sprintf("Want checksum %q, got %q", wantChecksumCrc32c, got), nil) + return + } + + // Ensure that when we subsequently GetObject, the checksum is returned + gopts := minio.GetObjectOptions{Checksum: true} + r, err := c.GetObject(context.Background(), bucketName, objectName, gopts) + if err != nil { + logError(testName, function, args, startTime, "", "GetObject failed", err) + return + } + st, err := r.Stat() + if err != nil { + logError(testName, function, args, startTime, "", "Stat failed", err) + return + } + if st.ChecksumCRC32C != wantChecksumCrc32c { + logError(testName, function, args, startTime, "", fmt.Sprintf("Want checksum %s, got %s", wantChecksumCrc32c, st.ChecksumCRC32C), nil) + return + } + + logSuccess(testName, function, args, startTime) +} + +// testPresignedPostPolicyWrongFile tests that when we have a policy with a checksum, we cannot POST the wrong file +func testPresignedPostPolicyWrongFile() { + // initialize logging params + startTime := time.Now() + testName := getFuncName() + function := "PresignedPostPolicy(policy)" + args := map[string]interface{}{ + "policy": "", + } + + c, err := NewClient(ClientConfig{}) + if err != nil { + logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) + return + } + + // Generate a new random bucket name. + bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") + + // Make a new bucket in 'us-east-1' (source bucket). + err = c.MakeBucket(context.Background(), bucketName, minio.MakeBucketOptions{Region: "us-east-1"}) + if err != nil { + logError(testName, function, args, startTime, "", "MakeBucket failed", err) + return + } + + defer cleanupBucket(bucketName, c) + + // Generate 33K of data. + reader := getDataReader("datafile-33-kB") + defer reader.Close() + + objectName := randString(60, rand.NewSource(time.Now().UnixNano()), "") + // Azure requires the key to not start with a number + metadataKey := randString(60, rand.NewSource(time.Now().UnixNano()), "user") + metadataValue := randString(60, rand.NewSource(time.Now().UnixNano()), "") + + buf, err := io.ReadAll(reader) + if err != nil { + logError(testName, function, args, startTime, "", "ReadAll failed", err) + return + } + + policy := minio.NewPostPolicy() + policy.SetBucket(bucketName) + policy.SetKey(objectName) + policy.SetExpires(time.Now().UTC().AddDate(0, 0, 10)) // expires in 10 days + policy.SetContentType("binary/octet-stream") + policy.SetContentLengthRange(10, 1024*1024) + policy.SetUserMetadata(metadataKey, metadataValue) + + // Add CRC32C of the 33kB file that the policy will explicitly allow. + checksum := minio.ChecksumCRC32C.ChecksumBytes(buf) + err = policy.SetChecksum(checksum) + if err != nil { + logError(testName, function, args, startTime, "", "SetChecksum failed", err) + return + } + + args["policy"] = policy.String() + + presignedPostPolicyURL, formData, err := c.PresignedPostPolicy(context.Background(), policy) + if err != nil { + logError(testName, function, args, startTime, "", "PresignedPostPolicy failed", err) + return + } + + // At this stage, we have a policy that allows us to upload datafile-33-kB. + // Test that uploading datafile-10-kB, with a different checksum, fails as expected + filePath := getMintDataDirFilePath("datafile-10-kB") + if filePath == "" { + // Make a temp file with 10 KB data. + file, err := os.CreateTemp(os.TempDir(), "PresignedPostPolicyTest") + if err != nil { + logError(testName, function, args, startTime, "", "TempFile creation failed", err) + return + } + if _, err = io.Copy(file, getDataReader("datafile-10-kB")); err != nil { + logError(testName, function, args, startTime, "", "Copy failed", err) + return + } + if err = file.Close(); err != nil { + logError(testName, function, args, startTime, "", "File Close failed", err) + return + } + filePath = file.Name() + } + fileReader := getDataReader("datafile-10-kB") + defer fileReader.Close() + buf10k, err := io.ReadAll(fileReader) + if err != nil { + logError(testName, function, args, startTime, "", "ReadAll failed", err) + return + } + otherChecksum := minio.ChecksumCRC32C.ChecksumBytes(buf10k) + + var formBuf bytes.Buffer + writer := multipart.NewWriter(&formBuf) + for k, v := range formData { + if k == "x-amz-checksum-crc32c" { + v = otherChecksum.Encoded() + } + writer.WriteField(k, v) + } + + // Add file to post request + f, err := os.Open(filePath) + defer f.Close() + if err != nil { + logError(testName, function, args, startTime, "", "File open failed", err) + return + } + w, err := writer.CreateFormFile("file", filePath) + if err != nil { + logError(testName, function, args, startTime, "", "CreateFormFile failed", err) + return + } + _, err = io.Copy(w, f) + if err != nil { + logError(testName, function, args, startTime, "", "Copy failed", err) + return + } + writer.Close() + + httpClient := &http.Client{ + Timeout: 30 * time.Second, + Transport: createHTTPTransport(), + } + args["url"] = presignedPostPolicyURL.String() + + req, err := http.NewRequest(http.MethodPost, presignedPostPolicyURL.String(), bytes.NewReader(formBuf.Bytes())) + if err != nil { + logError(testName, function, args, startTime, "", "HTTP request failed", err) + return + } + + req.Header.Set("Content-Type", writer.FormDataContentType()) + + // Make the POST request with the form data. + res, err := httpClient.Do(req) + if err != nil { + logError(testName, function, args, startTime, "", "HTTP request failed", err) + return + } + defer res.Body.Close() + if res.StatusCode != http.StatusForbidden { + logError(testName, function, args, startTime, "", "HTTP request unexpected status", errors.New(res.Status)) + return + } + + // Read the response body, ensure it has checksum failure message + resBody, err := io.ReadAll(res.Body) + if err != nil { + logError(testName, function, args, startTime, "", "ReadAll failed", err) + return + } + + // Normalize the response body, because S3 uses quotes around the policy condition components + // in the error message, MinIO does not. + resBodyStr := strings.ReplaceAll(string(resBody), `"`, "") + if !strings.Contains(resBodyStr, "Policy Condition failed: [eq, $x-amz-checksum-crc32c, aHnJMw==]") { + logError(testName, function, args, startTime, "", "Unexpected response body", errors.New(resBodyStr)) return } @@ -5857,27 +5472,12 @@ func testCopyObject() { function := "CopyObject(dst, src)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") @@ -6052,27 +5652,12 @@ func testSSECEncryptedGetObjectReadSeekFunctional() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -6235,27 +5820,12 @@ func testSSES3EncryptedGetObjectReadSeekFunctional() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -6416,27 +5986,12 @@ func testSSECEncryptedGetObjectReadAtFunctional() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -6600,27 +6155,12 @@ func testSSES3EncryptedGetObjectReadAtFunctional() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -6785,27 +6325,13 @@ function := "PutEncryptedObject(bucketName, objectName, reader, sse)" "objectName": "", "sse": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -6895,27 +6421,13 @@ function := "FPutEncryptedObject(bucketName, objectName, filePath, contentType, "contentType": "", "sse": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -7018,27 +6530,13 @@ function := "PutEncryptedObject(bucketName, objectName, reader, sse)" "objectName": "", "sse": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -7126,27 +6624,13 @@ function := "FPutEncryptedObject(bucketName, objectName, filePath, contentType, "contentType": "", "sse": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -7255,26 +6739,12 @@ function := "SetBucketNotification(bucketName)" return } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable to debug - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - bucketName := os.Getenv("NOTIFY_BUCKET") args["bucketName"] = bucketName @@ -7350,26 +6820,12 @@ function := "testFunctional()" functionAll := "" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, nil, startTime, "", "MinIO client object creation failed", err) return } - // Enable to debug - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") @@ -8029,24 +7485,12 @@ func testGetObjectModified() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Make a new bucket. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -8125,24 +7569,12 @@ function := "PutObject(bucketName, objectName, fileToUpload, contentType)" "contentType": "binary/octet-stream", } - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Make a new bucket. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -8245,27 +7677,12 @@ function := "MakeBucket(bucketName, region)" "region": "eu-west-1", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") region := "eu-west-1" @@ -8305,27 +7722,12 @@ function := "MakeBucket(bucketName, region)" "region": "eu-west-1", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -8396,27 +7798,12 @@ function := "FPutObject(bucketName, objectName, fileName, opts)" "opts": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -8557,27 +7944,12 @@ function := "MakeBucket(bucketName, region)" "region": "eu-west-1", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -8620,27 +7992,12 @@ func testGetObjectReadSeekFunctionalV2() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -8775,27 +8132,12 @@ func testGetObjectReadAtFunctionalV2() { function := "GetObject(bucketName, objectName)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -8937,27 +8279,12 @@ func testCopyObjectV2() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") @@ -9156,13 +8483,7 @@ func testComposeObjectErrorCasesV2() { function := "ComposeObject(destination, sourceList)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9254,13 +8575,7 @@ func testCompose10KSourcesV2() { function := "ComposeObject(destination, sourceList)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9276,13 +8591,7 @@ func testEncryptedEmptyObject() { function := "PutObject(bucketName, objectName, reader, objectSize, opts)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return @@ -9430,7 +8739,7 @@ function := "CopyObject(destination, source)" dstEncryption = sseDst } // 3. get copied object and check if content is equal - coreClient := minio.Core{c} + coreClient := minio.Core{Client: c} reader, _, _, err := coreClient.GetObject(context.Background(), bucketName, "dstObject", minio.GetObjectOptions{ServerSideEncryption: dstEncryption}) if err != nil { logError(testName, function, args, startTime, "", "GetObject failed", err) @@ -9537,13 +8846,7 @@ func testUnencryptedToSSECCopyObject() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9552,7 +8855,6 @@ function := "CopyObject(destination, source)" bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") sseDst := encrypt.DefaultPBKDF([]byte("correct horse battery staple"), []byte(bucketName+"dstObject")) - // c.TraceOn(os.Stderr) testEncryptedCopyObjectWrapper(c, bucketName, nil, sseDst) } @@ -9564,13 +8866,7 @@ func testUnencryptedToSSES3CopyObject() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9580,7 +8876,6 @@ function := "CopyObject(destination, source)" var sseSrc encrypt.ServerSide sseDst := encrypt.NewSSE() - // c.TraceOn(os.Stderr) testEncryptedCopyObjectWrapper(c, bucketName, sseSrc, sseDst) } @@ -9592,13 +8887,7 @@ func testUnencryptedToUnencryptedCopyObject() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9607,7 +8896,6 @@ function := "CopyObject(destination, source)" bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") var sseSrc, sseDst encrypt.ServerSide - // c.TraceOn(os.Stderr) testEncryptedCopyObjectWrapper(c, bucketName, sseSrc, sseDst) } @@ -9619,13 +8907,7 @@ func testEncryptedSSECToSSECCopyObject() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9635,7 +8917,6 @@ function := "CopyObject(destination, source)" sseSrc := encrypt.DefaultPBKDF([]byte("correct horse battery staple"), []byte(bucketName+"srcObject")) sseDst := encrypt.DefaultPBKDF([]byte("correct horse battery staple"), []byte(bucketName+"dstObject")) - // c.TraceOn(os.Stderr) testEncryptedCopyObjectWrapper(c, bucketName, sseSrc, sseDst) } @@ -9647,13 +8928,7 @@ func testEncryptedSSECToSSES3CopyObject() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9663,7 +8938,6 @@ function := "CopyObject(destination, source)" sseSrc := encrypt.DefaultPBKDF([]byte("correct horse battery staple"), []byte(bucketName+"srcObject")) sseDst := encrypt.NewSSE() - // c.TraceOn(os.Stderr) testEncryptedCopyObjectWrapper(c, bucketName, sseSrc, sseDst) } @@ -9675,13 +8949,7 @@ func testEncryptedSSECToUnencryptedCopyObject() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9691,7 +8959,6 @@ function := "CopyObject(destination, source)" sseSrc := encrypt.DefaultPBKDF([]byte("correct horse battery staple"), []byte(bucketName+"srcObject")) var sseDst encrypt.ServerSide - // c.TraceOn(os.Stderr) testEncryptedCopyObjectWrapper(c, bucketName, sseSrc, sseDst) } @@ -9703,13 +8970,7 @@ func testEncryptedSSES3ToSSECCopyObject() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9719,7 +8980,6 @@ function := "CopyObject(destination, source)" sseSrc := encrypt.NewSSE() sseDst := encrypt.DefaultPBKDF([]byte("correct horse battery staple"), []byte(bucketName+"dstObject")) - // c.TraceOn(os.Stderr) testEncryptedCopyObjectWrapper(c, bucketName, sseSrc, sseDst) } @@ -9731,13 +8991,7 @@ func testEncryptedSSES3ToSSES3CopyObject() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9747,7 +9001,6 @@ function := "CopyObject(destination, source)" sseSrc := encrypt.NewSSE() sseDst := encrypt.NewSSE() - // c.TraceOn(os.Stderr) testEncryptedCopyObjectWrapper(c, bucketName, sseSrc, sseDst) } @@ -9759,13 +9012,7 @@ func testEncryptedSSES3ToUnencryptedCopyObject() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9775,7 +9022,6 @@ function := "CopyObject(destination, source)" sseSrc := encrypt.NewSSE() var sseDst encrypt.ServerSide - // c.TraceOn(os.Stderr) testEncryptedCopyObjectWrapper(c, bucketName, sseSrc, sseDst) } @@ -9787,13 +9033,7 @@ func testEncryptedCopyObjectV2() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9803,7 +9043,6 @@ function := "CopyObject(destination, source)" sseSrc := encrypt.DefaultPBKDF([]byte("correct horse battery staple"), []byte(bucketName+"srcObject")) sseDst := encrypt.DefaultPBKDF([]byte("correct horse battery staple"), []byte(bucketName+"dstObject")) - // c.TraceOn(os.Stderr) testEncryptedCopyObjectWrapper(c, bucketName, sseSrc, sseDst) } @@ -9814,13 +9053,7 @@ func testDecryptedCopyObject() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return @@ -9874,26 +9107,14 @@ func testSSECMultipartEncryptedToSSECCopyObjectPart() { function := "CopyObjectPart(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - client, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + client, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return } // Instantiate new core client object. - c := minio.Core{client} - - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + c := minio.Core{Client: client} // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test") @@ -10072,26 +9293,14 @@ func testSSECEncryptedToSSECCopyObjectPart() { function := "CopyObjectPart(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - client, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + client, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return } // Instantiate new core client object. - c := minio.Core{client} - - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + c := minio.Core{Client: client} // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test") @@ -10250,26 +9459,14 @@ func testSSECEncryptedToUnencryptedCopyPart() { function := "CopyObjectPart(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - client, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + client, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return } // Instantiate new core client object. - c := minio.Core{client} - - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + c := minio.Core{Client: client} // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test") @@ -10427,26 +9624,14 @@ func testSSECEncryptedToSSES3CopyObjectPart() { function := "CopyObjectPart(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - client, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + client, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return } // Instantiate new core client object. - c := minio.Core{client} - - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + c := minio.Core{Client: client} // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test") @@ -10607,26 +9792,14 @@ func testUnencryptedToSSECCopyObjectPart() { function := "CopyObjectPart(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - client, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + client, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return } // Instantiate new core client object. - c := minio.Core{client} - - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + c := minio.Core{Client: client} // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test") @@ -10782,26 +9955,14 @@ func testUnencryptedToUnencryptedCopyPart() { function := "CopyObjectPart(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - client, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + client, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return } // Instantiate new core client object. - c := minio.Core{client} - - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + c := minio.Core{Client: client} // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test") @@ -10953,26 +10114,14 @@ func testUnencryptedToSSES3CopyObjectPart() { function := "CopyObjectPart(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - client, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + client, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return } // Instantiate new core client object. - c := minio.Core{client} - - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + c := minio.Core{Client: client} // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test") @@ -11126,26 +10275,14 @@ func testSSES3EncryptedToSSECCopyObjectPart() { function := "CopyObjectPart(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - client, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + client, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return } // Instantiate new core client object. - c := minio.Core{client} - - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + c := minio.Core{Client: client} // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test") @@ -11302,26 +10439,14 @@ func testSSES3EncryptedToUnencryptedCopyPart() { function := "CopyObjectPart(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - client, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + client, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return } // Instantiate new core client object. - c := minio.Core{client} - - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + c := minio.Core{Client: client} // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test") @@ -11474,26 +10599,14 @@ func testSSES3EncryptedToSSES3CopyObjectPart() { function := "CopyObjectPart(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - client, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + client, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return } // Instantiate new core client object. - c := minio.Core{client} - - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) + c := minio.Core{Client: client} // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test") @@ -11648,19 +10761,12 @@ func testUserMetadataCopying() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // c.TraceOn(os.Stderr) testUserMetadataCopyingWrapper(c) } @@ -11825,19 +10931,12 @@ func testUserMetadataCopyingV2() { function := "CopyObject(destination, source)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client v2 object creation failed", err) return } - // c.TraceOn(os.Stderr) testUserMetadataCopyingWrapper(c) } @@ -11848,13 +10947,7 @@ function := "testStorageClassMetadataPutObject()" args := map[string]interface{}{} testName := getFuncName() - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return @@ -11936,13 +11029,7 @@ function := "testStorageClassInvalidMetadataPutObject()" args := map[string]interface{}{} testName := getFuncName() - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return @@ -11979,13 +11066,7 @@ function := "testStorageClassMetadataCopyObject()" args := map[string]interface{}{} testName := getFuncName() - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - Transport: createHTTPTransport(), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO v4 client object creation failed", err) return @@ -12106,27 +11187,12 @@ function := "PutObject(bucketName, objectName, reader, size, opts)" "opts": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { - logError(testName, function, args, startTime, "", "MinIO client v2 object creation failed", err) + logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -12182,27 +11248,12 @@ function := "PutObject(bucketName, objectName, reader,size,opts)" "opts": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { - logError(testName, function, args, startTime, "", "MinIO client v2 object creation failed", err) + logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -12273,27 +11324,12 @@ function := "PutObject(bucketName, objectName, reader, size, opts)" "opts": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { - logError(testName, function, args, startTime, "", "MinIO client v2 object creation failed", err) + logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -12338,13 +11374,7 @@ func testComposeObjectErrorCases() { function := "ComposeObject(destination, sourceList)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return @@ -12361,13 +11391,7 @@ func testCompose10KSources() { function := "ComposeObject(destination, sourceList)" args := map[string]interface{}{} - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return @@ -12385,26 +11409,12 @@ function := "testFunctionalV2()" functionAll := "" args := map[string]interface{}{} - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - Transport: createHTTPTransport(), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client v2 object creation failed", err) return } - // Enable to debug - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") location := "us-east-1" @@ -12838,27 +11848,13 @@ function := "GetObject(ctx, bucketName, objectName)" "bucketName": "", "objectName": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client v4 object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -12941,27 +11937,13 @@ function := "FGetObject(ctx, bucketName, objectName, fileName)" "objectName": "", "fileName": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client v4 object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -13033,24 +12015,12 @@ function := "GetObject(ctx, bucketName, objectName, fileName)" defer cancel() rng := rand.NewSource(time.Now().UnixNano()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client v4 object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rng, "minio-go-test-") args["bucketName"] = bucketName @@ -13140,27 +12110,13 @@ function := "GetObjectACL(ctx, bucketName, objectName)" "bucketName": "", "objectName": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client v4 object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -13318,24 +12274,12 @@ function := "PutObject(ctx, bucketName, objectName, reader, size, opts)" "size": "", "opts": "", } - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { - logError(testName, function, args, startTime, "", "MinIO client v2 object creation failed", err) + logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Make a new bucket. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -13390,27 +12334,13 @@ function := "GetObject(ctx, bucketName, objectName)" "bucketName": "", "objectName": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { - logError(testName, function, args, startTime, "", "MinIO client v2 object creation failed", err) + logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -13491,27 +12421,13 @@ function := "FGetObject(ctx, bucketName, objectName,fileName)" "objectName": "", "fileName": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV2(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{CredsV2: true}) if err != nil { - logError(testName, function, args, startTime, "", "MinIO client v2 object creation failed", err) + logError(testName, function, args, startTime, "", "MinIO v2 client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -13580,27 +12496,13 @@ function := "ListObjects(bucketName, objectPrefix, recursive, doneCh)" "objectPrefix": "", "recursive": "true", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client v4 object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -13684,24 +12586,12 @@ function := "SetBucketCors(bucketName, cors)" "cors": "", } - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Create or reuse a bucket that will get cors settings applied to it and deleted when done bucketName := os.Getenv("MINIO_GO_TEST_BUCKET_CORS") if bucketName == "" { @@ -14420,24 +13310,12 @@ function := "SetBucketCors(bucketName, cors)" "cors": "", } - // Instantiate new minio client object - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -14519,27 +13397,13 @@ function := "RemoveObjects(bucketName, objectsCh, opts)" "objectPrefix": "", "recursive": "true", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client v4 object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -14653,27 +13517,13 @@ function := "GetBucketTagging(bucketName)" args := map[string]interface{}{ "bucketName": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client v4 object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -14709,27 +13559,13 @@ function := "SetBucketTagging(bucketName, tags)" "bucketName": "", "tags": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client v4 object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -14795,27 +13631,13 @@ function := "RemoveBucketTagging(bucketName)" args := map[string]interface{}{ "bucketName": "", } - // Seed random based on current time. - rand.Seed(time.Now().Unix()) - // Instantiate new minio client object. - c, err := minio.New(os.Getenv(serverEndpoint), - &minio.Options{ - Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""), - Transport: createHTTPTransport(), - Secure: mustParseBool(os.Getenv(enableHTTPS)), - }) + c, err := NewClient(ClientConfig{}) if err != nil { logError(testName, function, args, startTime, "", "MinIO client v4 object creation failed", err) return } - // Enable tracing, write to stderr. - // c.TraceOn(os.Stderr) - - // Set user agent. - c.SetAppInfo("MinIO-go-FunctionalTest", appVersion) - // Generate a new random bucket name. bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-") args["bucketName"] = bucketName @@ -14961,6 +13783,7 @@ func main() { testGetObjectReadAtFunctional() testGetObjectReadAtWhenEOFWasReached() testPresignedPostPolicy() + testPresignedPostPolicyWrongFile() testCopyObject() testComposeObjectErrorCases() testCompose10KSources() diff --git a/vendor/github.com/minio/minio-go/v7/pkg/credentials/sts_web_identity.go b/vendor/github.com/minio/minio-go/v7/pkg/credentials/sts_web_identity.go index f1c76c78e..787f0a38d 100644 --- a/vendor/github.com/minio/minio-go/v7/pkg/credentials/sts_web_identity.go +++ b/vendor/github.com/minio/minio-go/v7/pkg/credentials/sts_web_identity.go @@ -58,9 +58,10 @@ type WebIdentityResult struct { // WebIdentityToken - web identity token with expiry. type WebIdentityToken struct { - Token string - AccessToken string - Expiry int + Token string + AccessToken string + RefreshToken string + Expiry int } // A STSWebIdentity retrieves credentials from MinIO service, and keeps track if diff --git a/vendor/github.com/minio/minio-go/v7/post-policy.go b/vendor/github.com/minio/minio-go/v7/post-policy.go index 19687e027..26bf441b5 100644 --- a/vendor/github.com/minio/minio-go/v7/post-policy.go +++ b/vendor/github.com/minio/minio-go/v7/post-policy.go @@ -85,7 +85,7 @@ func (p *PostPolicy) SetExpires(t time.Time) error { // SetKey - Sets an object name for the policy based upload. func (p *PostPolicy) SetKey(key string) error { - if strings.TrimSpace(key) == "" || key == "" { + if strings.TrimSpace(key) == "" { return errInvalidArgument("Object name is empty.") } policyCond := policyCondition{ @@ -118,7 +118,7 @@ func (p *PostPolicy) SetKeyStartsWith(keyStartsWith string) error { // SetBucket - Sets bucket at which objects will be uploaded to. func (p *PostPolicy) SetBucket(bucketName string) error { - if strings.TrimSpace(bucketName) == "" || bucketName == "" { + if strings.TrimSpace(bucketName) == "" { return errInvalidArgument("Bucket name is empty.") } policyCond := policyCondition{ @@ -135,7 +135,7 @@ func (p *PostPolicy) SetBucket(bucketName string) error { // SetCondition - Sets condition for credentials, date and algorithm func (p *PostPolicy) SetCondition(matchType, condition, value string) error { - if strings.TrimSpace(value) == "" || value == "" { + if strings.TrimSpace(value) == "" { return errInvalidArgument("No value specified for condition") } @@ -156,7 +156,7 @@ func (p *PostPolicy) SetCondition(matchType, condition, value string) error { // SetTagging - Sets tagging for the object for this policy based upload. func (p *PostPolicy) SetTagging(tagging string) error { - if strings.TrimSpace(tagging) == "" || tagging == "" { + if strings.TrimSpace(tagging) == "" { return errInvalidArgument("No tagging specified.") } _, err := tags.ParseObjectXML(strings.NewReader(tagging)) @@ -178,7 +178,7 @@ func (p *PostPolicy) SetTagging(tagging string) error { // SetContentType - Sets content-type of the object for this policy // based upload. func (p *PostPolicy) SetContentType(contentType string) error { - if strings.TrimSpace(contentType) == "" || contentType == "" { + if strings.TrimSpace(contentType) == "" { return errInvalidArgument("No content type specified.") } policyCond := policyCondition{ @@ -211,7 +211,7 @@ func (p *PostPolicy) SetContentTypeStartsWith(contentTypeStartsWith string) erro // SetContentDisposition - Sets content-disposition of the object for this policy func (p *PostPolicy) SetContentDisposition(contentDisposition string) error { - if strings.TrimSpace(contentDisposition) == "" || contentDisposition == "" { + if strings.TrimSpace(contentDisposition) == "" { return errInvalidArgument("No content disposition specified.") } policyCond := policyCondition{ @@ -226,27 +226,44 @@ func (p *PostPolicy) SetContentDisposition(contentDisposition string) error { return nil } +// SetContentEncoding - Sets content-encoding of the object for this policy +func (p *PostPolicy) SetContentEncoding(contentEncoding string) error { + if strings.TrimSpace(contentEncoding) == "" { + return errInvalidArgument("No content encoding specified.") + } + policyCond := policyCondition{ + matchType: "eq", + condition: "$Content-Encoding", + value: contentEncoding, + } + if err := p.addNewPolicy(policyCond); err != nil { + return err + } + p.formData["Content-Encoding"] = contentEncoding + return nil +} + // SetContentLengthRange - Set new min and max content length // condition for all incoming uploads. -func (p *PostPolicy) SetContentLengthRange(min, max int64) error { - if min > max { +func (p *PostPolicy) SetContentLengthRange(minLen, maxLen int64) error { + if minLen > maxLen { return errInvalidArgument("Minimum limit is larger than maximum limit.") } - if min < 0 { + if minLen < 0 { return errInvalidArgument("Minimum limit cannot be negative.") } - if max <= 0 { + if maxLen <= 0 { return errInvalidArgument("Maximum limit cannot be non-positive.") } - p.contentLengthRange.min = min - p.contentLengthRange.max = max + p.contentLengthRange.min = minLen + p.contentLengthRange.max = maxLen return nil } // SetSuccessActionRedirect - Sets the redirect success url of the object for this policy // based upload. func (p *PostPolicy) SetSuccessActionRedirect(redirect string) error { - if strings.TrimSpace(redirect) == "" || redirect == "" { + if strings.TrimSpace(redirect) == "" { return errInvalidArgument("Redirect is empty") } policyCond := policyCondition{ @@ -264,7 +281,7 @@ func (p *PostPolicy) SetSuccessActionRedirect(redirect string) error { // SetSuccessStatusAction - Sets the status success code of the object for this policy // based upload. func (p *PostPolicy) SetSuccessStatusAction(status string) error { - if strings.TrimSpace(status) == "" || status == "" { + if strings.TrimSpace(status) == "" { return errInvalidArgument("Status is empty") } policyCond := policyCondition{ @@ -282,10 +299,10 @@ func (p *PostPolicy) SetSuccessStatusAction(status string) error { // SetUserMetadata - Set user metadata as a key/value couple. // Can be retrieved through a HEAD request or an event. func (p *PostPolicy) SetUserMetadata(key, value string) error { - if strings.TrimSpace(key) == "" || key == "" { + if strings.TrimSpace(key) == "" { return errInvalidArgument("Key is empty") } - if strings.TrimSpace(value) == "" || value == "" { + if strings.TrimSpace(value) == "" { return errInvalidArgument("Value is empty") } headerName := fmt.Sprintf("x-amz-meta-%s", key) @@ -304,7 +321,7 @@ func (p *PostPolicy) SetUserMetadata(key, value string) error { // SetUserMetadataStartsWith - Set how an user metadata should starts with. // Can be retrieved through a HEAD request or an event. func (p *PostPolicy) SetUserMetadataStartsWith(key, value string) error { - if strings.TrimSpace(key) == "" || key == "" { + if strings.TrimSpace(key) == "" { return errInvalidArgument("Key is empty") } headerName := fmt.Sprintf("x-amz-meta-%s", key) @@ -321,11 +338,29 @@ func (p *PostPolicy) SetUserMetadataStartsWith(key, value string) error { } // SetChecksum sets the checksum of the request. -func (p *PostPolicy) SetChecksum(c Checksum) { +func (p *PostPolicy) SetChecksum(c Checksum) error { if c.IsSet() { p.formData[amzChecksumAlgo] = c.Type.String() p.formData[c.Type.Key()] = c.Encoded() + + policyCond := policyCondition{ + matchType: "eq", + condition: fmt.Sprintf("$%s", amzChecksumAlgo), + value: c.Type.String(), + } + if err := p.addNewPolicy(policyCond); err != nil { + return err + } + policyCond = policyCondition{ + matchType: "eq", + condition: fmt.Sprintf("$%s", c.Type.Key()), + value: c.Encoded(), + } + if err := p.addNewPolicy(policyCond); err != nil { + return err + } } + return nil } // SetEncryption - sets encryption headers for POST API diff --git a/vendor/github.com/minio/minio-go/v7/retry-continous.go b/vendor/github.com/minio/minio-go/v7/retry-continous.go index bfeea95f3..81fcf16f1 100644 --- a/vendor/github.com/minio/minio-go/v7/retry-continous.go +++ b/vendor/github.com/minio/minio-go/v7/retry-continous.go @@ -20,7 +20,7 @@ import "time" // newRetryTimerContinous creates a timer with exponentially increasing delays forever. -func (c *Client) newRetryTimerContinous(unit, cap time.Duration, jitter float64, doneCh chan struct{}) <-chan int { +func (c *Client) newRetryTimerContinous(baseSleep, maxSleep time.Duration, jitter float64, doneCh chan struct{}) <-chan int { attemptCh := make(chan int) // normalize jitter to the range [0, 1.0] @@ -39,10 +39,10 @@ func (c *Client) newRetryTimerContinous(unit, cap time.Duration, jitter float64, if attempt > maxAttempt { attempt = maxAttempt } - // sleep = random_between(0, min(cap, base * 2 ** attempt)) - sleep := unit * time.Duration(1< cap { - sleep = cap + // sleep = random_between(0, min(maxSleep, base * 2 ** attempt)) + sleep := baseSleep * time.Duration(1< maxSleep { + sleep = maxSleep } if jitter != NoJitter { sleep -= time.Duration(c.random.Float64() * float64(sleep) * jitter) diff --git a/vendor/github.com/minio/minio-go/v7/retry.go b/vendor/github.com/minio/minio-go/v7/retry.go index d15eb5901..4cc45920c 100644 --- a/vendor/github.com/minio/minio-go/v7/retry.go +++ b/vendor/github.com/minio/minio-go/v7/retry.go @@ -45,7 +45,7 @@ // newRetryTimer creates a timer with exponentially increasing // delays until the maximum retry attempts are reached. -func (c *Client) newRetryTimer(ctx context.Context, maxRetry int, unit, cap time.Duration, jitter float64) <-chan int { +func (c *Client) newRetryTimer(ctx context.Context, maxRetry int, baseSleep, maxSleep time.Duration, jitter float64) <-chan int { attemptCh := make(chan int) // computes the exponential backoff duration according to @@ -59,10 +59,10 @@ func (c *Client) newRetryTimer(ctx context.Context, maxRetry int, unit, cap time jitter = MaxJitter } - // sleep = random_between(0, min(cap, base * 2 ** attempt)) - sleep := unit * time.Duration(1< cap { - sleep = cap + // sleep = random_between(0, min(maxSleep, base * 2 ** attempt)) + sleep := baseSleep * time.Duration(1< maxSleep { + sleep = maxSleep } if jitter != NoJitter { sleep -= time.Duration(c.random.Float64() * float64(sleep) * jitter) diff --git a/vendor/modules.txt b/vendor/modules.txt index 4c57a75de..c5f13d968 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -488,7 +488,7 @@ github.com/miekg/dns # github.com/minio/md5-simd v1.1.2 ## explicit; go 1.14 github.com/minio/md5-simd -# github.com/minio/minio-go/v7 v7.0.80 +# github.com/minio/minio-go/v7 v7.0.81 ## explicit; go 1.22 github.com/minio/minio-go/v7 github.com/minio/minio-go/v7/pkg/cors From dbef5ee03b61d630b46696cfd04c08fcd5b702ce Mon Sep 17 00:00:00 2001 From: Phil Hagelberg Date: Mon, 2 Dec 2024 01:47:05 -0800 Subject: [PATCH 5/8] [chore] Replace Semaphore recommendation with Pinafore. (#3586) Neither Semaphore nor Pinafore are under active development, but Semaphore has archived its repository while Pinafore still gets occasional minor maintenance. Enafore has newer features, but it has accessibility bugs affecting screen readers that prevent it from being recommended at this time. --- CONTRIBUTING.md | 10 +++++----- README.md | 2 +- docs/faq.md | 2 +- .../getting_started/reverse_proxy/websocket.md | 2 +- docs/locales/zh/faq.md | 2 +- .../getting_started/reverse_proxy/websocket.md | 2 +- docs/locales/zh/repo/CONTRIBUTING.md | 10 +++++----- docs/locales/zh/repo/README.md | 2 +- web/template/index_apps.tmpl | 18 +++++++++--------- 9 files changed, 25 insertions(+), 25 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6b52d6b59..4fa148f37 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,7 +24,7 @@ These contribution guidelines were adapted from / inspired by those of Gitea (ht - [Finding your way around the code](#finding-your-way-around-the-code) - [Style / Linting / Formatting](#style--linting--formatting) - [Testing](#testing) - - [Standalone Testrig with Semaphore](#standalone-testrig-with-semaphore) + - [Standalone Testrig with Pinafore](#standalone-testrig-with-pinafore) - [Running automated tests](#running-automated-tests) - [SQLite](#sqlite) - [Postgres](#postgres) @@ -401,9 +401,9 @@ GoToSocial provides a [testrig](https://github.com/superseriousbusiness/gotosoci One thing that *isn't* mocked is the Database interface because it's just easier to use an in-memory SQLite database than to mock everything out. -#### Standalone Testrig with Semaphore +#### Standalone Testrig with Pinafore -You can launch a testrig as a standalone server running at localhost, which you can connect to using something like [Semaphore](https://github.com/NickColley/semaphore/). +You can launch a testrig as a standalone server running at localhost, which you can connect to using something like [Pinafore](https://github.com/nolanlawson/pinafore/). To do this, first build the gotosocial binary with `DEBUG=1 ./scripts/build.sh`. @@ -413,14 +413,14 @@ Then, launch the testrig with the `DEBUG` environment variable set by invoking t DEBUG=1 ./gotosocial testrig start ``` -To run Semaphore locally in dev mode, first clone the [Semaphore](https://github.com/NickColley/semaphore/) repository, and then run the following commands in the cloned directory: +To run Pinafore locally in dev mode, first clone the [Pinafore](https://github.com/nolanlawson/pinafore/) repository, and then run the following commands in the cloned directory: ```bash yarn # install dependencies yarn run dev ``` -The Semaphore instance will start running on `localhost:4002`. +The Pinafore instance will start running on `localhost:4002`. To connect to the testrig, navigate to `http://localhost:4002` and enter your instance name as `localhost:8080`. diff --git a/README.md b/README.md index c37af7533..3f9f357e2 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ The Mastodon API has become the de facto standard for client communication with Though most apps that implement the Mastodon API should work, GoToSocial is tested and works reliably with beautiful apps like: * [Tusky](https://tusky.app/) for Android -* [Semaphore](https://semaphore.social/) in the browser +* [Pinafore](https://pinafore.social/) in the browser * [Feditext](https://github.com/feditext/feditext) (beta) on iOS, iPadOS and macOS If you've used Mastodon with a third-party app before, you'll find using GoToSocial a breeze. diff --git a/docs/faq.md b/docs/faq.md index 521c97531..72fed557d 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -2,7 +2,7 @@ ## Where's the user interface? -GoToSocial is just a bare server for the most part and is designed to be used thru external applications. [Semaphore](https://semaphore.social/) in the browser, [Tusky](https://tusky.app/) for Android and [Feditext](https://github.com/feditext/feditext) for iOS, iPadOS and macOS are the best-supported. Anything that supports the Mastodon API should work, other than the features GoToSocial doesn't yet have. Permalinks and profile pages are served directly through GoToSocial as well as the settings panel, but most interaction goes through the apps. +GoToSocial is just a bare server for the most part and is designed to be used thru external applications. [Pinafore](https://pinafore.social/) in the browser, [Tusky](https://tusky.app/) for Android and [Feditext](https://github.com/feditext/feditext) for iOS, iPadOS and macOS are the best-supported. Anything that supports the Mastodon API should work, other than the features GoToSocial doesn't yet have. Permalinks and profile pages are served directly through GoToSocial as well as the settings panel, but most interaction goes through the apps. ## Why aren't my posts showing up on my profile page? diff --git a/docs/getting_started/reverse_proxy/websocket.md b/docs/getting_started/reverse_proxy/websocket.md index ec7c107a9..68d28bc5c 100644 --- a/docs/getting_started/reverse_proxy/websocket.md +++ b/docs/getting_started/reverse_proxy/websocket.md @@ -1,6 +1,6 @@ # WebSocket -GoToSocial uses the secure [WebSocket protocol](https://en.wikipedia.org/wiki/WebSocket) (aka `wss`) to allow for streaming updates of statuses and notifications via client apps like Semaphore. +GoToSocial uses the secure [WebSocket protocol](https://en.wikipedia.org/wiki/WebSocket) (aka `wss`) to allow for streaming updates of statuses and notifications via client apps like Pinafore. In order to use this functionality, you need to ensure that whatever proxy you've configured GoToSocial to run behind allows WebSocket connections through. diff --git a/docs/locales/zh/faq.md b/docs/locales/zh/faq.md index 8383d7462..a49272202 100644 --- a/docs/locales/zh/faq.md +++ b/docs/locales/zh/faq.md @@ -2,7 +2,7 @@ ## 用户界面在哪? -GoToSocial 的大部分内容只是一个裸服务端,用于通过第三方应用程序进行使用。可通过 [Semaphore](https://semaphore.social/) 在浏览器使用,可通过 [Tusky](https://tusky.app/) 在 Android 使用,可通过 [Feditext](https://github.com/feditext/feditext) 在 iOS、iPadOS 和 macOS 使用。这些应用程序兼容性最好。任何由 Mastodon API 提供的实例功能都应该可以工作,除非它们是 GoToSocial 尚不具备的功能。永久链接和个账户页是通过 GoToSocial 直接提供的,设置面板也是如此,但大多数交互都是通过应用程序完成的。 +GoToSocial 的大部分内容只是一个裸服务端,用于通过第三方应用程序进行使用。可通过 [Pinafore](https://pinafore.social/) 在浏览器使用,可通过 [Tusky](https://tusky.app/) 在 Android 使用,可通过 [Feditext](https://github.com/feditext/feditext) 在 iOS、iPadOS 和 macOS 使用。这些应用程序兼容性最好。任何由 Mastodon API 提供的实例功能都应该可以工作,除非它们是 GoToSocial 尚不具备的功能。永久链接和个账户页是通过 GoToSocial 直接提供的,设置面板也是如此,但大多数交互都是通过应用程序完成的。 ## 为什么我的贴文没有显示在我的账户页面上? diff --git a/docs/locales/zh/getting_started/reverse_proxy/websocket.md b/docs/locales/zh/getting_started/reverse_proxy/websocket.md index e1391ec45..f265edf37 100644 --- a/docs/locales/zh/getting_started/reverse_proxy/websocket.md +++ b/docs/locales/zh/getting_started/reverse_proxy/websocket.md @@ -1,6 +1,6 @@ # WebSocket -GoToSocial 使用安全的 [WebSocket 协议](https://en.wikipedia.org/wiki/WebSocket)(即 `wss`)来通过客户端应用程序(如 Semaphore)实现贴文和通知的实时更新。 +GoToSocial 使用安全的 [WebSocket 协议](https://en.wikipedia.org/wiki/WebSocket)(即 `wss`)来通过客户端应用程序(如 Pinafore)实现贴文和通知的实时更新。 为了使用此功能,你需要确保配置 GoToSocial 所在的代理允许 WebSocket 连接通过。 diff --git a/docs/locales/zh/repo/CONTRIBUTING.md b/docs/locales/zh/repo/CONTRIBUTING.md index 4d05b180e..4da713ad3 100644 --- a/docs/locales/zh/repo/CONTRIBUTING.md +++ b/docs/locales/zh/repo/CONTRIBUTING.md @@ -24,7 +24,7 @@ - [浏览代码结构](#浏览代码结构) - [风格/代码检查/格式化](#风格代码检查格式化) - [测试](#测试) - - [独立测试环境与 Semaphore](#独立测试环境与-semaphore) + - [独立测试环境与 Pinafore](#独立测试环境与-pinafore) - [运行自动化测试](#运行自动化测试) - [SQLite](#sqlite) - [Postgres](#postgres) @@ -400,9 +400,9 @@ GoToSocial 提供了一个 [testrig](https://github.com/superseriousbusiness/got 没有模拟的一个东西是数据库接口,因为使用内存中的 SQLite 数据库比模拟所有东西要简单得多。 -#### 独立测试环境与 Semaphore +#### 独立测试环境与 Pinafore -你可以启动一个在本地主机运行的独立测试服务器 testrig,可以通过 [Semaphore](https://github.com/NickColley/semaphore/) 连接。 +你可以启动一个在本地主机运行的独立测试服务器 testrig,可以通过 [Pinafore](https://github.com/NickColley/pinafore/) 连接。 要做到这一点,首先用 `DEBUG=1 ./scripts/build.sh` 构建 gotosocial 二进制文件。 @@ -412,14 +412,14 @@ GoToSocial 提供了一个 [testrig](https://github.com/superseriousbusiness/got DEBUG=1 ./gotosocial testrig start ``` -要在本地开发模式下运行 Semaphore,首先克隆 [Semaphore](https://github.com/NickColley/semaphore/) 存储库,然后在克隆的目录中运行以下命令: +要在本地开发模式下运行 Pinafore,首先克隆 [Pinafore](https://github.com/nolanlawson/pinafore/) 存储库,然后在克隆的目录中运行以下命令: ```bash yarn # 安装依赖 yarn run dev ``` -Semaphore 实例将在 `localhost:4002` 上启动。 +Pinafore 实例将在 `localhost:4002` 上启动。 要连接到 testrig,导航至 `http://localhost:4002`,并将在实例域名栏输入 `localhost:8080`。 diff --git a/docs/locales/zh/repo/README.md b/docs/locales/zh/repo/README.md index 82761a4b5..24b5591fc 100644 --- a/docs/locales/zh/repo/README.md +++ b/docs/locales/zh/repo/README.md @@ -113,7 +113,7 @@ Mastodon API 已成为客户端与联邦宇宙服务端通信的事实标准, 大多数实现 Mastodon API 的应用程序都应该可以使用 GoToSocial,但以下这些优秀的应用程序已经过测试,可与 GoToSocial 可靠地配合使用: * [Tusky](https://tusky.app/) 适用于 Android -* [Semaphore](https://semaphore.social/) 适用于浏览器 +* [Pinafore](https://pinafore.social/) 适用于浏览器 * [Feditext](https://github.com/feditext/feditext) (beta) 适用于 iOS, iPadOS 和 macOS 如果你之前通过第三方应用来使用 Mastodon,使用 GoToSocial 将是轻而易举的。 diff --git a/web/template/index_apps.tmpl b/web/template/index_apps.tmpl index 19a474692..480a12f0b 100644 --- a/web/template/index_apps.tmpl +++ b/web/template/index_apps.tmpl @@ -29,27 +29,27 @@
  • -

    Semaphore is a web client designed for speed and simplicity.

    +

    Pinafore is a web client designed for speed and simplicity.

    - Use Semaphore + Use Pinafore
  • @@ -115,4 +115,4 @@
-{{- end }} \ No newline at end of file +{{- end }} From 44b7bc71b660a250ae7800d2655a88085cec6860 Mon Sep 17 00:00:00 2001 From: CDN Date: Mon, 2 Dec 2024 17:48:53 +0800 Subject: [PATCH 6/8] [docs/zh] Update zh docs: synced to da4db81bcf1a66d0de559015e061e602d8f2fcb8 (#3589) --- docs/locales/zh/api/swagger.yaml | 415 ++++++++++++++++++++++- docs/locales/zh/configuration/storage.md | 4 + docs/locales/zh/user_guide/posts.md | 3 + 3 files changed, 420 insertions(+), 2 deletions(-) diff --git a/docs/locales/zh/api/swagger.yaml b/docs/locales/zh/api/swagger.yaml index 7751c47e3..070a9448c 100644 --- a/docs/locales/zh/api/swagger.yaml +++ b/docs/locales/zh/api/swagger.yaml @@ -4980,7 +4980,7 @@ paths: - description: 此表情的代码,将被实例居民用于选定对应表情。此代码在实例上必须是唯一的。 in: formData name: shortcode - pattern: \w{2,30} + pattern: \w{1,30} required: true type: string - description: 此表情的 png 或 gif 图像。动画 png 也可以!为了确保与其他 fedi 实现的兼容性,默认情况下表情大小限制为 50kb。 @@ -5130,7 +5130,7 @@ paths: - description: 用于表情的代码,将被实例居民用于选定表情。此代码在实例上必须是唯一的。仅适用于 `copy` 操作类型。 in: formData name: shortcode - pattern: \w{2,30} + pattern: \w{1,30} type: string - description: 此表情的新 png 或 gif 图像。动画 png 也可以!为了确保与其他 fedi 实现的兼容性,默认情况下表情大小限制为 50kb。仅适用于 **本站** 表情。 in: formData @@ -5639,6 +5639,417 @@ paths: summary: 吊销实例密钥 tags: - admin + /api/v1/admin/domain_permission_drafts: + get: + description: |- + 该端点将返回按时间倒序排序(最新优先),并带有连续 ID 的域名权限草案(ID 值越大,草稿越新)。可以通过返回的 Link 标头解析下一页与上一页查询。 + + 示例: + ``` + ; rel="next", ; rel="prev" + ```` + operationId: domainPermissionDraftsGet + parameters: + - description: 仅显示给定订阅 ID 创建的草案。 + in: query + name: subscription_id + type: string + - description: 仅显示针对特定域名的草案。 + in: query + name: domain + type: string + - description: 筛选“屏蔽”与“放行”类型的草案。 + in: query + name: permission_type + type: string + - description: 仅返回早于给定 max ID 的条目(用于向下分页)。具有对应 ID 的条目不会包含在响应中。 + in: query + name: max_id + type: string + - description: 仅返回晚于给定 since ID 的条目(用于向上分页)。具有对应 ID 的条目不会包含在响应中。 + in: query + name: since_id + type: string + - description: 仅返回相邻且晚于给定 min ID 的条目(用于向上分页)。具有对应 ID 的条目不会包含在响应中。 + in: query + name: min_id + type: string + - default: 20 + description: 要返回的条目数量。 + in: query + maximum: 100 + minimum: 1 + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: 域名权限草案。 + headers: + Link: + description: 下一查询与上一查询的链接。 + type: string + schema: + items: + $ref: '#/definitions/domainPermission' + type: array + "400": + description: bad request 无效请求 + "401": + description: unauthorized 未授权 + "403": + description: forbidden 禁止 + "404": + description: not found 未找到 + "406": + description: not acceptable 不可接受 + "500": + description: internal server error 服务器内部错误 + security: + - OAuth2 Bearer: + - admin + summary: 查看域名权限草案。 + tags: + - admin + post: + consumes: + - multipart/form-data + - application/json + operationId: domainPermissionDraftCreate + parameters: + - description: 该草案要针对的域名。 + in: formData + name: domain + type: string + - description: 草案类型为“放行”或“屏蔽”。 + in: formData + name: permission_type + type: string + - description: 对外公开展示时混淆具体域名。例如:`example.org` 将变为类似 `ex***e.org` 的字符串。 + in: formData + name: obfuscate + type: boolean + - description: 对此域名权限的公开评注。若您选择分享此权限设定,此评注将与权限条目一起显示。 + in: formData + name: public_comment + type: string + - description: 对此域名权限的私人评注。仅显示给其他管理员,因此这是一个可用于记录为什么某个域名最终被添加此权限设定的有用的内部手段。 + in: formData + name: private_comment + type: string + produces: + - application/json + responses: + "200": + description: 新创建的域名权限草案。 + schema: + $ref: '#/definitions/domainPermission' + "400": + description: bad request 无效请求 + "401": + description: unauthorized 未授权 + "403": + description: forbidden 禁止访问 + "406": + description: not acceptable 不可接受 + "409": + description: conflict 冲突 + "500": + description: internal server error 服务器内部错误 + security: + - OAuth2 Bearer: + - admin + summary: 使用给定参数创建一条域名权限草案。 + tags: + - admin + /api/v1/admin/domain_permission_drafts/{id}: + get: + operationId: domainPermissionDraftGet + parameters: + - description: 域名权限草案的 ID。 + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: 域名权限草案。 + schema: + $ref: '#/definitions/domainPermission' + "401": + description: unauthorized 未授权 + "403": + description: forbidden 禁止访问 + "404": + description: not found 未找到 + "406": + description: not acceptable 不可接受 + "500": + description: internal server error 服务器内部错误 + security: + - OAuth2 Bearer: + - admin + summary: 获取具有给定 ID 的域名权限草案。 + tags: + - admin + /api/v1/admin/domain_permission_drafts/{id}/accept: + post: + consumes: + - multipart/form-data + - application/json + operationId: domainPermissionDraftAccept + parameters: + - description: 域名权限草案的 ID。 + in: path + name: id + required: true + type: string + - default: false + description: 若已经存在一条具有相同域名与权限设定类型的草案,使用新草案的字段覆盖现有权限设定。 + in: formData + name: overwrite + type: boolean + produces: + - application/json + responses: + "200": + description: 新创建的域名权限草案。 + schema: + $ref: '#/definitions/domainPermission' + "400": + description: bad request 无效请求 + "401": + description: unauthorized 未授权 + "403": + description: forbidden 禁止访问 + "406": + description: not acceptable 不可接受 + "409": + description: conflict 冲突 + "500": + description: internal server error 服务器内部错误 + security: + - OAuth2 Bearer: + - admin + summary: 接受一条域名权限草案,将其转换为会得到强制执行的域名权限。 + tags: + - admin + /api/v1/admin/domain_permission_drafts/{id}/remove: + post: + consumes: + - multipart/form-data + - application/json + operationId: domainPermissionDraftRemove + parameters: + - description: 域名权限草案的 ID。 + in: path + name: id + required: true + type: string + - default: false + description: 删除此域名权限草案时,为目标域名创建一个域名排除条目,以确保之后不会为此域名创建草案。 + in: formData + name: exclude_target + type: boolean + produces: + - application/json + responses: + "200": + description: 被移除的域名权限草案。 + schema: + $ref: '#/definitions/domainPermission' + "400": + description: bad request 无效请求 + "401": + description: unauthorized 未授权 + "403": + description: forbidden 禁止访问 + "406": + description: not acceptable 不可接受 + "409": + description: conflict 冲突 + "500": + description: internal server error 服务器内部错误 + security: + - OAuth2 Bearer: + - admin + summary: 移除一条域名权限草案,可选择忽略所有之后的针对给定域名的草案。 + tags: + - admin + /api/v1/admin/domain_permission_excludes: + get: + description: |- + 返回按时间倒序排序(新创建的条目优先),并带有连续 ID 的域名权限排除条目(ID 值越大,排除条目越新)。可以通过返回的 Link 标头解析下一页与上一页查询。 + 示例: + ``` + ; rel="next", ; rel="prev" + ``` + operationId: domainPermissionExcludesGet + parameters: + - description: 仅返回针对给定域名的排除条目。 + in: query + name: domain + type: string + - description: 仅返回比给定 max ID 新的条目(用于向下分页)。具有对应 ID 的条目不会包含在响应中。 + in: query + name: max_id + type: string + - description: 仅返回比给定 since ID 新的条目(用于向上分页)。具有对应 ID 的条目不会包含在响应中。 + in: query + name: since_id + type: string + - description: 仅返回比给定 min ID 相邻且更新的条目(用于向上分页)。具有对应 ID 的条目不会包含在响应中。 + in: query + name: min_id + type: string + - default: 20 + description: 要返回的条目数量。 + in: query + maximum: 100 + minimum: 1 + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: 域名权限排除条目。 + headers: + Link: + description: 下一查询与上一查询的链接。 + type: string + schema: + items: + $ref: '#/definitions/domainPermission' + type: array + "400": + description: bad request 无效请求 + "401": + description: unauthorized 未授权 + "403": + description: forbidden 禁止访问 + "404": + description: not found 未找到 + "406": + description: not acceptable 不可接受 + "500": + description: internal server error 服务器内部错误 + security: + - OAuth2 Bearer: + - admin + summary: 查看域名权限排除条目。 + tags: + - admin + post: + consumes: + - multipart/form-data + - application/json + description: |- + 被排除的域名(及其子域名)在导入或订阅域名权限列表时不会被自动屏蔽或放行。 + 您仍然可以为被排除的域名手动创建域名屏蔽条目或域名放行条目,被排除之后,与该域名关联的任何的已有或新创建的域名屏蔽条目或域名放行条目都将被继续执行。 + operationId: domainPermissionExcludeCreate + parameters: + - description: 要创建权限排除的域名。 + in: formData + name: domain + type: string + - description: 对该域名排除条目的私密评论。 + in: formData + name: private_comment + type: string + produces: + - application/json + responses: + "200": + description: 新创建的域名排除条目。 + schema: + $ref: '#/definitions/domainPermission' + "400": + description: bad request 无效请求 + "401": + description: unauthorized 未授权 + "403": + description: forbidden 禁止访问 + "406": + description: not acceptable 不可接受 + "409": + description: conflict 冲突 + "500": + description: internal server error 服务器内部错误 + security: + - OAuth2 Bearer: + - admin + summary: 使用给定参数创建一个域名权限排除条目。 + tags: + - admin + /api/v1/admin/domain_permission_excludes/{id}: + delete: + operationId: domainPermissionExcludeDelete + parameters: + - description: 该域名权限排除条目的 ID。 + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: 被移除的域名权限排除条目。 + schema: + $ref: '#/definitions/domainPermission' + "400": + description: bad request 无效请求 + "401": + description: unauthorized 未授权 + "403": + description: forbidden 禁止访问 + "406": + description: not acceptable 不可接受 + "409": + description: conflict 冲突 + "500": + description: internal server error 服务器内部错误 + security: + - OAuth2 Bearer: + - admin + summary: 移除一个域名权限排除条目。 + tags: + - admin + get: + operationId: domainPermissionExcludeGet + parameters: + - description: 域名权限排除条目的 ID。 + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: 域名权限排除条目。 + schema: + $ref: '#/definitions/domainPermission' + "401": + description: unauthorized 未授权 + "403": + description: forbidden 禁止访问 + "404": + description: not found 未找到 + "406": + description: not acceptable 不可接受 + "500": + description: internal server error 服务器内部错误 + security: + - OAuth2 Bearer: + - admin + summary: 获取具有给定 ID 的域名权限排除。 + tags: + - admin /api/v1/admin/email/test: post: consumes: diff --git a/docs/locales/zh/configuration/storage.md b/docs/locales/zh/configuration/storage.md index 24bb40d45..c2f1c467f 100644 --- a/docs/locales/zh/configuration/storage.md +++ b/docs/locales/zh/configuration/storage.md @@ -1,5 +1,9 @@ # 存储 +When configuring an object storage backend, the `storage-s3-endpoint` **must not** include the bucket name. That's what `s3-bucket-name` is for. Using subfolders in a bucket isn't currently supported. + +配置对象存储后端时,`storage-s3-endpoint` **不得** 包含存储桶名称。`s3-bucket-name`负责配置存储桶名称。目前不支持使用特定存储桶的子目录作为存储后端。 + ## 设置 ```yaml diff --git a/docs/locales/zh/user_guide/posts.md b/docs/locales/zh/user_guide/posts.md index 8c41dcd77..911eb2beb 100644 --- a/docs/locales/zh/user_guide/posts.md +++ b/docs/locales/zh/user_guide/posts.md @@ -36,6 +36,9 @@ GoToSocial 为贴文提供 Mastodon 风格的隐私设置。从最私密到最 ### 互关可见 +!!! warning + 目前暂时无法将帖文可见性设为“互关可见”。 + `互关可见` 的贴文只会显示给贴文作者和与作者*互相关注*的人。换句话说,只有在满足两个条件时,其他人才能看到: 1. 其他账户关注贴文作者。 From dce85a2b7a73814bb936d1b3143e46a7a99cb4ed Mon Sep 17 00:00:00 2001 From: CDN Date: Mon, 2 Dec 2024 17:50:32 +0800 Subject: [PATCH 7/8] [feature/themes] Add auto-switching themes for blurple/brutalist/solarized (#3588) --- web/assets/themes/blurple-auto.css | 10 ++++++++++ web/assets/themes/brutalist-auto.css | 10 ++++++++++ web/assets/themes/solarized-auto.css | 10 ++++++++++ 3 files changed, 30 insertions(+) create mode 100644 web/assets/themes/blurple-auto.css create mode 100644 web/assets/themes/brutalist-auto.css create mode 100644 web/assets/themes/solarized-auto.css diff --git a/web/assets/themes/blurple-auto.css b/web/assets/themes/blurple-auto.css new file mode 100644 index 000000000..817a07248 --- /dev/null +++ b/web/assets/themes/blurple-auto.css @@ -0,0 +1,10 @@ +/* + theme-title: Blurple (auto) + theme-description: Official blurple theme that adapts to system preferences +*/ + +/* Default to dark theme */ +@import url("blurple-dark.css"); + +@import url("blurple-light.css") screen and (prefers-color-scheme: light); +@import url("blurple-dark.css") screen and (prefers-color-scheme: dark); diff --git a/web/assets/themes/brutalist-auto.css b/web/assets/themes/brutalist-auto.css new file mode 100644 index 000000000..080360c87 --- /dev/null +++ b/web/assets/themes/brutalist-auto.css @@ -0,0 +1,10 @@ +/* + theme-title: Brutalist (auto) + theme-description: Official (Pseudo-)monochrome brutality theme that adapts to system preferences +*/ + +/* Default to brutalist theme */ +@import url("brutalist.css"); + +@import url("brutalist.css") screen and (prefers-color-scheme: light); +@import url("brutalist-dark.css") screen and (prefers-color-scheme: dark); diff --git a/web/assets/themes/solarized-auto.css b/web/assets/themes/solarized-auto.css new file mode 100644 index 000000000..8324ef5f7 --- /dev/null +++ b/web/assets/themes/solarized-auto.css @@ -0,0 +1,10 @@ +/* + theme-title: Solarized (auto) + theme-description: Solarized theme that adapts to system preferences +*/ + +/* Default to dark theme */ +@import url("solarized-dark.css"); + +@import url("solarized-light.css") screen and (prefers-color-scheme: light); +@import url("solarized-dark.css") screen and (prefers-color-scheme: dark); From 9609c4550d0cf6010ab88357fb5636e42ad22ba7 Mon Sep 17 00:00:00 2001 From: Victor Dyotte Date: Mon, 2 Dec 2024 06:24:48 -0500 Subject: [PATCH 8/8] [feature] Add global instance CSS customization setting (#3352) Allow instance admins to add custom CSS that will affect every page of their instance. This is done with a new CustomCSS instance setting that works pretty much exactly like the Users CustomCSS property. This custom CSS is then requested for every page load. User styles/themes take precedence over this CSS. Co-authored-by: tobi --- docs/admin/settings.md | 8 ++++ docs/api/swagger.yaml | 8 ++++ .../public/admin-settings-instance.png | Bin 205194 -> 234878 bytes internal/api/client/instance/instancepatch.go | 1 + internal/api/model/instance.go | 2 + internal/api/model/instancev1.go | 2 + internal/api/model/instancev2.go | 2 + .../20240924222938_add_instance_custom_css.go | 44 ++++++++++++++++++ internal/gtsmodel/instance.go | 1 + internal/processing/instance.go | 11 +++++ internal/typeutils/internaltofrontend.go | 2 + internal/validate/formvalidation.go | 10 ++++ internal/web/about.go | 2 +- internal/web/confirmemail.go | 5 +- internal/web/customcss.go | 19 ++++++++ internal/web/domain-blocklist.go | 2 +- internal/web/index.go | 2 +- internal/web/profile.go | 3 +- internal/web/settings-panel.go | 1 + internal/web/signup.go | 7 +-- internal/web/tag.go | 2 +- internal/web/thread.go | 3 +- internal/web/web.go | 30 ++++++------ web/source/settings/lib/types/instance.ts | 1 + .../views/admin/instance/settings.tsx | 17 ++++++- 25 files changed, 158 insertions(+), 27 deletions(-) create mode 100644 internal/db/bundb/migrations/20240924222938_add_instance_custom_css.go diff --git a/docs/admin/settings.md b/docs/admin/settings.md index 0efb5bf45..170d07e6a 100644 --- a/docs/admin/settings.md +++ b/docs/admin/settings.md @@ -167,3 +167,11 @@ Links to the set contact account and/or email address will appear on the footer The selected **contact user** must be an active (not suspended) admin and/or moderator on the instance. If you're on a single-user instance and you give admin privileges to your main account, you can just fill in your own username here; you don't need to make a separate admin account just for this. + +### Instance Custom CSS + +custom CSS allows you to further customize the way your instance looks when visited through a browser. + +This custom CSS will be applied to all pages of your instance. Users themes and CSS still take precedence over this customization. + +See the [Custom CSS](./custom_css.md) page for some tips on writing custom CSS for your instance. diff --git a/docs/api/swagger.yaml b/docs/api/swagger.yaml index 5c0c2ae3d..a3a79e2fb 100644 --- a/docs/api/swagger.yaml +++ b/docs/api/swagger.yaml @@ -1570,6 +1570,10 @@ definitions: $ref: '#/definitions/instanceV1Configuration' contact_account: $ref: '#/definitions/account' + custom_css: + description: Custom CSS for the instance. + type: string + x-go-name: CustomCSS debug: description: Whether or not instance is running in DEBUG mode. Omitted if false. type: boolean @@ -1750,6 +1754,10 @@ definitions: $ref: '#/definitions/instanceV2Configuration' contact: $ref: '#/definitions/instanceV2Contact' + custom_css: + description: Instance Custom Css + type: string + x-go-name: CustomCSS debug: description: Whether or not instance is running in DEBUG mode. Omitted if false. type: boolean diff --git a/docs/overrides/public/admin-settings-instance.png b/docs/overrides/public/admin-settings-instance.png index 181a35a7c2166b1a0fd4ee4f215082380922f664..1203e8a416a8c5017c4d95571243e73aac58aa4b 100644 GIT binary patch literal 234878 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 z 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 literal 205194 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

=wlaFh!86gUH@ejIY+7|o=wMM&8uYQ= zW*|TH_C7f=kW(_Ml^M+MTuE&>c_FrTGaMEc>|!LpU5s76Ztr!DZ*Y><{?r&Sx!6 z4q<_PJ?Cnjp=$0|nvJ!MwZ@&K_F=dShNlsh&XM@)dlD-3-wV$%xBEPuf__c5o3*n{ z?YDzE^xGtl45#a_Ul)^Wk2hm(1|PjA#&+8hc6U(P`vM+YJfA;gt|AU`3etIm`~95S zKaTR^J&mPwyOliO(>INIo8Yaz@H9|42V6cI5hCWOaV$LQ2`s(eygSi9P;|TvQ8q7( zWj%D69B^8*yDGU>o|?*QzuFm#|0*rQfCW}SsO51@nZtTWJrV_t6_P=SWZdDoBrv5o zsT{CK*?`_Pur#ycaM9Yapz0M{oHreeN)|7DV#e;eS)jtP(Q!ky85a_uzq)k~(4d;w zX5E7GUl%kyW>9TIAs)=<;hjh(MWRo@FM^@;GWYM4BXA&HzoUO8H&@?7-VbCsGdeQ@ z1ih{4*p=c5S|iSu1!wKUn(Pg6L>ducDXET=b)-u=;!0}h?jxqcduMtM4N^6O&yrZN z0kPjM8Dn4AD=PTDo!7^{n4@Bw6?m?yLrt_rQc#!cO}DLW|0FV)3K7uOGb$(StIHY=fqK45~mccLwT>ySr+(ZgNtHKA>+2KM;A+DFQ+ zDS5JY{cX;}jpgG&%jp9cV=&63pbLPD4c4{_?rfZ|iSI8#r_$wyf~}6&GJxCl2=#uI z-?*lp?yy|q48knd?oS!$KP&e;!$W0o5=C4+JUh2H+AC1SzMqC)_i*ZUX~tqH#66V3 z62oY~wz0W0TuQOTfEF*Y4&6CjNY2O+G7vzL8nM%Ug)FdGs(+_NES@x+*>14}gz_^k zAn_uG&M)sO%L3^01j1rwVD|_CW87R~P8g=9O$GH5`;AIiSPpCqB*}HU4tTM;Is@A5 zv19&1mN6tg=h?j?w;8m@9Otu|45mB)l&e4#We53>iw;>c1ISj5g!{Zl86jSn$lJov zyctjj4I{UPBl53hrOH(`VtSa@s_bzH*F$X$xeM>r^V`(1-RoIC1(XW3Per?_# zjvkm>>Nmh%gDB2O{B-@9_<3ad+IT3XsmeXM#ua3;lkM!yjW=N_etaN!@?}q~lKi!T zHgdY?_*9Qln1=k%8qi(TZwVEX4e`<((+*^T-n z`jLORT(09<8h@U|M|5Tvf>D|_+LD-+;f{NJzdfT0c;oW-sNW`Nb8Oz0UgpM^JS5H8 z{Tvo6$V5!%I+InUO>{47md@6u@68%5X)QLSMN+B5QM>flZ7>No9wB+}M2wa`F<@NW zzYA8o#*kQq4feH}D^>)XAje-do+(sY57~)*?jj^>9_w`%D9%dOhcv3qizHiqmR~l< zA9hpevmU5 zAe_Kf8ZM7WRt;HgkjtmY7@fe=yPOpg;tVt+zp`1%7+V@LfQcwQtkX5=6FF?c+8+N( zf1X3aoi6jTTxky)LGR#L?#*-Ej~Hv9HW?AQ*p5>SC@Kp$b3GMOM#VDH%JuS{zh$un zXyDpjJ~L0-l5wcC4>ndnvoG_-GTUOH%A8BP1L@xv?%B9U5xwTy5`XbBJ!$IbNiS8Q z+YO(z^`0tf)Fn7=#3`DrnRpP(y$qyCUEqq((VJCGot$vlF!l&2Iu9pq^`^M&EK9M! zmbCtGWaev&j_ZhUvpNvAsL6^5Bzwm%_&9bv^&!{t34VL9KybOr7yburkx6A|e! zS2IGR0%2seGr4rd((&3U%9540zscM#N8*D-! zr(`pOUKwp7xCi}e5~V-8So_rq0Ciy?KLJTmncF|rfNxDpO*V^iRxW82f8=)wzZVG) z_StJz*G=|Am#GuVRFW^Z(_qd2#u#7ql?Q+DV``oc`a-f1Y_rtAA?apS29QqG&Je}M zzATxTCf~Y6ahWnzq=msQC2D*C)7RMK8%&cenk>KJ;2(m(_=SJOP=kfqBow5x+VYhN zLnIx`5~?5W_wW#3KRWTx)qrosu~%~U+u_lvj-%(`+vkCQ^p*d_6hwdb?9ECJ1{9Ky zisZup3wdf!9|)4w>Wbh;-k|Gp5Uy&(ke}Vc2GYMbHxMyWxq|q7xPzd2ej{+9U5WNL za66O(w?ge;-Ct3@>IdcaBqIfT=$Y?Z=!jHkg(!@4RmxjEc13)YwWy|IrP8g*<<4x^ zO|hIEu;0BUYBYyg_yQv&G`FSOXAv`3eCiz zDu+R}PV5LW)vS(iM`msnuQ;z?C>Fg2o}LmQW3gDiF-yI0K?KO4UdOa!Z4Ob;(tG4& zqOCNxbE$&|j)St5eqRib2h?*_?T$Ab!uiRw8hO+(cZGHMFs%UeTlp6kH|ydig=5hf zS>a)6tLc+R?U5K-nPivuw(_67Eh_DP;dAKLHFE}pTDb1U=3G|fpQ9O1nrX5>h|dTR zv&%~ye>}Pw3}57Hs0sk(Pz_j8jlDJmEX#)akw%=mZN>L_@Tz|0imk=s) zpq}yz=tX#~SDT8C(XSaEkOwu#Xlh=39NLN5r+uJ2iJHL=f+60+w$=UbyltkvAveXo zr&|fOp{bgdFze)Zywf#= zqKE6Mmk8p|Ei`A1?MgHumN&2TY-nr1v3GFNlG3i`SNQuHa98p5iPkQDfBd7Y`F zr*F|36m44tD(9n)}p;FnDtkV?bFFn}$}U7_Iw*4{E9O+Wx53D&9sE7pY$oS}2Lp>>BD zJYxG+ui>Mp?xIKw_RXiR4EB8BH6RSaH!Qr(m9#kWDa3_31C3oiMnlC{HrmEZ=tX7DM|_8xI302MT*W3t=P1SgU~&mp3d^C^?K< zM2Dy+RmGc5P)1hba`PEFB@Ccw<)zl$d5^yZ4FKY8Ny0xbTO(?A;or3Y8GPS!6%zMN z?3|S8c^rO;FZ?E=*xBJz>ew~lQ(_*ClC1M&1{P4bOqp9HZd7JfuWhA{@E3(r*;i&D z1n>fm^(^R4abJPPl`pyjr-M-VYqcYWH{~b5A&>AD?&}&p@EhG-ar>jA9j|xa1?c%7 zKY|D@0uO?p`_2ch$_7Qx<)4b%osLf3?>9#==>|<#tzum~gAh`{g{hnqS$_>{0q?-* ziS!i<$WPJ8>P>rzG)!r#8wl}h3a`cN3c;p=`uUWW-*K+)Ero*cueZzZsrt9{)g(pG zC>xO`6tvxKmtFNMJ_7$T2IXMEG~Mc$-{Je{v@I*fUdv9FW`fe>+!#ikKlQyFL?v=r zeK%a(?US2T{q?mV<`4M@h0ZQF+7aI8H{a!%h=qa8Rdks_@V1P#GF0qD}0a``LxS@&x`K*IEdc3;Glp!QaIWe!nob{2 zp|zaSuTPRt1l&mr2Q~S4$Ql%JczQS5Snph%`7OBtsLpPvt*Q6a9O_w3fenS9^lNNh51CtVWz6Zdym(#Bqf$Mu#ZQ;6@m%n_Kc zl}WutlNJ5+so^V%fh8~ zQXBY$0K??g)J(sNs?NHQ`(vc%L*;<7uP2)L&?PLG5PUqSJiZ%$HO-%DgIBTyYJ8z= z)N+HX1EDk()9jpzm94s~A?{ihZC?0G7SGM6`;kxIM4{1^q7Q5dhX#Tr8<`6bW`#L{ z=5Wh=Y4B3Il5{^-X1Tuo;{nzF(n&ng%&jey+i9{QLCV9QOGoph)0ss@N?PPJ@dR%& zwogqiG!vG+gsSWlMWb9UD~V|5E>Hkj&L0BEn)LNxXn|&Z8MB*mgq`MeHMGdnPiNWC zAafgj6UjA|a3}nm_n$xG+h5n?!-SlzFXKVgLB|uJzf4&0_SBqs68zHzz@%88vS>K`5!!e<2A78_bY;jNaKHs#BzTz`1Va`7+UyfJ0{M0so<%- zQ5~ka3KeO^T3-%k3MxT*tOEjyW{4q?1tKS$rUJo^k*P6eqzEXe7Cs~&58&+as}OLd zM%5txd#j1R7KdNDFWwPWNJXh4hXx~$1_P4%C4qSLa%vqlUxZdX+ARLO=_^@?V|D;s zRPLH#Hvo>Rr!@^l7u1YbACzf0&;Jc8Z}eRH%To|5e_l0h5hlqNAguG(XGae}K)uw} zw`G<9HhlFV%+D!iUf^ZeIuIvj0KR_+zxDbgthVt|e*EinfTI(9;^o_1e#+DM=L&$! zgu)S+tt0b?&Ta)Ob;vxz|1%r#XBb5i*x>)W1vsB|_HWPqohtwzeQLaa_6q*vT>$kL zAb;NBf7*5^KmP~-{kt7n|99Wrf7%&fe^!3~Ile>rUI!Qq2)JR`Qn1Zr8VlJM_|nO*q(`3$2p~hL(R-iKNW&D=_0FdwMQsR z)wdbkaS7l7~lCz>llDod7@~?Bzw|Rht*=HuXioGDpxOHO!P&19#CZ+HS2q zj}CT$EKt>WuLFh~_qSs<;7(@lZY3^B`-GzAm4kjMDNcozhpZOPM{m$B^4p8$lG@`j zoYLoQil}xB4!O;L#1Q^;pIs5_F|rrB*PG;xSy>(}^`uA)b1uq?(RLN-C->RbD9lw? za^dxTRwc`fI9+K>sw9yBm!~8wFXuzARp|BUIP*Tn??gH8y4fD{+Rq^bzAC5&Tn#C{ zz>r%lEZxmc+89)`o8aQBdI!&f1+{jqv#AvG8AK@|fC9ieoi?d`7_gBMo$-0}wSH|A z53f^D|Lv<~cmVfBGif5tzOxtZTFp3xhyK`#i9$(_S5EW+o)i+X)gyGD?=i}tBCBKY)DvMNXaC>)j zFlQGiogMA|8)Hrg=(ft{XuecJ%h62lPcYhO9YKdTvlmGr5d?}2-H z#2aZ~4Q`?iWNKs#|x?RmF8eKb6eR1%Ll)4)tU(zsE$lf+EXU~x|zN1^xIZ?X8 z7E=(5^iehkhl8^dScz@ok==)Yv+1u>wv5$Roh>OR^ZHlp7mr+zSK!E@_lscrPj}om;ArxJfTg(bR==UZ(e zKd8Wtd~6jnPt)9n*Spi>4Pj1eW<)FqXUX zbqY@?828u1ich?zl+(9JU-POXP!PI^!ADj!Hogl?-JBSFq(6w=KTnCPO+t61AUSp$ z8&u?x4bPLZW#S7>#^ohxvnr6jCNxa|_N%HLJWO|yT>GJoB?4Z9RDYU}qAP?m@vHQ^0w z*a6+R%w$>WXeSw84#5~hQY_<32K-fp?aa(U#&K?^ngcsy4CwJ8x#fR+_k?jLfsMT< z|N6ToR^V@~D9xsc0g$nZAN5s`bZnC%1AMEiQ?xB^{7|$0#0sxzcaB(DOO|p)8nDs| ziuw+=oXV!%yw11<+FbmfY(Z7#l;HVlFOG5i|2-qyNj{vfIw`JZ&MCP7ypE&gM8Wq1 zN%DUq1b=28l)w6a|2F#no?HeK8L!JK#VI5W@VK*x|b-*RIU*& z3rOF&2^OW`=nkrIuL0aiQ_Ux2-gigz<=5BYGcQ;L>&|qUaV*j5;m4cv8~o1OHR-%!k4UOx^MlXlSH;L9KG#p< z2ev`)(79_=209JC^DtZhE%IL{lTrB>`GSLH5!RYk-tc}?X{u`H|U*nRSFm>zF(=)I%+c99yr38|pg zoGewou|Kb}D7OPd9`8`y9EM5L_A}OPUG!FM4h2_t^tJx^b&ab)=hXn`eT+@9<5{7T zjwXKfq9Z^;T*8#~XgoXC9#l+Rgf=a!Rb}!tc`7(ZXNHzz2ed1E59lK`fs?Uq_%^Mpd-a5bf zpfTNqUe6U5P(olH@mO>4&enc6;ar9dBs6*2ieW%!)?2+5y;`libJe+5K$_=dv}dC; z`I|+1_nqrrw5j%A-L}*FR~YxHW;&5lr#)&iGFz0^k=h{SRjq~?+z)T8UVp8c z8987uGJL2R3y@qQ!k+-6tuxx-`Tipz@BuXN@j0WH&CumxqQm84Y=YYXI#%lvFOSb^ zBl7`$)j^3rMA~SC*GEx&SWG-`X#z1jr^u0dZ9Fa;xIdQIKu2F4*XJ9QX&M-XbMs=@ zkM62Kc^E8U*=tj0)X86EG6FW(P{h&5NLqxvMc*A?8QS-b{5zH-^H{bJ*0MaZ?*-F8 zzIPG3!B11dLx3UiQcMyN5y2rE&p=c9`g^opw?7z?v^zni8TaTrb>~|%SbO9kj0pGq@N2+(Nj2sYSBc^ds$HdJ{PJ3(VzWVT!I^qw4X`hRvk zT-^gZM7b$?o_;s2_EjFcXrZ}!;CVJ>Cjt4*Mart`O$D3!k40)ad{L+(BJp%gl@YlUyxPw>IGBr-2IDW- zSlnvU1``e5gihr6eiZ=b#^FK?S>7AJjzkWXiM`&m{??eyy-_cs17XUvbJi(i;>a*LtT!cv$hLMP}z-TEq21?I4Ge>K__+tu?r zLhP82`ybbfbB9g{m{KIq-nx63GkM}Fe-%=cfGXa|t zA0DF=RKT*epHm6kIs-ME=elZ_DFr8Br|kQ@!MQvhu=V*getKfgTO10$!-^XlXu-WY zenG;*!X}@oJ@}dE5L=Q=6l5?cK|}GVt_Lhs95)X&G+CXYGqr%jfn1_@4ck8rDFW6l z>8*X8iq~l5wwDOROdc%_t0WMMI+m|o6GfwwEwCKmGR@W(wB_tV-)ZF&+)sI!|A>l^ zNHYCTFxfXQ0s>$yv8$h6Eb@p64S&83*Iz=l0Iy8Q(}%_YuMq2^wYu>?QE6i`sxkP` zIMbF3L0NyLGv!6)*Rq&3J0sP9Xdlkni3tOsf8W~15QH9JW4m1y@ zl04EG*58k$QT~ag_yrQ0=}P{-xp^i3r%J2}CaUHcPzBOKX4}t!pqmmow6@^oNo!p_ zLys3&v>_`h^X&!QA2Hun2K#K_=8KMC)JO?Uwd?|#w}cI1vIMDE;kH0FEs z;CY5TQ{w2)+Kh8B4B3HPuMpCC-owRI4vrUn)^|G&PkcJdiSyQ=0k(!IWZ`x&SskR!SR#E(WOQs(AG3z2N)hN_nc0Vf-w?C4H3WbCS_ zmnkMyunNP${VWPxNY&b2)<0E5Dx>1wBlu*(SW)ip7d zAkvjOn6IQWJ0iMrMRZ9SU8sNjHR`PEu(m{jOPJ{@r?>CXl#?-NOddNLXTx=+uAf)3kym2blzxlz;|lMemrC!Vn5*ZxuIo&=|ie6oI1)4lVzv_l=X2`$jJY4SBV6-i9}#~#yct$}`RPHFdE?0P zpJRPgXTe}ENXb9af;OwC8hwXm4z^A>8&6)3?z^V|Oy-l|+n;my`ENLysd0a8D`G~LO4|% zV=8Un0X9X-fhOb};1`*B!=63i=C@(3!X2z)cRZGZgW)s&5heh0QQ$Mh*3U4PciVe; zH9O+7)OfG+@pcc5W4b5QgbwZYD2?kG;@$J0)wc9-ZVIA^4TJNVSeXsmlTR;ECPFdL z{=r4@xiQcvWubOAO=t~W#})7SnymV|>&kxb9xjtqWpesZ`POiUNbG!7R$&U3Tttxi zye`gcz1kn`vv_@bC^K816bbV`-Kla2PC1bKed-saHo33A)osXg4x6uV&nC@{{zYQd zQ0~sW13WhL=iW4vk8Jg3ZzRUl&r9ym-(P$|sc^E#SGlCGp3`^TxTpO+a!|nr>Dg{> zWVM~uCJ~PjTiz=(Q-G(YbIfmoZ3n!c@B|zVuSNo9S{!6&F6A)xD$N9A#ezU(caBt|fHUADILuD8 zY&@Rmo}ec6JwcVs`Cxs8L$Q6X6-18N`jNq)&#Kz+sP&AO7eoFf1UwT`Gi^64swrbb zkb=5EkU^J`RClF^#pcs*7L@1a_07f2-d4ghN=4HUV0TQi?Eu#NkzLn}N5f-bx-B|W zYAKF|&Wip#YbbLs|A8(E*>0brx=)XSXy4BrH?lwRpPfa^hadN?^hV36^F`(p$mQgF zCM5)qqdJO(x2p6Ea*S?6;ePkW7mU-}qd4rdjfMyl8YlhE1)ZOLQPB!R3UJJOZ0n=>^n zr%@AOCDA)k8UbIwsl0qh3B-5_a$uFC^wE8<)}3VV(UAFheaJ~qUv;U7)ao0{h|L0( zoW7mA3{#eGaS3w18@{|XcMg+wZ{|pFko32zyP0Th>1%uy&UiYjL6p|-nDnZGVlA-# zLWTf$_L}>ES9EsErDLDR&R^kg#GuExCHhigKZY?x-)%#n?+T`-DspCz%Z`ooh!~iY zI4@u39xLRH2EJkhn-lgC>$YqiQcD8d++Z~>-SGw_WfAV<-Bo7~1i)QbE2+GU+uMc9 zsDNlJ4$6)@04=8}i)t2%E`nqQ+buvVdvbUz^%~+^x9?F4Uoz7>) zMRomD@qTyq*th1z)`B~1h>?)f!cLH@af1xf%fG57%Kht}Ln-V8F7p&Oix_VyjAzFH z8Ynt;xk_#j&=)tQW( zH&fkybAy;Hgw8+I^^v~d6y+DjWA2IiYEMo~(BZ3b{@e+_qb^T7*Af3Si_6ZAS$~{^ zcjUxIRGRz?k|n;de6;}umS%=570K}W8<9xUpni|a9-8&1Er zzjMir?uhB!LSBp1k=viH#C3D`UR9m@nUCimZP7 zY|B4*wq?j4CVkmp#=2CeCfzqPe1Ap0_K?Z=lsr0+ZE~iHY-ArZ`-Ja$gQ&Y9 zuP#F&h_=ec&k+K(jNDJa`bb@xKP4sSQHbf`a^F5Nh9)B0JA3joSdGyY?(f_^WxQ4! zXe`tqubK`g@qX-xINgB6lDy=9$9uQ6ZJe>yhpRxRSn4umD%NKWm+69T@9Nx<3Nik& z&VeqY!=kA0T@90)fSSBT9~a!Gy)C9t`knoVERWR~Smbj}yi|x!r(-JzQjb-dflaaQFcBAM9kJDD;tpD1)*%kkh1fi;MTJtWcyq|+FiGH>9RHD|H>3Y>`FY- zY=>lkYP8bM6>_1t&h8KtuL6f%H@y-yvF~&bN@ySPN5`Kq!-Wt_c_kwm$5ZjvPC6%e zpYjT1i6Eq762FM~3!YKW!ob|IFiI#t%gs!O?oEipq%UN z1q7Jh?^C?JFMQEXy+V4Ne9IcXa1RIUzl|_isD)vWyWKFb+auK0qW=mzcHkG{%}!G3 z>Yc#|e5)XH^X3w>WuYLrbD`AEyp6bEq+<^FYn5j#VbK5D**EW3?;FRb+Qw(wk+=j+ z;M3<&A%|W7yL{^oSmWSlrAysmwZWlIwiCjW@R{Lf zh6rgMHSl96|6XW7hAM5qdFlRALz;MeR#PncD*@PC;l$7D=Dv=}tbV$bZ@_b{w`wPk zBLadLB}0)Cz!?yNYdC9bM|W*$7!Rz_Ro?43QFr_q53r6-q63rsnarT!ZE} zgiFC*6Z#oz9GLa_S9H3tshLAov_yqnyr~%#dsD5il^n#iJ`*%Z7RfiAzz~kCf`PHj zHtef1Ne16=MRox!e0FzU(n)A`7woC67pJUO$K^<5d~@jBQCG}jf>w0fvj#vX6K0m1 z$w9_p z*k^N&jONn2eKSO?Ql=6MEH*!t3xL_7xPE`#RdB9kQ=I0W8*(ro0)Jen3{8JrTi)k< z!y%Edv^)Ly@-eWLm;6NP;4(3oc7Lhbv*I5fu20 zI6PFR`>iEp$WKQ9{lX}&{#UpazQY(6WEHq~EKGIsbryyIpqJx3KkP@@vUov41QM zVeL}LN&H2$dpz}s%$y8FWcT)QA$W1I?x#$(I^}eQIL4zs&C{3mfO^U43Zb>ykb4@i z=`d!#-8~3u_Ie~=M}Dc%&`x^LbqD0)XeChYypGPfjjcS8n6Z&=b}Qj{${KaA6bx_X zHk!KRO`DDN%Xc6CHVZ>~bE490BabQbWpl9Jp)sC}rItTbqDU8U0rGIniLie^M=$s6 zD%(&aZCkEwXF2NLkdci9dTNT6hDpAM8@9rdfJG%TkGGcH)a4Z#5Nx^vjCQ;QaU0cE%P>;;Lma{lZLmmCTj{ZgDak>)TN)9ce}Jv)rz}(#^CT+ z%*@!_2xtmtF?gKz{52?E&B!sIaB%K| z;^Ro^q&5D&EW2`dT7AG7qlTpxHedP0lBQ;ZS=J!`@ii9`N}8{H_^v*wgYBSePg`@^ zN#~0_#%%uZ>~Fj41wR9YH7?lr_H$C$dkj6^5P@~tG00c4mIRY@6;EyD&dfx?(tKQJ zmd`KAe*?$G^{CV7;upl@jsRS4={P-fz!G~{F;bek(qz|whyUUrja zDz+0+u$YsT?qCo$zc(#Yok79iF!0BZesC+s#J{<(7(mEc9Z_Y~o zw5a6)qwnqv`*PZ8d?!1@goHY}VI-$w_Dx4Q+_eo#5U%lWO0!oF3^Om-!{!<1cScW_-7=Jfu%@JpkX5om3fX20Ba>`X|iUY zlE)zOvMD2$2x}nm&O(vW)ag1pi)_#BXgi~2p3@d8Lb|gx>&fP>LFM!gEW=pX0V~Hh z1h=ZN&OiTJd12ByTJn@!Afo(ke{G!CTiZ)`0`@lQ2bL`-t1ooj7INUCQ*yW|G`BQ> zG_n&TNArvB;-D1?>-n2QEX;DM%dU18op3Qh0g;jmzcQCh)dAq`ZJI_z+fx#^i2Q}b znl)J*YgNjXUTz@q1n-fMGJ%zR4zlx16L3C4JU2h)qVCGSMw2!!J%Q`zgU)ZDYl-25 zu@U*=q)$1k(7oN9n4y2h#VX-`0z@l<(O14~t>zM(Y)9=WBYv5l`P?_OMm%ve50Byl zc05|=uW{il#tP>G_lTPL6&Q{;$n10tRqo&{DvlZ~Q~rXc*v*`xUYV{NzAhB2lz%n^ ze#7a32!9e5?tik7#6IpdwAz(!Uy*QVnB%rMxGW5ebmzBzbyq_FrIiu4Uf~Dq1M+3I zN_0fK56&o_G)~RVdJE4)G&nC`!{gv|FM@6NL^U&bCWty+p&3~UGFP~~Nl!)*tkNJM# z!k4V<`J~&gYPIZ~tB$=BIld?U5&(~tIbz%JTrnajri{|4-9WBGgJ*IHdlv<@uz#>PA@3S62KfK7aZl{)n5MkcKi9GSQL~|eD^``m^tN!3!+)qr}K7Y@Kwb{J8zJV z^t-gDNG>PbU*NRaQrs|rn4TI?V(}>~D*6;P0Rl9-S^!M@7iSNH{{*J?GP|=yoZ)d# zkDQTcr;YH>=QiwAduS;t|+@W_9vx? z_#gOuC!x8yH~ClQ-Jg`^XHN7aP5ZPO{7%~P%f7@?5|M0ziht21ZQP=Du3fbs>)@y8Zt1*__3YSo;%E8MGRfhh&umfZXBuL@J> zpS=HDGui}{n*S$>4Wt$bFv-6w{=Uz&KRxhI3(zenKmLDm5&zd7wiN*NDw{^P@!{db z{zl3|Pw?Mg&A+y1&6_hByn-!!`x~{Z_BvZ>?DIearFx?;IGg9-xJ_fLuTgj=3jKVPjGLlkn?cux5)%)~!gz&}@HoxF!BFU9%gb7NrqFtoq8Jd1YM=S?rp zB#V7zvyuEt+&9@&eQFz=HE9jrSnVL=~GOohg|KC9&S6X+y5WZzA7xPsLL`57M$QtfZ*;9!GpUyMR0c~!QI{6-JKwXyKCVPD6DX2 z$lu-bO+U}`xl(oRJ?E~y_S$QYXVRQyxx1dV@GprDCD&vFo`;Rr`CdH)4ctO^kJ>cw z_MjrSovpzEXFEFj1x@(;P%?hB$%d-^S5K^HdDD{~KcW@NV_k zs((X><|z`=-RmagGkFbadNq(Wu6P9X5+LH#JHM(lvgsa|SRb+9NG3Brge}3{56=^D z#dovp_UQka4Qgnu0r{QMI7iR*;i@+wS~=BiV}-df;>xKe~h3V&)LrxYJc#9r+n(@ zy)Q#4xLi5&%UCmv-DRH$`R<|5K&hcuVoOUc0UcF0$(SCAgc0Zc+)ds{WKRLIa5esl zgO27c5YGEb0fF+*^ectBVEUldm2T@@+?vIS1*y#@tDyT&Vv3g%Ru6NpW8S3r)*DIv z9F`D0kA)kP`S(_MJMJQn55h7-uj7xquCDxD*|iYB5#E`I#VjXw_YH4F=K1~#Je0ZC zTJrNUviHq#1wF5(E~G7DkLdjrZN9ifc(;pNTejd^rn&)RDG9Y6t zWB<9)_YV7KJ*33L5(j!uK5#OF*&GCnskHPka}e#yO`<>69`K;+Yj8{;V|Ex=5XInW z_B8e+(qY(!Wlcy_$F{nA;y$8OLuZP?>Az&q4%LBdcX_R$gt=jz#8e&Y?<9u$D2848 zuw?Vi;3i=>Be4!S;XqIvE~8wDgD&m8<@1c4aqWk2D=64#JgLnC7kecHDW2LmaVMO5 zj;hPY(!2bHX_m;pAT&QX#I`V{$`^=^Z}e!}BV6a3aJU)9qstA|{<+!-kB1EtZn%|B zw)+#jcHz|FLrRKMS9kn>(la;JIw3G?>Rsku-ZT+_QEHi$sk2mbSE3OSs7fl-I;Xdf zuE0Vg+V#HYeW3Hv%Ehc-BVNW_O9)&D_SAOH30+r{3IvZiE2YB(GEv|*3vTYfy&H|G z6p9t`cwjV*O6{vzDXPp`jXq$|X1VC69_OAu9$D#}SsJg$IR|WQ&2%=36uc4ST(~y}Xx@sv9V(ND!>x6V6wiZ_IJpqg}!)@)&7) zJ?+bW)qdM@u6@RN@aFkhZ@_Ty`XV{|-`8_MZjblouL=bIy5#RL8EchcwBB&y6Lz)- zp9@w^q?XI$)NY7zT?gL>$)8+pDfTTz?Qm#YihpMMX*6#7WzE?0`(=&fv3b(49a%AW zbo+0^Rm_4>?E$+LY+AKl`I0}5`!pVEM-WWc=Ync(EAych6ThjCzeY1SsDF*JOCd6x zCfD+Q1F_y>eR}Te6god_s6``8#JyzFG=*X)t~3M}s`y!%yzIbsW$8$&Zvaq3ThtmX5_nC)?C%nm;-dbNchGN^YI!7jU0` zUh~ZvQUFIQ75)a5P>4!yil+oOIn1TRWyB5iGK}3D&DgSXFyA+uT!iu+ty7~Zz)??z znjOYZJy<7@lbdz*ofaFopLL1x3OJ)~h(u_;o;a(+C~SknCY17fw&OGwW2=H$Ef?vK z>{rK!&I#Xp8vSl81IP$JV`KZiGJq9QFKoEdhZr@_ve-SZor+x=cJK4e(%Sz*W2@?t z+wFpky3F5G?mAAyVNYBTaA(d+rY>v=xaH$hw`Uf^Z_&02A6)%l5&4tHEFOcm!CwC> zrsKh3&^7#G!qt*?^Pc%(;T7eYe~5$I6Pj+5?oJEic0^HHBfdcRTKXfvAbIkYWAo~$ zuWQfzm)zHlv$lwAIe*BNBXBZZ!Eu~2d0cNGnH>YG|BsNFb_vFK+9gpj-w;cq4^e!N zm%m2AK{vMSXOY7aFA$wyCd3yJRB3CHf z1#&_+uvGr*eex8JWSkYr;Au>xnP%%p@uNTU4@7?){l%yF$NHcVVK>#0+T6bC;lpg% z(v!2;ET6WHWw zHC2`_Zuejg<;3$5|BBT-x+>OZFqL#q7yxft&rehEG&|s4(%<^F^=|&okfV{eRpxLc zt#sr83(g_dEsC~aqRDe7W9}LZ?WUnujp&@!!5!IzxH-Ia0dx{k(jm8($@RHYx!$gk z?`L?^!H*vWTltQtCnC+3NQ598=aSUZRb*JCLHmFpHJlMI&Ba}3 z-|;iH4ndAtV$mHyh@|%g9=4gMrR6H zfi!n^S@RflaR+DTF>< zr^g$TqRkt%D$3hAD`Hp=tPOz~|z?Uh=iH{Au{i2Gp zW@J{v?@QJXQO~V5m2XZ0e&QugAUhsC8(3LS|BrIs4z+s@^~+h4l8wQCuIl7$6$^b8;L}eLqfEQSN7!?QZ+&1>fDM1XD>{ZY5i9o2rb*|Ot4+j(@HghO&7H@7NriN5oLzBVs8B57T@>cG{#j#IygI3R?7qJW5SSb8#leI_Q^O=zTG zLqO3wt8QtO`C~doR%y@T)#2kQAzf`gH@nd|qJo3Qns(yA^Tcrvpbpx_c)pPa>GSkQ ziQ|~mzJe~Y3)bX>1PjXCO~v+m-B+CEYITF`^!1!y^{TTG&aKdmCVv~wF9-Xp946%` z)=VNK&2fm`YvBZwU>cHfOR>%(I8M>lIBgDFfguuILy+qWd!$vV*Jo4G8S(eVN6`K0 z+$t?^=C)TFEL5+P8bU+acNgCs90#R7E|lSsm-GzFObPS`K&9_mK`YjxA`EK4j6q%q zhv#znvwc_|%)1R5XhFrh1q~#d}?tUjZw}bfQ4nPAwfGn`c3oRCkiuM_yeLF z{4}!C1&Zg=!&;|u1<Z*2m>#x;RJMFoCM;(@`YZcaGbAWX8`fmz{SDl)*W*TaV2XZ&0y^c zJO=PEVeCK1HnH;#*&5=B31aHJ0M840-;SaFzKr7%st}vW%YJ!Jwh*VjVt(m~G@*g* z%aDl0c$%X?{aJ5H6{mYF+oeb{UnP~YP@z!5=d_!TB?j5RaI5Fr3e^W8D3vnW}>kVS5F+k!{8{piJN#m0b#20s%8 zcwCf<&PNlobXS|OA)y&=o+G8&SRZF{nZr}kD%p@;!`{I6QVCz@+u6LLs)MMKLv+3T zyyayh03(kI2Cu?8g2q)ZUr#+)jPWP7eQC8XR?<9H4U3B~KXwZvKO6Xq_QLV^l8XoL zHd9-UeZf1W2!@Hr8`5D3@~0Xt{+lC41T~V!o(mKJezU1!46n6*ru!rJQKjU)?W(ML zalqyujWmvWV%xkt_lhT}a_zcszTRHj(q!@h%1oTs?`8tynPz77ykl|lDuR1qoG7?g zOKeV;ODA-9W*1iH_I3hh$FLsxXL5t(MGcqxArE?U-<4*(Zhj6*7K9;HDx~(a#v{m6 z*hIAKvLtu&BqYt0?PbtY3u4(>n6hyqOI(}`$h&7?Xug8ro?YL2MdoTPEw<9&x4rp} z?rCL=EWoktOr))2x#QhjTVX2kKwaFGDnJPlm3_G>lOywc)015y&J(*o`tjNJd#rrH z-j*OrQjRCO2i^^WeO)^>e2Kyv^9c>9<(aeTYg{x8k*h1ObR|cN=t7U(gpGIq@!TQ) zPp^B+V>s(kE;Qat7kvWF42dl5on~K-2pqWSau;U#V$Ik4OT^|hTEX4L1|hvJHCeb6 z$VjH#o&{~kXfb5{l+@Y6AOx#y()nmFA{ssaKpt>Fa{0j8CyRo^5Ev z+cE7gf6HdG{JO-+ZMWG68Kf?3Gs+9~@80aQ3@roBDM2qzA)Iex?^_nr^&kl{tl&6SD%Z}8v44kXcN@mc*o*S&$ z&wS6exTZ^&;>zI#~VYC->@%lW8)ehZy1{O%(-Js`%FFs%)B?~ zMOF0qTnPw>*K`qO;|W>1+NdD7_t~WPP2)~2zA^w1s8`~bcu{=PjE_dw@Z~}#CsdNp zOdsF)Jsd2Yx`PwvzDreGzBrNTMrw4$o;&Znx{NvD z!^-THK6vdS)!jvw5Ti1fQBg>5zK)^OG z0MPm)Cnt!VD)g?_GWxoJ4g1rW(5#Fxy%f|{&qnrCM;kqt|03f~P81&pmt=&Sj*?w{ zLS)uTxO4id167rpxTjmW3<%$t%0vH!6t6rsbBs4b;QX!)2BiuYoE3W|w7c`+D<+K+ zrC;MthU;mMthS~CJL2V0E%+0f6wk8%2Gv9*CH~xGw)6XGXSV=lKmrwRx^odNfHh~4 z8jaz@oI?7WF-2dYI7xOxYwZXZHcyp z;-P<-x&qzqkL$Sbkkqn~LM_r?s`+<00|<%5-x4ffaJup?C6sz;Dwzt-PQ@cUySWKm zGRw6i^bPRHT4L*u36h)rvf_+B&M(q`dlL)+hDbA|!d!LRxm)faAO)rEr4yB|J@{r5 zFQL>Fx6CluW4z5@Oe?7+(V|i?)n=7vy16K3TJheRH8)e90qi7z9Yt8`&U}#5B2PjyBmpk<9oBn;4f;2?8`rKK*0*+dMXWVV#Bc2 zb=+lVw-2f+U)>z%FM-NWFEjZq;9gB8Aj#`mEfj!F^YK5TZ>;oqWoA>3&amH%q|V_CvGXa3-085|aIKDhyt(=w_Fl0SfYrf@&f{K~_@&F1 z%J^Yv0CNRx`OxSrd|nB{CkO0s@zbW242zcg_O7Gt|7_q)br)yx@dp)!UXf@^HuUMT z*l%?S^|Q_AT6g*!xzxef$dyW=Jf)H~Xku{uSpCpj-gmwpzu_d6+M7~2!wt6nB6bzV zvJswzTh2mDVC(JZ++F=iLs#Wv8!{^Y6RrT%6Km%aZ+^;8bz3Et^*7AZb&{S@ zn0z7}&vzFWL^`iQUE+OJPcQGeE%Ym)Dd!%#x;|F5hVG~kSyp0|rH+kG$xhg-cXdodda3YcRiQ6r?A$dZQU$~)i^TE@4{b-sK1J1s$#;>Cn^*nC>MREMfi~b%DBdt7V#AEJYU&(c>PRa$ou2U zXL6fR&h%`(&4%q9hWp$-Qb|k|8hp1&GhxhQ;b75b&+|Bn;&c`o^R#-p6F!L zxpWL;Rhdo$gI(ku@aHl2L5{Q}%ypYb#=u`^%1aTHe=GwF)D9Ptj+WQaLhKaH`>TDOr*%9AtBakXt9u);FN(ER-{%+% zZ;oxVYP^qt&sJuP``S@=S~p9k2R-^w3|g5_Mz{b@bNB6xh3A_kJ6XRKe_ZVwH{?c$1{zXDV^%n_6YdT|WpJ)s!h5Z*kr=VY3=B%nj$=KS;0VojgT@Lee z12QxLCVlx*UT~81_>E>{xqp%Zl%>}Ca9EkZBnr&gz`NRm@O)K`1t#%Q@V?!$H&sMc z71VDfbw&W7?IP6Gh)X0Rn5t`Hvj?XfTq&r0 zxuZRxwnRB>eje;@(14faG*(}wauog06HPLa$PkBHWjS}(MXbsOGw+^nd{Y_@zW`pC zq=Tv=2Q8f1rs#x?N>RM*Xg%K;o`OE)NTaz@{JPHkUJZ>`>ueQTlK>02=b218xEU#; zN95oLFLlOhv}Lb6cL&s$!h%PWs7r7otV4h;5N|DqDscuK80P+lXq@Ema8llITyn$K zI+u_^%sCx{7W^=zu(B;6}E0LBgIq6@3^epl843W z{stx+BK=0<&>6#39aKSXtUbr%eFv^wf6DxyG$jfqM;E<#c(Kl0%y9`334bmqq~?i()8gO$8iDxG#bU{{iMlp+ z=k|PU#<_l9)7tg6d)oCzw`ZMHxO;^MvU<%D;v8^vhHyt?JI<{48%*CG@y$u;3Pm1( z&wm8U2zCBw5UGyrjali+Hg+}YQCJ%ON`H7Dq&A3pN5@#?`O z63W_eoj>LUb)i%*6&67%)zse>kNlUM+n1~{PzR^<8_~+2+p}(Gm!r{=&4q8&EBG=AO^m)Y* zJN)DTsGq^kuaY2g+e_1}5voAPefBV-rp)0HpGKQc*J|X;=UVhxg3$g^q>L_# z%=dG}5NUko!N4zZM&EA#+RArn22dvPK_HRo(1W;j6+5!eHRo5r=z7dr?89mjwtlKe z`X|d)Eq~JIuTM4jADUvH1l=|8wK74iX%%vhiUkutx?OrCD$D3VjHa>9k;qdEXcgOWEaCAl0ZiCn@O1g~IERvj`Ebgkp&qOq9 z%017MDfkWoc)p~|T=DbYlVET#=L@&nfC`=AQK_mAUW>~|PgdCxpA5!@R2_?RP=uXo z0GP{Ze=p@LdAjf9DTN8RMTgd7OG=HB-JyHk2G2Ez(7Avf)A6cAr8u1WCLWVC|;)k4rv zmp8rHMm{+{5H&kw^k!X1!bsWeEoKD?7N4XsXK#u!Ic+H-+2mA+6_9RT*sOhylvi_T z104NIre*M&X)g~3OTL-7eeWGJm64GPC!-ZD3XY;8dc5spolL{dvNY;D&F8o}1LjUn znma;iz3s~0suKZQ`tfJ-{e(~qGRHRE=v9^!+fF}I3fYN@h+#^3%Fwp)D#^ozg|ygz z9Sx0xdUh$N>&NFZ8E!0d9%&xxmkMAxV_s7z%)@_PspI%{TjMq3I`3RA@jF2hCUKqF z^|bST>Z^C0OHW`fdZMWMwF`RG*5BE94bMY#<2y{E3@v5v`S~B$H@HaU9IjEG(@Y=& zj7`@@C&kOGwBDnQkTAP->=5k!`^8fpvW7|r*M)|cxtIrzZ_(fxSXD`#Y!5f|q=NHO{X6CDx9)o-Mxyn`9t{d)QoaS4Z%AS<;#F${cEfH0|Km7SQgJZ781XAXo zVgWM!<_u2Qi4AWD{p z5oYs+y}kJ2zB%)G>oga;>>g_lW$(EwQkJtMZ6T8WrCZ8V3yE&Lsrz=j&UxVT1gC+V zJ9ut3sS&a4$`~(erD5r=Hb{SqG*nZRVuKyVlK#?TL$%(QHoEA!!+2^qdCj3a!2tAu zdfXCvFug=?&WZpItROOZ2^f`dvN-J!-X^&mq^0*JMUdjMPtI3sy@Hba%fe0!ngazs zN~LHQ!TFH zk^b&4B0hz$+B8MEHSCceVHE;wf~?_@-t|%X@+63gYj`K#YVkTC(B0~P>z$1_u*u0wQ-D#PBH5LWM=)_RT5zLZC-|P< zi$H}V)3>AmxcyzYwxmw0*mH$=eY}`BYAMXn9$7En@Ho`dii>Eg(DVI{@*p$yg$PV; zJD*%e)dlO;t7i4h80^Ryw1@6zNYV53Gk>{dugVwsJe|Yr+u1COd`MwlgIiI$4ooQO z)&&XMy|*n02eTA%@?wNPb_)}0au693ARW0We;}tdd4z<;jMjbR_5Ro8?Tb08ZTE-a zg~o!@HtPp_a=n<^&t&@S_Z1FaeAB@^(d|fc1v;%PUhF$MHX5MDnH}P@rlgOQozc39FFx$sW$ganJ@{(-IbOdv*^IW+|{<- zePelbOU^;`mNCCsNxf}je=L2uwdpn=3|+?n?q~4b_-2l~6%$yyiBQq;)5R6j+VjtU z;wpakaD`J(^uaG~vzmZ&!)TX)xbdgHw4^TBy5n~57`kkv>}(EVSL}fvDKL9XKI2LIuJ2-rGK*iH&R*>gdaIF29fh8EK2m^xaxS6#37Zw%6@&EfO0N2*mT* zi8Gr?yz^V>JI~?x=6r-|O?yhm8-%u#r*ePj#YIA7Ij--!=0Ic#lU=put~;dF3rnx0=DNNA+62zLY}$7d9A%0u?CmW6!#=ysl72`Yk`a0|qK} zY#hHdAS&L3eZAYDNSpd_hExzWkLVv-iEI6v+6L0>58*CYC&sssvC0?g&z&)2fBs1r zAvFm_9q;N(Os#ghe?R^o>~|oS`Dd8*KZ3-2)VTLUK10w;mH5jeIfh9|8`%1|KEbh|KDNCyYyfA)S8+p1!^%%WgC?YD3jIZ zaJvSnulB)vmeh=ckU8VxOJuLpq z&QPQlygTu-iiuB20`Fq$xbpPa?Bf2_0%AMw+1RQvvoDShmC#TB_k6PTxmi6#u%ojt z09q-HQqzlbusxn2oUGz^5ZaxD61%2`WB+Oc%lpv3Bd{0uiCvqC@hBC#hRQhr=GAo1 zxO0!9nyv2Ka#hkP&B|vMgA7>{8G@@`W8Xe#cRs!SSslr$O?*XKu-sh5C8wNjZBHjdHLaGhwUC*pky{^Nn0x{{kI<96;a_#{y_`Ycm_#C4b zSk=wPR^u#GoA8yqRi@2*y|*41S%%w&?BnlWQomo&-#PtrPX98fTJ9d z_EJ_Q|Hd=t4s6;AvGDmL9o*9sTuT-q904du!MiwaU@x_d2}+j|asM#1#ANcC{aM<; z|Dg!o-CBrJSZY1SqcU6%j?!EE_fLQy#XX2s{rGxx6&tbertpp{XQm{Xh*y+y>26}b z9}iBdxvS^y&fXkyER;~j(ZYP6z%WpzZHbyWa+M;%cB*LGTSA@mm;J)UGI(P5WlABT ziVgj)#;v>FD;F@(UtHElr?N?TnjvK^MeV`Vo$_CE`00#gTBActM`SiURr%e(_AbDM z!jjACDd+Qb8Kfgk@EOzegErHnEOGeDphBwGHw?v@5@7zFwT3nCAUH&;EguPQ7~XWK zev38JT=;abTXX-6zQ3)gKy$J14ku@Jh$XekDy8mq)18i3H)OZV`h3Pg^Z|2}!&*#EZ_7ujs_`hPjRAYWKFVMy>MP_*{5mXkyaVxNy1>xO z;QZW(B|bSbnv^1l9gDe2q5u}foDs_*ycwNQp7u2Z1tUK8CYM!P0@XIs9n+kSqcAQc zxvNN^ZX8hiZ}$<)_CmPk;qE|Bah^KAdf(#6w0P8ed(Xmh-r^*4B&^-FL4Fy_ai)rO z(yj7h?yFT>aqz#03AH;%_B7VE!6p(Cdmhb<*<+&#@TGeU=X$SkGz|t%$>ePaoPry; z&+1(1o~r=UAEcL;!s?US<9VqaBFgGEskNOkFY=+! zX-I@xvYRgpgNic18vth=?^q_uByI}&YSsGtZ1cci#?o*+Mdrrr;&s1mdEEl>Y~PMo zu_iYiDtXRq9xrd{s!H`%!q;1^2-oW4DZoszg$J>OM8d2ec-L7~BY7ZVfgw&-XNgi2 z>D`amK5GlWCcPHm0HbwHxEON4_@$DN zCmUJ5|FTK^dtIJujT`Q4!53R~EwN0{sKQev-m^6CW~8=wZeHmV&BV*bLNgZMaW{M5 z?+yGN(+=khLJBnJcZo&KC_R*2{D)1^Hv z@jbJcpiCo6QYv^xTQ`?OP;jSe=eL?!vG=5^C+UMp|CWq%+=6*sS`z&;#O zo*9(avrgJQ(*I}y4v>s4&l35-+77u=n;$#p^C{2do6YC?cpeTv9aP?st93cVycnn5 zgz!xD+|s*bO^k$h{#m4O(sUpT!nd0^$Vk`0<2_TT-aMX+!s{|e+HbM`(+QTjPqiw& znbQWT%`M;T>x^GOsS0SP+#;PXMVNJ-&J+eY8o!7ffXt!XqIfZQ6)`y!^QcSC3Z z_ktS;n<j19 zU@rhJ3w7*Of?Hf+x>Ca?^x%BYpY^bQo*d<9Pan`>mqOG)l;$X~1K`uH-DtJ@V>+0L z2TfysuEJk$EKipBY!dRIg6qKfMJ2`z_X6ZD$o7!xVC5g7#cM9S(IRMOz5CVo(U;y& zl7^e>XyT#{qxOCW3R`cOjP6?~I9Xw?JPztGdhmr@09Z!8OL+@4enOQ^#rodfgfoTg zn<7PmkH_HvH&gDf7vc7vnWZ{RnKU_Bac{h>)*Ko#9C)psk1V8sb~3pU#D*D+{katQ zI|t<;Ytjs_MX)>+FOYVIulOPlxHN9%7knqVp}$(r%|DhJR+IZIn7}gEr>M8a;(Q_* zDNg_#IK>N^_n}oPL6o0@o>uiup6NG!@H%B56#w=G#|FBD4-D)+wI955*xSm4c>B;K zAh>ujo15zpVk}~5kr#FKbXW#RXGubi==PTduE;43MhiRbxPm)X2oeJ6xT0ygCs`bd z4yj1yXiV``Bnim}=QD`OC9hVt#Db@|qqUw$BQ5c#GN*zadBsDzGPrEpSk^5EDVsce zG*NntOdW8Y`n7nC@fU@B0v9@cWoZnLs!7e+ z45CB#x;mn1+Vyv*-8+Y=0DQ4+uCU}SFaT%oaFFO`pD2NSMWr=9s_85mmFpDY6w;eD zEvH|C17Ij#;DCHF@ZhGy|Co1;6y;4|Z24LAvjZ&EYR?^fKb-FV_>vbQ9=Wt@)ta=T zinj4}|WfRIDqu zjI*SF`HfczTr?80{&w#{ z6M-G=`s1UlOw+9%Bx-GZeLn=!Lo8bOM(Ug1@O!y^<498uF`T^0tMS(cVp`V&z3}!n zbf!RG+J*luKt+nTCxVFTQ>g3@Qc`;ougU$bodemG=98tJnL0S+zD1VvsVgx`N{5$q zPxVu|5`8eG>U3h&8OLI>t{zVo))V6v37Y(lP<{@UN4tt>y&HqkO!tR;W3r32wot4P zs`*ZJ{2VV2$H>Pqp-r0GYP%<6ur#%1j+yHaVkpQK$qd(k=iUJYO`vaN#tpEvXnUw>fi2e##Gx zLNGk9S!=b_iaJhW$MwH$;2OwMXUMYKo6F>7ATV~k{V=2){)jFf@Ky}8<|dH07GY0u ztNc0T;>BNa(DeHg0{m=rt>uV5qvQZO(KA<%HNTq|l8@$pe_`mg+}=an7;;f)(k~CD zekMQTi_&xFur5kVg@){eh_`n0-T)437$?h}X>wkSXgbrQ%g^)dC^fnw1r7oCMn+U9 zc25z=Iw77LD&Syu141r0!;0rypQx!#=(aXg_V~3vbIhZ=>$w zQ*r4!$DOn%JMjG|Fh#THAk;H+qqX|887n?*u*vfLi$I~tR^~}R2eNC0qb2A9OHd<> zOD2YhqJZ#avS}8g+mEdw??sw^1q{6 z`2wXh-?$YCiEP!fSgKZHv?}zwZd9r!(d80}_7hnbyFfW?hinKrMx`#j6EGsK(EA;S zx*`GOEc3K;QHha@@HkYTLFqjLduaIHM50lhZ*<+0Sn(ShGB+47z9kvz*=Vz~Z_oQD6qbp5CsY@sVJ9=)SD40W z$r3P21cO+D4@^x#_@X4*Iq3gn3*<8Y*JQUM2@CpmKpENOOQh9 z(iQWjFKY@pkbZLlex>&)`-C|%;@_fajC)X{ns?NjDPn(+=F)}7<%NmzAVrVQ={$>25A~gUy(pW)bf$wZ1 z6?+siF~ISn&w~A4WCFcvQK!_<>KBSUu?FEu(K75NCqx z!cN?kcqij!&|*GK9qVEJr2r?pt-x2+hjIjV8b|x?C}=Z^SZZD4BnhCOW=(^QUfpm3J*Sgb zLJB((O-q;l^5w)`+nb$pJKzN(=JG+lu{HBy9AynfcF$+^cPj}fw_7KGsWgb#=eeO8 zYbe^AyN-m?Pky)I=rC*oHsdy@{v;{?Qs=qpjJMO|MR|ghs-@JCvuH9Shpl;r!qo5O z<5R%gbjJMFsYgOtypU8u_PWTBR?^=9ueS9&kL=s~EHGC3+z+R468R#Wx#SyM=@nSj zuI^l1`tqrdfk zrdD6pV5W1RpDV=|E)aJD2U_=u6wI`>DKb7xI>soBwh|e>hhcAN`tW%9p`o9aENvgU zE#|jWSLz~VVi7xfI#5F?Sz&c6+7CLav8hs|TVByDqMf;^1oQAX#>?PBHz>-*( z3MsrFDEy=-T*+L5je?t}0y45-I-|tE@kz)y5utHH%f=})6*h*y5QlT;A@k9n`!bTt)du7XSGV4_a5xTv#e>CLZA(J0rL&>sTL#!>NMXL7hwgFL zpIQ*d=Z(&!E1+DAl+a{5g9HD~BO31$w~?7fn08jkbdLos9~Tjoo?7XAB^8s4xx|b1 zf_=q~{DdhJ^Yu@Ic!eCYX~VDXYrOKS0#h9?>07pTGB7QJ*Iq3ISWMQ&lDQuvmsWai z=&?`XSPOj^%2mq)ttJK=ugmN;K1}`amL*iJj&7-f#bnFOIg@PBrg-_RAr%!yu~tUR zV7Uqan1v*T{kB@;as-`uNFam7^jgA~HJtM#66E=priqJ&+nK1l;!P>S1NfMX=emV_ z2-*y-^oUyqyN;HccTT+)Tj#(TMf8L-iSa-^=~$9o7nIZPNSlz?Ya87lgyvg!_S1eV zg|&@t+d3B%p2L<}n&kix090%vXGXiqw{tM(Z+q%ftBiR97LZwcTqw0R3lnb}b@x&i z!yu6~*5ce?8~j34)7znisB1H(l$YrN|EU8wPY3(y_Kae^ivY@Nv3F$>d+2zId8-I^ zeKk!!%4jo~ytFFh!gnfIwaP?6+)M$#`CR&nHmHRMpi2))r=2gg4f6L-l7xG7bsW13 zG5rV-v#3$?=cWC^5thm=aJ$fD&-~H(mfgFFDhlBdwqV#THFbS-gcamT>ZYolkjUse})Xq8E)2c1w3{b+kH%{6V6<| z5W;@TQaVZFJuJbyxc#nsBFj=N>2xzJU0mI+`bSw8DrJf3XT;$L&|4mq?n|1(E?4qb zyR=M$OPI~VZsGG5s@bt#bk=-$?zU`?pv=5MqP-_nboXjECf;kJ{xOur)Y6qgszEeI zQ>rI_M@1zmfx2H)rq@PW6*(++g&czeU!(0F!&j^V!aa5wzjLN&$nR8)w|MOKpW|AW zkaC>R^OY!=EIi157gq2%cJs?l(WN!4;)o^2>3e`;d$7J4>HHvNl!On*9p-)Di$IAk+zfo^OmzxxBQL3Cv*c5uEbWANY6w2NGB;E5 zd<)hyS-J##pK+;S`r6e+F&ZX4-i+sM^Mn#0;j6$@VO^cG)_bn=Qo3+CNQz+Y%x6d>*SJF&ldNahfWJ$bhO8l)X_o)N0SUh^eunCEp;Oi8)(!eni>>Asuq7oH3p#>?S133|HH^9{AWccAmSir@XX7-?h|2{O zbnJR?y3yriO?AIy6hc+%f_{Br@&U$k&91Q7;5LL)_tbX`2~xbjvY}MbJ1QOeX)PD2 z?b}GckRpDm2{Jw&EOKpGYua2d*(I#f5k8*VQ`P+Oj=ATTJA3-mmOmn)%8b*Cl?Zd3oC>FO0L!7`B=KLuJFLt$H*BjJ+k4dA!92j z;hMQVhcE$gIwOQMgDej9aZ z!qbvN1~QYLb0iBYl|1lk&rk2KjghtR9(xrJ{W?9;O_3h-644J0Kwhe zU3YMY;0_5+fZ*;9K{oDg8`clzEj?tSPny8ka-4-D3>C9`VHHLGfVU(Lzw z?T6vb<-kJlXRVx+f}-JJkyP+R^?Mom722wHkd-^tMETYB7!Gsy@jmI#$Gv|2^{tIGny%E|k@(EG!NloA~ zl8Zn4Z%8nKwQMY?gLHeG-&n=>UQ5`%=F z8JDL#d#H3PuxHATs0K1WKM$Nt4KzXP-n+p5(D)UfZWCLmm)iB-F5<+WYQ&XkzQ?kh9~^T6$_$Z}i#yD8`S66y@NrNyN}8RA;n! zciVx6tDW}^&}CRbM$F;Mg!ZC|_7c7`_jQ^TwuccjjeuJF;S$2Wy+uM#-6W7|(~b<*EN=|bb#z}d9)CF$jHMlpoP+tu%OSGppOFNtaoM?JBOZC7;H18X)^gG6zO`Z!{x_-` zwjV6X)Z#=P-k5M&Iq`i(!1g8B8=II`>z%B9n@Wk{U^*Q0p(4Y{?utC&I@V;F4fR7K zSo%1YxZ1A^!t#G(?0wtYP^Xg`XAUtM7Bx>x*fr7bTOx%lpPxOv0%}y)x_fGAufjYE z2a+X;w3;G=w?!}}e)1*Hwh8WAw@Yr%t$B=M%p~1(06BIUC(>8j0t1~jzN@G?gkn1w zs7+c!K<|$B45qu?c%TH-U5;NP9(wr7$Qx1|OI$vkxD8AE zYLlA@bUwBd+l~xx#lj9~+vyulqy>or+mq9_!t2}VB}@}{0I@4lV-uy-R3U?)OtmyQ zdz>_Nt2p3ScTd_85BNIUvmdrS9MR=SSZ2FjM-Nu%wKz+2&+feaL zC`7=h?Joz?Ab56B&(0HV_Tkqxk}-IRQkA=Q64O9I^ntI#M=vP+N!P&S^y_DDp0>fy z6F%{eqXZ}lhf{6$%HK*hD%LqbYN18J2KIz+@PCmt8R*^V!nMIHb_c z^-05iqtHdr%J2lLRDa;!!`S&RA)a7;J_ZOw4+GlA#+jf>BKfXo%Z$E2eQ~Btt-X1g zq&hqm6j!z5&6c{MpCs`kNVOc{*-ql92dsN@sx}3?Y^Wh`qVFwR!lmf%M zX4m+$d@Z`Y*oC?MP`~CjL`%U3l}-gRi#S~}rpxy@YStz{q2zN1K>f@G4l4>OGt??X zhpNq^P&}};_xV;!TwxqO&oo>V?`n(hReSAea9K*e(|uns2JK4rm2L;anFm;T*;-%s z9ECtF*hF>yn`7-YI+lZquk}0wq?NA7o;S$A*9xdI%+H=uQ5L&1wr_JK1Z=;U0f1s^ z4r9KqDGV4gznm&C2Ol^dbjI$*l#}YO1$zeHE%Y{>T%Ga}D**{^$a!vn=b!VY1GH1`CoeUlTN5cal){WJ=KG?g|F`|>-e7q5LMKiWBmqVi6a)8c}D<=e;Wi<)B`gj0#2HjbUxoZI!j_3)ox>Gr`Mnd!)$rg zKZEVs{XIR7;%eJ0{}ZL_&jesn{Qc#VhgDgJEQGC682q0cAg@*7w4(qg?d(6W^*;|$ zBKmJ}z|LX*dmJ#OH~*hjC;BKDf{KMsq=jFTL4Oj4Jo_$a{VN=a)n7!Ne*}G%{p+6; zO#h1R`S#O)ON#sdM)j7=ciu^tC5O?&QMz~Z$hk|$QgA7vx?Ns1PthJ zIJZ;A_Y`s;G)YjKJL=U8OioA*rp83Q-f47t{7Zv@p4eJ_fuB=63D!e!06BHOWIiW1 zqyw}4K);-sYmier6o03QYx_MCGK9|c7EpzW)Kym`-TjGr*#}q>2avq}7awN@EmeLS zGo1a~<>5}f`yhn=@eX9Wb~gI*)k#Kn?X-<&=ug2GKynj1V|laFOJ*2z^EC z^4`;l#m$lj31F)8PiLQR{N!uGP$W$E`0i`WqYm-F)h~F<&=W^O|tb zm{f%tyT6VghJbg76#AtGep>1GMr?!E%fq734KYc#uqwenGN28;fAcykDlm24yi{}b zJKV5yPOJ6)Y1TJyJLq(+OC|N;?FVnj;UykNAj#NI zV+;A6rFgE<^v>+>f*9q>S&R7P$NBee3|?ts5Pbq08%jlLQ+1S)O2Y|Bl~Y+~ADfB~534 zsCVE?K&0cIIk`d+_vY*w`w$gAt#fCU%N1lG1Ikn`d&jw=R`}m|BO!Z7plN!KP%bQ& zpYC{F8@M{3YZIugrI4TopAAp4vV-yH8alX=ec1iRIfwuNq|V@#GzCkQpho|+=)u#V z+gHw_!#JK2i-t>*Q)e|gW&Dw_(ZUqN3V!P3)F_-wRXVr%Wx`uBA@%=o0dClGU%1zahTdR(=wuDKb6BiC z$p683$?@iu&6EM``_ReexaGB^Nbe=U_-*TBVh6NmsieY6w(Vq5h|2{Kc2w)gBmXH` z3gM(P{K(7`Yf34W@PDR*yggO!UTWoVK;Bn$IgLy+mvp(Cfb-XGAbw%LG$1or_D#J? z7GW&NU2RiF9%oTBvtOQW6LH2Ch3mScmtua7o(pjCdWa%^Wv3^d4i$v3VDKB!$uWhl zEqchxa4k$$y};-n>_;V95xfSHtucJ|W-eM8P5hsk6j)d~U&`C|*)7Rf8cRYe$Wc1= zI-SMZAwv{{LvIfYCfJ7hQlUaFS;X1q>12fenv%VTSiVyHTwJ-;Em@5}DM4`|^$f&zDe|s$ngH20^Hof|pWr>S1>TpZ@uV9W zH81dZWmk(!oz<*6rs#5i=dCjv?bG<|pF5mpWmNL(7?1y&QmQz{c0wZ2FZ(Fb0P{439R zr2%&`mt!O;d&GhLTdel5j*u|!4fXVedZOPun2Rni!moPa85+|Z_M822 zze~`%*;JU6l){QA=Z%Ve$W85Xv_!6e(x{E_ZIZ^jNY%+%TL~dQA}cNeWuP~$kE+_J z&0IIb5e4Bd{I13?l252D-g*aU7tqsEK=QE`9HCHD(6n-CbXr@YrdoH=xgia*lkv^y z`REz2$QZ(d&*RRxXd-N^u&;Mjo|NC;x{a^-gai?Oh)s-0`EttpbyH!~5ENq~%PF-d zS2N^P{_WXpOSY1tQaRA~uUxcPoAH_o-_w>1t@TKbQgSB`d#URPT7%7jJUuflzTGd3 zqjY1;JOmGWo*marN^u6_tr49Uqx8 z)$idIjcKa_!R`d1E;e`Pm59LueHiZE#5QqjuK^)AZymHpLu)ttXe3;`2DPts8wYEx z`LOCdUBRM3Rc@mX5W)C}*KJUZIch%BrSmNa)XM{}yD2ycT#IN*1{hTm5@n)MHha4D zvLc!JB?_t=b`F0ZlrMNdy?k}VIL(pB|FUzSh&;SjA1wLsHas$-%K=28PShd*^Z8xj z&Yg<9>;C6q1vv^f`kYTMiC})Lk9!sGK2Kix0W3?`8kk7pbu`aLWO}x?BF>h(d+I?= z*f?K4T*%Lx<9RUc4Q8iCgvZeA-=2PwtE&o+WJ~6OF~E5K@<4ELFS7_ zzF01x;Ud$y3(q)3Y=WE92%&!Y*oIltXx!Ls5A8Z`sU{$ZG-P5rVLQ37F+8tKtpU<2 zixXV^aRn4%(9*w&iERj9XN`3CkEH{cFJ@IL{4{*Gxj8)Uj2aAV_Pluhb9Kl)JV%}=LHff+_h3$JwMLTmPT_%FNy{FMyMFq~(acBDCrkTiM8e-$C z-}x|7v}i8JXd+CD3hGbpb&g*?Ru^9(Rt!Dbu$9Gy#ec)L|oG@b$}+?wi#_P^V8)gid4@DH)(u@fLPG(r0jgboPG0l@?-lD#^qf3?6nFj&2v;^A-~cb_keYAd;J}f zkAW=0e4AZ1$cK(i2(DZQL}!<4H4H5@xIuNdMcx zOT)SuB)=6 zmQ}3{Og&3y@)^$9`DKkEa7E$pw05DYIud~YT>(E-?n!3UfI||!U zNs!-bQChegfs4$31NRHrq3D2X9u3bhpVx@*VLtiuX=s2aIKAihVyCf3%=hc$M)b)% zdM;}`UT4(!))!oq$GWe*upn(63TG!evzxu+g;P5jND*vZjTB@uwg!&De^rXT@)a|L zTdR8)ZRX}W$97!MYcFEeYJ~?kera&mNxN55c_EaqCA${C8N5e7Qo=8QGB_+-ZOHcB z@mN|ut>Z2&ILV5Is#W%;wwR@tq%nB@^dY;-U8u>t>$5(|M6M)@($@5TTVjeezZ_j@ z&$U9ampt*}aqNeAtzr5t{vsrfsF+;ge&VRSedpa-q%77D(dA;c^VveGR14PeM@_Bj z9Lei`EB?6E*y-*`Yj$3}>(O|$v4$)gOY~hi^{^tMwOg+91F!NpVwr~q(Y|15Bm3O$ z6P4d1{Hc(MfY9WG$yk9_7?T1s>2LSgn$63dvy*?h{!0&ll z$lQ|Y`z&tebk;<8rJ6RU$R%EH?wrb_8`JlT9n^4@Wf>}s%yl>G-5!(8VEWjBrebJ? zx7$|Av=K~`=^$!2=qUpx;O3Gl35))>?~)Xb8l#A z*C7uWL%RDJnSDNhc_sD+sHq$@#q9&&xith7FCpO^xT?(UuIt5b)fqL$CpYm4aTs14Z9?mDU(CaKF zXwTZL?>PEWc=@9TYqQHJ0eSCPD2r7pt2j*g*{ThN@*NV5F}75zLgu?^1-8>P*=yb_ zdIp_vW*b%;vyE3FSqMiQ0Zf+);JuDf0l$vti@zUGHRlp056_=}4p228`8eYZOX^K^vit6ap zMEpq+KAu8iADFfXFl0aX17jtOw-qP|q@6EAD&YK)2{E#8m3)g3uKjEmHw%7=ehN46Rnz)@V(clEotkGG`mv-8V-qs{(ZIGNAqU`P^N1U@y@qe?yDY#nC|+SJjII0_d?U$ zH6QFI&gbV38lCR{F_d|qF4aaSZ{`91O$}|i_Hij=%ky@hNCn3oV}&^$aIcxxMN5^# zCb}J_+`yC)+$?gpPP@&pfihkLZM>IE2vm}QpcuG%x7o#b}S{r zKGhqWJD5NMGF-u$QL9IdjyoZ7*M8;8`vrcf<~!03G$%;Eo)RiVYUmnBctl*`+w;T_ zP|9UIYnd-Q^YC*l__9klC}TKlNr+n{woZ@ZDy7xlJEK7$Vh#6KCXWjpb?;GWSesB3 z_^)>l-2-SX*A<*qr|D3v6jDn*wmm(bx$-ICOCjfZ>vmJeh#{Q04wjiy#fYsAD*_8H z%eUc1#mn_uh))@$oaMs!Z@up@{fEbpPO)|CPYb8})Y7Tzp#568iuIXD1qC19#r+He zSkW9Ts>$W0rNf60|C9u+F`d=FX&~cABK}A?FN?@GEi+s-(d2@Acz=(!vF*R&&%4m* z%NK$E)a>$EPVC9Ibn%Q`YIP!o(&`;Y_AW$Y3+yJ~ac%ptDp$l!8`Ts%rV#$JN!yU} z7OU0-qW>sxQz(@Aij+a|%B)mHj28Jd2{Ps|Ej#~QLmVxH@*7;~zp7||(LOcDDLrt1 zOUO+z1X~3=Wxr3xpT(HyEvvTpGVO3$3Cfg_vgV($|72o-h-V+{PN?`&MEg)XDhl3m zSlpP8^9l8!qL@hidM1bGuLKBeWHKH$(7*EKR&>pNa-#=z+u4rUeq8UkT4;1vT^vz; z-&kWWjn@9l`V|erF&-aja>Dd&VZBUIoI$*xCTqiNT$@9TW9mHf`H5iufdQwy8|;LO ziefGOq#Xbg#{GR2d*0bg{FhlNfwmINH=m; z-Y<5Zw7K0xe&*zhBe{EV3&Jx;T;UT#_7W%upN976ZL?koskx3et)P1IITQxngx%GY zM06R7D)?FCBd;AOfGFSOM7?p$6SXzVxsez>Vde)|<-tywL-bH|WH#&iS;W@K^D#kL z3L^2V?lAsWVUy24Y=#z}DdGL^V(VPTVChsU(yVMFg!@XQ_{!J6@Ik5c{Bp~r@Ayf% z%zY|Q>$L!ezrDZ1rNie7CRb{g32zL^yVT@<;Y~ENAT*!*U=Fk%f#zxJi$=eDyw9y} zYj1ylM0}q<3`~n|y3!``GI`zCL`|f)FkYi&qtxU(8R~FrdBqzl0)YyWjH6Ju@DBTiT{Rxzm@O!ewbIlKVS+c@VtL!J`+BjZ5dTG({E$2mCIVe?_9sLg7 ze;W%;xS;DRG{46v5VTfmSUQ{0p;2!FI*fbCAmVh<Yx8$<;i1MPpXvLt4|JVoPo z#uY;%-V4M`p8&8MJYIK^X7`h_<)8blJZv(aFbz?gK^lDp1=0|%6p6ypJF<9k8dxu4 z(c1(oxVdDf7M>n(T`6w0BJYa3jtMrDuLoIx z=(uecpHd617M-eIG8;8F)^cgrz0$NB1h?k=dZS1gsVi*rO`onwFe}8H?9Mdxi8tdi zDZ>i%Iw89eOJp3GYNzedFM9dS+al9vF6LF+AT9Zq4jK%3!CZnkaIL{AqX&vAW{GsX>6FY(XT$^07i9O zP%xugH|7lSDnj+*Dv!~erUx;$A!I_KuDuEE8SNsBEQG?UKd92n7pRE19P+l?8#j(M zWiCe?zGt%p^hY5S;`>xyB%GIp|X(JEnsNsw(B+u_bN^sp=X{78+1$ZRQ=YZI-xeVYx=7;^<^310WXhfhjw7MrtMLr5J^SC4O``X`1U*C#C(e^~`>8;5M zc`+RHN#sk*-)vR!6JovcAt9XD%Nnto_&)3vzPDnAl!5dWly#2Fi^1msCpzEJRoAiX zX}OY0#4D1Ivx_CzBGg0MSa5dvRJ)K5(tYg`iVKkh5!d%`0@j6}Mb_QrM^8R5d7xkJ z3*^8?mDwyx^c7O`-Y9`?aEo)@tfa=|-krd*;^>Gs6PXaijxk z3D@+ws!i=FgbE*HUxQkd>7ct~B3ax~9fdNayyiUL@8X2&4ed9FRa__D*(v3vmBgn{ zgE1~!e#?@ou(P0dh7{9fO{53hQita7pp_9hrt+Gl=4^kE5qr|cKs)T|&VoRY^duz4 zgJW9If8c2`@Rfs@UZB-qCp+JoY*8MPb}-Rj3*SJ0{5}UGp44I*=DfSo9&btLuTsaYGhDO(T3lY$>=$eTYS9`t-=j=2VJhy41ZMw**bQ z9d9*Q{UDS#pQS*ZhIOnfGq1&T8-TLeZv z%JUi=Z^F>X1eG5J#S5Z+1sp3Un5@%bO-Z&x)Nz@xIX_ika(V>Bkl2|Xq{nfx{R5FW z^wpk+4@vI7E(*2I53k^|z2^s6qlRN+@)e#56)-KqnRgmw_?EG3j*;t5{)B z_xh)WJ*Cf{cqdS9RoE8aT1~i|^pP2R`@c)YE)db6|`We4jY)%-UR4 z{w=S*@39Ffj-hpvcm=Prcli?o+$a(X^E1}VkpoqUIZVf#=@d71ugrS3r}f@uKlt`T zTG9MvzX(|ZL9-m+nKVgE3r{}dEU19ji2*jA_?`9i`zWoCPD}h-DL^W61(SXWiD%rb zkk73*$MOVfn4}uCum{z)X#(j7BE@P?W*C38l!5{f6lEJL3_X9XH0@^iP($KpLwmm5 zWBJTQ&)ECb#QQ_b*8C~)l7V*AlpC<-{$cDTrv;5Kc5nYLoj{LAlySMtW=l*!W~uUx zLWH9!>V2*}BsPLU`hHxph6le*KRVLu8bwv&#e^h{5!L`!Nlq0-W> zrvPe!m4RAVO74-_-@+Ady_&?VP(lzG!nN-BoT?>p`33*z-=ESPt`{890jPdd=<{ue zNJAtJ`}4N`l*esNX4f}=H|h1S^GVV_624wl3itn?1Lie}+xVbT{nF@p3GPl#}TnIER=H6-4N*$PxgB4 zViB=||Ghzko?wJ>=&RzW5K24Z^~I@ zY3rGPAcnbVNfwP67ZkC=F>^ZG5KX`|4%dH%J!M&l1GJ*dctGi9I6l->dLCEu|*H~LZ`l^bfvfJ^e94{dqx7n@)8Vtx`Po%l>ZCT$rvJPkK$Moc1ZiV^1a%{3* zD48poJmxe67oScaLhlA=|9X`}oimd0`z|(%F^c{)VJZH@N-`*p4t>ZhirbKMQpnw9 zgsu({JMxu{o8C&&dHX}RUf+wJPup!$q2+U~jEoO$*F5h7`E;oL5I3^=`t zQW_3nv}`Ya=eDm<>dY>HvjFu2)-j z&yQx`;jqMX#*e$L0B;5?IWP3~I-M1~#71Qy0_(ezzi9pYoXGL~HP{cXGD|(A)-@H` zJ)Q^uBYO5K82?KLikv@ zit*>O=M!NL{LzXN*kiq|h>+el#Ce%psGwt5SPBd6toEG-Jv z{}uiXO$h8RPaO^ej=Up3@V2PyY6`*k>ev%03Q?USL`2vpy|{DTEky`y8$6HN&t=W) z0ARZua;Rt^&_uc0G+~R-yQa@=^!heftY8L=>}S+&O5>{bvRDoJEb(k7FMBa1qcGeB zgF;PW_^{*#25h;Vbb6rK3;-0Pi5*KNi+?n_jOKSWoofo(74POr3fLNgNHdd zd}?+J)n@Qtsa9MF1Jo=z$m6b3tQicMdD_mI}b`)og$&S26 z@N(uI{h&-|RwwH62gd=VW0_hsjrW+1RkyWqx6XP?PNA-GhI6ePT5c1Hi)U*dX)9+w_5gD>ttQo%-^$VW zDp|@nyx6MXbZMNp zOuSn$*{cTkFMG{>YG@kSAZzX*k4WQ`K zmryQ+mQy}h)Fu1NVmrUZ70m<6c?pdD)KB}`LsCzyz6Z4h(6T9wHU=H0u!9Q~bqSuS z*&g()+#aY%+IQaMw%ySINZ8*Udve?e-6N3zg-4~Ae;Y8IOl9c|rkw4DCF0{6hl*!u~cx-_B0e`+9KtA{DgYmwf|)6XS5h!pb0B?>n4vk9lo!T zyHVdB(gZ)BZ#8DCLi{B_bgaX}X*vPF?WPY2Wtrl@W8L$Fv^{qp)3&U9Jd@p4o;lZ# zHG%~NKUmM55OYAGFNZ%i&OONwQPcXyyk~*)IqQX#MD90*P=8KmzS5dsJsYC5($?T;O}2{_z}7E|Tk(yx<3YBE;rM;H zOsy*G(WU9Acz$!`IyXsrYVs|ufV;qgZSr0Ldtiy`@)Z>X4*Qi(8_3j#BD{!SP)z!i8n5=5{v1T+^Flfb0Lcs} zt;+QV_*uH67pP0_Db?W1f2xA*g<#wpob;-5Ad^4anQ7yC>CMj zz&U?Kgcfj8C00%p9y^%ot=o5FrU$i@;bZsjd~et7`ihI4{_&6fa86>#!ET>ODCz{iZjYU&wy%FqF16$mM@^!Q$b; zG@K|@a>vhHmj#3=*%9!(8%T&BH;P%sj(0KAWOdx)?8d-QB-UZ~G5IhyZ-Gob`}_eF^+?8~^Wu7jKm>$;V z<4=%d#c_B-2XpW}r`aXr;N-aKyh-Duq6U5W330vdH&v!A;1 zLHc54^oSL)mal2IbM#3#OW>^{#`%xj^vCGoaGlECc%FfcBbA=b;A6(j`UbE|-2El7 z8{y6CRx)!SxfRHI&Bq1GN%k^gh_6agLS_Dw(GfX(lk-Jma)x;!RU&cg_UQ?iS>c5( zJhhXY=TpZzg3Wx84II+$F4U9Oyb`yeEspXE@^D4HYCdb7o_mSdS9~K+5@4gy*;kGA1U1dET z0-7&rn+w*a;14p^e=Wp*88aA%1f^=+k5U0nf%1NP7DYLRW$6Il(QSaQ@4#eacvccq zbeRJ<6!?7in6uxvi7w}RpvGzc8Je=0!b&|TG^UqM;g$s+c-S3?IXxVoN|_ygK-V9O ztg$?48@GurR*0ZN*tP_7c4L3+{f6?`h$c^T4JGwWqRb&ugmSROFypMlf)Qk^b zX#WM8Epf&6H88gL3Tr@jh9V=3N6`vT4{rw1W5G&&1}+;ac~uJc3Is2$4aBzyKAqF= z8LIHx+YzV?wghy#Ch%mZX;$Tcv3TvW)Z|yv7i|q{U?_F|wI*A5Ek40A{*R=iKBrnI zohC3r@M~Q$jca4Uslt0o4jF_Yt@;=dI=|sKv&V3kL-=o;O*%focIlx zi}~~8xP!XRE9PI;IDxqaOd0xaxRe6BHLjEV7eE@omOL$Wuh{muUdhps_}91x1D`xI z5;B@HoNS-QuKBkMf%~kkZ|rm##41I<#4$7#DAPgZoOsSg7buqqEFPpMWt5g{R>9Q{ z>Iw3e5MSBAVh}BTb=S}xDKw(Jmt`MTP{`*k;L^)`dw%_znt_o-SxZb{qEW}?aQ33R zw>R#r#QQeYJR#@l#;w+V3V`*L5w>w^kU2LWXXKdw#b2vodq)U*%rymQ5K%jSys}se z)$RX0V^sO(Gu5S5bNrCn^jvEgq$w(RHqm#?dx4I*bjuro{Z;{-- zz0zfaY>(-vc)B(5Hv{cbkNBr)JY#UNMqfyI2LO(+XgB%YzRNi!4Gt5E@)H4cU5j*& zYWIV+?7TKYQ`6Weat&TMQf`PX@GO!ws}^jt@*pLDIyyXy{4XE7Un=AWQLUOvGM>!-+I6#Yum@0D z{y!Z?;T(GTTlb#^qsLo+{M%yv`QiWALE8A^9?9?j12X$XRKW5iYYIzd5 z|GcX3PtCt&I#ydfrdrf&bvXHb?KXv)c9Nj#~xj*Os{PW=|}UMoO z@p?8EF79-mqzwips&T!x)nW}7eW}%-izZ*iibw3Wf`82eAYQDy|LO1Uc&@)FJ9~Lb z)^J>Une!Y^_P&e=*L|a(+1a|^N%r?C1sKKcVEq${qCf4${i?I#y|OiDu+REWErD{} zU-RKVjru>P5C2b;Fdo1v_X(h%E|BWwLgQG9T*YnNC*YEHbM-~4(Xmtoe{P7pjmv|1 zeY7piT}@}#!3f6HtY=0k{R%*7x$E?+uz6y?NaOYrg6dhLbPVWET{RdF`M_4Pc*?iu z&ymU(XAlZn$N!#{A;)m?yf3#mmfcf$mwmA(|-g7tf*viWvx@SD86 zHaE4QNh>>F6xYt|NAwa&e@J(G2y&e>7|T9iEBu!1d1pPwC3N(yZL8B(_F-PH-V6zF zFAPC3(I)Y!;4|*rikAkVgJ5(6n|F$ok&agb`EyWeF!Hq6A29c%Ne5)Gg$HA*Mnati zk@X^e?kdXML(M(0MkzhFrnXsY9ox@zmXjXGj4|p~=WcbnsHSLNX5YT|m|Gs6q16Ya z&RA>xcr_L;1TUeAD6cBQ^@@M_+?+7H;EEeJYy*hCYWY+88KsxXc{*JZuebvr%Ev12 zV~Tu^o>#m^4DUH1-MkmeDh*@4-+#WT2LwxSxktHQ_C$D^9XvO;?VxItR%T2S5=Ne>i}zICe?>%w6B!K(T0%cb z5f@Vt&bbm`+nGeTM6FfdbSati=EWSmE;M68Om_;SJ9m(%RE~2pi0hJ_e@bV|9*=4m zM_yN4aRn)?IBHRmShNPI?aCW1f<)psW^*;;~{TUrA!;EyF5zs>PaS zZ}lCyMvEY4P#81Ug3ysD4fCh&z7TbjwcT{#jsnKCKIq!(tXYMh_2%&Q%{IKLJjlV( ztB)}{4a7IeM8PCn*q=X}c?y`EiXvpG4X!iKhYJ7BZrop-YmBX&T9)d~w= zZb_&#f9i_W#nkx(|BKX{IJG{SYzXtc3ToAJCTd#CQq-nu4rpo0A^leB?dl*>zDE9A z9KmN8i0u9OluoY|_%Uc+x^0-if>KJ}D+g+=6Ebe&W5wZ2mVMZg=wpcNB61sSuqB7k z>`HaBJ_!xzmF=3~x%H+?Do^hj;+dPiSVQ&9ONDnb5E{=n=-+;$8@SAFd28t17~8e3 zE-wYf@xL=iS+|oN3<%HwO5a)9x-`fG(z(!ioWxTHV3se!*Uz9igthy|S32jKHfIBD zyhA@;+&tDbzlo){U2aRKt;7ckr7abjEz=mx|Cp5P5Oi31t*1a@KFJ>2X6VzrE+=+!o-7! zlY`Rcl;x-5f*uxxZPW8-;{_gC$%lQFyJRN>ZrBwztqHX+JUF(E+k*Cuiuy|FGX$3u zs`e2Dj=M+EUOqzobLK1OYty=zrk~qRga#fhu)R|5k$kqP;lj)>dJ7PI)sDJ3erX^% zWax4QcMD}GvrxS=XjDNNv@=^w&1H9RG55Ndll?g2k3_tZ=#Ff?WyeHA=}(AQ+&&Wb zAgAO{@{2e8fMnc^2elB8N_TjxP0w2wCIYw(1g4(Qt}}{+-qh1Pj|`7O@VdfBGSN2V zDesGwZa0oBQMQ#bGfy{v`Tx*lf_ut&3G`oByq<&>d{BjBCQoI(O$oTP#8>=k!*;-y zsrk5Ti(?05j#}l4&S{L<+dDx%V-o61$yHC#*nm0xsXvSj5@R=LyMPvk4xOmALSt@5 zu+`)Z0=n}UE)YZS<81~}ny@f*-hNf`SL%k+wDB+=`c`JSUV_5)B*b>1x&Q%*2|wBL zRZFT<`~swCgmU*$n<20WU$9L|>bo}GhzQOxe9b$q^#tFM%KUm1>^U149C;&+v@ZC- z7!`YpZf^5?H&uE=7N=9*E9r(??7?S!<6J+csYMCX|8~^-5NI(ldGh-NMkkxf@8&%! za4pQDQrZ)=c3pQgAJoDC!hA{fy&49_7@ zGY0EFkpWk{_>@nEAFECAkEZ>smS6mHnrnshLqn?kZ=6rLDiD}ffesAw)wI*u_sDJZ zuN>~SWhW2^s??m zM4pN7J7~kr>Td~ewobwv@=D7BiW_4RjNc??rHR~`EwVhe)H9}^&pT_g9i~e+HOq;& zA!011ehydK{)OcCNN?|O>{X}nZBsT=S;=X>(BG7nD#7HOvgU|&0M#n?2;sMz&03Cn z4viHd51NnsMQ<{9e$LJ~3fGXlaCE*DtAcmj=I)D6Qoz+Qkzf+ynwurht$k>nJA+Pf zK{x@r!aF)y)8*5$MaPMdGxsNao(@u@$kferco6q}%z z51}ul0kXJLS}yBm2yoz&smVJ$(Q&HBWk zDV8685td*q&=9ID(ef32CToveeKgC?Hnuuft=$;M_{Q#|I8YbG_BmT^GJVE!B0ZC| zC2B3eOnRhZSV8b=ht->>65*g4EXUl(Fq56od##!q7Amqjpt$pF^MA4TR?%&=+ty|r zQ(}yn?U-X`rX*%&X0~ILnH@7Tlg!M_%rP^|%*<@J@}0AHpFR3Nec4xit09e&R8?=S zch0ruqq&{goMJ3cNjyat%5MnV@d5rwa0^xs#((*A?{rH>O67-IDaXCa33PXdHNa-O z065E?K#h{1veTL_)$CeI(e_+ejujPB+6wM3qo1jDZ(%&!&Yq74QxckdZ^E$6Kb#C| zzW?*hS6h-Z-J0?xHSIwDnD&jfmVIYnaA2DBThh)A>gq?5L+&ecked@Wo%XcYxYHKS zba?4`M?wY2*nN+-PQF$A)3{*kgZ-_>7Jj|ik|}Exg1Iju4**_ZuN5+1?bofrjw9lQ zxf>rTJ$%=<)v<*cETXg>$SRiv@+aDE2Ry!*eV}VNfb@BqH>*s)8ft-ZdZCLpLjQRD zBP0A`voTSALBQ{Uh)>0?M-vt;v)MoRI1pH()>aIu`pMiaSYh$?K3hl$PINl`;F)U% z_z#jJw6;UCF{6spI8hdf%Zdn0W$_(&~6#5X@AC6Ji;(>yEot&k$_TWP1#yd78@QN+OwrFP`EE zd1sk6`^-|6wE$8QjDs1P?R+~KcywZ?M-g1c#=wuxZ%`PqiaL=coK* zjmkbDzvq^)mz2+>4+EpIi{J|$TTX#7UdZ4LevLxm4?f;+`W8|>fX^b3rS=>wgx)dz zI64mA4|D^LSAA^zSUMgDqz&=2n@>qP+lhhvv!z7-#`dT(ECEEBtzkq`XbAB1-KtE7 zr!lNyW)g-I=i;N~-%g>v2o800 z)sNUvj&0#8K$u9sFxTD76id2`tlNY43#H7Bl7$(XDIp@l?-^YMtjP6tj3re1WK{;j z5PS?aLP|vmi$i;}jj8Bot34I5p@pHQ3Y8z64EFfD33OAF1AY4Q`BN%8hBjIv%v9C` z@^R?v+V>=StfFsMo_Se!ool43TwT5sKiqRYx|$W+W4!V_{dnWvYvV|h4$xb%+6=f% znkq1b{g}kSZ$~fJ7IGNXF?@uN7ZKPwDhb(Zw$u&@(MfBvYYJ~Z+l=U_Z6EUHh0Ef^ z`2q5s=4q<7AYeLU{rW6?&L|C&9bKTi&jN2US5h03@FrXI{!1A;D&O^Iofj(TpB4Jk zc%)`t1>Pw*m}TPY*C%M}Urep~wQU4`WPVqb;AkJ|wJD<*tmHsjClJ)U|3q@Erq(>- zlX8n^vwDqJU~Yh|!rK~Qx(rG1Ir7)fDr2nSd{{8Vn}oZaF*x|`{?f8h?5T z*`<|6)Z+uOuuvC|Bh)h+2+1!=0x#fvJNmA(u*}A|dYZ(l)_umD)b&35^Lyj>%&8Zk@aBXcwQACiF(7KU9(gp89T2N-Ie@Z=0kNcak z7bcLSPsbuDShDwx^#`6Z{Lr{Sz8N&wiw0gU3_qreuPg%1ebv9)DPYR{l54TSYlVYQ z5a(6%U7EzeO2dGxf~qr^48}WLYawK7w^R$iLQHJYQI7_iI*$=;0jb$+Um{KF{?!XmjScP@UZ`bRhk{$IXA7LB@f%sF{K?0q z`lX#Tv$Q2>infFzWDIvBwl=Vy#?H*m)jJ0l76oq(TUBDQ%@sDlcE_qixl*+Y^XGnA zpuOikcw}{Y`)Mu8S6b_W~`u zQ4@j=uLq5+tx*TEQ+=C?&+)c;&pKC?rD3XLUw&zP-GF%$ zkn(u(sB#JVvSt38H1ZZtVFb0WcxBOPQvAAwlJ*8Y-RNXdB!|EjpNwkmvkyh})XFeZ z_oz7dcjj4D!LwsQGG17FV31lj$KD|dUI6M9b(M7k1Ir|^1AQ@vxuqC=-8=;TT{J>}4d8<7O^ z<0bRAG@0+(5?1k5^;|9E_+UCyccOsEuCKj(bVdovsS++WCjts^2-Gh@7&oHKF0*1?ctM$MCL} zl@Ak^csHrOcA9IW3!ri?%tSTHz}>KN^}`!2hFshfC)Ep;rZeQ|joNT+VZ zlbzTKo?!h=Uln|!49ijlS6r9v5{eM^7hM6Ns@>4NY) zz?=&$73IixowVnD>Ic<;-1GC}KL(B!;6eSBv>3;xC`s((nX6Y$ld+*-U=!CImPpK| zyI#}xWbE?8ABuR;<8h;O@pUKoIYNv%Tz&qF$)2w_eYeiSH;}oTGudDz7C=(0W^O%1P<+2&H<>ab4IgBxgbwgj--xaUBxHC3-Uk z#*Vk)u;0eaYi$i)=h7^dAN!E9$})Y!F* z^C-F4XiIho;jQQNUar)&cKiK1*Zc7kL{`_4#b_}pOC)L&CGRKk6YEYR6V-%2^CeSG zMPZ*vr$0ytQ_>nvtXZ!Yasu|KeTb`_{c1np-fPU36n#ika?jzO4-MsK59EYgMI5Kv zQ`1;gSHKB|ix4WLj<>HNe%&f=1w(nUyKWCy5e~swcXB_Df3&yUHA5_h&RyEmuho>1 zbuN@Hwr=YDfbjgl@D9xXrKl(QrWN0(8>}<`)vLfXPEPG*cKF;Jt&h5&8#k+u={khXE3nR zIB8*dbV2p5m@$JKjQiU$9#u!EOUc_BmF&)5j2hK70}>Fod(v_D67b-xuB~;^jw&=T za)z9M7@~Wpt|&sV_02=+jO1`!c4}4`UgSOrrx2NI)Tb)RWuz5`uOnS#J6a0Ajd#d> z5bLS*rF!#Y`SaX%aYx+aQL(-MT3uInD|<&w*x~&v)vvqsf#B3?Ex2$JWx(cVcW7lS zX|=k@hmEy#w{n<>QYWL;@KmiR7QOwwpIgiKkCvk5cIExMyMWOm0+~cVWWxEZD9)ib z3%Bp&^xT+`I!zs%p$sLIIpRx$94yF~VuIwmLm~~G3Q0-YVBO*-6{>J~3#?^{5DlJ5 z2Z<}3uNi3gqLQ;yW43Skg-N=`Uk~R$ksEzL2odT(lGCOwdNx4TDRqNipC`DOEg~XmzI|7e?_Tv`r&R+ge{t*V)L&%xjxMDj zAuiP;rZyYq$W3)nR9yeLo)e+u&ux}k{P^6(bWvX>kEl^`T8Yo%0q0E#of9I@4Cxed zZOf_odC?BldRjWjGr3R13Si0af6lA(m3jmd%b8$>GIBd9S7dp!f$xFHGf{r5bn3LW zvIxK(%vw%x#%5uA-3aFVlHQ)lqn8#QypM6z$yRl>Yhcv2&(4oUV8ZZex4?t_*6J7ULJ&ukl-^SQi~d)Z^Q4pqd6wD5ZwAxK z)GbZhM!7$TYNP19^K*|N7cWh}61b@po(`G24F0ZFC67(19 zJe$kr`0ERjebZx*c+Aap_C($H7~z)<)#Hn=)#Tp_r@d9kL2A!0EHPt1Dxbm?4mf z4n|Wop8gGliK1JY0w;#POHc!NFqxd6$+sLLXRVcp8b?V-9|5qJ`BB$C{PBo0-bTm$ zF4hV5J#+j48SCDIdmaM0=3m{O9r#n)LkzRIOZewv8|X57B=H7f6k`sUqOomb%vhX( z)~~b#nl8B^oWtiVrnThLzf+qsmvre3R+_&tTdft#w^JuxnsO34({G+;eEO0(KybRGnESQx79rj=AqTYr`$z_PW` z*j_*BmZjZ6hsk1i;aOfPZ87K)gR=SyWu(g_5(YBzVwXBSKD&QZth%w7D4kd!cHejK zTFlUDnY5l)o_}qM*}!Mv)xnjjgxMvwrmQV^wx@oAF+r-}+)dYeQ|+`>PTD__rlJ%? z*q<2GoBTCp1Pfpjf;|ZN^oc?-S6GsIe>{-)yWXGgvqX|=uB_pB7?~UW6{nZtY7?sP zGPc(`J~040oH*~ro{&ig+ESImz#uwvtSEb~=47WL3VWAvvX0kVMhK3RqGu@!4UVgR z_BXOYKbGq{=!A6mw8uv&c9}DzWK*Gwh1A2BCI+f|zF#EIDsO!;ldMWSvL&sFq%^OX zPk8(4Pmky-XYFFKj*hAIR>CvO31R}?CwD9})&Tum2h1}>GIblj+EO+Yybk?&pLkwy zZ258%nl^W5AKD!k@)r=p*JD*@_W!1Q1N^%gFKjDY~Gr%nm!kr(l!+zG&g7J7F#xOA(IaL$6-vO zRX@5Hl=H}l70{g#VhlxcjtmfW7;1ly{9Gw`H>aC?)r%=3dR)A77^*DtNz^-K{9ZE` zjtXzvYCAiA2GXmc383KYN*dOvL&86UYN~64?|@^39g3G0F%-VBRgb4sG82wOurk%f z8>si*aO@Ij@X5&fhT*P?B8G?yGTMS`6;Xop2>y{e>`w#)w7QQ+hHKbS&8YqK4C z*8F9s_I0NFUVWFPcu6}HeB4gzCDY^+-rsL$WOzgSi9Ru!h6~cL27<=26$FmuJ}G|V ztUr^oD5Rx-dLLK+FX(C%o2y9X-*mz6O4E^arcXI8xJtGKp{|T50U#b)q0c+%`ZDWh zqpq`$UyL&cAe>9}-n5z%tX2$(Kvr9Szm5yp&b&5ppLgi$|K!0of?*i{PKdlDBJug3 zwAMc#{y8S^$3|Yf*h?d<$stDC|9*26v>(z63tklh-(``#0@**yN!0IuBCG!fWo|L$ zGL5t+K4Zm|{^i4>Tf;tD&WC&S{hJS~ABwkT`f|)+ITZPyNBocQOnI3946J1S{+Gn^ z?=Kt=@gFqV9EAT&;xzux^viFMWRu`U?_Zx6!uc=uY*b(a^BAm0_g4M!;>9uQKtsJK z)fo%B)x%C>076+Qbl1tDewhwOs>zOWp$!x($8&2ghnWpWCDZ4ocMzpHI@M?abLr{1LvM z9-O*Qer?Kcbb5hbaF^Vz%jG?DS*~$?Spp)HIhu$vb@ZP3(X~~~fpe7(?d`?yPd9}d zpGNgKuDqHX#y8Q?u0djx@`h7dK$@cBO-Z`1`?V1hkxZMb57hU?ns?fFUZMT^yH2HD zVsS48svaXL&p`A$9WDnbeK{$-lCqlZ&}O_$0jZH9!{s#J)aB0thC3c&%MBEX@A&op zRlp01l1H{?JlzjPBxgSg{BWY){>(>1HoW0h4ZI^Rh?E zmEwO+W5_=zl%z8qVVZeHeB^KhKlzz66RRRp_&2-KE`FN;8OyRTlc+>tL zfY%7jUOD1dcE~@<4t@PAk^X&_ak0bP?3vl;<=-Ld=ov1iL>)Qb`kgJK6d@ov&_X{a zYtH6R?30?~wj@4gW_+a>gnKU0QEHSTJ|zav7&j7;(t4OZ#FM6uM15^P`Qk*2O!Znl zi>I|*moAwvOPuLlmhsO`8UN4qyH#!Cqd7u|Z~zKi9>+8iNjF~kBmCmQOGxndLh3R* z_2@vd?w-`Kx)@&WdB~<|@+FM`oybl^-r6<}6Yov)d+AigdZH|ShdDGi&&$W_S`EPD zd%o;!aI~eXB&J~kW7RMjJ$u>UtdSI`XY(yO8_iS);gcj1jYM?yo@2SnIAgq3NhE}E z?+GS0_Ft>2%6bvrIVLmGWY;JB4w+4v=U!l$FQax=GMNgehVng%GKN>y334A^1@md6 zJ_4}&3%D8X&Ij?vJd28CH>NA<)8(!^#f#N~Dqh{Eieor15JR+hP9}25S3b98V`^IC zwzfF9-dpLIDIto6X_5tj!Pb-`oT?VslC7dwkG`}mNQWXU3t}n}$z3A*#AOddzUuGK zk)&MB`%Lq{=&o6or|L0c|7@-L_*<`m9xd~`PZltL8ld zy+!%DEks!Cq`x`enVGk@Ufm|~6>G}~f~WX#@=U6Z!}v#=po+NbDhRNbx0N*>xw3{o zZTAHRj9zw1wZLWRX`iY;-MJ_1c_Eo83UW5Ma>2hcM7!ylU|8bao9w{vod8(_n+s>I z(q+FSP3(C$4!nKVIbDgv!gDjM9Q%6J<26sGKGt!eS;T=B(&qZ?xvXS2YpIY!8WP-L zuOjkC2)e&J>FAE>B&7yO3ehZozR@L_{wK}H;0O-g(jzlh^<0Kmu@+8+t5^tMXTY=; zId)!84S1*M+o2Kdstw9u@=;wI$qs)Fkj4(aBASTKSDnH;MwZ}e%k)fwsAMZN!LXQ3 z13(czM{r#mn%!#?AJR$Y&&(FPl)ne}*26GuJZi-Aum*s_Mp&%-SNgo32(K9qAP^%F zTUqjCMUPbL$@q4#-$ur_I0_JxL_J0ed^L$NOj~3!#8={Sahloj{iN~u)t3Wn!7fYv z3SM0aSbh}2rsSa2yUSo#7Ses&v?SoCDa#<_*qCqO@YFFEbL0@U6yJTCavV)*jW|}{ z0r~2zGDXZ9$7;l~(}N!n!S5u0pF(|xlGz@)5K_1Yqh~}EjHDZwGGlHmPNUe?5pThc z`pxIXvv~r!FXOew146#Balw=73bpr?;a*oC?fHrRJl4U@p5O8JQs9bVcf^Nr4g2e~ zh)CdaI$;kDQG|@XxiA*ai~=q$dPylGd+xZ3Ic7qd+ag>$b;x;z!(xDA@pArp8_z5K(jD7f3yoZIlGjZX@bRk4Y$Shrj;W;0#xaWyHDtIdfe# z`RdYF(>+NKPzXRm8}NyZqzC0FUQ4E#^N9oAvsB$&Abq z`kCh&L!)5rsnZt}5_iCHK3?9c@p6@~FWkmGsJafkdd-CvBf4_?;)5_>r5aHJVU$Sv&Q0=!aEzceO;Q}S`K4DVVF z=GzY}vDWkP*{x#Z|EZa z#@mZcutYaR<9Jv>H9IBQLrjb;4;q`N=mFt*Un0wv26K)9MoVl3>wOSy_b=)L*1^M8 zrXo?r92!aF7Tf<6u?(@MDDdF&H5Nw}L91^d;?45Uwax3I=@}oa6d=nnDbeVyI+<;- zS6m`w`=}vv5%)~^81t+V)&&~Am6KgYyYG$#0xE#QZlnN3n`gPo`;Zw)OO}kBIQf;v zdp}1}Qe$q`7k98?iH0);TEiZm^`I#x@#ilEgoTL{)AN23piMsf?gbHS^A}9nUm6Ie z&iKT$%NWSd-UlIX`E*gf!|^s^K?QsG&*msR6$7!@SfjcEl}4(o?f1zGt}&{-6W23s z8CoII3L2FA+sQ8U{ywHacIn(yG1dZj>OF{L~+!!obmAWx;gq ztV7JqpSZEz$!stEK_^2e>kRVUEHv={*Sy#or>j%E7tAtC;{brC=kU6jWfTXAkU(QK*3r*#FT z6+tkgrkz+7@sH34b{+mM*PXGz-?|+eL9dSt-^PGPV~uMz?@{xJHpuX+FBG*$yYA;q zjm)GhRV27Q5R6cnn;w7KmFmWInlx9YY*$e=K(DnpDwrBI)W3XqkVh3mR_fC;fgYJr zn4`PP9afg0x(HHY9Q3c!lRB!Da!Kc^O*2el0%o9<0UUg);k@{T`XbS zKlD;`QIwaHtGc%xWWU7qaXqHx2`=r1E9cdoLREFJ9nNEx7w^2mivz6)*AJ8*Tv#F( zbSy>mUKcXE%cB3Pc67v7y{BGn@rtlT13H_xRVFHdubv;?o-FVjb4IgR*XB-M44ND^ z`h&wo1|L0P48}8ZH_q!;4I@k4F={Gd?J8YMRuK@%=j95a9%V^sStqOxeo=6oHx$Q4 z_JpNLLz;<(7#+u7-yQ_0Pm3aY&fV^~typng)( zczeE^#Z!H-n*Qqa#G3OenSpb$M$>jPL&mR36fYoMj%6d2-WB$l=E3enRZDXC2jK8e zo%)!BE|hakDV@uZ)<@U7jUz0J0S5fJ>k~jL3*$Y^X zzPPM#MueJuMFFN)&>$skiel)I*)Ot6;Xc$Lpc)NvbL-PAZ7fNTSkK3(w0lqqHdpah zSSyrqjwJEHg@`ZGd-uTpAhV|&(Rk)tYbWUY5*fdiU52OQ{kBQkFVfzyAj$uUc;see z>oAk4B|ZEDn)MDT{y^rta*)j6sWzQ6s#9NmNq{*ZRv}UJN8p2*0fO@7RaM))s5FLF z>FQ_B60#uSX#M?=Fbb-504nOtP>Z{xj#_gunW#w2?uOqvBxt$}aM?vCE3d9n8cE3{ z)VHH^iU+2Gh9bot;{crCEKW88Ku9h|Y|qyT=!> z3d0$DVx_{nieQvj%_Qq2nuT4|X!i&!l*Gn#-$ST4&es8jCbmx(uCp+elS_^1)uYkq zxDqXbY#ygqvnj%CFKx;sKS|*~KkUetFb@;o^2?A!<4Y$36bl3xHNxb-#a(^SX(Pir4XzN7jn?Foinppa|-ZtJ`M! ze(s)f$=1cBYNK$t&wafjBGA#o(B6@<^A)3C8Zv8fLvFYR>e9y0QN8ECi)6BYisWsH z2*dROFnAI6%4-3}MHSFBoR5ph-6qA-m=om8_KMwkF11$-%5`Z~XDi|6-Z;61vTAL} z(ddAegbsQ-HG9rORz5AOE|J6N{3T=5Gg~UP6;k*pJdq9GzTbm>e5iGTe-R>|w-{FDR zxdPwwiwb*?%jNt*M_u`$Z=9ep?=Ox*#h~TIZv!KA&#OpIee*dhRSV`jr&7Bmpjn$o zRv@{XR|XtL+RW=|feX*_rcyb^t6O8=$tXS2VCi?H&w%0h$`${@5~Zx1_S1G#9uQ!g z^Gy@YrDgv+u<|rKLmT54pFp&Z^z>5mBPWN1ePexU7wGnxsqR#;lYP#%rgpI23oEcq z*{_Pu+YZ#{QcBDObeRha9P_MVu#pv}QS2de^KG!%YFm>G$DfXIBb4FfY*xqxi0YVa z$cbeMlbfG2CuTVBM2PD$U)5vI-a8J?%^_xT%PQ7hwX?_B16bZ5=3MN>RDlllg*k?7 zV9Ku`?5RBaSrkV{*tkFQlv_iNW>N!du_~mEGe_HT-G(=$P9Mu2Yhf-T#cTrbxAw|s zyTiUoXJGe4KJz%R-W)W0e^!fmZnFR5xrEqfQ3%mXI&E90`eOohJn5jB_lF2cLGFek zKh*>{HT9)U`5E}<4d9x8i*t_mLW>fWO_-l7yj$noLx(**-?r!D zn^Q?FcG3rB&&$#xh?HKQcuXzsGjnzBuyn|H2Q@xFmRFIaY`Y&yRe1X^7CMcFc{moY$G(`P$_4!zbt>@4xssVkdc0_bP+}dS z;CdlxRl%oufo%EI;PpscUD+nS(BPRo*-L0q4lD~d%JD<4Jrzjb{L z{&L3YYUPhyG^-Iu;u)+s->+ejhlUfk5v~zep9(75Kej2ynSLhSyRF+0c@Sr}T9OV< ziZb6f_?YY29PPwyu|ksgfM|U2f`QPHB6EV{jag}D5TA57$f}am-vAKyYi?%0zxxNH z_CiTje?0pR3ycOU1n)?5C37yb>L0#VAESTxN7&{f2o$%4w(?Y{oY02AFBO)D^hRxn;ljE3iPzYi3G$~idA

nc<2&?J5jYC}M{0iw8)EsN6siA3NB@_u{^vjWSN~r~`2YW*|Eg63 z|28UwI|sLheZb_ccnWrMNzLL(-)c$Isn&+OZsx}(xpY_8D}xT#xm>UW5uFeNj`4DhPM@Qr+BO$AqvIp6r zce(6n`QZ53aAi3+o)ZOLBl0;Q!SC4cj>G5@5a$h?-dZ>ootHfe)*gnxBf8?)zjRuE zeREv!mR*OgGVi7Aq%+c6W9COrW?m4;yPS(>OMSp{$-31&jJ$WASkKpf4y!rTWn1`L zw`VBqVstEB@MyAQ-A!bYzgna@pcMb(WtfJvDc5Y5s-vVYyZ@HF3{=?d{Mvt}&i{Hx z*Y;LlE6u$Sb-I61k3Ng)rBHl<&C3A zeM9J^9X1&7vmdipz3GmF-Ddgs`=4Tm(hBIh*+Y&rrU_n!M+AF1JWEx@BqoW(IP{&LD=x#rs+& z;&Ed2M(bw;%hR7Y$dY`l1$FOR82s$K>2=asoEJSiY@EGBmeS^h z(ECp{OdvjV_OS=sxsM?Co-O(P9U_&d+x1Rm^M$t@%UA}20PyBUNP2awF1xS_YEq?e zWv83d5_ck#%2>XmUPCnZNfoh~I$@c-U z$AO;X4d@uOB{LUPqO3_oj&FqFsWBpMfj|eo-x!X#bNv*ig)y?F@ z`2)fck*TcE%+fWdJ4C*b>574|>I05h(`$VN$W*!G7vX+5vNL)X>nY4GRzR4K=&?l#qzg zsy0U|#6efJs||&-jjXn*q&1jpGtqCa=E(dxVO3L9#lxt(?A>!P20!4co`)$*mNHez zz6)G}%qIAir8XxE0-#m!!49I)zx8Y;cQvt6X!eWj9q$n8jBB^zn7vuum7M_+fa z6!l(T?q}hOs2-A?zEt=75U&Do4zCbEZ571ywwCCkmdv6z>;_{*WFm2Ij{k=$$TY3- z@YzK2NU5Hfk~r8ut@)!Sj!gWGyVStMl^O)0~_0?lFVA zLTh@U#>hO2*qGh|mS-}67dGDj{L{{b3q?RmtYmhlRRUp&mXsHPaKbyULA8z#WmPxy ze2P6SF!5KjuD5(JPS(Le(wH%Y??y}fnlNpyewCsXdv4vOHfii0HFX60o&3S36V`P% z#lPv_nBBcnCt}-Cj384>v{TqyF$UL(#wM~G8Ma4%P3{j4ySy%E$~G3}c!JN#|H)IL zJxv)pxt(`7oC9hkd?h~sGgj#gEH=hkt@_O}zU^Lk-D$(L&8Md-m&w}gT;J~OD%TdD_+&Gkb+c14(JoVmaZGnwDekw4Ay-n_U^wvrrkem_GMtPHFdBjEKTSdykzBTbyRj^b+^%g1%IpJ#BjGP|0HTY+axb8(d26e94j7w1ahWhpYQNP=ckrZ z8f@nI%p#ttkNG4K&yl7V*IsIB^ZJ4Bcn9NSh3A9bv3ZVpQ)#b|A|X%Yzf} zDm4rw_XcX!#p7YG&zBVR&`J?1Bm= z-BrHHw!hL>a#V&C+6#l3uIVqH5VZ@sTLr3AgMrVfIiwMi00hMuG4C#T_5NxCKUfa( z?Zzma_Zc?k>o%v;>BAQr_R^nmXPz#to_wn`-+vw8IF+gYSvCaRN8Nv)vKK}8Py$M% zY>C<~#{%}OQKU7EJgYIeQ^Drg6q=Z{X``pSWkSP<=A(`UdUxAa_IfZ~QqqG|W&3Y( zR}78V-hHHANFVRiOl5LoBp>B?;u;Hevp1^@mfs0VkjgD!1MgfCRKU(0a}Q^=KC%4^ zL!7nB;^GB4%^zeVhweH7?w@g$o%v7W=1}Yhy%rH`Rpa4%Ck?x!>YnK?1R{f@Cx0d` z4{r#ojv)EpSGoB*HGwm{{nh!(J{$ z}$Vc@Hp?@RaRr#AH0pB*qz-|- z{;1|_jKK+|G{H+B&n09}*cgCrm_~=I^3U){vH5dglb$DbnktIw5c|%OdxBK{ZPi8d zU}2dY_Gy6z+H@;XfjRw!$InvOpp5HR6MO0ve?t?hMK+?o9sN1Z&KuZ)bZMdEjYum4 zd>HgU9JpP1KI12E`X5<7T5rylaTpGUZ_Xb?sbQH|5(WDj2Kj_r#txlC!P;|=;lm;e z@Y-z+z4J9noB&hWh=6@3#a@<2?^K#`O5eNBQo5xGkA^Q@6|ue8ao{Ue+ITEK5~W2L zp0q@-!ppMQw1m4RUA&ei*HHlD7jHb^z5mNyql#wN`+uInY$TPJXFx_{Kw9?w%~AHN}5P5dMNCX7|8PWQ&~H6!7g-`FwSSF;opj>`n0z4{4L zo7ofA=l^Lr`pws}K(4$FtTKq8#%_ykzatjD4?>FJKS7GlP&LRP5N6=8WpVEpL>g** zr`SzzD^li4;PgBkX{)MLNY6Ap*|#yQe--6V!5KnaIcj6n`x3{`%6N56(DzYKy4K56 zUX^xhM!CAE!U~(QML0*8$7I@n^-aOnYCLOkOly66NJo71)%Qt0Lb&>~w z`nspxByf>iU}rfc>OX*iUr1ZLw2dYr;OfJbiM;Ef0e$4`o~e(9NQR*Mr#~Hzm59~H ztHU(;`O-m#LUa3hwH3k2^0PBLCyo`*pjfB&x}&?-Z}%?iJFK$5g^76heVJnT zpr?&}H!vXON0^}#lry17XyR38aXPfbCfc-sj&YLOko)5ZVnBBsLV}Y6gAGJA{u{Fr ziyNiE2n8*%KdYr-x1H&JKrc?6BY%WNfW`jm6F3IcrDcT?#&b1uN5A&rxC6=DL)vh; zB?rmoUea`FRaPy-Y%I>kyDJ*7K1FXSFj5$$uVP}njQA4m1qs~V5yfjpW0`Ae$ZOaA z)M^rF*p+Jf6ut#*j2IV$PoiTOWZ|ewo5L(o^+VooyVmot#h7@#Lm(;q%F)GY@he5R zl;Pq&PcTCR@@}GNKE*4}t}~F1g#tA`T_|4Cv;dP$7K=wmaMRE#;H6&fWYxH52~Sh@ zgPuq|md;m~x2W)xO#c8`SeS79-lkFHhl@sAv_A_E+_!I{xY(HtVFWV>!ny+J-W6N& z&kOu);-83xrqB(Rnmq^xe{P9|BJXvzoNCoyWosn#1UlM}j$t4)PK%36lk>m8i8|wx zj`n^3ozquse~23iHSmQ9Z3tAq(qwY#XM-VqI6WU=_Ymc$^(l;!jV`d3C-Td$)6k&T z_WcuVz5<1m`HZyQvw+cMyTpy)Pah`;H>HG-z9H3}O~;N3VAk%raEem_wASv>G<)04 z)^Z+TzgmpZO=fM2XuuVVGieFbX0~HVdw7Ly36&Djts|}^9fucB^!1$5lV3pZ&>Qf?e z@;#3_i^iEu-NE8-&DO*!Gu^LDfEcai=HP^&=`hIz3p}jaLrYFTwSM}OBY&rkeV)}b zcl^$w7_O#8MS1GLA5W}LpTfVYJ5x?fov1z04Eh;{L^Tb~HLN}Y1BrRGtGbNuk6&s1 z@V4f=esB7&rp3Ei_^R%G0|T6EJ9{@#k=}m*#!Xg{%WAB@IV245ZWHu&LoS4M6nTHZ zl&#Ax-^Q39Tj_f&658q=-|94j_aWz+FnBft7>0ht5mjq9Vo)X74ncej%jC!qysQXp z#heW{qy;u+!nUM={&%B3=YKQX$wDo7npu@vT%*rTtT!JLzWN&4QDi6zb3=uj8KwL;PG%-tcax_LYDCbvx8E82odoXkH%@3f%S zc|`?qn)7g@tVDZp#+w+WF<5If%^QiiEGJFCK!}M5k%m=!X$f^HUahrM4dk0bQo62? z3nj|;IhpCKHrqEQ*)nYQGQzlS?Au(cAO~q|8y2Kig)z9@>R&}Zv>Fx}uQk-w@pq3K z-aEDDa!%!V5|G@VjI9al95oj+!nM@C(XIkQhWf~I#$O}fV@L+{a*Ks(teOQ1dr-wf zoBu=xlyd!AN;l1Hpx+rAm}jM^pppBuS`#inFNBIk&_(|aDWrbL)$T?P3uzD>#ToRT zIJ4v8vgvg%ROixY?zhsvh99i>V@l6jKk(NO2_0L)&Y~PW{%U{mA}aqN$L*I=RYH=l z+`t11cl9PCqNUsAskRyg526-NdQ2yPWqM2Ssp-d0aMENeL%dcRsR7~jkIb*OPwCaS zLi7nIipT0T&$v_KpZ$Rk0nll=m*(rZimi^r^KJwCBU>XC2ain;_83vACkNo6n!yIvc0)bDz7aPvUr;;eLvrP;Q_kDT@$8(a93 z!YG8E=d^QpKcIvx%nrALMJ!Z3GPKr5d!*TLZu>n_GuB7u$21oK%%M`Z`iae4*1+-A z7Q*kKtvOMcFD}=PZL4&f+`oOACT*?vn!gRTr35HUl}!>6HMzPmh}we+cNN+3xg5~; z3&t)Yx%*BwI=5*Yp`S~Xsghh0y5imIvnc%060;RRv)2f81yQMt1=u+~LwIS!!=pl` z);c*|)l3?u46Eg*W}Mca>CS;A|J~s*rR3DDj@Cb(#d|9MPm@9%eZ}dw9ngx^*S%FP zgDZAyc&ya+H%tbOavw=o7P+yi;=Iiq6-A-Ret$z_i~}}uei33q5nN$8^scPELs71D zjTZ<(?|HrTU*9qtX0yKiyJG=7UiN=?EL>U9v$8v{7DOS9Ei^c&tN-hE#h|rtG?juB z@Wnzf5ml1kbWwbgMVb!p1 z)%xFKb( zJRs$}wenqUX?OuUNzNx+DC%V~JH& ztvhT@YnJ8IKX+Tt+o#pYkhk|<$d2_=%DhnM+ZPS17c!AyH;L0*4530u_10l$_dx#s zEu)Y+U0WcgJPvytllAE_UKIm=KDTL>NQ#=^fr0(M}|=y%tgQh z#aC_i?57x*RE`^xr%t+WujPcw?O%TkB?8O3m zAPmjqwVOGLSl!l^ZK2}up+9dovsuCv4(8m*0Z(D$Ni&>g6hvYMnpACeTB726KKC^9 zXh0=K_Ac-w^;x3K*;-rFUj4G=37Yr=86YR>EgwT zqPB@KdwT&hy_3Es{xLIF%F_t{R3b*=Knmb#ohu!``Imh#L4TRBwZ3;guR&XaEmrrx zSb*t}F$16BYXB#Lf@n$Gg$$Kg9$KTa(Zsxoy{nIb$bQ&5hR$vJm>z9AEBCOHt4{ZgDdh<)~V64~$6tRGgd^eD07JlgLPe zut;*dYML=I-W$yP46>UnkG}IKFP52&BXQf=X(eGZK z`11sHMT~khEDnl1Dp@8d(_MJ|Ha zu8>V%a|&b6wp&MjSiwXT6gp{0MMjd3bbYP3_BbwXWmUU)>3~15G$QoT+({6AUshn! zg(4!0^`)7{U45LmN{C>lrt34ITzC$RK7ogw%A9If-EhWE^0L9FNiG$jJUPj|-FE}Y z{xfs?B^7D~k0f6k_h{pIk_cs$5Psiyq7`%ZTW-ueUR2N&all^Vrp6eL!b;`8V3tp= z?~DP#@S)b2eZUGziy0$~@yxE{WN}1->B!;0#47k_$+?`F7{7&#?cdgFVcySw*v>kl zSs9&esQ7G=DF*Tw=c7zOP|jq-lCdtKQNCl_sA%IX~VT^Qfj@#ScQY1i7T`Ny@q zklf0zFwCv0uDWY*#U0R=(GoCtMB43zB-Lal7d}8b+*z9oJbs^qwxZ!?+HJgh-dani zexQ=+K_Zd2G3^3gu$~q2Gj@Q;_7ta1K;P|R>D1h?M!Qo3mj?}1yx8a|j+DfJ%8R1?tb z@zlYnjEpaO>w^BZ9V^XSwz=>370f!h{b@~LM_%`BTrrDDRvfgAMq#&205!VXaW4Qp zuE4y^=kX zrn16=a1aRF@<-pdaCEkW!pbwuSxj!3rZ%Cweg4nr3z7!xTC^4(xPGgKX6>7b#SyEm*s{661S4l^B(W=E-o zJA-GoUz|DfzI&RMnLX$iFQan12;;ilp|qHe7avZWSX8}yAKZ5Nay-y$AFa%)CD{Hqgaie!jr={)ys5H4H=bf1r_&FguaARUtS}sT>1s zM(=6VsN4+N%(7N`{AVfMYhD4frMh2u4^o|<1ikLD3B=~!J3I-tEPalJ@qhQxlI$~y z+`D&0)9C0$7{#FVFtqo=LZKNn8Iyk`E2I;UmE+f8kNBa+|K^q(-;d<*X=4=G*V|zJ zC_*w`xBc~|`&C|ZbF&ss;Ob6}sW3kPCvSpXKmQ9pwv2x$d!ceGQ6R#KPW-0QMV8S? zJ9MN3v>B|OPrbGKyXK&T%|XnkGFld8gt_dilY6e(*W)HC^qR)WeO7p9y`E z*ogKb3A^eOEH!7~X*-8=_z1l<qt}bd)Z6GiUiFQXDB_OF zu}Mw?-e{YdC5}$Py?uUSPOMNMZSej9*P?teS)X&W6A;?8qDqBwH3t1rEV)z!EnyCAN;3~H+|_2 zU*<(})MLh+ju(6ihe3${4S00}Cc0JFM+OJY0sM?LC#Xv;QigvmuHb1l1#IZ1?ipp# zC_&6GP1_lqpD$U>kZMKRFng6YEb%&WQQd49jO)%0AG=`M&vlc%gS-NCdB>MWFyhlU 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. + +package migrations + +import ( + "context" + "strings" + + "github.com/uptrace/bun" +) + +func init() { + up := func(ctx context.Context, db *bun.DB) error { + _, err := db.ExecContext(ctx, "ALTER TABLE ? ADD COLUMN ? TEXT", bun.Ident("instances"), bun.Ident("custom_css")) + if err != nil && !(strings.Contains(err.Error(), "already exists") || strings.Contains(err.Error(), "duplicate column name") || strings.Contains(err.Error(), "SQLSTATE 42701")) { + return err + } + return nil + } + + down := func(ctx context.Context, db *bun.DB) error { + _, err := db.ExecContext(ctx, "ALTER TABLE ? DROP COLUMN ?", bun.Ident("instances"), bun.Ident("custom_css")) + return err + } + + if err := Migrations.Register(up, down); err != nil { + panic(err) + } +} diff --git a/internal/gtsmodel/instance.go b/internal/gtsmodel/instance.go index 027d8fba4..97c0268ce 100644 --- a/internal/gtsmodel/instance.go +++ b/internal/gtsmodel/instance.go @@ -34,6 +34,7 @@ type Instance struct { ShortDescriptionText string `bun:""` // Raw text version of short description (before parsing). Description string `bun:""` // Longer description of this instance. DescriptionText string `bun:""` // Raw text version of long description (before parsing). + CustomCSS string `bun:",nullzero"` // Custom CSS for the instance. Terms string `bun:""` // Terms and conditions of this instance. TermsText string `bun:""` // Raw text version of terms (before parsing). ContactEmail string `bun:""` // Contact email address for this instance diff --git a/internal/processing/instance.go b/internal/processing/instance.go index a9be6db1d..fab71b1de 100644 --- a/internal/processing/instance.go +++ b/internal/processing/instance.go @@ -227,6 +227,17 @@ func (p *Processor) InstancePatch(ctx context.Context, form *apimodel.InstanceSe columns = append(columns, []string{"description", "description_text"}...) } + // validate & update site custom css if it's set on the form + if form.CustomCSS != nil { + customCSS := *form.CustomCSS + if err := validate.InstanceCustomCSS(customCSS); err != nil { + return nil, gtserror.NewErrorBadRequest(err, err.Error()) + } + + instance.CustomCSS = text.SanitizeToPlaintext(customCSS) + columns = append(columns, []string{"custom_css"}...) + } + // Validate & update site // terms if set on the form. if form.Terms != nil { diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index 750d4eec4..fda59610b 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -1534,6 +1534,7 @@ func (c *Converter) InstanceToAPIV1Instance(ctx context.Context, i *gtsmodel.Ins Title: i.Title, Description: i.Description, DescriptionText: i.DescriptionText, + CustomCSS: i.CustomCSS, ShortDescription: i.ShortDescription, ShortDescriptionText: i.ShortDescriptionText, Email: i.ContactEmail, @@ -1674,6 +1675,7 @@ func (c *Converter) InstanceToAPIV2Instance(ctx context.Context, i *gtsmodel.Ins SourceURL: instanceSourceURL, Description: i.Description, DescriptionText: i.DescriptionText, + CustomCSS: i.CustomCSS, Usage: apimodel.InstanceV2Usage{}, // todo: not implemented Languages: config.GetInstanceLanguages().TagStrs(), Rules: c.InstanceRulesToAPIRules(i.Rules), diff --git a/internal/validate/formvalidation.go b/internal/validate/formvalidation.go index 207e8e05e..4de7636a5 100644 --- a/internal/validate/formvalidation.go +++ b/internal/validate/formvalidation.go @@ -189,6 +189,16 @@ func CustomCSS(customCSS string) error { return nil } +func InstanceCustomCSS(customCSS string) error { + + maximumCustomCSSLength := config.GetAccountsCustomCSSLength() + if length := len([]rune(customCSS)); length > maximumCustomCSSLength { + return fmt.Errorf("custom_css must be less than %d characters, but submitted custom_css was %d characters", maximumCustomCSSLength, length) + } + + return nil +} + // EmojiShortcode just runs the given shortcode through the regular expression // for emoji shortcodes, to figure out whether it's a valid shortcode, ie., 1-30 characters, // a-zA-Z, numbers, and underscores. diff --git a/internal/web/about.go b/internal/web/about.go index 2bc558962..843dda652 100644 --- a/internal/web/about.go +++ b/internal/web/about.go @@ -54,7 +54,7 @@ func (m *Module) aboutGETHandler(c *gin.Context) { Template: "about.tmpl", Instance: instance, OGMeta: apiutil.OGBase(instance), - Stylesheets: []string{cssAbout}, + Stylesheets: []string{cssAbout, instanceCustomCSSPath}, Extra: map[string]any{ "showStrap": true, "blocklistExposed": config.GetInstanceExposeSuspendedWeb(), diff --git a/internal/web/confirmemail.go b/internal/web/confirmemail.go index e512761f4..21028c6c4 100644 --- a/internal/web/confirmemail.go +++ b/internal/web/confirmemail.go @@ -127,8 +127,9 @@ func (m *Module) confirmEmailPOSTHandler(c *gin.Context) { // Serve page informing user that their // email address is now confirmed. page := apiutil.WebPage{ - Template: "confirmed_email.tmpl", - Instance: instance, + Template: "confirmed_email.tmpl", + Instance: instance, + Stylesheets: []string{instanceCustomCSSPath}, Extra: map[string]any{ "email": user.Email, "username": user.Account.Username, diff --git a/internal/web/customcss.go b/internal/web/customcss.go index b4072f2a7..36ae9de55 100644 --- a/internal/web/customcss.go +++ b/internal/web/customcss.go @@ -55,3 +55,22 @@ func (m *Module) customCSSGETHandler(c *gin.Context) { c.Header(cacheControlHeader, cacheControlNoCache) c.Data(http.StatusOK, textCSSUTF8, []byte(customCSS)) } + +func (m *Module) instanceCustomCSSGETHandler(c *gin.Context) { + + if _, err := apiutil.NegotiateAccept(c, apiutil.TextCSS); err != nil { + apiutil.WebErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) + return + } + + instanceV1, errWithCode := m.processor.InstanceGetV1(c.Request.Context()) + if errWithCode != nil { + apiutil.WebErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + instanceCustomCSS := instanceV1.CustomCSS + + c.Header(cacheControlHeader, cacheControlNoCache) + c.Data(http.StatusOK, textCSSUTF8, []byte(instanceCustomCSS)) +} diff --git a/internal/web/domain-blocklist.go b/internal/web/domain-blocklist.go index 5d631e0f7..7b6710049 100644 --- a/internal/web/domain-blocklist.go +++ b/internal/web/domain-blocklist.go @@ -67,7 +67,7 @@ func (m *Module) domainBlockListGETHandler(c *gin.Context) { Template: "domain-blocklist.tmpl", Instance: instance, OGMeta: apiutil.OGBase(instance), - Stylesheets: []string{cssFA}, + Stylesheets: []string{cssFA, instanceCustomCSSPath}, Javascript: []string{jsFrontend}, Extra: map[string]any{"blocklist": domainBlocks}, } diff --git a/internal/web/index.go b/internal/web/index.go index 25960cf7f..dd9d80561 100644 --- a/internal/web/index.go +++ b/internal/web/index.go @@ -59,7 +59,7 @@ func (m *Module) indexHandler(c *gin.Context) { Template: "index.tmpl", Instance: instance, OGMeta: apiutil.OGBase(instance), - Stylesheets: []string{cssAbout, cssIndex}, + Stylesheets: []string{cssAbout, cssIndex, instanceCustomCSSPath}, Extra: map[string]any{"showStrap": true}, } diff --git a/internal/web/profile.go b/internal/web/profile.go index 60157fd19..741dc2a83 100644 --- a/internal/web/profile.go +++ b/internal/web/profile.go @@ -132,7 +132,7 @@ func (m *Module) profileGETHandler(c *gin.Context) { } // Prepare stylesheets for profile. - stylesheets := make([]string, 0, 6) + stylesheets := make([]string, 0, 7) // Basic profile stylesheets. stylesheets = append( @@ -142,6 +142,7 @@ func (m *Module) profileGETHandler(c *gin.Context) { cssStatus, cssThread, cssProfile, + instanceCustomCSSPath, }..., ) diff --git a/internal/web/settings-panel.go b/internal/web/settings-panel.go index ec8166e95..41cd8666e 100644 --- a/internal/web/settings-panel.go +++ b/internal/web/settings-panel.go @@ -53,6 +53,7 @@ func (m *Module) SettingsPanelHandler(c *gin.Context) { cssProfile, // Used for rendering stub/fake profiles. cssStatus, // Used for rendering stub/fake statuses. cssSettings, + instanceCustomCSSPath, }, Javascript: []string{jsSettings}, } diff --git a/internal/web/signup.go b/internal/web/signup.go index a943f3680..64b9f4e2d 100644 --- a/internal/web/signup.go +++ b/internal/web/signup.go @@ -126,9 +126,10 @@ func (m *Module) signupPOSTHandler(c *gin.Context) { // Serve a page informing the // user that they've signed up. page := apiutil.WebPage{ - Template: "signed-up.tmpl", - Instance: instance, - OGMeta: apiutil.OGBase(instance), + Template: "signed-up.tmpl", + Instance: instance, + Stylesheets: []string{instanceCustomCSSPath}, + OGMeta: apiutil.OGBase(instance), Extra: map[string]any{ "email": user.UnconfirmedEmail, "username": user.Account.Username, diff --git a/internal/web/tag.go b/internal/web/tag.go index 5c3cd31a6..423000f99 100644 --- a/internal/web/tag.go +++ b/internal/web/tag.go @@ -59,7 +59,7 @@ func (m *Module) tagGETHandler(c *gin.Context) { Template: "tag.tmpl", Instance: instance, OGMeta: apiutil.OGBase(instance), - Stylesheets: []string{cssFA, cssThread, cssTag}, + Stylesheets: []string{cssFA, cssThread, cssTag, instanceCustomCSSPath}, Extra: map[string]any{"tagName": tagName}, } diff --git a/internal/web/thread.go b/internal/web/thread.go index d3ba6ea5e..246c05b97 100644 --- a/internal/web/thread.go +++ b/internal/web/thread.go @@ -115,7 +115,7 @@ func (m *Module) threadGETHandler(c *gin.Context) { } // Prepare stylesheets for thread. - stylesheets := make([]string, 0, 5) + stylesheets := make([]string, 0, 6) // Basic thread stylesheets. stylesheets = append( @@ -131,6 +131,7 @@ func (m *Module) threadGETHandler(c *gin.Context) { if theme := targetAccount.Theme; theme != "" { stylesheets = append( stylesheets, + instanceCustomCSSPath, themesPathPrefix+"/"+theme, ) } diff --git a/internal/web/web.go b/internal/web/web.go index 185bf7120..35f8f21b0 100644 --- a/internal/web/web.go +++ b/internal/web/web.go @@ -36,20 +36,21 @@ ) const ( - confirmEmailPath = "/" + uris.ConfirmEmailPath - profileGroupPath = "/@:username" - statusPath = "/statuses/:" + apiutil.WebStatusIDKey // leave out the '/@:username' prefix as this will be served within the profile group - tagsPath = "/tags/:" + apiutil.TagNameKey - customCSSPath = profileGroupPath + "/custom.css" - rssFeedPath = profileGroupPath + "/feed.rss" - assetsPathPrefix = "/assets" - distPathPrefix = assetsPathPrefix + "/dist" - themesPathPrefix = assetsPathPrefix + "/themes" - settingsPathPrefix = "/settings" - settingsPanelGlob = settingsPathPrefix + "/*panel" - userPanelPath = settingsPathPrefix + "/user" - adminPanelPath = settingsPathPrefix + "/admin" - signupPath = "/signup" + confirmEmailPath = "/" + uris.ConfirmEmailPath + profileGroupPath = "/@:username" + statusPath = "/statuses/:" + apiutil.WebStatusIDKey // leave out the '/@:username' prefix as this will be served within the profile group + tagsPath = "/tags/:" + apiutil.TagNameKey + customCSSPath = profileGroupPath + "/custom.css" + instanceCustomCSSPath = "/custom.css" + rssFeedPath = profileGroupPath + "/feed.rss" + assetsPathPrefix = "/assets" + distPathPrefix = assetsPathPrefix + "/dist" + themesPathPrefix = assetsPathPrefix + "/themes" + settingsPathPrefix = "/settings" + settingsPanelGlob = settingsPathPrefix + "/*panel" + userPanelPath = settingsPathPrefix + "/user" + adminPanelPath = settingsPathPrefix + "/admin" + signupPath = "/signup" cacheControlHeader = "Cache-Control" // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control cacheControlNoCache = "no-cache" // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#response_directives @@ -114,6 +115,7 @@ func (m *Module) Route(r *router.Router, mi ...gin.HandlerFunc) { r.AttachHandler(http.MethodGet, settingsPathPrefix, m.SettingsPanelHandler) r.AttachHandler(http.MethodGet, settingsPanelGlob, m.SettingsPanelHandler) r.AttachHandler(http.MethodGet, customCSSPath, m.customCSSGETHandler) + r.AttachHandler(http.MethodGet, instanceCustomCSSPath, m.instanceCustomCSSGETHandler) r.AttachHandler(http.MethodGet, rssFeedPath, m.rssFeedGETHandler) r.AttachHandler(http.MethodGet, confirmEmailPath, m.confirmEmailGETHandler) r.AttachHandler(http.MethodPost, confirmEmailPath, m.confirmEmailPOSTHandler) diff --git a/web/source/settings/lib/types/instance.ts b/web/source/settings/lib/types/instance.ts index 11f75032c..9abdc6a96 100644 --- a/web/source/settings/lib/types/instance.ts +++ b/web/source/settings/lib/types/instance.ts @@ -25,6 +25,7 @@ export interface InstanceV1 { description_text?: string; short_description: string; short_description_text?: string; + custom_css: string; email: string; version: string; debug?: boolean; diff --git a/web/source/settings/views/admin/instance/settings.tsx b/web/source/settings/views/admin/instance/settings.tsx index c769b11ec..fd5ceb1ee 100644 --- a/web/source/settings/views/admin/instance/settings.tsx +++ b/web/source/settings/views/admin/instance/settings.tsx @@ -46,7 +46,7 @@ function InstanceSettingsForm({ data: instance }: InstanceSettingsFormProps) { const shortDescLimit = 500; const descLimit = 5000; const termsLimit = 5000; - + const form = { title: useTextInput("title", { source: instance, @@ -66,6 +66,10 @@ function InstanceSettingsForm({ data: instance }: InstanceSettingsFormProps) { valueSelector: (s: InstanceV1) => s.description_text, validator: (val: string) => val.length <= descLimit ? "" : `Instance description is ${val.length} characters; must be ${descLimit} characters or less` }), + customCSS: useTextInput("custom_css", { + source: instance, + valueSelector: (s: InstanceV1) => s.custom_css + }), terms: useTextInput("terms", { source: instance, // Select "raw" text version of parsed field for editing. @@ -191,7 +195,16 @@ function InstanceSettingsForm({ data: instance }: InstanceSettingsFormProps) { type="email" /> +