From 3b2685acb14326a08c1555ec6a67480fa6d99f16 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 26 Jun 2022 17:19:47 +0300 Subject: [PATCH 01/40] WIP use new model format --- internal/scene/car/chassis.go | 13 +++++++++++-- internal/scene/car/wheel.go | 10 ++++++++-- internal/scene/data.go | 1 + internal/ui/play/view.go | 36 ++++++++++++++++++----------------- 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/internal/scene/car/chassis.go b/internal/scene/car/chassis.go index 154fb99..64c7045 100644 --- a/internal/scene/car/chassis.go +++ b/internal/scene/car/chassis.go @@ -1,6 +1,8 @@ package car import ( + "fmt" + "github.com/mokiat/gomath/sprec" "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/lacking/game/graphics" @@ -47,7 +49,14 @@ func (b *ChassisBuilder) WithPosition(position sprec.Vec3) *ChassisBuilder { } func (b *ChassisBuilder) Build(ecsScene *ecs.Scene, gfxScene *graphics.Scene, physicsScene *physics.Scene) *ecs.Entity { - bodyNode, _ := b.model.FindNode("Chassis") + instance, found := b.model.FindMeshInstance("Chassis") + if !found { + panic(fmt.Errorf("mesh instance %q not found", "Chassis")) + } + definition := instance.MeshDefinition + bodyNode := instance.Node + + // bodyNode, _ := b.model.FindNode("Chassis") physicsBody := physicsScene.CreateBody() physicsBody.SetPosition(sprec.ZeroVec3()) @@ -70,7 +79,7 @@ func (b *ChassisBuilder) Build(ecsScene *ecs.Scene, gfxScene *graphics.Scene, ph Body: physicsBody, }) - gfxMesh := gfxScene.CreateMesh(bodyNode.Mesh.GFXMeshTemplate) + gfxMesh := gfxScene.CreateMesh(definition.GFXMeshTemplate) gfxMesh.SetPosition(bodyNode.Matrix.Translation()) // TODO: Set Rotation // TODO: Set Scale diff --git a/internal/scene/car/wheel.go b/internal/scene/car/wheel.go index 323399e..c03e2c6 100644 --- a/internal/scene/car/wheel.go +++ b/internal/scene/car/wheel.go @@ -60,7 +60,13 @@ func (b *WheelBuilder) WithPosition(position sprec.Vec3) *WheelBuilder { } func (b *WheelBuilder) Build(ecsScene *ecs.Scene, gfxScene *graphics.Scene, physicsScene *physics.Scene) *ecs.Entity { - modelNode, _ := b.model.FindNode(fmt.Sprintf("%sWheel", b.location)) + instance, found := b.model.FindMeshInstance(fmt.Sprintf("%sWheel", b.location)) + if !found { + panic(fmt.Errorf("mesh instance %q not found", fmt.Sprintf("%sWheel", b.location))) + } + definition := instance.MeshDefinition + modelNode := instance.Node + // modelNode, _ := b.model.FindNode(fmt.Sprintf("%sWheel", b.location)) physicsBody := physicsScene.CreateBody() physicsBody.SetPosition(sprec.ZeroVec3()) @@ -84,7 +90,7 @@ func (b *WheelBuilder) Build(ecsScene *ecs.Scene, gfxScene *graphics.Scene, phys Body: physicsBody, }) - gfxMesh := gfxScene.CreateMesh(modelNode.Mesh.GFXMeshTemplate) + gfxMesh := gfxScene.CreateMesh(definition.GFXMeshTemplate) gfxMesh.SetPosition(modelNode.Matrix.Translation()) // TODO: Set Rotation // TODO: Set Scale diff --git a/internal/scene/data.go b/internal/scene/data.go index 7c01741..19c0335 100644 --- a/internal/scene/data.go +++ b/internal/scene/data.go @@ -43,6 +43,7 @@ func (d *Data) Request() async.Outcome { default: levelID = levelIDPlayground } + levelID = levelIDPlayground d.loadOutcome = async.NewCompositeOutcome( d.registry.LoadModel(modelIDSUV).OnSuccess(resource.InjectModel(&d.CarModel)), d.registry.LoadLevel(levelID).OnSuccess(resource.InjectLevel(&d.Level)), // Forest diff --git a/internal/ui/play/view.go b/internal/ui/play/view.go index fe4498f..f0ff1fe 100644 --- a/internal/ui/play/view.go +++ b/internal/ui/play/view.go @@ -164,9 +164,13 @@ func (h *playLifecycle) setupLevel(level *resource.Level) { sunLight := h.gfxScene.CreateDirectionalLight() sunLight.SetRotation(sprec.QuatProd( - sprec.RotationQuat(sprec.Degrees(225), sprec.BasisYVec3()), - sprec.RotationQuat(sprec.Degrees(-45), sprec.BasisXVec3()), + sprec.RotationQuat(sprec.Degrees(-90), sprec.BasisYVec3()), + sprec.RotationQuat(sprec.Degrees(-24), sprec.BasisXVec3()), )) + // sunLight.SetRotation(sprec.QuatProd( + // sprec.RotationQuat(sprec.Degrees(225), sprec.BasisYVec3()), + // sprec.RotationQuat(sprec.Degrees(-45), sprec.BasisXVec3()), + // )) sunLight.SetIntensity(sprec.NewVec3(1.2, 1.2, 1.2)) for _, staticMesh := range level.StaticMeshes { @@ -182,26 +186,24 @@ func (h *playLifecycle) setupLevel(level *resource.Level) { body.SetCollisionShapes([]physics.CollisionShape{collisionMesh}) } - var createModelMesh func(matrix sprec.Mat4, node *resource.Node) - createModelMesh = func(matrix sprec.Mat4, node *resource.Node) { - modelMatrix := sprec.Mat4Prod(matrix, node.Matrix) + // var createModelMesh func(matrix sprec.Mat4, node *resource.Node) + // createModelMesh = func(matrix sprec.Mat4, node *resource.Node) { - if node.Mesh != nil { - gfxMesh := h.gfxScene.CreateMesh(node.Mesh.GFXMeshTemplate) + // for _, child := range node.Children { + // createModelMesh(modelMatrix, child) + // } + // } + + for _, staticEntity := range level.StaticEntities { + for _, instance := range staticEntity.Model.MeshInstances { + node := instance.Node + modelMatrix := node.AbsoluteMatrix() + + gfxMesh := h.gfxScene.CreateMesh(instance.MeshDefinition.GFXMeshTemplate) gfxMesh.SetPosition(modelMatrix.Translation()) // TODO: SetRotation // TODO: SetScale } - - for _, child := range node.Children { - createModelMesh(modelMatrix, child) - } - } - - for _, staticEntity := range level.StaticEntities { - for _, node := range staticEntity.Model.Nodes { - createModelMesh(staticEntity.Matrix, node) - } } carModel := h.gameData.CarModel From 9491f2c19aa2bd48c9669168d1cbec15bc001887 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Mon, 27 Jun 2022 23:14:05 +0300 Subject: [PATCH 02/40] Fix static entity transformations --- internal/ui/play/view.go | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/internal/ui/play/view.go b/internal/ui/play/view.go index f0ff1fe..c0a291b 100644 --- a/internal/ui/play/view.go +++ b/internal/ui/play/view.go @@ -186,23 +186,15 @@ func (h *playLifecycle) setupLevel(level *resource.Level) { body.SetCollisionShapes([]physics.CollisionShape{collisionMesh}) } - // var createModelMesh func(matrix sprec.Mat4, node *resource.Node) - // createModelMesh = func(matrix sprec.Mat4, node *resource.Node) { - - // for _, child := range node.Children { - // createModelMesh(modelMatrix, child) - // } - // } - for _, staticEntity := range level.StaticEntities { for _, instance := range staticEntity.Model.MeshInstances { node := instance.Node - modelMatrix := node.AbsoluteMatrix() + modelMatrix := sprec.Mat4Prod(staticEntity.Matrix, node.AbsoluteMatrix()) gfxMesh := h.gfxScene.CreateMesh(instance.MeshDefinition.GFXMeshTemplate) gfxMesh.SetPosition(modelMatrix.Translation()) - // TODO: SetRotation - // TODO: SetScale + gfxMesh.SetRotation(modelMatrix.RotationQuat()) + gfxMesh.SetScale(modelMatrix.Scale()) } } From 6ab11b5bf8d7e8f9bc35d7cfffd4fdc352efbb93 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 10 Jul 2022 23:21:55 +0300 Subject: [PATCH 03/40] Switch to new unified game api --- internal/ecscomp/camera.go | 3 +- internal/ecscomp/identifiers.go | 4 +- internal/ecscomp/physics.go | 22 ----- internal/ecscomp/render.go | 22 ----- internal/ecssys/render.go | 36 -------- internal/ecssys/stand.go | 17 ++-- internal/game/controller.go | 82 ++++++---------- internal/scene/car/chassis.go | 47 ++++------ internal/scene/car/wheel.go | 45 ++++----- internal/ui/play/view.go | 159 +++++++++++++++++++++----------- 10 files changed, 179 insertions(+), 258 deletions(-) delete mode 100644 internal/ecscomp/physics.go delete mode 100644 internal/ecscomp/render.go delete mode 100644 internal/ecssys/render.go diff --git a/internal/ecscomp/camera.go b/internal/ecscomp/camera.go index 63f4f6c..d0c2b7e 100644 --- a/internal/ecscomp/camera.go +++ b/internal/ecscomp/camera.go @@ -2,6 +2,7 @@ package ecscomp import ( "github.com/mokiat/gomath/sprec" + "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/lacking/game/graphics" ) @@ -19,7 +20,7 @@ func GetCameraStand(entity *ecs.Entity) *CameraStand { } type CameraStand struct { - Target *ecs.Entity + Target *game.Node AnchorPosition sprec.Vec3 AnchorDistance float32 CameraDistance float32 diff --git a/internal/ecscomp/identifiers.go b/internal/ecscomp/identifiers.go index 91a516c..e6ea5c7 100644 --- a/internal/ecscomp/identifiers.go +++ b/internal/ecscomp/identifiers.go @@ -5,9 +5,7 @@ import ( ) const ( - PhysicsComponentID ecs.ComponentTypeID = iota - RenderComponentID - VehicleComponentID + VehicleComponentID ecs.ComponentTypeID = iota PlayerControlComponentID CameraStandComponentID ) diff --git a/internal/ecscomp/physics.go b/internal/ecscomp/physics.go deleted file mode 100644 index ed5a78e..0000000 --- a/internal/ecscomp/physics.go +++ /dev/null @@ -1,22 +0,0 @@ -package ecscomp - -import ( - "github.com/mokiat/lacking/game/ecs" - "github.com/mokiat/lacking/game/physics" -) - -type Physics struct { - Body *physics.Body -} - -func SetPhysics(entity *ecs.Entity, component *Physics) { - entity.SetComponent(PhysicsComponentID, component) -} - -func GetPhysics(entity *ecs.Entity) *Physics { - component := entity.Component(PhysicsComponentID) - if component == nil { - return nil - } - return component.(*Physics) -} diff --git a/internal/ecscomp/render.go b/internal/ecscomp/render.go deleted file mode 100644 index 4a9ec0f..0000000 --- a/internal/ecscomp/render.go +++ /dev/null @@ -1,22 +0,0 @@ -package ecscomp - -import ( - "github.com/mokiat/lacking/game/ecs" - "github.com/mokiat/lacking/game/graphics" -) - -func SetRender(entity *ecs.Entity, component *Render) { - entity.SetComponent(RenderComponentID, component) -} - -func GetRender(entity *ecs.Entity) *Render { - component := entity.Component(RenderComponentID) - if component == nil { - return nil - } - return component.(*Render) -} - -type Render struct { - Mesh *graphics.Mesh -} diff --git a/internal/ecssys/render.go b/internal/ecssys/render.go deleted file mode 100644 index 240ebc7..0000000 --- a/internal/ecssys/render.go +++ /dev/null @@ -1,36 +0,0 @@ -package ecssys - -import ( - "github.com/mokiat/lacking/game/ecs" - "github.com/mokiat/rally-mka/internal/ecscomp" -) - -func NewRenderer(ecsScene *ecs.Scene) *Renderer { - return &Renderer{ - ecsScene: ecsScene, - } -} - -type Renderer struct { - ecsScene *ecs.Scene -} - -func (r *Renderer) Update() { - result := r.ecsScene.Find(ecs. - Having(ecscomp.PhysicsComponentID). - And(ecscomp.RenderComponentID)) - defer result.Close() - - for result.HasNext() { - entity := result.Next() - - physicsComp := ecscomp.GetPhysics(entity) - body := physicsComp.Body - - renderComp := ecscomp.GetRender(entity) - mesh := renderComp.Mesh - - mesh.SetPosition(body.Position()) - mesh.SetRotation(body.Orientation()) - } -} diff --git a/internal/ecssys/stand.go b/internal/ecssys/stand.go index 863641e..960d8d7 100644 --- a/internal/ecssys/stand.go +++ b/internal/ecssys/stand.go @@ -67,17 +67,16 @@ func (s *CameraStandSystem) Update(elapsedSeconds float32, gamepad *app.GamepadS func (s *CameraStandSystem) updateCameraStand(cameraStand *ecscomp.CameraStand, elapsedSeconds float32, gamepad *app.GamepadState) { var ( - targetPhysicsComp = ecscomp.GetPhysics(cameraStand.Target) - targetRenderComp = ecscomp.GetRender(cameraStand.Target) + target = cameraStand.Target ) - var targetPosition sprec.Vec3 switch { - case targetPhysicsComp != nil: - targetPosition = targetPhysicsComp.Body.Position() - case targetRenderComp != nil: - targetPosition = targetRenderComp.Mesh.Position() + case target.Body() != nil: + targetPosition = target.Body().Position() + default: + targetPosition = target.AbsoluteMatrix().Translation() } + // we use a camera anchor to achieve the smooth effect of a // camera following the target anchorVector := sprec.Vec3Diff(cameraStand.AnchorPosition, targetPosition) @@ -147,7 +146,5 @@ func (s *CameraStandSystem) updateCameraStand(cameraStand *ecscomp.CameraStand, sprec.RotationMat4(s.rotationX, 1.0, 0.0, 0.0), sprec.TranslationMat4(0.0, 0.0, cameraStand.CameraDistance*s.zoom), ) - - cameraStand.Camera.SetPosition(matrix.Translation()) - cameraStand.Camera.SetRotation(matrix.RotationQuat()) + cameraStand.Camera.SetMatrix(matrix) } diff --git a/internal/game/controller.go b/internal/game/controller.go index 789a2d0..e935936 100644 --- a/internal/game/controller.go +++ b/internal/game/controller.go @@ -4,6 +4,7 @@ import ( "time" "github.com/mokiat/lacking/app" + "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/asset" "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/lacking/game/graphics" @@ -13,10 +14,14 @@ import ( ) func NewController(reg asset.Registry, gfxEngine *graphics.Engine) *Controller { + engine := game.NewEngine( + game.WithPhysics(physics.NewEngine()), + game.WithGraphics(gfxEngine), + game.WithECS(ecs.NewEngine()), + ) + controller := &Controller{ - gfxEngine: gfxEngine, - physicsEngine: physics.NewEngine(), - ecsEngine: ecs.NewEngine(), + engine: engine, lastFrameTime: time.Now(), } @@ -27,11 +32,10 @@ func NewController(reg asset.Registry, gfxEngine *graphics.Engine) *Controller { type Controller struct { app.NopController - window app.Window - gfxEngine *graphics.Engine - physicsEngine *physics.Engine - ecsEngine *ecs.Engine - registry *resource.Registry + window app.Window + engine *game.Engine + scene *game.Scene + registry *resource.Registry lastFrameTime time.Time freezeFrame bool @@ -39,11 +43,6 @@ type Controller struct { width int height int - gfxScene *graphics.Scene - physicsScene *physics.Scene - ecsScene *ecs.Scene - - renderSystem *ecssys.Renderer vehicleSystem *ecssys.VehicleSystem cameraStandSystem *ecssys.CameraStandSystem @@ -60,24 +59,12 @@ func (c *Controller) Registry() *resource.Registry { return c.registry } -func (c *Controller) GFXEngine() *graphics.Engine { - return c.gfxEngine -} - -func (c *Controller) GFXScene() *graphics.Scene { - return c.gfxScene -} - -func (c *Controller) PhysicsScene() *physics.Scene { - return c.physicsScene -} - -func (c *Controller) ECSScene() *ecs.Scene { - return c.ecsScene +func (c *Controller) Engine() *game.Engine { + return c.engine } -func (c *Controller) RenderSystem() *ecssys.Renderer { - return c.renderSystem +func (c *Controller) Scene() *game.Scene { + return c.scene } func (c *Controller) VehicleSystem() *ecssys.VehicleSystem { @@ -96,17 +83,20 @@ func (c *Controller) OnCreate(window app.Window) { c.window = window c.width, c.height = window.Size() - c.gfxEngine.Create() + c.engine.Graphics().Create() + c.scene = c.engine.CreateScene() + c.camera = c.scene.Graphics().CreateCamera() - c.gfxScene = c.gfxEngine.CreateScene() - c.physicsScene = c.physicsEngine.CreateScene(0.015) - c.ecsScene = c.ecsEngine.CreateScene() + c.vehicleSystem = ecssys.NewVehicleSystem(c.scene.ECS()) + c.cameraStandSystem = ecssys.NewCameraStandSystem(c.scene.ECS()) +} - c.camera = c.gfxScene.CreateCamera() +func (c *Controller) OnDestroy(window app.Window) { + c.vehicleSystem = nil + c.cameraStandSystem = nil - c.renderSystem = ecssys.NewRenderer(c.ecsScene) - c.vehicleSystem = ecssys.NewVehicleSystem(c.ecsScene) - c.cameraStandSystem = ecssys.NewCameraStandSystem(c.ecsScene) + c.scene.Delete() + c.engine.Graphics().Destroy() } func (c *Controller) OnResize(window app.Window, width, height int) { @@ -147,29 +137,15 @@ func (c *Controller) OnRender(window app.Window) { gamepad = &state } - c.physicsScene.Update(elapsedSeconds) c.vehicleSystem.Update(elapsedSeconds, gamepad) - c.renderSystem.Update() + c.scene.Update(elapsedSeconds) c.cameraStandSystem.Update(elapsedSeconds, gamepad) - if c.OnUpdate != nil { c.OnUpdate() } - c.gfxScene.Render(graphics.NewViewport(0, 0, c.width, c.height), c.camera) + c.scene.Graphics().Render(graphics.NewViewport(0, 0, c.width, c.height), c.camera) } window.Invalidate() // force redraw } - -func (c *Controller) OnDestroy(window app.Window) { - c.renderSystem = nil - c.vehicleSystem = nil - c.cameraStandSystem = nil - - c.ecsScene.Delete() - c.physicsScene.Delete() - c.gfxScene.Delete() - - c.gfxEngine.Destroy() -} diff --git a/internal/scene/car/chassis.go b/internal/scene/car/chassis.go index 64c7045..a2e1002 100644 --- a/internal/scene/car/chassis.go +++ b/internal/scene/car/chassis.go @@ -4,12 +4,10 @@ import ( "fmt" "github.com/mokiat/gomath/sprec" - "github.com/mokiat/lacking/game/ecs" - "github.com/mokiat/lacking/game/graphics" + "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/physics" "github.com/mokiat/lacking/resource" "github.com/mokiat/lacking/shape" - "github.com/mokiat/rally-mka/internal/ecscomp" ) const ( @@ -29,26 +27,26 @@ func Chassis(model *resource.Model) *ChassisBuilder { type ChassisBuilder struct { model *resource.Model - modifiers []func(entity *ecs.Entity) + modifiers []func(node *game.Node) } func (b *ChassisBuilder) WithName(name string) *ChassisBuilder { - b.modifiers = append(b.modifiers, func(entity *ecs.Entity) { - physicsComponent := ecscomp.GetPhysics(entity) - physicsComponent.Body.SetName(name) + b.modifiers = append(b.modifiers, func(node *game.Node) { + body := node.Body() + body.SetName(name) }) return b } func (b *ChassisBuilder) WithPosition(position sprec.Vec3) *ChassisBuilder { - b.modifiers = append(b.modifiers, func(entity *ecs.Entity) { - physicsComponent := ecscomp.GetPhysics(entity) - physicsComponent.Body.SetPosition(position) + b.modifiers = append(b.modifiers, func(node *game.Node) { + body := node.Body() + body.SetPosition(position) }) return b } -func (b *ChassisBuilder) Build(ecsScene *ecs.Scene, gfxScene *graphics.Scene, physicsScene *physics.Scene) *ecs.Entity { +func (b *ChassisBuilder) Build(scene *game.Scene) *game.Node { instance, found := b.model.FindMeshInstance("Chassis") if !found { panic(fmt.Errorf("mesh instance %q not found", "Chassis")) @@ -56,9 +54,7 @@ func (b *ChassisBuilder) Build(ecsScene *ecs.Scene, gfxScene *graphics.Scene, ph definition := instance.MeshDefinition bodyNode := instance.Node - // bodyNode, _ := b.model.FindNode("Chassis") - - physicsBody := physicsScene.CreateBody() + physicsBody := scene.Physics().CreateBody() physicsBody.SetPosition(sprec.ZeroVec3()) physicsBody.SetOrientation(sprec.IdentityQuat()) physicsBody.SetMass(chassisMass) @@ -74,22 +70,15 @@ func (b *ChassisBuilder) Build(ecsScene *ecs.Scene, gfxScene *graphics.Scene, ph }, }) - entity := ecsScene.CreateEntity() - ecscomp.SetPhysics(entity, &ecscomp.Physics{ - Body: physicsBody, - }) - - gfxMesh := gfxScene.CreateMesh(definition.GFXMeshTemplate) - gfxMesh.SetPosition(bodyNode.Matrix.Translation()) - // TODO: Set Rotation - // TODO: Set Scale - - ecscomp.SetRender(entity, &ecscomp.Render{ - Mesh: gfxMesh, - }) + gfxMesh := scene.Graphics().CreateMesh(definition.GFXMeshTemplate) + gfxMesh.SetMatrix(bodyNode.Matrix) + node := game.NewNode() + node.SetBody(physicsBody) + node.SetMesh(gfxMesh) for _, modifier := range b.modifiers { - modifier(entity) + modifier(node) } - return entity + scene.Root().AppendChild(node) + return node } diff --git a/internal/scene/car/wheel.go b/internal/scene/car/wheel.go index c03e2c6..336534f 100644 --- a/internal/scene/car/wheel.go +++ b/internal/scene/car/wheel.go @@ -4,12 +4,10 @@ import ( "fmt" "github.com/mokiat/gomath/sprec" - "github.com/mokiat/lacking/game/ecs" - "github.com/mokiat/lacking/game/graphics" + "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/physics" "github.com/mokiat/lacking/resource" "github.com/mokiat/lacking/shape" - "github.com/mokiat/rally-mka/internal/ecscomp" ) const ( @@ -40,35 +38,34 @@ func Wheel(model *resource.Model, location WheelLocation) *WheelBuilder { type WheelBuilder struct { model *resource.Model location WheelLocation - modifiers []func(entity *ecs.Entity) + modifiers []func(node *game.Node) } func (b *WheelBuilder) WithName(name string) *WheelBuilder { - b.modifiers = append(b.modifiers, func(entity *ecs.Entity) { - physicsComponent := ecscomp.GetPhysics(entity) - physicsComponent.Body.SetName(name) + b.modifiers = append(b.modifiers, func(node *game.Node) { + body := node.Body() + body.SetName(name) }) return b } func (b *WheelBuilder) WithPosition(position sprec.Vec3) *WheelBuilder { - b.modifiers = append(b.modifiers, func(entity *ecs.Entity) { - physicsComponent := ecscomp.GetPhysics(entity) - physicsComponent.Body.SetPosition(position) + b.modifiers = append(b.modifiers, func(node *game.Node) { + body := node.Body() + body.SetPosition(position) }) return b } -func (b *WheelBuilder) Build(ecsScene *ecs.Scene, gfxScene *graphics.Scene, physicsScene *physics.Scene) *ecs.Entity { +func (b *WheelBuilder) Build(scene *game.Scene) *game.Node { instance, found := b.model.FindMeshInstance(fmt.Sprintf("%sWheel", b.location)) if !found { panic(fmt.Errorf("mesh instance %q not found", fmt.Sprintf("%sWheel", b.location))) } definition := instance.MeshDefinition modelNode := instance.Node - // modelNode, _ := b.model.FindNode(fmt.Sprintf("%sWheel", b.location)) - physicsBody := physicsScene.CreateBody() + physicsBody := scene.Physics().CreateBody() physicsBody.SetPosition(sprec.ZeroVec3()) physicsBody.SetOrientation(sprec.IdentityQuat()) physicsBody.SetMass(wheelMass) @@ -85,21 +82,15 @@ func (b *WheelBuilder) Build(ecsScene *ecs.Scene, gfxScene *graphics.Scene, phys }, }) - entity := ecsScene.CreateEntity() - ecscomp.SetPhysics(entity, &ecscomp.Physics{ - Body: physicsBody, - }) - - gfxMesh := gfxScene.CreateMesh(definition.GFXMeshTemplate) - gfxMesh.SetPosition(modelNode.Matrix.Translation()) - // TODO: Set Rotation - // TODO: Set Scale + gfxMesh := scene.Graphics().CreateMesh(definition.GFXMeshTemplate) + gfxMesh.SetMatrix(modelNode.Matrix) - ecscomp.SetRender(entity, &ecscomp.Render{ - Mesh: gfxMesh, - }) + node := game.NewNode() + node.SetBody(physicsBody) + node.SetMesh(gfxMesh) for _, modifier := range b.modifiers { - modifier(entity) + modifier(node) } - return entity + scene.Root().AppendChild(node) + return node } diff --git a/internal/ui/play/view.go b/internal/ui/play/view.go index c0a291b..13a0485 100644 --- a/internal/ui/play/view.go +++ b/internal/ui/play/view.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/mokiat/gomath/sprec" + lackgame "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/lacking/game/graphics" "github.com/mokiat/lacking/game/physics" @@ -75,7 +76,7 @@ var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { co.Once(func() { context.GameController.OnUpdate = func() { - carSpeed := ecscomp.GetPhysics(lifecycle.car).Body.Velocity().Length() * 3.6 + carSpeed := lifecycle.car.Body().Velocity().Length() * 3.6 speedState.Set(carSpeed) } }) @@ -122,25 +123,24 @@ type playLifecycle struct { physicsScene *physics.Scene ecsScene *ecs.Scene - renderSystem *ecssys.Renderer vehicleSystem *ecssys.VehicleSystem cameraStandSystem *ecssys.CameraStandSystem camera *graphics.Camera - car *ecs.Entity + car *lackgame.Node } func (h *playLifecycle) init() { - h.gfxScene = h.gameController.GFXScene() - h.physicsScene = h.gameController.PhysicsScene() - h.ecsScene = h.gameController.ECSScene() + scene := h.gameController.Scene() + + h.physicsScene = scene.Physics() + h.gfxScene = scene.Graphics() + h.ecsScene = scene.ECS() - h.renderSystem = h.gameController.RenderSystem() h.vehicleSystem = h.gameController.VehicleSystem() h.cameraStandSystem = h.gameController.CameraStandSystem() h.camera = h.gameController.Camera() - h.camera.SetPosition(sprec.NewVec3(0.0, 0.0, 0.0)) h.camera.SetFoVMode(graphics.FoVModeHorizontalPlus) h.camera.SetFoV(sprec.Degrees(66)) h.camera.SetAutoExposure(true) @@ -163,9 +163,13 @@ func (h *playLifecycle) setupLevel(level *resource.Level) { ambientLight.SetRefractionTexture(level.AmbientRefractionTexture.GFXTexture) sunLight := h.gfxScene.CreateDirectionalLight() - sunLight.SetRotation(sprec.QuatProd( - sprec.RotationQuat(sprec.Degrees(-90), sprec.BasisYVec3()), - sprec.RotationQuat(sprec.Degrees(-24), sprec.BasisXVec3()), + sunLight.SetMatrix(sprec.TRSMat4( + sprec.ZeroVec3(), + sprec.QuatProd( + sprec.RotationQuat(sprec.Degrees(-90), sprec.BasisYVec3()), + sprec.RotationQuat(sprec.Degrees(-24), sprec.BasisXVec3()), + ), + sprec.NewVec3(1.0, 1.0, 1.0), )) // sunLight.SetRotation(sprec.QuatProd( // sprec.RotationQuat(sprec.Degrees(225), sprec.BasisYVec3()), @@ -192,53 +196,98 @@ func (h *playLifecycle) setupLevel(level *resource.Level) { modelMatrix := sprec.Mat4Prod(staticEntity.Matrix, node.AbsoluteMatrix()) gfxMesh := h.gfxScene.CreateMesh(instance.MeshDefinition.GFXMeshTemplate) - gfxMesh.SetPosition(modelMatrix.Translation()) - gfxMesh.SetRotation(modelMatrix.RotationQuat()) - gfxMesh.SetScale(modelMatrix.Scale()) + gfxMesh.SetMatrix(modelMatrix) + } } carModel := h.gameData.CarModel - targetEntity := h.setupCarDemo(carModel, sprec.NewVec3(0.0, 3.0, 0.0)) - standTarget := targetEntity - standEntity := h.ecsScene.CreateEntity() - ecscomp.SetCameraStand(standEntity, &ecscomp.CameraStand{ - Target: standTarget, + targetNode := h.setupCarDemo(carModel, sprec.NewVec3(0.0, 3.0, 0.0)) + + cameraEntity := h.ecsScene.CreateEntity() + + // cameraBody := h.physicsScene.CreateBody() + // cameraBody.SetPosition(sprec.NewVec3(0.0, 10.0, -5.0)) + // cameraBody.SetOrientation(sprec.RotationQuat(sprec.Degrees(180), sprec.BasisYVec3())) + // cameraBody.SetMass(10.0) + // cameraBody.SetMomentOfInertia(physics.SymmetricMomentOfInertia(100 * 1 * 1 / 5.0)) + // cameraBody.SetDragFactor(0.0) + // cameraBody.SetAngularDragFactor(0.0) + // cameraBody.SetRestitutionCoefficient(-0.5) + // cameraBody.SetCollisionShapes([]physics.CollisionShape{ + // shape.Placement{ + // Position: sprec.ZeroVec3(), + // Orientation: sprec.IdentityQuat(), + // Shape: shape.NewStaticSphere(1.0), + // }, + // }) + + // ecscomp.SetPhysics(cameraEntity, &ecscomp.Physics{ + // Body: cameraBody, + // }) + // ecscomp.SetHierarchy(cameraEntity, &ecscomp.Hierarchy{ + // Node: hierarchy.NewNode(nil), + // }) + // ecscomp.SetCamera(cameraEntity, &ecscomp.Camera{ + // Camera: h.camera, + // }) + + // carBody := ecscomp.GetPhysics(targetEntity).Body + + // cameraRodConstraint := solver.NewHingedRod(). + // SetLength(5.0). + // SetPrimaryAnchor(sprec.NewVec3(0.0, 0.0, -1)). + // SetSecondaryAnchor(sprec.NewVec3(0.0, 0.0, 0.0)) + // h.physicsScene.CreateDoubleBodyConstraint(carBody, cameraBody, cameraRodConstraint) + + // cameraAxisConstraint := solver.NewMatchAxis(). + // SetPrimaryAxis(sprec.BasisYVec3()). + // SetSecondaryAxis(sprec.BasisYVec3()) + // h.physicsScene.CreateDoubleBodyConstraint(carBody, cameraBody, cameraAxisConstraint) + + // cameraAxis2Constraint := solver.NewMatchAxis(). + // SetPrimaryAxis(sprec.BasisZVec3()). + // SetSecondaryAxis(sprec.InverseVec3(sprec.BasisZVec3())) + // h.physicsScene.CreateDoubleBodyConstraint(carBody, cameraBody, cameraAxis2Constraint) + + ecscomp.SetCameraStand(cameraEntity, &ecscomp.CameraStand{ + Target: targetNode, Camera: h.camera, - AnchorPosition: sprec.Vec3Sum(ecscomp.GetPhysics(standTarget).Body.Position(), sprec.NewVec3(0.0, 0.0, -cameraDistance)), + AnchorPosition: sprec.Vec3Sum(targetNode.Body().Position(), sprec.NewVec3(0.0, 0.0, -cameraDistance)), AnchorDistance: anchorDistance, CameraDistance: cameraDistance, }) - h.car = targetEntity + + h.car = targetNode } -func (h *playLifecycle) setupCarDemo(model *resource.Model, position sprec.Vec3) *ecs.Entity { +func (h *playLifecycle) setupCarDemo(model *resource.Model, position sprec.Vec3) *lackgame.Node { chasis := car.Chassis(model). WithName("chasis"). WithPosition(position). - Build(h.ecsScene, h.gfxScene, h.physicsScene) - chasisPhysics := ecscomp.GetPhysics(chasis) + Build(h.gameController.Scene()) + chasisBody := chasis.Body() flWheelRelativePosition := sprec.NewVec3(suspensionWidth, suspensionStart-suspensionLength, 1.07*correction) flWheel := car.Wheel(model, car.FrontLeftWheelLocation). WithName("front-left-wheel"). WithPosition(sprec.Vec3Sum(position, flWheelRelativePosition)). - Build(h.ecsScene, h.gfxScene, h.physicsScene) - flWheelPhysics := ecscomp.GetPhysics(flWheel) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, flWheelPhysics.Body, + Build(h.gameController.Scene()) + flWheelBody := flWheel.Body() + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, flWheelBody, solver.NewMatchTranslation(). SetPrimaryAnchor(flWheelRelativePosition). SetIgnoreY(suspensionEnabled), ) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, flWheelPhysics.Body, &solver.LimitTranslation{ + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, flWheelBody, &solver.LimitTranslation{ MaxY: suspensionStart, MinY: suspensionEnd, }) flRotation := solver.NewMatchAxis(). SetPrimaryAxis(sprec.BasisXVec3()). SetSecondaryAxis(sprec.BasisXVec3()) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, flWheelPhysics.Body, flRotation) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, flWheelPhysics.Body, &solver.Coilover{ + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, flWheelBody, flRotation) + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, flWheelBody, &solver.Coilover{ PrimaryAnchor: flWheelRelativePosition, FrequencyHz: suspensionFrequencyHz, DampingRatio: suspensionDampingRatio, @@ -248,50 +297,50 @@ func (h *playLifecycle) setupCarDemo(model *resource.Model, position sprec.Vec3) frWheel := car.Wheel(model, car.FrontRightWheelLocation). WithName("front-right-wheel"). WithPosition(sprec.Vec3Sum(position, frWheelRelativePosition)). - Build(h.ecsScene, h.gfxScene, h.physicsScene) - frWheelPhysics := ecscomp.GetPhysics(frWheel) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, frWheelPhysics.Body, + Build(h.gameController.Scene()) + frWheelBody := frWheel.Body() + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, frWheelBody, solver.NewMatchTranslation(). SetPrimaryAnchor(frWheelRelativePosition). SetIgnoreY(suspensionEnabled), ) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, frWheelPhysics.Body, &solver.LimitTranslation{ + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, frWheelBody, &solver.LimitTranslation{ MaxY: suspensionStart, MinY: suspensionEnd, }) frRotation := solver.NewMatchAxis(). SetPrimaryAxis(sprec.BasisXVec3()). SetSecondaryAxis(sprec.BasisXVec3()) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, frWheelPhysics.Body, frRotation) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, frWheelPhysics.Body, &solver.Coilover{ + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, frWheelBody, frRotation) + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, frWheelBody, &solver.Coilover{ PrimaryAnchor: frWheelRelativePosition, FrequencyHz: suspensionFrequencyHz, DampingRatio: suspensionDampingRatio, }) - h.physicsScene.CreateDoubleBodyConstraint(flWheelPhysics.Body, frWheelPhysics.Body, &Differential{}) + h.physicsScene.CreateDoubleBodyConstraint(flWheelBody, frWheelBody, &Differential{}) blWheelRelativePosition := sprec.NewVec3(suspensionWidth, suspensionStart-suspensionLength, -1.56*correction) blWheel := car.Wheel(model, car.BackLeftWheelLocation). WithName("back-left-wheel"). WithPosition(sprec.Vec3Sum(position, blWheelRelativePosition)). - Build(h.ecsScene, h.gfxScene, h.physicsScene) - blWheelPhysics := ecscomp.GetPhysics(blWheel) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, blWheelPhysics.Body, + Build(h.gameController.Scene()) + blWheelBody := blWheel.Body() + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, blWheelBody, solver.NewMatchTranslation(). SetPrimaryAnchor(blWheelRelativePosition). SetIgnoreY(suspensionEnabled), ) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, blWheelPhysics.Body, &solver.LimitTranslation{ + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, blWheelBody, &solver.LimitTranslation{ MaxY: suspensionStart, MinY: suspensionEnd, }) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, blWheelPhysics.Body, + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, blWheelBody, solver.NewMatchAxis(). SetPrimaryAxis(sprec.BasisXVec3()). SetSecondaryAxis(sprec.BasisXVec3()), ) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, blWheelPhysics.Body, &solver.Coilover{ + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, blWheelBody, &solver.Coilover{ PrimaryAnchor: blWheelRelativePosition, FrequencyHz: suspensionFrequencyHz, DampingRatio: suspensionDampingRatio, @@ -301,28 +350,28 @@ func (h *playLifecycle) setupCarDemo(model *resource.Model, position sprec.Vec3) brWheel := car.Wheel(model, car.BackRightWheelLocation). WithName("back-right-wheel"). WithPosition(sprec.Vec3Sum(position, brWheelRelativePosition)). - Build(h.ecsScene, h.gfxScene, h.physicsScene) - brWheelPhysics := ecscomp.GetPhysics(brWheel) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, brWheelPhysics.Body, + Build(h.gameController.Scene()) + brWheelBody := brWheel.Body() + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, brWheelBody, solver.NewMatchTranslation(). SetPrimaryAnchor(brWheelRelativePosition). SetIgnoreY(suspensionEnabled), ) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, brWheelPhysics.Body, &solver.LimitTranslation{ + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, brWheelBody, &solver.LimitTranslation{ MaxY: suspensionStart, MinY: suspensionEnd, }) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, brWheelPhysics.Body, solver.NewMatchAxis(). + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, brWheelBody, solver.NewMatchAxis(). SetPrimaryAxis(sprec.BasisXVec3()). SetSecondaryAxis(sprec.BasisXVec3()), ) - h.physicsScene.CreateDoubleBodyConstraint(chasisPhysics.Body, brWheelPhysics.Body, &solver.Coilover{ + h.physicsScene.CreateDoubleBodyConstraint(chasisBody, brWheelBody, &solver.Coilover{ PrimaryAnchor: brWheelRelativePosition, FrequencyHz: suspensionFrequencyHz, DampingRatio: suspensionDampingRatio, }) - h.physicsScene.CreateDoubleBodyConstraint(blWheelPhysics.Body, brWheelPhysics.Body, &Differential{}) + h.physicsScene.CreateDoubleBodyConstraint(blWheelBody, brWheelBody, &Differential{}) car := h.ecsScene.CreateEntity() ecscomp.SetVehicle(car, &ecscomp.Vehicle{ @@ -331,28 +380,28 @@ func (h *playLifecycle) setupCarDemo(model *resource.Model, position sprec.Vec3) Acceleration: 0.0, Deceleration: 0.0, Chassis: &ecscomp.Chassis{ - Body: chasisPhysics.Body, + Body: chasisBody, }, Wheels: []*ecscomp.Wheel{ { - Body: flWheelPhysics.Body, + Body: flWheelBody, RotationConstraint: flRotation, AccelerationVelocity: carFrontAcceleration, DecelerationVelocity: carFrontDeceleration, }, { - Body: frWheelPhysics.Body, + Body: frWheelBody, RotationConstraint: frRotation, AccelerationVelocity: carFrontAcceleration, DecelerationVelocity: carFrontDeceleration, }, { - Body: blWheelPhysics.Body, + Body: blWheelBody, AccelerationVelocity: carRearAcceleration, DecelerationVelocity: carRearDeceleration, }, { - Body: brWheelPhysics.Body, + Body: brWheelBody, AccelerationVelocity: carRearAcceleration, DecelerationVelocity: carRearDeceleration, }, From 780aa8beb04767e742b1d70c494abef4c7f90b26 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Mon, 29 Aug 2022 23:45:35 +0300 Subject: [PATCH 04/40] Align car construction to new API --- Taskfile.yml | 9 ++++++++ internal/scene/car/chassis.go | 40 +++++++++++++++++--------------- internal/scene/car/wheel.go | 43 +++++++++++++++++++---------------- 3 files changed, 55 insertions(+), 37 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index d004119..618932e 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -36,3 +36,12 @@ tasks: web: cmds: - go run 'github.com/mokiat/httpserv@master' -dir './assets' -host '127.0.0.1' + + profile: + cmds: + - go tool pprof 'http://localhost:6060/debug/pprof/profile?seconds=30' + + trace: + cmds: + - curl -o trace.out 'http://localhost:6060/debug/pprof/trace?seconds=30' + - go tool trace trace.out diff --git a/internal/scene/car/chassis.go b/internal/scene/car/chassis.go index a2e1002..5902f3a 100644 --- a/internal/scene/car/chassis.go +++ b/internal/scene/car/chassis.go @@ -3,11 +3,11 @@ package car import ( "fmt" - "github.com/mokiat/gomath/sprec" + "github.com/mokiat/gomath/dprec" "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/physics" "github.com/mokiat/lacking/resource" - "github.com/mokiat/lacking/shape" + "github.com/mokiat/lacking/util/shape" ) const ( @@ -38,7 +38,7 @@ func (b *ChassisBuilder) WithName(name string) *ChassisBuilder { return b } -func (b *ChassisBuilder) WithPosition(position sprec.Vec3) *ChassisBuilder { +func (b *ChassisBuilder) WithPosition(position dprec.Vec3) *ChassisBuilder { b.modifiers = append(b.modifiers, func(node *game.Node) { body := node.Body() body.SetPosition(position) @@ -52,26 +52,30 @@ func (b *ChassisBuilder) Build(scene *game.Scene) *game.Node { panic(fmt.Errorf("mesh instance %q not found", "Chassis")) } definition := instance.MeshDefinition - bodyNode := instance.Node - physicsBody := scene.Physics().CreateBody() - physicsBody.SetPosition(sprec.ZeroVec3()) - physicsBody.SetOrientation(sprec.IdentityQuat()) - physicsBody.SetMass(chassisMass) - physicsBody.SetMomentOfInertia(physics.SymmetricMomentOfInertia(chassisMomentOfInertia)) - physicsBody.SetDragFactor(chassisDragFactor) - physicsBody.SetAngularDragFactor(chassisAngularDragFactor) - physicsBody.SetRestitutionCoefficient(chassisRestitutionCoef) - physicsBody.SetCollisionShapes([]physics.CollisionShape{ - shape.Placement{ - Position: sprec.NewVec3(0.0, 0.3, -0.4), - Orientation: sprec.IdentityQuat(), - Shape: shape.NewStaticBox(1.6, 1.4, 4.0), + physicsBodyDef := scene.Physics().Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ + Mass: chassisMass, + MomentOfInertia: physics.SymmetricMomentOfInertia(chassisMomentOfInertia), + DragFactor: chassisDragFactor, + AngularDragFactor: chassisAngularDragFactor, + RestitutionCoefficient: chassisRestitutionCoef, + CollisionShapes: []physics.CollisionShape{ + shape.NewPlacement( + shape.NewStaticBox(1.6, 1.4, 4.0), + dprec.NewVec3(0.0, 0.3, -0.4), + dprec.IdentityQuat(), + ), }, }) + physicsBody := scene.Physics().CreateBody(physics.BodyInfo{ + Name: instance.Name, + Definition: physicsBodyDef, + Position: dprec.ZeroVec3(), + Rotation: dprec.IdentityQuat(), + IsDynamic: true, + }) gfxMesh := scene.Graphics().CreateMesh(definition.GFXMeshTemplate) - gfxMesh.SetMatrix(bodyNode.Matrix) node := game.NewNode() node.SetBody(physicsBody) diff --git a/internal/scene/car/wheel.go b/internal/scene/car/wheel.go index 336534f..c654387 100644 --- a/internal/scene/car/wheel.go +++ b/internal/scene/car/wheel.go @@ -3,11 +3,11 @@ package car import ( "fmt" - "github.com/mokiat/gomath/sprec" + "github.com/mokiat/gomath/dprec" "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/physics" "github.com/mokiat/lacking/resource" - "github.com/mokiat/lacking/shape" + "github.com/mokiat/lacking/util/shape" ) const ( @@ -49,7 +49,7 @@ func (b *WheelBuilder) WithName(name string) *WheelBuilder { return b } -func (b *WheelBuilder) WithPosition(position sprec.Vec3) *WheelBuilder { +func (b *WheelBuilder) WithPosition(position dprec.Vec3) *WheelBuilder { b.modifiers = append(b.modifiers, func(node *game.Node) { body := node.Body() body.SetPosition(position) @@ -63,27 +63,32 @@ func (b *WheelBuilder) Build(scene *game.Scene) *game.Node { panic(fmt.Errorf("mesh instance %q not found", fmt.Sprintf("%sWheel", b.location))) } definition := instance.MeshDefinition - modelNode := instance.Node - physicsBody := scene.Physics().CreateBody() - physicsBody.SetPosition(sprec.ZeroVec3()) - physicsBody.SetOrientation(sprec.IdentityQuat()) - physicsBody.SetMass(wheelMass) - physicsBody.SetMomentOfInertia(physics.SymmetricMomentOfInertia(wheelMomentOfInertia)) - physicsBody.SetDragFactor(wheelDragFactor) - physicsBody.SetAngularDragFactor(wheelAngularDragFactor) - physicsBody.SetRestitutionCoefficient(wheelRestitutionCoef) - physicsBody.SetCollisionShapes([]physics.CollisionShape{ - // using sphere shape at is easier to do in physics engine at the moment - shape.Placement{ - Position: sprec.ZeroVec3(), - Orientation: sprec.IdentityQuat(), - Shape: shape.NewStaticSphere(0.3), + physicsBodyDef := scene.Physics().Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ + Mass: wheelMass, + MomentOfInertia: physics.SymmetricMomentOfInertia(wheelMomentOfInertia), + DragFactor: wheelDragFactor, + AngularDragFactor: wheelAngularDragFactor, + RestitutionCoefficient: wheelRestitutionCoef, + CollisionShapes: []physics.CollisionShape{ + // using sphere shape at is easier to do in physics engine at the moment + shape.NewPlacement( + shape.NewStaticSphere(0.3), + dprec.ZeroVec3(), + dprec.IdentityQuat(), + ), }, }) + physicsBody := scene.Physics().CreateBody(physics.BodyInfo{ + Name: instance.Name, + Definition: physicsBodyDef, + Position: dprec.ZeroVec3(), + Rotation: dprec.IdentityQuat(), + IsDynamic: true, + }) + gfxMesh := scene.Graphics().CreateMesh(definition.GFXMeshTemplate) - gfxMesh.SetMatrix(modelNode.Matrix) node := game.NewNode() node.SetBody(physicsBody) From 01dbbb10fc0936395f67675b5c349aeb1c355794 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Mon, 29 Aug 2022 23:46:24 +0300 Subject: [PATCH 05/40] Align some stuff to 64bit --- .gitignore | 3 + internal/ecscomp/camera.go | 8 +- internal/ecscomp/vehicle.go | 14 +-- internal/ecssys/stand.go | 88 +++++++-------- internal/ecssys/vehicle.go | 218 ++++++++++++++++++++++++++++++------ 5 files changed, 243 insertions(+), 88 deletions(-) diff --git a/.gitignore b/.gitignore index c18817e..4298873 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ # Distribution /dist + +# Go +trace.out diff --git a/internal/ecscomp/camera.go b/internal/ecscomp/camera.go index d0c2b7e..5769c8a 100644 --- a/internal/ecscomp/camera.go +++ b/internal/ecscomp/camera.go @@ -1,7 +1,7 @@ package ecscomp import ( - "github.com/mokiat/gomath/sprec" + "github.com/mokiat/gomath/dprec" "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/lacking/game/graphics" @@ -21,8 +21,8 @@ func GetCameraStand(entity *ecs.Entity) *CameraStand { type CameraStand struct { Target *game.Node - AnchorPosition sprec.Vec3 - AnchorDistance float32 - CameraDistance float32 + AnchorPosition dprec.Vec3 + AnchorDistance float64 + CameraDistance float64 Camera *graphics.Camera } diff --git a/internal/ecscomp/vehicle.go b/internal/ecscomp/vehicle.go index b801252..c33b7aa 100644 --- a/internal/ecscomp/vehicle.go +++ b/internal/ecscomp/vehicle.go @@ -1,7 +1,7 @@ package ecscomp import ( - "github.com/mokiat/gomath/sprec" + "github.com/mokiat/gomath/dprec" "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/lacking/game/physics" "github.com/mokiat/lacking/game/physics/solver" @@ -20,10 +20,10 @@ func GetVehicle(entity *ecs.Entity) *Vehicle { } type Vehicle struct { - MaxSteeringAngle sprec.Angle - SteeringAngle sprec.Angle - Acceleration float32 - Deceleration float32 + MaxSteeringAngle dprec.Angle + SteeringAngle dprec.Angle + Acceleration float64 + Deceleration float64 Recover bool Chassis *Chassis @@ -37,6 +37,6 @@ type Chassis struct { type Wheel struct { Body *physics.Body RotationConstraint *solver.MatchAxis - AccelerationVelocity float32 - DecelerationVelocity float32 + AccelerationVelocity float64 + DecelerationVelocity float64 } diff --git a/internal/ecssys/stand.go b/internal/ecssys/stand.go index 960d8d7..6a48b9b 100644 --- a/internal/ecssys/stand.go +++ b/internal/ecssys/stand.go @@ -1,7 +1,7 @@ package ecssys import ( - "github.com/mokiat/gomath/sprec" + "github.com/mokiat/gomath/dprec" "github.com/mokiat/lacking/app" "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/rally-mka/internal/ecscomp" @@ -16,7 +16,7 @@ func NewCameraStandSystem(ecsScene *ecs.Scene) *CameraStandSystem { type CameraStandSystem struct { ecsScene *ecs.Scene - zoom float32 + zoom float64 isRotateLeft bool isRotateRight bool @@ -25,8 +25,8 @@ type CameraStandSystem struct { isZoomIn bool isZoomOut bool - rotationX sprec.Angle - rotationY sprec.Angle + rotationX dprec.Angle + rotationY dprec.Angle } func (s *CameraStandSystem) OnKeyboardEvent(event app.KeyboardEvent) bool { @@ -54,7 +54,7 @@ func (s *CameraStandSystem) OnKeyboardEvent(event app.KeyboardEvent) bool { return false } -func (s *CameraStandSystem) Update(elapsedSeconds float32, gamepad *app.GamepadState) { +func (s *CameraStandSystem) Update(elapsedSeconds float64, gamepad *app.GamepadState) { result := s.ecsScene.Find(ecs.Having(ecscomp.CameraStandComponentID)) defer result.Close() @@ -65,44 +65,44 @@ func (s *CameraStandSystem) Update(elapsedSeconds float32, gamepad *app.GamepadS } } -func (s *CameraStandSystem) updateCameraStand(cameraStand *ecscomp.CameraStand, elapsedSeconds float32, gamepad *app.GamepadState) { +func (s *CameraStandSystem) updateCameraStand(cameraStand *ecscomp.CameraStand, elapsedSeconds float64, gamepad *app.GamepadState) { var ( target = cameraStand.Target ) - var targetPosition sprec.Vec3 + var targetPosition dprec.Vec3 switch { case target.Body() != nil: targetPosition = target.Body().Position() default: - targetPosition = target.AbsoluteMatrix().Translation() + targetPosition = target.Position() } // we use a camera anchor to achieve the smooth effect of a // camera following the target - anchorVector := sprec.Vec3Diff(cameraStand.AnchorPosition, targetPosition) - anchorVector = sprec.ResizedVec3(anchorVector, cameraStand.AnchorDistance) + anchorVector := dprec.Vec3Diff(cameraStand.AnchorPosition, targetPosition) + anchorVector = dprec.ResizedVec3(anchorVector, cameraStand.AnchorDistance) cameraVectorZ := anchorVector - cameraVectorX := sprec.Vec3Cross(sprec.BasisYVec3(), cameraVectorZ) - cameraVectorY := sprec.Vec3Cross(cameraVectorZ, cameraVectorX) + cameraVectorX := dprec.Vec3Cross(dprec.BasisYVec3(), cameraVectorZ) + cameraVectorY := dprec.Vec3Cross(cameraVectorZ, cameraVectorX) - if s.isRotateLeft { - s.rotationY -= sprec.Degrees(elapsedSeconds * 100) + if s.isRotateLeft || (gamepad != nil && gamepad.DpadLeftButton) { + s.rotationY -= dprec.Degrees(elapsedSeconds * 100) } - if s.isRotateRight { - s.rotationY += sprec.Degrees(elapsedSeconds * 100) + if s.isRotateRight || (gamepad != nil && gamepad.DpadRightButton) { + s.rotationY += dprec.Degrees(elapsedSeconds * 100) } - if s.isRotateUp { - s.rotationX -= sprec.Degrees(elapsedSeconds * 100) + if s.isRotateUp || (gamepad != nil && gamepad.DpadUpButton) { + s.rotationX -= dprec.Degrees(elapsedSeconds * 100) } - if s.isRotateDown { - s.rotationX += sprec.Degrees(elapsedSeconds * 100) + if s.isRotateDown || (gamepad != nil && gamepad.DpadDownButton) { + s.rotationX += dprec.Degrees(elapsedSeconds * 100) } if s.isZoomIn { - s.zoom -= 0.3 * elapsedSeconds * s.zoom + s.zoom -= elapsedSeconds * s.zoom } if s.isZoomOut { - s.zoom += 0.3 * elapsedSeconds * s.zoom + s.zoom += elapsedSeconds * s.zoom } if gamepad != nil { @@ -114,37 +114,37 @@ func (s *CameraStandSystem) updateCameraStand(cameraStand *ecscomp.CameraStand, } rotationAmount := 200 * elapsedSeconds - if sprec.Abs(gamepad.RightStickY) > 0.2 { - rotation := sprec.RotationQuat(sprec.Degrees(gamepad.RightStickY*rotationAmount), cameraVectorX) - anchorVector = sprec.QuatVec3Rotation(rotation, anchorVector) + if dprec.Abs(gamepad.RightStickY) > 0.2 { + rotation := dprec.RotationQuat(dprec.Degrees(gamepad.RightStickY*rotationAmount), cameraVectorX) + anchorVector = dprec.QuatVec3Rotation(rotation, anchorVector) } - if sprec.Abs(gamepad.RightStickX) > 0.2 { - rotation := sprec.RotationQuat(sprec.Degrees(-gamepad.RightStickX*rotationAmount), cameraVectorY) - anchorVector = sprec.QuatVec3Rotation(rotation, anchorVector) + if dprec.Abs(gamepad.RightStickX) > 0.2 { + rotation := dprec.RotationQuat(dprec.Degrees(-gamepad.RightStickX*rotationAmount), cameraVectorY) + anchorVector = dprec.QuatVec3Rotation(rotation, anchorVector) } } - cameraStand.AnchorPosition = sprec.Vec3Sum(targetPosition, anchorVector) - // cameraStand.AnchorPosition = sprec.NewVec3(10.0, 60.0, 40.0) + cameraStand.AnchorPosition = dprec.Vec3Sum(targetPosition, anchorVector) + // cameraStand.AnchorPosition = dprec.NewVec3(10.0, 60.0, 40.0) // the following approach of creating the view matrix coordinates will fail // if the camera is pointing directly up or down cameraVectorZ = anchorVector - cameraVectorX = sprec.Vec3Cross(sprec.BasisYVec3(), cameraVectorZ) - cameraVectorY = sprec.Vec3Cross(cameraVectorZ, cameraVectorX) - - matrix := sprec.Mat4MultiProd( - sprec.TranslationMat4(targetPosition.X, targetPosition.Y, targetPosition.Z), - sprec.TransformationMat4( - sprec.UnitVec3(cameraVectorX), - sprec.UnitVec3(cameraVectorY), - sprec.UnitVec3(cameraVectorZ), - sprec.ZeroVec3(), + cameraVectorX = dprec.Vec3Cross(dprec.BasisYVec3(), cameraVectorZ) + cameraVectorY = dprec.Vec3Cross(cameraVectorZ, cameraVectorX) + + matrix := dprec.Mat4MultiProd( + dprec.TranslationMat4(targetPosition.X, targetPosition.Y, targetPosition.Z), + dprec.TransformationMat4( + dprec.UnitVec3(cameraVectorX), + dprec.UnitVec3(cameraVectorY), + dprec.UnitVec3(cameraVectorZ), + dprec.ZeroVec3(), ), - sprec.RotationMat4(s.rotationY, 0.0, 1.0, 0.0), - sprec.RotationMat4(sprec.Degrees(-25.0), 1.0, 0.0, 0.0), - sprec.RotationMat4(s.rotationX, 1.0, 0.0, 0.0), - sprec.TranslationMat4(0.0, 0.0, cameraStand.CameraDistance*s.zoom), + dprec.RotationMat4(s.rotationY, 0.0, 1.0, 0.0), + dprec.RotationMat4(dprec.Degrees(-25.0), 1.0, 0.0, 0.0), + dprec.RotationMat4(s.rotationX, 1.0, 0.0, 0.0), + dprec.TranslationMat4(0.0, 0.0, cameraStand.CameraDistance*s.zoom), ) cameraStand.Camera.SetMatrix(matrix) } diff --git a/internal/ecssys/vehicle.go b/internal/ecssys/vehicle.go index e071c5c..b8ff282 100644 --- a/internal/ecssys/vehicle.go +++ b/internal/ecssys/vehicle.go @@ -1,9 +1,11 @@ package ecssys import ( - "github.com/mokiat/gomath/sprec" + "github.com/mokiat/gomath/dprec" "github.com/mokiat/lacking/app" "github.com/mokiat/lacking/game/ecs" + "github.com/mokiat/lacking/game/graphics" + "github.com/mokiat/lacking/util/shape" "github.com/mokiat/rally-mka/internal/ecscomp" ) @@ -26,6 +28,16 @@ type VehicleSystem struct { isAccelerate bool isDecelerate bool isRecover bool + + mouseLeft bool + mouseRight bool + mouseActive bool + mouseX int + mouseY int + + viewport graphics.Viewport + camera *graphics.Camera + graphicsScene *graphics.Scene } func (s *VehicleSystem) OnKeyboardEvent(event app.KeyboardEvent) bool { @@ -50,7 +62,44 @@ func (s *VehicleSystem) OnKeyboardEvent(event app.KeyboardEvent) bool { return false } -func (s *VehicleSystem) Update(elapsedSeconds float32, gamepad *app.GamepadState) { +func (s *VehicleSystem) OnMouseEvent(event app.MouseEvent, viewport graphics.Viewport, camera *graphics.Camera, graphicsScene *graphics.Scene) bool { + s.viewport = viewport + s.camera = camera + s.graphicsScene = graphicsScene + + switch event.Type { + case app.MouseEventTypeDown: + switch event.Button { + case app.MouseButtonLeft: + s.mouseLeft = true + case app.MouseButtonMiddle: + s.mouseActive = !s.mouseActive + case app.MouseButtonRight: + s.mouseRight = true + } + // if s.mouseLeft && s.mouseRight { + // s.mouseLeft = false + // s.mouseRight = false + // s.mouseActive = !s.mouseActive + // } + case app.MouseEventTypeUp: + switch event.Button { + case app.MouseButtonLeft: + s.mouseLeft = false + case app.MouseButtonRight: + s.mouseRight = false + } + case app.MouseEventTypeMove: + if !s.mouseActive { + return false + } + s.mouseX = event.X + s.mouseY = event.Y + } + return true +} + +func (s *VehicleSystem) Update(elapsedSeconds float64, gamepad *app.GamepadState) { result := s.ecsScene.Find(ecs.Having(ecscomp.VehicleComponentID)) defer result.Close() @@ -61,46 +110,149 @@ func (s *VehicleSystem) Update(elapsedSeconds float32, gamepad *app.GamepadState if gamepad != nil { s.updateVehicleControlGamepad(vehicle, elapsedSeconds, gamepad) } else { - s.updateVehicleControlKeyboard(vehicle, elapsedSeconds) + if s.mouseActive { + s.updateVehicleControlMouse(vehicle, elapsedSeconds) + } else { + s.updateVehicleControlKeyboard(vehicle, elapsedSeconds) + } } } s.updateVehiclePhysics(vehicle, elapsedSeconds) } } -func (s *VehicleSystem) updateVehicleControlGamepad(vehicle *ecscomp.Vehicle, elapsedSeconds float32, gamepad *app.GamepadState) { - steeringAmount := gamepad.LeftStickX * sprec.Abs(gamepad.LeftStickX) - vehicle.SteeringAngle = -sprec.Degrees(steeringAmount * vehicle.MaxSteeringAngle.Degrees()) - vehicle.Acceleration = gamepad.RightTrigger - vehicle.Deceleration = gamepad.LeftTrigger +func (s *VehicleSystem) updateVehicleControlGamepad(vehicle *ecscomp.Vehicle, elapsedSeconds float64, gamepad *app.GamepadState) { + steeringAmount := float64(gamepad.LeftStickX) * dprec.Abs(float64(gamepad.LeftStickX)) + vehicle.SteeringAngle = -dprec.Degrees(steeringAmount * vehicle.MaxSteeringAngle.Degrees()) + vehicle.Acceleration = float64(gamepad.RightTrigger) + vehicle.Deceleration = float64(gamepad.LeftTrigger) vehicle.Recover = gamepad.CrossButton } -func (s *VehicleSystem) updateVehicleControlKeyboard(vehicle *ecscomp.Vehicle, elapsedSeconds float32) { +func (s *VehicleSystem) updateVehicleControlMouse(vehicle *ecscomp.Vehicle, elapsedSeconds float64) { + vehicle.Recover = s.isRecover + + orientation := vehicle.Chassis.Body.Orientation() + orientationX := orientation.OrientationX() + // orientationY := orientation.OrientationY() + orientationZ := orientation.OrientationZ() + + position := vehicle.Chassis.Body.Position() + a := dprec.Vec3Sum(dprec.Vec3Sum( + dprec.Vec3Prod(orientationX, -1000), + dprec.Vec3Prod(orientationZ, -1000), + ), position) + b := dprec.Vec3Sum(dprec.Vec3Sum( + dprec.Vec3Prod(orientationX, -1000), + dprec.Vec3Prod(orientationZ, 1000), + ), position) + c := dprec.Vec3Sum(dprec.Vec3Sum( + dprec.Vec3Prod(orientationX, 1000), + dprec.Vec3Prod(orientationZ, 1000), + ), position) + d := dprec.Vec3Sum(dprec.Vec3Sum( + dprec.Vec3Prod(orientationX, 1000), + dprec.Vec3Prod(orientationZ, -1000), + ), position) + + // a := dprec.NewVec3( + // -1000+position.X, + // position.Y, + // -1000+position.Z, + // ) + // b := dprec.NewVec3( + // -1000+position.X, + // position.Y, + // 1000+position.Z, + // ) + // c := dprec.NewVec3( + // 1000+position.X, + // position.Y, + // 1000+position.Z, + // ) + // d := dprec.NewVec3( + // 1000+position.X, + // position.Y, + // -1000+position.Z, + // ) + + surface := shape.NewStaticMesh([]shape.StaticTriangle{ + shape.NewStaticTriangle(a, b, c), + shape.NewStaticTriangle(a, c, d), + }) + + line := s.graphicsScene.Ray(s.viewport, s.camera, s.mouseX, s.mouseY) + + result := shape.NewIntersectionResultSet(1) + shape.CheckLineIntersection(line, surface, result) + + if result.Found() { + intersection := result.Intersections()[0] + mouseTarget := intersection.FirstContact + // log.Info("CONTACT: %#v", intersection.FirstContact) + + delta := dprec.Vec3Diff(mouseTarget, vehicle.Chassis.Body.Position()) + delta.Y = 0.0 + + forward := vehicle.Chassis.Body.Orientation().OrientationZ() + forward.Y = 0.0 + + sin := dprec.Vec3Cross( + dprec.UnitVec3(delta), + dprec.UnitVec3(forward), + ) + angle := dprec.Angle(dprec.Sign(sin.Y)) * dprec.Asin(sin.Length()) + // log.Info("Angle: %.4f", angle.Degrees()) + + vehicle.SteeringAngle = dprec.Clamp(-dprec.Angle(angle), -vehicle.MaxSteeringAngle, vehicle.MaxSteeringAngle) + } else { + vehicle.SteeringAngle = 0 + } + // log.Info("Line: %#v, %#v", line.A(), line.B()) + + // halfWidth := float64(width) / 2.0 + // halfHeight := float64(height) / 2.0 + // s.mouseTurn = 2 * (float64(event.X) - halfWidth) / halfWidth + // s.mouseAcceleration = (halfHeight - float64(event.Y)) / halfHeight + // return true + + if s.mouseLeft { + vehicle.Acceleration = 0.8 + } else { + vehicle.Acceleration = 0.0 + } + if s.mouseRight { + vehicle.Deceleration = 0.8 + } else { + vehicle.Deceleration = 0.0 + } +} + +func (s *VehicleSystem) updateVehicleControlKeyboard(vehicle *ecscomp.Vehicle, elapsedSeconds float64) { vehicle.Recover = s.isRecover - autoMaxSteeringAngle := sprec.Degrees(vehicle.MaxSteeringAngle.Degrees() / (1.0 + 0.05*vehicle.Chassis.Body.Velocity().Length())) + autoMaxSteeringAngle := dprec.Degrees(vehicle.MaxSteeringAngle.Degrees() / (1.0 + 0.05*vehicle.Chassis.Body.Velocity().Length())) switch { case s.isSteerLeft == s.isSteerRight: - if vehicle.SteeringAngle > 0.001 { - vehicle.SteeringAngle -= sprec.Degrees(elapsedSeconds * steeringRestoreSpeed) + if vehicle.SteeringAngle > 0.0 { + vehicle.SteeringAngle -= dprec.Degrees(elapsedSeconds * steeringRestoreSpeed) if vehicle.SteeringAngle < 0.0 { vehicle.SteeringAngle = 0.0 } } - if vehicle.SteeringAngle < -0.001 { - vehicle.SteeringAngle += sprec.Degrees(elapsedSeconds * steeringRestoreSpeed) + if vehicle.SteeringAngle < 0.0 { + vehicle.SteeringAngle += dprec.Degrees(elapsedSeconds * steeringRestoreSpeed) if vehicle.SteeringAngle > 0.0 { vehicle.SteeringAngle = 0.0 } } case s.isSteerLeft: - vehicle.SteeringAngle += sprec.Degrees(elapsedSeconds * steeringSpeed) + vehicle.SteeringAngle += dprec.Degrees(elapsedSeconds * steeringSpeed) if vehicle.SteeringAngle > autoMaxSteeringAngle { vehicle.SteeringAngle = autoMaxSteeringAngle } case s.isSteerRight: - vehicle.SteeringAngle -= sprec.Degrees(elapsedSeconds * steeringSpeed) + vehicle.SteeringAngle -= dprec.Degrees(elapsedSeconds * steeringSpeed) if vehicle.SteeringAngle < -autoMaxSteeringAngle { vehicle.SteeringAngle = -autoMaxSteeringAngle } @@ -118,43 +270,43 @@ func (s *VehicleSystem) updateVehicleControlKeyboard(vehicle *ecscomp.Vehicle, e } } -func (s *VehicleSystem) updateVehiclePhysics(vehicle *ecscomp.Vehicle, elapsedSeconds float32) { +func (s *VehicleSystem) updateVehiclePhysics(vehicle *ecscomp.Vehicle, elapsedSeconds float64) { if vehicle.Recover { - vehicle.Chassis.Body.SetAngularVelocity(sprec.Vec3Sum(vehicle.Chassis.Body.AngularVelocity(), sprec.NewVec3(0.0, 0.0, 0.1))) - vehicle.Chassis.Body.SetVelocity(sprec.Vec3Sum(vehicle.Chassis.Body.Velocity(), sprec.NewVec3(0.0, 0.2, 0.0))) + vehicle.Chassis.Body.SetAngularVelocity(dprec.Vec3Sum(vehicle.Chassis.Body.AngularVelocity(), dprec.NewVec3(0.0, 0.0, 0.1))) + vehicle.Chassis.Body.SetVelocity(dprec.Vec3Sum(vehicle.Chassis.Body.Velocity(), dprec.NewVec3(0.0, 0.2, 0.0))) } - steeringQuat := sprec.RotationQuat(vehicle.SteeringAngle, sprec.BasisYVec3()) - isMovingForward := sprec.Vec3Dot(vehicle.Chassis.Body.Velocity(), vehicle.Chassis.Body.Orientation().OrientationZ()) > 5.0 - isMovingBackward := sprec.Vec3Dot(vehicle.Chassis.Body.Velocity(), vehicle.Chassis.Body.Orientation().OrientationZ()) < -5.0 + steeringQuat := dprec.RotationQuat(vehicle.SteeringAngle, dprec.BasisYVec3()) + isMovingForward := dprec.Vec3Dot(vehicle.Chassis.Body.Velocity(), vehicle.Chassis.Body.Orientation().OrientationZ()) > 5.0 + isMovingBackward := dprec.Vec3Dot(vehicle.Chassis.Body.Velocity(), vehicle.Chassis.Body.Orientation().OrientationZ()) < -5.0 for _, wheel := range vehicle.Wheels { if wheel.RotationConstraint != nil { - wheel.RotationConstraint.SetPrimaryAxis(sprec.QuatVec3Rotation(steeringQuat, sprec.BasisXVec3())) + wheel.RotationConstraint.SetPrimaryAxis(dprec.QuatVec3Rotation(steeringQuat, dprec.BasisXVec3())) } if vehicle.Acceleration > 0.0 { if isMovingBackward { - if wheelVelocity := sprec.Vec3Dot(wheel.Body.AngularVelocity(), wheel.Body.Orientation().OrientationX()); wheelVelocity < 0.0 { - correction := sprec.Max(-vehicle.Acceleration*wheel.DecelerationVelocity*elapsedSeconds, wheelVelocity) - wheel.Body.SetAngularVelocity(sprec.Vec3Prod(wheel.Body.AngularVelocity(), 1.0-correction/wheelVelocity)) + if wheelVelocity := dprec.Vec3Dot(wheel.Body.AngularVelocity(), wheel.Body.Orientation().OrientationX()); wheelVelocity < 0.0 { + correction := dprec.Max(-vehicle.Acceleration*wheel.DecelerationVelocity*elapsedSeconds, wheelVelocity) + wheel.Body.SetAngularVelocity(dprec.Vec3Prod(wheel.Body.AngularVelocity(), 1.0-correction/wheelVelocity)) } } else { - wheel.Body.SetAngularVelocity(sprec.Vec3Sum(wheel.Body.AngularVelocity(), - sprec.Vec3Prod(wheel.Body.Orientation().OrientationX(), vehicle.Acceleration*wheel.AccelerationVelocity*elapsedSeconds), + wheel.Body.SetAngularVelocity(dprec.Vec3Sum(wheel.Body.AngularVelocity(), + dprec.Vec3Prod(wheel.Body.Orientation().OrientationX(), vehicle.Acceleration*wheel.AccelerationVelocity*elapsedSeconds), )) } } if vehicle.Deceleration > 0.0 { if isMovingForward { - if wheelVelocity := sprec.Vec3Dot(wheel.Body.AngularVelocity(), wheel.Body.Orientation().OrientationX()); wheelVelocity > 0.0 { - correction := sprec.Min(vehicle.Deceleration*wheel.DecelerationVelocity*elapsedSeconds, wheelVelocity) - wheel.Body.SetAngularVelocity(sprec.Vec3Prod(wheel.Body.AngularVelocity(), 1.0-correction/wheelVelocity)) + if wheelVelocity := dprec.Vec3Dot(wheel.Body.AngularVelocity(), wheel.Body.Orientation().OrientationX()); wheelVelocity > 0.0 { + correction := dprec.Min(vehicle.Deceleration*wheel.DecelerationVelocity*elapsedSeconds, wheelVelocity) + wheel.Body.SetAngularVelocity(dprec.Vec3Prod(wheel.Body.AngularVelocity(), 1.0-correction/wheelVelocity)) } } else { - wheel.Body.SetAngularVelocity(sprec.Vec3Sum(wheel.Body.AngularVelocity(), - sprec.Vec3Prod(wheel.Body.Orientation().OrientationX(), -vehicle.Deceleration*wheel.AccelerationVelocity*elapsedSeconds), + wheel.Body.SetAngularVelocity(dprec.Vec3Sum(wheel.Body.AngularVelocity(), + dprec.Vec3Prod(wheel.Body.Orientation().OrientationX(), -vehicle.Deceleration*wheel.AccelerationVelocity*elapsedSeconds), )) } } From 991e6083613620a79d8a4a9f94a95b76d510fa1e Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Fri, 2 Sep 2022 19:24:59 +0300 Subject: [PATCH 06/40] WIP: Use new game API --- internal/scene/car/chassis.go | 20 ++++---------------- internal/scene/car/wheel.go | 18 ++++-------------- 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/internal/scene/car/chassis.go b/internal/scene/car/chassis.go index 5902f3a..21b74d5 100644 --- a/internal/scene/car/chassis.go +++ b/internal/scene/car/chassis.go @@ -1,12 +1,9 @@ package car import ( - "fmt" - "github.com/mokiat/gomath/dprec" "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/physics" - "github.com/mokiat/lacking/resource" "github.com/mokiat/lacking/util/shape" ) @@ -19,14 +16,14 @@ const ( chassisRestitutionCoef = 0.0 ) -func Chassis(model *resource.Model) *ChassisBuilder { +func Chassis(model *game.Model) *ChassisBuilder { return &ChassisBuilder{ model: model, } } type ChassisBuilder struct { - model *resource.Model + model *game.Model modifiers []func(node *game.Node) } @@ -47,11 +44,7 @@ func (b *ChassisBuilder) WithPosition(position dprec.Vec3) *ChassisBuilder { } func (b *ChassisBuilder) Build(scene *game.Scene) *game.Node { - instance, found := b.model.FindMeshInstance("Chassis") - if !found { - panic(fmt.Errorf("mesh instance %q not found", "Chassis")) - } - definition := instance.MeshDefinition + node := b.model.Root().FindNode("Chassis") physicsBodyDef := scene.Physics().Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ Mass: chassisMass, @@ -68,21 +61,16 @@ func (b *ChassisBuilder) Build(scene *game.Scene) *game.Node { }, }) physicsBody := scene.Physics().CreateBody(physics.BodyInfo{ - Name: instance.Name, + Name: node.Name(), Definition: physicsBodyDef, Position: dprec.ZeroVec3(), Rotation: dprec.IdentityQuat(), IsDynamic: true, }) - gfxMesh := scene.Graphics().CreateMesh(definition.GFXMeshTemplate) - - node := game.NewNode() node.SetBody(physicsBody) - node.SetMesh(gfxMesh) for _, modifier := range b.modifiers { modifier(node) } - scene.Root().AppendChild(node) return node } diff --git a/internal/scene/car/wheel.go b/internal/scene/car/wheel.go index c654387..792e69a 100644 --- a/internal/scene/car/wheel.go +++ b/internal/scene/car/wheel.go @@ -6,7 +6,6 @@ import ( "github.com/mokiat/gomath/dprec" "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/physics" - "github.com/mokiat/lacking/resource" "github.com/mokiat/lacking/util/shape" ) @@ -28,7 +27,7 @@ const ( BackRightWheelLocation WheelLocation = "BR" ) -func Wheel(model *resource.Model, location WheelLocation) *WheelBuilder { +func Wheel(model *game.Model, location WheelLocation) *WheelBuilder { return &WheelBuilder{ model: model, location: location, @@ -36,7 +35,7 @@ func Wheel(model *resource.Model, location WheelLocation) *WheelBuilder { } type WheelBuilder struct { - model *resource.Model + model *game.Model location WheelLocation modifiers []func(node *game.Node) } @@ -58,11 +57,7 @@ func (b *WheelBuilder) WithPosition(position dprec.Vec3) *WheelBuilder { } func (b *WheelBuilder) Build(scene *game.Scene) *game.Node { - instance, found := b.model.FindMeshInstance(fmt.Sprintf("%sWheel", b.location)) - if !found { - panic(fmt.Errorf("mesh instance %q not found", fmt.Sprintf("%sWheel", b.location))) - } - definition := instance.MeshDefinition + node := b.model.Root().FindNode(fmt.Sprintf("%sWheel", b.location)) physicsBodyDef := scene.Physics().Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ Mass: wheelMass, @@ -81,21 +76,16 @@ func (b *WheelBuilder) Build(scene *game.Scene) *game.Node { }) physicsBody := scene.Physics().CreateBody(physics.BodyInfo{ - Name: instance.Name, + Name: node.Name(), Definition: physicsBodyDef, Position: dprec.ZeroVec3(), Rotation: dprec.IdentityQuat(), IsDynamic: true, }) - gfxMesh := scene.Graphics().CreateMesh(definition.GFXMeshTemplate) - - node := game.NewNode() node.SetBody(physicsBody) - node.SetMesh(gfxMesh) for _, modifier := range b.modifiers { modifier(node) } - scene.Root().AppendChild(node) return node } From fd450d7184b029c5fe17642d3f5d90ce25bbe9d5 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Tue, 6 Sep 2022 22:52:42 +0300 Subject: [PATCH 07/40] Align part of the code with new lacking API --- internal/game/controller.go | 83 ++++++++++++++++++++------- internal/scene/data.go | 108 ++++++++++++++++++++++++++++++++---- 2 files changed, 162 insertions(+), 29 deletions(-) diff --git a/internal/game/controller.go b/internal/game/controller.go index e935936..111755c 100644 --- a/internal/game/controller.go +++ b/internal/game/controller.go @@ -4,38 +4,58 @@ import ( "time" "github.com/mokiat/lacking/app" + "github.com/mokiat/lacking/async" "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/asset" "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/lacking/game/graphics" "github.com/mokiat/lacking/game/physics" - "github.com/mokiat/lacking/resource" + "github.com/mokiat/lacking/util/metrics" "github.com/mokiat/rally-mka/internal/ecssys" ) func NewController(reg asset.Registry, gfxEngine *graphics.Engine) *Controller { - engine := game.NewEngine( - game.WithPhysics(physics.NewEngine()), - game.WithGraphics(gfxEngine), - game.WithECS(ecs.NewEngine()), - ) + ioWorker := async.NewWorker(1) + go func() { + ioWorker.ProcessAll() + }() controller := &Controller{ - engine: engine, - lastFrameTime: time.Now(), } - controller.registry = resource.NewRegistry(reg, gfxEngine, controller) + controller.engine = game.NewEngine( + game.WithGFXWorker(game.WorkerFunc(func(fn func() error) game.Operation { + operation := game.NewOperation() + controller.Schedule(func() error { + err := fn() + operation.Complete(err) + return err + }) + return operation + })), + game.WithIOWorker(game.WorkerFunc(func(fn func() error) game.Operation { + operation := game.NewOperation() + ioWorker.ScheduleFunc(func() error { + err := fn() + operation.Complete(err) + return err + }) + return operation + })), + game.WithRegistry(reg), + game.WithPhysics(physics.NewEngine()), + game.WithGraphics(gfxEngine), + game.WithECS(ecs.NewEngine()), + ) return controller } type Controller struct { app.NopController - window app.Window - engine *game.Engine - scene *game.Scene - registry *resource.Registry + window app.Window + engine *game.Engine + scene *game.Scene lastFrameTime time.Time freezeFrame bool @@ -48,17 +68,14 @@ type Controller struct { camera *graphics.Camera - OnUpdate func() + OnUpdate func() + OnFrameFinish func() } func (c *Controller) Schedule(fn func() error) { c.window.Schedule(fn) } -func (c *Controller) Registry() *resource.Registry { - return c.registry -} - func (c *Controller) Engine() *game.Engine { return c.engine } @@ -107,11 +124,18 @@ func (c *Controller) OnCloseRequested(window app.Window) { window.Close() } +func (c *Controller) OnMouseEvent(window app.Window, event app.MouseEvent) bool { + return c.vehicleSystem.OnMouseEvent(event, graphics.NewViewport(0, 0, c.width, c.height), c.camera, c.scene.Graphics()) +} + func (c *Controller) OnKeyboardEvent(window app.Window, event app.KeyboardEvent) bool { if event.Code == app.KeyCodeEscape { window.Close() return true } + if event.Code == app.KeyCodeC && event.Type == app.KeyboardEventTypeKeyDown { + graphics.ShowLightView = !graphics.ShowLightView + } if event.Code == app.KeyCodeF { switch event.Type { case app.KeyboardEventTypeKeyDown: @@ -126,25 +150,46 @@ func (c *Controller) OnKeyboardEvent(window app.Window, event app.KeyboardEvent) c.cameraStandSystem.OnKeyboardEvent(event) } +func (c *Controller) ResetFrameTime() { + c.lastFrameTime = time.Now() +} + func (c *Controller) OnRender(window app.Window) { currentTime := time.Now() - elapsedSeconds := float32(currentTime.Sub(c.lastFrameTime).Seconds()) + elapsedSeconds := currentTime.Sub(c.lastFrameTime).Seconds() c.lastFrameTime = currentTime + frameSpan := metrics.BeginSpan("frame") + defer frameSpan.End() + if !c.freezeFrame { var gamepad *app.GamepadState if state, ok := window.GamepadState(0); ok { gamepad = &state } + vehSpan := metrics.BeginSpan("vehicle system") c.vehicleSystem.Update(elapsedSeconds, gamepad) + vehSpan.End() + updateSpan := metrics.BeginSpan("scene update") c.scene.Update(elapsedSeconds) + updateSpan.End() + cameraSpan := metrics.BeginSpan("camera system") c.cameraStandSystem.Update(elapsedSeconds, gamepad) + cameraSpan.End() + callbackSpan := metrics.BeginSpan("update callback") if c.OnUpdate != nil { c.OnUpdate() } + callbackSpan.End() + renderSpan := metrics.BeginSpan("render") c.scene.Graphics().Render(graphics.NewViewport(0, 0, c.width, c.height), c.camera) + renderSpan.End() + } + + if c.OnFrameFinish != nil { + c.OnFrameFinish() } window.Invalidate() // force redraw diff --git a/internal/scene/data.go b/internal/scene/data.go index 19c0335..a045677 100644 --- a/internal/scene/data.go +++ b/internal/scene/data.go @@ -5,7 +5,8 @@ import ( "time" "github.com/mokiat/lacking/async" - "github.com/mokiat/lacking/resource" + "github.com/mokiat/lacking/game" + "github.com/mokiat/lacking/log" ) const ( @@ -19,18 +20,22 @@ func init() { rand.Seed(time.Now().Unix()) } -func NewData(registry *resource.Registry) *Data { +func NewData(resourceSet *game.ResourceSet) *Data { return &Data{ - registry: registry, + resourceSet: resourceSet, } } type Data struct { - registry *resource.Registry + resourceSet *game.ResourceSet + loadOutcome async.Outcome - CarModel *resource.Model - Level *resource.Level + Level *game.SceneDefinition + SceneModel *game.ModelDefinition + CarModel *game.ModelDefinition + PlatformModel *game.ModelDefinition + CharacterModel *game.ModelDefinition } func (d *Data) Request() async.Outcome { @@ -44,16 +49,99 @@ func (d *Data) Request() async.Outcome { levelID = levelIDPlayground } levelID = levelIDPlayground + + levelOutcome := async.NewOutcome() + levelPromise := d.resourceSet.OpenScene(levelID) + levelPromise.OnSuccess(func(model *game.SceneDefinition) { + levelOutcome.Record(async.Result{ + Value: model, + }) + }) + levelPromise.OnError(func(err error) { + log.Info("Level loading failed: %v", err) + levelOutcome.Record(async.Result{ + Err: err, + }) + }) + + sceneOutcome := async.NewOutcome() + promise := d.resourceSet.OpenModel("0cb3f13f-3bfe-4913-afe1-9f7cd6bf4c15") + promise.OnSuccess(func(model *game.ModelDefinition) { + sceneOutcome.Record(async.Result{ + Value: model, + }) + }) + promise.OnError(func(err error) { + log.Info("Scene loading failed: %v", err) + sceneOutcome.Record(async.Result{ + Err: err, + }) + }) + + carOutcome := async.NewOutcome() + carPromise := d.resourceSet.OpenModel(modelIDSUV) + carPromise.OnSuccess(func(model *game.ModelDefinition) { + carOutcome.Record(async.Result{ + Value: model, + }) + }) + carPromise.OnError(func(err error) { + log.Info("SUV loading failed: %v", err) + carOutcome.Record(async.Result{ + Err: err, + }) + }) + + platformOutcome := async.NewOutcome() + platformPromise := d.resourceSet.OpenModel("59f0b554-b70c-497a-9771-13d1d3a2f644") + platformPromise.OnSuccess(func(model *game.ModelDefinition) { + platformOutcome.Record(async.Result{ + Value: model, + }) + }) + platformPromise.OnError(func(err error) { + log.Info("Platform loading failed: %v", err) + platformOutcome.Record(async.Result{ + Err: err, + }) + }) + + characterOutcome := async.NewOutcome() + characterPromise := d.resourceSet.OpenModel("847244e5-2797-479a-9ea6-e66875458da6") + characterPromise.OnSuccess(func(model *game.ModelDefinition) { + characterOutcome.Record(async.Result{ + Value: model, + }) + }) + characterPromise.OnError(func(err error) { + log.Info("Character loading failed: %v", err) + characterOutcome.Record(async.Result{ + Err: err, + }) + }) + d.loadOutcome = async.NewCompositeOutcome( - d.registry.LoadModel(modelIDSUV).OnSuccess(resource.InjectModel(&d.CarModel)), - d.registry.LoadLevel(levelID).OnSuccess(resource.InjectLevel(&d.Level)), // Forest + levelOutcome.OnSuccess(func(value any) { + d.Level = value.(*game.SceneDefinition) + }), + sceneOutcome.OnSuccess(func(value any) { + d.SceneModel = value.(*game.ModelDefinition) + }), + carOutcome.OnSuccess(func(value any) { + d.CarModel = value.(*game.ModelDefinition) + }), + platformOutcome.OnSuccess(func(value any) { + d.PlatformModel = value.(*game.ModelDefinition) + }), + characterOutcome.OnSuccess(func(value any) { + d.CharacterModel = value.(*game.ModelDefinition) + }), ) return d.loadOutcome } func (d *Data) Dismiss() { - d.registry.UnloadModel(d.CarModel) - d.registry.UnloadLevel(d.Level) + d.resourceSet.Delete() } func (d *Data) IsAvailable() bool { From 6d140106efa10ab6fd1f361f4be3defd1b1370be Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Thu, 16 Mar 2023 23:53:31 +0200 Subject: [PATCH 08/40] WIP changes --- .github/workflows/go.yml | 2 +- Taskfile.yml | 14 +- cmd/rallymka/app_cgo.go | 44 ++ cmd/{rallywasm/main.go => rallymka/app_js.go} | 19 +- cmd/rallymka/main.go | 39 - cmd/rallypack/main.go | 150 +--- go.mod | 29 +- go.sum | 69 ++ internal/ecscomp/camera.go | 28 - internal/ecscomp/identifiers.go | 11 - internal/ecscomp/player.go | 17 - internal/ecscomp/vehicle.go | 13 +- internal/ecssys/stand.go | 150 ---- internal/ecssys/vehicle.go | 145 +--- internal/game/controller.go | 196 ----- internal/global/context.go | 7 +- internal/scene/car/chassis.go | 76 -- internal/scene/car/wheel.go | 91 --- internal/scene/data.go | 158 +--- internal/ui/bootstrap.go | 4 +- internal/ui/home/view.go | 46 +- internal/ui/intro/view.go | 36 +- internal/ui/play/view.go | 689 +++++++++--------- internal/ui/widget/home_button.go | 4 +- internal/ui/widget/regions.go | 258 +++++++ resources/images/barrier.png | 3 - resources/images/body.png | 3 - resources/images/concrete.png | 3 - resources/images/grass.png | 3 - resources/images/gravel.png | 3 - resources/images/leafy_tree.png | 3 - resources/images/road.png | 3 - resources/images/rusty_metal_02_diff_512.png | 3 - resources/images/wheel.png | 3 - 34 files changed, 871 insertions(+), 1451 deletions(-) create mode 100644 cmd/rallymka/app_cgo.go rename cmd/{rallywasm/main.go => rallymka/app_js.go} (74%) delete mode 100644 internal/ecscomp/camera.go delete mode 100644 internal/ecscomp/identifiers.go delete mode 100644 internal/ecscomp/player.go delete mode 100644 internal/ecssys/stand.go delete mode 100644 internal/game/controller.go delete mode 100644 internal/scene/car/chassis.go delete mode 100644 internal/scene/car/wheel.go create mode 100644 internal/ui/widget/regions.go delete mode 100644 resources/images/barrier.png delete mode 100644 resources/images/body.png delete mode 100644 resources/images/concrete.png delete mode 100644 resources/images/grass.png delete mode 100644 resources/images/gravel.png delete mode 100644 resources/images/leafy_tree.png delete mode 100644 resources/images/road.png delete mode 100644 resources/images/rusty_metal_02_diff_512.png delete mode 100644 resources/images/wheel.png diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index b7467b7..1941d6c 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -23,7 +23,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v2.1.3 with: - go-version: 1.18 + go-version: 1.20 - name: Install Linux Packages if: matrix.os == 'ubuntu-latest' diff --git a/Taskfile.yml b/Taskfile.yml index 618932e..0fc8aa1 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -2,6 +2,10 @@ version: '3' tasks: + pack: + cmds: + - go run './cmd/rallypack' + webpack: cmds: - mkdir -p 'assets/web' @@ -11,12 +15,8 @@ tasks: - cp 'resources/web/index.html' 'assets/index.html' - cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" 'assets/web' - pack: - cmds: - - go run './cmd/rallypack' - assets: - deps: [webpack, pack] + deps: [pack, webpack] run: cmds: @@ -31,11 +31,11 @@ tasks: GOOS: js GOARCH: wasm cmds: - - go build -o './assets/web/main.wasm' './cmd/rallywasm' + - go build -o './assets/web/main.wasm' './cmd/rallymka' web: cmds: - - go run 'github.com/mokiat/httpserv@master' -dir './assets' -host '127.0.0.1' + - go run 'github.com/mokiat/httpserv@v1.0.0' -dir './assets' -host '127.0.0.1' profile: cmds: diff --git a/cmd/rallymka/app_cgo.go b/cmd/rallymka/app_cgo.go new file mode 100644 index 0000000..bea0ce3 --- /dev/null +++ b/cmd/rallymka/app_cgo.go @@ -0,0 +1,44 @@ +//go:build !js + +package main + +import ( + "fmt" + + glapp "github.com/mokiat/lacking-gl/app" + glgame "github.com/mokiat/lacking-gl/game" + glrender "github.com/mokiat/lacking-gl/render" + glui "github.com/mokiat/lacking-gl/ui" + "github.com/mokiat/lacking/app" + "github.com/mokiat/lacking/game" + "github.com/mokiat/lacking/game/asset" + "github.com/mokiat/lacking/ui" + "github.com/mokiat/lacking/ui/mat" + "github.com/mokiat/lacking/util/resource" + gameui "github.com/mokiat/rally-mka/internal/ui" +) + +func runApplication() error { + registry, err := asset.NewDirRegistry(".") + if err != nil { + return fmt.Errorf("failed to initialize registry: %w", err) + } + + renderAPI := glrender.NewAPI() + gameController := game.NewController(registry, renderAPI, glgame.NewShaderCollection()) + resourceLocator := mat.WrappedResourceLocator(resource.NewFileLocator("./resources")) + uiCfg := ui.NewConfig(resourceLocator, renderAPI, glui.NewShaderCollection()) + uiController := ui.NewController(uiCfg, func(w *ui.Window) { + gameui.BootstrapApplication(w, gameController) + }) + + controller := app.NewLayeredController( + gameController, + uiController, + ) + cfg := glapp.NewConfig("Rally MKA", 1024, 576) + cfg.SetVSync(false) // FIXME: V-sync causes slow resource loading. + cfg.SetIcon("resources/icon.png") + cfg.SetMaximized(true) + return glapp.Run(cfg, controller) +} diff --git a/cmd/rallywasm/main.go b/cmd/rallymka/app_js.go similarity index 74% rename from cmd/rallywasm/main.go rename to cmd/rallymka/app_js.go index 5ade053..1b75045 100644 --- a/cmd/rallywasm/main.go +++ b/cmd/rallymka/app_js.go @@ -1,36 +1,24 @@ -//go:build js && wasm +//go:build js package main import ( "fmt" - "os" jsapp "github.com/mokiat/lacking-js/app" jsgame "github.com/mokiat/lacking-js/game" jsrender "github.com/mokiat/lacking-js/render" jsui "github.com/mokiat/lacking-js/ui" "github.com/mokiat/lacking/app" + "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/asset" - "github.com/mokiat/lacking/game/graphics" - "github.com/mokiat/lacking/log" "github.com/mokiat/lacking/ui" "github.com/mokiat/lacking/ui/mat" "github.com/mokiat/lacking/util/resource" - "github.com/mokiat/rally-mka/internal/game" gameui "github.com/mokiat/rally-mka/internal/ui" "github.com/mokiat/rally-mka/resources" ) -func main() { - log.Info("Started") - if err := runApplication(); err != nil { - log.Error("Crashed: %v", err) - os.Exit(1) - } - log.Info("Stopped") -} - func runApplication() error { registry, err := asset.NewWebRegistry(".") if err != nil { @@ -38,8 +26,7 @@ func runApplication() error { } resourceLocator := mat.WrappedResourceLocator(resource.NewFSLocator(resources.UI)) renderAPI := jsrender.NewAPI() - graphicsEngine := graphics.NewEngine(renderAPI, jsgame.NewShaderCollection()) - gameController := game.NewController(registry, graphicsEngine) + gameController := game.NewController(registry, renderAPI, jsgame.NewShaderCollection()) uiCfg := ui.NewConfig(resourceLocator, renderAPI, jsui.NewShaderCollection()) uiController := ui.NewController(uiCfg, func(w *ui.Window) { gameui.BootstrapApplication(w, gameController) diff --git a/cmd/rallymka/main.go b/cmd/rallymka/main.go index 72d77fa..d1d18f7 100644 --- a/cmd/rallymka/main.go +++ b/cmd/rallymka/main.go @@ -1,22 +1,9 @@ package main import ( - "fmt" "os" - glapp "github.com/mokiat/lacking-gl/app" - glgame "github.com/mokiat/lacking-gl/game" - glrender "github.com/mokiat/lacking-gl/render" - glui "github.com/mokiat/lacking-gl/ui" - "github.com/mokiat/lacking/app" - "github.com/mokiat/lacking/game/asset" - "github.com/mokiat/lacking/game/graphics" "github.com/mokiat/lacking/log" - "github.com/mokiat/lacking/ui" - "github.com/mokiat/lacking/ui/mat" - "github.com/mokiat/lacking/util/resource" - "github.com/mokiat/rally-mka/internal/game" - gameui "github.com/mokiat/rally-mka/internal/ui" ) func main() { @@ -27,29 +14,3 @@ func main() { } log.Info("Stopped") } - -func runApplication() error { - cfg := glapp.NewConfig("Rally MKA", 1024, 576) - cfg.SetVSync(true) - cfg.SetIcon("resources/icon.png") - - registry, err := asset.NewDirRegistry(".") - if err != nil { - return fmt.Errorf("failed to initialize registry: %w", err) - } - - renderAPI := glrender.NewAPI() - graphicsEngine := graphics.NewEngine(renderAPI, glgame.NewShaderCollection()) - gameController := game.NewController(registry, graphicsEngine) - resourceLocator := mat.WrappedResourceLocator(resource.NewFileLocator("./resources")) - uiCfg := ui.NewConfig(resourceLocator, renderAPI, glui.NewShaderCollection()) - uiController := ui.NewController(uiCfg, func(w *ui.Window) { - gameui.BootstrapApplication(w, gameController) - }) - - controller := app.NewLayeredController( - gameController, - uiController, - ) - return glapp.Run(cfg, controller) -} diff --git a/cmd/rallypack/main.go b/cmd/rallypack/main.go index f8897b8..83aba4a 100644 --- a/cmd/rallypack/main.go +++ b/cmd/rallypack/main.go @@ -5,7 +5,7 @@ import ( "log" "github.com/mokiat/lacking/data/pack" - gameasset "github.com/mokiat/lacking/game/asset" + "github.com/mokiat/lacking/game/asset" ) func main() { @@ -15,67 +15,24 @@ func main() { } func runTool() error { - registry, err := gameasset.NewDirRegistry(".") + registry, err := asset.NewDirRegistry(".") if err != nil { return fmt.Errorf("failed to create registry: %w", err) } - var ( - tex2DConcrete = ensureResource(registry, "e89d3c68-12ba-42ca-bc04-ccefefcf5720", "twod_texture", "Concrete") - tex2DRoad = ensureResource(registry, "b2c7a46f-f2a2-4601-bd10-493a68fc094c", "twod_texture", "Road") - tex2DBarrier = ensureResource(registry, "3800657a-4407-4bda-bdff-b57748c002ab", "twod_texture", "Barrier") - tex2DGrass = ensureResource(registry, "5905593c-6820-465b-8315-1e17be0a6f72", "twod_texture", "Grass") - tex2DGravel = ensureResource(registry, "fee51386-e8f1-4dd7-926e-3ca353589e01", "twod_texture", "Gravel") - tex2DRustyMetal = ensureResource(registry, "7574ab74-980b-4bbd-aea1-3459998ccc71", "twod_texture", "Rusty Metal") - tex2DCarBody = ensureResource(registry, "8ed7f73b-0129-48f8-b187-b7e43eff0294", "twod_texture", "Car Body") - tex2DCarWheel = ensureResource(registry, "9d52b91b-0292-4442-b100-29f12402c2c1", "twod_texture", "Car Wheel") - tex2DLeafyTree = ensureResource(registry, "01b8ab21-3d72-4b31-869e-37039dee0161", "twod_texture", "Leafy Tree") - ) - - var ( - texCubeSkybox = ensureResource(registry, "bab99e80-ded1-459a-b00b-6a17afa44046", "cube_texture", "Skybox") - texCubeSkyboxReflection = ensureResource(registry, "eb639f55-d6eb-46d7-bd3b-d52fcaa0bc58", "cube_texture", "Skybox Reflection") - texCubeSkyboxRefraction = ensureResource(registry, "0815fb89-7ae6-4229-b9e2-59610c4fc6bc", "cube_texture", "Skybox Refraction") - ) - - var ( - modelStreetLamp = ensureResource(registry, "31cb3900-760d-4179-b5d9-79f8e69be8f6", "model", "Street Lamp") - modelSUV = ensureResource(registry, "eaeb7483-7271-441f-a470-c0a8fa225161", "model", "SUV") - modelLeafyTree = ensureResource(registry, "2c6e3211-68f8-4b31-beaf-e52af5d3be31", "model", "Leafy Tree") - ) - - modelStreetLamp.AddDependency(tex2DRustyMetal) - modelSUV.AddDependency(tex2DCarBody) - modelSUV.AddDependency(tex2DCarWheel) - modelLeafyTree.AddDependency(tex2DLeafyTree) - - var ( - levelPlayground = ensureResource(registry, "9ca25b5c-ffa0-4224-ad80-a3c4d67930b7", "scene", "Playground") - levelForest = ensureResource(registry, "884e6395-2300-47bb-9916-b80e3dc0e086", "scene", "Forest") - levelHighway = ensureResource(registry, "acf21108-47ad-44ef-ba21-bf5473bfbaa0", "scene", "Highway") - ) - - levelPlayground.AddDependency(tex2DGrass) - levelPlayground.AddDependency(texCubeSkybox) - levelPlayground.AddDependency(texCubeSkyboxReflection) - levelPlayground.AddDependency(texCubeSkyboxRefraction) - levelPlayground.AddDependency(modelSUV) - levelPlayground.AddDependency(modelLeafyTree) - levelForest.AddDependency(tex2DGravel) - levelForest.AddDependency(tex2DGrass) - levelForest.AddDependency(tex2DBarrier) - levelForest.AddDependency(texCubeSkybox) - levelForest.AddDependency(texCubeSkyboxReflection) - levelForest.AddDependency(texCubeSkyboxRefraction) + texCubeSkybox := ensureResource(registry, "bab99e80-ded1-459a-b00b-6a17afa44046", "cube_texture", "Skybox") + texCubeSkyboxReflection := ensureResource(registry, "eb639f55-d6eb-46d7-bd3b-d52fcaa0bc58", "cube_texture", "Skybox Reflection") + texCubeSkyboxRefraction := ensureResource(registry, "0815fb89-7ae6-4229-b9e2-59610c4fc6bc", "cube_texture", "Skybox Refraction") + + modelForest := ensureResource(registry, "5f7bd967-dc4a-4252-b1a5-5721cd299d67", "model", "Forest Ride") + modelForest.AddDependency(texCubeSkybox) + modelForest.AddDependency(texCubeSkyboxReflection) + modelForest.AddDependency(texCubeSkyboxRefraction) + modelSUV := ensureResource(registry, "eaeb7483-7271-441f-a470-c0a8fa225161", "model", "SUV") + + levelForest := ensureResource(registry, "884e6395-2300-47bb-9916-b80e3dc0e086", "scene", "Forest") + levelForest.AddDependency(modelForest) levelForest.AddDependency(modelSUV) - levelForest.AddDependency(modelLeafyTree) - levelHighway.AddDependency(tex2DRoad) - levelHighway.AddDependency(tex2DConcrete) - levelHighway.AddDependency(texCubeSkybox) - levelHighway.AddDependency(texCubeSkyboxReflection) - levelHighway.AddDependency(texCubeSkyboxRefraction) - levelHighway.AddDependency(modelSUV) - levelHighway.AddDependency(modelStreetLamp) if err := registry.Save(); err != nil { return fmt.Errorf("error saving resources: %w", err) @@ -83,45 +40,6 @@ func runTool() error { packer := pack.NewPacker(registry) - // TwoD Textures - packer.Pipeline(func(p *pack.Pipeline) { - p.SaveTwoDTextureAsset(tex2DConcrete.ID(), - p.OpenImageResource("resources/images/concrete.png"), - ) - - p.SaveTwoDTextureAsset(tex2DRoad.ID(), - p.OpenImageResource("resources/images/road.png"), - ) - - p.SaveTwoDTextureAsset(tex2DBarrier.ID(), - p.OpenImageResource("resources/images/barrier.png"), - ) - - p.SaveTwoDTextureAsset(tex2DGrass.ID(), - p.OpenImageResource("resources/images/grass.png"), - ) - - p.SaveTwoDTextureAsset(tex2DGravel.ID(), - p.OpenImageResource("resources/images/gravel.png"), - ) - - p.SaveTwoDTextureAsset(tex2DRustyMetal.ID(), - p.OpenImageResource("resources/images/rusty_metal_02_diff_512.png"), - ) - - p.SaveTwoDTextureAsset(tex2DCarBody.ID(), - p.OpenImageResource("resources/images/body.png"), - ) - - p.SaveTwoDTextureAsset(tex2DCarWheel.ID(), - p.OpenImageResource("resources/images/wheel.png"), - ) - - p.SaveTwoDTextureAsset(tex2DLeafyTree.ID(), - p.OpenImageResource("resources/images/leafy_tree.png"), - ) - }) - // Cube Textures packer.Pipeline(func(p *pack.Pipeline) { srcEquirectangularImage := p.OpenImageResource("resources/images/syferfontein.hdr") @@ -134,61 +52,51 @@ func runTool() error { pack.WithBottomImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideBottom, srcEquirectangularImage)), ) - smallerSkyboxCubeImage := p.ScaleCubeImage(skyboxCubeImage, 512) - p.SaveCubeTextureAsset(texCubeSkybox.ID(), smallerSkyboxCubeImage, - pack.WithFormat(gameasset.TexelFormatRGBA16F), + smallerSkyboxCubeImage := p.ScaleCubeImage(skyboxCubeImage, 1024) + p.SaveCubeTextureAsset(texCubeSkybox, smallerSkyboxCubeImage, + pack.WithFormat(asset.TexelFormatRGBA16F), ) reflectionCubeImage := p.ScaleCubeImage(skyboxCubeImage, 128) - p.SaveCubeTextureAsset(texCubeSkyboxReflection.ID(), reflectionCubeImage, - pack.WithFormat(gameasset.TexelFormatRGBA16F), + p.SaveCubeTextureAsset(texCubeSkyboxReflection, reflectionCubeImage, + pack.WithFormat(asset.TexelFormatRGBA16F), ) refractionCubeImage := p.BuildIrradianceCubeImage(reflectionCubeImage, pack.WithSampleCount(50), ) - p.SaveCubeTextureAsset(texCubeSkyboxRefraction.ID(), refractionCubeImage, - pack.WithFormat(gameasset.TexelFormatRGBA16F), + p.SaveCubeTextureAsset(texCubeSkyboxRefraction, refractionCubeImage, + pack.WithFormat(asset.TexelFormatRGBA16F), ) }) // Models packer.Pipeline(func(p *pack.Pipeline) { - p.SaveModelAsset(modelStreetLamp.ID(), - p.OpenGLTFResource("resources/models/street_lamp.gltf"), - ) - - p.SaveModelAsset(modelSUV.ID(), - p.OpenGLTFResource("resources/models/suv.gltf"), + p.SaveModelAsset(modelSUV, + p.OpenGLTFResource("resources/models/suv.glb"), ) - p.SaveModelAsset(modelLeafyTree.ID(), - p.OpenGLTFResource("resources/models/leafy_tree.gltf"), + p.SaveModelAsset(modelForest, + p.OpenGLTFResource("resources/models/forest.glb"), ) }) // Levels packer.Pipeline(func(p *pack.Pipeline) { - p.SaveLevelAsset(levelPlayground.ID(), - p.OpenLevelResource("resources/levels/playground.json"), - ) - - p.SaveLevelAsset(levelForest.ID(), + p.SaveLevelAsset(levelForest, p.OpenLevelResource("resources/levels/forest.json"), ) - - p.SaveLevelAsset(levelHighway.ID(), - p.OpenLevelResource("resources/levels/highway.json"), - ) }) return packer.RunParallel() } -func ensureResource(registry gameasset.Registry, id, kind, name string) gameasset.Resource { +func ensureResource(registry asset.Registry, id, kind, name string) asset.Resource { resource := registry.ResourceByID(id) if resource == nil { resource = registry.CreateIDResource(id, kind, name) + } else { + resource.SetName(name) } return resource } diff --git a/go.mod b/go.mod index bf4bb27..ff0f11d 100644 --- a/go.mod +++ b/go.mod @@ -1,27 +1,30 @@ module github.com/mokiat/rally-mka -go 1.18 +go 1.20 require ( - github.com/mokiat/gomath v0.2.0 - github.com/mokiat/lacking v0.8.0 - github.com/mokiat/lacking-gl v0.5.0 - github.com/mokiat/lacking-js v0.5.0 + github.com/mokiat/gomath v0.7.0 + github.com/mokiat/lacking v0.9.0 + github.com/mokiat/lacking-gl v0.6.0 + github.com/mokiat/lacking-js v0.6.0 ) require ( + github.com/go-echarts/go-echarts/v2 v2.2.5 // indirect + github.com/go-echarts/statsview v0.3.4 // indirect github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 // indirect - github.com/go-gl/glfw/v3.3/glfw v0.0.0-20220516021902-eb3e265c7661 // indirect + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect github.com/google/uuid v1.3.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - github.com/mdouchement/hdr v0.2.3 // indirect + github.com/mdouchement/hdr v0.2.4 // indirect github.com/mokiat/goexr v0.1.0 // indirect - github.com/mokiat/wasmgl v0.4.0 // indirect - github.com/qmuntal/gltf v0.22.0 // indirect + github.com/mokiat/wasmgl v0.5.0 // indirect + github.com/qmuntal/gltf v0.23.1 // indirect + github.com/rs/cors v1.8.3 // indirect github.com/x448/float16 v0.8.4 // indirect - golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d // indirect - golang.org/x/image v0.0.0-20220617043117-41969df76e82 // indirect - golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect - golang.org/x/text v0.3.7 // indirect + golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0 // indirect + golang.org/x/image v0.6.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/text v0.8.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 2997c2d..38ae5ce 100644 --- a/go.sum +++ b/go.sum @@ -1,66 +1,133 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/cinar/indicator v1.2.24/go.mod h1:5eX8f1PG9g3RKSoHsoQxKd8bIN97Cf/gbgxXjihROpI= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/go-echarts/go-echarts/v2 v2.2.3 h1:H8oPdUpzuiV2K8S4xYZa1JRNjP3U0h7HVqvhPrmCk1A= +github.com/go-echarts/go-echarts/v2 v2.2.3/go.mod h1:6TOomEztzGDVDkOSCFBq3ed7xOYfbOqhaBzD0YV771A= +github.com/go-echarts/go-echarts/v2 v2.2.5 h1:Jl0gtQa9i/iTZHEsmzf89HoxX2WTGa4K5r0be4qaquE= +github.com/go-echarts/go-echarts/v2 v2.2.5/go.mod h1:IN5P8jIRZKENmAJf2lHXBzv8U9YwdVnY9urdzGkEDA0= +github.com/go-echarts/statsview v0.3.4 h1:CCuytRAutdnF901NrR4BzSjHXjUp8OyA3/iopgG/1/Y= +github.com/go-echarts/statsview v0.3.4/go.mod h1:AehKjL9cTFMeIo5QdV8sQO43vFmfY65X5GMWa3XMciY= github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 h1:zDw5v7qm4yH7N8C8uWd+8Ii9rROdgWxQuGoJ9WDXxfk= github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20220516021902-eb3e265c7661 h1:1bpooddSK2996NWM/1TW59cchQOm9MkoV9DkhSJH1BI= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20220516021902-eb3e265c7661/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b h1:GgabKamyOYguHqHjSkDACcgoPIz3w0Dis/zJ1wyHHHU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-test/deep v1.0.1 h1:UQhStjbkDClarlmv0am7OXXO4/GaPdCGiUiMTvi28sg= github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mdouchement/hdr v0.2.3 h1:IxzxLgEarv9VPsk17DGIWnhA60MA5ASbekCU8YSFmaY= github.com/mdouchement/hdr v0.2.3/go.mod h1:2Yb3JAST9c66wTLZ1vQrejU5sDeOC+ukXVs1pFAUtPo= +github.com/mdouchement/hdr v0.2.4 h1:k0ojx7smWvWw8En2BjUnb144j48gAExu5mv+ogNrkTc= +github.com/mdouchement/hdr v0.2.4/go.mod h1:uezK2oUhYtoRLkTD0J4ryiOsu/oWLjRXx0I/92mIRmQ= github.com/mokiat/goexr v0.1.0 h1:zoDvzvIjs/GpkxJDVcCP6GafLp1nOuNDef9JL8KSd2A= github.com/mokiat/goexr v0.1.0/go.mod h1:KhERYaXCcY2ZEaTg1/LyzJ7pxdj/q3V1TxgViG86ck4= github.com/mokiat/gomath v0.2.0 h1:ymEIRySh5aVHvqNJfnqJ1aiFNBHzUGy9801oJRLb5mk= github.com/mokiat/gomath v0.2.0/go.mod h1:HzUDh5PiQcvnXRAwMmdNOqUO3h6IdouLd2BhikJIXz4= +github.com/mokiat/gomath v0.7.0 h1:fcrjgVeL7S2i4aBEzS5XLhCNh5IRqrYchEBr/d6YI2U= +github.com/mokiat/gomath v0.7.0/go.mod h1:bf4K7x67Otao/aWBAqN8/K7j90ZVD4pq9UaBUjvZbNk= github.com/mokiat/lacking v0.8.0 h1:f6ZwBOxYSvuVFc4d8DeNgY2zQR+smi24l3G/QPQTcPk= github.com/mokiat/lacking v0.8.0/go.mod h1:MM1AX7zzUK+fHNRc08auxBVVL7/R9cfVKfwl9TGYXug= +github.com/mokiat/lacking v0.9.0 h1:bdTErqXsUneYUA1hzsU45go7mamTsKVgyxzrY10Wvr0= +github.com/mokiat/lacking v0.9.0/go.mod h1:Yb3FlCHHBqEXR4qbX0XBE8U6l4mbPeElUNYVeLRzyAs= github.com/mokiat/lacking-gl v0.5.0 h1:Of76VcoiBSYx3S5bn6R4i4VcKeXFZ+5wrfWMUc/x2io= github.com/mokiat/lacking-gl v0.5.0/go.mod h1:rFaJXy0VdZSsCnma8sFg/f4KxYfmHdBHFiEqHu2Xh08= +github.com/mokiat/lacking-gl v0.6.0 h1:zW5vIauLR+C77KY+3wS5hY484AsM61NYtsb7rN0EXYk= +github.com/mokiat/lacking-gl v0.6.0/go.mod h1:3XZIBQ+QwwmcX5Vec3VrzRuMHu+JGcCRZey+OQ3C/nU= github.com/mokiat/lacking-js v0.5.0 h1:WpLix0sJ50x8n3dIIbvDpd5/QP3prwJ7ypo2bufyK7Y= github.com/mokiat/lacking-js v0.5.0/go.mod h1:XsGZjWrmfEGgpEt5MdnhA88Wu7vzCQmgXvLAkGKzKJ8= +github.com/mokiat/lacking-js v0.6.0 h1:YaL0Wp0mf8Q94/YPSKLi2xTQGBDvG+MG2E1rBGBWPpk= +github.com/mokiat/lacking-js v0.6.0/go.mod h1:APvUwPl3pjX8pwrBh45OpBF3mi6S/EjnF0vb8v4IxG0= github.com/mokiat/wasmgl v0.4.0 h1:nnVWHibX8VoGXKlDHlwgdD/JmCHSasRQGmQfUlIEnbY= github.com/mokiat/wasmgl v0.4.0/go.mod h1:Ikx+bDVpuq+OkvdDDwKI0pIluqK+kduVHJhRFBmmGrw= +github.com/mokiat/wasmgl v0.5.0 h1:LilOv5A2jp2T51pWRb5xZdgl01z6+J9l/AhmdIxHNa0= +github.com/mokiat/wasmgl v0.5.0/go.mod h1:Ikx+bDVpuq+OkvdDDwKI0pIluqK+kduVHJhRFBmmGrw= github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/qmuntal/gltf v0.22.0 h1:IwoanftOUqj0X0KECjBN5+dm0SR9s9TDEevgpeej36U= github.com/qmuntal/gltf v0.22.0/go.mod h1:7FR0CRHoOehIgKTBVq/QVyvPn0i6tzp2AdIghb2bPg4= +github.com/qmuntal/gltf v0.23.1 h1:R8vkbJXmARbD/oI+Yn3252I2qDQ8mljsc88BJJEdYMY= +github.com/qmuntal/gltf v0.23.1/go.mod h1:7FR0CRHoOehIgKTBVq/QVyvPn0i6tzp2AdIghb2bPg4= github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= +github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d h1:vtUKgx8dahOomfFzLREU8nSv25YHnTgLBn4rDnWZdU0= golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= +golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0 h1:pVgRXcIictcr+lBQIFeiwuwtDIs4eL21OuM9nyAADmo= +golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20220617043117-41969df76e82 h1:KpZB5pUSBvrHltNEdK/tw0xlPeD13M6M6aGP32gKqiw= golang.org/x/image v0.0.0-20220617043117-41969df76e82/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY= +golang.org/x/image v0.6.0 h1:bR8b5okrPI3g/gyZakLZHeWxAR8Dn5CyxXv1hLH5g/4= +golang.org/x/image v0.6.0/go.mod h1:MXLdDR43H7cDJq5GEGXEVeeNhPgi+YYEQ2pC1byI1x0= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.7.0/go.mod h1:L02bwd0sqlsvRv41G7wGWFCsVNZFv/k1xzGIxeANHGM= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= @@ -68,8 +135,10 @@ gonum.org/v1/netlib v0.0.0-20200229103305-d71f404090bf/go.mod h1:6EVtvAMWMjOBOsT gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= diff --git a/internal/ecscomp/camera.go b/internal/ecscomp/camera.go deleted file mode 100644 index 5769c8a..0000000 --- a/internal/ecscomp/camera.go +++ /dev/null @@ -1,28 +0,0 @@ -package ecscomp - -import ( - "github.com/mokiat/gomath/dprec" - "github.com/mokiat/lacking/game" - "github.com/mokiat/lacking/game/ecs" - "github.com/mokiat/lacking/game/graphics" -) - -func SetCameraStand(entity *ecs.Entity, component *CameraStand) { - entity.SetComponent(CameraStandComponentID, component) -} - -func GetCameraStand(entity *ecs.Entity) *CameraStand { - component := entity.Component(CameraStandComponentID) - if component == nil { - return nil - } - return component.(*CameraStand) -} - -type CameraStand struct { - Target *game.Node - AnchorPosition dprec.Vec3 - AnchorDistance float64 - CameraDistance float64 - Camera *graphics.Camera -} diff --git a/internal/ecscomp/identifiers.go b/internal/ecscomp/identifiers.go deleted file mode 100644 index e6ea5c7..0000000 --- a/internal/ecscomp/identifiers.go +++ /dev/null @@ -1,11 +0,0 @@ -package ecscomp - -import ( - "github.com/mokiat/lacking/game/ecs" -) - -const ( - VehicleComponentID ecs.ComponentTypeID = iota - PlayerControlComponentID - CameraStandComponentID -) diff --git a/internal/ecscomp/player.go b/internal/ecscomp/player.go deleted file mode 100644 index 94a40b5..0000000 --- a/internal/ecscomp/player.go +++ /dev/null @@ -1,17 +0,0 @@ -package ecscomp - -import "github.com/mokiat/lacking/game/ecs" - -func SetPlayerControl(entity *ecs.Entity, component *PlayerControl) { - entity.SetComponent(PlayerControlComponentID, component) -} - -func GetPlayerControl(entity *ecs.Entity) *PlayerControl { - component := entity.Component(PlayerControlComponentID) - if component == nil { - return nil - } - return component.(*PlayerControl) -} - -type PlayerControl struct{} diff --git a/internal/ecscomp/vehicle.go b/internal/ecscomp/vehicle.go index c33b7aa..12c7b61 100644 --- a/internal/ecscomp/vehicle.go +++ b/internal/ecscomp/vehicle.go @@ -4,12 +4,9 @@ import ( "github.com/mokiat/gomath/dprec" "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/lacking/game/physics" - "github.com/mokiat/lacking/game/physics/solver" ) -func SetVehicle(entity *ecs.Entity, component *Vehicle) { - entity.SetComponent(VehicleComponentID, component) -} +var VehicleComponentID ecs.ComponentTypeID = ecs.NewComponentTypeID() func GetVehicle(entity *ecs.Entity) *Vehicle { component := entity.Component(VehicleComponentID) @@ -27,16 +24,8 @@ type Vehicle struct { Recover bool Chassis *Chassis - Wheels []*Wheel } type Chassis struct { Body *physics.Body } - -type Wheel struct { - Body *physics.Body - RotationConstraint *solver.MatchAxis - AccelerationVelocity float64 - DecelerationVelocity float64 -} diff --git a/internal/ecssys/stand.go b/internal/ecssys/stand.go deleted file mode 100644 index 6a48b9b..0000000 --- a/internal/ecssys/stand.go +++ /dev/null @@ -1,150 +0,0 @@ -package ecssys - -import ( - "github.com/mokiat/gomath/dprec" - "github.com/mokiat/lacking/app" - "github.com/mokiat/lacking/game/ecs" - "github.com/mokiat/rally-mka/internal/ecscomp" -) - -func NewCameraStandSystem(ecsScene *ecs.Scene) *CameraStandSystem { - return &CameraStandSystem{ - ecsScene: ecsScene, - zoom: 1.0, - } -} - -type CameraStandSystem struct { - ecsScene *ecs.Scene - zoom float64 - - isRotateLeft bool - isRotateRight bool - isRotateUp bool - isRotateDown bool - isZoomIn bool - isZoomOut bool - - rotationX dprec.Angle - rotationY dprec.Angle -} - -func (s *CameraStandSystem) OnKeyboardEvent(event app.KeyboardEvent) bool { - active := event.Type != app.KeyboardEventTypeKeyUp - switch event.Code { - case app.KeyCodeA: - s.isRotateLeft = active - return true - case app.KeyCodeD: - s.isRotateRight = active - return true - case app.KeyCodeW: - s.isRotateUp = active - return true - case app.KeyCodeS: - s.isRotateDown = active - return true - case app.KeyCodeE: - s.isZoomIn = active - return true - case app.KeyCodeQ: - s.isZoomOut = active - return true - } - return false -} - -func (s *CameraStandSystem) Update(elapsedSeconds float64, gamepad *app.GamepadState) { - result := s.ecsScene.Find(ecs.Having(ecscomp.CameraStandComponentID)) - defer result.Close() - - for result.HasNext() { - entity := result.Next() - cameraStand := ecscomp.GetCameraStand(entity) - s.updateCameraStand(cameraStand, elapsedSeconds, gamepad) - } -} - -func (s *CameraStandSystem) updateCameraStand(cameraStand *ecscomp.CameraStand, elapsedSeconds float64, gamepad *app.GamepadState) { - var ( - target = cameraStand.Target - ) - var targetPosition dprec.Vec3 - switch { - case target.Body() != nil: - targetPosition = target.Body().Position() - default: - targetPosition = target.Position() - } - - // we use a camera anchor to achieve the smooth effect of a - // camera following the target - anchorVector := dprec.Vec3Diff(cameraStand.AnchorPosition, targetPosition) - anchorVector = dprec.ResizedVec3(anchorVector, cameraStand.AnchorDistance) - - cameraVectorZ := anchorVector - cameraVectorX := dprec.Vec3Cross(dprec.BasisYVec3(), cameraVectorZ) - cameraVectorY := dprec.Vec3Cross(cameraVectorZ, cameraVectorX) - - if s.isRotateLeft || (gamepad != nil && gamepad.DpadLeftButton) { - s.rotationY -= dprec.Degrees(elapsedSeconds * 100) - } - if s.isRotateRight || (gamepad != nil && gamepad.DpadRightButton) { - s.rotationY += dprec.Degrees(elapsedSeconds * 100) - } - if s.isRotateUp || (gamepad != nil && gamepad.DpadUpButton) { - s.rotationX -= dprec.Degrees(elapsedSeconds * 100) - } - if s.isRotateDown || (gamepad != nil && gamepad.DpadDownButton) { - s.rotationX += dprec.Degrees(elapsedSeconds * 100) - } - if s.isZoomIn { - s.zoom -= elapsedSeconds * s.zoom - } - if s.isZoomOut { - s.zoom += elapsedSeconds * s.zoom - } - - if gamepad != nil { - if gamepad.RightBumper { - s.zoom = s.zoom - 0.3*elapsedSeconds*s.zoom - } - if gamepad.LeftBumper { - s.zoom = s.zoom + 0.3*elapsedSeconds*s.zoom - } - - rotationAmount := 200 * elapsedSeconds - if dprec.Abs(gamepad.RightStickY) > 0.2 { - rotation := dprec.RotationQuat(dprec.Degrees(gamepad.RightStickY*rotationAmount), cameraVectorX) - anchorVector = dprec.QuatVec3Rotation(rotation, anchorVector) - } - if dprec.Abs(gamepad.RightStickX) > 0.2 { - rotation := dprec.RotationQuat(dprec.Degrees(-gamepad.RightStickX*rotationAmount), cameraVectorY) - anchorVector = dprec.QuatVec3Rotation(rotation, anchorVector) - } - } - - cameraStand.AnchorPosition = dprec.Vec3Sum(targetPosition, anchorVector) - // cameraStand.AnchorPosition = dprec.NewVec3(10.0, 60.0, 40.0) - - // the following approach of creating the view matrix coordinates will fail - // if the camera is pointing directly up or down - cameraVectorZ = anchorVector - cameraVectorX = dprec.Vec3Cross(dprec.BasisYVec3(), cameraVectorZ) - cameraVectorY = dprec.Vec3Cross(cameraVectorZ, cameraVectorX) - - matrix := dprec.Mat4MultiProd( - dprec.TranslationMat4(targetPosition.X, targetPosition.Y, targetPosition.Z), - dprec.TransformationMat4( - dprec.UnitVec3(cameraVectorX), - dprec.UnitVec3(cameraVectorY), - dprec.UnitVec3(cameraVectorZ), - dprec.ZeroVec3(), - ), - dprec.RotationMat4(s.rotationY, 0.0, 1.0, 0.0), - dprec.RotationMat4(dprec.Degrees(-25.0), 1.0, 0.0, 0.0), - dprec.RotationMat4(s.rotationX, 1.0, 0.0, 0.0), - dprec.TranslationMat4(0.0, 0.0, cameraStand.CameraDistance*s.zoom), - ) - cameraStand.Camera.SetMatrix(matrix) -} diff --git a/internal/ecssys/vehicle.go b/internal/ecssys/vehicle.go index b8ff282..0b6414a 100644 --- a/internal/ecssys/vehicle.go +++ b/internal/ecssys/vehicle.go @@ -5,6 +5,8 @@ import ( "github.com/mokiat/lacking/app" "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/lacking/game/graphics" + "github.com/mokiat/lacking/game/preset" + "github.com/mokiat/lacking/ui" "github.com/mokiat/lacking/util/shape" "github.com/mokiat/rally-mka/internal/ecscomp" ) @@ -40,29 +42,7 @@ type VehicleSystem struct { graphicsScene *graphics.Scene } -func (s *VehicleSystem) OnKeyboardEvent(event app.KeyboardEvent) bool { - active := event.Type != app.KeyboardEventTypeKeyUp - switch event.Code { - case app.KeyCodeArrowLeft: - s.isSteerLeft = active - return true - case app.KeyCodeArrowRight: - s.isSteerRight = active - return true - case app.KeyCodeArrowUp: - s.isAccelerate = active - return true - case app.KeyCodeArrowDown: - s.isDecelerate = active - return true - case app.KeyCodeEnter: - s.isRecover = active - return true - } - return false -} - -func (s *VehicleSystem) OnMouseEvent(event app.MouseEvent, viewport graphics.Viewport, camera *graphics.Camera, graphicsScene *graphics.Scene) bool { +func (s *VehicleSystem) OnMouseEvent(event ui.MouseEvent, viewport graphics.Viewport, camera *graphics.Camera, graphicsScene *graphics.Scene) bool { s.viewport = viewport s.camera = camera s.graphicsScene = graphicsScene @@ -77,11 +57,6 @@ func (s *VehicleSystem) OnMouseEvent(event app.MouseEvent, viewport graphics.Vie case app.MouseButtonRight: s.mouseRight = true } - // if s.mouseLeft && s.mouseRight { - // s.mouseLeft = false - // s.mouseRight = false - // s.mouseActive = !s.mouseActive - // } case app.MouseEventTypeUp: switch event.Button { case app.MouseButtonLeft: @@ -93,50 +68,39 @@ func (s *VehicleSystem) OnMouseEvent(event app.MouseEvent, viewport graphics.Vie if !s.mouseActive { return false } - s.mouseX = event.X - s.mouseY = event.Y + s.mouseX = event.Position.X + s.mouseY = event.Position.Y } return true } -func (s *VehicleSystem) Update(elapsedSeconds float64, gamepad *app.GamepadState) { +func (s *VehicleSystem) Update(elapsedSeconds float64) { result := s.ecsScene.Find(ecs.Having(ecscomp.VehicleComponentID)) defer result.Close() for result.HasNext() { entity := result.Next() vehicle := ecscomp.GetVehicle(entity) - if ecscomp.GetPlayerControl(entity) != nil { - if gamepad != nil { - s.updateVehicleControlGamepad(vehicle, elapsedSeconds, gamepad) + var controlled *preset.ControlledComponent + if ecs.FetchComponent(entity, &controlled) { + if s.mouseActive { + s.updateVehicleControlMouse(vehicle, elapsedSeconds) } else { - if s.mouseActive { - s.updateVehicleControlMouse(vehicle, elapsedSeconds) - } else { - s.updateVehicleControlKeyboard(vehicle, elapsedSeconds) - } + s.updateVehicleControlKeyboard(vehicle, elapsedSeconds) } } - s.updateVehiclePhysics(vehicle, elapsedSeconds) } } -func (s *VehicleSystem) updateVehicleControlGamepad(vehicle *ecscomp.Vehicle, elapsedSeconds float64, gamepad *app.GamepadState) { - steeringAmount := float64(gamepad.LeftStickX) * dprec.Abs(float64(gamepad.LeftStickX)) - vehicle.SteeringAngle = -dprec.Degrees(steeringAmount * vehicle.MaxSteeringAngle.Degrees()) - vehicle.Acceleration = float64(gamepad.RightTrigger) - vehicle.Deceleration = float64(gamepad.LeftTrigger) - vehicle.Recover = gamepad.CrossButton -} - func (s *VehicleSystem) updateVehicleControlMouse(vehicle *ecscomp.Vehicle, elapsedSeconds float64) { vehicle.Recover = s.isRecover orientation := vehicle.Chassis.Body.Orientation() orientationX := orientation.OrientationX() - // orientationY := orientation.OrientationY() orientationZ := orientation.OrientationZ() + // TODO: Use sphere shape instead + // TODO: Move Position and orientation into placement position := vehicle.Chassis.Body.Position() a := dprec.Vec3Sum(dprec.Vec3Sum( dprec.Vec3Prod(orientationX, -1000), @@ -155,41 +119,19 @@ func (s *VehicleSystem) updateVehicleControlMouse(vehicle *ecscomp.Vehicle, elap dprec.Vec3Prod(orientationZ, -1000), ), position) - // a := dprec.NewVec3( - // -1000+position.X, - // position.Y, - // -1000+position.Z, - // ) - // b := dprec.NewVec3( - // -1000+position.X, - // position.Y, - // 1000+position.Z, - // ) - // c := dprec.NewVec3( - // 1000+position.X, - // position.Y, - // 1000+position.Z, - // ) - // d := dprec.NewVec3( - // 1000+position.X, - // position.Y, - // -1000+position.Z, - // ) - - surface := shape.NewStaticMesh([]shape.StaticTriangle{ - shape.NewStaticTriangle(a, b, c), - shape.NewStaticTriangle(a, c, d), - }) + surface := shape.NewPlacement(shape.IdentityTransform(), shape.NewStaticMesh([]shape.StaticTriangle{ + shape.NewStaticTriangle(shape.Point(a), shape.Point(b), shape.Point(c)), + shape.NewStaticTriangle(shape.Point(a), shape.Point(c), shape.Point(d)), + })) line := s.graphicsScene.Ray(s.viewport, s.camera, s.mouseX, s.mouseY) result := shape.NewIntersectionResultSet(1) - shape.CheckLineIntersection(line, surface, result) + shape.CheckIntersectionLineWithMesh(line, surface, result) if result.Found() { intersection := result.Intersections()[0] mouseTarget := intersection.FirstContact - // log.Info("CONTACT: %#v", intersection.FirstContact) delta := dprec.Vec3Diff(mouseTarget, vehicle.Chassis.Body.Position()) delta.Y = 0.0 @@ -202,19 +144,11 @@ func (s *VehicleSystem) updateVehicleControlMouse(vehicle *ecscomp.Vehicle, elap dprec.UnitVec3(forward), ) angle := dprec.Angle(dprec.Sign(sin.Y)) * dprec.Asin(sin.Length()) - // log.Info("Angle: %.4f", angle.Degrees()) vehicle.SteeringAngle = dprec.Clamp(-dprec.Angle(angle), -vehicle.MaxSteeringAngle, vehicle.MaxSteeringAngle) } else { vehicle.SteeringAngle = 0 } - // log.Info("Line: %#v, %#v", line.A(), line.B()) - - // halfWidth := float64(width) / 2.0 - // halfHeight := float64(height) / 2.0 - // s.mouseTurn = 2 * (float64(event.X) - halfWidth) / halfWidth - // s.mouseAcceleration = (halfHeight - float64(event.Y)) / halfHeight - // return true if s.mouseLeft { vehicle.Acceleration = 0.8 @@ -269,46 +203,3 @@ func (s *VehicleSystem) updateVehicleControlKeyboard(vehicle *ecscomp.Vehicle, e vehicle.Deceleration = 0.0 } } - -func (s *VehicleSystem) updateVehiclePhysics(vehicle *ecscomp.Vehicle, elapsedSeconds float64) { - if vehicle.Recover { - vehicle.Chassis.Body.SetAngularVelocity(dprec.Vec3Sum(vehicle.Chassis.Body.AngularVelocity(), dprec.NewVec3(0.0, 0.0, 0.1))) - vehicle.Chassis.Body.SetVelocity(dprec.Vec3Sum(vehicle.Chassis.Body.Velocity(), dprec.NewVec3(0.0, 0.2, 0.0))) - } - - steeringQuat := dprec.RotationQuat(vehicle.SteeringAngle, dprec.BasisYVec3()) - isMovingForward := dprec.Vec3Dot(vehicle.Chassis.Body.Velocity(), vehicle.Chassis.Body.Orientation().OrientationZ()) > 5.0 - isMovingBackward := dprec.Vec3Dot(vehicle.Chassis.Body.Velocity(), vehicle.Chassis.Body.Orientation().OrientationZ()) < -5.0 - - for _, wheel := range vehicle.Wheels { - if wheel.RotationConstraint != nil { - wheel.RotationConstraint.SetPrimaryAxis(dprec.QuatVec3Rotation(steeringQuat, dprec.BasisXVec3())) - } - - if vehicle.Acceleration > 0.0 { - if isMovingBackward { - if wheelVelocity := dprec.Vec3Dot(wheel.Body.AngularVelocity(), wheel.Body.Orientation().OrientationX()); wheelVelocity < 0.0 { - correction := dprec.Max(-vehicle.Acceleration*wheel.DecelerationVelocity*elapsedSeconds, wheelVelocity) - wheel.Body.SetAngularVelocity(dprec.Vec3Prod(wheel.Body.AngularVelocity(), 1.0-correction/wheelVelocity)) - } - } else { - wheel.Body.SetAngularVelocity(dprec.Vec3Sum(wheel.Body.AngularVelocity(), - dprec.Vec3Prod(wheel.Body.Orientation().OrientationX(), vehicle.Acceleration*wheel.AccelerationVelocity*elapsedSeconds), - )) - } - } - - if vehicle.Deceleration > 0.0 { - if isMovingForward { - if wheelVelocity := dprec.Vec3Dot(wheel.Body.AngularVelocity(), wheel.Body.Orientation().OrientationX()); wheelVelocity > 0.0 { - correction := dprec.Min(vehicle.Deceleration*wheel.DecelerationVelocity*elapsedSeconds, wheelVelocity) - wheel.Body.SetAngularVelocity(dprec.Vec3Prod(wheel.Body.AngularVelocity(), 1.0-correction/wheelVelocity)) - } - } else { - wheel.Body.SetAngularVelocity(dprec.Vec3Sum(wheel.Body.AngularVelocity(), - dprec.Vec3Prod(wheel.Body.Orientation().OrientationX(), -vehicle.Deceleration*wheel.AccelerationVelocity*elapsedSeconds), - )) - } - } - } -} diff --git a/internal/game/controller.go b/internal/game/controller.go deleted file mode 100644 index 111755c..0000000 --- a/internal/game/controller.go +++ /dev/null @@ -1,196 +0,0 @@ -package game - -import ( - "time" - - "github.com/mokiat/lacking/app" - "github.com/mokiat/lacking/async" - "github.com/mokiat/lacking/game" - "github.com/mokiat/lacking/game/asset" - "github.com/mokiat/lacking/game/ecs" - "github.com/mokiat/lacking/game/graphics" - "github.com/mokiat/lacking/game/physics" - "github.com/mokiat/lacking/util/metrics" - "github.com/mokiat/rally-mka/internal/ecssys" -) - -func NewController(reg asset.Registry, gfxEngine *graphics.Engine) *Controller { - ioWorker := async.NewWorker(1) - go func() { - ioWorker.ProcessAll() - }() - - controller := &Controller{ - lastFrameTime: time.Now(), - } - controller.engine = game.NewEngine( - game.WithGFXWorker(game.WorkerFunc(func(fn func() error) game.Operation { - operation := game.NewOperation() - controller.Schedule(func() error { - err := fn() - operation.Complete(err) - return err - }) - return operation - })), - game.WithIOWorker(game.WorkerFunc(func(fn func() error) game.Operation { - operation := game.NewOperation() - ioWorker.ScheduleFunc(func() error { - err := fn() - operation.Complete(err) - return err - }) - return operation - })), - game.WithRegistry(reg), - game.WithPhysics(physics.NewEngine()), - game.WithGraphics(gfxEngine), - game.WithECS(ecs.NewEngine()), - ) - return controller -} - -type Controller struct { - app.NopController - - window app.Window - engine *game.Engine - scene *game.Scene - - lastFrameTime time.Time - freezeFrame bool - - width int - height int - - vehicleSystem *ecssys.VehicleSystem - cameraStandSystem *ecssys.CameraStandSystem - - camera *graphics.Camera - - OnUpdate func() - OnFrameFinish func() -} - -func (c *Controller) Schedule(fn func() error) { - c.window.Schedule(fn) -} - -func (c *Controller) Engine() *game.Engine { - return c.engine -} - -func (c *Controller) Scene() *game.Scene { - return c.scene -} - -func (c *Controller) VehicleSystem() *ecssys.VehicleSystem { - return c.vehicleSystem -} - -func (c *Controller) CameraStandSystem() *ecssys.CameraStandSystem { - return c.cameraStandSystem -} - -func (c *Controller) Camera() *graphics.Camera { - return c.camera -} - -func (c *Controller) OnCreate(window app.Window) { - c.window = window - c.width, c.height = window.Size() - - c.engine.Graphics().Create() - c.scene = c.engine.CreateScene() - c.camera = c.scene.Graphics().CreateCamera() - - c.vehicleSystem = ecssys.NewVehicleSystem(c.scene.ECS()) - c.cameraStandSystem = ecssys.NewCameraStandSystem(c.scene.ECS()) -} - -func (c *Controller) OnDestroy(window app.Window) { - c.vehicleSystem = nil - c.cameraStandSystem = nil - - c.scene.Delete() - c.engine.Graphics().Destroy() -} - -func (c *Controller) OnResize(window app.Window, width, height int) { - c.width, c.height = width, height -} - -func (c *Controller) OnCloseRequested(window app.Window) { - window.Close() -} - -func (c *Controller) OnMouseEvent(window app.Window, event app.MouseEvent) bool { - return c.vehicleSystem.OnMouseEvent(event, graphics.NewViewport(0, 0, c.width, c.height), c.camera, c.scene.Graphics()) -} - -func (c *Controller) OnKeyboardEvent(window app.Window, event app.KeyboardEvent) bool { - if event.Code == app.KeyCodeEscape { - window.Close() - return true - } - if event.Code == app.KeyCodeC && event.Type == app.KeyboardEventTypeKeyDown { - graphics.ShowLightView = !graphics.ShowLightView - } - if event.Code == app.KeyCodeF { - switch event.Type { - case app.KeyboardEventTypeKeyDown: - c.freezeFrame = true - return true - case app.KeyboardEventTypeKeyUp: - c.freezeFrame = false - return true - } - } - return c.vehicleSystem.OnKeyboardEvent(event) || - c.cameraStandSystem.OnKeyboardEvent(event) -} - -func (c *Controller) ResetFrameTime() { - c.lastFrameTime = time.Now() -} - -func (c *Controller) OnRender(window app.Window) { - currentTime := time.Now() - elapsedSeconds := currentTime.Sub(c.lastFrameTime).Seconds() - c.lastFrameTime = currentTime - - frameSpan := metrics.BeginSpan("frame") - defer frameSpan.End() - - if !c.freezeFrame { - var gamepad *app.GamepadState - if state, ok := window.GamepadState(0); ok { - gamepad = &state - } - - vehSpan := metrics.BeginSpan("vehicle system") - c.vehicleSystem.Update(elapsedSeconds, gamepad) - vehSpan.End() - updateSpan := metrics.BeginSpan("scene update") - c.scene.Update(elapsedSeconds) - updateSpan.End() - cameraSpan := metrics.BeginSpan("camera system") - c.cameraStandSystem.Update(elapsedSeconds, gamepad) - cameraSpan.End() - callbackSpan := metrics.BeginSpan("update callback") - if c.OnUpdate != nil { - c.OnUpdate() - } - callbackSpan.End() - - renderSpan := metrics.BeginSpan("render") - c.scene.Graphics().Render(graphics.NewViewport(0, 0, c.width, c.height), c.camera) - renderSpan.End() - } - - if c.OnFrameFinish != nil { - c.OnFrameFinish() - } - - window.Invalidate() // force redraw -} diff --git a/internal/global/context.go b/internal/global/context.go index cb6c3d3..de4eff9 100644 --- a/internal/global/context.go +++ b/internal/global/context.go @@ -1,10 +1,7 @@ package global -import ( - "github.com/mokiat/rally-mka/internal/game" -) +import "github.com/mokiat/lacking/game" -// TODO: Get rid of this. type Context struct { - GameController *game.Controller + Engine *game.Engine } diff --git a/internal/scene/car/chassis.go b/internal/scene/car/chassis.go deleted file mode 100644 index 21b74d5..0000000 --- a/internal/scene/car/chassis.go +++ /dev/null @@ -1,76 +0,0 @@ -package car - -import ( - "github.com/mokiat/gomath/dprec" - "github.com/mokiat/lacking/game" - "github.com/mokiat/lacking/game/physics" - "github.com/mokiat/lacking/util/shape" -) - -const ( - chassisRadius = 2 - chassisMass = 1300.0 / 5.0 - chassisMomentOfInertia = chassisMass * chassisRadius * chassisRadius / 5.0 - chassisDragFactor = 0.0 // 0.5 * 6.8 * 1.0 - chassisAngularDragFactor = 0.0 // 0.5 * 6.8 * 1.0 - chassisRestitutionCoef = 0.0 -) - -func Chassis(model *game.Model) *ChassisBuilder { - return &ChassisBuilder{ - model: model, - } -} - -type ChassisBuilder struct { - model *game.Model - modifiers []func(node *game.Node) -} - -func (b *ChassisBuilder) WithName(name string) *ChassisBuilder { - b.modifiers = append(b.modifiers, func(node *game.Node) { - body := node.Body() - body.SetName(name) - }) - return b -} - -func (b *ChassisBuilder) WithPosition(position dprec.Vec3) *ChassisBuilder { - b.modifiers = append(b.modifiers, func(node *game.Node) { - body := node.Body() - body.SetPosition(position) - }) - return b -} - -func (b *ChassisBuilder) Build(scene *game.Scene) *game.Node { - node := b.model.Root().FindNode("Chassis") - - physicsBodyDef := scene.Physics().Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ - Mass: chassisMass, - MomentOfInertia: physics.SymmetricMomentOfInertia(chassisMomentOfInertia), - DragFactor: chassisDragFactor, - AngularDragFactor: chassisAngularDragFactor, - RestitutionCoefficient: chassisRestitutionCoef, - CollisionShapes: []physics.CollisionShape{ - shape.NewPlacement( - shape.NewStaticBox(1.6, 1.4, 4.0), - dprec.NewVec3(0.0, 0.3, -0.4), - dprec.IdentityQuat(), - ), - }, - }) - physicsBody := scene.Physics().CreateBody(physics.BodyInfo{ - Name: node.Name(), - Definition: physicsBodyDef, - Position: dprec.ZeroVec3(), - Rotation: dprec.IdentityQuat(), - IsDynamic: true, - }) - - node.SetBody(physicsBody) - for _, modifier := range b.modifiers { - modifier(node) - } - return node -} diff --git a/internal/scene/car/wheel.go b/internal/scene/car/wheel.go deleted file mode 100644 index 792e69a..0000000 --- a/internal/scene/car/wheel.go +++ /dev/null @@ -1,91 +0,0 @@ -package car - -import ( - "fmt" - - "github.com/mokiat/gomath/dprec" - "github.com/mokiat/lacking/game" - "github.com/mokiat/lacking/game/physics" - "github.com/mokiat/lacking/util/shape" -) - -const ( - wheelRadius = 0.3 - wheelMass = 20.0 // wheel: ~12kg; rim: ~8kg - wheelMomentOfInertia = wheelMass * wheelRadius * wheelRadius / 2.0 // using cylinder as approximation - wheelDragFactor = 0.0 // 0.5 * 0.3 * 0.8 - wheelAngularDragFactor = 0.0 // 0.5 * 0.3 * 0.8 - wheelRestitutionCoef = 0.0 -) - -type WheelLocation string - -const ( - FrontLeftWheelLocation WheelLocation = "FL" - FrontRightWheelLocation WheelLocation = "FR" - BackLeftWheelLocation WheelLocation = "BL" - BackRightWheelLocation WheelLocation = "BR" -) - -func Wheel(model *game.Model, location WheelLocation) *WheelBuilder { - return &WheelBuilder{ - model: model, - location: location, - } -} - -type WheelBuilder struct { - model *game.Model - location WheelLocation - modifiers []func(node *game.Node) -} - -func (b *WheelBuilder) WithName(name string) *WheelBuilder { - b.modifiers = append(b.modifiers, func(node *game.Node) { - body := node.Body() - body.SetName(name) - }) - return b -} - -func (b *WheelBuilder) WithPosition(position dprec.Vec3) *WheelBuilder { - b.modifiers = append(b.modifiers, func(node *game.Node) { - body := node.Body() - body.SetPosition(position) - }) - return b -} - -func (b *WheelBuilder) Build(scene *game.Scene) *game.Node { - node := b.model.Root().FindNode(fmt.Sprintf("%sWheel", b.location)) - - physicsBodyDef := scene.Physics().Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ - Mass: wheelMass, - MomentOfInertia: physics.SymmetricMomentOfInertia(wheelMomentOfInertia), - DragFactor: wheelDragFactor, - AngularDragFactor: wheelAngularDragFactor, - RestitutionCoefficient: wheelRestitutionCoef, - CollisionShapes: []physics.CollisionShape{ - // using sphere shape at is easier to do in physics engine at the moment - shape.NewPlacement( - shape.NewStaticSphere(0.3), - dprec.ZeroVec3(), - dprec.IdentityQuat(), - ), - }, - }) - - physicsBody := scene.Physics().CreateBody(physics.BodyInfo{ - Name: node.Name(), - Definition: physicsBodyDef, - Position: dprec.ZeroVec3(), - Rotation: dprec.IdentityQuat(), - IsDynamic: true, - }) - - node.SetBody(physicsBody) - for _, modifier := range b.modifiers { - modifier(node) - } - return node -} diff --git a/internal/scene/data.go b/internal/scene/data.go index a045677..0d3e4f7 100644 --- a/internal/scene/data.go +++ b/internal/scene/data.go @@ -1,143 +1,44 @@ package scene import ( - "math/rand" - "time" - - "github.com/mokiat/lacking/async" "github.com/mokiat/lacking/game" - "github.com/mokiat/lacking/log" -) - -const ( - modelIDSUV = "eaeb7483-7271-441f-a470-c0a8fa225161" - levelIDForest = "884e6395-2300-47bb-9916-b80e3dc0e086" - levelIDHighway = "acf21108-47ad-44ef-ba21-bf5473bfbaa0" - levelIDPlayground = "9ca25b5c-ffa0-4224-ad80-a3c4d67930b7" + "github.com/mokiat/lacking/util/async" ) -func init() { - rand.Seed(time.Now().Unix()) -} - -func NewData(resourceSet *game.ResourceSet) *Data { +func NewData(engine *game.Engine, resourceSet *game.ResourceSet) *Data { return &Data{ + engine: engine, resourceSet: resourceSet, } } type Data struct { + engine *game.Engine resourceSet *game.ResourceSet - loadOutcome async.Outcome + loadPromise async.Promise[struct{}] - Level *game.SceneDefinition - SceneModel *game.ModelDefinition - CarModel *game.ModelDefinition - PlatformModel *game.ModelDefinition - CharacterModel *game.ModelDefinition + Level *game.SceneDefinition + CarModel *game.ModelDefinition } -func (d *Data) Request() async.Outcome { - var levelID string - switch rand.Intn(2) { - case 0: - levelID = levelIDForest - case 1: - levelID = levelIDHighway - default: - levelID = levelIDPlayground - } - levelID = levelIDPlayground - - levelOutcome := async.NewOutcome() - levelPromise := d.resourceSet.OpenScene(levelID) - levelPromise.OnSuccess(func(model *game.SceneDefinition) { - levelOutcome.Record(async.Result{ - Value: model, - }) - }) - levelPromise.OnError(func(err error) { - log.Info("Level loading failed: %v", err) - levelOutcome.Record(async.Result{ - Err: err, - }) - }) - - sceneOutcome := async.NewOutcome() - promise := d.resourceSet.OpenModel("0cb3f13f-3bfe-4913-afe1-9f7cd6bf4c15") - promise.OnSuccess(func(model *game.ModelDefinition) { - sceneOutcome.Record(async.Result{ - Value: model, - }) - }) - promise.OnError(func(err error) { - log.Info("Scene loading failed: %v", err) - sceneOutcome.Record(async.Result{ - Err: err, - }) - }) - - carOutcome := async.NewOutcome() - carPromise := d.resourceSet.OpenModel(modelIDSUV) - carPromise.OnSuccess(func(model *game.ModelDefinition) { - carOutcome.Record(async.Result{ - Value: model, - }) - }) - carPromise.OnError(func(err error) { - log.Info("SUV loading failed: %v", err) - carOutcome.Record(async.Result{ - Err: err, - }) - }) - - platformOutcome := async.NewOutcome() - platformPromise := d.resourceSet.OpenModel("59f0b554-b70c-497a-9771-13d1d3a2f644") - platformPromise.OnSuccess(func(model *game.ModelDefinition) { - platformOutcome.Record(async.Result{ - Value: model, - }) - }) - platformPromise.OnError(func(err error) { - log.Info("Platform loading failed: %v", err) - platformOutcome.Record(async.Result{ - Err: err, - }) - }) - - characterOutcome := async.NewOutcome() - characterPromise := d.resourceSet.OpenModel("847244e5-2797-479a-9ea6-e66875458da6") - characterPromise.OnSuccess(func(model *game.ModelDefinition) { - characterOutcome.Record(async.Result{ - Value: model, - }) - }) - characterPromise.OnError(func(err error) { - log.Info("Character loading failed: %v", err) - characterOutcome.Record(async.Result{ - Err: err, - }) - }) - - d.loadOutcome = async.NewCompositeOutcome( - levelOutcome.OnSuccess(func(value any) { - d.Level = value.(*game.SceneDefinition) - }), - sceneOutcome.OnSuccess(func(value any) { - d.SceneModel = value.(*game.ModelDefinition) - }), - carOutcome.OnSuccess(func(value any) { - d.CarModel = value.(*game.ModelDefinition) - }), - platformOutcome.OnSuccess(func(value any) { - d.PlatformModel = value.(*game.ModelDefinition) - }), - characterOutcome.OnSuccess(func(value any) { - d.CharacterModel = value.(*game.ModelDefinition) - }), - ) - return d.loadOutcome +func (d *Data) Request() game.Promise[struct{}] { + levelPromise := d.resourceSet.OpenSceneByName("Forest") + carPromise := d.resourceSet.OpenModelByName("SUV") + + d.loadPromise = async.NewPromise[struct{}]() + go func() { + err := firstErr( + levelPromise.Inject(&d.Level), + carPromise.Inject(&d.CarModel), + ) + if err != nil { + d.loadPromise.Fail(err) + } else { + d.loadPromise.Deliver(struct{}{}) + } + }() + return game.SafePromise(d.loadPromise, d.engine) } func (d *Data) Dismiss() { @@ -145,5 +46,14 @@ func (d *Data) Dismiss() { } func (d *Data) IsAvailable() bool { - return d.loadOutcome.IsAvailable() + return d.loadPromise.Ready() +} + +func firstErr(errs ...error) error { + for _, err := range errs { + if err != nil { + return err + } + } + return nil } diff --git a/internal/ui/bootstrap.go b/internal/ui/bootstrap.go index 092b3a7..e07b9b0 100644 --- a/internal/ui/bootstrap.go +++ b/internal/ui/bootstrap.go @@ -1,10 +1,10 @@ package internal import ( + "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/ui" co "github.com/mokiat/lacking/ui/component" "github.com/mokiat/lacking/ui/mvc" - "github.com/mokiat/rally-mka/internal/game" "github.com/mokiat/rally-mka/internal/global" "github.com/mokiat/rally-mka/internal/ui/controller" "github.com/mokiat/rally-mka/internal/ui/model" @@ -13,7 +13,7 @@ import ( func BootstrapApplication(window *ui.Window, gameController *game.Controller) { co.RegisterContext(global.Context{ - GameController: gameController, + Engine: gameController.Engine(), }) co.Initialize(window, co.New(Bootstrap, nil)) } diff --git a/internal/ui/home/view.go b/internal/ui/home/view.go index 1f9276a..12eb8f2 100644 --- a/internal/ui/home/view.go +++ b/internal/ui/home/view.go @@ -1,12 +1,12 @@ package home import ( + "github.com/mokiat/gog/opt" "github.com/mokiat/lacking/log" "github.com/mokiat/lacking/ui" co "github.com/mokiat/lacking/ui/component" "github.com/mokiat/lacking/ui/mat" "github.com/mokiat/lacking/ui/mvc" - "github.com/mokiat/lacking/util/optional" "github.com/mokiat/rally-mka/internal/ui/action" "github.com/mokiat/rally-mka/internal/ui/model" "github.com/mokiat/rally-mka/internal/ui/widget" @@ -34,7 +34,7 @@ var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { return co.New(mat.Container, func() { co.WithData(mat.ContainerData{ - BackgroundColor: optional.Value(ui.Black()), + BackgroundColor: opt.V(ui.Black()), Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), }) @@ -44,10 +44,10 @@ var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { Mode: mat.ImageModeCover, }) co.WithLayoutData(mat.LayoutData{ - Top: optional.Value(0), - Bottom: optional.Value(0), - Left: optional.Value(250), - Right: optional.Value(0), + Top: opt.V(0), + Bottom: opt.V(0), + Left: opt.V(250), + Right: opt.V(0), }) })) @@ -56,23 +56,23 @@ var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), }) co.WithLayoutData(mat.LayoutData{ - Left: optional.Value(100), - VerticalCenter: optional.Value(0), - Width: optional.Value(300), - Height: optional.Value(200), + Left: opt.V(100), + VerticalCenter: opt.V(0), + Width: opt.V(300), + Height: opt.V(200), }) - buttonWidth := optional.Value(130) + buttonWidth := opt.V(130) co.WithChild("continue-button", co.New(widget.HomeButton, func() { co.WithData(widget.HomeButtonData{ Text: "Continue", }) co.WithLayoutData(mat.LayoutData{ - Top: optional.Value(0), - Left: optional.Value(0), + Top: opt.V(0), + Left: opt.V(0), Width: buttonWidth, - Height: optional.Value(30), + Height: opt.V(30), }) co.WithCallbackData(widget.HomeButtonCallbackData{ ClickListener: onContinueClicked, @@ -84,10 +84,10 @@ var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { Text: "New Game", }) co.WithLayoutData(mat.LayoutData{ - Top: optional.Value(50), - Left: optional.Value(0), + Top: opt.V(50), + Left: opt.V(0), Width: buttonWidth, - Height: optional.Value(30), + Height: opt.V(30), }) co.WithCallbackData(widget.HomeButtonCallbackData{ ClickListener: onNewGameClicked, @@ -99,10 +99,10 @@ var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { Text: "Load Game", }) co.WithLayoutData(mat.LayoutData{ - Top: optional.Value(100), - Left: optional.Value(0), + Top: opt.V(100), + Left: opt.V(0), Width: buttonWidth, - Height: optional.Value(30), + Height: opt.V(30), }) co.WithCallbackData(widget.HomeButtonCallbackData{ ClickListener: onLoadGameClicked, @@ -114,10 +114,10 @@ var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { Text: "Options", }) co.WithLayoutData(mat.LayoutData{ - Top: optional.Value(150), - Left: optional.Value(0), + Top: opt.V(150), + Left: opt.V(0), Width: buttonWidth, - Height: optional.Value(30), + Height: opt.V(30), }) co.WithCallbackData(widget.HomeButtonCallbackData{ ClickListener: onOptionsClicked, diff --git a/internal/ui/intro/view.go b/internal/ui/intro/view.go index 50a56da..b4fe1ff 100644 --- a/internal/ui/intro/view.go +++ b/internal/ui/intro/view.go @@ -3,11 +3,11 @@ package intro import ( "fmt" + "github.com/mokiat/gog/opt" "github.com/mokiat/lacking/ui" co "github.com/mokiat/lacking/ui/component" "github.com/mokiat/lacking/ui/mat" "github.com/mokiat/lacking/ui/mvc" - "github.com/mokiat/lacking/util/optional" "github.com/mokiat/rally-mka/internal/global" "github.com/mokiat/rally-mka/internal/scene" "github.com/mokiat/rally-mka/internal/ui/action" @@ -26,40 +26,42 @@ var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { }) co.Once(func() { + gameEngine := context.Engine gameData := scene.NewData( - context.GameController.Registry(), + gameEngine, + gameEngine.CreateResourceSet(), ) - gameData.Request().OnSuccess(func(interface{}) { - co.Schedule(func() { - mvc.Dispatch(scope, action.SetGameData{ - GameData: gameData, - }) - mvc.Dispatch(scope, action.ChangeView{ - ViewName: model.ViewNameHome, - }) + dataRequest := gameData.Request() + dataRequest.OnSuccess(func(struct{}) { + mvc.Dispatch(scope, action.SetGameData{ + GameData: gameData, }) - }).OnError(func(err error) { + mvc.Dispatch(scope, action.ChangeView{ + ViewName: model.ViewNameHome, + }) + }) + dataRequest.OnError(func(err error) { panic(fmt.Errorf("failed to load assets: %w", err)) }) }) return co.New(mat.Container, func() { co.WithData(mat.ContainerData{ - BackgroundColor: optional.Value(ui.Black()), + BackgroundColor: opt.V(ui.Black()), Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), }) co.WithChild("logo-picture", co.New(mat.Picture, func() { co.WithData(mat.PictureData{ - BackgroundColor: optional.Value(ui.Transparent()), + BackgroundColor: opt.V(ui.Transparent()), Image: co.OpenImage(scope, "ui/images/logo.png"), Mode: mat.ImageModeFit, }) co.WithLayoutData(mat.LayoutData{ - Width: optional.Value(512), - Height: optional.Value(128), - HorizontalCenter: optional.Value(0), - VerticalCenter: optional.Value(0), + Width: opt.V(512), + Height: opt.V(128), + HorizontalCenter: opt.V(0), + VerticalCenter: opt.V(0), }) })) }) diff --git a/internal/ui/play/view.go b/internal/ui/play/view.go index 13a0485..eb1a28a 100644 --- a/internal/ui/play/view.go +++ b/internal/ui/play/view.go @@ -2,50 +2,31 @@ package play import ( "fmt" + "time" + "github.com/mokiat/gog" + "github.com/mokiat/gog/opt" + "github.com/mokiat/gomath/dprec" "github.com/mokiat/gomath/sprec" - lackgame "github.com/mokiat/lacking/game" + "github.com/mokiat/lacking/app" + "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/lacking/game/graphics" "github.com/mokiat/lacking/game/physics" - "github.com/mokiat/lacking/game/physics/solver" - "github.com/mokiat/lacking/resource" + "github.com/mokiat/lacking/game/preset" "github.com/mokiat/lacking/ui" co "github.com/mokiat/lacking/ui/component" "github.com/mokiat/lacking/ui/mat" - "github.com/mokiat/lacking/util/optional" - "github.com/mokiat/rally-mka/internal/ecscomp" - "github.com/mokiat/rally-mka/internal/ecssys" - "github.com/mokiat/rally-mka/internal/game" + "github.com/mokiat/lacking/util/metrics" + "github.com/mokiat/lacking/util/shape" "github.com/mokiat/rally-mka/internal/global" "github.com/mokiat/rally-mka/internal/scene" - "github.com/mokiat/rally-mka/internal/scene/car" + "github.com/mokiat/rally-mka/internal/ui/widget" ) const ( - correction = float32(0.9) - anchorDistance = 6.0 - cameraDistance = 12.0 * correction - - carMaxSteeringAngle = 30 - carFrontAcceleration = 145 * 1 - carRearAcceleration = 160 * 1 - - // FIXME: Currently, too much front brakes cause the car - // to straighten. This is due to there being more pressure - // on the outer wheel which causes it to brake more and turn - // the car to neutral orientation. - carFrontDeceleration = 250 - carRearDeceleration = 180 - - suspensionEnabled = true - suspensionStart = float32(-0.25) * correction - suspensionEnd = float32(-0.6) * correction - suspensionWidth = float32(1.0) * correction - suspensionLength = float32(0.15) * correction - suspensionFrequencyHz = float32(4.0) - suspensionDampingRatio = float32(1.2) + cameraDistance = 10.0 ) type ViewData struct { @@ -58,390 +39,406 @@ var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { data = co.GetData[ViewData](props) ) + regionsVisible := co.UseState(func() bool { + return false + }) + + regionsState := co.UseState(func() []metrics.RegionStat { + return nil + }) + + frames := co.UseState(func() *int { + return gog.PtrOf(0) + }).Get() + lifecycle := co.UseState(func() *playLifecycle { return &playLifecycle{ - gameController: context.GameController, - gameData: data.GameData, + window: co.Window(scope), + engine: context.Engine, + gameData: data.GameData, + spansVisible: regionsVisible, + frames: frames, } }).Get() - speedState := co.UseState(func() float32 { - return float32(0.0) + speedState := co.UseState(func() float64 { + return float64(0.0) }) - speed := speedState.Get() co.Once(func() { co.Window(scope).SetCursorVisible(false) }) + co.Defer(func() { + co.Window(scope).SetCursorVisible(true) + }) + co.Once(func() { - context.GameController.OnUpdate = func() { - carSpeed := lifecycle.car.Body().Velocity().Length() * 3.6 - speedState.Set(carSpeed) + var refreshSpeed func() + refreshSpeed = func() { + var velocity dprec.Vec3 + if car := lifecycle.car; car != nil { + velocity = car.Body().Velocity() + } + speedState.Set(velocity.Length() * 3.6) + co.After(100*time.Millisecond, refreshSpeed) } + refreshSpeed() }) - co.Defer(func() { - co.Window(scope).SetCursorVisible(true) + co.Once(func() { + lastTime := time.Now() + var refreshFPS func() + refreshFPS = func() { + currentTime := time.Now() + deltaTime := currentTime.Sub(lastTime) + if deltaTime > 2*time.Second { + fps := float64(*frames) / deltaTime.Seconds() + *frames = 0 + + co.Window(scope).SetTitle(fmt.Sprintf("FPS: %.1f", fps)) + lastTime = currentTime + } + co.After(time.Second, refreshFPS) + } + refreshFPS() + }) + + co.Once(func() { + var refreshSpans func() + refreshSpans = func() { + regionsState.Set(metrics.RegionStats()) + co.After(time.Second, refreshSpans) + } + refreshSpans() }) co.Once(func() { - lifecycle.init() + lifecycle.onCreate() }) co.Defer(func() { - lifecycle.destroy() + lifecycle.onDestroy() }) - return co.New(mat.Container, func() { - co.WithData(mat.ContainerData{ - Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + return co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Essence: lifecycle, + Focusable: opt.V(true), + Focused: opt.V(true), + Padding: ui.Spacing{ + Left: 5, + Right: 5, + Top: 5, + Bottom: 5, + }, + Layout: mat.NewVerticalLayout(mat.VerticalLayoutSettings{ + ContentAlignment: mat.AlignmentLeft, + ContentSpacing: 10, + }), }) + if regionsVisible.Get() { + co.WithChild("regions", co.New(widget.RegionBlock, func() { + co.WithData(widget.RegionBlockData{ + Regions: regionsState.Get(), + }) + co.WithLayoutData(mat.LayoutData{ + GrowHorizontally: true, + }) + })) + } + co.WithChild("speed-label", co.New(mat.Label, func() { co.WithData(mat.LabelData{ Font: co.OpenFont(scope, "mat:///roboto-bold.ttf"), - FontSize: optional.Value(float32(24.0)), - FontColor: optional.Value(ui.White()), - Text: fmt.Sprintf("speed: %.4f", speed), - }) - co.WithLayoutData(mat.LayoutData{ - Left: optional.Value(0), - Top: optional.Value(0), - Width: optional.Value(200), - Height: optional.Value(24), + FontSize: opt.V(float32(24.0)), + FontColor: opt.V(ui.White()), + Text: fmt.Sprintf("Speed: %.4f", speedState.Get()), }) })) }) }) +var _ ui.ElementKeyboardHandler = (*playLifecycle)(nil) +var _ ui.ElementMouseHandler = (*playLifecycle)(nil) + type playLifecycle struct { - gameController *game.Controller - gameData *scene.Data + window *ui.Window + engine *game.Engine + gameData *scene.Data + spansVisible *co.State[bool] + frames *int + scene *game.Scene gfxScene *graphics.Scene physicsScene *physics.Scene ecsScene *ecs.Scene - vehicleSystem *ecssys.VehicleSystem - cameraStandSystem *ecssys.CameraStandSystem + carSystem *preset.CarSystem + cameraStandSystem *preset.FollowCameraSystem - camera *graphics.Camera - car *lackgame.Node + orbitCamera *graphics.Camera + bonnetCamera *graphics.Camera + car *game.Node } -func (h *playLifecycle) init() { - scene := h.gameController.Scene() +func (h *playLifecycle) OnKeyboardEvent(element *ui.Element, event ui.KeyboardEvent) bool { + if event.Code == app.KeyCodeEscape { + element.Window().Close() + return true + } + if event.Code == ui.KeyCodeTab { + if event.Type == ui.KeyboardEventTypeKeyUp { + h.spansVisible.Set(!h.spansVisible.Get()) + } + return true + } + if event.Code == app.KeyCodeX { + if event.Type == app.KeyboardEventTypeKeyDown { + if h.gfxScene.ActiveCamera() == h.orbitCamera { + h.gfxScene.SetActiveCamera(h.bonnetCamera) + } else { + h.gfxScene.SetActiveCamera(h.orbitCamera) + } + } + return true + } + return h.carSystem.OnKeyboardEvent(event) || h.cameraStandSystem.OnKeyboardEvent(event) +} - h.physicsScene = scene.Physics() - h.gfxScene = scene.Graphics() - h.ecsScene = scene.ECS() +func (h *playLifecycle) OnMouseEvent(element *ui.Element, event ui.MouseEvent) bool { + // bounds := element.Bounds() + // viewport := graphics.NewViewport(bounds.X, bounds.Y, bounds.Width, bounds.Height) + // camera := h.gfxScene.ActiveCamera() + // return h.vehicleSystem.OnMouseEvent(event, viewport, camera, h.gfxScene) + return false +} - h.vehicleSystem = h.gameController.VehicleSystem() - h.cameraStandSystem = h.gameController.CameraStandSystem() +func (h *playLifecycle) onCreate() { + h.scene = h.engine.CreateScene() + + h.physicsScene = h.scene.Physics() + h.gfxScene = h.scene.Graphics() + h.ecsScene = h.scene.ECS() + + h.carSystem = preset.NewCarSystem(h.ecsScene, h.window) + h.carSystem.UseDefaults() + h.cameraStandSystem = preset.NewFollowCameraSystem(h.ecsScene, h.window) + h.cameraStandSystem.UseDefaults() + + h.orbitCamera = h.gfxScene.CreateCamera() + h.orbitCamera.SetFoVMode(graphics.FoVModeHorizontalPlus) + h.orbitCamera.SetFoV(sprec.Degrees(66)) + h.orbitCamera.SetAutoExposure(true) + h.orbitCamera.SetExposure(1.0) + h.orbitCamera.SetAutoFocus(false) + h.gfxScene.SetActiveCamera(h.orbitCamera) + + h.bonnetCamera = h.gfxScene.CreateCamera() + h.bonnetCamera.SetFoVMode(graphics.FoVModeHorizontalPlus) + h.bonnetCamera.SetFoV(sprec.Degrees(80)) + h.bonnetCamera.SetAutoExposure(true) + h.bonnetCamera.SetExposure(1.0) + h.bonnetCamera.SetAutoFocus(false) + + h.engine.SubscribePreUpdate(h.onPreUpdate) + h.engine.SubscribePostUpdate(h.onPostUpdate) + h.setupLevel(h.gameData) +} - h.camera = h.gameController.Camera() - h.camera.SetFoVMode(graphics.FoVModeHorizontalPlus) - h.camera.SetFoV(sprec.Degrees(66)) - h.camera.SetAutoExposure(true) - h.camera.SetExposure(1.0) - h.camera.SetAutoFocus(false) +func (h *playLifecycle) onDestroy() { + h.gameData.Dismiss() +} - h.setupLevel(h.gameData.Level) +func (h *playLifecycle) onPreUpdate(engine *game.Engine, scene *game.Scene, elapsedSeconds float64) { + h.carSystem.Update(elapsedSeconds) } -func (h *playLifecycle) destroy() { - h.gameData.Dismiss() +func (h *playLifecycle) onPostUpdate(engine *game.Engine, scene *game.Scene, elapsedSeconds float64) { + h.cameraStandSystem.Update(elapsedSeconds) + *h.frames += 1 } -func (h *playLifecycle) setupLevel(level *resource.Level) { - h.gfxScene.Sky().SetBackgroundColor(sprec.NewVec3(0.0, 0.3, 0.8)) - h.gfxScene.Sky().SetSkybox(level.SkyboxTexture.GFXTexture) - - ambientLight := h.gfxScene.CreateAmbientLight() - ambientLight.SetReflectionTexture(level.AmbientReflectionTexture.GFXTexture) - ambientLight.SetRefractionTexture(level.AmbientRefractionTexture.GFXTexture) - - sunLight := h.gfxScene.CreateDirectionalLight() - sunLight.SetMatrix(sprec.TRSMat4( - sprec.ZeroVec3(), - sprec.QuatProd( - sprec.RotationQuat(sprec.Degrees(-90), sprec.BasisYVec3()), - sprec.RotationQuat(sprec.Degrees(-24), sprec.BasisXVec3()), - ), - sprec.NewVec3(1.0, 1.0, 1.0), - )) - // sunLight.SetRotation(sprec.QuatProd( - // sprec.RotationQuat(sprec.Degrees(225), sprec.BasisYVec3()), - // sprec.RotationQuat(sprec.Degrees(-45), sprec.BasisXVec3()), - // )) - sunLight.SetIntensity(sprec.NewVec3(1.2, 1.2, 1.2)) - - for _, staticMesh := range level.StaticMeshes { - h.gfxScene.CreateMesh(staticMesh.GFXMeshTemplate) - } +func (h *playLifecycle) setupLevel(gameData *scene.Data) { + h.scene.Initialize(gameData.Level) - for _, collisionMesh := range level.CollisionMeshes { - body := h.physicsScene.CreateBody() - body.SetPosition(sprec.ZeroVec3()) - body.SetOrientation(sprec.IdentityQuat()) - body.SetStatic(true) - body.SetRestitutionCoefficient(1.0) - body.SetCollisionShapes([]physics.CollisionShape{collisionMesh}) - } + sunLight := h.gfxScene.CreateDirectionalLight(graphics.DirectionalLightInfo{ + EmitColor: dprec.NewVec3(0.5, 0.5, 0.3), + EmitRange: 16000, // FIXME + }) - for _, staticEntity := range level.StaticEntities { - for _, instance := range staticEntity.Model.MeshInstances { - node := instance.Node - modelMatrix := sprec.Mat4Prod(staticEntity.Matrix, node.AbsoluteMatrix()) + // FIXME: Should not be needed + lightNode := game.NewNode() + lightNode.SetPosition(dprec.NewVec3(-100.0, 100.0, 0.0)) + lightNode.SetRotation(dprec.QuatProd( + dprec.RotationQuat(dprec.Degrees(-90), dprec.BasisYVec3()), + dprec.RotationQuat(dprec.Degrees(-45), dprec.BasisXVec3()), + )) + lightNode.UseTransformation(func(parent, current dprec.Mat4) dprec.Mat4 { + // Remove parent's rotation + parent.M11 = 1.0 + parent.M12 = 0.0 + parent.M13 = 0.0 + parent.M21 = 0.0 + parent.M22 = 1.0 + parent.M23 = 0.0 + parent.M31 = 0.0 + parent.M32 = 0.0 + parent.M33 = 1.0 + return dprec.Mat4Prod(parent, current) + }) + lightNode.SetDirectionalLight(sunLight) + + carInstance := h.scene.CreateModel(game.ModelInfo{ + Name: "SUV", + Definition: gameData.CarModel, + Position: dprec.NewVec3(0.0, 3.0, 0.0), + Rotation: dprec.IdentityQuat(), + Scale: dprec.NewVec3(1.0, 1.0, 1.0), + IsDynamic: true, + }) + carChassisNode := h.setupCarDemo( + carInstance, + dprec.NewVec3(0.0, 2.0, 0.0), + dprec.IdentityQuat(), + true, + ) - gfxMesh := h.gfxScene.CreateMesh(instance.MeshDefinition.GFXMeshTemplate) - gfxMesh.SetMatrix(modelMatrix) + h.car = carChassisNode + h.car.AppendChild(lightNode) - } - } + cameraDeltaNode := game.NewNode() + cameraDeltaNode.SetCamera(h.bonnetCamera) + cameraDeltaNode.SetRotation(dprec.RotationQuat(dprec.Degrees(180), dprec.BasisYVec3())) + cameraDeltaNode.SetPosition(dprec.NewVec3(0.0, 1.0, 0.0)) + carChassisNode.AppendChild(cameraDeltaNode) - carModel := h.gameData.CarModel - targetNode := h.setupCarDemo(carModel, sprec.NewVec3(0.0, 3.0, 0.0)) + orbitCameraNode := game.NewNode() + orbitCameraNode.SetAttachable(h.orbitCamera) + h.scene.Root().AppendChild(orbitCameraNode) + camTarget := h.car cameraEntity := h.ecsScene.CreateEntity() - - // cameraBody := h.physicsScene.CreateBody() - // cameraBody.SetPosition(sprec.NewVec3(0.0, 10.0, -5.0)) - // cameraBody.SetOrientation(sprec.RotationQuat(sprec.Degrees(180), sprec.BasisYVec3())) - // cameraBody.SetMass(10.0) - // cameraBody.SetMomentOfInertia(physics.SymmetricMomentOfInertia(100 * 1 * 1 / 5.0)) - // cameraBody.SetDragFactor(0.0) - // cameraBody.SetAngularDragFactor(0.0) - // cameraBody.SetRestitutionCoefficient(-0.5) - // cameraBody.SetCollisionShapes([]physics.CollisionShape{ - // shape.Placement{ - // Position: sprec.ZeroVec3(), - // Orientation: sprec.IdentityQuat(), - // Shape: shape.NewStaticSphere(1.0), - // }, - // }) - - // ecscomp.SetPhysics(cameraEntity, &ecscomp.Physics{ - // Body: cameraBody, - // }) - // ecscomp.SetHierarchy(cameraEntity, &ecscomp.Hierarchy{ - // Node: hierarchy.NewNode(nil), - // }) - // ecscomp.SetCamera(cameraEntity, &ecscomp.Camera{ - // Camera: h.camera, - // }) - - // carBody := ecscomp.GetPhysics(targetEntity).Body - - // cameraRodConstraint := solver.NewHingedRod(). - // SetLength(5.0). - // SetPrimaryAnchor(sprec.NewVec3(0.0, 0.0, -1)). - // SetSecondaryAnchor(sprec.NewVec3(0.0, 0.0, 0.0)) - // h.physicsScene.CreateDoubleBodyConstraint(carBody, cameraBody, cameraRodConstraint) - - // cameraAxisConstraint := solver.NewMatchAxis(). - // SetPrimaryAxis(sprec.BasisYVec3()). - // SetSecondaryAxis(sprec.BasisYVec3()) - // h.physicsScene.CreateDoubleBodyConstraint(carBody, cameraBody, cameraAxisConstraint) - - // cameraAxis2Constraint := solver.NewMatchAxis(). - // SetPrimaryAxis(sprec.BasisZVec3()). - // SetSecondaryAxis(sprec.InverseVec3(sprec.BasisZVec3())) - // h.physicsScene.CreateDoubleBodyConstraint(carBody, cameraBody, cameraAxis2Constraint) - - ecscomp.SetCameraStand(cameraEntity, &ecscomp.CameraStand{ - Target: targetNode, - Camera: h.camera, - AnchorPosition: sprec.Vec3Sum(targetNode.Body().Position(), sprec.NewVec3(0.0, 0.0, -cameraDistance)), + ecs.AttachComponent(cameraEntity, &preset.NodeComponent{ + Node: orbitCameraNode, + }) + ecs.AttachComponent(cameraEntity, &preset.FollowCameraComponent{ + Target: camTarget, + AnchorPosition: dprec.Vec3Sum(camTarget.Position(), dprec.NewVec3(0.0, 0.0, -cameraDistance)), AnchorDistance: anchorDistance, CameraDistance: cameraDistance, + PitchAngle: dprec.Degrees(-20), + YawAngle: dprec.Degrees(0), + Zoom: 1.0, }) - - h.car = targetNode -} - -func (h *playLifecycle) setupCarDemo(model *resource.Model, position sprec.Vec3) *lackgame.Node { - chasis := car.Chassis(model). - WithName("chasis"). - WithPosition(position). - Build(h.gameController.Scene()) - chasisBody := chasis.Body() - - flWheelRelativePosition := sprec.NewVec3(suspensionWidth, suspensionStart-suspensionLength, 1.07*correction) - flWheel := car.Wheel(model, car.FrontLeftWheelLocation). - WithName("front-left-wheel"). - WithPosition(sprec.Vec3Sum(position, flWheelRelativePosition)). - Build(h.gameController.Scene()) - flWheelBody := flWheel.Body() - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, flWheelBody, - solver.NewMatchTranslation(). - SetPrimaryAnchor(flWheelRelativePosition). - SetIgnoreY(suspensionEnabled), - ) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, flWheelBody, &solver.LimitTranslation{ - MaxY: suspensionStart, - MinY: suspensionEnd, - }) - flRotation := solver.NewMatchAxis(). - SetPrimaryAxis(sprec.BasisXVec3()). - SetSecondaryAxis(sprec.BasisXVec3()) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, flWheelBody, flRotation) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, flWheelBody, &solver.Coilover{ - PrimaryAnchor: flWheelRelativePosition, - FrequencyHz: suspensionFrequencyHz, - DampingRatio: suspensionDampingRatio, + ecs.AttachComponent(cameraEntity, &preset.ControlledComponent{ + Inputs: preset.ControlInputGamepad0 | preset.ControlInputKeyboard, }) - frWheelRelativePosition := sprec.NewVec3(-suspensionWidth, suspensionStart-suspensionLength, 1.07*correction) - frWheel := car.Wheel(model, car.FrontRightWheelLocation). - WithName("front-right-wheel"). - WithPosition(sprec.Vec3Sum(position, frWheelRelativePosition)). - Build(h.gameController.Scene()) - frWheelBody := frWheel.Body() - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, frWheelBody, - solver.NewMatchTranslation(). - SetPrimaryAnchor(frWheelRelativePosition). - SetIgnoreY(suspensionEnabled), - ) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, frWheelBody, &solver.LimitTranslation{ - MaxY: suspensionStart, - MinY: suspensionEnd, - }) - frRotation := solver.NewMatchAxis(). - SetPrimaryAxis(sprec.BasisXVec3()). - SetSecondaryAxis(sprec.BasisXVec3()) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, frWheelBody, frRotation) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, frWheelBody, &solver.Coilover{ - PrimaryAnchor: frWheelRelativePosition, - FrequencyHz: suspensionFrequencyHz, - DampingRatio: suspensionDampingRatio, - }) - - h.physicsScene.CreateDoubleBodyConstraint(flWheelBody, frWheelBody, &Differential{}) - - blWheelRelativePosition := sprec.NewVec3(suspensionWidth, suspensionStart-suspensionLength, -1.56*correction) - blWheel := car.Wheel(model, car.BackLeftWheelLocation). - WithName("back-left-wheel"). - WithPosition(sprec.Vec3Sum(position, blWheelRelativePosition)). - Build(h.gameController.Scene()) - blWheelBody := blWheel.Body() - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, blWheelBody, - solver.NewMatchTranslation(). - SetPrimaryAnchor(blWheelRelativePosition). - SetIgnoreY(suspensionEnabled), - ) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, blWheelBody, &solver.LimitTranslation{ - MaxY: suspensionStart, - MinY: suspensionEnd, - }) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, blWheelBody, - solver.NewMatchAxis(). - SetPrimaryAxis(sprec.BasisXVec3()). - SetSecondaryAxis(sprec.BasisXVec3()), - ) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, blWheelBody, &solver.Coilover{ - PrimaryAnchor: blWheelRelativePosition, - FrequencyHz: suspensionFrequencyHz, - DampingRatio: suspensionDampingRatio, - }) + h.engine.ResetDeltaTime() +} - brWheelRelativePosition := sprec.NewVec3(-suspensionWidth, suspensionStart-suspensionLength, -1.56*correction) - brWheel := car.Wheel(model, car.BackRightWheelLocation). - WithName("back-right-wheel"). - WithPosition(sprec.Vec3Sum(position, brWheelRelativePosition)). - Build(h.gameController.Scene()) - brWheelBody := brWheel.Body() - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, brWheelBody, - solver.NewMatchTranslation(). - SetPrimaryAnchor(brWheelRelativePosition). - SetIgnoreY(suspensionEnabled), - ) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, brWheelBody, &solver.LimitTranslation{ - MaxY: suspensionStart, - MinY: suspensionEnd, - }) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, brWheelBody, solver.NewMatchAxis(). - SetPrimaryAxis(sprec.BasisXVec3()). - SetSecondaryAxis(sprec.BasisXVec3()), - ) - h.physicsScene.CreateDoubleBodyConstraint(chasisBody, brWheelBody, &solver.Coilover{ - PrimaryAnchor: brWheelRelativePosition, - FrequencyHz: suspensionFrequencyHz, - DampingRatio: suspensionDampingRatio, +func (h *playLifecycle) setupCarDemo(model *game.Model, position dprec.Vec3, rotation dprec.Quat, controlled bool) *game.Node { + // TODO: The definition can be instantiated just once and the + // ApplyToModel can be used multiple times on new instances. + + collisionGroup := physics.NewCollisionGroup() + + chassisBodyDef := h.physicsScene.Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ + Mass: 260, + MomentOfInertia: physics.SymmetricMomentOfInertia(208), + DragFactor: 0.0, + AngularDragFactor: 0.0, + RestitutionCoefficient: 0.0, + CollisionGroup: collisionGroup, + CollisionShapes: []physics.CollisionShape{ + shape.NewPlacement[shape.Shape]( + shape.NewTransform( + dprec.NewVec3(0.0, 0.3, -0.4), + dprec.IdentityQuat(), + ), + shape.NewStaticBox(1.6, 1.4, 4.0), + ), + }, }) - h.physicsScene.CreateDoubleBodyConstraint(blWheelBody, brWheelBody, &Differential{}) - - car := h.ecsScene.CreateEntity() - ecscomp.SetVehicle(car, &ecscomp.Vehicle{ - MaxSteeringAngle: sprec.Degrees(carMaxSteeringAngle), - SteeringAngle: sprec.Degrees(0.0), - Acceleration: 0.0, - Deceleration: 0.0, - Chassis: &ecscomp.Chassis{ - Body: chasisBody, - }, - Wheels: []*ecscomp.Wheel{ - { - Body: flWheelBody, - RotationConstraint: flRotation, - AccelerationVelocity: carFrontAcceleration, - DecelerationVelocity: carFrontDeceleration, - }, - { - Body: frWheelBody, - RotationConstraint: frRotation, - AccelerationVelocity: carFrontAcceleration, - DecelerationVelocity: carFrontDeceleration, - }, - { - Body: blWheelBody, - AccelerationVelocity: carRearAcceleration, - DecelerationVelocity: carRearDeceleration, - }, - { - Body: brWheelBody, - AccelerationVelocity: carRearAcceleration, - DecelerationVelocity: carRearDeceleration, - }, + wheelBodyDef := h.physicsScene.Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ + Mass: 20, + MomentOfInertia: physics.SymmetricMomentOfInertia(0.9), + DragFactor: 0.0, + AngularDragFactor: 0.0, + RestitutionCoefficient: 0.0, + CollisionGroup: collisionGroup, + CollisionShapes: []physics.CollisionShape{ + shape.NewPlacement[shape.Shape]( + shape.IdentityTransform(), + shape.NewStaticSphere(0.25), + ), }, }) - ecscomp.SetPlayerControl(car, &ecscomp.PlayerControl{}) - - return chasis -} -var _ physics.DBConstraintSolver = (*Differential)(nil) - -type Differential struct { - physics.NilDBConstraintSolver -} - -func (d *Differential) CalculateImpulses(ctx physics.DBSolverContext) physics.DBImpulseSolution { - firstRotation := sprec.Vec3Dot(ctx.Primary.Orientation().OrientationX(), ctx.Primary.AngularVelocity()) - secondRotation := sprec.Vec3Dot(ctx.Secondary.Orientation().OrientationX(), ctx.Secondary.AngularVelocity()) - - const maxDelta = float32(100.0) - - var firstCorrection sprec.Vec3 - if firstRotation > secondRotation+maxDelta { - firstCorrection = sprec.Vec3Prod(ctx.Primary.Orientation().OrientationX(), secondRotation+maxDelta-firstRotation) + chassisDef := preset.NewChassisDefinition(). + WithNodeName("Chassis"). + WithBodyDefinition(chassisBodyDef) + + frontLeftWheelDef := preset.NewWheelDefinition(). + WithNodeName("FLWheel"). + WithBodyDefinition(wheelBodyDef) + + frontRightWheelDef := preset.NewWheelDefinition(). + WithNodeName("FRWheel"). + WithBodyDefinition(wheelBodyDef) + + rearLeftWheelDef := preset.NewWheelDefinition(). + WithNodeName("BLWheel"). + WithBodyDefinition(wheelBodyDef) + + rearRightWheelDef := preset.NewWheelDefinition(). + WithNodeName("BRWheel"). + WithBodyDefinition(wheelBodyDef) + + frontAxisDef := preset.NewAxisDefinition(). + WithPosition(dprec.NewVec3(0.0, -0.22, 0.96)). + WithWidth(1.8). + WithSuspensionLength(0.23). + WithSpringLength(0.25). + WithSpringFrequency(2.9). + WithSpringDamping(0.8). + WithLeftWheelDefinition(frontLeftWheelDef). + WithRightWheelDefinition(frontRightWheelDef). + WithMaxSteeringAngle(dprec.Degrees(30)). + WithMaxAcceleration(145). + WithMaxBraking(250). + WithReverseRatio(0.5) + + rearAxisDef := preset.NewAxisDefinition(). + WithPosition(dprec.NewVec3(0.0, -0.22, -1.37)). + WithWidth(1.8). + WithSuspensionLength(0.23). + WithSpringLength(0.25). + WithSpringFrequency(2.4). + WithSpringDamping(0.8). + WithLeftWheelDefinition(rearLeftWheelDef). + WithRightWheelDefinition(rearRightWheelDef). + WithMaxSteeringAngle(dprec.Degrees(0)). + WithMaxAcceleration(160). + WithMaxBraking(180). + WithReverseRatio(0.5) + + carDef := preset.NewCarDefinition(). + WithChassisDefinition(chassisDef). + WithAxisDefinition(frontAxisDef). + WithAxisDefinition(rearAxisDef) + + info := preset.CarApplyInfo{ + Model: model, + Position: position, + Rotation: rotation, } - - var secondCorrection sprec.Vec3 - if secondRotation > firstRotation+maxDelta { - secondCorrection = sprec.Vec3Prod(ctx.Secondary.Orientation().OrientationX(), firstRotation+maxDelta-secondRotation) - } - - return physics.DBImpulseSolution{ - Primary: physics.SBImpulseSolution{ - Impulse: sprec.ZeroVec3(), - AngularImpulse: firstCorrection, - }, - Secondary: physics.SBImpulseSolution{ - Impulse: sprec.ZeroVec3(), - AngularImpulse: secondCorrection, - }, + if controlled { + info.Inputs = preset.ControlInputKeyboard | preset.ControlInputMouse | preset.ControlInputGamepad0 } + car := carDef.ApplyToModel(h.scene, info) + return car.Chassis().Node() } diff --git a/internal/ui/widget/home_button.go b/internal/ui/widget/home_button.go index dde3fc2..73ab776 100644 --- a/internal/ui/widget/home_button.go +++ b/internal/ui/widget/home_button.go @@ -1,11 +1,11 @@ package widget import ( + "github.com/mokiat/gog/opt" "github.com/mokiat/gomath/sprec" "github.com/mokiat/lacking/ui" co "github.com/mokiat/lacking/ui/component" "github.com/mokiat/lacking/ui/mat" - "github.com/mokiat/lacking/util/optional" ) type HomeButtonData struct { @@ -54,7 +54,7 @@ var HomeButton = co.Define(func(props co.Properties, scope co.Scope) co.Instance co.WithData(mat.ElementData{ Essence: essence, Padding: padding, - IdealSize: optional.Value( + IdealSize: opt.V( ui.NewSize(int(txtSize.X), int(txtSize.Y)).Grow(padding.Size()), ), }) diff --git a/internal/ui/widget/regions.go b/internal/ui/widget/regions.go new file mode 100644 index 0000000..b0038c2 --- /dev/null +++ b/internal/ui/widget/regions.go @@ -0,0 +1,258 @@ +package widget + +import ( + "fmt" + "strings" + "time" + + "github.com/mokiat/gog/opt" + "github.com/mokiat/gomath/sprec" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" + "github.com/mokiat/lacking/util/metrics" + "golang.org/x/exp/maps" + "golang.org/x/exp/slices" +) + +const ( + regionHeight = 45 +) + +type RegionBlockData struct { + Regions []metrics.RegionStat +} + +var RegionBlock = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + var ( + data = co.GetData[RegionBlockData](props) + ) + + var maxDepth int + for _, region := range data.Regions { + if region.Depth > maxDepth { + maxDepth = region.Depth + } + } + + essence := co.UseState(func() *regionBlockEssence { + return ®ionBlockEssence{ + selectedNodeID: metrics.NilParentID, + placement: make(map[int]regionPlacement), + graph: make(map[int]regionNode), + } + }).Get() + essence.font = co.OpenFont(scope, "mat:///roboto-bold.ttf") + essence.rebuildGraph(data.Regions) + + return co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Essence: essence, + IdealSize: opt.V(ui.Size{ + Width: 200, + Height: maxDepth * regionHeight, + }), + }) + co.WithLayoutData(props.LayoutData()) + }) +}) + +var _ ui.ElementMouseHandler = (*regionBlockEssence)(nil) +var _ ui.ElementRenderHandler = (*regionBlockEssence)(nil) + +type regionBlockEssence struct { + font *ui.Font + fontSize float32 + + selectedNodeID int + graph map[int]regionNode + placement map[int]regionPlacement +} + +func (b *regionBlockEssence) rebuildGraph(stats []metrics.RegionStat) { + slices.SortFunc(stats, func(a, b metrics.RegionStat) bool { + if a.Depth == b.Depth { + return a.ID > b.ID // inversed on purpose + } + return a.Depth < b.Depth + }) + + rootDuration := time.Duration(0) + for _, stat := range stats { + if stat.ParentID == metrics.NilParentID { + rootDuration += stat.Duration + } + } + + rootSamples := 0 + for _, stat := range stats { + if stat.ParentID == metrics.NilParentID { + if stat.Samples > rootSamples { + rootSamples = stat.Samples + } + } + } + + maps.Clear(b.graph) + if rootSamples == 0 { + return + } + b.graph[metrics.NilParentID] = regionNode{ + ParentID: metrics.NilParentID, + ID: metrics.NilParentID, + FirstChild: metrics.NilParentID, + Duration: rootDuration / time.Duration(rootSamples), + DurationRatio: 1.0, + } + for _, stat := range stats { + parentNode := b.graph[stat.ParentID] + node := regionNode{ + ParentID: stat.ParentID, + ID: stat.ID, + NextSibling: parentNode.FirstChild, + FirstChild: metrics.NilParentID, + Name: stripRegionNamespace(stat.Name), + Duration: stat.Duration / time.Duration(rootSamples), + DurationRatio: float32(stat.Duration.Seconds() / rootDuration.Seconds()), + } + parentNode.FirstChild = stat.ID + b.graph[stat.ParentID] = parentNode + b.graph[stat.ID] = node + } +} + +func (b *regionBlockEssence) OnMouseEvent(element *ui.Element, event ui.MouseEvent) bool { + if event.Type == ui.MouseEventTypeDown { + if event.Button == ui.MouseButtonLeft { + position := event.Position.Translate(element.ContentBounds().Position.Inverse()) + for id, placement := range b.placement { + bounds := ui.NewBounds( + int(placement.Left), + int(placement.Top), + int(placement.Width), + int(placement.Height), + ) + if bounds.Contains(position) { + b.selectedNodeID = id + return true + } + } + } + if event.Button == ui.MouseButtonRight { + node := b.graph[b.selectedNodeID] + b.selectedNodeID = node.ParentID + return true + } + } + return false +} + +func (b *regionBlockEssence) OnRender(element *ui.Element, canvas *ui.Canvas) { + node := b.graph[b.selectedNodeID] + maps.Clear(b.placement) + b.renderRegionNode(element, canvas, node) +} + +func (b *regionBlockEssence) renderRegionNode(element *ui.Element, canvas *ui.Canvas, node regionNode) { + if node.Duration == 0 { + return + } + + parentDuration := b.graph[node.ParentID].Duration + parentPlacement, ok := b.placement[node.ParentID] + if !ok { + contentArea := element.ContentBounds() + parentPlacement = regionPlacement{ + Top: 0.0, + Left: 0.0, + Height: 0.0, + Width: float32(contentArea.Width), + FreeLeft: 0.0, + } + parentDuration = node.Duration + } + + if node.ID != metrics.NilParentID { + regionPosition := sprec.Vec2{ + X: parentPlacement.FreeLeft, + Y: parentPlacement.Top + parentPlacement.Height, + } + regionSize := sprec.Vec2{ + X: parentPlacement.Width * float32(node.Duration.Seconds()/parentDuration.Seconds()), + Y: regionHeight, + } + parentPlacement.FreeLeft += regionSize.X + b.placement[node.ParentID] = parentPlacement + + b.placement[node.ID] = regionPlacement{ + Top: regionPosition.Y, + Left: regionPosition.X, + Height: regionSize.Y, + Width: regionSize.X, + FreeLeft: regionPosition.X, + } + + canvas.SetClipRect( + regionPosition.X, + regionPosition.X+regionSize.X, + regionPosition.Y, + regionPosition.Y+regionSize.Y, + ) + canvas.Reset() + canvas.SetStrokeColor(ui.Gray()) + canvas.SetStrokeSizeSeparate(1.0, 0.0) + canvas.Rectangle(regionPosition, regionSize) + canvas.Fill(ui.Fill{ + Color: ui.ColorWithAlpha(ui.Navy(), 196), + }) + canvas.Stroke() + + name := node.Name + duration := node.Duration.Truncate(10 * time.Microsecond) + percentage := node.DurationRatio * 100 + text := fmt.Sprintf("%s\n%s | %.2f%%", name, duration, percentage) + fontSize := float32(20) + textSize := b.font.TextSize(text, fontSize) + textPosition := sprec.Vec2{ + X: regionPosition.X + (regionSize.X-textSize.X)/2.0, + Y: regionPosition.Y + (regionSize.Y-textSize.Y)/2.0, + } + canvas.FillText(text, textPosition, ui.Typography{ + Font: b.font, + Size: fontSize, + Color: ui.White(), + }) + } + + childID := node.FirstChild + for childID != metrics.NilParentID { + childNode := b.graph[childID] + b.renderRegionNode(element, canvas, childNode) + childID = childNode.NextSibling + } +} + +func stripRegionNamespace(name string) string { + if index := strings.IndexRune(name, ':'); index >= 0 { + return name[index+1:] + } + return name +} + +type regionNode struct { + ParentID int + ID int + NextSibling int + FirstChild int + Name string + Duration time.Duration + DurationRatio float32 +} + +type regionPlacement struct { + Top float32 + Left float32 + Height float32 + Width float32 + FreeLeft float32 +} diff --git a/resources/images/barrier.png b/resources/images/barrier.png deleted file mode 100644 index 6c12420..0000000 --- a/resources/images/barrier.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:29ec8fada62dd08243c0505646c4003578dd8cc88d033f2044551e00f0e3f348 -size 12680 diff --git a/resources/images/body.png b/resources/images/body.png deleted file mode 100644 index 9fb0927..0000000 --- a/resources/images/body.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:787c19b2ad0b63671ec641d2157e420088288222f9e43a9c5560e6c0e2e067d4 -size 356456 diff --git a/resources/images/concrete.png b/resources/images/concrete.png deleted file mode 100644 index ab286bf..0000000 --- a/resources/images/concrete.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1bc999a4273c5e794d9817253c652acc214d3e6264cbdd5e81bf5763f4aa3839 -size 87 diff --git a/resources/images/grass.png b/resources/images/grass.png deleted file mode 100644 index 4a7500a..0000000 --- a/resources/images/grass.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1341cd1559516d102fe8793b41340efe532910af173d8095107503c37361e5b4 -size 33796 diff --git a/resources/images/gravel.png b/resources/images/gravel.png deleted file mode 100644 index 8f7dc15..0000000 --- a/resources/images/gravel.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5acbb3af93032713deffac05592af06d425334112300ffd619abc8ebdd10a9ce -size 139719 diff --git a/resources/images/leafy_tree.png b/resources/images/leafy_tree.png deleted file mode 100644 index 97b0108..0000000 --- a/resources/images/leafy_tree.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f45660a15a7dd7c2ceca3e6f9ae7316a287f79a0b2f7cd78297dee94568ebf50 -size 243533 diff --git a/resources/images/road.png b/resources/images/road.png deleted file mode 100644 index 8298dce..0000000 --- a/resources/images/road.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ae18d2bcdd92fc1e13a56704a74152ea9c0a268d6c0fdab58d6a06dbd49ebbca -size 183 diff --git a/resources/images/rusty_metal_02_diff_512.png b/resources/images/rusty_metal_02_diff_512.png deleted file mode 100644 index 43d5021..0000000 --- a/resources/images/rusty_metal_02_diff_512.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6fbd1a250979a415fe756958dc2549296d3f487be55c11f04b8ecc4a024db764 -size 591288 diff --git a/resources/images/wheel.png b/resources/images/wheel.png deleted file mode 100644 index 28c07e5..0000000 --- a/resources/images/wheel.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1d0b33ca04f0bec9e5a7f603dc22dab02755450f3601359c5abbbe5f0acef452 -size 85522 From ebdabc21c188ce0ebb01283ba9966518afb0fff2 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 19 Mar 2023 20:29:47 +0200 Subject: [PATCH 09/40] Add loading widget --- internal/ui/widget/loading.go | 120 ++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 internal/ui/widget/loading.go diff --git a/internal/ui/widget/loading.go b/internal/ui/widget/loading.go new file mode 100644 index 0000000..8cbd1f0 --- /dev/null +++ b/internal/ui/widget/loading.go @@ -0,0 +1,120 @@ +package widget + +import ( + "math" + "time" + + "github.com/mokiat/gog/opt" + "github.com/mokiat/gomath/sprec" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" +) + +var Loading = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + essence := co.UseState(func() *loadingEssence { + return &loadingEssence{ + lastTick: time.Now(), + } + }).Get() + + return co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Essence: essence, + IdealSize: opt.V(ui.NewSize(300, 300)), + }) + co.WithLayoutData(props.LayoutData()) + co.WithChildren(props.Children()) + }) +}) + +var _ ui.ElementRenderHandler = (*loadingEssence)(nil) + +type loadingEssence struct { + lastTick time.Time + greenAngle sprec.Angle + redAngle sprec.Angle +} + +const ( + radius = float32(140.0) + redAngleSpeed = float32(210.0) + greenAngleSpeed = float32(90.0) + anglePrecision = 2 +) + +func (e *loadingEssence) OnRender(element *ui.Element, canvas *ui.Canvas) { + currentTime := time.Now() + elapsedSeconds := float32(currentTime.Sub(e.lastTick).Seconds()) + e.redAngle -= sprec.Degrees(elapsedSeconds * redAngleSpeed) + e.greenAngle += sprec.Degrees(elapsedSeconds * greenAngleSpeed) + e.lastTick = currentTime + + canvas.Push() + bounds := element.ContentBounds() + canvas.Translate(sprec.Vec2{ + X: float32(bounds.Width) / 2.0, + Y: float32(bounds.Height) / 2.0, + }) + + canvas.Reset() + for angle := sprec.Degrees(0); angle < sprec.Degrees(360); angle += sprec.Degrees(anglePrecision) { + distanceToRed := e.angleDistance(e.redAngle, angle).Degrees() + distanceToGreen := e.angleDistance(e.greenAngle, angle).Degrees() + canvas.SetStrokeSize(e.sizeFromDistances(distanceToRed, distanceToGreen)) + canvas.SetStrokeColor(e.colorFromDistances(distanceToRed, distanceToGreen)) + position := sprec.NewVec2( + sprec.Cos(angle)*radius, + -sprec.Sin(angle)*radius, + ) + if angle == 0 { + canvas.MoveTo(position) + } else { + canvas.LineTo(position) + } + } + canvas.CloseLoop() + canvas.Stroke() + + canvas.Pop() + + element.Invalidate() // force redraw +} + +func (e *loadingEssence) angleMod360(angle sprec.Angle) sprec.Angle { + degrees := float64(angle.Degrees()) + degrees = math.Mod(degrees, 360.0) + if degrees < 0.0 { + degrees += 360.0 + } + return sprec.Degrees(float32(degrees)) +} + +func (e *loadingEssence) angleDistance(a, b sprec.Angle) sprec.Angle { + modA := e.angleMod360(a) + modB := e.angleMod360(b) + rotation360 := sprec.Degrees(360.0) + if modA > modB { + forwardDelta := sprec.Abs(modA - modB) + reverseDelta := sprec.Abs(modA - modB - rotation360) + return sprec.Min(forwardDelta, reverseDelta) + } else { + forwardDelta := sprec.Abs(modB - modA) + reverseDelta := sprec.Abs(modB - modA - rotation360) + return sprec.Min(forwardDelta, reverseDelta) + } +} + +func (*loadingEssence) colorFromDistances(redDistance, greenDistance float32) ui.Color { + return ui.RGB( + uint8(2550.0/(redDistance+10.0)), + uint8(2550.0/(greenDistance+10.0)), + 0xFF, + ) +} + +func (*loadingEssence) sizeFromDistances(redDistance, greenDistance float32) float32 { + redSize := 100.0 / (redDistance/4.0 + 5.0) + greenSize := 100.0 / (greenDistance/4.0 + 5.0) + return 3.0 + redSize + greenSize +} From 2bcaa4ae24666339ba65582c10d89789e513e6a5 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 19 Mar 2023 22:26:42 +0200 Subject: [PATCH 10/40] Change to new user interface --- cmd/rallymka/app_cgo.go | 9 +- cmd/rallymka/app_js.go | 8 +- cmd/rallypack/main.go | 25 +- internal/game/data/home.go | 37 +++ internal/game/data/play.go | 31 +++ .../ui/action/{view.go => application.go} | 0 internal/ui/action/data.go | 7 - internal/ui/bootstrap.go | 2 +- internal/ui/controller/application.go | 3 - internal/ui/controller/play.go | 249 ++++++++++++++++++ internal/{ => ui}/global/context.go | 0 internal/ui/model/application.go | 57 ++-- internal/ui/model/home.go | 43 +++ internal/ui/model/loading.go | 45 ++++ internal/ui/model/play.go | 33 +++ internal/ui/play/view.go | 2 +- internal/ui/theme/colors.go | 10 + internal/ui/view/application.go | 41 ++- internal/ui/view/home_screen.go | 233 ++++++++++++++++ .../{intro/view.go => view/intro_screen.go} | 54 ++-- internal/ui/view/loading_screen.go | 61 +++++ internal/ui/view/play_screen.go | 57 ++++ resources/images/syferfontein.hdr | 3 - resources/levels/forest.json | 4 +- resources/levels/highway.json | 3 - resources/levels/home-screen.json | 3 + resources/levels/playground.json | 3 - resources/models/leafy_tree.bin | 3 - resources/models/leafy_tree.gltf | 3 - resources/models/street_lamp.bin | 3 - resources/models/street_lamp.gltf | 3 - resources/models/suv.bin | 3 - resources/models/suv.gltf | 3 - resources/ui/images/background.png | 3 - 34 files changed, 927 insertions(+), 117 deletions(-) create mode 100644 internal/game/data/home.go create mode 100644 internal/game/data/play.go rename internal/ui/action/{view.go => application.go} (100%) delete mode 100644 internal/ui/action/data.go create mode 100644 internal/ui/controller/play.go rename internal/{ => ui}/global/context.go (100%) create mode 100644 internal/ui/model/home.go create mode 100644 internal/ui/model/loading.go create mode 100644 internal/ui/model/play.go create mode 100644 internal/ui/theme/colors.go create mode 100644 internal/ui/view/home_screen.go rename internal/ui/{intro/view.go => view/intro_screen.go} (55%) create mode 100644 internal/ui/view/loading_screen.go create mode 100644 internal/ui/view/play_screen.go delete mode 100644 resources/images/syferfontein.hdr delete mode 100644 resources/levels/highway.json create mode 100644 resources/levels/home-screen.json delete mode 100644 resources/levels/playground.json delete mode 100644 resources/models/leafy_tree.bin delete mode 100644 resources/models/leafy_tree.gltf delete mode 100644 resources/models/street_lamp.bin delete mode 100644 resources/models/street_lamp.gltf delete mode 100644 resources/models/suv.bin delete mode 100644 resources/models/suv.gltf delete mode 100644 resources/ui/images/background.png diff --git a/cmd/rallymka/app_cgo.go b/cmd/rallymka/app_cgo.go index bea0ce3..936bd6d 100644 --- a/cmd/rallymka/app_cgo.go +++ b/cmd/rallymka/app_cgo.go @@ -32,13 +32,12 @@ func runApplication() error { gameui.BootstrapApplication(w, gameController) }) - controller := app.NewLayeredController( - gameController, - uiController, - ) cfg := glapp.NewConfig("Rally MKA", 1024, 576) + cfg.SetFullscreen(false) // TODO: Enable + cfg.SetMaximized(true) // TODO: Remove + cfg.SetMinSize(800, 400) cfg.SetVSync(false) // FIXME: V-sync causes slow resource loading. cfg.SetIcon("resources/icon.png") cfg.SetMaximized(true) - return glapp.Run(cfg, controller) + return glapp.Run(cfg, app.NewLayeredController(gameController, uiController)) } diff --git a/cmd/rallymka/app_js.go b/cmd/rallymka/app_js.go index 1b75045..8abf42c 100644 --- a/cmd/rallymka/app_js.go +++ b/cmd/rallymka/app_js.go @@ -34,10 +34,6 @@ func runApplication() error { cfg := jsapp.NewConfig("screen") cfg.AddGLExtension("EXT_color_buffer_float") - - controller := app.NewLayeredController( - gameController, - uiController, - ) - return jsapp.Run(cfg, controller) + cfg.SetFullscreen(false) + return jsapp.Run(cfg, app.NewLayeredController(gameController, uiController)) } diff --git a/cmd/rallypack/main.go b/cmd/rallypack/main.go index 83aba4a..c5f4ec3 100644 --- a/cmd/rallypack/main.go +++ b/cmd/rallypack/main.go @@ -24,13 +24,20 @@ func runTool() error { texCubeSkyboxReflection := ensureResource(registry, "eb639f55-d6eb-46d7-bd3b-d52fcaa0bc58", "cube_texture", "Skybox Reflection") texCubeSkyboxRefraction := ensureResource(registry, "0815fb89-7ae6-4229-b9e2-59610c4fc6bc", "cube_texture", "Skybox Refraction") + modelHomeScreen := ensureResource(registry, "d1aef712-4c5a-45b8-ba6f-0385e071a8f1", "model", "Content: Home Screen") modelForest := ensureResource(registry, "5f7bd967-dc4a-4252-b1a5-5721cd299d67", "model", "Forest Ride") - modelForest.AddDependency(texCubeSkybox) - modelForest.AddDependency(texCubeSkyboxReflection) - modelForest.AddDependency(texCubeSkyboxRefraction) modelSUV := ensureResource(registry, "eaeb7483-7271-441f-a470-c0a8fa225161", "model", "SUV") + levelHomeScreen := ensureResource(registry, "80dd9049-c183-4d82-b5b2-6f38ca499055", "scene", "Home Screen") + levelHomeScreen.AddDependency(texCubeSkybox) + levelHomeScreen.AddDependency(texCubeSkyboxReflection) + levelHomeScreen.AddDependency(texCubeSkyboxRefraction) + levelHomeScreen.AddDependency(modelHomeScreen) + levelForest := ensureResource(registry, "884e6395-2300-47bb-9916-b80e3dc0e086", "scene", "Forest") + levelForest.AddDependency(texCubeSkybox) + levelForest.AddDependency(texCubeSkyboxReflection) + levelForest.AddDependency(texCubeSkyboxRefraction) levelForest.AddDependency(modelForest) levelForest.AddDependency(modelSUV) @@ -42,7 +49,7 @@ func runTool() error { // Cube Textures packer.Pipeline(func(p *pack.Pipeline) { - srcEquirectangularImage := p.OpenImageResource("resources/images/syferfontein.hdr") + srcEquirectangularImage := p.OpenImageResource("resources/images/sky.hdr") skyboxCubeImage := p.BuildCubeImage( pack.WithFrontImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideFront, srcEquirectangularImage)), pack.WithRearImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideRear, srcEquirectangularImage)), @@ -52,7 +59,7 @@ func runTool() error { pack.WithBottomImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideBottom, srcEquirectangularImage)), ) - smallerSkyboxCubeImage := p.ScaleCubeImage(skyboxCubeImage, 1024) + smallerSkyboxCubeImage := p.ScaleCubeImage(skyboxCubeImage, 256) p.SaveCubeTextureAsset(texCubeSkybox, smallerSkyboxCubeImage, pack.WithFormat(asset.TexelFormatRGBA16F), ) @@ -72,6 +79,10 @@ func runTool() error { // Models packer.Pipeline(func(p *pack.Pipeline) { + p.SaveModelAsset(modelHomeScreen, + p.OpenGLTFResource("resources/models/home-screen.glb"), + ) + p.SaveModelAsset(modelSUV, p.OpenGLTFResource("resources/models/suv.glb"), ) @@ -83,6 +94,10 @@ func runTool() error { // Levels packer.Pipeline(func(p *pack.Pipeline) { + p.SaveLevelAsset(levelHomeScreen, + p.OpenLevelResource("resources/levels/home-screen.json"), + ) + p.SaveLevelAsset(levelForest, p.OpenLevelResource("resources/levels/forest.json"), ) diff --git a/internal/game/data/home.go b/internal/game/data/home.go new file mode 100644 index 0000000..d4bccc1 --- /dev/null +++ b/internal/game/data/home.go @@ -0,0 +1,37 @@ +package data + +import ( + "github.com/mokiat/lacking/game" + "github.com/mokiat/lacking/util/async" +) + +func LoadHomeData(engine *game.Engine, resourceSet *game.ResourceSet) game.Promise[*HomeData] { + scenePromise := resourceSet.OpenSceneByName("Home Screen") + + result := async.NewPromise[*HomeData]() + go func() { + var data HomeData + err := firstErr( + scenePromise.Inject(&data.Scene), + ) + if err != nil { + result.Fail(err) + } else { + result.Deliver(&data) + } + }() + return game.SafePromise(result, engine) +} + +type HomeData struct { + Scene *game.SceneDefinition +} + +func firstErr(errs ...error) error { + for _, err := range errs { + if err != nil { + return err + } + } + return nil +} diff --git a/internal/game/data/play.go b/internal/game/data/play.go new file mode 100644 index 0000000..8ed199c --- /dev/null +++ b/internal/game/data/play.go @@ -0,0 +1,31 @@ +package data + +import ( + "github.com/mokiat/lacking/game" + "github.com/mokiat/lacking/util/async" +) + +func LoadPlayData(engine *game.Engine, resourceSet *game.ResourceSet) game.Promise[*PlayData] { + scenePromise := resourceSet.OpenSceneByName("Forest") + vehiclePromise := resourceSet.OpenModelByName("SUV") + + result := async.NewPromise[*PlayData]() + go func() { + var data PlayData + err := firstErr( + scenePromise.Inject(&data.Scene), + vehiclePromise.Inject(&data.Vehicle), + ) + if err != nil { + result.Fail(err) + } else { + result.Deliver(&data) + } + }() + return game.SafePromise(result, engine) +} + +type PlayData struct { + Scene *game.SceneDefinition + Vehicle *game.ModelDefinition +} diff --git a/internal/ui/action/view.go b/internal/ui/action/application.go similarity index 100% rename from internal/ui/action/view.go rename to internal/ui/action/application.go diff --git a/internal/ui/action/data.go b/internal/ui/action/data.go deleted file mode 100644 index 040fbea..0000000 --- a/internal/ui/action/data.go +++ /dev/null @@ -1,7 +0,0 @@ -package action - -import "github.com/mokiat/rally-mka/internal/scene" - -type SetGameData struct { - GameData *scene.Data -} diff --git a/internal/ui/bootstrap.go b/internal/ui/bootstrap.go index e07b9b0..e9824ed 100644 --- a/internal/ui/bootstrap.go +++ b/internal/ui/bootstrap.go @@ -5,8 +5,8 @@ import ( "github.com/mokiat/lacking/ui" co "github.com/mokiat/lacking/ui/component" "github.com/mokiat/lacking/ui/mvc" - "github.com/mokiat/rally-mka/internal/global" "github.com/mokiat/rally-mka/internal/ui/controller" + "github.com/mokiat/rally-mka/internal/ui/global" "github.com/mokiat/rally-mka/internal/ui/model" "github.com/mokiat/rally-mka/internal/ui/view" ) diff --git a/internal/ui/controller/application.go b/internal/ui/controller/application.go index dffa76c..5c68379 100644 --- a/internal/ui/controller/application.go +++ b/internal/ui/controller/application.go @@ -21,9 +21,6 @@ func (a *Application) Reduce(act mvc.Action) bool { case action.ChangeView: a.appModel.SetActiveView(act.ViewName) return true - case action.SetGameData: - a.appModel.SetGameData(act.GameData) - return true default: return false } diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go new file mode 100644 index 0000000..5c7fb24 --- /dev/null +++ b/internal/ui/controller/play.go @@ -0,0 +1,249 @@ +package controller + +import ( + "github.com/mokiat/gomath/dprec" + "github.com/mokiat/gomath/sprec" + "github.com/mokiat/lacking/app" + "github.com/mokiat/lacking/game" + "github.com/mokiat/lacking/game/ecs" + "github.com/mokiat/lacking/game/graphics" + "github.com/mokiat/lacking/game/physics" + "github.com/mokiat/lacking/game/preset" + "github.com/mokiat/lacking/util/shape" + "github.com/mokiat/rally-mka/internal/game/data" +) + +const ( + anchorDistance = 6.0 + cameraDistance = 10.0 + pitchAngle = 20.0 +) + +func NewPlayController(window app.Window, engine *game.Engine, playData *data.PlayData) *PlayController { + return &PlayController{ + window: window, + engine: engine, + playData: playData, + } +} + +type PlayController struct { + window app.Window + engine *game.Engine + playData *data.PlayData + + preUpdateSubscription *game.UpdateSubscription + postUpdateSubscription *game.UpdateSubscription + + scene *game.Scene + gfxScene *graphics.Scene + physicsScene *physics.Scene + ecsScene *ecs.Scene + + followCameraSystem *preset.FollowCameraSystem + followCamera *graphics.Camera + + carSystem *preset.CarSystem + vehicleDefinition *preset.CarDefinition +} + +func (c *PlayController) Start() { + c.preUpdateSubscription = c.engine.SubscribePreUpdate(c.onPreUpdate) + c.postUpdateSubscription = c.engine.SubscribePostUpdate(c.onPostUpdate) + + c.scene = c.engine.CreateScene() + c.scene.Initialize(c.playData.Scene) + + c.gfxScene = c.scene.Graphics() + c.physicsScene = c.scene.Physics() + c.ecsScene = c.scene.ECS() + + c.vehicleDefinition = c.createVehicleDefinition() + + c.followCameraSystem = preset.NewFollowCameraSystem(c.ecsScene, c.window) + c.followCameraSystem.UseDefaults() + + c.carSystem = preset.NewCarSystem(c.ecsScene, c.window) + c.carSystem.UseDefaults() + + sunLight := c.scene.Graphics().CreateDirectionalLight(graphics.DirectionalLightInfo{ + EmitColor: dprec.NewVec3(0.5, 0.5, 0.3), + EmitRange: 16000, // FIXME + }) + + lightNode := game.NewNode() + lightNode.SetPosition(dprec.NewVec3(-100.0, 100.0, 0.0)) + lightNode.SetRotation(dprec.QuatProd( + dprec.RotationQuat(dprec.Degrees(-90), dprec.BasisYVec3()), + dprec.RotationQuat(dprec.Degrees(-45), dprec.BasisXVec3()), + )) + lightNode.UseTransformation(func(parent, current dprec.Mat4) dprec.Mat4 { + // Remove parent's rotation + parent.M11 = 1.0 + parent.M12 = 0.0 + parent.M13 = 0.0 + parent.M21 = 0.0 + parent.M22 = 1.0 + parent.M23 = 0.0 + parent.M31 = 0.0 + parent.M32 = 0.0 + parent.M33 = 1.0 + return dprec.Mat4Prod(parent, current) + }) + lightNode.SetDirectionalLight(sunLight) + + carInstance := c.scene.CreateModel(game.ModelInfo{ + Name: "SUV", + Definition: c.playData.Vehicle, + Position: dprec.ZeroVec3(), + Rotation: dprec.IdentityQuat(), + Scale: dprec.NewVec3(1.0, 1.0, 1.0), + IsDynamic: true, + }) + vehicle := c.vehicleDefinition.ApplyToModel(c.scene, preset.CarApplyInfo{ + Model: carInstance, + Position: dprec.NewVec3(0.0, 0.5, 0.0), + Rotation: dprec.IdentityQuat(), + Inputs: preset.ControlInputKeyboard | preset.ControlInputMouse | preset.ControlInputGamepad0, + }) + var vehicleNodeComponent *preset.NodeComponent + ecs.FetchComponent(vehicle.Entity(), &vehicleNodeComponent) + vehicleNode := vehicleNodeComponent.Node + vehicleNode.AppendChild(lightNode) // FIXME + + c.followCamera = c.gfxScene.CreateCamera() + c.followCamera.SetFoVMode(graphics.FoVModeHorizontalPlus) + c.followCamera.SetFoV(sprec.Degrees(66)) + c.followCamera.SetAutoExposure(true) + c.followCamera.SetExposure(1.0) + c.followCamera.SetAutoFocus(false) + c.gfxScene.SetActiveCamera(c.followCamera) + + followCameraNode := game.NewNode() + followCameraNode.SetPosition(dprec.NewVec3(0.0, 20.0, 10.0)) + followCameraNode.SetAttachable(c.followCamera) + c.scene.Root().AppendChild(followCameraNode) + + followCameraEntity := c.ecsScene.CreateEntity() + ecs.AttachComponent(followCameraEntity, &preset.NodeComponent{ + Node: followCameraNode, + }) + ecs.AttachComponent(followCameraEntity, &preset.ControlledComponent{ + Inputs: preset.ControlInputKeyboard | preset.ControlInputMouse | preset.ControlInputGamepad0, + }) + ecs.AttachComponent(followCameraEntity, &preset.FollowCameraComponent{ + Target: vehicleNode, + AnchorPosition: dprec.Vec3Sum(vehicleNode.Position(), dprec.NewVec3(0.0, 0.0, -anchorDistance)), + AnchorDistance: anchorDistance, + CameraDistance: cameraDistance, + PitchAngle: dprec.Degrees(-pitchAngle), + YawAngle: dprec.Degrees(0), + Zoom: 1.0, + }) +} + +func (c *PlayController) Stop() { + c.preUpdateSubscription.Delete() + c.postUpdateSubscription.Delete() + c.scene.Delete() +} + +func (c *PlayController) onPreUpdate(engine *game.Engine, scene *game.Scene, elapsedSeconds float64) { + c.carSystem.Update(elapsedSeconds) +} + +func (c *PlayController) onPostUpdate(engine *game.Engine, scene *game.Scene, elapsedSeconds float64) { + c.followCameraSystem.Update(elapsedSeconds) +} + +func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { + collisionGroup := physics.NewCollisionGroup() + + chassisBodyDef := c.physicsScene.Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ + Mass: 260, + MomentOfInertia: physics.SymmetricMomentOfInertia(208), + DragFactor: 0.0, + AngularDragFactor: 0.0, + RestitutionCoefficient: 0.0, + CollisionGroup: collisionGroup, + CollisionShapes: []physics.CollisionShape{ + shape.NewPlacement[shape.Shape]( + shape.NewTransform( + dprec.NewVec3(0.0, 0.3, -0.4), + dprec.IdentityQuat(), + ), + shape.NewStaticBox(1.6, 1.4, 4.0), + ), + }, + }) + + wheelBodyDef := c.physicsScene.Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ + Mass: 20, + MomentOfInertia: physics.SymmetricMomentOfInertia(0.9), + DragFactor: 0.0, + AngularDragFactor: 0.0, + RestitutionCoefficient: 0.0, + CollisionGroup: collisionGroup, + CollisionShapes: []physics.CollisionShape{ + shape.NewPlacement[shape.Shape]( + shape.IdentityTransform(), + shape.NewStaticSphere(0.25), + ), + }, + }) + + chassisDef := preset.NewChassisDefinition(). + WithNodeName("Chassis"). + WithBodyDefinition(chassisBodyDef) + + frontLeftWheelDef := preset.NewWheelDefinition(). + WithNodeName("FLWheel"). + WithBodyDefinition(wheelBodyDef) + + frontRightWheelDef := preset.NewWheelDefinition(). + WithNodeName("FRWheel"). + WithBodyDefinition(wheelBodyDef) + + rearLeftWheelDef := preset.NewWheelDefinition(). + WithNodeName("BLWheel"). + WithBodyDefinition(wheelBodyDef) + + rearRightWheelDef := preset.NewWheelDefinition(). + WithNodeName("BRWheel"). + WithBodyDefinition(wheelBodyDef) + + frontAxisDef := preset.NewAxisDefinition(). + WithPosition(dprec.NewVec3(0.0, -0.22, 0.96)). + WithWidth(1.8). + WithSuspensionLength(0.23). + WithSpringLength(0.25). + WithSpringFrequency(2.9). + WithSpringDamping(0.8). + WithLeftWheelDefinition(frontLeftWheelDef). + WithRightWheelDefinition(frontRightWheelDef). + WithMaxSteeringAngle(dprec.Degrees(30)). + WithMaxAcceleration(145). + WithMaxBraking(250). + WithReverseRatio(0.5) + + rearAxisDef := preset.NewAxisDefinition(). + WithPosition(dprec.NewVec3(0.0, -0.22, -1.37)). + WithWidth(1.8). + WithSuspensionLength(0.23). + WithSpringLength(0.25). + WithSpringFrequency(2.4). + WithSpringDamping(0.8). + WithLeftWheelDefinition(rearLeftWheelDef). + WithRightWheelDefinition(rearRightWheelDef). + WithMaxSteeringAngle(dprec.Degrees(0)). + WithMaxAcceleration(160). + WithMaxBraking(180). + WithReverseRatio(0.5) + + carDef := preset.NewCarDefinition(). + WithChassisDefinition(chassisDef). + WithAxisDefinition(frontAxisDef). + WithAxisDefinition(rearAxisDef) + + return carDef +} diff --git a/internal/global/context.go b/internal/ui/global/context.go similarity index 100% rename from internal/global/context.go rename to internal/ui/global/context.go diff --git a/internal/ui/model/application.go b/internal/ui/model/application.go index 46848a1..37eea90 100644 --- a/internal/ui/model/application.go +++ b/internal/ui/model/application.go @@ -1,51 +1,58 @@ package model -import ( - "github.com/mokiat/lacking/ui/mvc" - "github.com/mokiat/rally-mka/internal/scene" -) - -var ( - ChangeApplication = mvc.NewChange("application") - ChangeActiveView = mvc.SubChange(ChangeApplication, "active_view") - ChangeGameData = mvc.SubChange(ChangeApplication, "game_data") -) +import "github.com/mokiat/lacking/ui/mvc" const ( - ViewNameIntro ViewName = "intro" - ViewNameHome ViewName = "home" - ViewNamePlay ViewName = "play" + ViewNameIntro ViewName = "intro" + ViewNameHome ViewName = "home" + ViewNamePlay ViewName = "play" + ViewNameLoading ViewName = "loading" + ViewNameLicenses ViewName = "licenses" + ViewNameCredits ViewName = "credits" ) -type ViewName string +type ViewName = string + +var ( + ApplicationChange = mvc.NewChange("application") + ApplicationActiveViewChange = mvc.SubChange(ApplicationChange, "active_view") +) func NewApplication() *Application { return &Application{ Observable: mvc.NewObservable(), + loading: newLoading(), + home: newHome(), + play: newPlay(), activeView: ViewNameIntro, } } type Application struct { mvc.Observable + loading *Loading + home *Home + play *Play activeView ViewName - gameData *scene.Data } -func (a *Application) ActiveView() ViewName { - return a.activeView +func (a *Application) Loading() *Loading { + return a.loading } -func (a *Application) SetActiveView(view ViewName) { - a.activeView = view - a.SignalChange(ChangeActiveView) +func (a *Application) Home() *Home { + return a.home +} + +func (a *Application) Play() *Play { + return a.play } -func (a *Application) GameData() *scene.Data { - return a.gameData +func (a *Application) ActiveView() ViewName { + return a.activeView } -func (a *Application) SetGameData(data *scene.Data) { - a.gameData = data - a.SignalChange(ChangeGameData) +func (a *Application) SetActiveView(view ViewName) { + a.activeView = view + a.SignalChange(ApplicationActiveViewChange) } diff --git a/internal/ui/model/home.go b/internal/ui/model/home.go new file mode 100644 index 0000000..8f8929e --- /dev/null +++ b/internal/ui/model/home.go @@ -0,0 +1,43 @@ +package model + +import ( + "github.com/mokiat/lacking/game" + "github.com/mokiat/lacking/ui/mvc" + "github.com/mokiat/rally-mka/internal/game/data" +) + +var ( + HomeChange = mvc.NewChange("home") + HomeDataChange = mvc.SubChange(HomeChange, "data") + HomeSceneChange = mvc.SubChange(HomeChange, "scene") +) + +func newHome() *Home { + return &Home{ + Observable: mvc.NewObservable(), + } +} + +type Home struct { + mvc.Observable + sceneData game.Promise[*data.HomeData] + scene *game.Scene +} + +func (h *Home) Data() game.Promise[*data.HomeData] { + return h.sceneData +} + +func (h *Home) SetData(sceneData game.Promise[*data.HomeData]) { + h.sceneData = sceneData + h.SignalChange(HomeDataChange) +} + +func (h *Home) Scene() *game.Scene { + return h.scene +} + +func (h *Home) SetScene(scene *game.Scene) { + h.scene = scene + h.SignalChange(HomeSceneChange) +} diff --git a/internal/ui/model/loading.go b/internal/ui/model/loading.go new file mode 100644 index 0000000..f115e3a --- /dev/null +++ b/internal/ui/model/loading.go @@ -0,0 +1,45 @@ +package model + +import "github.com/mokiat/lacking/ui/mvc" + +var ( + LoadingChange = mvc.NewChange("loading") + LoadingPromiseChange = mvc.SubChange(LoadingChange, "promise") + LoadingNextViewChange = mvc.SubChange(LoadingChange, "next_view") +) + +type LoadingPromise interface { + OnReady(func()) +} + +func newLoading() *Loading { + return &Loading{ + Observable: mvc.NewObservable(), + promise: nil, + nextViewName: ViewNameIntro, + } +} + +type Loading struct { + mvc.Observable + promise LoadingPromise + nextViewName ViewName +} + +func (l *Loading) Promise() LoadingPromise { + return l.promise +} + +func (l *Loading) SetPromise(promise LoadingPromise) { + l.promise = promise + l.SignalChange(LoadingPromiseChange) +} + +func (l *Loading) NextViewName() ViewName { + return l.nextViewName +} + +func (l *Loading) SetNextViewName(name ViewName) { + l.nextViewName = name + l.SignalChange(LoadingNextViewChange) +} diff --git a/internal/ui/model/play.go b/internal/ui/model/play.go new file mode 100644 index 0000000..56624c6 --- /dev/null +++ b/internal/ui/model/play.go @@ -0,0 +1,33 @@ +package model + +import ( + "github.com/mokiat/lacking/game" + "github.com/mokiat/lacking/ui/mvc" + "github.com/mokiat/rally-mka/internal/game/data" +) + +var ( + PlayChange = mvc.NewChange("play") + PlayDataChange = mvc.SubChange(PlayChange, "data") +) + +func newPlay() *Play { + return &Play{ + Observable: mvc.NewObservable(), + } +} + +type Play struct { + mvc.Observable + sceneData game.Promise[*data.PlayData] + scene *game.Scene +} + +func (h *Play) Data() game.Promise[*data.PlayData] { + return h.sceneData +} + +func (h *Play) SetData(sceneData game.Promise[*data.PlayData]) { + h.sceneData = sceneData + h.SignalChange(PlayDataChange) +} diff --git a/internal/ui/play/view.go b/internal/ui/play/view.go index eb1a28a..a44aa4b 100644 --- a/internal/ui/play/view.go +++ b/internal/ui/play/view.go @@ -19,8 +19,8 @@ import ( "github.com/mokiat/lacking/ui/mat" "github.com/mokiat/lacking/util/metrics" "github.com/mokiat/lacking/util/shape" - "github.com/mokiat/rally-mka/internal/global" "github.com/mokiat/rally-mka/internal/scene" + "github.com/mokiat/rally-mka/internal/ui/global" "github.com/mokiat/rally-mka/internal/ui/widget" ) diff --git a/internal/ui/theme/colors.go b/internal/ui/theme/colors.go new file mode 100644 index 0000000..3c406ef --- /dev/null +++ b/internal/ui/theme/colors.go @@ -0,0 +1,10 @@ +package theme + +import "github.com/mokiat/lacking/ui" + +var ( + PrimaryColor = ui.White() + PrimaryOverColor = ui.RGB(0x00, 0x8a, 0xfb) + PrimaryDownColor = ui.RGB(0x00, 0x49, 0x7f) + PrimaryDisabledColor = ui.RGB(0x75, 0x75, 0x75) +) diff --git a/internal/ui/view/application.go b/internal/ui/view/application.go index 4556f4e..7144189 100644 --- a/internal/ui/view/application.go +++ b/internal/ui/view/application.go @@ -4,10 +4,7 @@ import ( co "github.com/mokiat/lacking/ui/component" "github.com/mokiat/lacking/ui/mat" "github.com/mokiat/lacking/ui/mvc" - "github.com/mokiat/rally-mka/internal/ui/home" - "github.com/mokiat/rally-mka/internal/ui/intro" "github.com/mokiat/rally-mka/internal/ui/model" - "github.com/mokiat/rally-mka/internal/ui/play" ) var Application = co.Define(func(props co.Properties, scope co.Scope) co.Instance { @@ -16,21 +13,43 @@ var Application = co.Define(func(props co.Properties, scope co.Scope) co.Instanc ) mvc.UseBinding(data, func(ch mvc.Change) bool { - return mvc.IsChange(ch, model.ChangeActiveView) + return mvc.IsChange(ch, model.ApplicationActiveViewChange) }) return co.New(mat.Switch, func() { co.WithData(mat.SwitchData{ - ChildKey: string(data.ActiveView()), + ChildKey: data.ActiveView(), }) - co.WithScope(scope) - co.WithChild(string(model.ViewNameIntro), co.New(intro.View, func() {})) - co.WithChild(string(model.ViewNameHome), co.New(home.View, func() {})) - co.WithChild(string(model.ViewNamePlay), co.New(play.View, func() { - co.WithData(play.ViewData{ - GameData: data.GameData(), + co.WithChild(model.ViewNameIntro, co.New(IntroScreen, func() { + co.WithData(IntroScreenData{ + Home: data.Home(), + LoadingModel: data.Loading(), }) })) + co.WithChild(model.ViewNameLoading, co.New(LoadingScreen, func() { + co.WithData(LoadingScreenData{ + Model: data.Loading(), + }) + })) + co.WithChild(model.ViewNameHome, co.New(HomeScreen, func() { + co.WithData(HomeScreenData{ + Loading: data.Loading(), + Home: data.Home(), + Play: data.Play(), + }) + })) + co.WithChild(model.ViewNamePlay, co.New(PlayScreen, func() { + co.WithData(PlayScreenData{ + Play: data.Play(), + }) + })) + // co.WithChild(model.ViewNamePlay, co.New(play.View, func() { + // co.WithData(play.ViewData{ + // GameData: data.GameData(), + // }) + // })) + // co.WithChild(model.ViewNameLicenses, co.New(LicensesScreen, nil)) + // co.WithChild(model.ViewNameCredits, co.New(CreditsScreen, nil)) }) }) diff --git a/internal/ui/view/home_screen.go b/internal/ui/view/home_screen.go new file mode 100644 index 0000000..e6a3d9c --- /dev/null +++ b/internal/ui/view/home_screen.go @@ -0,0 +1,233 @@ +package view + +import ( + "sync" + "time" + + "github.com/mokiat/gog/opt" + "github.com/mokiat/gomath/dprec" + "github.com/mokiat/gomath/sprec" + "github.com/mokiat/lacking/game" + "github.com/mokiat/lacking/game/graphics" + "github.com/mokiat/lacking/log" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" + "github.com/mokiat/lacking/ui/mvc" + "github.com/mokiat/rally-mka/internal/game/data" + "github.com/mokiat/rally-mka/internal/ui/action" + "github.com/mokiat/rally-mka/internal/ui/global" + "github.com/mokiat/rally-mka/internal/ui/model" + "github.com/mokiat/rally-mka/internal/ui/widget" +) + +type HomeScreenData struct { + Loading *model.Loading + Home *model.Home + Play *model.Play +} + +var HomeScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + var ( + globalContext = co.GetContext[global.Context]() + screenData = co.GetData[HomeScreenData](props) + + engine = globalContext.Engine + loadingModel = screenData.Loading + homeModel = screenData.Home + playModel = screenData.Play + ) + + co.Once(func() { + if scene := homeModel.Scene(); scene != nil { + engine.SetActiveScene(homeModel.Scene()) + return + } + + promise := homeModel.Data() + sceneData, err := promise.Get() + if err != nil { + log.Error("ERROR: %v", err) // TODO: Go to error screen + return + } + + scene := engine.CreateScene() + scene.Initialize(sceneData.Scene) + + camera := scene.Graphics().CreateCamera() + camera.SetFoVMode(graphics.FoVModeHorizontalPlus) + camera.SetFoV(sprec.Degrees(66)) + camera.SetAutoExposure(true) + camera.SetExposure(0.01) + camera.SetAutoFocus(false) + camera.SetAutoExposureSpeed(0.1) + scene.Graphics().SetActiveCamera(camera) + + sunLight := scene.Graphics().CreateDirectionalLight(graphics.DirectionalLightInfo{ + EmitColor: dprec.NewVec3(0.5, 0.5, 0.3), + EmitRange: 16000, // FIXME + }) + + lightNode := game.NewNode() + lightNode.SetPosition(dprec.NewVec3(-100.0, 100.0, 0.0)) + lightNode.SetRotation(dprec.QuatProd( + dprec.RotationQuat(dprec.Degrees(-90), dprec.BasisYVec3()), + dprec.RotationQuat(dprec.Degrees(-45), dprec.BasisXVec3()), + )) + // FIXME: This should work out of the box for directional lights + lightNode.UseTransformation(func(parent, current dprec.Mat4) dprec.Mat4 { + // Remove parent's rotation + parent.M11 = 1.0 + parent.M12 = 0.0 + parent.M13 = 0.0 + parent.M21 = 0.0 + parent.M22 = 1.0 + parent.M23 = 0.0 + parent.M31 = 0.0 + parent.M32 = 0.0 + parent.M33 = 1.0 + return dprec.Mat4Prod(parent, current) + }) + lightNode.SetDirectionalLight(sunLight) + + sceneModel := scene.FindModel("Content") + // TODO: Remove manual attachment, once this is configurable from + // the packing. + scene.Root().AppendChild(sceneModel.Root()) + + if cameraNode := scene.Root().FindNode("Camera"); cameraNode != nil { + cameraNode.SetCamera(camera) + cameraNode.AppendChild(lightNode) + } + + if animation := sceneModel.FindAnimation("Action"); animation != nil { + // playback := scene.PlayAnimation(animation) // TODO + startTime := animation.StartTime() + endTime := animation.EndTime() + go func() { + var animMU sync.Mutex + animTime := startTime + for range time.Tick(10 * time.Millisecond) { + animMU.Lock() + animTime += (10 * time.Millisecond).Seconds() * 0.3 + if animTime >= endTime { + animTime -= (endTime - startTime) + } + animMU.Unlock() + co.Schedule(func() { + animMU.Lock() + animation.Apply(animTime) + animMU.Unlock() + }) + } + }() + } + + homeModel.SetScene(scene) + }) + + co.Defer(func() { + engine.SetActiveScene(nil) + }) + + onPlayClicked := func() { + // TODO: Show an intermediate configuration window, where the user + // can select controller type and assitance. + + co.Once(func() { + resourceSet := engine.CreateResourceSet() + promise := data.LoadPlayData(engine, resourceSet) + playModel.SetData(promise) + + loadingModel.SetPromise(promise) + loadingModel.SetNextViewName(model.ViewNamePlay) + mvc.Dispatch(scope, action.ChangeView{ + ViewName: model.ViewNameLoading, + }) + }) + } + + onLicensesClicked := func() { + mvc.Dispatch(scope, action.ChangeView{ + ViewName: model.ViewNameLicenses, + }) + } + + onCreditsClicked := func() { + mvc.Dispatch(scope, action.ChangeView{ + ViewName: model.ViewNameCredits, + }) + } + + onExitClicked := func() { + co.Window(scope).Close() + } + + return co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + + co.WithChild("pane", co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.RGBA(0, 0, 0, 192)), + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + co.WithLayoutData(mat.LayoutData{ + Top: opt.V(0), + Bottom: opt.V(0), + Left: opt.V(0), + Width: opt.V(320), + }) + + co.WithChild("holder", co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Layout: mat.NewVerticalLayout(mat.VerticalLayoutSettings{ + ContentAlignment: mat.AlignmentLeft, + ContentSpacing: 15, + }), + }) + co.WithLayoutData(mat.LayoutData{ + Left: opt.V(75), + VerticalCenter: opt.V(0), + }) + + co.WithChild("play-button", co.New(widget.HomeButton, func() { + co.WithData(widget.HomeButtonData{ + Text: "Play", + }) + co.WithCallbackData(widget.HomeButtonCallbackData{ + ClickListener: onPlayClicked, + }) + })) + + co.WithChild("licenses-button", co.New(widget.HomeButton, func() { + co.WithData(widget.HomeButtonData{ + Text: "Licenses", + }) + co.WithCallbackData(widget.HomeButtonCallbackData{ + ClickListener: onLicensesClicked, + }) + })) + + co.WithChild("credits-button", co.New(widget.HomeButton, func() { + co.WithData(widget.HomeButtonData{ + Text: "Credits", + }) + co.WithCallbackData(widget.HomeButtonCallbackData{ + ClickListener: onCreditsClicked, + }) + })) + + co.WithChild("exit-button", co.New(widget.HomeButton, func() { + co.WithData(widget.HomeButtonData{ + Text: "Exit", + }) + co.WithCallbackData(widget.HomeButtonCallbackData{ + ClickListener: onExitClicked, + }) + })) + })) + })) + }) +}) diff --git a/internal/ui/intro/view.go b/internal/ui/view/intro_screen.go similarity index 55% rename from internal/ui/intro/view.go rename to internal/ui/view/intro_screen.go index b4fe1ff..9dac49d 100644 --- a/internal/ui/intro/view.go +++ b/internal/ui/view/intro_screen.go @@ -1,48 +1,60 @@ -package intro +package view import ( - "fmt" + "time" "github.com/mokiat/gog/opt" "github.com/mokiat/lacking/ui" co "github.com/mokiat/lacking/ui/component" "github.com/mokiat/lacking/ui/mat" "github.com/mokiat/lacking/ui/mvc" - "github.com/mokiat/rally-mka/internal/global" - "github.com/mokiat/rally-mka/internal/scene" + "github.com/mokiat/rally-mka/internal/game/data" "github.com/mokiat/rally-mka/internal/ui/action" + "github.com/mokiat/rally-mka/internal/ui/global" "github.com/mokiat/rally-mka/internal/ui/model" ) -var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { - context := co.GetContext[global.Context]() +type IntroScreenData struct { + Home *model.Home + LoadingModel *model.Loading +} + +var IntroScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + var ( + globalContext = co.GetContext[global.Context]() + screenData = co.GetData[IntroScreenData](props) + + engine = globalContext.Engine + homeModel = screenData.Home + loadingModel = screenData.LoadingModel + ) co.Once(func() { co.Window(scope).SetCursorVisible(false) }) - co.Defer(func() { co.Window(scope).SetCursorVisible(true) }) co.Once(func() { - gameEngine := context.Engine - gameData := scene.NewData( - gameEngine, - gameEngine.CreateResourceSet(), - ) - dataRequest := gameData.Request() - dataRequest.OnSuccess(func(struct{}) { - mvc.Dispatch(scope, action.SetGameData{ - GameData: gameData, - }) + resourceSet := engine.CreateResourceSet() + homeModel.SetData(data.LoadHomeData(engine, resourceSet)) + }) + + co.After(time.Second, func() { + promise := homeModel.Data() + if promise.Ready() { + // TODO: Handle errors!!! mvc.Dispatch(scope, action.ChangeView{ ViewName: model.ViewNameHome, }) - }) - dataRequest.OnError(func(err error) { - panic(fmt.Errorf("failed to load assets: %w", err)) - }) + } else { + loadingModel.SetPromise(promise) + loadingModel.SetNextViewName(model.ViewNameHome) + mvc.Dispatch(scope, action.ChangeView{ + ViewName: model.ViewNameLoading, + }) + } }) return co.New(mat.Container, func() { diff --git a/internal/ui/view/loading_screen.go b/internal/ui/view/loading_screen.go new file mode 100644 index 0000000..1234a4e --- /dev/null +++ b/internal/ui/view/loading_screen.go @@ -0,0 +1,61 @@ +package view + +import ( + "github.com/mokiat/gog/opt" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" + "github.com/mokiat/lacking/ui/mvc" + "github.com/mokiat/rally-mka/internal/ui/action" + "github.com/mokiat/rally-mka/internal/ui/model" + "github.com/mokiat/rally-mka/internal/ui/theme" + "github.com/mokiat/rally-mka/internal/ui/widget" +) + +type LoadingScreenData struct { + Model *model.Loading +} + +var LoadingScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + var ( + screenData = co.GetData[LoadingScreenData](props) + loadingModel = screenData.Model + ) + + co.Once(func() { + loadingModel.Promise().OnReady(func() { + // TODO: Handle errors! + + mvc.Dispatch(scope, action.ChangeView{ + ViewName: loadingModel.NextViewName(), + }) + }) + }) + + return co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.Black()), + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + + co.WithChild("loading", co.New(widget.Loading, func() { + co.WithLayoutData(mat.LayoutData{ + HorizontalCenter: opt.V(0), + VerticalCenter: opt.V(0), + }) + })) + + co.WithChild("info-label", co.New(mat.Label, func() { + co.WithData(mat.LabelData{ + Font: co.OpenFont(scope, "mat:///roboto-italic.ttf"), + FontSize: opt.V(float32(32)), + FontColor: opt.V(theme.PrimaryColor), + Text: "Loading...", + }) + co.WithLayoutData(mat.LayoutData{ + Right: opt.V(40), + Bottom: opt.V(40), + }) + })) + }) +}) diff --git a/internal/ui/view/play_screen.go b/internal/ui/view/play_screen.go new file mode 100644 index 0000000..25298db --- /dev/null +++ b/internal/ui/view/play_screen.go @@ -0,0 +1,57 @@ +package view + +import ( + "fmt" + + "github.com/mokiat/gog/opt" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" + "github.com/mokiat/rally-mka/internal/ui/controller" + "github.com/mokiat/rally-mka/internal/ui/global" + "github.com/mokiat/rally-mka/internal/ui/model" +) + +type PlayScreenData struct { + Play *model.Play +} + +var PlayScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + var ( + context = co.GetContext[global.Context]() + screenData = co.GetData[PlayScreenData](props) + playModel = screenData.Play + ) + + controller := co.UseState(func() *controller.PlayController { + // FIXME: This may actually panic if there is a third party + // waiting / reading on this and it happens to match the Get call. + playData, err := playModel.Data().Get() + if err != nil { + panic(fmt.Errorf("failed to get data: %w", err)) + } + + return controller.NewPlayController( + co.Window(scope).Window, + context.Engine, + playData, + ) + }).Get() + + co.Once(func() { + controller.Start() + }) + + co.Defer(func() { + controller.Stop() + }) + + return co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Essence: controller, + Focusable: opt.V(true), + Focused: opt.V(true), + Layout: ui.NewFillLayout(), + }) + }) +}) diff --git a/resources/images/syferfontein.hdr b/resources/images/syferfontein.hdr deleted file mode 100644 index c32817c..0000000 --- a/resources/images/syferfontein.hdr +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dfe7de9fec8d026e53bd1c966670eac570a322ea79587199e7ca29ec8e49a7ef -size 91708583 diff --git a/resources/levels/forest.json b/resources/levels/forest.json index 7f9e83c..98dede4 100644 --- a/resources/levels/forest.json +++ b/resources/levels/forest.json @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ebb5072497624079efda19573f9ce06f5d228df19e9cb6fb8ac5665aa2f1929 -size 387692 +oid sha256:fb0d35e0150c8cbd3afaaff2d92b035f38c8a956bcddf5bcc289c13c1b1b2955 +size 416 diff --git a/resources/levels/highway.json b/resources/levels/highway.json deleted file mode 100644 index e9333d6..0000000 --- a/resources/levels/highway.json +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:62b0833feee714dd17ff19fb4e0b08be3769d548dfdcfdfebf7bb80511620e1b -size 225868 diff --git a/resources/levels/home-screen.json b/resources/levels/home-screen.json new file mode 100644 index 0000000..9c6d059 --- /dev/null +++ b/resources/levels/home-screen.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baf3e10448bd1a2d159f626996a0bdf9ca0c344aa9e6e54c8cd1cd010572bdaa +size 441 diff --git a/resources/levels/playground.json b/resources/levels/playground.json deleted file mode 100644 index c12e590..0000000 --- a/resources/levels/playground.json +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4a285511acfe39a9c5b140b049c2ebea860b0af929e3e5df7682b5273a74a580 -size 1897 diff --git a/resources/models/leafy_tree.bin b/resources/models/leafy_tree.bin deleted file mode 100644 index 8805a16..0000000 --- a/resources/models/leafy_tree.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1efc907eb9595bf0f8fcad922f45491b180b9af812add1e799f761bc75966359 -size 26116 diff --git a/resources/models/leafy_tree.gltf b/resources/models/leafy_tree.gltf deleted file mode 100644 index 0f49f34..0000000 --- a/resources/models/leafy_tree.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:762ce4b616d57dc020b731da15178e732a301edf2d07a68e7724d48a214aa213 -size 3021 diff --git a/resources/models/street_lamp.bin b/resources/models/street_lamp.bin deleted file mode 100644 index 4686764..0000000 --- a/resources/models/street_lamp.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ea632ad0d198e0bfcd5b0ad8c781eb85d48d0214468877cb550e2544ba518bc4 -size 2436 diff --git a/resources/models/street_lamp.gltf b/resources/models/street_lamp.gltf deleted file mode 100644 index 5d31b83..0000000 --- a/resources/models/street_lamp.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:46de0cc33028a7e1a5003db35935ddcc6ef7c3ea1916ab7eaac704ec55524361 -size 5042 diff --git a/resources/models/suv.bin b/resources/models/suv.bin deleted file mode 100644 index 0287397..0000000 --- a/resources/models/suv.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:58fa892bd2dedc469aa9f4aed38c60de31f2cb0742c43c3991ea5107edf66f62 -size 229288 diff --git a/resources/models/suv.gltf b/resources/models/suv.gltf deleted file mode 100644 index c7aa8c3..0000000 --- a/resources/models/suv.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1a283b59b75ead5d7852a0b2970b0f69b2f592b39b96b227ae60f5da110a7f08 -size 19730 diff --git a/resources/ui/images/background.png b/resources/ui/images/background.png deleted file mode 100644 index 88bf738..0000000 --- a/resources/ui/images/background.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:af9cc71e54b23a54719575488bbbc15bb4d52ad202ac47321f9ca2dad8b66c2c -size 293519 From 6c4caf80fe36d4493db5c9b405fae445ea8c00d3 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Wed, 22 Mar 2023 23:03:53 +0200 Subject: [PATCH 11/40] Add licenses and credits --- .github/workflows/go.yml | 4 +- .gitignore | 1 + Taskfile.yml | 6 +- cmd/rallymka/app_cgo.go | 2 +- go.mod | 25 + go.sum | 710 ++++++++++++++++++++++++++++ internal/scene/data.go | 59 --- internal/ui/home/view.go | 128 ----- internal/ui/view/application.go | 9 +- internal/ui/view/credits_screen.go | 256 ++++++++++ internal/ui/view/licenses_screen.go | 136 ++++++ internal/ui/widget/autoscroll.go | 119 +++++ internal/ui/widget/fade_in.go | 92 ++++ internal/ui/widget/fade_out.go | 92 ++++ internal/ui/widget/loading.go | 14 +- resources/licenses.tmpl | 3 + resources/resources.go | 4 +- resources/{ => ui/images}/icon.png | 0 tools/tools.go | 7 + 19 files changed, 1460 insertions(+), 207 deletions(-) delete mode 100644 internal/scene/data.go delete mode 100644 internal/ui/home/view.go create mode 100644 internal/ui/view/credits_screen.go create mode 100644 internal/ui/view/licenses_screen.go create mode 100644 internal/ui/widget/autoscroll.go create mode 100644 internal/ui/widget/fade_in.go create mode 100644 internal/ui/widget/fade_out.go create mode 100644 resources/licenses.tmpl rename resources/{ => ui/images}/icon.png (100%) create mode 100644 tools/tools.go diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 1941d6c..9a9bea9 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -21,9 +21,9 @@ jobs: uses: actions/checkout@v2 - name: Setup Go - uses: actions/setup-go@v2.1.3 + uses: actions/setup-go@v3 with: - go-version: 1.20 + go-version: 1.19 - name: Install Linux Packages if: matrix.os == 'ubuntu-latest' diff --git a/.gitignore b/.gitignore index 4298873..08034b1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ # Assets /assets +/resources/licenses.txt # VSCode .vscode/ diff --git a/Taskfile.yml b/Taskfile.yml index 0fc8aa1..ff14b1d 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -2,6 +2,10 @@ version: '3' tasks: + licenses: + cmds: + - go run github.com/google/go-licenses report --template ./resources/licenses.tmpl ./cmd/rallymka > ./resources/licenses.txt + pack: cmds: - go run './cmd/rallypack' @@ -9,7 +13,7 @@ tasks: webpack: cmds: - mkdir -p 'assets/web' - - cp 'resources/icon.png' 'assets/web/favicon.png' + - cp 'resources/ui/images/icon.png' 'assets/web/favicon.png' - cp 'resources/web/main.css' 'assets/web/main.css' - cp 'resources/web/main.js' 'assets/web/main.js' - cp 'resources/web/index.html' 'assets/index.html' diff --git a/cmd/rallymka/app_cgo.go b/cmd/rallymka/app_cgo.go index 936bd6d..7b5df3d 100644 --- a/cmd/rallymka/app_cgo.go +++ b/cmd/rallymka/app_cgo.go @@ -37,7 +37,7 @@ func runApplication() error { cfg.SetMaximized(true) // TODO: Remove cfg.SetMinSize(800, 400) cfg.SetVSync(false) // FIXME: V-sync causes slow resource loading. - cfg.SetIcon("resources/icon.png") + cfg.SetIcon("resources/ui/images/icon.png") cfg.SetMaximized(true) return glapp.Run(cfg, app.NewLayeredController(gameController, uiController)) } diff --git a/go.mod b/go.mod index ff0f11d..919eaa8 100644 --- a/go.mod +++ b/go.mod @@ -10,21 +10,46 @@ require ( ) require ( + github.com/emirpasic/gods v1.12.0 // indirect github.com/go-echarts/go-echarts/v2 v2.2.5 // indirect github.com/go-echarts/statsview v0.3.4 // indirect github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 // indirect github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/google/go-licenses v1.6.0 // indirect + github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148 // indirect github.com/google/uuid v1.3.0 // indirect + github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mdouchement/hdr v0.2.4 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mokiat/goexr v0.1.0 // indirect github.com/mokiat/wasmgl v0.5.0 // indirect + github.com/otiai10/copy v1.6.0 // indirect github.com/qmuntal/gltf v0.23.1 // indirect github.com/rs/cors v1.8.3 // indirect + github.com/sergi/go-diff v1.2.0 // indirect + github.com/spf13/cobra v1.6.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/src-d/gcfg v1.4.0 // indirect github.com/x448/float16 v0.8.4 // indirect + github.com/xanzy/ssh-agent v0.2.1 // indirect + go.opencensus.io v0.23.0 // indirect + golang.org/x/crypto v0.1.0 // indirect golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0 // indirect golang.org/x/image v0.6.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.6.0 // indirect golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.5.0 // indirect golang.org/x/text v0.8.0 // indirect + golang.org/x/tools v0.6.0 // indirect + gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect + gopkg.in/src-d/go-git.v4 v4.13.1 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect + k8s.io/klog/v2 v2.80.1 // indirect ) diff --git a/go.sum b/go.sum index 38ae5ce..df03c4a 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,108 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.82.0/go.mod h1:vlKccHJGuFBFufnAnuB08dfEH9Y3H7dzDzRECFdC2TA= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.4.0/go.mod h1:cbaZxyScUhxl7ZAkNWiALgihfP75wS/fUsVNaa1r3vA= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +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= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cinar/indicator v1.2.24/go.mod h1:5eX8f1PG9g3RKSoHsoQxKd8bIN97Cf/gbgxXjihROpI= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-echarts/go-echarts/v2 v2.2.3 h1:H8oPdUpzuiV2K8S4xYZa1JRNjP3U0h7HVqvhPrmCk1A= github.com/go-echarts/go-echarts/v2 v2.2.3/go.mod h1:6TOomEztzGDVDkOSCFBq3ed7xOYfbOqhaBzD0YV771A= github.com/go-echarts/go-echarts/v2 v2.2.5 h1:Jl0gtQa9i/iTZHEsmzf89HoxX2WTGa4K5r0be4qaquE= @@ -12,19 +111,128 @@ github.com/go-echarts/statsview v0.3.4 h1:CCuytRAutdnF901NrR4BzSjHXjUp8OyA3/iopg github.com/go-echarts/statsview v0.3.4/go.mod h1:AehKjL9cTFMeIo5QdV8sQO43vFmfY65X5GMWa3XMciY= github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 h1:zDw5v7qm4yH7N8C8uWd+8Ii9rROdgWxQuGoJ9WDXxfk= github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20220516021902-eb3e265c7661 h1:1bpooddSK2996NWM/1TW59cchQOm9MkoV9DkhSJH1BI= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20220516021902-eb3e265c7661/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b h1:GgabKamyOYguHqHjSkDACcgoPIz3w0Dis/zJ1wyHHHU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-test/deep v1.0.1 h1:UQhStjbkDClarlmv0am7OXXO4/GaPdCGiUiMTvi28sg= github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-licenses v1.6.0 h1:MM+VCXf0slYkpWO0mECvdYDVCxZXIQNal5wqUIXEZ/A= +github.com/google/go-licenses v1.6.0/go.mod h1:Z8jgz2isEhdenOqd/00pq7I4y4k1xVVQJv415otjclo= +github.com/google/go-replayers/httpreplay v1.1.1/go.mod h1:gN9GeLIs7l6NUoVaSSnv2RiqK1NiwAmD0MrKeC9IIks= +github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148 h1:TJsAqW6zLRMDTyGmc9TPosfn9OyVlHs8Hrn3pY6ONSY= +github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148/go.mod h1:rq9F0RSpNKlrefnf6ZYMHKUnEJBCNzf6AcCXMYBeYvE= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210506205249-923b5ab0fc1a/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= +github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= @@ -32,6 +240,8 @@ github.com/mdouchement/hdr v0.2.3 h1:IxzxLgEarv9VPsk17DGIWnhA60MA5ASbekCU8YSFmaY github.com/mdouchement/hdr v0.2.3/go.mod h1:2Yb3JAST9c66wTLZ1vQrejU5sDeOC+ukXVs1pFAUtPo= github.com/mdouchement/hdr v0.2.4 h1:k0ojx7smWvWw8En2BjUnb144j48gAExu5mv+ogNrkTc= github.com/mdouchement/hdr v0.2.4/go.mod h1:uezK2oUhYtoRLkTD0J4ryiOsu/oWLjRXx0I/92mIRmQ= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mokiat/goexr v0.1.0 h1:zoDvzvIjs/GpkxJDVcCP6GafLp1nOuNDef9JL8KSd2A= github.com/mokiat/goexr v0.1.0/go.mod h1:KhERYaXCcY2ZEaTg1/LyzJ7pxdj/q3V1TxgViG86ck4= github.com/mokiat/gomath v0.2.0 h1:ymEIRySh5aVHvqNJfnqJ1aiFNBHzUGy9801oJRLb5mk= @@ -54,94 +264,594 @@ github.com/mokiat/wasmgl v0.4.0 h1:nnVWHibX8VoGXKlDHlwgdD/JmCHSasRQGmQfUlIEnbY= github.com/mokiat/wasmgl v0.4.0/go.mod h1:Ikx+bDVpuq+OkvdDDwKI0pIluqK+kduVHJhRFBmmGrw= github.com/mokiat/wasmgl v0.5.0 h1:LilOv5A2jp2T51pWRb5xZdgl01z6+J9l/AhmdIxHNa0= github.com/mokiat/wasmgl v0.5.0/go.mod h1:Ikx+bDVpuq+OkvdDDwKI0pIluqK+kduVHJhRFBmmGrw= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= +github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/qmuntal/gltf v0.22.0 h1:IwoanftOUqj0X0KECjBN5+dm0SR9s9TDEevgpeej36U= github.com/qmuntal/gltf v0.22.0/go.mod h1:7FR0CRHoOehIgKTBVq/QVyvPn0i6tzp2AdIghb2bPg4= github.com/qmuntal/gltf v0.23.1 h1:R8vkbJXmARbD/oI+Yn3252I2qDQ8mljsc88BJJEdYMY= github.com/qmuntal/gltf v0.23.1/go.mod h1:7FR0CRHoOehIgKTBVq/QVyvPn0i6tzp2AdIghb2bPg4= github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/cobra v1.6.0 h1:42a0n6jwCot1pUmomAp4T7DeMD+20LFv4Q54pxLf2LI= +github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d h1:vtUKgx8dahOomfFzLREU8nSv25YHnTgLBn4rDnWZdU0= golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0 h1:pVgRXcIictcr+lBQIFeiwuwtDIs4eL21OuM9nyAADmo= golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20220617043117-41969df76e82 h1:KpZB5pUSBvrHltNEdK/tw0xlPeD13M6M6aGP32gKqiw= golang.org/x/image v0.0.0-20220617043117-41969df76e82/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY= golang.org/x/image v0.6.0 h1:bR8b5okrPI3g/gyZakLZHeWxAR8Dn5CyxXv1hLH5g/4= golang.org/x/image v0.6.0/go.mod h1:MXLdDR43H7cDJq5GEGXEVeeNhPgi+YYEQ2pC1byI1x0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0 h1:L4ZwwTvKW9gr0ZMS1yrHD9GZhIuVjOBBnaKH+SPQK0Q= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210503080704-8803ae5d1324/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.7.0/go.mod h1:L02bwd0sqlsvRv41G7wGWFCsVNZFv/k1xzGIxeANHGM= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20200229103305-d71f404090bf/go.mod h1:6EVtvAMWMjOBOsTVX0xrjO4A6ULtEgWtAWHzqxDWdJs= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.46.0/go.mod h1:ceL4oozhkAiTID8XMmJBsIxID/9wMXJVVFXPg4ylg3I= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg= +gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE= +gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/strutil v1.1.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/internal/scene/data.go b/internal/scene/data.go deleted file mode 100644 index 0d3e4f7..0000000 --- a/internal/scene/data.go +++ /dev/null @@ -1,59 +0,0 @@ -package scene - -import ( - "github.com/mokiat/lacking/game" - "github.com/mokiat/lacking/util/async" -) - -func NewData(engine *game.Engine, resourceSet *game.ResourceSet) *Data { - return &Data{ - engine: engine, - resourceSet: resourceSet, - } -} - -type Data struct { - engine *game.Engine - resourceSet *game.ResourceSet - - loadPromise async.Promise[struct{}] - - Level *game.SceneDefinition - CarModel *game.ModelDefinition -} - -func (d *Data) Request() game.Promise[struct{}] { - levelPromise := d.resourceSet.OpenSceneByName("Forest") - carPromise := d.resourceSet.OpenModelByName("SUV") - - d.loadPromise = async.NewPromise[struct{}]() - go func() { - err := firstErr( - levelPromise.Inject(&d.Level), - carPromise.Inject(&d.CarModel), - ) - if err != nil { - d.loadPromise.Fail(err) - } else { - d.loadPromise.Deliver(struct{}{}) - } - }() - return game.SafePromise(d.loadPromise, d.engine) -} - -func (d *Data) Dismiss() { - d.resourceSet.Delete() -} - -func (d *Data) IsAvailable() bool { - return d.loadPromise.Ready() -} - -func firstErr(errs ...error) error { - for _, err := range errs { - if err != nil { - return err - } - } - return nil -} diff --git a/internal/ui/home/view.go b/internal/ui/home/view.go deleted file mode 100644 index 12eb8f2..0000000 --- a/internal/ui/home/view.go +++ /dev/null @@ -1,128 +0,0 @@ -package home - -import ( - "github.com/mokiat/gog/opt" - "github.com/mokiat/lacking/log" - "github.com/mokiat/lacking/ui" - co "github.com/mokiat/lacking/ui/component" - "github.com/mokiat/lacking/ui/mat" - "github.com/mokiat/lacking/ui/mvc" - "github.com/mokiat/rally-mka/internal/ui/action" - "github.com/mokiat/rally-mka/internal/ui/model" - "github.com/mokiat/rally-mka/internal/ui/widget" -) - -var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { - onContinueClicked := func() { - log.Info("Continue") - } - - onNewGameClicked := func() { - log.Info("New Game") - mvc.Dispatch(scope, action.ChangeView{ - ViewName: model.ViewNamePlay, - }) - } - - onLoadGameClicked := func() { - log.Info("Load Game") - } - - onOptionsClicked := func() { - log.Info("Options") - } - - return co.New(mat.Container, func() { - co.WithData(mat.ContainerData{ - BackgroundColor: opt.V(ui.Black()), - Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), - }) - - co.WithChild("background-picture", co.New(mat.Picture, func() { - co.WithData(mat.PictureData{ - Image: co.OpenImage(scope, "ui/images/background.png"), - Mode: mat.ImageModeCover, - }) - co.WithLayoutData(mat.LayoutData{ - Top: opt.V(0), - Bottom: opt.V(0), - Left: opt.V(250), - Right: opt.V(0), - }) - })) - - co.WithChild("button-holder", co.New(mat.Container, func() { - co.WithData(mat.ContainerData{ - Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), - }) - co.WithLayoutData(mat.LayoutData{ - Left: opt.V(100), - VerticalCenter: opt.V(0), - Width: opt.V(300), - Height: opt.V(200), - }) - - buttonWidth := opt.V(130) - - co.WithChild("continue-button", co.New(widget.HomeButton, func() { - co.WithData(widget.HomeButtonData{ - Text: "Continue", - }) - co.WithLayoutData(mat.LayoutData{ - Top: opt.V(0), - Left: opt.V(0), - Width: buttonWidth, - Height: opt.V(30), - }) - co.WithCallbackData(widget.HomeButtonCallbackData{ - ClickListener: onContinueClicked, - }) - })) - - co.WithChild("new-game-button", co.New(widget.HomeButton, func() { - co.WithData(widget.HomeButtonData{ - Text: "New Game", - }) - co.WithLayoutData(mat.LayoutData{ - Top: opt.V(50), - Left: opt.V(0), - Width: buttonWidth, - Height: opt.V(30), - }) - co.WithCallbackData(widget.HomeButtonCallbackData{ - ClickListener: onNewGameClicked, - }) - })) - - co.WithChild("load-game-button", co.New(widget.HomeButton, func() { - co.WithData(widget.HomeButtonData{ - Text: "Load Game", - }) - co.WithLayoutData(mat.LayoutData{ - Top: opt.V(100), - Left: opt.V(0), - Width: buttonWidth, - Height: opt.V(30), - }) - co.WithCallbackData(widget.HomeButtonCallbackData{ - ClickListener: onLoadGameClicked, - }) - })) - - co.WithChild("options-button", co.New(widget.HomeButton, func() { - co.WithData(widget.HomeButtonData{ - Text: "Options", - }) - co.WithLayoutData(mat.LayoutData{ - Top: opt.V(150), - Left: opt.V(0), - Width: buttonWidth, - Height: opt.V(30), - }) - co.WithCallbackData(widget.HomeButtonCallbackData{ - ClickListener: onOptionsClicked, - }) - })) - })) - }) -}) diff --git a/internal/ui/view/application.go b/internal/ui/view/application.go index 7144189..44cde63 100644 --- a/internal/ui/view/application.go +++ b/internal/ui/view/application.go @@ -44,12 +44,7 @@ var Application = co.Define(func(props co.Properties, scope co.Scope) co.Instanc Play: data.Play(), }) })) - // co.WithChild(model.ViewNamePlay, co.New(play.View, func() { - // co.WithData(play.ViewData{ - // GameData: data.GameData(), - // }) - // })) - // co.WithChild(model.ViewNameLicenses, co.New(LicensesScreen, nil)) - // co.WithChild(model.ViewNameCredits, co.New(CreditsScreen, nil)) + co.WithChild(model.ViewNameLicenses, co.New(LicensesScreen, nil)) + co.WithChild(model.ViewNameCredits, co.New(CreditsScreen, nil)) }) }) diff --git a/internal/ui/view/credits_screen.go b/internal/ui/view/credits_screen.go new file mode 100644 index 0000000..4f4714e --- /dev/null +++ b/internal/ui/view/credits_screen.go @@ -0,0 +1,256 @@ +package view + +import ( + "fmt" + "time" + + "github.com/mokiat/gog/opt" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" + "github.com/mokiat/lacking/ui/mvc" + "github.com/mokiat/rally-mka/internal/ui/action" + "github.com/mokiat/rally-mka/internal/ui/model" + "github.com/mokiat/rally-mka/internal/ui/theme" + "github.com/mokiat/rally-mka/internal/ui/widget" +) + +var ( + sections []creditsSection +) + +func init() { + sections = append(sections, createSection("ART & PROGRAMMING", + "Momchil Atanasov", + )) + // sections = append(sections, createSection("WRITING & DESIGN", + // "Momchil Atanasov", + // )) + // sections = append(sections, createSection("ART & MODELING", + // "Momchil Atanasov", + // )) + // sections = append(sections, createSection("PROGRAMMING", + // "Momchil Atanasov", + // )) + sections = append(sections, createSection("NOTABLE TOOLING", + "Visual Studio Code", + "Blender", + "Krita", + "GIMP", + "Procreate", + "Aseprite", + "Affinity Designer", + )) + sections = append(sections, createSection("SPECIAL THANKS", + "Go Developers", + "\"GameDev БГ\" Discord Server", + "Open-Source Code Developers", + )) +} + +var CreditsScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + fadeInVisible := co.UseState(func() bool { + return true + }) + + fadeOutVisible := co.UseState(func() bool { + return false + }) + + onBackClicked := func() { + mvc.Dispatch(scope, action.ChangeView{ + ViewName: model.ViewNameHome, + }) + } + + onCreditsFinished := func() { + fadeOutVisible.Set(true) + } + + onFadeInFinished := func() { + fadeInVisible.Set(false) + } + + onFadeOutFinished := func() { + onBackClicked() + } + + return co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.Black()), + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + + co.WithChild("menu-pane", co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.Black()), + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + co.WithLayoutData(mat.LayoutData{ + Top: opt.V(0), + Bottom: opt.V(0), + Left: opt.V(0), + Width: opt.V(200), + }) + + co.WithChild("button", co.New(widget.HomeButton, func() { + co.WithData(widget.HomeButtonData{ + Text: "Back", + }) + co.WithLayoutData(mat.LayoutData{ + HorizontalCenter: opt.V(0), + Bottom: opt.V(100), + }) + co.WithCallbackData(widget.HomeButtonCallbackData{ + ClickListener: onBackClicked, + }) + })) + })) + + co.WithChild("content-pane", co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.RGB(0x11, 0x11, 0x11)), + Layout: mat.NewFillLayout(), + }) + co.WithLayoutData(mat.LayoutData{ + Top: opt.V(0), + Bottom: opt.V(0), + Left: opt.V(200), + Right: opt.V(0), + }) + + co.WithChild("scroll-pane", co.New(widget.AutoScroll, func() { + co.WithData(widget.AutoScrollData{ + Velocity: 50.0, + }) + co.WithCallbackData(widget.AutoScrollCallbackData{ + OnFinished: onCreditsFinished, + }) + + co.WithChild("credits-list", co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Layout: mat.NewVerticalLayout(mat.VerticalLayoutSettings{ + ContentAlignment: mat.AlignmentCenter, + ContentSpacing: 20, + }), + }) + co.WithLayoutData(mat.LayoutData{ + GrowHorizontally: true, + }) + + co.WithChild("header-spacing", co.New(mat.Spacing, func() { + co.WithData(mat.SpacingData{ + Width: 10, + Height: 500, + }) + })) + + co.WithChild("logo-picture", co.New(mat.Picture, func() { + co.WithData(mat.PictureData{ + BackgroundColor: opt.V(ui.Transparent()), + Image: co.OpenImage(scope, "ui/images/logo.png"), + Mode: mat.ImageModeFit, + }) + co.WithLayoutData(mat.LayoutData{ + Width: opt.V(512), + Height: opt.V(128), + HorizontalCenter: opt.V(0), + VerticalCenter: opt.V(0), + }) + })) + + co.WithChild("section-spacing", co.New(mat.Spacing, func() { + co.WithData(mat.SpacingData{ + Width: 10, + Height: 100, + }) + })) + + for i, section := range sections { + co.WithChild(fmt.Sprintf("section-%d-title", i), co.New(mat.Label, func() { + co.WithData(mat.LabelData{ + Font: co.OpenFont(scope, "mat:///roboto-bold.ttf"), + FontSize: opt.V(float32(24)), + FontColor: opt.V(theme.PrimaryColor), + Text: section.Title, + }) + })) + for j, item := range section.Items { + co.WithChild(fmt.Sprintf("section-%d-item-%d", i, j), co.New(mat.Label, func() { + co.WithData(mat.LabelData{ + Font: co.OpenFont(scope, "mat:///roboto-regular.ttf"), + FontSize: opt.V(float32(32)), + FontColor: opt.V(theme.PrimaryOverColor), + Text: item, + }) + })) + } + co.WithChild(fmt.Sprintf("post-section-%d-spacing", i), co.New(mat.Spacing, func() { + co.WithData(mat.SpacingData{ + Width: 10, + Height: 20, + }) + })) + } + + co.WithChild("thank-you-spacing", co.New(mat.Spacing, func() { + co.WithData(mat.SpacingData{ + Width: 10, + Height: 300, + }) + })) + + co.WithChild("thank-you", co.New(mat.Label, func() { + co.WithData(mat.LabelData{ + Font: co.OpenFont(scope, "mat:///roboto-bold.ttf"), + FontSize: opt.V(float32(64.0)), + FontColor: opt.V(ui.White()), + Text: "THANK YOU", + }) + })) + + co.WithChild("footer-spacing", co.New(mat.Spacing, func() { + co.WithData(mat.SpacingData{ + Width: 10, + Height: 300, + }) + })) + })) + })) + + if fadeInVisible.Get() { + co.WithChild("fade-in", co.New(widget.FadeIn, func() { + co.WithData(widget.FadeInData{ + Duration: time.Second, + }) + co.WithCallbackData(widget.FadeInCallbackData{ + OnFinished: onFadeInFinished, + }) + })) + } + + if fadeOutVisible.Get() { + co.WithChild("fade-out", co.New(widget.FadeOut, func() { + co.WithData(widget.FadeOutData{ + Duration: time.Second, + }) + co.WithCallbackData(widget.FadeOutCallbackData{ + OnFinished: onFadeOutFinished, + }) + })) + } + })) + }) +}) + +func createSection(title string, items ...string) creditsSection { + return creditsSection{ + Title: title, + Items: items, + } +} + +type creditsSection struct { + Title string + Items []string +} diff --git a/internal/ui/view/licenses_screen.go b/internal/ui/view/licenses_screen.go new file mode 100644 index 0000000..e319a80 --- /dev/null +++ b/internal/ui/view/licenses_screen.go @@ -0,0 +1,136 @@ +package view + +import ( + "github.com/mokiat/gog/opt" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" + "github.com/mokiat/lacking/ui/mvc" + "github.com/mokiat/rally-mka/internal/ui/action" + "github.com/mokiat/rally-mka/internal/ui/model" + "github.com/mokiat/rally-mka/internal/ui/widget" + "github.com/mokiat/rally-mka/resources" +) + +var LicensesScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + onBackClicked := func() { + mvc.Dispatch(scope, action.ChangeView{ + ViewName: model.ViewNameHome, + }) + } + + return co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.Black()), + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + + co.WithChild("menu-pane", co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.Black()), + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + co.WithLayoutData(mat.LayoutData{ + Top: opt.V(0), + Bottom: opt.V(0), + Left: opt.V(0), + Width: opt.V(200), + }) + + co.WithChild("button", co.New(widget.HomeButton, func() { + co.WithData(widget.HomeButtonData{ // FIXME: This is not HomeButton + Text: "Back", + }) + co.WithLayoutData(mat.LayoutData{ + HorizontalCenter: opt.V(0), + Bottom: opt.V(100), + }) + co.WithCallbackData(widget.HomeButtonCallbackData{ + ClickListener: onBackClicked, + }) + })) + })) + + co.WithChild("content-pane", co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.RGB(0x11, 0x11, 0x11)), + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + co.WithLayoutData(mat.LayoutData{ + Top: opt.V(0), + Bottom: opt.V(0), + Left: opt.V(200), + Right: opt.V(0), + }) + + co.WithChild("title", co.New(mat.Label, func() { + co.WithData(mat.LabelData{ + Font: co.OpenFont(scope, "mat:///roboto-bold.ttf"), + FontSize: opt.V(float32(32)), + FontColor: opt.V(ui.White()), + Text: "Open-Source Licenses", + }) + + co.WithLayoutData(mat.LayoutData{ + Top: opt.V(15), + Height: opt.V(32), + HorizontalCenter: opt.V(0), + }) + })) + + co.WithChild("sub-title", co.New(mat.Label, func() { + co.WithData(mat.LabelData{ + Font: co.OpenFont(scope, "mat:///roboto-italic.ttf"), + FontSize: opt.V(float32(20)), + FontColor: opt.V(ui.White()), + Text: "- scroll to view all -", + }) + + co.WithLayoutData(mat.LayoutData{ + Top: opt.V(50), + Height: opt.V(20), + HorizontalCenter: opt.V(0), + }) + })) + + co.WithChild("license-scroll-pane", co.New(mat.ScrollPane, func() { + co.WithData(mat.ScrollPaneData{ + DisableHorizontal: true, + DisableVertical: false, + }) + + co.WithLayoutData(mat.LayoutData{ + Top: opt.V(80), + Bottom: opt.V(0), + Left: opt.V(0), + Right: opt.V(0), + }) + + co.WithChild("license-holder", co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Padding: ui.Spacing{ + Top: 100, + Bottom: 100, + }, + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + co.WithLayoutData(mat.LayoutData{ + GrowHorizontally: true, + }) + co.WithChild("license-text", co.New(mat.Label, func() { + co.WithData(mat.LabelData{ + Font: co.OpenFont(scope, "mat:///roboto-bold.ttf"), + FontSize: opt.V(float32(16)), + FontColor: opt.V(ui.White()), + Text: resources.Licenses, + }) + co.WithLayoutData(mat.LayoutData{ + HorizontalCenter: opt.V(0), + VerticalCenter: opt.V(0), + }) + })) + })) + })) + })) + }) +}) diff --git a/internal/ui/widget/autoscroll.go b/internal/ui/widget/autoscroll.go new file mode 100644 index 0000000..7bd15c5 --- /dev/null +++ b/internal/ui/widget/autoscroll.go @@ -0,0 +1,119 @@ +package widget + +import ( + "time" + + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" +) + +type AutoScrollData struct { + Velocity float64 +} + +var defaultAutoScrollData = AutoScrollData{ + Velocity: 50.0, +} + +type AutoScrollCallbackData struct { + OnFinished func() +} + +var defaultAutoScrollCallbackData = AutoScrollCallbackData{ + OnFinished: func() {}, +} + +var AutoScroll = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + var ( + data = co.GetOptionalData(props, defaultAutoScrollData) + callbackData = co.GetOptionalCallbackData(props, defaultAutoScrollCallbackData) + ) + + essence := co.UseState(func() *scrollPaneEssence { + return &scrollPaneEssence{ + lastTick: time.Now(), + } + }).Get() + essence.velocity = data.Velocity + essence.onFinished = callbackData.OnFinished + + return co.New(mat.Element, func() { + co.WithData(co.ElementData{ + Essence: essence, + Layout: essence, + }) + co.WithLayoutData(props.LayoutData()) + co.WithChildren(props.Children()) + }) +}) + +var _ ui.Layout = (*scrollPaneEssence)(nil) +var _ ui.ElementRenderHandler = (*scrollPaneEssence)(nil) + +type scrollPaneEssence struct { + offsetY float64 + maxOffsetY float64 + velocity float64 + lastTick time.Time + onFinished func() +} + +func (e *scrollPaneEssence) Apply(element *ui.Element) { + var maxChildSize ui.Size + + contentBounds := element.ContentBounds() + for childElement := element.FirstChild(); childElement != nil; childElement = childElement.RightSibling() { + layoutConfig := mat.ElementLayoutData(childElement) + + childSize := childElement.IdealSize() + if layoutConfig.Width.Specified { + childSize.Width = layoutConfig.Width.Value + } + childSize.Width = maxInt(childSize.Width, contentBounds.Width) + if layoutConfig.Height.Specified { + childSize.Height = layoutConfig.Height.Value + } + + maxChildSize = ui.Size{ + Width: maxInt(maxChildSize.Width, childSize.Width), + Height: maxInt(maxChildSize.Height, childSize.Height), + } + + childElement.SetBounds(ui.Bounds{ + Position: ui.NewPosition(0, -int(e.offsetY)), + Size: childSize, + }) + } + + e.maxOffsetY = float64(maxInt(0, maxChildSize.Height-contentBounds.Height)) + + element.SetIdealSize(ui.Size{ + Width: maxChildSize.Width + element.Padding().Horizontal(), + Height: maxChildSize.Height + element.Padding().Vertical(), + }) +} + +func (e *scrollPaneEssence) OnRender(element *ui.Element, canvas *ui.Canvas) { + currentTime := time.Now() + elapsedSeconds := currentTime.Sub(e.lastTick).Seconds() + e.lastTick = currentTime + + wasEnded := e.offsetY > e.maxOffsetY + e.offsetY += e.velocity * elapsedSeconds + isEnded := e.offsetY > e.maxOffsetY + if isEnded && !wasEnded { + e.onFinished() + } + + // Relayout and redraw + e.Apply(element) + element.Invalidate() +} + +func maxInt(a, b int) int { + if a > b { + return a + } + return b +} diff --git a/internal/ui/widget/fade_in.go b/internal/ui/widget/fade_in.go new file mode 100644 index 0000000..06bc5c8 --- /dev/null +++ b/internal/ui/widget/fade_in.go @@ -0,0 +1,92 @@ +package widget + +import ( + "time" + + "github.com/mokiat/gog/opt" + "github.com/mokiat/gomath/dprec" + "github.com/mokiat/gomath/sprec" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" +) + +type FadeInData struct { + Duration time.Duration +} + +var defaultFadeInData = FadeInData{ + Duration: time.Second, +} + +type FadeInCallbackData struct { + OnFinished func() +} + +var defaultFadeInCallbackData = FadeInCallbackData{ + OnFinished: func() {}, +} + +var FadeIn = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + var ( + data = co.GetOptionalData(props, defaultFadeInData) + callbackData = co.GetOptionalCallbackData(props, defaultFadeInCallbackData) + ) + + essence := co.UseState(func() *fadeInEssence { + return &fadeInEssence{ + lastTick: time.Now(), + } + }).Get() + essence.duration = data.Duration.Seconds() + essence.onFinished = callbackData.OnFinished + + return co.New(mat.Element, func() { + co.WithData(co.ElementData{ + Essence: essence, + Focusable: opt.V(false), + }) + co.WithLayoutData(props.LayoutData()) + co.WithChildren(props.Children()) + }) +}) + +var _ ui.ElementRenderHandler = (*fadeInEssence)(nil) + +type fadeInEssence struct { + opacity float64 + duration float64 + lastTick time.Time + onFinished func() +} + +func (e *fadeInEssence) OnRender(element *ui.Element, canvas *ui.Canvas) { + currentTime := time.Now() + elapsedSeconds := currentTime.Sub(e.lastTick).Seconds() + e.lastTick = currentTime + + wasRunning := e.opacity < 1.0 + e.opacity += elapsedSeconds / e.duration + isRunning := e.opacity < 1.0 + e.opacity = dprec.Clamp(e.opacity, 0.0, 1.0) + + if wasRunning && !isRunning { + e.onFinished() + } + + bounds := element.Bounds() + + canvas.Reset() + canvas.Rectangle( + sprec.NewVec2(0, 0), + sprec.NewVec2(float32(bounds.Width), float32(bounds.Height)), + ) + canvas.Fill(ui.Fill{ + Color: ui.RGBA(0, 0, 0, 255-uint8(e.opacity*255)), + }) + + // Force redraw. + if e.opacity < 1.0 { + element.Invalidate() + } +} diff --git a/internal/ui/widget/fade_out.go b/internal/ui/widget/fade_out.go new file mode 100644 index 0000000..6e4ae97 --- /dev/null +++ b/internal/ui/widget/fade_out.go @@ -0,0 +1,92 @@ +package widget + +import ( + "time" + + "github.com/mokiat/gog/opt" + "github.com/mokiat/gomath/dprec" + "github.com/mokiat/gomath/sprec" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" +) + +type FadeOutData struct { + Duration time.Duration +} + +var defaultFadeOutData = FadeOutData{ + Duration: time.Second, +} + +type FadeOutCallbackData struct { + OnFinished func() +} + +var defaultFadeOutCallbackData = FadeOutCallbackData{ + OnFinished: func() {}, +} + +var FadeOut = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + var ( + data = co.GetOptionalData(props, defaultFadeOutData) + callbackData = co.GetOptionalCallbackData(props, defaultFadeOutCallbackData) + ) + + essence := co.UseState(func() *fadeOutEssence { + return &fadeOutEssence{ + lastTick: time.Now(), + } + }).Get() + essence.duration = data.Duration.Seconds() + essence.onFinished = callbackData.OnFinished + + return co.New(mat.Element, func() { + co.WithData(co.ElementData{ + Essence: essence, + Focusable: opt.V(false), + }) + co.WithLayoutData(props.LayoutData()) + co.WithChildren(props.Children()) + }) +}) + +var _ ui.ElementRenderHandler = (*fadeOutEssence)(nil) + +type fadeOutEssence struct { + opacity float64 + duration float64 + lastTick time.Time + onFinished func() +} + +func (e *fadeOutEssence) OnRender(element *ui.Element, canvas *ui.Canvas) { + currentTime := time.Now() + elapsedSeconds := currentTime.Sub(e.lastTick).Seconds() + e.lastTick = currentTime + + wasRunning := e.opacity < 1.0 + e.opacity += elapsedSeconds / e.duration + isRunning := e.opacity < 1.0 + e.opacity = dprec.Clamp(e.opacity, 0.0, 1.0) + + if wasRunning && !isRunning { + e.onFinished() + } + + bounds := element.Bounds() + + canvas.Reset() + canvas.Rectangle( + sprec.NewVec2(0, 0), + sprec.NewVec2(float32(bounds.Width), float32(bounds.Height)), + ) + canvas.Fill(ui.Fill{ + Color: ui.RGBA(0, 0, 0, uint8(e.opacity*255)), + }) + + // Force redraw. + if e.opacity < 1.0 { + element.Invalidate() + } +} diff --git a/internal/ui/widget/loading.go b/internal/ui/widget/loading.go index 8cbd1f0..cda4cde 100644 --- a/internal/ui/widget/loading.go +++ b/internal/ui/widget/loading.go @@ -36,14 +36,14 @@ type loadingEssence struct { redAngle sprec.Angle } -const ( - radius = float32(140.0) - redAngleSpeed = float32(210.0) - greenAngleSpeed = float32(90.0) - anglePrecision = 2 -) - func (e *loadingEssence) OnRender(element *ui.Element, canvas *ui.Canvas) { + const ( + radius = float32(140.0) + redAngleSpeed = float32(210.0) + greenAngleSpeed = float32(90.0) + anglePrecision = 2 + ) + currentTime := time.Now() elapsedSeconds := float32(currentTime.Sub(e.lastTick).Seconds()) e.redAngle -= sprec.Degrees(elapsedSeconds * redAngleSpeed) diff --git a/resources/licenses.tmpl b/resources/licenses.tmpl new file mode 100644 index 0000000..a70de0b --- /dev/null +++ b/resources/licenses.tmpl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcfb22444f0232b51649b5965921f4e208ef1d6d2f9530d93573465063ad66af +size 157 diff --git a/resources/resources.go b/resources/resources.go index 0f3f4a3..e017c9f 100644 --- a/resources/resources.go +++ b/resources/resources.go @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0abb7122152a9ae55b5e4c23effdbc607b38e31494ce8d99d460ba346a7a03d -size 65 +oid sha256:d73a8ad77e79ec4f9ee2416abf45b75210b892022bf63ba7fb85dd0427d5dc60 +size 110 diff --git a/resources/icon.png b/resources/ui/images/icon.png similarity index 100% rename from resources/icon.png rename to resources/ui/images/icon.png diff --git a/tools/tools.go b/tools/tools.go new file mode 100644 index 0000000..a0d8d68 --- /dev/null +++ b/tools/tools.go @@ -0,0 +1,7 @@ +//go:build tools + +package tools + +import ( + _ "github.com/google/go-licenses" +) From a9d157ad69a4a4b445ee36251f2bc4df5489e84e Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Thu, 30 Mar 2023 00:10:51 +0300 Subject: [PATCH 12/40] Rework home screen --- internal/ui/view/home_screen.go | 267 ++++++++++++++++---------------- 1 file changed, 130 insertions(+), 137 deletions(-) diff --git a/internal/ui/view/home_screen.go b/internal/ui/view/home_screen.go index e6a3d9c..04abb9d 100644 --- a/internal/ui/view/home_screen.go +++ b/internal/ui/view/home_screen.go @@ -1,9 +1,6 @@ package view import ( - "sync" - "time" - "github.com/mokiat/gog/opt" "github.com/mokiat/gomath/dprec" "github.com/mokiat/gomath/sprec" @@ -21,148 +18,45 @@ import ( "github.com/mokiat/rally-mka/internal/ui/widget" ) +var HomeScreen = co.DefineType(&HomeScreenPresenter{}) + type HomeScreenData struct { Loading *model.Loading Home *model.Home Play *model.Play } -var HomeScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance { - var ( - globalContext = co.GetContext[global.Context]() - screenData = co.GetData[HomeScreenData](props) - - engine = globalContext.Engine - loadingModel = screenData.Loading - homeModel = screenData.Home - playModel = screenData.Play - ) - - co.Once(func() { - if scene := homeModel.Scene(); scene != nil { - engine.SetActiveScene(homeModel.Scene()) - return - } - - promise := homeModel.Data() - sceneData, err := promise.Get() - if err != nil { - log.Error("ERROR: %v", err) // TODO: Go to error screen - return - } - - scene := engine.CreateScene() - scene.Initialize(sceneData.Scene) - - camera := scene.Graphics().CreateCamera() - camera.SetFoVMode(graphics.FoVModeHorizontalPlus) - camera.SetFoV(sprec.Degrees(66)) - camera.SetAutoExposure(true) - camera.SetExposure(0.01) - camera.SetAutoFocus(false) - camera.SetAutoExposureSpeed(0.1) - scene.Graphics().SetActiveCamera(camera) - - sunLight := scene.Graphics().CreateDirectionalLight(graphics.DirectionalLightInfo{ - EmitColor: dprec.NewVec3(0.5, 0.5, 0.3), - EmitRange: 16000, // FIXME - }) - - lightNode := game.NewNode() - lightNode.SetPosition(dprec.NewVec3(-100.0, 100.0, 0.0)) - lightNode.SetRotation(dprec.QuatProd( - dprec.RotationQuat(dprec.Degrees(-90), dprec.BasisYVec3()), - dprec.RotationQuat(dprec.Degrees(-45), dprec.BasisXVec3()), - )) - // FIXME: This should work out of the box for directional lights - lightNode.UseTransformation(func(parent, current dprec.Mat4) dprec.Mat4 { - // Remove parent's rotation - parent.M11 = 1.0 - parent.M12 = 0.0 - parent.M13 = 0.0 - parent.M21 = 0.0 - parent.M22 = 1.0 - parent.M23 = 0.0 - parent.M31 = 0.0 - parent.M32 = 0.0 - parent.M33 = 1.0 - return dprec.Mat4Prod(parent, current) - }) - lightNode.SetDirectionalLight(sunLight) - - sceneModel := scene.FindModel("Content") - // TODO: Remove manual attachment, once this is configurable from - // the packing. - scene.Root().AppendChild(sceneModel.Root()) - - if cameraNode := scene.Root().FindNode("Camera"); cameraNode != nil { - cameraNode.SetCamera(camera) - cameraNode.AppendChild(lightNode) - } - - if animation := sceneModel.FindAnimation("Action"); animation != nil { - // playback := scene.PlayAnimation(animation) // TODO - startTime := animation.StartTime() - endTime := animation.EndTime() - go func() { - var animMU sync.Mutex - animTime := startTime - for range time.Tick(10 * time.Millisecond) { - animMU.Lock() - animTime += (10 * time.Millisecond).Seconds() * 0.3 - if animTime >= endTime { - animTime -= (endTime - startTime) - } - animMU.Unlock() - co.Schedule(func() { - animMU.Lock() - animation.Apply(animTime) - animMU.Unlock() - }) - } - }() - } - - homeModel.SetScene(scene) - }) - - co.Defer(func() { - engine.SetActiveScene(nil) - }) - - onPlayClicked := func() { - // TODO: Show an intermediate configuration window, where the user - // can select controller type and assitance. +type HomeScreenPresenter struct { + Scope co.Scope `co:"scope"` + Data HomeScreenData `co:"data"` - co.Once(func() { - resourceSet := engine.CreateResourceSet() - promise := data.LoadPlayData(engine, resourceSet) - playModel.SetData(promise) + engine *game.Engine + loadingModel *model.Loading + homeModel *model.Home + playModel *model.Play +} - loadingModel.SetPromise(promise) - loadingModel.SetNextViewName(model.ViewNamePlay) - mvc.Dispatch(scope, action.ChangeView{ - ViewName: model.ViewNameLoading, - }) - }) - } +func (p *HomeScreenPresenter) OnCreate() { + var globalContext global.Context + co.InjectContext(&globalContext) - onLicensesClicked := func() { - mvc.Dispatch(scope, action.ChangeView{ - ViewName: model.ViewNameLicenses, - }) - } + p.engine = globalContext.Engine + p.loadingModel = p.Data.Loading + p.homeModel = p.Data.Home + p.playModel = p.Data.Play - onCreditsClicked := func() { - mvc.Dispatch(scope, action.ChangeView{ - ViewName: model.ViewNameCredits, - }) + if p.homeModel.Scene() == nil { + p.homeModel.SetScene(p.createScene()) } + scene := p.homeModel.Scene() + p.engine.SetActiveScene(scene) +} - onExitClicked := func() { - co.Window(scope).Close() - } +func (p *HomeScreenPresenter) OnDelete() { + p.engine.SetActiveScene(nil) +} +func (p *HomeScreenPresenter) Render() co.Instance { return co.New(mat.Element, func() { co.WithData(mat.ElementData{ Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), @@ -197,7 +91,7 @@ var HomeScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance Text: "Play", }) co.WithCallbackData(widget.HomeButtonCallbackData{ - ClickListener: onPlayClicked, + ClickListener: p.onPlayClicked, }) })) @@ -206,7 +100,7 @@ var HomeScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance Text: "Licenses", }) co.WithCallbackData(widget.HomeButtonCallbackData{ - ClickListener: onLicensesClicked, + ClickListener: p.onLicensesClicked, }) })) @@ -215,7 +109,7 @@ var HomeScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance Text: "Credits", }) co.WithCallbackData(widget.HomeButtonCallbackData{ - ClickListener: onCreditsClicked, + ClickListener: p.onCreditsClicked, }) })) @@ -224,10 +118,109 @@ var HomeScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance Text: "Exit", }) co.WithCallbackData(widget.HomeButtonCallbackData{ - ClickListener: onExitClicked, + ClickListener: p.onExitClicked, }) })) })) })) }) -}) +} + +func (p *HomeScreenPresenter) createScene() *game.Scene { + promise := p.homeModel.Data() + sceneData, err := promise.Get() + if err != nil { + log.Error("ERROR: %v", err) // TODO: Go to error screen + return nil + } + + scene := p.engine.CreateScene() + scene.Initialize(sceneData.Scene) + + camera := scene.Graphics().CreateCamera() + camera.SetFoVMode(graphics.FoVModeHorizontalPlus) + camera.SetFoV(sprec.Degrees(66)) + camera.SetAutoExposure(true) + camera.SetExposure(0.01) + camera.SetAutoFocus(false) + camera.SetAutoExposureSpeed(0.1) + scene.Graphics().SetActiveCamera(camera) + + sunLight := scene.Graphics().CreateDirectionalLight(graphics.DirectionalLightInfo{ + EmitColor: dprec.NewVec3(0.5, 0.5, 0.3), + EmitRange: 16000, // FIXME + }) + + lightNode := game.NewNode() + lightNode.SetPosition(dprec.NewVec3(-100.0, 100.0, 0.0)) + lightNode.SetRotation(dprec.QuatProd( + dprec.RotationQuat(dprec.Degrees(-90), dprec.BasisYVec3()), + dprec.RotationQuat(dprec.Degrees(-45), dprec.BasisXVec3()), + )) + // FIXME: This should work out of the box for directional lights + lightNode.UseTransformation(func(parent, current dprec.Mat4) dprec.Mat4 { + // Remove parent's rotation + parent.M11 = 1.0 + parent.M12 = 0.0 + parent.M13 = 0.0 + parent.M21 = 0.0 + parent.M22 = 1.0 + parent.M23 = 0.0 + parent.M31 = 0.0 + parent.M32 = 0.0 + parent.M33 = 1.0 + return dprec.Mat4Prod(parent, current) + }) + lightNode.SetDirectionalLight(sunLight) + + sceneModel := scene.FindModel("Content") + // TODO: Remove manual attachment, once this is configurable from + // the packing. + scene.Root().AppendChild(sceneModel.Root()) + + if cameraNode := scene.Root().FindNode("Camera"); cameraNode != nil { + cameraNode.SetCamera(camera) + cameraNode.AppendChild(lightNode) + } + + const animationName = "Action" + // const animationName = "GroundAction" + if animation := sceneModel.FindAnimation(animationName); animation != nil { + playback := scene.PlayAnimation(animation) + playback.SetLoop(true) + playback.SetSpeed(0.3) + } + + return scene +} + +func (p *HomeScreenPresenter) onPlayClicked() { + // TODO: Show an intermediate configuration window, where the user + // can select controller type and assitance. + + resourceSet := p.engine.CreateResourceSet() + promise := data.LoadPlayData(p.engine, resourceSet) + p.playModel.SetData(promise) + + p.loadingModel.SetPromise(promise) + p.loadingModel.SetNextViewName(model.ViewNamePlay) + mvc.Dispatch(p.Scope, action.ChangeView{ + ViewName: model.ViewNameLoading, + }) +} + +func (p *HomeScreenPresenter) onLicensesClicked() { + mvc.Dispatch(p.Scope, action.ChangeView{ + ViewName: model.ViewNameLicenses, + }) +} + +func (p *HomeScreenPresenter) onCreditsClicked() { + mvc.Dispatch(p.Scope, action.ChangeView{ + ViewName: model.ViewNameCredits, + }) +} + +func (p *HomeScreenPresenter) onExitClicked() { + co.Window(p.Scope).Close() +} From 9e23f145a0b15e6cc4700d71f5e8587c51250e5f Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Fri, 31 Mar 2023 23:49:44 +0300 Subject: [PATCH 13/40] Improve play screen --- internal/ui/controller/play.go | 39 +++++- internal/ui/view/credits_screen.go | 15 +-- internal/ui/view/exit_menu.go | 92 +++++++++++++ internal/ui/view/home_screen.go | 24 ++-- internal/ui/view/licenses_screen.go | 6 +- internal/ui/view/play_screen.go | 123 ++++++++++++++---- .../ui/widget/{home_button.go => button.go} | 14 +- internal/ui/widget/speedometer.go | 95 ++++++++++++++ resources/ui/images/needle.png | 3 + resources/ui/images/speedometer.png | 3 + 10 files changed, 348 insertions(+), 66 deletions(-) create mode 100644 internal/ui/view/exit_menu.go rename internal/ui/widget/{home_button.go => button.go} (81%) create mode 100644 internal/ui/widget/speedometer.go create mode 100644 resources/ui/images/needle.png create mode 100644 resources/ui/images/speedometer.png diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index 5c7fb24..e1816fd 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -45,9 +45,11 @@ type PlayController struct { carSystem *preset.CarSystem vehicleDefinition *preset.CarDefinition + vehicle *preset.Car } func (c *PlayController) Start() { + // TODO: These subscriptions should be attached on the scene and/or the physics. c.preUpdateSubscription = c.engine.SubscribePreUpdate(c.onPreUpdate) c.postUpdateSubscription = c.engine.SubscribePostUpdate(c.onPostUpdate) @@ -100,14 +102,14 @@ func (c *PlayController) Start() { Scale: dprec.NewVec3(1.0, 1.0, 1.0), IsDynamic: true, }) - vehicle := c.vehicleDefinition.ApplyToModel(c.scene, preset.CarApplyInfo{ + c.vehicle = c.vehicleDefinition.ApplyToModel(c.scene, preset.CarApplyInfo{ Model: carInstance, Position: dprec.NewVec3(0.0, 0.5, 0.0), Rotation: dprec.IdentityQuat(), Inputs: preset.ControlInputKeyboard | preset.ControlInputMouse | preset.ControlInputGamepad0, }) var vehicleNodeComponent *preset.NodeComponent - ecs.FetchComponent(vehicle.Entity(), &vehicleNodeComponent) + ecs.FetchComponent(c.vehicle.Entity(), &vehicleNodeComponent) vehicleNode := vehicleNodeComponent.Node vehicleNode.AppendChild(lightNode) // FIXME @@ -148,12 +150,41 @@ func (c *PlayController) Stop() { c.scene.Delete() } +func (c *PlayController) Pause() { + c.scene.Freeze() +} + +func (c *PlayController) Resume() { + c.scene.Unfreeze() +} + +func (c *PlayController) Velocity() float64 { + if c.vehicle == nil { + return 0.0 + } + return c.vehicle.Velocity() +} + +func (c *PlayController) Acceleration() float64 { + return 0.0 +} + +func (c *PlayController) Braking() float64 { + return 0.0 +} + func (c *PlayController) onPreUpdate(engine *game.Engine, scene *game.Scene, elapsedSeconds float64) { - c.carSystem.Update(elapsedSeconds) + // TODO: This check will not be necessary if subscription is on Scene. + if !c.scene.IsFrozen() { + c.carSystem.Update(elapsedSeconds) + } } func (c *PlayController) onPostUpdate(engine *game.Engine, scene *game.Scene, elapsedSeconds float64) { - c.followCameraSystem.Update(elapsedSeconds) + // TODO: This check will not be necessary if subscription is on Scene. + if !c.scene.IsFrozen() { + c.followCameraSystem.Update(elapsedSeconds) + } } func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { diff --git a/internal/ui/view/credits_screen.go b/internal/ui/view/credits_screen.go index 4f4714e..5bebb12 100644 --- a/internal/ui/view/credits_screen.go +++ b/internal/ui/view/credits_screen.go @@ -23,15 +23,6 @@ func init() { sections = append(sections, createSection("ART & PROGRAMMING", "Momchil Atanasov", )) - // sections = append(sections, createSection("WRITING & DESIGN", - // "Momchil Atanasov", - // )) - // sections = append(sections, createSection("ART & MODELING", - // "Momchil Atanasov", - // )) - // sections = append(sections, createSection("PROGRAMMING", - // "Momchil Atanasov", - // )) sections = append(sections, createSection("NOTABLE TOOLING", "Visual Studio Code", "Blender", @@ -93,15 +84,15 @@ var CreditsScreen = co.Define(func(props co.Properties, scope co.Scope) co.Insta Width: opt.V(200), }) - co.WithChild("button", co.New(widget.HomeButton, func() { - co.WithData(widget.HomeButtonData{ + co.WithChild("button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ Text: "Back", }) co.WithLayoutData(mat.LayoutData{ HorizontalCenter: opt.V(0), Bottom: opt.V(100), }) - co.WithCallbackData(widget.HomeButtonCallbackData{ + co.WithCallbackData(widget.ButtonCallbackData{ ClickListener: onBackClicked, }) })) diff --git a/internal/ui/view/exit_menu.go b/internal/ui/view/exit_menu.go new file mode 100644 index 0000000..9e0458a --- /dev/null +++ b/internal/ui/view/exit_menu.go @@ -0,0 +1,92 @@ +package view + +import ( + "github.com/mokiat/gog/opt" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" + "github.com/mokiat/rally-mka/internal/ui/widget" +) + +var ExitMenu = co.DefineType(&ExitMenuPresenter{}) + +type ExitMenuCallback struct { + OnContinue func() + OnHome func() + OnExit func() +} + +type ExitMenuPresenter struct { + CallbackData ExitMenuCallback `co:"callback"` +} + +func (p *ExitMenuPresenter) Render() co.Instance { + return co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Essence: p, + Focusable: opt.V(true), + Focused: opt.V(true), + Layout: mat.NewFillLayout(), + }) + + co.WithChild("background", co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.RGBA(0x00, 0x00, 0x00, 0xAA)), + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + + co.WithChild("pane", co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.RGBA(0, 0, 0, 192)), + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + co.WithLayoutData(mat.LayoutData{ + Top: opt.V(0), + Bottom: opt.V(0), + Left: opt.V(0), + Width: opt.V(320), + }) + + co.WithChild("holder", co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Layout: mat.NewVerticalLayout(mat.VerticalLayoutSettings{ + ContentAlignment: mat.AlignmentLeft, + ContentSpacing: 15, + }), + }) + co.WithLayoutData(mat.LayoutData{ + Left: opt.V(75), + VerticalCenter: opt.V(0), + }) + + co.WithChild("continue-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ + Text: "Continue", + }) + co.WithCallbackData(widget.ButtonCallbackData{ + ClickListener: p.CallbackData.OnContinue, + }) + })) + + co.WithChild("home-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ + Text: "Main Menu", + }) + co.WithCallbackData(widget.ButtonCallbackData{ + ClickListener: p.CallbackData.OnHome, + }) + })) + + co.WithChild("exit-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ + Text: "Exit", + }) + co.WithCallbackData(widget.ButtonCallbackData{ + ClickListener: p.CallbackData.OnExit, + }) + })) + })) + })) + })) + }) +} diff --git a/internal/ui/view/home_screen.go b/internal/ui/view/home_screen.go index 04abb9d..696d62d 100644 --- a/internal/ui/view/home_screen.go +++ b/internal/ui/view/home_screen.go @@ -86,38 +86,38 @@ func (p *HomeScreenPresenter) Render() co.Instance { VerticalCenter: opt.V(0), }) - co.WithChild("play-button", co.New(widget.HomeButton, func() { - co.WithData(widget.HomeButtonData{ + co.WithChild("play-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ Text: "Play", }) - co.WithCallbackData(widget.HomeButtonCallbackData{ + co.WithCallbackData(widget.ButtonCallbackData{ ClickListener: p.onPlayClicked, }) })) - co.WithChild("licenses-button", co.New(widget.HomeButton, func() { - co.WithData(widget.HomeButtonData{ + co.WithChild("licenses-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ Text: "Licenses", }) - co.WithCallbackData(widget.HomeButtonCallbackData{ + co.WithCallbackData(widget.ButtonCallbackData{ ClickListener: p.onLicensesClicked, }) })) - co.WithChild("credits-button", co.New(widget.HomeButton, func() { - co.WithData(widget.HomeButtonData{ + co.WithChild("credits-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ Text: "Credits", }) - co.WithCallbackData(widget.HomeButtonCallbackData{ + co.WithCallbackData(widget.ButtonCallbackData{ ClickListener: p.onCreditsClicked, }) })) - co.WithChild("exit-button", co.New(widget.HomeButton, func() { - co.WithData(widget.HomeButtonData{ + co.WithChild("exit-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ Text: "Exit", }) - co.WithCallbackData(widget.HomeButtonCallbackData{ + co.WithCallbackData(widget.ButtonCallbackData{ ClickListener: p.onExitClicked, }) })) diff --git a/internal/ui/view/licenses_screen.go b/internal/ui/view/licenses_screen.go index e319a80..7ee8b89 100644 --- a/internal/ui/view/licenses_screen.go +++ b/internal/ui/view/licenses_screen.go @@ -37,15 +37,15 @@ var LicensesScreen = co.Define(func(props co.Properties, scope co.Scope) co.Inst Width: opt.V(200), }) - co.WithChild("button", co.New(widget.HomeButton, func() { - co.WithData(widget.HomeButtonData{ // FIXME: This is not HomeButton + co.WithChild("button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ Text: "Back", }) co.WithLayoutData(mat.LayoutData{ HorizontalCenter: opt.V(0), Bottom: opt.V(100), }) - co.WithCallbackData(widget.HomeButtonCallbackData{ + co.WithCallbackData(widget.ButtonCallbackData{ ClickListener: onBackClicked, }) })) diff --git a/internal/ui/view/play_screen.go b/internal/ui/view/play_screen.go index 25298db..e771516 100644 --- a/internal/ui/view/play_screen.go +++ b/internal/ui/view/play_screen.go @@ -10,48 +10,115 @@ import ( "github.com/mokiat/rally-mka/internal/ui/controller" "github.com/mokiat/rally-mka/internal/ui/global" "github.com/mokiat/rally-mka/internal/ui/model" + "github.com/mokiat/rally-mka/internal/ui/widget" ) +var PlayScreen = co.DefineType(&PlayScreenPresenter{}) + type PlayScreenData struct { Play *model.Play } -var PlayScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instance { - var ( - context = co.GetContext[global.Context]() - screenData = co.GetData[PlayScreenData](props) - playModel = screenData.Play - ) +type PlayScreenPresenter struct { + Scope co.Scope `co:"scope"` + Data PlayScreenData `co:"data"` - controller := co.UseState(func() *controller.PlayController { - // FIXME: This may actually panic if there is a third party - // waiting / reading on this and it happens to match the Get call. - playData, err := playModel.Data().Get() - if err != nil { - panic(fmt.Errorf("failed to get data: %w", err)) - } + controller *controller.PlayController + + rootElement *ui.Element + exitMenu co.Overlay +} - return controller.NewPlayController( - co.Window(scope).Window, - context.Engine, - playData, - ) - }).Get() +var _ ui.ElementKeyboardHandler = (*PlayScreenPresenter)(nil) - co.Once(func() { - controller.Start() - }) +func (p *PlayScreenPresenter) OnCreate() { + var context global.Context + co.InjectContext(&context) - co.Defer(func() { - controller.Stop() - }) + // FIXME: This may actually panic if there is a third party + // waiting / reading on this and it happens to match the Get call. + playData, err := p.Data.Play.Data().Get() + if err != nil { + panic(fmt.Errorf("failed to get data: %w", err)) + } + p.controller = controller.NewPlayController(co.Window(p.Scope).Window, context.Engine, playData) + p.controller.Start() +} + +func (p *PlayScreenPresenter) OnDelete() { + defer p.controller.Stop() +} + +func (p *PlayScreenPresenter) OnKeyboardEvent(element *ui.Element, event ui.KeyboardEvent) bool { + // TODO: Pass to controller + switch event.Code { + case ui.KeyCodeEscape: + if event.Type == ui.KeyboardEventTypeKeyDown { + p.controller.Pause() + p.exitMenu = co.OpenOverlay(co.New(ExitMenu, func() { + co.WithCallbackData(ExitMenuCallback{ + OnContinue: p.onContinue, + OnHome: p.onGoHome, + OnExit: p.onExit, + }) + })) + } + return true + default: + return false + } +} +func (p *PlayScreenPresenter) Render() co.Instance { return co.New(mat.Element, func() { co.WithData(mat.ElementData{ - Essence: controller, + Reference: &p.rootElement, + Essence: p, Focusable: opt.V(true), Focused: opt.V(true), - Layout: ui.NewFillLayout(), + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), }) + + co.WithChild("dashboard", co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Padding: ui.Spacing{ + Left: 20, + Right: 20, + Bottom: 20, + }, + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + + co.WithLayoutData(mat.LayoutData{ + Left: opt.V(0), + Right: opt.V(0), + Bottom: opt.V(0), + }) + + co.WithChild("speedometer", co.New(widget.Speedometer, func() { + co.WithData(widget.SpeedometerData{ + Source: p.controller, + }) + + co.WithLayoutData(mat.LayoutData{ + Left: opt.V(0), + Bottom: opt.V(0), + }) + })) + })) }) -}) +} + +func (p *PlayScreenPresenter) onContinue() { + p.exitMenu.Close() + p.controller.Resume() + co.Window(p.Scope).GrantFocus(p.rootElement) +} + +func (p *PlayScreenPresenter) onGoHome() { + // TODO: Go to loading and schedule data release +} + +func (p *PlayScreenPresenter) onExit() { + co.Window(p.Scope).Close() +} diff --git a/internal/ui/widget/home_button.go b/internal/ui/widget/button.go similarity index 81% rename from internal/ui/widget/home_button.go rename to internal/ui/widget/button.go index 73ab776..ef71e93 100644 --- a/internal/ui/widget/home_button.go +++ b/internal/ui/widget/button.go @@ -8,26 +8,26 @@ import ( "github.com/mokiat/lacking/ui/mat" ) -type HomeButtonData struct { +type ButtonData struct { Text string } -var defaultHomeButtonData = HomeButtonData{ +var defaultButtonData = ButtonData{ Text: "", } -type HomeButtonCallbackData struct { +type ButtonCallbackData struct { ClickListener mat.ClickListener } -var defaultHomeButtonCallbackData = HomeButtonCallbackData{ +var defaultButtonCallbackData = ButtonCallbackData{ ClickListener: func() {}, } -var HomeButton = co.Define(func(props co.Properties, scope co.Scope) co.Instance { +var Button = co.Define(func(props co.Properties, scope co.Scope) co.Instance { var ( - data = co.GetOptionalData(props, defaultHomeButtonData) - callbackData = co.GetOptionalCallbackData(props, defaultHomeButtonCallbackData) + data = co.GetOptionalData(props, defaultButtonData) + callbackData = co.GetOptionalCallbackData(props, defaultButtonCallbackData) ) essence := co.UseState(func() *homeButtonEssence { diff --git a/internal/ui/widget/speedometer.go b/internal/ui/widget/speedometer.go new file mode 100644 index 0000000..8a83225 --- /dev/null +++ b/internal/ui/widget/speedometer.go @@ -0,0 +1,95 @@ +package widget + +import ( + "github.com/mokiat/gog/opt" + "github.com/mokiat/gomath/sprec" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" +) + +type SpeedometerSource interface { + Velocity() float64 + Acceleration() float64 + Braking() float64 +} + +type SpeedometerData struct { + Source SpeedometerSource +} + +var Speedometer = co.Define(func(props co.Properties, scope co.Scope) co.Instance { + var ( + data = co.GetData[SpeedometerData](props) + ) + + essence := co.UseState(func() *speedometerEssence { + return &speedometerEssence{ + speedometerImage: co.OpenImage(scope, "ui/images/speedometer.png"), + needleImage: co.OpenImage(scope, "ui/images/needle.png"), + source: data.Source, + } + }).Get() + + return co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Essence: essence, + IdealSize: opt.V(ui.NewSize(300, 150)), + }) + co.WithLayoutData(props.LayoutData()) + co.WithChildren(props.Children()) + }) +}) + +var _ ui.ElementRenderHandler = (*speedometerEssence)(nil) + +type speedometerEssence struct { + speedometerImage *ui.Image + needleImage *ui.Image + source SpeedometerSource +} + +func (e *speedometerEssence) OnRender(element *ui.Element, canvas *ui.Canvas) { + const ( + maxVelocity = 200.0 // TODO: Configurable + ) + + bounds := element.Bounds() + area := sprec.Vec2{ + X: float32(bounds.Width), + Y: float32(bounds.Height), + } + + canvas.Push() + canvas.Reset() + canvas.Rectangle(sprec.ZeroVec2(), area) + canvas.Fill(ui.Fill{ + Rule: ui.FillRuleSimple, + Color: ui.White(), + Image: e.speedometerImage, + ImageOffset: sprec.ZeroVec2(), + ImageSize: area, + }) + + needleSize := sprec.NewVec2(34.0, 150.0) + canvas.Translate(sprec.NewVec2( + area.X/2.0, + area.Y-20, + )) + velocity := e.source.Velocity() * 3.6 // from m/s to km/h + + canvas.Rotate(sprec.Degrees(-90 + 180.0*(float32(velocity/maxVelocity)))) + canvas.Reset() + canvas.Rectangle(sprec.NewVec2(-needleSize.X/2.0, 20-needleSize.Y), needleSize) + canvas.Fill(ui.Fill{ + Rule: ui.FillRuleSimple, + Color: ui.White(), + Image: e.needleImage, + ImageOffset: sprec.NewVec2(-needleSize.X/2.0, 20-needleSize.Y), + ImageSize: needleSize, + }) + + canvas.Pop() + + element.Invalidate() // force redraw +} diff --git a/resources/ui/images/needle.png b/resources/ui/images/needle.png new file mode 100644 index 0000000..f30419d --- /dev/null +++ b/resources/ui/images/needle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c61eead235c3efb0a0a2562d3cea1fa582315634734afd88f016587dc717a520 +size 5070 diff --git a/resources/ui/images/speedometer.png b/resources/ui/images/speedometer.png new file mode 100644 index 0000000..4c99f8e --- /dev/null +++ b/resources/ui/images/speedometer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fb3f2eba06e024f9e48e6afc78ff5b9ef62f6837a0e1dc4144004609451612f +size 22746 From c7ea3762e01138b8873fdcd9765bc36832dc57dc Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sat, 1 Apr 2023 23:10:54 +0300 Subject: [PATCH 14/40] Add more user interface features --- cmd/rallymka/app_cgo.go | 2 +- internal/ui/controller/play.go | 45 +++ internal/ui/model/home.go | 51 +++- internal/ui/model/play.go | 1 - internal/ui/play/view.go | 444 ------------------------------ internal/ui/view/home_screen.go | 286 ++++++++++++++++--- internal/ui/view/play_screen.go | 84 +++++- internal/ui/widget/gearshifter.go | 71 +++++ internal/ui/widget/regions.go | 3 +- internal/ui/widget/separator.go | 40 +++ internal/ui/widget/toggle.go | 106 +++++++ resources/web/index.html | 4 +- resources/web/main.css | 4 +- 13 files changed, 643 insertions(+), 498 deletions(-) delete mode 100644 internal/ui/play/view.go create mode 100644 internal/ui/widget/gearshifter.go create mode 100644 internal/ui/widget/separator.go create mode 100644 internal/ui/widget/toggle.go diff --git a/cmd/rallymka/app_cgo.go b/cmd/rallymka/app_cgo.go index 7b5df3d..718a2a6 100644 --- a/cmd/rallymka/app_cgo.go +++ b/cmd/rallymka/app_cgo.go @@ -35,7 +35,7 @@ func runApplication() error { cfg := glapp.NewConfig("Rally MKA", 1024, 576) cfg.SetFullscreen(false) // TODO: Enable cfg.SetMaximized(true) // TODO: Remove - cfg.SetMinSize(800, 400) + cfg.SetMinSize(1024, 576) cfg.SetVSync(false) // FIXME: V-sync causes slow resource loading. cfg.SetIcon("resources/ui/images/icon.png") cfg.SetMaximized(true) diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index e1816fd..8718a1b 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -42,6 +42,7 @@ type PlayController struct { followCameraSystem *preset.FollowCameraSystem followCamera *graphics.Camera + bonnetCamera *graphics.Camera carSystem *preset.CarSystem vehicleDefinition *preset.CarDefinition @@ -126,6 +127,19 @@ func (c *PlayController) Start() { followCameraNode.SetAttachable(c.followCamera) c.scene.Root().AppendChild(followCameraNode) + c.bonnetCamera = c.gfxScene.CreateCamera() + c.bonnetCamera.SetFoVMode(graphics.FoVModeHorizontalPlus) + c.bonnetCamera.SetFoV(sprec.Degrees(80)) + c.bonnetCamera.SetAutoExposure(true) + c.bonnetCamera.SetExposure(1.0) + c.bonnetCamera.SetAutoFocus(false) + + bonnetCameraNode := game.NewNode() + bonnetCameraNode.SetAttachable(c.bonnetCamera) + bonnetCameraNode.SetRotation(dprec.RotationQuat(dprec.Degrees(180), dprec.BasisYVec3())) + bonnetCameraNode.SetPosition(dprec.NewVec3(0.0, 1.0, 0.0)) + vehicleNode.AppendChild(bonnetCameraNode) + followCameraEntity := c.ecsScene.CreateEntity() ecs.AttachComponent(followCameraEntity, &preset.NodeComponent{ Node: followCameraNode, @@ -142,6 +156,8 @@ func (c *PlayController) Start() { YawAngle: dprec.Degrees(0), Zoom: 1.0, }) + + c.engine.ResetDeltaTime() } func (c *PlayController) Stop() { @@ -173,6 +189,23 @@ func (c *PlayController) Braking() float64 { return 0.0 } +func (c *PlayController) ToggleCamera() { + if c.scene.Graphics().ActiveCamera() == c.followCamera { + c.scene.Graphics().SetActiveCamera(c.bonnetCamera) + } else { + c.scene.Graphics().SetActiveCamera(c.followCamera) + } +} + +func (c *PlayController) IsDrive() bool { + if c.vehicle == nil { + return true + } + var carComp *preset.CarComponent + ecs.FetchComponent(c.vehicle.Entity(), &carComp) + return carComp.Direction == preset.CarDirectionForward +} + func (c *PlayController) onPreUpdate(engine *game.Engine, scene *game.Scene, elapsedSeconds float64) { // TODO: This check will not be necessary if subscription is on Scene. if !c.scene.IsFrozen() { @@ -278,3 +311,15 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { return carDef } + +// func (h *playLifecycle) OnKeyboardEvent(element *ui.Element, event ui.KeyboardEvent) bool { +// return h.carSystem.OnKeyboardEvent(event) || h.cameraStandSystem.OnKeyboardEvent(event) +// } + +// func (h *playLifecycle) OnMouseEvent(element *ui.Element, event ui.MouseEvent) bool { +// // bounds := element.Bounds() +// // viewport := graphics.NewViewport(bounds.X, bounds.Y, bounds.Width, bounds.Height) +// // camera := h.gfxScene.ActiveCamera() +// // return h.vehicleSystem.OnMouseEvent(event, viewport, camera, h.gfxScene) +// return false +// } diff --git a/internal/ui/model/home.go b/internal/ui/model/home.go index 8f8929e..050ab50 100644 --- a/internal/ui/model/home.go +++ b/internal/ui/model/home.go @@ -7,21 +7,42 @@ import ( ) var ( - HomeChange = mvc.NewChange("home") - HomeDataChange = mvc.SubChange(HomeChange, "data") - HomeSceneChange = mvc.SubChange(HomeChange, "scene") + HomeChange = mvc.NewChange("home") + HomeDataChange = mvc.SubChange(HomeChange, "data") + HomeSceneChange = mvc.SubChange(HomeChange, "scene") + HomeControllerChange = mvc.SubChange(HomeChange, "controller") + HomeEnvironmentChange = mvc.SubChange(HomeChange, "environment") +) + +type Controller string + +const ( + ControllerKeyboard Controller = "keyboard" + ControllerMouse Controller = "mouse" + ControllerGamepad Controller = "gamepad" +) + +type Environment string + +const ( + EnvironmentDay Environment = "day" + EnvironmentNight Environment = "night" ) func newHome() *Home { return &Home{ - Observable: mvc.NewObservable(), + Observable: mvc.NewObservable(), + controller: ControllerKeyboard, + environment: EnvironmentDay, } } type Home struct { mvc.Observable - sceneData game.Promise[*data.HomeData] - scene *game.Scene + sceneData game.Promise[*data.HomeData] + scene *game.Scene + controller Controller + environment Environment } func (h *Home) Data() game.Promise[*data.HomeData] { @@ -41,3 +62,21 @@ func (h *Home) SetScene(scene *game.Scene) { h.scene = scene h.SignalChange(HomeSceneChange) } + +func (h *Home) Controller() Controller { + return h.controller +} + +func (h *Home) SetController(controller Controller) { + h.controller = controller + h.SignalChange(HomeControllerChange) +} + +func (h *Home) Environment() Environment { + return h.environment +} + +func (h *Home) SetEnvironment(environment Environment) { + h.environment = environment + h.SignalChange(HomeEnvironmentChange) +} diff --git a/internal/ui/model/play.go b/internal/ui/model/play.go index 56624c6..32e9fa7 100644 --- a/internal/ui/model/play.go +++ b/internal/ui/model/play.go @@ -20,7 +20,6 @@ func newPlay() *Play { type Play struct { mvc.Observable sceneData game.Promise[*data.PlayData] - scene *game.Scene } func (h *Play) Data() game.Promise[*data.PlayData] { diff --git a/internal/ui/play/view.go b/internal/ui/play/view.go deleted file mode 100644 index a44aa4b..0000000 --- a/internal/ui/play/view.go +++ /dev/null @@ -1,444 +0,0 @@ -package play - -import ( - "fmt" - "time" - - "github.com/mokiat/gog" - "github.com/mokiat/gog/opt" - "github.com/mokiat/gomath/dprec" - "github.com/mokiat/gomath/sprec" - "github.com/mokiat/lacking/app" - "github.com/mokiat/lacking/game" - "github.com/mokiat/lacking/game/ecs" - "github.com/mokiat/lacking/game/graphics" - "github.com/mokiat/lacking/game/physics" - "github.com/mokiat/lacking/game/preset" - "github.com/mokiat/lacking/ui" - co "github.com/mokiat/lacking/ui/component" - "github.com/mokiat/lacking/ui/mat" - "github.com/mokiat/lacking/util/metrics" - "github.com/mokiat/lacking/util/shape" - "github.com/mokiat/rally-mka/internal/scene" - "github.com/mokiat/rally-mka/internal/ui/global" - "github.com/mokiat/rally-mka/internal/ui/widget" -) - -const ( - anchorDistance = 6.0 - cameraDistance = 10.0 -) - -type ViewData struct { - GameData *scene.Data -} - -var View = co.Define(func(props co.Properties, scope co.Scope) co.Instance { - var ( - context = co.GetContext[global.Context]() - data = co.GetData[ViewData](props) - ) - - regionsVisible := co.UseState(func() bool { - return false - }) - - regionsState := co.UseState(func() []metrics.RegionStat { - return nil - }) - - frames := co.UseState(func() *int { - return gog.PtrOf(0) - }).Get() - - lifecycle := co.UseState(func() *playLifecycle { - return &playLifecycle{ - window: co.Window(scope), - engine: context.Engine, - gameData: data.GameData, - spansVisible: regionsVisible, - frames: frames, - } - }).Get() - - speedState := co.UseState(func() float64 { - return float64(0.0) - }) - - co.Once(func() { - co.Window(scope).SetCursorVisible(false) - }) - - co.Defer(func() { - co.Window(scope).SetCursorVisible(true) - }) - - co.Once(func() { - var refreshSpeed func() - refreshSpeed = func() { - var velocity dprec.Vec3 - if car := lifecycle.car; car != nil { - velocity = car.Body().Velocity() - } - speedState.Set(velocity.Length() * 3.6) - co.After(100*time.Millisecond, refreshSpeed) - } - refreshSpeed() - }) - - co.Once(func() { - lastTime := time.Now() - var refreshFPS func() - refreshFPS = func() { - currentTime := time.Now() - deltaTime := currentTime.Sub(lastTime) - if deltaTime > 2*time.Second { - fps := float64(*frames) / deltaTime.Seconds() - *frames = 0 - - co.Window(scope).SetTitle(fmt.Sprintf("FPS: %.1f", fps)) - lastTime = currentTime - } - co.After(time.Second, refreshFPS) - } - refreshFPS() - }) - - co.Once(func() { - var refreshSpans func() - refreshSpans = func() { - regionsState.Set(metrics.RegionStats()) - co.After(time.Second, refreshSpans) - } - refreshSpans() - }) - - co.Once(func() { - lifecycle.onCreate() - }) - - co.Defer(func() { - lifecycle.onDestroy() - }) - - return co.New(mat.Element, func() { - co.WithData(mat.ElementData{ - Essence: lifecycle, - Focusable: opt.V(true), - Focused: opt.V(true), - Padding: ui.Spacing{ - Left: 5, - Right: 5, - Top: 5, - Bottom: 5, - }, - Layout: mat.NewVerticalLayout(mat.VerticalLayoutSettings{ - ContentAlignment: mat.AlignmentLeft, - ContentSpacing: 10, - }), - }) - - if regionsVisible.Get() { - co.WithChild("regions", co.New(widget.RegionBlock, func() { - co.WithData(widget.RegionBlockData{ - Regions: regionsState.Get(), - }) - co.WithLayoutData(mat.LayoutData{ - GrowHorizontally: true, - }) - })) - } - - co.WithChild("speed-label", co.New(mat.Label, func() { - co.WithData(mat.LabelData{ - Font: co.OpenFont(scope, "mat:///roboto-bold.ttf"), - FontSize: opt.V(float32(24.0)), - FontColor: opt.V(ui.White()), - Text: fmt.Sprintf("Speed: %.4f", speedState.Get()), - }) - })) - }) -}) - -var _ ui.ElementKeyboardHandler = (*playLifecycle)(nil) -var _ ui.ElementMouseHandler = (*playLifecycle)(nil) - -type playLifecycle struct { - window *ui.Window - engine *game.Engine - gameData *scene.Data - spansVisible *co.State[bool] - frames *int - - scene *game.Scene - gfxScene *graphics.Scene - physicsScene *physics.Scene - ecsScene *ecs.Scene - - carSystem *preset.CarSystem - cameraStandSystem *preset.FollowCameraSystem - - orbitCamera *graphics.Camera - bonnetCamera *graphics.Camera - car *game.Node -} - -func (h *playLifecycle) OnKeyboardEvent(element *ui.Element, event ui.KeyboardEvent) bool { - if event.Code == app.KeyCodeEscape { - element.Window().Close() - return true - } - if event.Code == ui.KeyCodeTab { - if event.Type == ui.KeyboardEventTypeKeyUp { - h.spansVisible.Set(!h.spansVisible.Get()) - } - return true - } - if event.Code == app.KeyCodeX { - if event.Type == app.KeyboardEventTypeKeyDown { - if h.gfxScene.ActiveCamera() == h.orbitCamera { - h.gfxScene.SetActiveCamera(h.bonnetCamera) - } else { - h.gfxScene.SetActiveCamera(h.orbitCamera) - } - } - return true - } - return h.carSystem.OnKeyboardEvent(event) || h.cameraStandSystem.OnKeyboardEvent(event) -} - -func (h *playLifecycle) OnMouseEvent(element *ui.Element, event ui.MouseEvent) bool { - // bounds := element.Bounds() - // viewport := graphics.NewViewport(bounds.X, bounds.Y, bounds.Width, bounds.Height) - // camera := h.gfxScene.ActiveCamera() - // return h.vehicleSystem.OnMouseEvent(event, viewport, camera, h.gfxScene) - return false -} - -func (h *playLifecycle) onCreate() { - h.scene = h.engine.CreateScene() - - h.physicsScene = h.scene.Physics() - h.gfxScene = h.scene.Graphics() - h.ecsScene = h.scene.ECS() - - h.carSystem = preset.NewCarSystem(h.ecsScene, h.window) - h.carSystem.UseDefaults() - h.cameraStandSystem = preset.NewFollowCameraSystem(h.ecsScene, h.window) - h.cameraStandSystem.UseDefaults() - - h.orbitCamera = h.gfxScene.CreateCamera() - h.orbitCamera.SetFoVMode(graphics.FoVModeHorizontalPlus) - h.orbitCamera.SetFoV(sprec.Degrees(66)) - h.orbitCamera.SetAutoExposure(true) - h.orbitCamera.SetExposure(1.0) - h.orbitCamera.SetAutoFocus(false) - h.gfxScene.SetActiveCamera(h.orbitCamera) - - h.bonnetCamera = h.gfxScene.CreateCamera() - h.bonnetCamera.SetFoVMode(graphics.FoVModeHorizontalPlus) - h.bonnetCamera.SetFoV(sprec.Degrees(80)) - h.bonnetCamera.SetAutoExposure(true) - h.bonnetCamera.SetExposure(1.0) - h.bonnetCamera.SetAutoFocus(false) - - h.engine.SubscribePreUpdate(h.onPreUpdate) - h.engine.SubscribePostUpdate(h.onPostUpdate) - h.setupLevel(h.gameData) -} - -func (h *playLifecycle) onDestroy() { - h.gameData.Dismiss() -} - -func (h *playLifecycle) onPreUpdate(engine *game.Engine, scene *game.Scene, elapsedSeconds float64) { - h.carSystem.Update(elapsedSeconds) -} - -func (h *playLifecycle) onPostUpdate(engine *game.Engine, scene *game.Scene, elapsedSeconds float64) { - h.cameraStandSystem.Update(elapsedSeconds) - *h.frames += 1 -} - -func (h *playLifecycle) setupLevel(gameData *scene.Data) { - h.scene.Initialize(gameData.Level) - - sunLight := h.gfxScene.CreateDirectionalLight(graphics.DirectionalLightInfo{ - EmitColor: dprec.NewVec3(0.5, 0.5, 0.3), - EmitRange: 16000, // FIXME - }) - - // FIXME: Should not be needed - lightNode := game.NewNode() - lightNode.SetPosition(dprec.NewVec3(-100.0, 100.0, 0.0)) - lightNode.SetRotation(dprec.QuatProd( - dprec.RotationQuat(dprec.Degrees(-90), dprec.BasisYVec3()), - dprec.RotationQuat(dprec.Degrees(-45), dprec.BasisXVec3()), - )) - lightNode.UseTransformation(func(parent, current dprec.Mat4) dprec.Mat4 { - // Remove parent's rotation - parent.M11 = 1.0 - parent.M12 = 0.0 - parent.M13 = 0.0 - parent.M21 = 0.0 - parent.M22 = 1.0 - parent.M23 = 0.0 - parent.M31 = 0.0 - parent.M32 = 0.0 - parent.M33 = 1.0 - return dprec.Mat4Prod(parent, current) - }) - lightNode.SetDirectionalLight(sunLight) - - carInstance := h.scene.CreateModel(game.ModelInfo{ - Name: "SUV", - Definition: gameData.CarModel, - Position: dprec.NewVec3(0.0, 3.0, 0.0), - Rotation: dprec.IdentityQuat(), - Scale: dprec.NewVec3(1.0, 1.0, 1.0), - IsDynamic: true, - }) - carChassisNode := h.setupCarDemo( - carInstance, - dprec.NewVec3(0.0, 2.0, 0.0), - dprec.IdentityQuat(), - true, - ) - - h.car = carChassisNode - h.car.AppendChild(lightNode) - - cameraDeltaNode := game.NewNode() - cameraDeltaNode.SetCamera(h.bonnetCamera) - cameraDeltaNode.SetRotation(dprec.RotationQuat(dprec.Degrees(180), dprec.BasisYVec3())) - cameraDeltaNode.SetPosition(dprec.NewVec3(0.0, 1.0, 0.0)) - carChassisNode.AppendChild(cameraDeltaNode) - - orbitCameraNode := game.NewNode() - orbitCameraNode.SetAttachable(h.orbitCamera) - h.scene.Root().AppendChild(orbitCameraNode) - - camTarget := h.car - cameraEntity := h.ecsScene.CreateEntity() - ecs.AttachComponent(cameraEntity, &preset.NodeComponent{ - Node: orbitCameraNode, - }) - ecs.AttachComponent(cameraEntity, &preset.FollowCameraComponent{ - Target: camTarget, - AnchorPosition: dprec.Vec3Sum(camTarget.Position(), dprec.NewVec3(0.0, 0.0, -cameraDistance)), - AnchorDistance: anchorDistance, - CameraDistance: cameraDistance, - PitchAngle: dprec.Degrees(-20), - YawAngle: dprec.Degrees(0), - Zoom: 1.0, - }) - ecs.AttachComponent(cameraEntity, &preset.ControlledComponent{ - Inputs: preset.ControlInputGamepad0 | preset.ControlInputKeyboard, - }) - - h.engine.ResetDeltaTime() -} - -func (h *playLifecycle) setupCarDemo(model *game.Model, position dprec.Vec3, rotation dprec.Quat, controlled bool) *game.Node { - // TODO: The definition can be instantiated just once and the - // ApplyToModel can be used multiple times on new instances. - - collisionGroup := physics.NewCollisionGroup() - - chassisBodyDef := h.physicsScene.Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ - Mass: 260, - MomentOfInertia: physics.SymmetricMomentOfInertia(208), - DragFactor: 0.0, - AngularDragFactor: 0.0, - RestitutionCoefficient: 0.0, - CollisionGroup: collisionGroup, - CollisionShapes: []physics.CollisionShape{ - shape.NewPlacement[shape.Shape]( - shape.NewTransform( - dprec.NewVec3(0.0, 0.3, -0.4), - dprec.IdentityQuat(), - ), - shape.NewStaticBox(1.6, 1.4, 4.0), - ), - }, - }) - - wheelBodyDef := h.physicsScene.Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ - Mass: 20, - MomentOfInertia: physics.SymmetricMomentOfInertia(0.9), - DragFactor: 0.0, - AngularDragFactor: 0.0, - RestitutionCoefficient: 0.0, - CollisionGroup: collisionGroup, - CollisionShapes: []physics.CollisionShape{ - shape.NewPlacement[shape.Shape]( - shape.IdentityTransform(), - shape.NewStaticSphere(0.25), - ), - }, - }) - - chassisDef := preset.NewChassisDefinition(). - WithNodeName("Chassis"). - WithBodyDefinition(chassisBodyDef) - - frontLeftWheelDef := preset.NewWheelDefinition(). - WithNodeName("FLWheel"). - WithBodyDefinition(wheelBodyDef) - - frontRightWheelDef := preset.NewWheelDefinition(). - WithNodeName("FRWheel"). - WithBodyDefinition(wheelBodyDef) - - rearLeftWheelDef := preset.NewWheelDefinition(). - WithNodeName("BLWheel"). - WithBodyDefinition(wheelBodyDef) - - rearRightWheelDef := preset.NewWheelDefinition(). - WithNodeName("BRWheel"). - WithBodyDefinition(wheelBodyDef) - - frontAxisDef := preset.NewAxisDefinition(). - WithPosition(dprec.NewVec3(0.0, -0.22, 0.96)). - WithWidth(1.8). - WithSuspensionLength(0.23). - WithSpringLength(0.25). - WithSpringFrequency(2.9). - WithSpringDamping(0.8). - WithLeftWheelDefinition(frontLeftWheelDef). - WithRightWheelDefinition(frontRightWheelDef). - WithMaxSteeringAngle(dprec.Degrees(30)). - WithMaxAcceleration(145). - WithMaxBraking(250). - WithReverseRatio(0.5) - - rearAxisDef := preset.NewAxisDefinition(). - WithPosition(dprec.NewVec3(0.0, -0.22, -1.37)). - WithWidth(1.8). - WithSuspensionLength(0.23). - WithSpringLength(0.25). - WithSpringFrequency(2.4). - WithSpringDamping(0.8). - WithLeftWheelDefinition(rearLeftWheelDef). - WithRightWheelDefinition(rearRightWheelDef). - WithMaxSteeringAngle(dprec.Degrees(0)). - WithMaxAcceleration(160). - WithMaxBraking(180). - WithReverseRatio(0.5) - - carDef := preset.NewCarDefinition(). - WithChassisDefinition(chassisDef). - WithAxisDefinition(frontAxisDef). - WithAxisDefinition(rearAxisDef) - - info := preset.CarApplyInfo{ - Model: model, - Position: position, - Rotation: rotation, - } - if controlled { - info.Inputs = preset.ControlInputKeyboard | preset.ControlInputMouse | preset.ControlInputGamepad0 - } - car := carDef.ApplyToModel(h.scene, info) - return car.Chassis().Node() -} diff --git a/internal/ui/view/home_screen.go b/internal/ui/view/home_screen.go index 696d62d..8b8366b 100644 --- a/internal/ui/view/home_screen.go +++ b/internal/ui/view/home_screen.go @@ -27,13 +27,16 @@ type HomeScreenData struct { } type HomeScreenPresenter struct { - Scope co.Scope `co:"scope"` - Data HomeScreenData `co:"data"` + Scope co.Scope `co:"scope"` + Data HomeScreenData `co:"data"` + Invalidate func() `co:"invalidate"` engine *game.Engine loadingModel *model.Loading homeModel *model.Home playModel *model.Play + + showOptions bool } func (p *HomeScreenPresenter) OnCreate() { @@ -45,6 +48,11 @@ func (p *HomeScreenPresenter) OnCreate() { p.homeModel = p.Data.Home p.playModel = p.Data.Play + // TODO: Figure out an alternative way for TypeComponents + mvc.UseBinding(p.homeModel, func(ch mvc.Change) bool { + return mvc.IsChange(ch, model.HomeChange) + }) + if p.homeModel.Scene() == nil { p.homeModel.SetScene(p.createScene()) } @@ -57,6 +65,9 @@ func (p *HomeScreenPresenter) OnDelete() { } func (p *HomeScreenPresenter) Render() co.Instance { + controller := p.homeModel.Controller() + environment := p.homeModel.Environment() + return co.New(mat.Element, func() { co.WithData(mat.ElementData{ Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), @@ -86,43 +97,196 @@ func (p *HomeScreenPresenter) Render() co.Instance { VerticalCenter: opt.V(0), }) - co.WithChild("play-button", co.New(widget.Button, func() { - co.WithData(widget.ButtonData{ - Text: "Play", - }) - co.WithCallbackData(widget.ButtonCallbackData{ - ClickListener: p.onPlayClicked, - }) - })) + if p.showOptions { + co.WithChild("start-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ + Text: "Start", + }) + co.WithCallbackData(widget.ButtonCallbackData{ + ClickListener: p.onStartClicked, + }) + })) - co.WithChild("licenses-button", co.New(widget.Button, func() { - co.WithData(widget.ButtonData{ - Text: "Licenses", - }) - co.WithCallbackData(widget.ButtonCallbackData{ - ClickListener: p.onLicensesClicked, - }) - })) + co.WithChild("back-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ + Text: "Back", + }) + co.WithCallbackData(widget.ButtonCallbackData{ + ClickListener: p.onBackClicked, + }) + })) + } else { + co.WithChild("play-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ + Text: "Play", + }) + co.WithCallbackData(widget.ButtonCallbackData{ + ClickListener: p.onPlayClicked, + }) + })) - co.WithChild("credits-button", co.New(widget.Button, func() { - co.WithData(widget.ButtonData{ - Text: "Credits", - }) - co.WithCallbackData(widget.ButtonCallbackData{ - ClickListener: p.onCreditsClicked, - }) - })) + co.WithChild("licenses-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ + Text: "Licenses", + }) + co.WithCallbackData(widget.ButtonCallbackData{ + ClickListener: p.onLicensesClicked, + }) + })) + + co.WithChild("credits-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ + Text: "Credits", + }) + co.WithCallbackData(widget.ButtonCallbackData{ + ClickListener: p.onCreditsClicked, + }) + })) - co.WithChild("exit-button", co.New(widget.Button, func() { - co.WithData(widget.ButtonData{ - Text: "Exit", + co.WithChild("exit-button", co.New(widget.Button, func() { + co.WithData(widget.ButtonData{ + Text: "Exit", + }) + co.WithCallbackData(widget.ButtonCallbackData{ + ClickListener: p.onExitClicked, + }) + })) + } + })) + })) + + if p.showOptions { + co.WithChild("options", co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.RGBA(0, 0, 0, 128)), + Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), + }) + co.WithLayoutData(mat.LayoutData{ + Top: opt.V(0), + Bottom: opt.V(0), + Left: opt.V(320), + Right: opt.V(0), + }) + + co.WithChild("options-pane", co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Layout: mat.NewVerticalLayout(mat.VerticalLayoutSettings{ + ContentAlignment: mat.AlignmentCenter, + ContentSpacing: 20, + }), }) - co.WithCallbackData(widget.ButtonCallbackData{ - ClickListener: p.onExitClicked, + co.WithLayoutData(mat.LayoutData{ + HorizontalCenter: opt.V(0), + VerticalCenter: opt.V(0), }) + + co.WithChild("controller-toggles", co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Layout: mat.NewHorizontalLayout(mat.HorizontalLayoutSettings{ + ContentAlignment: mat.AlignmentCenter, + ContentSpacing: 40, + }), + }) + + co.WithChild("keyboard", co.New(widget.Toggle, func() { + co.WithData(widget.ToggleData{ + Text: "Keyboard", + Selected: controller == model.ControllerKeyboard, + }) + co.WithCallbackData(widget.ToggleCallbackData{ + ClickListener: p.onKeyboardClicked, + }) + })) + + co.WithChild("mouse", co.New(widget.Toggle, func() { + co.WithData(widget.ToggleData{ + Text: "Mouse", + Selected: controller == model.ControllerMouse, + }) + co.WithCallbackData(widget.ToggleCallbackData{ + ClickListener: p.onMouseClicked, + }) + })) + + co.WithChild("gamepad", co.New(widget.Toggle, func() { + co.WithData(widget.ToggleData{ + Text: "Gamepad", + Selected: controller == model.ControllerGamepad, + }) + co.WithCallbackData(widget.ToggleCallbackData{ + ClickListener: p.onGamepadClicked, + }) + })) + })) + + co.WithChild("controller-image", co.New(mat.Container, func() { + co.WithData(mat.ContainerData{ + BackgroundColor: opt.V(ui.Black()), + }) + co.WithLayoutData(mat.LayoutData{ + Width: opt.V(600), + Height: opt.V(300), + }) + })) + + co.WithChild("controller-text", co.New(mat.Label, func() { + co.WithData(mat.LabelData{ + Font: co.OpenFont(p.Scope, "mat:///roboto-regular.ttf"), + FontSize: opt.V(float32(28.0)), + FontColor: opt.V(ui.White()), + TextAlignment: mat.AlignmentCenter, + Text: p.controllerDescription(controller), + }) + })) + + co.WithChild("separator", co.New(widget.Separator, func() { + co.WithLayoutData(mat.LayoutData{ + Width: opt.V(600), + Height: opt.V(4), + }) + })) + + co.WithChild("environment-toggles", co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Layout: mat.NewHorizontalLayout(mat.HorizontalLayoutSettings{ + ContentAlignment: mat.AlignmentCenter, + ContentSpacing: 40, + }), + }) + + co.WithChild("day", co.New(widget.Toggle, func() { + co.WithData(widget.ToggleData{ + Text: "Day", + Selected: environment == model.EnvironmentDay, + }) + co.WithCallbackData(widget.ToggleCallbackData{ + ClickListener: p.onDayClicked, + }) + })) + + co.WithChild("night", co.New(widget.Toggle, func() { + co.WithData(widget.ToggleData{ + Text: "Night", + Selected: environment == model.EnvironmentNight, + }) + co.WithCallbackData(widget.ToggleCallbackData{ + ClickListener: p.onNightClicked, + }) + })) + })) + + co.WithChild("environment-text", co.New(mat.Label, func() { + co.WithData(mat.LabelData{ + Font: co.OpenFont(p.Scope, "mat:///roboto-regular.ttf"), + FontSize: opt.V(float32(28.0)), + FontColor: opt.V(ui.White()), + TextAlignment: mat.AlignmentCenter, + Text: p.environmentDescription(environment), + }) + })) })) })) - })) + } }) } @@ -194,10 +358,51 @@ func (p *HomeScreenPresenter) createScene() *game.Scene { return scene } -func (p *HomeScreenPresenter) onPlayClicked() { - // TODO: Show an intermediate configuration window, where the user - // can select controller type and assitance. +func (p *HomeScreenPresenter) controllerDescription(controller model.Controller) string { + switch controller { + case model.ControllerKeyboard: + return "The day drive is a good starting point for new players." + case model.ControllerMouse: + return "The night drive is a bit more taxing on the computer." + case model.ControllerGamepad: + return "The night drive is a bit more taxing on the computer." + default: + return "" + } +} + +func (p *HomeScreenPresenter) environmentDescription(environment model.Environment) string { + switch environment { + case model.EnvironmentDay: + return "The day drive is a good starting point for new players." + case model.EnvironmentNight: + return "The night drive is a bit more taxing on the computer." + default: + return "" + } +} + +func (p *HomeScreenPresenter) onKeyboardClicked() { + p.homeModel.SetController(model.ControllerKeyboard) +} +func (p *HomeScreenPresenter) onMouseClicked() { + p.homeModel.SetController(model.ControllerMouse) +} + +func (p *HomeScreenPresenter) onGamepadClicked() { + p.homeModel.SetController(model.ControllerGamepad) +} + +func (p *HomeScreenPresenter) onDayClicked() { + p.homeModel.SetEnvironment(model.EnvironmentDay) +} + +func (p *HomeScreenPresenter) onNightClicked() { + p.homeModel.SetEnvironment(model.EnvironmentNight) +} + +func (p *HomeScreenPresenter) onStartClicked() { resourceSet := p.engine.CreateResourceSet() promise := data.LoadPlayData(p.engine, resourceSet) p.playModel.SetData(promise) @@ -209,6 +414,17 @@ func (p *HomeScreenPresenter) onPlayClicked() { }) } +func (p *HomeScreenPresenter) onBackClicked() { + // TODO: Add a `Property` concept instead of manual Invalidate. + p.showOptions = false + p.Invalidate() +} + +func (p *HomeScreenPresenter) onPlayClicked() { + p.showOptions = true + p.Invalidate() +} + func (p *HomeScreenPresenter) onLicensesClicked() { mvc.Dispatch(p.Scope, action.ChangeView{ ViewName: model.ViewNameLicenses, diff --git a/internal/ui/view/play_screen.go b/internal/ui/view/play_screen.go index e771516..987a63c 100644 --- a/internal/ui/view/play_screen.go +++ b/internal/ui/view/play_screen.go @@ -2,11 +2,15 @@ package view import ( "fmt" + "time" "github.com/mokiat/gog/opt" "github.com/mokiat/lacking/ui" co "github.com/mokiat/lacking/ui/component" "github.com/mokiat/lacking/ui/mat" + "github.com/mokiat/lacking/ui/mvc" + "github.com/mokiat/lacking/util/metrics" + "github.com/mokiat/rally-mka/internal/ui/action" "github.com/mokiat/rally-mka/internal/ui/controller" "github.com/mokiat/rally-mka/internal/ui/global" "github.com/mokiat/rally-mka/internal/ui/model" @@ -20,11 +24,17 @@ type PlayScreenData struct { } type PlayScreenPresenter struct { - Scope co.Scope `co:"scope"` - Data PlayScreenData `co:"data"` + Scope co.Scope `co:"scope"` + Data PlayScreenData `co:"data"` + Invalidate func() `co:"invalidate"` controller *controller.PlayController + debugVisible bool + debugRegions []metrics.RegionStat + debugRegionsTicker *time.Ticker + debugRegionsStop chan struct{} + rootElement *ui.Element exitMenu co.Overlay } @@ -35,6 +45,25 @@ func (p *PlayScreenPresenter) OnCreate() { var context global.Context co.InjectContext(&context) + // FIXME: This is ugly and complicated. Come up with a better API + // than what Go provides that is integrated into component library and + // handles everything (cleanup, thread scheduling, etc). + p.debugRegionsTicker = time.NewTicker(time.Second) + p.debugRegionsStop = make(chan struct{}) + go func() { + for { + select { + case <-p.debugRegionsTicker.C: + co.Schedule(func() { + p.debugRegions = metrics.RegionStats() + p.Invalidate() + }) + case <-p.debugRegionsStop: + return + } + } + }() + // FIXME: This may actually panic if there is a third party // waiting / reading on this and it happens to match the Get call. playData, err := p.Data.Play.Data().Get() @@ -43,10 +72,15 @@ func (p *PlayScreenPresenter) OnCreate() { } p.controller = controller.NewPlayController(co.Window(p.Scope).Window, context.Engine, playData) p.controller.Start() + + co.Window(p.Scope).SetCursorVisible(false) } func (p *PlayScreenPresenter) OnDelete() { defer p.controller.Stop() + defer p.debugRegionsTicker.Stop() + defer close(p.debugRegionsStop) + defer co.Window(p.Scope).SetCursorVisible(true) } func (p *PlayScreenPresenter) OnKeyboardEvent(element *ui.Element, event ui.KeyboardEvent) bool { @@ -55,7 +89,8 @@ func (p *PlayScreenPresenter) OnKeyboardEvent(element *ui.Element, event ui.Keyb case ui.KeyCodeEscape: if event.Type == ui.KeyboardEventTypeKeyDown { p.controller.Pause() - p.exitMenu = co.OpenOverlay(co.New(ExitMenu, func() { + co.Window(p.Scope).SetCursorVisible(true) + p.exitMenu = co.OpenOverlay(p.Scope, co.New(ExitMenu, func() { co.WithCallbackData(ExitMenuCallback{ OnContinue: p.onContinue, OnHome: p.onGoHome, @@ -64,6 +99,17 @@ func (p *PlayScreenPresenter) OnKeyboardEvent(element *ui.Element, event ui.Keyb })) } return true + case ui.KeyCodeTab: + if event.Type == ui.KeyboardEventTypeKeyDown { + p.debugVisible = !p.debugVisible + p.Invalidate() + } + return true + case ui.KeyCodeEnter: + if event.Type == ui.KeyboardEventTypeKeyDown { + p.controller.ToggleCamera() + } + return true default: return false } @@ -79,6 +125,19 @@ func (p *PlayScreenPresenter) Render() co.Instance { Layout: mat.NewAnchorLayout(mat.AnchorLayoutSettings{}), }) + if p.debugVisible { + co.WithChild("regions", co.New(widget.RegionBlock, func() { + co.WithData(widget.RegionBlockData{ + Regions: p.debugRegions, + }) + co.WithLayoutData(mat.LayoutData{ + Top: opt.V(0), + Left: opt.V(0), + Right: opt.V(0), + }) + })) + } + co.WithChild("dashboard", co.New(mat.Element, func() { co.WithData(mat.ElementData{ Padding: ui.Spacing{ @@ -101,7 +160,18 @@ func (p *PlayScreenPresenter) Render() co.Instance { }) co.WithLayoutData(mat.LayoutData{ - Left: opt.V(0), + Left: opt.V(20), + Bottom: opt.V(0), + }) + })) + + co.WithChild("gearshifter", co.New(widget.GearShifter, func() { + co.WithData(widget.GearShifterData{ + Source: p.controller, + }) + + co.WithLayoutData(mat.LayoutData{ + Right: opt.V(20), Bottom: opt.V(0), }) })) @@ -113,10 +183,14 @@ func (p *PlayScreenPresenter) onContinue() { p.exitMenu.Close() p.controller.Resume() co.Window(p.Scope).GrantFocus(p.rootElement) + co.Window(p.Scope).SetCursorVisible(false) } func (p *PlayScreenPresenter) onGoHome() { - // TODO: Go to loading and schedule data release + p.exitMenu.Close() + mvc.Dispatch(p.Scope, action.ChangeView{ + ViewName: model.ViewNameHome, + }) } func (p *PlayScreenPresenter) onExit() { diff --git a/internal/ui/widget/gearshifter.go b/internal/ui/widget/gearshifter.go new file mode 100644 index 0000000..26491a8 --- /dev/null +++ b/internal/ui/widget/gearshifter.go @@ -0,0 +1,71 @@ +package widget + +import ( + "github.com/mokiat/gog/opt" + "github.com/mokiat/gomath/sprec" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" +) + +type GearShifterSource interface { + IsDrive() bool +} + +type GearShifterData struct { + Source GearShifterSource +} + +var GearShifter = co.DefineType(&gearShifterPresenter{}) + +var _ ui.ElementRenderHandler = (*gearShifterPresenter)(nil) + +type gearShifterPresenter struct { + Scope co.Scope `co:"scope"` + Data GearShifterData `co:"data"` + LayoutData mat.LayoutData `co:"layout"` + + driveImage *ui.Image + reverseImage *ui.Image + source GearShifterSource +} + +func (p *gearShifterPresenter) OnCreate() { + p.source = p.Data.Source + p.driveImage = co.OpenImage(p.Scope, "ui/images/drive.png") + p.reverseImage = co.OpenImage(p.Scope, "ui/images/reverse.png") +} + +func (p *gearShifterPresenter) Render() co.Instance { + return co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Essence: p, + IdealSize: opt.V(ui.NewSize(150, 150)), + }) + co.WithLayoutData(p.LayoutData) + }) +} + +func (p *gearShifterPresenter) OnRender(element *ui.Element, canvas *ui.Canvas) { + bounds := element.Bounds() + area := sprec.Vec2{ + X: float32(bounds.Width), + Y: float32(bounds.Height), + } + + image := p.reverseImage + if p.source.IsDrive() { + image = p.driveImage + } + + canvas.Reset() + canvas.Rectangle(sprec.ZeroVec2(), area) + canvas.Fill(ui.Fill{ + Rule: ui.FillRuleSimple, + Color: ui.White(), + Image: image, + ImageOffset: sprec.ZeroVec2(), + ImageSize: area, + }) + element.Invalidate() // force redraw +} diff --git a/internal/ui/widget/regions.go b/internal/ui/widget/regions.go index b0038c2..4c7bc48 100644 --- a/internal/ui/widget/regions.go +++ b/internal/ui/widget/regions.go @@ -61,8 +61,7 @@ var _ ui.ElementMouseHandler = (*regionBlockEssence)(nil) var _ ui.ElementRenderHandler = (*regionBlockEssence)(nil) type regionBlockEssence struct { - font *ui.Font - fontSize float32 + font *ui.Font selectedNodeID int graph map[int]regionNode diff --git a/internal/ui/widget/separator.go b/internal/ui/widget/separator.go new file mode 100644 index 0000000..3c50a83 --- /dev/null +++ b/internal/ui/widget/separator.go @@ -0,0 +1,40 @@ +package widget + +import ( + "github.com/mokiat/gomath/sprec" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" +) + +var Separator = co.DefineType(&separatorPresenter{}) + +type separatorPresenter struct { + LayoutData mat.LayoutData `co:"layout"` +} + +var _ ui.ElementRenderHandler = (*separatorPresenter)(nil) + +func (p *separatorPresenter) Render() co.Instance { + return co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Essence: p, + }) + co.WithLayoutData(p.LayoutData) + }) +} + +func (p *separatorPresenter) OnRender(element *ui.Element, canvas *ui.Canvas) { + bounds := element.Bounds() // take padding into consideration + area := sprec.Vec2{ + X: float32(bounds.Width), + Y: float32(bounds.Height), + } + + canvas.Reset() + canvas.Rectangle(sprec.ZeroVec2(), area) + canvas.Fill(ui.Fill{ + Rule: ui.FillRuleSimple, + Color: ui.Black(), + }) +} diff --git a/internal/ui/widget/toggle.go b/internal/ui/widget/toggle.go new file mode 100644 index 0000000..4c582a0 --- /dev/null +++ b/internal/ui/widget/toggle.go @@ -0,0 +1,106 @@ +package widget + +import ( + "github.com/mokiat/gog/opt" + "github.com/mokiat/gomath/sprec" + "github.com/mokiat/lacking/ui" + co "github.com/mokiat/lacking/ui/component" + "github.com/mokiat/lacking/ui/mat" +) + +const ( + toggleFontSize = float32(26.0) +) + +type ToggleData struct { + Text string + Selected bool +} + +type ToggleCallbackData struct { + ClickListener mat.ClickListener +} + +var Toggle = co.DefineType(&togglePresenter{}) + +var _ ui.ElementRenderHandler = (*togglePresenter)(nil) + +type togglePresenter struct { + *mat.ButtonBaseEssence + + Scope co.Scope `co:"scope"` + Data ToggleData `co:"data"` + CallbackData ToggleCallbackData `co:"callback"` + LayoutData mat.LayoutData `co:"layout"` + + font *ui.Font +} + +func (p *togglePresenter) OnCreate() { + if p.CallbackData.ClickListener == nil { + p.CallbackData.ClickListener = func() {} + } + p.ButtonBaseEssence = mat.NewButtonBaseEssence(p.CallbackData.ClickListener) + + p.font = co.OpenFont(p.Scope, "mat:///roboto-bold.ttf") +} + +func (p *togglePresenter) Render() co.Instance { + padding := ui.Spacing{ + Left: 5, + Right: 5, + Top: 2, + Bottom: 2, + } + + txtSize := p.font.TextSize(p.Data.Text, toggleFontSize) + + return co.New(mat.Element, func() { + co.WithData(mat.ElementData{ + Essence: p, + Padding: padding, + IdealSize: opt.V( + ui.NewSize(int(txtSize.X)+int(txtSize.Y)+5, int(txtSize.Y)).Grow(padding.Size()), + ), + }) + co.WithLayoutData(p.LayoutData) + }) +} + +func (p *togglePresenter) OnRender(element *ui.Element, canvas *ui.Canvas) { + var fontColor ui.Color + switch p.State() { + case mat.ButtonStateOver: + fontColor = ui.RGB(0x00, 0xB2, 0x08) + case mat.ButtonStateDown: + fontColor = ui.RGB(0x00, 0x33, 0x00) + default: + fontColor = ui.White() + } + if p.Data.Selected { + fontColor = ui.RGB(0x00, 0xB2, 0x08) + } + + bounds := element.ContentBounds() // take padding into consideration + area := sprec.Vec2{ + X: float32(bounds.Width), + Y: float32(bounds.Height), + } + + canvas.Reset() + canvas.Circle(sprec.NewVec2(area.Y/2.0, area.Y/2.0), area.Y/2.0) + canvas.Fill(ui.Fill{ + Rule: ui.FillRuleSimple, + Color: fontColor, + }) + + canvas.Reset() + canvas.FillText(p.Data.Text, sprec.NewVec2( + float32(area.Y+10), + float32(0.0), + ), ui.Typography{ + Font: p.font, + Size: toggleFontSize, + Color: fontColor, + }) +} diff --git a/resources/web/index.html b/resources/web/index.html index 4d9b54c..5214003 100644 --- a/resources/web/index.html +++ b/resources/web/index.html @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebcf5d4ab0d7e9931acfc6889b653edd0585208d8425dc3fd3b761d59da08681 -size 1007 +oid sha256:1ba39f23964788f067228ca1546b8636487f06cc76f7c58b287311a16fbbfe8a +size 1008 diff --git a/resources/web/main.css b/resources/web/main.css index 7a6dc6c..cb06139 100644 --- a/resources/web/main.css +++ b/resources/web/main.css @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87de1c684cc2f9baf92b6404b37e780ca5d6853b0e94f4a815051706badc49f3 -size 537 +oid sha256:cf8b15a56e5bf95e06e41c7811001aba40c659fe97b95648a62f0f2379d9c33f +size 538 From 6ab38856417bb7d9f0ebd214bfbcc78c341dcb04 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 2 Apr 2023 23:36:18 +0300 Subject: [PATCH 15/40] Make UI improvements --- internal/ui/controller/play.go | 2 +- internal/ui/model/home.go | 20 ++- internal/ui/view/home_screen.go | 210 ++++++++++++++++++++++++------ internal/ui/widget/gearshifter.go | 2 +- internal/ui/widget/toggle.go | 2 +- resources/levels/home-screen.json | 4 +- resources/ui/images/drive.png | 3 + resources/ui/images/reverse.png | 3 + 8 files changed, 195 insertions(+), 51 deletions(-) create mode 100644 resources/ui/images/drive.png create mode 100644 resources/ui/images/reverse.png diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index 8718a1b..48b152a 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -93,7 +93,7 @@ func (c *PlayController) Start() { parent.M33 = 1.0 return dprec.Mat4Prod(parent, current) }) - lightNode.SetDirectionalLight(sunLight) + lightNode.SetAttachable(sunLight) carInstance := c.scene.CreateModel(game.ModelInfo{ Name: "SUV", diff --git a/internal/ui/model/home.go b/internal/ui/model/home.go index 050ab50..0d856f2 100644 --- a/internal/ui/model/home.go +++ b/internal/ui/model/home.go @@ -1,7 +1,9 @@ package model import ( + "github.com/mokiat/gomath/sprec" "github.com/mokiat/lacking/game" + "github.com/mokiat/lacking/game/graphics" "github.com/mokiat/lacking/ui/mvc" "github.com/mokiat/rally-mka/internal/game/data" ) @@ -29,6 +31,18 @@ const ( EnvironmentNight Environment = "night" ) +type HomeScene struct { + Scene *game.Scene + + DaySkyColor sprec.Vec3 + DayAmbientLight *graphics.AmbientLight + DayDirectionalLight *graphics.DirectionalLight + + NightSkyColor sprec.Vec3 + NightAmbientLight *graphics.AmbientLight + NightSpotLight *graphics.SpotLight +} + func newHome() *Home { return &Home{ Observable: mvc.NewObservable(), @@ -40,7 +54,7 @@ func newHome() *Home { type Home struct { mvc.Observable sceneData game.Promise[*data.HomeData] - scene *game.Scene + scene *HomeScene controller Controller environment Environment } @@ -54,11 +68,11 @@ func (h *Home) SetData(sceneData game.Promise[*data.HomeData]) { h.SignalChange(HomeDataChange) } -func (h *Home) Scene() *game.Scene { +func (h *Home) Scene() *HomeScene { return h.scene } -func (h *Home) SetScene(scene *game.Scene) { +func (h *Home) SetScene(scene *HomeScene) { h.scene = scene h.SignalChange(HomeSceneChange) } diff --git a/internal/ui/view/home_screen.go b/internal/ui/view/home_screen.go index 8b8366b..d381ee7 100644 --- a/internal/ui/view/home_screen.go +++ b/internal/ui/view/home_screen.go @@ -1,6 +1,7 @@ package view import ( + "github.com/mokiat/gblob" "github.com/mokiat/gog/opt" "github.com/mokiat/gomath/dprec" "github.com/mokiat/gomath/sprec" @@ -16,6 +17,7 @@ import ( "github.com/mokiat/rally-mka/internal/ui/global" "github.com/mokiat/rally-mka/internal/ui/model" "github.com/mokiat/rally-mka/internal/ui/widget" + "github.com/x448/float16" ) var HomeScreen = co.DefineType(&HomeScreenPresenter{}) @@ -31,10 +33,12 @@ type HomeScreenPresenter struct { Data HomeScreenData `co:"data"` Invalidate func() `co:"invalidate"` - engine *game.Engine + engine *game.Engine + loadingModel *model.Loading homeModel *model.Home playModel *model.Play + scene *model.HomeScene showOptions bool } @@ -53,11 +57,13 @@ func (p *HomeScreenPresenter) OnCreate() { return mvc.IsChange(ch, model.HomeChange) }) - if p.homeModel.Scene() == nil { - p.homeModel.SetScene(p.createScene()) + p.scene = p.homeModel.Scene() + if p.scene == nil { + p.scene = p.createScene() + p.homeModel.SetScene(p.scene) + p.onDayClicked() } - scene := p.homeModel.Scene() - p.engine.SetActiveScene(scene) + p.engine.SetActiveScene(p.scene.Scene) } func (p *HomeScreenPresenter) OnDelete() { @@ -232,7 +238,7 @@ func (p *HomeScreenPresenter) Render() co.Instance { co.WithChild("controller-text", co.New(mat.Label, func() { co.WithData(mat.LabelData{ Font: co.OpenFont(p.Scope, "mat:///roboto-regular.ttf"), - FontSize: opt.V(float32(28.0)), + FontSize: opt.V(float32(24.0)), FontColor: opt.V(ui.White()), TextAlignment: mat.AlignmentCenter, Text: p.controllerDescription(controller), @@ -278,7 +284,7 @@ func (p *HomeScreenPresenter) Render() co.Instance { co.WithChild("environment-text", co.New(mat.Label, func() { co.WithData(mat.LabelData{ Font: co.OpenFont(p.Scope, "mat:///roboto-regular.ttf"), - FontSize: opt.V(float32(28.0)), + FontSize: opt.V(float32(24.0)), FontColor: opt.V(ui.White()), TextAlignment: mat.AlignmentCenter, Text: p.environmentDescription(environment), @@ -290,7 +296,9 @@ func (p *HomeScreenPresenter) Render() co.Instance { }) } -func (p *HomeScreenPresenter) createScene() *game.Scene { +func (p *HomeScreenPresenter) createScene() *model.HomeScene { + result := &model.HomeScene{} + promise := p.homeModel.Data() sceneData, err := promise.Get() if err != nil { @@ -300,42 +308,38 @@ func (p *HomeScreenPresenter) createScene() *game.Scene { scene := p.engine.CreateScene() scene.Initialize(sceneData.Scene) + result.Scene = scene - camera := scene.Graphics().CreateCamera() - camera.SetFoVMode(graphics.FoVModeHorizontalPlus) - camera.SetFoV(sprec.Degrees(66)) - camera.SetAutoExposure(true) - camera.SetExposure(0.01) - camera.SetAutoFocus(false) - camera.SetAutoExposureSpeed(0.1) + camera := p.createCamera(scene.Graphics()) scene.Graphics().SetActiveCamera(camera) - sunLight := scene.Graphics().CreateDirectionalLight(graphics.DirectionalLightInfo{ - EmitColor: dprec.NewVec3(0.5, 0.5, 0.3), + result.DaySkyColor = sprec.NewVec3(20.0, 25.0, 30.0) + result.DayAmbientLight = p.createDayAmbientLight(scene.Graphics()) + result.DayDirectionalLight = scene.Graphics().CreateDirectionalLight(graphics.DirectionalLightInfo{ + EmitColor: dprec.NewVec3(10, 10, 6), EmitRange: 16000, // FIXME }) - - lightNode := game.NewNode() - lightNode.SetPosition(dprec.NewVec3(-100.0, 100.0, 0.0)) - lightNode.SetRotation(dprec.QuatProd( + dayDirectionalLightNode := game.NewNode() + dayDirectionalLightNode.SetPosition(dprec.NewVec3(-100.0, 100.0, 0.0)) + dayDirectionalLightNode.SetRotation(dprec.QuatProd( dprec.RotationQuat(dprec.Degrees(-90), dprec.BasisYVec3()), dprec.RotationQuat(dprec.Degrees(-45), dprec.BasisXVec3()), )) - // FIXME: This should work out of the box for directional lights - lightNode.UseTransformation(func(parent, current dprec.Mat4) dprec.Mat4 { - // Remove parent's rotation - parent.M11 = 1.0 - parent.M12 = 0.0 - parent.M13 = 0.0 - parent.M21 = 0.0 - parent.M22 = 1.0 - parent.M23 = 0.0 - parent.M31 = 0.0 - parent.M32 = 0.0 - parent.M33 = 1.0 - return dprec.Mat4Prod(parent, current) + dayDirectionalLightNode.UseTransformation(game.IgnoreParentRotation) + dayDirectionalLightNode.SetAttachable(result.DayDirectionalLight) + + result.NightSkyColor = sprec.NewVec3(0.01, 0.01, 0.01) + result.NightAmbientLight = p.createNightAmbientLight(scene.Graphics()) + result.NightSpotLight = scene.Graphics().CreateSpotLight(graphics.SpotLightInfo{ + EmitColor: dprec.NewVec3(5000.0, 5000.0, 7500.0), + EmitOuterConeAngle: dprec.Degrees(50), + EmitInnerConeAngle: dprec.Degrees(20), + EmitRange: 1000, }) - lightNode.SetDirectionalLight(sunLight) + nightSpotLightNode := game.NewNode() + nightSpotLightNode.SetPosition(dprec.NewVec3(0.0, 0.0, 0.0)) + nightSpotLightNode.SetRotation(dprec.RotationQuat(dprec.Degrees(0), dprec.BasisXVec3())) + nightSpotLightNode.SetAttachable(result.NightSpotLight) sceneModel := scene.FindModel("Content") // TODO: Remove manual attachment, once this is configurable from @@ -343,29 +347,131 @@ func (p *HomeScreenPresenter) createScene() *game.Scene { scene.Root().AppendChild(sceneModel.Root()) if cameraNode := scene.Root().FindNode("Camera"); cameraNode != nil { - cameraNode.SetCamera(camera) - cameraNode.AppendChild(lightNode) + cameraNode.SetAttachable(camera) + cameraNode.AppendChild(dayDirectionalLightNode) + cameraNode.AppendChild(nightSpotLightNode) } const animationName = "Action" - // const animationName = "GroundAction" if animation := sceneModel.FindAnimation(animationName); animation != nil { playback := scene.PlayAnimation(animation) playback.SetLoop(true) playback.SetSpeed(0.3) } + return result +} + +func (p *HomeScreenPresenter) createCamera(scene *graphics.Scene) *graphics.Camera { + result := scene.CreateCamera() + result.SetFoVMode(graphics.FoVModeHorizontalPlus) + result.SetFoV(sprec.Degrees(66)) + result.SetAutoExposure(false) + result.SetExposure(0.1) + result.SetAutoFocus(false) + result.SetAutoExposureSpeed(0.1) + return result +} - return scene +func (p *HomeScreenPresenter) createDayAmbientLight(scene *graphics.Scene) *graphics.AmbientLight { + reflectionData := gblob.LittleEndianBlock(make([]byte, 4*2)) + reflectionData.SetUint16(0, float16.Fromfloat32(20.0).Bits()) + reflectionData.SetUint16(2, float16.Fromfloat32(25.0).Bits()) + reflectionData.SetUint16(4, float16.Fromfloat32(30.0).Bits()) + reflectionData.SetUint16(6, float16.Fromfloat32(1.0).Bits()) + + reflectionTexture := p.engine.Graphics().CreateCubeTexture(graphics.CubeTextureDefinition{ + Dimension: 1, + Filtering: graphics.FilterNearest, + InternalFormat: graphics.InternalFormatRGBA16F, + DataFormat: graphics.DataFormatRGBA16F, + GammaCorrection: false, + GenerateMipmaps: false, + FrontSideData: reflectionData, + BackSideData: reflectionData, + LeftSideData: reflectionData, + RightSideData: reflectionData, + TopSideData: reflectionData, + BottomSideData: reflectionData, + }) + + refractionTexture := p.engine.Graphics().CreateCubeTexture(graphics.CubeTextureDefinition{ + Dimension: 1, + Filtering: graphics.FilterNearest, + InternalFormat: graphics.InternalFormatRGBA16F, + DataFormat: graphics.DataFormatRGBA16F, + GammaCorrection: false, + GenerateMipmaps: false, + FrontSideData: reflectionData, + BackSideData: reflectionData, + LeftSideData: reflectionData, + RightSideData: reflectionData, + TopSideData: reflectionData, + BottomSideData: reflectionData, + }) + + return scene.CreateAmbientLight(graphics.AmbientLightInfo{ + ReflectionTexture: reflectionTexture, + RefractionTexture: refractionTexture, + Position: dprec.ZeroVec3(), + InnerRadius: 5000, + OuterRadius: 5000, + }) +} + +func (p *HomeScreenPresenter) createNightAmbientLight(scene *graphics.Scene) *graphics.AmbientLight { + reflectionData := gblob.LittleEndianBlock(make([]byte, 4*2)) + reflectionData.SetUint16(0, float16.Fromfloat32(0.1).Bits()) + reflectionData.SetUint16(2, float16.Fromfloat32(0.1).Bits()) + reflectionData.SetUint16(4, float16.Fromfloat32(0.1).Bits()) + reflectionData.SetUint16(6, float16.Fromfloat32(1.0).Bits()) + + reflectionTexture := p.engine.Graphics().CreateCubeTexture(graphics.CubeTextureDefinition{ + Dimension: 1, + Filtering: graphics.FilterNearest, + InternalFormat: graphics.InternalFormatRGBA16F, + DataFormat: graphics.DataFormatRGBA16F, + GammaCorrection: false, + GenerateMipmaps: false, + FrontSideData: reflectionData, + BackSideData: reflectionData, + LeftSideData: reflectionData, + RightSideData: reflectionData, + TopSideData: reflectionData, + BottomSideData: reflectionData, + }) + + refractionTexture := p.engine.Graphics().CreateCubeTexture(graphics.CubeTextureDefinition{ + Dimension: 1, + Filtering: graphics.FilterNearest, + InternalFormat: graphics.InternalFormatRGBA16F, + DataFormat: graphics.DataFormatRGBA16F, + GammaCorrection: false, + GenerateMipmaps: false, + FrontSideData: reflectionData, + BackSideData: reflectionData, + LeftSideData: reflectionData, + RightSideData: reflectionData, + TopSideData: reflectionData, + BottomSideData: reflectionData, + }) + + return scene.CreateAmbientLight(graphics.AmbientLightInfo{ + ReflectionTexture: reflectionTexture, + RefractionTexture: refractionTexture, + Position: dprec.ZeroVec3(), + InnerRadius: 5000, + OuterRadius: 5000, + }) } func (p *HomeScreenPresenter) controllerDescription(controller model.Controller) string { switch controller { case model.ControllerKeyboard: - return "The day drive is a good starting point for new players." + return "The keyboard provides poor accuracy and is least fun." case model.ControllerMouse: - return "The night drive is a bit more taxing on the computer." + return "The mouse provides great control when a gamepad is not available." case model.ControllerGamepad: - return "The night drive is a bit more taxing on the computer." + return "The gamepad is the best option. Most fun with balanced difficulty." default: return "" } @@ -376,7 +482,7 @@ func (p *HomeScreenPresenter) environmentDescription(environment model.Environme case model.EnvironmentDay: return "The day drive is a good starting point for new players." case model.EnvironmentNight: - return "The night drive is a bit more taxing on the computer." + return "The night drive is a nice alternative for regular players." default: return "" } @@ -396,10 +502,28 @@ func (p *HomeScreenPresenter) onGamepadClicked() { func (p *HomeScreenPresenter) onDayClicked() { p.homeModel.SetEnvironment(model.EnvironmentDay) + + // Disable night lighting + p.scene.NightAmbientLight.SetActive(false) + p.scene.NightSpotLight.SetActive(false) + + // Enable day lighting + p.scene.Scene.Graphics().Sky().SetBackgroundColor(p.scene.DaySkyColor) + p.scene.DayAmbientLight.SetActive(true) + p.scene.DayDirectionalLight.SetActive(true) } func (p *HomeScreenPresenter) onNightClicked() { p.homeModel.SetEnvironment(model.EnvironmentNight) + + // Disable day lighting + p.scene.DayAmbientLight.SetActive(false) + p.scene.DayDirectionalLight.SetActive(false) + + // Enable night lighting + p.scene.Scene.Graphics().Sky().SetBackgroundColor(p.scene.NightSkyColor) + p.scene.NightAmbientLight.SetActive(true) + p.scene.NightSpotLight.SetActive(true) } func (p *HomeScreenPresenter) onStartClicked() { diff --git a/internal/ui/widget/gearshifter.go b/internal/ui/widget/gearshifter.go index 26491a8..9dcd28c 100644 --- a/internal/ui/widget/gearshifter.go +++ b/internal/ui/widget/gearshifter.go @@ -40,7 +40,7 @@ func (p *gearShifterPresenter) Render() co.Instance { return co.New(mat.Element, func() { co.WithData(mat.ElementData{ Essence: p, - IdealSize: opt.V(ui.NewSize(150, 150)), + IdealSize: opt.V(ui.NewSize(200, 150)), }) co.WithLayoutData(p.LayoutData) }) diff --git a/internal/ui/widget/toggle.go b/internal/ui/widget/toggle.go index 4c582a0..b746550 100644 --- a/internal/ui/widget/toggle.go +++ b/internal/ui/widget/toggle.go @@ -9,7 +9,7 @@ import ( ) const ( - toggleFontSize = float32(26.0) + toggleFontSize = float32(24.0) ) type ToggleData struct { diff --git a/resources/levels/home-screen.json b/resources/levels/home-screen.json index 9c6d059..6a1d380 100644 --- a/resources/levels/home-screen.json +++ b/resources/levels/home-screen.json @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:baf3e10448bd1a2d159f626996a0bdf9ca0c344aa9e6e54c8cd1cd010572bdaa -size 441 +oid sha256:dab9272416ac0d41a3be61ef501327e2236d3b31cccacb42a12329d8098582eb +size 237 diff --git a/resources/ui/images/drive.png b/resources/ui/images/drive.png new file mode 100644 index 0000000..a4943d0 --- /dev/null +++ b/resources/ui/images/drive.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fe510752139ad0fb95a2cf1596ded5cf3bb3c61e1698999e506d32f6d303d73 +size 13298 diff --git a/resources/ui/images/reverse.png b/resources/ui/images/reverse.png new file mode 100644 index 0000000..5914028 --- /dev/null +++ b/resources/ui/images/reverse.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfabf81226c72056d898bfaabf3ed0aa020a86dfa3076e9668d79c4bc4b5420d +size 13370 From b2cee83e7bf2cce09eb46706d8dbee3300b964a1 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Mon, 3 Apr 2023 23:25:24 +0300 Subject: [PATCH 16/40] Handle different environments --- cmd/rallypack/main.go | 107 +++++++++++++----- internal/game/data/play.go | 39 ++++++- internal/ui/controller/play.go | 27 +++-- internal/ui/model/home.go | 31 ++--- internal/ui/view/home_screen.go | 55 +++++---- internal/ui/view/play_screen.go | 2 +- .../levels/{forest.json => forest-day.json} | 0 resources/levels/forest-night.json | 3 + 8 files changed, 177 insertions(+), 87 deletions(-) rename resources/levels/{forest.json => forest-day.json} (100%) create mode 100644 resources/levels/forest-night.json diff --git a/cmd/rallypack/main.go b/cmd/rallypack/main.go index c5f4ec3..0794b54 100644 --- a/cmd/rallypack/main.go +++ b/cmd/rallypack/main.go @@ -20,26 +20,34 @@ func runTool() error { return fmt.Errorf("failed to create registry: %w", err) } - texCubeSkybox := ensureResource(registry, "bab99e80-ded1-459a-b00b-6a17afa44046", "cube_texture", "Skybox") - texCubeSkyboxReflection := ensureResource(registry, "eb639f55-d6eb-46d7-bd3b-d52fcaa0bc58", "cube_texture", "Skybox Reflection") - texCubeSkyboxRefraction := ensureResource(registry, "0815fb89-7ae6-4229-b9e2-59610c4fc6bc", "cube_texture", "Skybox Refraction") + skyboxDay := ensureResource(registry, "bab99e80-ded1-459a-b00b-6a17afa44046", "cube_texture", "Skybox Day") + skyboxDayReflection := ensureResource(registry, "eb639f55-d6eb-46d7-bd3b-d52fcaa0bc58", "cube_texture", "Skybox Day Reflection") + skyboxDayRefraction := ensureResource(registry, "0815fb89-7ae6-4229-b9e2-59610c4fc6bc", "cube_texture", "Skybox Day Refraction") + + skyboxNight := ensureResource(registry, "904431e9-7d78-4cbb-ae46-2e70b1458832", "cube_texture", "Skybox Night") + skyboxNightReflection := ensureResource(registry, "892ece47-c4c8-4ff0-a9ad-0faa208eee81", "cube_texture", "Skybox Night Reflection") + skyboxNightRefraction := ensureResource(registry, "e79da33a-5131-4029-b168-ea2c5378c169", "cube_texture", "Skybox Night Refraction") modelHomeScreen := ensureResource(registry, "d1aef712-4c5a-45b8-ba6f-0385e071a8f1", "model", "Content: Home Screen") modelForest := ensureResource(registry, "5f7bd967-dc4a-4252-b1a5-5721cd299d67", "model", "Forest Ride") modelSUV := ensureResource(registry, "eaeb7483-7271-441f-a470-c0a8fa225161", "model", "SUV") levelHomeScreen := ensureResource(registry, "80dd9049-c183-4d82-b5b2-6f38ca499055", "scene", "Home Screen") - levelHomeScreen.AddDependency(texCubeSkybox) - levelHomeScreen.AddDependency(texCubeSkyboxReflection) - levelHomeScreen.AddDependency(texCubeSkyboxRefraction) levelHomeScreen.AddDependency(modelHomeScreen) - levelForest := ensureResource(registry, "884e6395-2300-47bb-9916-b80e3dc0e086", "scene", "Forest") - levelForest.AddDependency(texCubeSkybox) - levelForest.AddDependency(texCubeSkyboxReflection) - levelForest.AddDependency(texCubeSkyboxRefraction) - levelForest.AddDependency(modelForest) - levelForest.AddDependency(modelSUV) + levelForestDay := ensureResource(registry, "884e6395-2300-47bb-9916-b80e3dc0e086", "scene", "Forest-Day") + levelForestDay.AddDependency(skyboxDay) + levelForestDay.AddDependency(skyboxDayReflection) + levelForestDay.AddDependency(skyboxDayRefraction) + levelForestDay.AddDependency(modelForest) + levelForestDay.AddDependency(modelSUV) + + levelForestNight := ensureResource(registry, "a288e44d-3ed5-415b-b9c2-4dbe086dfce2", "scene", "Forest-Night") + levelForestNight.AddDependency(skyboxNight) + levelForestNight.AddDependency(skyboxNightReflection) + levelForestNight.AddDependency(skyboxNightRefraction) + levelForestNight.AddDependency(modelForest) + levelForestNight.AddDependency(modelSUV) if err := registry.Save(); err != nil { return fmt.Errorf("error saving resources: %w", err) @@ -49,30 +57,59 @@ func runTool() error { // Cube Textures packer.Pipeline(func(p *pack.Pipeline) { - srcEquirectangularImage := p.OpenImageResource("resources/images/sky.hdr") - skyboxCubeImage := p.BuildCubeImage( - pack.WithFrontImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideFront, srcEquirectangularImage)), - pack.WithRearImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideRear, srcEquirectangularImage)), - pack.WithLeftImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideLeft, srcEquirectangularImage)), - pack.WithRightImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideRight, srcEquirectangularImage)), - pack.WithTopImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideTop, srcEquirectangularImage)), - pack.WithBottomImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideBottom, srcEquirectangularImage)), - ) - - smallerSkyboxCubeImage := p.ScaleCubeImage(skyboxCubeImage, 256) - p.SaveCubeTextureAsset(texCubeSkybox, smallerSkyboxCubeImage, + equirectangularImage := p.OpenImageResource("resources/images/day.hdr") + cubeImage := p.BuildCubeImage( + pack.WithFrontImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideFront, equirectangularImage)), + pack.WithRearImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideRear, equirectangularImage)), + pack.WithLeftImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideLeft, equirectangularImage)), + pack.WithRightImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideRight, equirectangularImage)), + pack.WithTopImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideTop, equirectangularImage)), + pack.WithBottomImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideBottom, equirectangularImage)), + ) + + smallerCubeImage := p.ScaleCubeImage(cubeImage, 256) + p.SaveCubeTextureAsset(skyboxDay, smallerCubeImage, + pack.WithFormat(asset.TexelFormatRGBA16F), + ) + + reflectionCubeImage := p.ScaleCubeImage(cubeImage, 128) + p.SaveCubeTextureAsset(skyboxDayReflection, reflectionCubeImage, + pack.WithFormat(asset.TexelFormatRGBA16F), + ) + + refractionCubeImage := p.BuildIrradianceCubeImage(reflectionCubeImage, + pack.WithSampleCount(50), + ) + p.SaveCubeTextureAsset(skyboxDayRefraction, refractionCubeImage, + pack.WithFormat(asset.TexelFormatRGBA16F), + ) + }) + + packer.Pipeline(func(p *pack.Pipeline) { + equirectangularImage := p.OpenImageResource("resources/images/night.hdr") + cubeImage := p.BuildCubeImage( + pack.WithFrontImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideFront, equirectangularImage)), + pack.WithRearImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideRear, equirectangularImage)), + pack.WithLeftImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideLeft, equirectangularImage)), + pack.WithRightImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideRight, equirectangularImage)), + pack.WithTopImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideTop, equirectangularImage)), + pack.WithBottomImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideBottom, equirectangularImage)), + ) + + smallerCubeImage := p.ScaleCubeImage(cubeImage, 256) + p.SaveCubeTextureAsset(skyboxNight, smallerCubeImage, pack.WithFormat(asset.TexelFormatRGBA16F), ) - reflectionCubeImage := p.ScaleCubeImage(skyboxCubeImage, 128) - p.SaveCubeTextureAsset(texCubeSkyboxReflection, reflectionCubeImage, + reflectionCubeImage := p.ScaleCubeImage(cubeImage, 128) + p.SaveCubeTextureAsset(skyboxNightReflection, reflectionCubeImage, pack.WithFormat(asset.TexelFormatRGBA16F), ) refractionCubeImage := p.BuildIrradianceCubeImage(reflectionCubeImage, pack.WithSampleCount(50), ) - p.SaveCubeTextureAsset(texCubeSkyboxRefraction, refractionCubeImage, + p.SaveCubeTextureAsset(skyboxNightRefraction, refractionCubeImage, pack.WithFormat(asset.TexelFormatRGBA16F), ) }) @@ -82,11 +119,15 @@ func runTool() error { p.SaveModelAsset(modelHomeScreen, p.OpenGLTFResource("resources/models/home-screen.glb"), ) + }) + packer.Pipeline(func(p *pack.Pipeline) { p.SaveModelAsset(modelSUV, p.OpenGLTFResource("resources/models/suv.glb"), ) + }) + packer.Pipeline(func(p *pack.Pipeline) { p.SaveModelAsset(modelForest, p.OpenGLTFResource("resources/models/forest.glb"), ) @@ -97,9 +138,17 @@ func runTool() error { p.SaveLevelAsset(levelHomeScreen, p.OpenLevelResource("resources/levels/home-screen.json"), ) + }) - p.SaveLevelAsset(levelForest, - p.OpenLevelResource("resources/levels/forest.json"), + packer.Pipeline(func(p *pack.Pipeline) { + p.SaveLevelAsset(levelForestDay, + p.OpenLevelResource("resources/levels/forest-day.json"), + ) + }) + + packer.Pipeline(func(p *pack.Pipeline) { + p.SaveLevelAsset(levelForestNight, + p.OpenLevelResource("resources/levels/forest-night.json"), ) }) diff --git a/internal/game/data/play.go b/internal/game/data/play.go index 8ed199c..3799bbc 100644 --- a/internal/game/data/play.go +++ b/internal/game/data/play.go @@ -1,17 +1,46 @@ package data import ( + "fmt" + "github.com/mokiat/lacking/game" "github.com/mokiat/lacking/util/async" ) -func LoadPlayData(engine *game.Engine, resourceSet *game.ResourceSet) game.Promise[*PlayData] { - scenePromise := resourceSet.OpenSceneByName("Forest") +type Controller string + +const ( + ControllerKeyboard Controller = "keyboard" + ControllerMouse Controller = "mouse" + ControllerGamepad Controller = "gamepad" +) + +type Environment string + +const ( + EnvironmentDay Environment = "day" + EnvironmentNight Environment = "night" +) + +func LoadPlayData(engine *game.Engine, resourceSet *game.ResourceSet, environment Environment, controller Controller) game.Promise[*PlayData] { + var sceneName string + switch environment { + case EnvironmentDay: + sceneName = "Forest-Day" + case EnvironmentNight: + sceneName = "Forest-Night" + default: + panic(fmt.Errorf("unknown environment %q", environment)) + } + + scenePromise := resourceSet.OpenSceneByName(sceneName) vehiclePromise := resourceSet.OpenModelByName("SUV") result := async.NewPromise[*PlayData]() go func() { var data PlayData + data.Environment = environment + data.Controller = controller err := firstErr( scenePromise.Inject(&data.Scene), vehiclePromise.Inject(&data.Vehicle), @@ -26,6 +55,8 @@ func LoadPlayData(engine *game.Engine, resourceSet *game.ResourceSet) game.Promi } type PlayData struct { - Scene *game.SceneDefinition - Vehicle *game.ModelDefinition + Scene *game.SceneDefinition + Vehicle *game.ModelDefinition + Environment Environment + Controller Controller } diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index 48b152a..b743470 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -49,7 +49,7 @@ type PlayController struct { vehicle *preset.Car } -func (c *PlayController) Start() { +func (c *PlayController) Start(environment data.Environment, controller data.Controller) { // TODO: These subscriptions should be attached on the scene and/or the physics. c.preUpdateSubscription = c.engine.SubscribePreUpdate(c.onPreUpdate) c.postUpdateSubscription = c.engine.SubscribePostUpdate(c.onPostUpdate) @@ -69,10 +69,19 @@ func (c *PlayController) Start() { c.carSystem = preset.NewCarSystem(c.ecsScene, c.window) c.carSystem.UseDefaults() - sunLight := c.scene.Graphics().CreateDirectionalLight(graphics.DirectionalLightInfo{ - EmitColor: dprec.NewVec3(0.5, 0.5, 0.3), - EmitRange: 16000, // FIXME - }) + var sunLight *graphics.DirectionalLight + switch environment { + case data.EnvironmentDay: + sunLight = c.scene.Graphics().CreateDirectionalLight(graphics.DirectionalLightInfo{ + EmitColor: dprec.NewVec3(0.5, 0.5, 0.3), + EmitRange: 16000, // FIXME + }) + case data.EnvironmentNight: + sunLight = c.scene.Graphics().CreateDirectionalLight(graphics.DirectionalLightInfo{ + EmitColor: dprec.NewVec3(0.001, 0.001, 0.001), + EmitRange: 16000, // FIXME + }) + } lightNode := game.NewNode() lightNode.SetPosition(dprec.NewVec3(-100.0, 100.0, 0.0)) @@ -117,8 +126,8 @@ func (c *PlayController) Start() { c.followCamera = c.gfxScene.CreateCamera() c.followCamera.SetFoVMode(graphics.FoVModeHorizontalPlus) c.followCamera.SetFoV(sprec.Degrees(66)) - c.followCamera.SetAutoExposure(true) - c.followCamera.SetExposure(1.0) + c.followCamera.SetAutoExposure(false) + c.followCamera.SetExposure(15.0) c.followCamera.SetAutoFocus(false) c.gfxScene.SetActiveCamera(c.followCamera) @@ -130,8 +139,8 @@ func (c *PlayController) Start() { c.bonnetCamera = c.gfxScene.CreateCamera() c.bonnetCamera.SetFoVMode(graphics.FoVModeHorizontalPlus) c.bonnetCamera.SetFoV(sprec.Degrees(80)) - c.bonnetCamera.SetAutoExposure(true) - c.bonnetCamera.SetExposure(1.0) + c.bonnetCamera.SetAutoExposure(false) + c.bonnetCamera.SetExposure(15.0) c.bonnetCamera.SetAutoFocus(false) bonnetCameraNode := game.NewNode() diff --git a/internal/ui/model/home.go b/internal/ui/model/home.go index 0d856f2..7f64fdc 100644 --- a/internal/ui/model/home.go +++ b/internal/ui/model/home.go @@ -16,21 +16,6 @@ var ( HomeEnvironmentChange = mvc.SubChange(HomeChange, "environment") ) -type Controller string - -const ( - ControllerKeyboard Controller = "keyboard" - ControllerMouse Controller = "mouse" - ControllerGamepad Controller = "gamepad" -) - -type Environment string - -const ( - EnvironmentDay Environment = "day" - EnvironmentNight Environment = "night" -) - type HomeScene struct { Scene *game.Scene @@ -46,8 +31,8 @@ type HomeScene struct { func newHome() *Home { return &Home{ Observable: mvc.NewObservable(), - controller: ControllerKeyboard, - environment: EnvironmentDay, + controller: data.ControllerKeyboard, + environment: data.EnvironmentDay, } } @@ -55,8 +40,8 @@ type Home struct { mvc.Observable sceneData game.Promise[*data.HomeData] scene *HomeScene - controller Controller - environment Environment + controller data.Controller + environment data.Environment } func (h *Home) Data() game.Promise[*data.HomeData] { @@ -77,20 +62,20 @@ func (h *Home) SetScene(scene *HomeScene) { h.SignalChange(HomeSceneChange) } -func (h *Home) Controller() Controller { +func (h *Home) Controller() data.Controller { return h.controller } -func (h *Home) SetController(controller Controller) { +func (h *Home) SetController(controller data.Controller) { h.controller = controller h.SignalChange(HomeControllerChange) } -func (h *Home) Environment() Environment { +func (h *Home) Environment() data.Environment { return h.environment } -func (h *Home) SetEnvironment(environment Environment) { +func (h *Home) SetEnvironment(environment data.Environment) { h.environment = environment h.SignalChange(HomeEnvironmentChange) } diff --git a/internal/ui/view/home_screen.go b/internal/ui/view/home_screen.go index d381ee7..64bf559 100644 --- a/internal/ui/view/home_screen.go +++ b/internal/ui/view/home_screen.go @@ -197,7 +197,7 @@ func (p *HomeScreenPresenter) Render() co.Instance { co.WithChild("keyboard", co.New(widget.Toggle, func() { co.WithData(widget.ToggleData{ Text: "Keyboard", - Selected: controller == model.ControllerKeyboard, + Selected: controller == data.ControllerKeyboard, }) co.WithCallbackData(widget.ToggleCallbackData{ ClickListener: p.onKeyboardClicked, @@ -207,7 +207,7 @@ func (p *HomeScreenPresenter) Render() co.Instance { co.WithChild("mouse", co.New(widget.Toggle, func() { co.WithData(widget.ToggleData{ Text: "Mouse", - Selected: controller == model.ControllerMouse, + Selected: controller == data.ControllerMouse, }) co.WithCallbackData(widget.ToggleCallbackData{ ClickListener: p.onMouseClicked, @@ -217,7 +217,7 @@ func (p *HomeScreenPresenter) Render() co.Instance { co.WithChild("gamepad", co.New(widget.Toggle, func() { co.WithData(widget.ToggleData{ Text: "Gamepad", - Selected: controller == model.ControllerGamepad, + Selected: controller == data.ControllerGamepad, }) co.WithCallbackData(widget.ToggleCallbackData{ ClickListener: p.onGamepadClicked, @@ -225,9 +225,22 @@ func (p *HomeScreenPresenter) Render() co.Instance { })) })) - co.WithChild("controller-image", co.New(mat.Container, func() { - co.WithData(mat.ContainerData{ - BackgroundColor: opt.V(ui.Black()), + var imageURL string + switch controller { + case data.ControllerKeyboard: + imageURL = "ui/images/keyboard.png" + case data.ControllerMouse: + imageURL = "ui/images/mouse.png" + case data.ControllerGamepad: + imageURL = "ui/images/gamepad.png" + } + + co.WithChild("controller-image", co.New(mat.Picture, func() { + co.WithData(mat.PictureData{ + BackgroundColor: opt.V(ui.RGBA(0x00, 0x00, 0x00, 0x9A)), + Image: co.OpenImage(p.Scope, imageURL), + ImageColor: opt.V(ui.White()), + Mode: mat.ImageModeStretch, }) co.WithLayoutData(mat.LayoutData{ Width: opt.V(600), @@ -263,7 +276,7 @@ func (p *HomeScreenPresenter) Render() co.Instance { co.WithChild("day", co.New(widget.Toggle, func() { co.WithData(widget.ToggleData{ Text: "Day", - Selected: environment == model.EnvironmentDay, + Selected: environment == data.EnvironmentDay, }) co.WithCallbackData(widget.ToggleCallbackData{ ClickListener: p.onDayClicked, @@ -273,7 +286,7 @@ func (p *HomeScreenPresenter) Render() co.Instance { co.WithChild("night", co.New(widget.Toggle, func() { co.WithData(widget.ToggleData{ Text: "Night", - Selected: environment == model.EnvironmentNight, + Selected: environment == data.EnvironmentNight, }) co.WithCallbackData(widget.ToggleCallbackData{ ClickListener: p.onNightClicked, @@ -464,24 +477,24 @@ func (p *HomeScreenPresenter) createNightAmbientLight(scene *graphics.Scene) *gr }) } -func (p *HomeScreenPresenter) controllerDescription(controller model.Controller) string { +func (p *HomeScreenPresenter) controllerDescription(controller data.Controller) string { switch controller { - case model.ControllerKeyboard: + case data.ControllerKeyboard: return "The keyboard provides poor accuracy and is least fun." - case model.ControllerMouse: + case data.ControllerMouse: return "The mouse provides great control when a gamepad is not available." - case model.ControllerGamepad: + case data.ControllerGamepad: return "The gamepad is the best option. Most fun with balanced difficulty." default: return "" } } -func (p *HomeScreenPresenter) environmentDescription(environment model.Environment) string { +func (p *HomeScreenPresenter) environmentDescription(environment data.Environment) string { switch environment { - case model.EnvironmentDay: + case data.EnvironmentDay: return "The day drive is a good starting point for new players." - case model.EnvironmentNight: + case data.EnvironmentNight: return "The night drive is a nice alternative for regular players." default: return "" @@ -489,19 +502,19 @@ func (p *HomeScreenPresenter) environmentDescription(environment model.Environme } func (p *HomeScreenPresenter) onKeyboardClicked() { - p.homeModel.SetController(model.ControllerKeyboard) + p.homeModel.SetController(data.ControllerKeyboard) } func (p *HomeScreenPresenter) onMouseClicked() { - p.homeModel.SetController(model.ControllerMouse) + p.homeModel.SetController(data.ControllerMouse) } func (p *HomeScreenPresenter) onGamepadClicked() { - p.homeModel.SetController(model.ControllerGamepad) + p.homeModel.SetController(data.ControllerGamepad) } func (p *HomeScreenPresenter) onDayClicked() { - p.homeModel.SetEnvironment(model.EnvironmentDay) + p.homeModel.SetEnvironment(data.EnvironmentDay) // Disable night lighting p.scene.NightAmbientLight.SetActive(false) @@ -514,7 +527,7 @@ func (p *HomeScreenPresenter) onDayClicked() { } func (p *HomeScreenPresenter) onNightClicked() { - p.homeModel.SetEnvironment(model.EnvironmentNight) + p.homeModel.SetEnvironment(data.EnvironmentNight) // Disable day lighting p.scene.DayAmbientLight.SetActive(false) @@ -528,7 +541,7 @@ func (p *HomeScreenPresenter) onNightClicked() { func (p *HomeScreenPresenter) onStartClicked() { resourceSet := p.engine.CreateResourceSet() - promise := data.LoadPlayData(p.engine, resourceSet) + promise := data.LoadPlayData(p.engine, resourceSet, p.homeModel.Environment(), p.homeModel.Controller()) p.playModel.SetData(promise) p.loadingModel.SetPromise(promise) diff --git a/internal/ui/view/play_screen.go b/internal/ui/view/play_screen.go index 987a63c..168fd87 100644 --- a/internal/ui/view/play_screen.go +++ b/internal/ui/view/play_screen.go @@ -71,7 +71,7 @@ func (p *PlayScreenPresenter) OnCreate() { panic(fmt.Errorf("failed to get data: %w", err)) } p.controller = controller.NewPlayController(co.Window(p.Scope).Window, context.Engine, playData) - p.controller.Start() + p.controller.Start(playData.Environment, playData.Controller) co.Window(p.Scope).SetCursorVisible(false) } diff --git a/resources/levels/forest.json b/resources/levels/forest-day.json similarity index 100% rename from resources/levels/forest.json rename to resources/levels/forest-day.json diff --git a/resources/levels/forest-night.json b/resources/levels/forest-night.json new file mode 100644 index 0000000..43716ba --- /dev/null +++ b/resources/levels/forest-night.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3a615551f16de45453e9e1bc175cf9335f967f1c89d6863171ab1a8fb39d996 +size 416 From 98f8a3a7b8d3039cadeee8f02eb175798698ecc3 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sat, 8 Apr 2023 20:20:46 +0300 Subject: [PATCH 17/40] Add new app icon --- resources/ui/images/icon.png | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/ui/images/icon.png b/resources/ui/images/icon.png index 9d8872b..5d57c31 100644 --- a/resources/ui/images/icon.png +++ b/resources/ui/images/icon.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4c4c3f17f43f872614271f0f9f0aed2a5fc536ac7519173d33e4fe656ca94fe -size 2408 +oid sha256:3cf03e899e80f153f3d90009c9d18ce68110f07755250726fb5f06bef5224824 +size 13088 From 8aeeca6f1a1fcee9ed4d1768086d6e4369b19926 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sat, 8 Apr 2023 20:23:50 +0300 Subject: [PATCH 18/40] Support mouse and keyboard --- internal/ecscomp/vehicle.go | 31 ----- internal/ecssys/vehicle.go | 205 -------------------------------- internal/ui/controller/play.go | 72 ++++++++++- internal/ui/view/play_screen.go | 14 ++- 4 files changed, 78 insertions(+), 244 deletions(-) delete mode 100644 internal/ecscomp/vehicle.go delete mode 100644 internal/ecssys/vehicle.go diff --git a/internal/ecscomp/vehicle.go b/internal/ecscomp/vehicle.go deleted file mode 100644 index 12c7b61..0000000 --- a/internal/ecscomp/vehicle.go +++ /dev/null @@ -1,31 +0,0 @@ -package ecscomp - -import ( - "github.com/mokiat/gomath/dprec" - "github.com/mokiat/lacking/game/ecs" - "github.com/mokiat/lacking/game/physics" -) - -var VehicleComponentID ecs.ComponentTypeID = ecs.NewComponentTypeID() - -func GetVehicle(entity *ecs.Entity) *Vehicle { - component := entity.Component(VehicleComponentID) - if component == nil { - return nil - } - return component.(*Vehicle) -} - -type Vehicle struct { - MaxSteeringAngle dprec.Angle - SteeringAngle dprec.Angle - Acceleration float64 - Deceleration float64 - Recover bool - - Chassis *Chassis -} - -type Chassis struct { - Body *physics.Body -} diff --git a/internal/ecssys/vehicle.go b/internal/ecssys/vehicle.go deleted file mode 100644 index 0b6414a..0000000 --- a/internal/ecssys/vehicle.go +++ /dev/null @@ -1,205 +0,0 @@ -package ecssys - -import ( - "github.com/mokiat/gomath/dprec" - "github.com/mokiat/lacking/app" - "github.com/mokiat/lacking/game/ecs" - "github.com/mokiat/lacking/game/graphics" - "github.com/mokiat/lacking/game/preset" - "github.com/mokiat/lacking/ui" - "github.com/mokiat/lacking/util/shape" - "github.com/mokiat/rally-mka/internal/ecscomp" -) - -const ( - steeringSpeed = 80 - steeringRestoreSpeed = steeringSpeed * 2 -) - -func NewVehicleSystem(ecsScene *ecs.Scene) *VehicleSystem { - return &VehicleSystem{ - ecsScene: ecsScene, - } -} - -type VehicleSystem struct { - ecsScene *ecs.Scene - - isSteerLeft bool - isSteerRight bool - isAccelerate bool - isDecelerate bool - isRecover bool - - mouseLeft bool - mouseRight bool - mouseActive bool - mouseX int - mouseY int - - viewport graphics.Viewport - camera *graphics.Camera - graphicsScene *graphics.Scene -} - -func (s *VehicleSystem) OnMouseEvent(event ui.MouseEvent, viewport graphics.Viewport, camera *graphics.Camera, graphicsScene *graphics.Scene) bool { - s.viewport = viewport - s.camera = camera - s.graphicsScene = graphicsScene - - switch event.Type { - case app.MouseEventTypeDown: - switch event.Button { - case app.MouseButtonLeft: - s.mouseLeft = true - case app.MouseButtonMiddle: - s.mouseActive = !s.mouseActive - case app.MouseButtonRight: - s.mouseRight = true - } - case app.MouseEventTypeUp: - switch event.Button { - case app.MouseButtonLeft: - s.mouseLeft = false - case app.MouseButtonRight: - s.mouseRight = false - } - case app.MouseEventTypeMove: - if !s.mouseActive { - return false - } - s.mouseX = event.Position.X - s.mouseY = event.Position.Y - } - return true -} - -func (s *VehicleSystem) Update(elapsedSeconds float64) { - result := s.ecsScene.Find(ecs.Having(ecscomp.VehicleComponentID)) - defer result.Close() - - for result.HasNext() { - entity := result.Next() - vehicle := ecscomp.GetVehicle(entity) - var controlled *preset.ControlledComponent - if ecs.FetchComponent(entity, &controlled) { - if s.mouseActive { - s.updateVehicleControlMouse(vehicle, elapsedSeconds) - } else { - s.updateVehicleControlKeyboard(vehicle, elapsedSeconds) - } - } - } -} - -func (s *VehicleSystem) updateVehicleControlMouse(vehicle *ecscomp.Vehicle, elapsedSeconds float64) { - vehicle.Recover = s.isRecover - - orientation := vehicle.Chassis.Body.Orientation() - orientationX := orientation.OrientationX() - orientationZ := orientation.OrientationZ() - - // TODO: Use sphere shape instead - // TODO: Move Position and orientation into placement - position := vehicle.Chassis.Body.Position() - a := dprec.Vec3Sum(dprec.Vec3Sum( - dprec.Vec3Prod(orientationX, -1000), - dprec.Vec3Prod(orientationZ, -1000), - ), position) - b := dprec.Vec3Sum(dprec.Vec3Sum( - dprec.Vec3Prod(orientationX, -1000), - dprec.Vec3Prod(orientationZ, 1000), - ), position) - c := dprec.Vec3Sum(dprec.Vec3Sum( - dprec.Vec3Prod(orientationX, 1000), - dprec.Vec3Prod(orientationZ, 1000), - ), position) - d := dprec.Vec3Sum(dprec.Vec3Sum( - dprec.Vec3Prod(orientationX, 1000), - dprec.Vec3Prod(orientationZ, -1000), - ), position) - - surface := shape.NewPlacement(shape.IdentityTransform(), shape.NewStaticMesh([]shape.StaticTriangle{ - shape.NewStaticTriangle(shape.Point(a), shape.Point(b), shape.Point(c)), - shape.NewStaticTriangle(shape.Point(a), shape.Point(c), shape.Point(d)), - })) - - line := s.graphicsScene.Ray(s.viewport, s.camera, s.mouseX, s.mouseY) - - result := shape.NewIntersectionResultSet(1) - shape.CheckIntersectionLineWithMesh(line, surface, result) - - if result.Found() { - intersection := result.Intersections()[0] - mouseTarget := intersection.FirstContact - - delta := dprec.Vec3Diff(mouseTarget, vehicle.Chassis.Body.Position()) - delta.Y = 0.0 - - forward := vehicle.Chassis.Body.Orientation().OrientationZ() - forward.Y = 0.0 - - sin := dprec.Vec3Cross( - dprec.UnitVec3(delta), - dprec.UnitVec3(forward), - ) - angle := dprec.Angle(dprec.Sign(sin.Y)) * dprec.Asin(sin.Length()) - - vehicle.SteeringAngle = dprec.Clamp(-dprec.Angle(angle), -vehicle.MaxSteeringAngle, vehicle.MaxSteeringAngle) - } else { - vehicle.SteeringAngle = 0 - } - - if s.mouseLeft { - vehicle.Acceleration = 0.8 - } else { - vehicle.Acceleration = 0.0 - } - if s.mouseRight { - vehicle.Deceleration = 0.8 - } else { - vehicle.Deceleration = 0.0 - } -} - -func (s *VehicleSystem) updateVehicleControlKeyboard(vehicle *ecscomp.Vehicle, elapsedSeconds float64) { - vehicle.Recover = s.isRecover - - autoMaxSteeringAngle := dprec.Degrees(vehicle.MaxSteeringAngle.Degrees() / (1.0 + 0.05*vehicle.Chassis.Body.Velocity().Length())) - switch { - case s.isSteerLeft == s.isSteerRight: - if vehicle.SteeringAngle > 0.0 { - vehicle.SteeringAngle -= dprec.Degrees(elapsedSeconds * steeringRestoreSpeed) - if vehicle.SteeringAngle < 0.0 { - vehicle.SteeringAngle = 0.0 - } - } - if vehicle.SteeringAngle < 0.0 { - vehicle.SteeringAngle += dprec.Degrees(elapsedSeconds * steeringRestoreSpeed) - if vehicle.SteeringAngle > 0.0 { - vehicle.SteeringAngle = 0.0 - } - } - case s.isSteerLeft: - vehicle.SteeringAngle += dprec.Degrees(elapsedSeconds * steeringSpeed) - if vehicle.SteeringAngle > autoMaxSteeringAngle { - vehicle.SteeringAngle = autoMaxSteeringAngle - } - case s.isSteerRight: - vehicle.SteeringAngle -= dprec.Degrees(elapsedSeconds * steeringSpeed) - if vehicle.SteeringAngle < -autoMaxSteeringAngle { - vehicle.SteeringAngle = -autoMaxSteeringAngle - } - } - - if s.isAccelerate { - vehicle.Acceleration = 0.8 - } else { - vehicle.Acceleration = 0.0 - } - if s.isDecelerate { - vehicle.Deceleration = 0.8 - } else { - vehicle.Deceleration = 0.0 - } -} diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index b743470..fbf067d 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -9,6 +9,7 @@ import ( "github.com/mokiat/lacking/game/graphics" "github.com/mokiat/lacking/game/physics" "github.com/mokiat/lacking/game/preset" + "github.com/mokiat/lacking/ui" "github.com/mokiat/lacking/util/shape" "github.com/mokiat/rally-mka/internal/game/data" ) @@ -66,8 +67,7 @@ func (c *PlayController) Start(environment data.Environment, controller data.Con c.followCameraSystem = preset.NewFollowCameraSystem(c.ecsScene, c.window) c.followCameraSystem.UseDefaults() - c.carSystem = preset.NewCarSystem(c.ecsScene, c.window) - c.carSystem.UseDefaults() + c.carSystem = preset.NewCarSystem(c.ecsScene, c.gfxScene, c.window) var sunLight *graphics.DirectionalLight switch environment { @@ -116,13 +116,39 @@ func (c *PlayController) Start(environment data.Environment, controller data.Con Model: carInstance, Position: dprec.NewVec3(0.0, 0.5, 0.0), Rotation: dprec.IdentityQuat(), - Inputs: preset.ControlInputKeyboard | preset.ControlInputMouse | preset.ControlInputGamepad0, }) var vehicleNodeComponent *preset.NodeComponent ecs.FetchComponent(c.vehicle.Entity(), &vehicleNodeComponent) vehicleNode := vehicleNodeComponent.Node vehicleNode.AppendChild(lightNode) // FIXME + switch controller { + case data.ControllerKeyboard: + ecs.AttachComponent(c.vehicle.Entity(), &preset.CarKeyboardControl{ + AccelerateKey: ui.KeyCodeArrowUp, + DecelerateKey: ui.KeyCodeArrowDown, + TurnLeftKey: ui.KeyCodeArrowLeft, + TurnRightKey: ui.KeyCodeArrowRight, + ShiftUpKey: ui.KeyCodeA, + ShiftDownKey: ui.KeyCodeZ, + + AccelerationChangeSpeed: 1.0, + DecelerationChangeSpeed: 2.0, + SteeringChangeSpeed: 3.0, + SteeringRestoreSpeed: 6.0, + }) + case data.ControllerMouse: + ecs.AttachComponent(c.vehicle.Entity(), &preset.CarMouseControl{ + AccelerationChangeSpeed: 1.0, + DecelerationChangeSpeed: 2.0, + Destination: dprec.ZeroVec3(), + }) + case data.ControllerGamepad: + ecs.AttachComponent(c.vehicle.Entity(), &preset.CarGamepadControl{ + Gamepad: c.window.Gamepads()[0], + }) + } + c.followCamera = c.gfxScene.CreateCamera() c.followCamera.SetFoVMode(graphics.FoVModeHorizontalPlus) c.followCamera.SetFoV(sprec.Degrees(66)) @@ -190,6 +216,34 @@ func (c *PlayController) Velocity() float64 { return c.vehicle.Velocity() } +func (c *PlayController) VelocityFL() float64 { + if c.vehicle == nil { + return 0.0 + } + return c.vehicle.Axes()[0].LeftWheel().Velocity() +} + +func (c *PlayController) VelocityFR() float64 { + if c.vehicle == nil { + return 0.0 + } + return c.vehicle.Axes()[0].RightWheel().Velocity() +} + +func (c *PlayController) VelocityBL() float64 { + if c.vehicle == nil { + return 0.0 + } + return c.vehicle.Axes()[1].LeftWheel().Velocity() +} + +func (c *PlayController) VelocityBR() float64 { + if c.vehicle == nil { + return 0.0 + } + return c.vehicle.Axes()[1].RightWheel().Velocity() +} + func (c *PlayController) Acceleration() float64 { return 0.0 } @@ -212,7 +266,15 @@ func (c *PlayController) IsDrive() bool { } var carComp *preset.CarComponent ecs.FetchComponent(c.vehicle.Entity(), &carComp) - return carComp.Direction == preset.CarDirectionForward + return carComp.Gear == preset.CarGearForward +} + +func (c *PlayController) OnMouseEvent(element *ui.Element, event ui.MouseEvent) bool { + return c.carSystem.OnMouseEvent(element, event) +} + +func (c *PlayController) OnKeyboardEvent(event ui.KeyboardEvent) bool { + return c.carSystem.OnKeyboardEvent(event) } func (c *PlayController) onPreUpdate(engine *game.Engine, scene *game.Scene, elapsedSeconds float64) { @@ -294,7 +356,7 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { WithSpringDamping(0.8). WithLeftWheelDefinition(frontLeftWheelDef). WithRightWheelDefinition(frontRightWheelDef). - WithMaxSteeringAngle(dprec.Degrees(30)). + WithMaxSteeringAngle(dprec.Degrees(45)). WithMaxAcceleration(145). WithMaxBraking(250). WithReverseRatio(0.5) diff --git a/internal/ui/view/play_screen.go b/internal/ui/view/play_screen.go index 168fd87..cc6d834 100644 --- a/internal/ui/view/play_screen.go +++ b/internal/ui/view/play_screen.go @@ -10,6 +10,7 @@ import ( "github.com/mokiat/lacking/ui/mat" "github.com/mokiat/lacking/ui/mvc" "github.com/mokiat/lacking/util/metrics" + "github.com/mokiat/rally-mka/internal/game/data" "github.com/mokiat/rally-mka/internal/ui/action" "github.com/mokiat/rally-mka/internal/ui/controller" "github.com/mokiat/rally-mka/internal/ui/global" @@ -28,6 +29,7 @@ type PlayScreenPresenter struct { Data PlayScreenData `co:"data"` Invalidate func() `co:"invalidate"` + hideCursor bool controller *controller.PlayController debugVisible bool @@ -40,6 +42,7 @@ type PlayScreenPresenter struct { } var _ ui.ElementKeyboardHandler = (*PlayScreenPresenter)(nil) +var _ ui.ElementMouseHandler = (*PlayScreenPresenter)(nil) func (p *PlayScreenPresenter) OnCreate() { var context global.Context @@ -73,7 +76,8 @@ func (p *PlayScreenPresenter) OnCreate() { p.controller = controller.NewPlayController(co.Window(p.Scope).Window, context.Engine, playData) p.controller.Start(playData.Environment, playData.Controller) - co.Window(p.Scope).SetCursorVisible(false) + p.hideCursor = playData.Controller != data.ControllerMouse + co.Window(p.Scope).SetCursorVisible(!p.hideCursor) } func (p *PlayScreenPresenter) OnDelete() { @@ -83,6 +87,10 @@ func (p *PlayScreenPresenter) OnDelete() { defer co.Window(p.Scope).SetCursorVisible(true) } +func (p *PlayScreenPresenter) OnMouseEvent(element *ui.Element, event ui.MouseEvent) bool { + return p.controller.OnMouseEvent(element, event) +} + func (p *PlayScreenPresenter) OnKeyboardEvent(element *ui.Element, event ui.KeyboardEvent) bool { // TODO: Pass to controller switch event.Code { @@ -111,7 +119,7 @@ func (p *PlayScreenPresenter) OnKeyboardEvent(element *ui.Element, event ui.Keyb } return true default: - return false + return p.controller.OnKeyboardEvent(event) } } @@ -183,7 +191,7 @@ func (p *PlayScreenPresenter) onContinue() { p.exitMenu.Close() p.controller.Resume() co.Window(p.Scope).GrantFocus(p.rootElement) - co.Window(p.Scope).SetCursorVisible(false) + co.Window(p.Scope).SetCursorVisible(!p.hideCursor) } func (p *PlayScreenPresenter) onGoHome() { From 59c1a4904d80214c2f0cae362418a92dd76f0511 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sat, 8 Apr 2023 23:41:06 +0300 Subject: [PATCH 19/40] Add mouse and keyboard images --- internal/ui/controller/play.go | 37 +------------------------------ internal/ui/widget/speedometer.go | 2 -- resources/ui/images/keyboard.png | 3 +++ resources/ui/images/mouse.png | 3 +++ 4 files changed, 7 insertions(+), 38 deletions(-) create mode 100644 resources/ui/images/keyboard.png create mode 100644 resources/ui/images/mouse.png diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index fbf067d..e878b76 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -131,6 +131,7 @@ func (c *PlayController) Start(environment data.Environment, controller data.Con TurnRightKey: ui.KeyCodeArrowRight, ShiftUpKey: ui.KeyCodeA, ShiftDownKey: ui.KeyCodeZ, + RecoverKey: ui.KeyCodeLeftShift, AccelerationChangeSpeed: 1.0, DecelerationChangeSpeed: 2.0, @@ -216,42 +217,6 @@ func (c *PlayController) Velocity() float64 { return c.vehicle.Velocity() } -func (c *PlayController) VelocityFL() float64 { - if c.vehicle == nil { - return 0.0 - } - return c.vehicle.Axes()[0].LeftWheel().Velocity() -} - -func (c *PlayController) VelocityFR() float64 { - if c.vehicle == nil { - return 0.0 - } - return c.vehicle.Axes()[0].RightWheel().Velocity() -} - -func (c *PlayController) VelocityBL() float64 { - if c.vehicle == nil { - return 0.0 - } - return c.vehicle.Axes()[1].LeftWheel().Velocity() -} - -func (c *PlayController) VelocityBR() float64 { - if c.vehicle == nil { - return 0.0 - } - return c.vehicle.Axes()[1].RightWheel().Velocity() -} - -func (c *PlayController) Acceleration() float64 { - return 0.0 -} - -func (c *PlayController) Braking() float64 { - return 0.0 -} - func (c *PlayController) ToggleCamera() { if c.scene.Graphics().ActiveCamera() == c.followCamera { c.scene.Graphics().SetActiveCamera(c.bonnetCamera) diff --git a/internal/ui/widget/speedometer.go b/internal/ui/widget/speedometer.go index 8a83225..153c410 100644 --- a/internal/ui/widget/speedometer.go +++ b/internal/ui/widget/speedometer.go @@ -10,8 +10,6 @@ import ( type SpeedometerSource interface { Velocity() float64 - Acceleration() float64 - Braking() float64 } type SpeedometerData struct { diff --git a/resources/ui/images/keyboard.png b/resources/ui/images/keyboard.png new file mode 100644 index 0000000..a1f369d --- /dev/null +++ b/resources/ui/images/keyboard.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8afe15de5d7f568b47abf37c65863ad38ba8480fdfdfa808c8a829663801c0f9 +size 37081 diff --git a/resources/ui/images/mouse.png b/resources/ui/images/mouse.png new file mode 100644 index 0000000..a6d09e5 --- /dev/null +++ b/resources/ui/images/mouse.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1dbfcae19ee6b9c618b9b669d36493958e5cf826578c1b35083ef11bac8b8f0d +size 40867 From 4adf5ed91f2ca389537d596a6444cb96e560d9cf Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 9 Apr 2023 17:16:14 +0300 Subject: [PATCH 20/40] Add gamepad image --- internal/ui/view/home_screen.go | 10 +++++----- resources/ui/images/gamepad.png | 3 +++ 2 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 resources/ui/images/gamepad.png diff --git a/internal/ui/view/home_screen.go b/internal/ui/view/home_screen.go index 64bf559..ffed444 100644 --- a/internal/ui/view/home_screen.go +++ b/internal/ui/view/home_screen.go @@ -480,11 +480,11 @@ func (p *HomeScreenPresenter) createNightAmbientLight(scene *graphics.Scene) *gr func (p *HomeScreenPresenter) controllerDescription(controller data.Controller) string { switch controller { case data.ControllerKeyboard: - return "The keyboard provides poor accuracy and is least fun." + return "Keyboard: Uses assists. Provides an average challenge." case data.ControllerMouse: - return "The mouse provides great control when a gamepad is not available." + return "Mouse: Just point and drive. Good for a casual play." case data.ControllerGamepad: - return "The gamepad is the best option. Most fun with balanced difficulty." + return "Gamepad: No assists. Requires significant skills to control." default: return "" } @@ -493,9 +493,9 @@ func (p *HomeScreenPresenter) controllerDescription(controller data.Controller) func (p *HomeScreenPresenter) environmentDescription(environment data.Environment) string { switch environment { case data.EnvironmentDay: - return "The day drive is a good starting point for new players." + return "Day: A good starting point to learn the track." case data.EnvironmentNight: - return "The night drive is a nice alternative for regular players." + return "Night: Can be relaxing if you already know the track." default: return "" } diff --git a/resources/ui/images/gamepad.png b/resources/ui/images/gamepad.png new file mode 100644 index 0000000..a4b6ea6 --- /dev/null +++ b/resources/ui/images/gamepad.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:035186cee587ffc0ec1bc708f95feca07dabe24397e273d253ea51198dfe7f5d +size 43872 From c007077c1bb003ae46e24385cbd183738ad30605 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 9 Apr 2023 17:25:40 +0300 Subject: [PATCH 21/40] Rework credits --- internal/ui/view/credits_screen.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/ui/view/credits_screen.go b/internal/ui/view/credits_screen.go index 5bebb12..158b3ca 100644 --- a/internal/ui/view/credits_screen.go +++ b/internal/ui/view/credits_screen.go @@ -26,16 +26,16 @@ func init() { sections = append(sections, createSection("NOTABLE TOOLING", "Visual Studio Code", "Blender", - "Krita", - "GIMP", - "Procreate", - "Aseprite", "Affinity Designer", + "Procreate", + "GIMP", )) sections = append(sections, createSection("SPECIAL THANKS", - "Go Developers", - "\"GameDev БГ\" Discord Server", - "Open-Source Code Developers", + "Go Developers for the brilliant programming language", + "\"GameDev БГ\" Discord server for provided support", + "Open-source developers for used libraries and tools", + "Grant Abbitt for video tutorials", + "Erin Catto for articles and videos", )) } From 194e8985ceb28c7bed760cc2f6eb99c32c62d5cf Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 23 Apr 2023 21:07:16 +0300 Subject: [PATCH 22/40] Reuse resource set --- cmd/rallymka/app_cgo.go | 2 +- internal/ui/bootstrap.go | 5 ++++- internal/ui/controller/play.go | 36 ++++++++++---------------------- internal/ui/global/context.go | 3 ++- internal/ui/view/home_screen.go | 7 ++++--- internal/ui/view/intro_screen.go | 5 +++-- resources/web/main.js | 4 ++-- 7 files changed, 27 insertions(+), 35 deletions(-) diff --git a/cmd/rallymka/app_cgo.go b/cmd/rallymka/app_cgo.go index 718a2a6..fdf8f5f 100644 --- a/cmd/rallymka/app_cgo.go +++ b/cmd/rallymka/app_cgo.go @@ -36,7 +36,7 @@ func runApplication() error { cfg.SetFullscreen(false) // TODO: Enable cfg.SetMaximized(true) // TODO: Remove cfg.SetMinSize(1024, 576) - cfg.SetVSync(false) // FIXME: V-sync causes slow resource loading. + cfg.SetVSync(true) cfg.SetIcon("resources/ui/images/icon.png") cfg.SetMaximized(true) return glapp.Run(cfg, app.NewLayeredController(gameController, uiController)) diff --git a/internal/ui/bootstrap.go b/internal/ui/bootstrap.go index e9824ed..756a87a 100644 --- a/internal/ui/bootstrap.go +++ b/internal/ui/bootstrap.go @@ -12,8 +12,11 @@ import ( ) func BootstrapApplication(window *ui.Window, gameController *game.Controller) { + engine := gameController.Engine() + resourceSet := engine.CreateResourceSet() co.RegisterContext(global.Context{ - Engine: gameController.Engine(), + Engine: engine, + ResourceSet: resourceSet, }) co.Initialize(window, co.New(Bootstrap, nil)) } diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index e878b76..bab2bc8 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -1,6 +1,8 @@ package controller import ( + "runtime" + "github.com/mokiat/gomath/dprec" "github.com/mokiat/gomath/sprec" "github.com/mokiat/lacking/app" @@ -8,9 +10,9 @@ import ( "github.com/mokiat/lacking/game/ecs" "github.com/mokiat/lacking/game/graphics" "github.com/mokiat/lacking/game/physics" + "github.com/mokiat/lacking/game/physics/collision" "github.com/mokiat/lacking/game/preset" "github.com/mokiat/lacking/ui" - "github.com/mokiat/lacking/util/shape" "github.com/mokiat/rally-mka/internal/game/data" ) @@ -193,6 +195,7 @@ func (c *PlayController) Start(environment data.Environment, controller data.Con Zoom: 1.0, }) + runtime.GC() c.engine.ResetDeltaTime() } @@ -266,13 +269,11 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { AngularDragFactor: 0.0, RestitutionCoefficient: 0.0, CollisionGroup: collisionGroup, - CollisionShapes: []physics.CollisionShape{ - shape.NewPlacement[shape.Shape]( - shape.NewTransform( - dprec.NewVec3(0.0, 0.3, -0.4), - dprec.IdentityQuat(), - ), - shape.NewStaticBox(1.6, 1.4, 4.0), + CollisionBoxes: []collision.Box{ + collision.NewBox( + dprec.NewVec3(0.0, 0.3, -0.4), + dprec.IdentityQuat(), + dprec.NewVec3(1.6, 1.4, 4.0), ), }, }) @@ -284,11 +285,8 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { AngularDragFactor: 0.0, RestitutionCoefficient: 0.0, CollisionGroup: collisionGroup, - CollisionShapes: []physics.CollisionShape{ - shape.NewPlacement[shape.Shape]( - shape.IdentityTransform(), - shape.NewStaticSphere(0.25), - ), + CollisionSpheres: []collision.Sphere{ + collision.NewSphere(dprec.ZeroVec3(), 0.25), }, }) @@ -347,15 +345,3 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { return carDef } - -// func (h *playLifecycle) OnKeyboardEvent(element *ui.Element, event ui.KeyboardEvent) bool { -// return h.carSystem.OnKeyboardEvent(event) || h.cameraStandSystem.OnKeyboardEvent(event) -// } - -// func (h *playLifecycle) OnMouseEvent(element *ui.Element, event ui.MouseEvent) bool { -// // bounds := element.Bounds() -// // viewport := graphics.NewViewport(bounds.X, bounds.Y, bounds.Width, bounds.Height) -// // camera := h.gfxScene.ActiveCamera() -// // return h.vehicleSystem.OnMouseEvent(event, viewport, camera, h.gfxScene) -// return false -// } diff --git a/internal/ui/global/context.go b/internal/ui/global/context.go index de4eff9..acb2136 100644 --- a/internal/ui/global/context.go +++ b/internal/ui/global/context.go @@ -3,5 +3,6 @@ package global import "github.com/mokiat/lacking/game" type Context struct { - Engine *game.Engine + Engine *game.Engine + ResourceSet *game.ResourceSet } diff --git a/internal/ui/view/home_screen.go b/internal/ui/view/home_screen.go index ffed444..f21a80a 100644 --- a/internal/ui/view/home_screen.go +++ b/internal/ui/view/home_screen.go @@ -33,7 +33,8 @@ type HomeScreenPresenter struct { Data HomeScreenData `co:"data"` Invalidate func() `co:"invalidate"` - engine *game.Engine + engine *game.Engine + resourceSet *game.ResourceSet loadingModel *model.Loading homeModel *model.Home @@ -48,6 +49,7 @@ func (p *HomeScreenPresenter) OnCreate() { co.InjectContext(&globalContext) p.engine = globalContext.Engine + p.resourceSet = globalContext.ResourceSet p.loadingModel = p.Data.Loading p.homeModel = p.Data.Home p.playModel = p.Data.Play @@ -540,8 +542,7 @@ func (p *HomeScreenPresenter) onNightClicked() { } func (p *HomeScreenPresenter) onStartClicked() { - resourceSet := p.engine.CreateResourceSet() - promise := data.LoadPlayData(p.engine, resourceSet, p.homeModel.Environment(), p.homeModel.Controller()) + promise := data.LoadPlayData(p.engine, p.resourceSet, p.homeModel.Environment(), p.homeModel.Controller()) p.playModel.SetData(promise) p.loadingModel.SetPromise(promise) diff --git a/internal/ui/view/intro_screen.go b/internal/ui/view/intro_screen.go index 9dac49d..eea43d5 100644 --- a/internal/ui/view/intro_screen.go +++ b/internal/ui/view/intro_screen.go @@ -24,7 +24,9 @@ var IntroScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instanc globalContext = co.GetContext[global.Context]() screenData = co.GetData[IntroScreenData](props) - engine = globalContext.Engine + engine = globalContext.Engine + resourceSet = globalContext.ResourceSet + homeModel = screenData.Home loadingModel = screenData.LoadingModel ) @@ -37,7 +39,6 @@ var IntroScreen = co.Define(func(props co.Properties, scope co.Scope) co.Instanc }) co.Once(func() { - resourceSet := engine.CreateResourceSet() homeModel.SetData(data.LoadHomeData(engine, resourceSet)) }) diff --git a/resources/web/main.js b/resources/web/main.js index f21e950..ba422d6 100644 --- a/resources/web/main.js +++ b/resources/web/main.js @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:36f25b00ba7e754f46020996374e4f4015ab92fb7ad4b16f3463e0e4c880a6bc -size 950 +oid sha256:6446310e439fa5ab69c9f6da4d58cfd0d7bcbb8a6e838ca13c572e3e3f8e391c +size 940 From c4d744e15a80de40631204faf2a2e9c84dd1eefa Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 23 Apr 2023 21:07:49 +0300 Subject: [PATCH 23/40] Enhance profiling tesks --- Taskfile.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Taskfile.yml b/Taskfile.yml index ff14b1d..16ea5f1 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -41,10 +41,22 @@ tasks: cmds: - go run 'github.com/mokiat/httpserv@v1.0.0' -dir './assets' -host '127.0.0.1' - profile: + profile-cpu: cmds: - go tool pprof 'http://localhost:6060/debug/pprof/profile?seconds=30' + profile-alloc: + cmds: + - go tool pprof 'http://localhost:6060/debug/pprof/allocs?seconds=30' + + profile-heap: + cmds: + - go tool pprof 'http://localhost:6060/debug/pprof/heap?seconds=30' + + profile-snap: + cmds: + - go tool pprof 'http://localhost:6060/debug/pprof/heap' + trace: cmds: - curl -o trace.out 'http://localhost:6060/debug/pprof/trace?seconds=30' From e2586b1027e1cc9db0558bb9160d12d14de437ff Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Wed, 26 Apr 2023 22:01:21 +0300 Subject: [PATCH 24/40] Handle exit menu escape button --- internal/ui/view/exit_menu.go | 14 ++++++++++++++ internal/ui/view/play_screen.go | 3 +-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/internal/ui/view/exit_menu.go b/internal/ui/view/exit_menu.go index 9e0458a..83acbb2 100644 --- a/internal/ui/view/exit_menu.go +++ b/internal/ui/view/exit_menu.go @@ -20,6 +20,20 @@ type ExitMenuPresenter struct { CallbackData ExitMenuCallback `co:"callback"` } +var _ ui.ElementKeyboardHandler = (*ExitMenuPresenter)(nil) + +func (p *ExitMenuPresenter) OnKeyboardEvent(element *ui.Element, event ui.KeyboardEvent) bool { + switch event.Code { + case ui.KeyCodeEscape: + if event.Type == ui.KeyboardEventTypeKeyUp { + p.CallbackData.OnContinue() + } + return true + default: + return false + } +} + func (p *ExitMenuPresenter) Render() co.Instance { return co.New(mat.Element, func() { co.WithData(mat.ElementData{ diff --git a/internal/ui/view/play_screen.go b/internal/ui/view/play_screen.go index cc6d834..dda8657 100644 --- a/internal/ui/view/play_screen.go +++ b/internal/ui/view/play_screen.go @@ -92,10 +92,9 @@ func (p *PlayScreenPresenter) OnMouseEvent(element *ui.Element, event ui.MouseEv } func (p *PlayScreenPresenter) OnKeyboardEvent(element *ui.Element, event ui.KeyboardEvent) bool { - // TODO: Pass to controller switch event.Code { case ui.KeyCodeEscape: - if event.Type == ui.KeyboardEventTypeKeyDown { + if event.Type == ui.KeyboardEventTypeKeyUp { p.controller.Pause() co.Window(p.Scope).SetCursorVisible(true) p.exitMenu = co.OpenOverlay(p.Scope, co.New(ExitMenu, func() { From ff5670108c07cad295465805e3baf50bcd4fc1f4 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Wed, 26 Apr 2023 22:14:41 +0300 Subject: [PATCH 25/40] Auto-focus licenses scroll --- internal/ui/view/licenses_screen.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/ui/view/licenses_screen.go b/internal/ui/view/licenses_screen.go index 7ee8b89..b71396b 100644 --- a/internal/ui/view/licenses_screen.go +++ b/internal/ui/view/licenses_screen.go @@ -97,6 +97,7 @@ var LicensesScreen = co.Define(func(props co.Properties, scope co.Scope) co.Inst co.WithData(mat.ScrollPaneData{ DisableHorizontal: true, DisableVertical: false, + Focused: true, }) co.WithLayoutData(mat.LayoutData{ From 112a81fb2880802a3832ef8cddc6d05ccc3864e7 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sat, 29 Apr 2023 12:18:45 +0300 Subject: [PATCH 26/40] Add new skybox images --- cmd/rallypack/main.go | 11 ++++++++--- resources/images/day.hdr | 3 +++ resources/images/night.exr | 3 +++ 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 resources/images/day.hdr create mode 100644 resources/images/night.exr diff --git a/cmd/rallypack/main.go b/cmd/rallypack/main.go index 0794b54..0858e97 100644 --- a/cmd/rallypack/main.go +++ b/cmd/rallypack/main.go @@ -67,7 +67,7 @@ func runTool() error { pack.WithBottomImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideBottom, equirectangularImage)), ) - smallerCubeImage := p.ScaleCubeImage(cubeImage, 256) + smallerCubeImage := p.ScaleCubeImage(cubeImage, 512) p.SaveCubeTextureAsset(skyboxDay, smallerCubeImage, pack.WithFormat(asset.TexelFormatRGBA16F), ) @@ -86,7 +86,12 @@ func runTool() error { }) packer.Pipeline(func(p *pack.Pipeline) { - equirectangularImage := p.OpenImageResource("resources/images/night.hdr") + // Using GIMP: + // 1. Scale height to %50 + // 2. Convert to float32 + // 3. Exposure: ~ -6 + + equirectangularImage := p.OpenImageResource("resources/images/night.exr") cubeImage := p.BuildCubeImage( pack.WithFrontImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideFront, equirectangularImage)), pack.WithRearImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideRear, equirectangularImage)), @@ -96,7 +101,7 @@ func runTool() error { pack.WithBottomImage(p.BuildCubeSideFromEquirectangular(pack.CubeSideBottom, equirectangularImage)), ) - smallerCubeImage := p.ScaleCubeImage(cubeImage, 256) + smallerCubeImage := p.ScaleCubeImage(cubeImage, 512) p.SaveCubeTextureAsset(skyboxNight, smallerCubeImage, pack.WithFormat(asset.TexelFormatRGBA16F), ) diff --git a/resources/images/day.hdr b/resources/images/day.hdr new file mode 100644 index 0000000..b27f150 --- /dev/null +++ b/resources/images/day.hdr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0dde3f2cbd5b6264b1e34b2fe03160375be90051dce1013dc8c377e9fffa609 +size 8388673 diff --git a/resources/images/night.exr b/resources/images/night.exr new file mode 100644 index 0000000..f2b2f96 --- /dev/null +++ b/resources/images/night.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27596a5c52159b7623b9c3cb7349038c67944a2579457de0357a1c2abc835812 +size 2055973 From 362c86baf7607e65137a68db7245c3e553043fe7 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Mon, 1 May 2023 00:24:22 +0300 Subject: [PATCH 27/40] Attach lights to car --- internal/ui/controller/play.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index bab2bc8..578d6aa 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -78,6 +78,7 @@ func (c *PlayController) Start(environment data.Environment, controller data.Con EmitColor: dprec.NewVec3(0.5, 0.5, 0.3), EmitRange: 16000, // FIXME }) + case data.EnvironmentNight: sunLight = c.scene.Graphics().CreateDirectionalLight(graphics.DirectionalLightInfo{ EmitColor: dprec.NewVec3(0.001, 0.001, 0.001), @@ -124,6 +125,10 @@ func (c *PlayController) Start(environment data.Environment, controller data.Con vehicleNode := vehicleNodeComponent.Node vehicleNode.AppendChild(lightNode) // FIXME + var vehicleCarComponent *preset.CarComponent + ecs.FetchComponent(c.vehicle.Entity(), &vehicleCarComponent) + vehicleCarComponent.LightsOn = (environment == data.EnvironmentNight) + switch controller { case data.ControllerKeyboard: ecs.AttachComponent(c.vehicle.Entity(), &preset.CarKeyboardControl{ @@ -292,7 +297,11 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { chassisDef := preset.NewChassisDefinition(). WithNodeName("Chassis"). - WithBodyDefinition(chassisBodyDef) + WithBodyDefinition(chassisBodyDef). + WithHeadLightNodeNames("FLLight", "FRLight"). + WithTailLightNodeNames("BLLight", "BRLight"). + WithBeamLightNodeNames("FLBeamLight", "FRBeamLight"). + WithStopLightNodeNames("BLStopLight", "BRStopLight") frontLeftWheelDef := preset.NewWheelDefinition(). WithNodeName("FLWheel"). From 9a9774d0963eec52b88f8cd66765e73b7da7c343 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Tue, 2 May 2023 21:52:13 +0300 Subject: [PATCH 28/40] Prep web for itch --- resources/web/index.html | 4 ++-- resources/web/main.css | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/web/index.html b/resources/web/index.html index 5214003..deeccd5 100644 --- a/resources/web/index.html +++ b/resources/web/index.html @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ba39f23964788f067228ca1546b8636487f06cc76f7c58b287311a16fbbfe8a -size 1008 +oid sha256:fc4ee010574d16ebdbbd409830cc809b1a362f5f21eab2214c259119d1e80446 +size 934 diff --git a/resources/web/main.css b/resources/web/main.css index cb06139..dbf7e98 100644 --- a/resources/web/main.css +++ b/resources/web/main.css @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf8b15a56e5bf95e06e41c7811001aba40c659fe97b95648a62f0f2379d9c33f -size 538 +oid sha256:16705f0bd99924ec8c4df01e2a3e5d5d6de6cfa8bfee09eb5cf96752d0898a72 +size 403 From a43d9bc8d24d537b3e810b9650f5d158c3e3078a Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Tue, 2 May 2023 21:52:32 +0300 Subject: [PATCH 29/40] Reduce collision corrections --- internal/ui/controller/play.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index 578d6aa..1b69390 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -53,6 +53,8 @@ type PlayController struct { } func (c *PlayController) Start(environment data.Environment, controller data.Controller) { + physics.ImpulseDriftAdjustmentRatio = 0.02 // FIXME: Use default once multi-point collisions are fixed + // TODO: These subscriptions should be attached on the scene and/or the physics. c.preUpdateSubscription = c.engine.SubscribePreUpdate(c.onPreUpdate) c.postUpdateSubscription = c.engine.SubscribePostUpdate(c.onPostUpdate) From 4f091631979530b7b81e6c5b22512c9f61c564fe Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sat, 6 May 2023 15:48:53 +0300 Subject: [PATCH 30/40] Adjustments to new vehicle model --- internal/ui/controller/play.go | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index 1b69390..0fd45fb 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -53,7 +53,7 @@ type PlayController struct { } func (c *PlayController) Start(environment data.Environment, controller data.Controller) { - physics.ImpulseDriftAdjustmentRatio = 0.02 // FIXME: Use default once multi-point collisions are fixed + physics.ImpulseDriftAdjustmentRatio = 0.06 // FIXME: Use default once multi-point collisions are fixed // TODO: These subscriptions should be attached on the scene and/or the physics. c.preUpdateSubscription = c.engine.SubscribePreUpdate(c.onPreUpdate) @@ -142,15 +142,15 @@ func (c *PlayController) Start(environment data.Environment, controller data.Con ShiftDownKey: ui.KeyCodeZ, RecoverKey: ui.KeyCodeLeftShift, - AccelerationChangeSpeed: 1.0, - DecelerationChangeSpeed: 2.0, + AccelerationChangeSpeed: 2.0, + DecelerationChangeSpeed: 4.0, SteeringChangeSpeed: 3.0, SteeringRestoreSpeed: 6.0, }) case data.ControllerMouse: ecs.AttachComponent(c.vehicle.Entity(), &preset.CarMouseControl{ - AccelerationChangeSpeed: 1.0, - DecelerationChangeSpeed: 2.0, + AccelerationChangeSpeed: 2.0, + DecelerationChangeSpeed: 4.0, Destination: dprec.ZeroVec3(), }) case data.ControllerGamepad: @@ -182,7 +182,7 @@ func (c *PlayController) Start(environment data.Environment, controller data.Con bonnetCameraNode := game.NewNode() bonnetCameraNode.SetAttachable(c.bonnetCamera) bonnetCameraNode.SetRotation(dprec.RotationQuat(dprec.Degrees(180), dprec.BasisYVec3())) - bonnetCameraNode.SetPosition(dprec.NewVec3(0.0, 1.0, 0.0)) + bonnetCameraNode.SetPosition(dprec.NewVec3(0.0, 0.75, 0.35)) vehicleNode.AppendChild(bonnetCameraNode) followCameraEntity := c.ecsScene.CreateEntity() @@ -278,9 +278,9 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { CollisionGroup: collisionGroup, CollisionBoxes: []collision.Box{ collision.NewBox( - dprec.NewVec3(0.0, 0.3, -0.4), + dprec.NewVec3(0.0, 0.34, -0.3), dprec.IdentityQuat(), - dprec.NewVec3(1.6, 1.4, 4.0), + dprec.NewVec3(1.6, 1.18, 3.64), ), }, }) @@ -322,9 +322,9 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { WithBodyDefinition(wheelBodyDef) frontAxisDef := preset.NewAxisDefinition(). - WithPosition(dprec.NewVec3(0.0, -0.22, 0.96)). - WithWidth(1.8). - WithSuspensionLength(0.23). + WithPosition(dprec.NewVec3(0.0, -0.18, 0.96)). + WithWidth(1.7). + WithSuspensionLength(0.16). WithSpringLength(0.25). WithSpringFrequency(2.9). WithSpringDamping(0.8). @@ -336,16 +336,16 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { WithReverseRatio(0.5) rearAxisDef := preset.NewAxisDefinition(). - WithPosition(dprec.NewVec3(0.0, -0.22, -1.37)). - WithWidth(1.8). - WithSuspensionLength(0.23). + WithPosition(dprec.NewVec3(0.0, -0.18, -1.37)). + WithWidth(1.7). + WithSuspensionLength(0.16). WithSpringLength(0.25). - WithSpringFrequency(2.4). + WithSpringFrequency(2.7). WithSpringDamping(0.8). WithLeftWheelDefinition(rearLeftWheelDef). WithRightWheelDefinition(rearRightWheelDef). WithMaxSteeringAngle(dprec.Degrees(0)). - WithMaxAcceleration(160). + WithMaxAcceleration(145). WithMaxBraking(180). WithReverseRatio(0.5) From e897412b96709be429e53646b6c76e22f203ddcf Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 7 May 2023 23:38:53 +0300 Subject: [PATCH 31/40] Adjust for suspension model --- internal/ui/controller/play.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index 0fd45fb..e84f562 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -297,6 +297,14 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { }, }) + hubBodyDef := c.physicsScene.Engine().CreateBodyDefinition(physics.BodyDefinitionInfo{ + Mass: 1, + MomentOfInertia: physics.SymmetricMomentOfInertia(0.01), + DragFactor: 0.0, + AngularDragFactor: 0.0, + RestitutionCoefficient: 0.0, + }) + chassisDef := preset.NewChassisDefinition(). WithNodeName("Chassis"). WithBodyDefinition(chassisBodyDef). @@ -321,6 +329,22 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { WithNodeName("BRWheel"). WithBodyDefinition(wheelBodyDef) + frontLeftHubDef := preset.NewHubDefinition(). + WithNodeName("FLHub"). + WithBodyDefinition(hubBodyDef) + + frontRightHubDef := preset.NewHubDefinition(). + WithNodeName("FRHub"). + WithBodyDefinition(hubBodyDef) + + rearLeftHubDef := preset.NewHubDefinition(). + WithNodeName("BLHub"). + WithBodyDefinition(hubBodyDef) + + rearRightHubDef := preset.NewHubDefinition(). + WithNodeName("BRHub"). + WithBodyDefinition(hubBodyDef) + frontAxisDef := preset.NewAxisDefinition(). WithPosition(dprec.NewVec3(0.0, -0.18, 0.96)). WithWidth(1.7). @@ -330,6 +354,8 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { WithSpringDamping(0.8). WithLeftWheelDefinition(frontLeftWheelDef). WithRightWheelDefinition(frontRightWheelDef). + WithLeftHubDefinition(frontLeftHubDef). + WithRightHubDefinition(frontRightHubDef). WithMaxSteeringAngle(dprec.Degrees(45)). WithMaxAcceleration(145). WithMaxBraking(250). @@ -344,6 +370,8 @@ func (c *PlayController) createVehicleDefinition() *preset.CarDefinition { WithSpringDamping(0.8). WithLeftWheelDefinition(rearLeftWheelDef). WithRightWheelDefinition(rearRightWheelDef). + WithLeftHubDefinition(rearLeftHubDef). + WithRightHubDefinition(rearRightHubDef). WithMaxSteeringAngle(dprec.Degrees(0)). WithMaxAcceleration(145). WithMaxBraking(180). From 8ea53accc037d3d102ba0f2f7b19705a15694b4e Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Mon, 8 May 2023 17:21:09 +0300 Subject: [PATCH 32/40] Add new suv model --- resources/models/suv.glb | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 resources/models/suv.glb diff --git a/resources/models/suv.glb b/resources/models/suv.glb new file mode 100644 index 0000000..c56bbf2 --- /dev/null +++ b/resources/models/suv.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c1eae801cd1d76f8488b2efabf3f7a23aa10682a1221cf113d531d588de73ac +size 1342832 From 5b1c72f1410c6d385794bd71ca55658527e372e7 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Mon, 8 May 2023 17:21:22 +0300 Subject: [PATCH 33/40] Add home screen model --- resources/models/home-screen.glb | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 resources/models/home-screen.glb diff --git a/resources/models/home-screen.glb b/resources/models/home-screen.glb new file mode 100644 index 0000000..b67aced --- /dev/null +++ b/resources/models/home-screen.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1642115b5a32aaa31114c08e97791b05ec8a939a2a2ee1046cd7e453051dc9a +size 3013632 From 09e8af94ba68f1f5347eaa27d7c95d296f56a95c Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Mon, 8 May 2023 23:20:16 +0300 Subject: [PATCH 34/40] Adjust light angle --- internal/ui/controller/play.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/internal/ui/controller/play.go b/internal/ui/controller/play.go index e84f562..ddbaf54 100644 --- a/internal/ui/controller/play.go +++ b/internal/ui/controller/play.go @@ -89,11 +89,13 @@ func (c *PlayController) Start(environment data.Environment, controller data.Con } lightNode := game.NewNode() - lightNode.SetPosition(dprec.NewVec3(-100.0, 100.0, 0.0)) - lightNode.SetRotation(dprec.QuatProd( - dprec.RotationQuat(dprec.Degrees(-90), dprec.BasisYVec3()), + lightRotation := dprec.QuatProd( + dprec.RotationQuat(dprec.Degrees(-140), dprec.BasisYVec3()), dprec.RotationQuat(dprec.Degrees(-45), dprec.BasisXVec3()), - )) + ) + lightPosition := dprec.QuatVec3Rotation(lightRotation, dprec.NewVec3(0.0, 0.0, 100.0)) + lightNode.SetPosition(lightPosition) + lightNode.SetRotation(lightRotation) lightNode.UseTransformation(func(parent, current dprec.Mat4) dprec.Mat4 { // Remove parent's rotation parent.M11 = 1.0 From b817b920d116f624c62b16f48bd45e8bbfa30f93 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sat, 13 May 2023 23:46:27 +0300 Subject: [PATCH 35/40] Bump dependencies --- go.mod | 56 +++++++++--------- go.sum | 180 ++++++++++++++++++++++++++++----------------------------- 2 files changed, 115 insertions(+), 121 deletions(-) diff --git a/go.mod b/go.mod index 919eaa8..88253ac 100644 --- a/go.mod +++ b/go.mod @@ -3,53 +3,53 @@ module github.com/mokiat/rally-mka go 1.20 require ( + github.com/google/go-licenses v1.6.0 + github.com/mokiat/gblob v0.2.1 + github.com/mokiat/gog v0.8.0 github.com/mokiat/gomath v0.7.0 - github.com/mokiat/lacking v0.9.0 - github.com/mokiat/lacking-gl v0.6.0 - github.com/mokiat/lacking-js v0.6.0 + github.com/mokiat/lacking v0.10.0 + github.com/mokiat/lacking-gl v0.10.0 + github.com/mokiat/lacking-js v0.10.0 + github.com/x448/float16 v0.8.4 + golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea ) require ( - github.com/emirpasic/gods v1.12.0 // indirect - github.com/go-echarts/go-echarts/v2 v2.2.5 // indirect - github.com/go-echarts/statsview v0.3.4 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/emirpasic/gods v1.18.1 // indirect github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 // indirect github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect - github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/logr v1.2.4 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/google/go-licenses v1.6.0 // indirect - github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148 // indirect + github.com/google/licenseclassifier v0.0.0-20221004142553-c1ed8fcf4bab // indirect github.com/google/uuid v1.3.0 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect - github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mdouchement/hdr v0.2.4 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mokiat/goexr v0.1.0 // indirect github.com/mokiat/wasmgl v0.5.0 // indirect - github.com/otiai10/copy v1.6.0 // indirect + github.com/otiai10/copy v1.11.0 // indirect github.com/qmuntal/gltf v0.23.1 // indirect - github.com/rs/cors v1.8.3 // indirect - github.com/sergi/go-diff v1.2.0 // indirect - github.com/spf13/cobra v1.6.0 // indirect + github.com/sergi/go-diff v1.3.1 // indirect + github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/src-d/gcfg v1.4.0 // indirect - github.com/x448/float16 v0.8.4 // indirect - github.com/xanzy/ssh-agent v0.2.1 // indirect - go.opencensus.io v0.23.0 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0 // indirect - golang.org/x/image v0.6.0 // indirect - golang.org/x/mod v0.8.0 // indirect - golang.org/x/net v0.6.0 // indirect - golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.8.0 // indirect - golang.org/x/tools v0.6.0 // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect + go.opencensus.io v0.24.0 // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/image v0.7.0 // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/sync v0.2.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect + golang.org/x/tools v0.9.1 // indirect gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect gopkg.in/src-d/go-git.v4 v4.13.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - k8s.io/klog/v2 v2.80.1 // indirect + k8s.io/klog/v2 v2.100.1 // indirect ) diff --git a/go.sum b/go.sum index df03c4a..7ee9136 100644 --- a/go.sum +++ b/go.sum @@ -59,11 +59,16 @@ cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq 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= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -71,7 +76,6 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cinar/indicator v1.2.24/go.mod h1:5eX8f1PG9g3RKSoHsoQxKd8bIN97Cf/gbgxXjihROpI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -86,9 +90,11 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -100,30 +106,22 @@ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go. github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-echarts/go-echarts/v2 v2.2.3 h1:H8oPdUpzuiV2K8S4xYZa1JRNjP3U0h7HVqvhPrmCk1A= -github.com/go-echarts/go-echarts/v2 v2.2.3/go.mod h1:6TOomEztzGDVDkOSCFBq3ed7xOYfbOqhaBzD0YV771A= -github.com/go-echarts/go-echarts/v2 v2.2.5 h1:Jl0gtQa9i/iTZHEsmzf89HoxX2WTGa4K5r0be4qaquE= -github.com/go-echarts/go-echarts/v2 v2.2.5/go.mod h1:IN5P8jIRZKENmAJf2lHXBzv8U9YwdVnY9urdzGkEDA0= -github.com/go-echarts/statsview v0.3.4 h1:CCuytRAutdnF901NrR4BzSjHXjUp8OyA3/iopgG/1/Y= -github.com/go-echarts/statsview v0.3.4/go.mod h1:AehKjL9cTFMeIo5QdV8sQO43vFmfY65X5GMWa3XMciY= github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 h1:zDw5v7qm4yH7N8C8uWd+8Ii9rROdgWxQuGoJ9WDXxfk= github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20220516021902-eb3e265c7661 h1:1bpooddSK2996NWM/1TW59cchQOm9MkoV9DkhSJH1BI= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20220516021902-eb3e265c7661/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b h1:GgabKamyOYguHqHjSkDACcgoPIz3w0Dis/zJ1wyHHHU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-test/deep v1.0.1 h1:UQhStjbkDClarlmv0am7OXXO4/GaPdCGiUiMTvi28sg= github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -173,15 +171,21 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-licenses v1.6.0 h1:MM+VCXf0slYkpWO0mECvdYDVCxZXIQNal5wqUIXEZ/A= github.com/google/go-licenses v1.6.0/go.mod h1:Z8jgz2isEhdenOqd/00pq7I4y4k1xVVQJv415otjclo= +github.com/google/go-replayers/httpreplay v1.1.1 h1:H91sIMlt1NZzN7R+/ASswyouLJfW0WLW7fhyUFvDEkY= github.com/google/go-replayers/httpreplay v1.1.1/go.mod h1:gN9GeLIs7l6NUoVaSSnv2RiqK1NiwAmD0MrKeC9IIks= -github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148 h1:TJsAqW6zLRMDTyGmc9TPosfn9OyVlHs8Hrn3pY6ONSY= github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148/go.mod h1:rq9F0RSpNKlrefnf6ZYMHKUnEJBCNzf6AcCXMYBeYvE= +github.com/google/licenseclassifier v0.0.0-20221004142553-c1ed8fcf4bab h1:okY7fFoWybMbxiHkaqStN4mxSrPfYmTZl5Zh32Z5FjY= +github.com/google/licenseclassifier v0.0.0-20221004142553-c1ed8fcf4bab/go.mod h1:jkYIPv59uiw+1MxTWlqQEKebsUDV1DCXQtBBn5lVzf4= +github.com/google/licenseclassifier/v2 v2.0.0-alpha.1/go.mod h1:YAgBGGTeNDMU+WfIgaFvjZe4rudym4f6nIn8ZH5X+VM= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -198,6 +202,7 @@ github.com/google/pprof v0.0.0-20210506205249-923b5ab0fc1a/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20230222194610-99052d3372e7 h1:pNFnpaSXfibgW7aUbk9pwLmI7LNwh/iR46x/YwN/lNg= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -217,85 +222,80 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/mdouchement/hdr v0.2.3 h1:IxzxLgEarv9VPsk17DGIWnhA60MA5ASbekCU8YSFmaY= -github.com/mdouchement/hdr v0.2.3/go.mod h1:2Yb3JAST9c66wTLZ1vQrejU5sDeOC+ukXVs1pFAUtPo= github.com/mdouchement/hdr v0.2.4 h1:k0ojx7smWvWw8En2BjUnb144j48gAExu5mv+ogNrkTc= github.com/mdouchement/hdr v0.2.4/go.mod h1:uezK2oUhYtoRLkTD0J4ryiOsu/oWLjRXx0I/92mIRmQ= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mokiat/gblob v0.2.1 h1:PIHED13GCWOkTle3v1peOPuoaOvXZSyoWqnJ95fXsEo= +github.com/mokiat/gblob v0.2.1/go.mod h1:nGZoWg6U2bJQUub7oaSUEV0obD3rtV+PLTftVFBzSxE= github.com/mokiat/goexr v0.1.0 h1:zoDvzvIjs/GpkxJDVcCP6GafLp1nOuNDef9JL8KSd2A= github.com/mokiat/goexr v0.1.0/go.mod h1:KhERYaXCcY2ZEaTg1/LyzJ7pxdj/q3V1TxgViG86ck4= -github.com/mokiat/gomath v0.2.0 h1:ymEIRySh5aVHvqNJfnqJ1aiFNBHzUGy9801oJRLb5mk= -github.com/mokiat/gomath v0.2.0/go.mod h1:HzUDh5PiQcvnXRAwMmdNOqUO3h6IdouLd2BhikJIXz4= +github.com/mokiat/gog v0.8.0 h1:crjAWA3rIdpAuNVwqCV/CG6RiwKQ2Wn0gh17YuXeCGs= +github.com/mokiat/gog v0.8.0/go.mod h1:xWKrZVIvgDGMou+FwFvcJctdjLSwttBPYnwTiJpycOg= github.com/mokiat/gomath v0.7.0 h1:fcrjgVeL7S2i4aBEzS5XLhCNh5IRqrYchEBr/d6YI2U= github.com/mokiat/gomath v0.7.0/go.mod h1:bf4K7x67Otao/aWBAqN8/K7j90ZVD4pq9UaBUjvZbNk= -github.com/mokiat/lacking v0.8.0 h1:f6ZwBOxYSvuVFc4d8DeNgY2zQR+smi24l3G/QPQTcPk= -github.com/mokiat/lacking v0.8.0/go.mod h1:MM1AX7zzUK+fHNRc08auxBVVL7/R9cfVKfwl9TGYXug= -github.com/mokiat/lacking v0.9.0 h1:bdTErqXsUneYUA1hzsU45go7mamTsKVgyxzrY10Wvr0= -github.com/mokiat/lacking v0.9.0/go.mod h1:Yb3FlCHHBqEXR4qbX0XBE8U6l4mbPeElUNYVeLRzyAs= -github.com/mokiat/lacking-gl v0.5.0 h1:Of76VcoiBSYx3S5bn6R4i4VcKeXFZ+5wrfWMUc/x2io= -github.com/mokiat/lacking-gl v0.5.0/go.mod h1:rFaJXy0VdZSsCnma8sFg/f4KxYfmHdBHFiEqHu2Xh08= -github.com/mokiat/lacking-gl v0.6.0 h1:zW5vIauLR+C77KY+3wS5hY484AsM61NYtsb7rN0EXYk= -github.com/mokiat/lacking-gl v0.6.0/go.mod h1:3XZIBQ+QwwmcX5Vec3VrzRuMHu+JGcCRZey+OQ3C/nU= -github.com/mokiat/lacking-js v0.5.0 h1:WpLix0sJ50x8n3dIIbvDpd5/QP3prwJ7ypo2bufyK7Y= -github.com/mokiat/lacking-js v0.5.0/go.mod h1:XsGZjWrmfEGgpEt5MdnhA88Wu7vzCQmgXvLAkGKzKJ8= -github.com/mokiat/lacking-js v0.6.0 h1:YaL0Wp0mf8Q94/YPSKLi2xTQGBDvG+MG2E1rBGBWPpk= -github.com/mokiat/lacking-js v0.6.0/go.mod h1:APvUwPl3pjX8pwrBh45OpBF3mi6S/EjnF0vb8v4IxG0= -github.com/mokiat/wasmgl v0.4.0 h1:nnVWHibX8VoGXKlDHlwgdD/JmCHSasRQGmQfUlIEnbY= -github.com/mokiat/wasmgl v0.4.0/go.mod h1:Ikx+bDVpuq+OkvdDDwKI0pIluqK+kduVHJhRFBmmGrw= +github.com/mokiat/lacking v0.10.0 h1:yARKbjoXSZaTwpQyC6Kwi22otiq+ieprJb2cf2Bo7v8= +github.com/mokiat/lacking v0.10.0/go.mod h1:uuFO8vH6QjIw6+qOoHfksYN17n7AEQY3UNcLs9Kw5Go= +github.com/mokiat/lacking-gl v0.10.0 h1:BJkq1tgAzqTaDd52MtijWF5UxL0yx644P/+p9HkXmX8= +github.com/mokiat/lacking-gl v0.10.0/go.mod h1:fXyFktRjsM+dBequavgjS2YLQsG7CX5reOQaCd7oO2M= +github.com/mokiat/lacking-js v0.10.0 h1:ePvWensQ7ZIz7KC1ziGJd4xX2DSYRuQJtip/fnjo1Xk= +github.com/mokiat/lacking-js v0.10.0/go.mod h1:EiXawgAtxubPsYwcMkXbma+odJ9vR7ClLBXn4ljbmhs= github.com/mokiat/wasmgl v0.5.0 h1:LilOv5A2jp2T51pWRb5xZdgl01z6+J9l/AhmdIxHNa0= github.com/mokiat/wasmgl v0.5.0/go.mod h1:Ikx+bDVpuq+OkvdDDwKI0pIluqK+kduVHJhRFBmmGrw= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= -github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= +github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= +github.com/onsi/gomega v1.27.5 h1:T/X6I0RNFw/kTqgfkZPcQ5KU6vCnWNBGdtrIx2dpGeQ= github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= +github.com/otiai10/copy v1.11.0 h1:OKBD80J/mLBrwnzXqGtFCzprFSGioo30JcmR4APsNwc= +github.com/otiai10/copy v1.11.0/go.mod h1:rSaLseMUsZFFbsFGc7wCJnnkTAvdc5L6VWxPE4308Ww= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/qmuntal/gltf v0.22.0 h1:IwoanftOUqj0X0KECjBN5+dm0SR9s9TDEevgpeej36U= -github.com/qmuntal/gltf v0.22.0/go.mod h1:7FR0CRHoOehIgKTBVq/QVyvPn0i6tzp2AdIghb2bPg4= github.com/qmuntal/gltf v0.23.1 h1:R8vkbJXmARbD/oI+Yn3252I2qDQ8mljsc88BJJEdYMY= github.com/qmuntal/gltf v0.23.1/go.mod h1:7FR0CRHoOehIgKTBVq/QVyvPn0i6tzp2AdIghb2bPg4= -github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= -github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/cobra v1.6.0 h1:42a0n6jwCot1pUmomAp4T7DeMD+20LFv4Q54pxLf2LI= github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= @@ -303,18 +303,22 @@ github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jW github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -327,8 +331,9 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -338,14 +343,12 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= @@ -354,17 +357,12 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d h1:vtUKgx8dahOomfFzLREU8nSv25YHnTgLBn4rDnWZdU0= -golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0 h1:pVgRXcIictcr+lBQIFeiwuwtDIs4eL21OuM9nyAADmo= -golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea h1:vLCWI/yYrdEHyN2JzIzPO3aaQJHQdp89IZBA/+azVC4= +golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20220617043117-41969df76e82 h1:KpZB5pUSBvrHltNEdK/tw0xlPeD13M6M6aGP32gKqiw= -golang.org/x/image v0.0.0-20220617043117-41969df76e82/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY= -golang.org/x/image v0.6.0 h1:bR8b5okrPI3g/gyZakLZHeWxAR8Dn5CyxXv1hLH5g/4= -golang.org/x/image v0.6.0/go.mod h1:MXLdDR43H7cDJq5GEGXEVeeNhPgi+YYEQ2pC1byI1x0= +golang.org/x/image v0.7.0 h1:gzS29xtG1J5ybQlv0PuyfE3nmc6R4qB73m6LUUmvFuw= +golang.org/x/image v0.7.0/go.mod h1:nd/q4ef1AKKYl/4kft7g+6UyGbdiqWqTP1ZAbRoV7Rg= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -390,8 +388,9 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -427,8 +426,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -438,8 +437,9 @@ golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.6.0 h1:L4ZwwTvKW9gr0ZMS1yrHD9GZhIuVjOBBnaKH+SPQK0Q= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -473,11 +473,11 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -489,6 +489,7 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -510,6 +511,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -528,7 +530,6 @@ golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -540,16 +541,19 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -558,20 +562,17 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -624,8 +625,9 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -633,11 +635,6 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.7.0/go.mod h1:L02bwd0sqlsvRv41G7wGWFCsVNZFv/k1xzGIxeANHGM= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20200229103305-d71f404090bf/go.mod h1:6EVtvAMWMjOBOsTVX0xrjO4A6ULtEgWtAWHzqxDWdJs= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -817,14 +814,15 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg= gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 h1:ivZFOIltbce2Mo8IjzUHAFoq/IylO9WHhNOAJK+LsJg= gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE= gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= @@ -836,6 +834,7 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -844,14 +843,9 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= -modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= -modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= -modernc.org/strutil v1.1.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= -modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= From 0a267200806719882c9972fb4c5027c4d8511985 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sat, 13 May 2023 23:46:42 +0300 Subject: [PATCH 36/40] Set to maximized --- cmd/rallymka/app_cgo.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/rallymka/app_cgo.go b/cmd/rallymka/app_cgo.go index fdf8f5f..a925b6e 100644 --- a/cmd/rallymka/app_cgo.go +++ b/cmd/rallymka/app_cgo.go @@ -33,8 +33,8 @@ func runApplication() error { }) cfg := glapp.NewConfig("Rally MKA", 1024, 576) - cfg.SetFullscreen(false) // TODO: Enable - cfg.SetMaximized(true) // TODO: Remove + cfg.SetFullscreen(true) + cfg.SetMaximized(false) cfg.SetMinSize(1024, 576) cfg.SetVSync(true) cfg.SetIcon("resources/ui/images/icon.png") From 578233ac76a26b8cbdc6de40a006887f05e64c05 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sat, 13 May 2023 23:46:56 +0300 Subject: [PATCH 37/40] Add new forest level --- resources/models/forest.glb | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 resources/models/forest.glb diff --git a/resources/models/forest.glb b/resources/models/forest.glb new file mode 100644 index 0000000..8bc1e00 --- /dev/null +++ b/resources/models/forest.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a6500d7d5ef65d2974e6ba822ba2932d9c0e427ae9c2cf2e875cb668e197fea +size 59174024 From 9388ca50d2556723882c74a0da3eb2f55747fc8d Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sat, 13 May 2023 23:58:30 +0300 Subject: [PATCH 38/40] Update license command --- Taskfile.yml | 2 +- go.mod | 25 +- go.sum | 755 ------------------------------------------------- tools/tools.go | 7 - 4 files changed, 4 insertions(+), 785 deletions(-) delete mode 100644 tools/tools.go diff --git a/Taskfile.yml b/Taskfile.yml index 16ea5f1..0ec70e9 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -4,7 +4,7 @@ tasks: licenses: cmds: - - go run github.com/google/go-licenses report --template ./resources/licenses.tmpl ./cmd/rallymka > ./resources/licenses.txt + - go run github.com/google/go-licenses@v1.6.0 report --template ./resources/licenses.tmpl ./cmd/rallymka ./cmd/rallypack > ./resources/licenses.txt pack: cmds: diff --git a/go.mod b/go.mod index 88253ac..5b6705c 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,6 @@ module github.com/mokiat/rally-mka go 1.20 require ( - github.com/google/go-licenses v1.6.0 github.com/mokiat/gblob v0.2.1 github.com/mokiat/gog v0.8.0 github.com/mokiat/gomath v0.7.0 @@ -15,41 +14,23 @@ require ( ) require ( - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/emirpasic/gods v1.18.1 // indirect github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 // indirect github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect github.com/go-logr/logr v1.2.4 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/google/licenseclassifier v0.0.0-20221004142553-c1ed8fcf4bab // indirect github.com/google/uuid v1.3.0 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect - github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/kr/text v0.2.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mdouchement/hdr v0.2.4 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mokiat/goexr v0.1.0 // indirect github.com/mokiat/wasmgl v0.5.0 // indirect - github.com/otiai10/copy v1.11.0 // indirect + github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect github.com/qmuntal/gltf v0.23.1 // indirect - github.com/sergi/go-diff v1.3.1 // indirect - github.com/spf13/cobra v1.7.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/src-d/gcfg v1.4.0 // indirect - github.com/xanzy/ssh-agent v0.3.3 // indirect - go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.9.0 // indirect golang.org/x/image v0.7.0 // indirect - golang.org/x/mod v0.10.0 // indirect golang.org/x/net v0.10.0 // indirect golang.org/x/sync v0.2.0 // indirect golang.org/x/sys v0.8.0 // indirect golang.org/x/text v0.9.0 // indirect golang.org/x/tools v0.9.1 // indirect - gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect - gopkg.in/src-d/go-git.v4 v4.13.1 // indirect - gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - k8s.io/klog/v2 v2.100.1 // indirect ) diff --git a/go.sum b/go.sum index 7ee9136..8f99383 100644 --- a/go.sum +++ b/go.sum @@ -1,242 +1,18 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.82.0/go.mod h1:vlKccHJGuFBFufnAnuB08dfEH9Y3H7dzDzRECFdC2TA= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/iam v0.4.0/go.mod h1:cbaZxyScUhxl7ZAkNWiALgihfP75wS/fUsVNaa1r3vA= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -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= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 h1:zDw5v7qm4yH7N8C8uWd+8Ii9rROdgWxQuGoJ9WDXxfk= github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b h1:GgabKamyOYguHqHjSkDACcgoPIz3w0Dis/zJ1wyHHHU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-test/deep v1.0.1 h1:UQhStjbkDClarlmv0am7OXXO4/GaPdCGiUiMTvi28sg= github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-licenses v1.6.0 h1:MM+VCXf0slYkpWO0mECvdYDVCxZXIQNal5wqUIXEZ/A= -github.com/google/go-licenses v1.6.0/go.mod h1:Z8jgz2isEhdenOqd/00pq7I4y4k1xVVQJv415otjclo= -github.com/google/go-replayers/httpreplay v1.1.1 h1:H91sIMlt1NZzN7R+/ASswyouLJfW0WLW7fhyUFvDEkY= -github.com/google/go-replayers/httpreplay v1.1.1/go.mod h1:gN9GeLIs7l6NUoVaSSnv2RiqK1NiwAmD0MrKeC9IIks= -github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148/go.mod h1:rq9F0RSpNKlrefnf6ZYMHKUnEJBCNzf6AcCXMYBeYvE= -github.com/google/licenseclassifier v0.0.0-20221004142553-c1ed8fcf4bab h1:okY7fFoWybMbxiHkaqStN4mxSrPfYmTZl5Zh32Z5FjY= -github.com/google/licenseclassifier v0.0.0-20221004142553-c1ed8fcf4bab/go.mod h1:jkYIPv59uiw+1MxTWlqQEKebsUDV1DCXQtBBn5lVzf4= -github.com/google/licenseclassifier/v2 v2.0.0-alpha.1/go.mod h1:YAgBGGTeNDMU+WfIgaFvjZe4rudym4f6nIn8ZH5X+VM= -github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210506205249-923b5ab0fc1a/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20230222194610-99052d3372e7 h1:pNFnpaSXfibgW7aUbk9pwLmI7LNwh/iR46x/YwN/lNg= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -244,8 +20,6 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mdouchement/hdr v0.2.4 h1:k0ojx7smWvWw8En2BjUnb144j48gAExu5mv+ogNrkTc= github.com/mdouchement/hdr v0.2.4/go.mod h1:uezK2oUhYtoRLkTD0J4ryiOsu/oWLjRXx0I/92mIRmQ= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mokiat/gblob v0.2.1 h1:PIHED13GCWOkTle3v1peOPuoaOvXZSyoWqnJ95fXsEo= github.com/mokiat/gblob v0.2.1/go.mod h1:nGZoWg6U2bJQUub7oaSUEV0obD3rtV+PLTftVFBzSxE= github.com/mokiat/goexr v0.1.0 h1:zoDvzvIjs/GpkxJDVcCP6GafLp1nOuNDef9JL8KSd2A= @@ -266,586 +40,57 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWb github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= github.com/onsi/gomega v1.27.5 h1:T/X6I0RNFw/kTqgfkZPcQ5KU6vCnWNBGdtrIx2dpGeQ= -github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= -github.com/otiai10/copy v1.11.0 h1:OKBD80J/mLBrwnzXqGtFCzprFSGioo30JcmR4APsNwc= -github.com/otiai10/copy v1.11.0/go.mod h1:rSaLseMUsZFFbsFGc7wCJnnkTAvdc5L6VWxPE4308Ww= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/qmuntal/gltf v0.23.1 h1:R8vkbJXmARbD/oI+Yn3252I2qDQ8mljsc88BJJEdYMY= github.com/qmuntal/gltf v0.23.1/go.mod h1:7FR0CRHoOehIgKTBVq/QVyvPn0i6tzp2AdIghb2bPg4= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= -github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= -github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea h1:vLCWI/yYrdEHyN2JzIzPO3aaQJHQdp89IZBA/+azVC4= golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.7.0 h1:gzS29xtG1J5ybQlv0PuyfE3nmc6R4qB73m6LUUmvFuw= golang.org/x/image v0.7.0/go.mod h1:nd/q4ef1AKKYl/4kft7g+6UyGbdiqWqTP1ZAbRoV7Rg= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210503080704-8803ae5d1324/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.46.0/go.mod h1:ceL4oozhkAiTID8XMmJBsIxID/9wMXJVVFXPg4ylg3I= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg= -gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= -gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 h1:ivZFOIltbce2Mo8IjzUHAFoq/IylO9WHhNOAJK+LsJg= -gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE= -gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= -k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/tools/tools.go b/tools/tools.go deleted file mode 100644 index a0d8d68..0000000 --- a/tools/tools.go +++ /dev/null @@ -1,7 +0,0 @@ -//go:build tools - -package tools - -import ( - _ "github.com/google/go-licenses" -) From 528c32b1079b6f70e6b527a7622437057c6b9520 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 14 May 2023 14:57:03 +0300 Subject: [PATCH 39/40] Fix licenses --- .gitignore | 1 - Taskfile.yml | 2 +- resources/licenses.txt | 3 +++ 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 resources/licenses.txt diff --git a/.gitignore b/.gitignore index 08034b1..4298873 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ # Assets /assets -/resources/licenses.txt # VSCode .vscode/ diff --git a/Taskfile.yml b/Taskfile.yml index 0ec70e9..1156f0c 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -4,7 +4,7 @@ tasks: licenses: cmds: - - go run github.com/google/go-licenses@v1.6.0 report --template ./resources/licenses.tmpl ./cmd/rallymka ./cmd/rallypack > ./resources/licenses.txt + - go run github.com/google/go-licenses@v1.6.0 report --template ./resources/licenses.tmpl ./cmd/rallymka ./cmd/rallypack | fold -w 80 -s > ./resources/licenses.txt pack: cmds: diff --git a/resources/licenses.txt b/resources/licenses.txt new file mode 100644 index 0000000..e125054 --- /dev/null +++ b/resources/licenses.txt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01b7ec3aff8cb69ec1e02244713d6f34e5ba2e700af76ce71c4365ccac35b39c +size 45111 From f80996be8a3800bac01753bba88bd3ef290756e2 Mon Sep 17 00:00:00 2001 From: Momchil Atanasov Date: Sun, 14 May 2023 15:05:58 +0300 Subject: [PATCH 40/40] Update README --- README.md | 38 ++++++-------------------------------- preview.png | Bin 444432 -> 586032 bytes 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 758f8c6..db662ee 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # Rally MKA [![Go Report Card](https://goreportcard.com/badge/github.com/mokiat/rally-mka)](https://goreportcard.com/report/github.com/mokiat/rally-mka) [![Go Reference](https://pkg.go.dev/badge/github.com/mokiat/rally-mka@master.svg)](https://pkg.go.dev/github.com/mokiat/rally-mka@master) -Rally MKA is a really old game/demo of mine ported to Go for fun and as a way to experiment with new concepts. +Rally MKA is a really old game/demo of mine ported to Go for fun and as a way to experiment with new concepts. It is also a showcase for the [lacking](https://github.com/mokiat/lacking) game engine. + +[![Game Screenshot](preview.png)](https://mokiat.itch.io/rally-mka) -[![Game Screenshot](preview.png)](http://mokiat.com/rally-mka/) ## User's Guide ### Browser -Use the following link to try the game in the browser: -http://mokiat.com/rally-mka/ +You can play the game on [itch.io](https://mokiat.itch.io/rally-mka). The preferred browser is [Chrome](https://www.google.com/chrome/), which at the time of writing appears to best support WebGL2, WebAssembly and Game Controllers. @@ -19,27 +19,13 @@ Check the [Releases](https://github.com/mokiat/rally-mka/releases) section for r The requirement is that your OS supports `OpenGL 4.6`. -### Controls - -Use the following keyboard keys when playing: - -- `Left Arrow` - Steer left -- `Right Arrow` - Steer right -- `Up Arrow` - Accelerate -- `Down Arrow` - Decelerate -- `a`, `s`, `d`, `w` - Rotate camera -- `q`, `e` - Zoom in/out camera -- `Enter` - Flip car - -In addition, the game supports using a Game Controller. - ## Developer's Guide This section describes how to setup the project on your machine and compile it yourself. ### Prerequisites -- You need [Go 1.18](https://golang.org/dl/) or newer. +- You need [Go 1.20](https://golang.org/dl/) or newer. - You need the [Git LFS](https://git-lfs.github.com/) plugin. As the project contains large images and models, this is the official way on how not to clog a repository. - Follow the instructions on the [GLFW for Go](https://github.com/go-gl/glfw) repository and make sure you can run the [GLFW examples](https://github.com/go-gl/example) on your platform. - Make sure you have [Task](https://taskfile.dev/) installed, as this project uses Taskfiles. @@ -87,7 +73,7 @@ This section describes how to setup the project on your machine and compile it y task wasm ``` -1. Run HTTP server +1. Run an HTTP server ```sh task web @@ -104,15 +90,3 @@ All source code in this project is licensed under [Apache License v2](LICENSE). ### Assets Assets (images, models, textures, etc.) are distributed under the [Creative Commons Attribution 4.0 International](http://creativecommons.org/licenses/by/4.0/) license. - -## Special Thanks - -The following projects and individuals have contributed significantly to the project: - -- **[The Go Team](https://go.dev/)** for making Go programming language. -- **[GLFW for Go](https://github.com/go-gl/glfw)** for making it possible to use GLFW and OpenGL in Go. -- **[LearnOpenGL](https://learnopengl.com/)** for the amazing tutorials. -- **[Poly Haven](https://polyhaven.com/)** for the excellent free images. -- **[Erin Catto](https://github.com/erincatto)** for all the presentations and articles that were used as reference for the physics engine. -- **[Bo0mer](https://github.com/Bo0mer)** for the panoramic image that was used to generate the original `city` skybox images. -- And everyone else whose repository has been used as a dependency. diff --git a/preview.png b/preview.png index 735a9b76ad2140b2e1a18b51cc3e5aed397f35ff..a05d32d3193607cc8a5942f77ae266f07f6dabae 100644 GIT binary patch literal 586032 zcmeFXRa9Kvwk?cPxVsgFyITRl-7UDgySuv<76Jr!2ogLv2?Pl41c%@nTrc0Z_t|Hk z_TQJ&+JE16J*_ooAAO9`=a{ptS#89sD$AfD6C*=GL7~aXN~%La!2+S6p!)#`ZzBZe zwZl+QjFNtuIv(n#-ar>OXDeF=OQ46ZizU#~$JPo8%4fMWSGR?fuTJV!AdVPDKZO*1 zrFjk2?yebwtF+PLwIbhA;ZkcY1_+&tAUT{D{JQS>y7kFO-lKiiYIW?7%4z#hpL5RZ z6W7{A-`?$?M>@Yx-Nw(mM^4|)oUg0jUEXIq-`w*&-96lr1U(TW^e_dttLm?dWcR#? zO{~+|^cd0y1@A$#2DgO1<_3+NEDXJ@ zylQ(n6P!ZKgcztNCKv)KfCoK0(;Iw|pCm>C*uSnnrr!&c-*gd@T&g@?{rNPGV<>F* zGKBGro$;yXkwx$MG5Yk@W|u-uvB$CT`RSUX=T!Xu1Y>&Qaj0iap!JjO<>*3S!u=n~ zo|EpEPVd&o`7uUm-j?O=_=kqUTfujH?U7Eaq{&v@m&Tje*U$S;HWt?)ycXl2OY=x_ z&}Ii^G?{eU=2v5FV6l19(6me zdZl?`xP7inTVIbe2uE5lVs*qWmt;-X-RZ(fBtw{ol~m+x$Amu zXd^$I38UNpJe0#K*Y>yWuP?gR9|M!59%{ahG-_$<2PTqvFK-OB7<#V+CgY%2dR#IL zDGQ%maj{lwiP!$B{mbBI&mhao z=Tvv(RSN0TGuOxR3dgBQKdeX1Lf$#LsMIDj0%?hFsBlFpMU4=TK zd9vm-=FUux1?AQnvW&Lay$>mqACBcNY)^3TDHE7;LUN&JFQ0~PxmFgv1{nR{^QH{Zco3_f;p|!R8zsogE!g9S&YN=$mQGf_Q>y$_uII16~K*@KgW!xUbmuO|7@6}ZM*-qZ3V7x36sq^h@CK*ko<~z%u z4PfUExa671;Qm4D-n^1zQnC{NN!lDM^9zR70FOS#rJ?`mV zwI}^LYE9B*cp*aeY`c<`F^NdXtZa>*( zx}Y#&C%tZ6KjSUFOT&UvXfC3U2{t#^o6HwPPAb>jsZF;dry3ftVLdsr>}W;u^@{(1l4Sd7>rgn#!% zTK$u;A1k%V*FML_ujQ4f?WJc>P%EqfgCP->s5kNaPDk2WhOE7hBUD&^Ed-j1;Wl7< zTnmY@^w(Xg__Te^zl#+0(Hr)5E=$z`OqIjdsRWTQ ztFwNVhy)`T7VzA{Q13ZAxUPnYd)21D{Bl6zcX~QH6_Oy8Z0DO|J7VkqHRiS*iHtxn zl9x785L|XC-{nW$Xu=u}-6zTr+{=)PWr_CQJ&Mt2gCeAtE#@Z+&G7T`Q)&kJ0(WqCjq)8T}dlU_QA&WbNmOZHiAMR*c9L3INcNKT9 zka$#N8r&IF^ErWB*4s{@pMg&On)EYZ>sZd%(^Yx@Y-WiJ*!l2RI{p)H_v(D~+>{Y@ zy4?gRyv35D2Kt?lkN}8jL!2#v3l+k9PpohlWT9oSrxri@e+yQwF>rpC zSzj`9lsMRh<~k5P$&p~)-Rt#L4zUWJ>#_ zpAF?qK${{;0=>8JcbFzql(z*(0raFcpP?v|ZLLqR_BmzNG`aWD%P7LpLU?1Mi|n(atnxUV5| z3GZu|Zzb-yzuhF+0wuSeWI&wp43K4{{u=UQ5({ddIzWi0u0>rtUr9-I^v1-uyLcg- z8-ATZ@RC|Uyq>RG%1@3y8R;j68dF@tuE!#tK7mU1Pc~ebd#OxGeDOT2VV0*=YKtfW zxfLZJR$&=jta-)t68W;!q>ceA(@D(zYh$F{7K3-k2V_xAp z6_bCo(3H8~4%vcRfJvE~2<60NXX+0nd^>+axJ6A_Ymm$}?`|>kXQqb2IUS#p`4Wu9 zBM85_1cq9&iw*Z6UxwQp5YNJ?Mh~!F0<|5Adkbr2U3a1q@UEK-B{7{;#BowGg)IzK zGgu6EE_RX-m3Y|}5Y6twWld#V0TtZteqWPax5QOvxD6akvqAysybsaKCgJes-&LSQ zG^52rm!Qw$KbW57e?=nv5p|U?fJIo6^jTF@?QsKU4+#$`&g&Wge~Selr_|&RXz5!& zmaYTxJM`lT%VYCg4tn3~z!w0FbHyN6m@uBGUaI}n*t>BrC7PmUDT%?ciP?>cgArM*-}@dUw;u7)io-}R#6|*bH>VEJo-kY5)&P;qDJ!%E{AA=v?t<1 zjZ{hZ^@Y$Qxl(la>&c)y5FGnsXHu}=u@(U$ys*cd2%q) zy2X)Oo*OfSkoyn^ytmMf~?(X9L64iZjDM>BlB!*8Jm^!f72 z2MUf1{NYhm^TJzNC$bPpC z;gWh6#ULiRuzA|MOtIxUwTb0M@LwT`r0 zMm0CG9M)44s=pymbuECqqDQULvM6d#*VG7mO{LkDchZye^yHs0j zvz`gguK339VOV`=dR%(ZmkdEo@=6D0$(5NI4QRlM9Dk0tw+0PLmM3B`!7kmk?s&1*JSi_lm*S4LW{sHMHGE2xR_%B2lMm<{6ag$juplsgap$*{mi^f3}mn$EsPzK~}fWjrc2x#RbEjMzvI z&iC@01wns;(3>^^^}6Zk^Ho0$fX*I>ozb_E0m6*AolVKuwdp_=v^2K^wK;NeI7;Ou z(iz0JL8^4q4g#z9nPbv?MTbVNxA){^$ZoBhEBcH{93~Yo z%smUGZp5S9*I2l7qh9=jY7}Zj`eoYz8H_^e{p%<&^joUFLe~uAgCyQWWNAC4nl4hB z`3LPhtec3VG^=drt(Z@eY%&CkaH0Xg-29`9+pVGyZztkPA4RzP9C*w@pb;V2;)w;~ zr*$$VDBnV=ymIVe>y|KaJpW5TB$;@kTHYbIfd_g{n;$b)`=S`am09ocd5E^7LSKeN zo5p?i0RW{!!7%@8l$0t}oBLeRh%qJtl1~OMzRpk31@>I>MXfy)6&jK8T@wSwpMt(< zm~?2&eG36@PmEb;af9B~MvE1dDo$(ypxGbiBAZR5<{lk^6ywSYDTF*2#fs)tO|ckG zdnon{vX7dlsk&wCP-n^w+9XM&-D#M#rG}B>=lO*`kSlhi!3QN607*bGDq&iLBMCUW zsLCq6m{(=?dy$PQ3~fG~bxOHO4e`JQkQ7-52q~r_h)6)BxsoO9cB|zh#V-?7LDYrg zaho*n4fwXF688fVOZ~EmkPntP_TL?|s+E~mv%;t?HiFX29*eSlOijsYs4uk>E}~{l zkozI=p;yMQgXsrPy@}9w1T$SiqM~`8%OL2ltECAat+M9I<+f#G|D-BJ66}ZWD?qucScF)wR6C`|By zvX4v09a=X@q!v_BF)f@Q;l~>3^kpU_TQ8IE=(L06>L3&@hGv9})D+u~A=mdK&j3ZN zS|}2l5cyq_$-9Bd4+%E)ybXSNgUW3kLbJW|ki~DX?vI$NH~qTeu&#djYvL;_i7FzO7+V#P?@w*G#ApY)XN4AW_@gX||L3G>wo{#Kt^ft6={guooR zXNSZFVDc|u*yv51>qyE?h5DDocck9;<@kF7ClnD z?7B43wLb|nQ_SonJ=oS}P@$W$;M`7D1GWZ1N@$ zi0rdvtQypTD?Bn;p;BzH2DecOWu08lOupD1HkQS)#Nt%n(tBl+!?aHi3 zi%-RC&A@v>`GZa755lU(>hQRAQTmgetcQxew%oAp9kkh-o(}1Aw$yl)$)!seEul0A zzmk!Knbi?vC*yh;17C)f$iBJ^;eYc*{C*j#Kt8WLj*6WBvG-E|^p8$+QAqc^gv8p` zC^0RWm8~+P`=L)~x0mU>#q@qW#pZA@ln{&}46-p*L8C=|a7X9<&b;x#0`c8zGie=h1AeCbLB?$Yw0K&E3jG6&aGKsO!+hIHkRUCE%OXlx%Rx zlnd_D1F&Lo5Z0v7GzB&*sYI~}zp=Z|7xFUh92!tHX?OjAt@_lZY;}DbcS#JBqfntn zT2PV-ctN|jDKkgPlif?$nubG^OM;!`fE7A$$%Zfr-qpc9>_#0(WL;Zi@7E@LM?xFM zdi%Ey-FBpfu0<#sBK%&Fj_@ZQrhMf`P`7XYcV_HSFAL~!M^qV-T!WEQh`NTP$@ zymBmUUTW>>;VAozUb@i+mlk5UQ~8a%;)`<5DEqtbv}y<3)&mHz3)bqa`|>@MYFTbO zxN*Uy(8Bv6C~b6(wbe2~k+@*#3K(1zdFRs&G3GCnBW)(Of?D3B@o-~u2A}s#i&^3` z&On-jg50^(N%|qdB_ea9lo=toWV|H`DU-v+Z9KEhfCi-mcjyyxw;Y@udJnxW8g z7=WTmqm39>`$5@M2vZT1TWF4Ule5FMf#q?-j`Pc`5hx#YE)HR&@y(O_oE5evcul30 zAIo!q3+To&F2*BA?)9BzQW?dui0lZbr}Rc@UO4I1QSDng2hrdv$y3rgvKbTT_gPyw z$cO!UT9pyQB&;0jgN4Q?8mPoV84)_fWbaIkfjQ6iI4u5M+$g~KFl?922QC1j5 zL+L)2RvH3TS~u!6A~wKPU!Z_szK@w6@63c4IqeW?pu@5?qx|&1S)_l!0zxU2tzSXl zSI&-xL7JXHTgLh$X@hbaB7KBC7}Du0-rM7cJm*iKHin7L z)7Y-lb7d8xdg}kMRn1?W-t?NhLOzEmp%@ii6`s0-IPC~_!}lQ8kp0~$-EOMesIron zNW?FRXt0(TZep}&cKCF0X|t7*1te)|K~LB6sjSd@t2>%`zbmHd_On&g=nvW{ZJPi@ zPNH4H3G~2ZcDOCfPTc|1?%rw{_iUl=tVo|jfBBNoI2Sq9Kja!pa%}kWzj#WYzZp11 zv7QiN;2OEZUvdfvT>@f$qDJQ}EkL(16z6_9 zqFsXvFngem!JgJ8@k`$|eHO&Z2G66*E&*<$5P(ihjdA4~M3ELZltGha;6A6dsvBlM z<2Bft3+5W&HJa$7G(iJ8Bx#rDjQ$koHYvo9 zS>G1r=4{exg|2STJaVQsuT(+84|^A5v~SIeCMqSK=t}L7qoHcJ66)tmoIE;Nm{8g3 z-AkI)tMXI1T9>`EL0dMsCYAV|t`axe{1%fQ1i6IvQf8v@9Z}GTvdk=aOz5zUdQ-3j zsbeep+%n1=R)?!da)tq0vvUKqJFp-oc@%P3MJRTuWXbQzFh>g^8p;Tz1s_T8NKIBY z_0?E}DY=Gx`87up<)oSB-H08BAs~~;C-XpV5N`DY^&H8h9WOEO&Kn4OsAhrjqM*GT zW5;8YC{L&5o;fJxzh#T$yfR#Hr%AO{CC3M~H3xtZN6+X>TVy}^$la2nh?ArgPAbPH zIcS$8(gn_ED(p5TR$_y-D9DMySVDMq*W?JK4_}J>uFCqw5V(zI!IpB-&3P{4|o{7uAzp zfbiY8y>piy)z>r{1#pOK0pNP-qaHRospIjMgQGmdJ|TTo;0ro~&f+vB(b^-mr|6xA z5XMvlNr(jcm&WCVwhlZO#$4Vq)M8IyvvbQXhG7{W>#6Hk@H{%@ETw!j3W@C7gr^3%tUt*v4y4l)t0DD$TtUFKHLM!m8zXP^y>Fbtu^ zuqn%eo-uF|qXMY??*J1=f@?3`Jx$# zQ+amGbLgRvjj)wPm|zKP3@?hl;yMmVeuO(gXX&6LcFpHTTDsaS+a#+(b5;ioJwwR) znhdlxJ(wM0=Q&~_M6pBNR$Ask9%mjf^QkPrd}ZfMl}~Fq^>T89p%39cj@)zD=XUB2xO!6VVlJ zdUt;?H@V`$b)6{42u!~k4@`n%-gb%dgUw!MjE=QY_ZGyZK1yHTF*9m3wb^L&qEo5B zY8Ep4!n@@A1uZlsyt%qKGKWXLfNHs9q2WoCx{<-(&Pa@IPMqUPE#gq_y6y%`5!5d@ zc-%GW*0@2&Zoj8)E(wDosTLAr>cPNI7Cydwji3;4)@Y_u@puz;H(N0~)h~r-yU~-D zKpZZP45)AYwgb{<+N{oAd@xy=C>mQ%cj)iZ1@mSI_0LQssl7xsJ8)uHBhx<5UV z)r!m^RwS+`c3u|cVwW|v`NIn34f>x40%>nL%B-spe9pehI(H4DI%o*A0gj0E6v4~* zRs4yK6%$UjZCpvn+dOlTy~VeI#F5-g%xL@G?H#xYqjw zAbqAXgxAeRKNZnH&dM&b6zhsfnp6lND4WN^N6^Rd%~}zFW4NBAl-;nZL{45VOKt4< zEY&(IBZ5T)eN$YIRmaJv)y2ykHVzq1*rJc9@)mXZM9aYZrIzGq=N=Fl70$V1eO+5^ zy+)yr#!(PiC`zA~DD zyy0i?-AM=f+BV5(q%n8aJ;LS+3GTI=<9my>Nm96~1~tM0BAcQafY7}upT{74z3a1E z$u!m=@p#Zs#*ZN-=zSY?#5qa@4l+%u-oOyXH$?80F< z6JLZ)s4wA(o3V993%=;+VCG?h4m!sWlxG;o_2qQx z62gqIOd*k0?Cz6G@@;mCt|V|EPl7AtL>f7a{CFjA`lDK`7*`xg1^EIA6R582P+%YQ z0VXd~dF5$UH?1b@7}eLLT*67p+>flT0<#GGI=<=(|!uW$@{;WP;3ubB|f)? zMh}z2{hW{J>BxH8+6+peKXRa}qBB_I=cTbS08`zJ&arQ#>#~QSiOS4}o=R;yZGhd% zUAXcApZQJNryFFVRqX9Q8{vtCt7hxYBR5O*4H$D_RB~4!Z6j$XQ3if&%ZKgTyT&(_ zVgxWjxQD1nVc5gh2&UkuuJJ7lbJ9`Ltixpe3gu>BHCnXwpT#kvSm-%qcP6rj`Dm*U%}TP*~j>Q9!(C5>EY(3$#q z^ARX+$Quz5VcXpK@5$u>5sc|RoNrnmA1>GEI6MRdoS5j@sjwD{X zFuEh&s8wS5jA9@kZQa#_EM(HBn&Wq7L#2orI(e=>T2bb*XhyL7$XUi+MR&Bc!dfSA@H_jKd25${Gfvd9UcxFy*fBekD^+P zFqdk%Lsajw!$JJ4k#5x zcMqTG3m7O{I>rln4cV>J$__Ivx_$<#(us-?$F$`K)l<5VlMncM$`{~q(#T^P2oa2E z3@j)VcLliJbXRcMCWO{2ysM~;vYOHFKZG38C>70fhizTJ?dQ}Z1iT~>1x!5+O~)^m z?x%qlC;4lXJFn(#WW$brr3BExBep~CEt0jy(9QI^ILOBBrZaNc3o}cQNyjxzk24g7 z8;TI+z^!AVAM8^}{m+p4G}Q+J=+mx4G-peQOHl=vCgV}`m6*w34!B3wM&oUK(K_Zg zuKYrRpD%s$w-$aqaSR`s?CAw@y$nq(UT0AkM57xSo$VaoZegd?2kd);e{z`?pHGN6 zv%~>tUUb>2bW`rvCY0tjCGTx z_u)lH8RN>x;S~9K4nnpIivpteYa82t&{f6a_ajMuWuWJy2|`B}EG*)XJ*r{GDbK2g z95`3n&VEXbJtn~DeQ)a_AM6@?hyl;iUj=>u3eCdrGoHn^8WDCo5hrfAH+@8BUHe$2 z*}nEACnwD-lx}i87Z}sG12k9t`hvzLDJiH5ii}$8&kN!4VbR=MUJ(&2&mxu+4i=T| zneCBb;7b%SLxq*b2^fI7Wu?36z^%+EIdFvgGOjwH#wUg>E=7MWeyws3C(GtfRwTxn z&GFN;3vzKCrISM(FIsZV&JEN*VKr&Ac=n`rVAeX!&x0(-Z9vH?K+R&b`%U>CpwfMX zmUAPX6a(*j)|cM07HO7h|50bj|BcC2wouJ=!zWtDUMn;-FUF89aMg;A8}R@YDY1f> znO$3zN?({HQ1DKIcxn@o@4_1Pq!O{^R_?iwvPx7LY8_%fR}%7b1QT&LcddypB0P1F?u&b#yh%piRDwEsr8e z`hMAo5i=#F(1dj>5h*wvg|Hrl2YtX@4w>ZO#k6l8-SoalItqD8fL+j`(nD!G-5@QT zRVm9)xI_M`BQ%1FcRvDAZpiLR+~oi#QBiQK)5{Y-j&@bdlJ@lu#(kQsG7&$}<4)$x z2txXfk-w8_)h<|;xN+>(4Ab+B{Cq}SJwyM@9LkOJ)?6B4D8ddQB6LC&Wm4yf|IkJ|)|5*37m;7=qSnO7P&Mv~aH$zr&-v0)+vi zXsiz1i?YM^?mD8AKYP38?*^VuOcn1aA>6@j>6Ve;Um#pum6f`$(Iqvem0*6tNhb0T z+mfjpW$kfg1t0HyP@{t6(%P)4Y+4t04Yx8C@qU*dauB-Dq!W(Xg zgg(O2LItUq4Op?S{PQ7x@1?sclZ4K?F(|mO6!mOPG9-T{+jW3QUsejJF=QuIGb6r`Z&70_5VUa35oc)n3~&LdH~HV zt!!qUc8*3ZpS!%tb$+|S-zzyc)l4q30t`= zaddEU2m1(v{^kY0J^wY#1_J&K@vs*L=_siJC7j(Xf!wUztn4gOKDJ(*pm)eXAvX&v zu)3u5KPlecgh4hQ9xh-uHg9ilR&Op=XE$p$4gmoHHg--nPEM9L1dF?`lZUAfi<3Lm zUljk~khF9+ce8czuyu9<{>5o(=IrSq3NM;9fff6+U+|5JrGJ=lCqUD!BS z+1VT&+5X+a-9yUjjpUyJ{a-EIHQ(B#+0-rFoju*mEv39Hojj=iox;NWU-mAZZVrE^ zV`0u_>0s&j26cb)%JDy3%E&3H{>$Po39M}$UH-Ou6Z?N4J#4N1Tde;P+g~$(r}OWD zyqW)t_kW=OEBC*_Zzv@tu%xrO=U?H;NeYAh@(;FfHn+6^|NUqtV9Cj0#=*|Q&S`4J z!fk5B&tk^G&&|SVWogD~WyQS-es4a`2dOTXI{m zu$%I5v2b(qSh1LKo4rw)a$B(TnR0On@c$zk3v;lvvzw#o+j81Enp#`3xj0$>?c*=O z!D6a%!XQpo_WvGHbujg?dNU9PDcU-D`uz8Vrmdr;hKK22YI5-MbF=gE@be4sa`SWX z3H&$cy``J`TP6O*$-&Ob^$*^^mIeHl%$u;Lf7R(5!QU2dxqv0yEKNO}-87w@9fU!D zg#`S|^6&Bn3jJeIWNqEw5Was^{6A}6!_xI1Z~xc=4z_rp#?jovbb2_V+&v>c7Tq|1XPW&SPrI&CAF2m%^4T++3U-ECPI{94zc+X8h)s zd}ijR{5*fB@h^6FXDbhHQ#VU7>$gnbvUw|@zq0|-|1BlM|3rJ+SpKCGJLj7R9u^L6 zO%5I~J2#kHfQg+8%+3yC`)9&zf9>l3%23(|5IK6k?Vh@!2b&TpX&PmO)ljB zzVKK&y?q6Fzg=f2g_g$Nu0jZA3Nn&^Uy7jaB|3xOo{(H*b={$$P~PseC^*niIk|*y zgNPn-N>Ye>@aU*;95XOd;ZRUOC^<8)L-@A;>T?o>E9SATA9PHT>aGE|~=VlSxbRM_^+eSFRTd0wxlIf6nu&Qg;3!oN~| zt8Tp`oV@&F<$>wDyCjhUXOoamuXhuda~MG%yHw7sPBPJ+USIECFGjsz82Jo5sl);4 zdJk^9>ai>9ZUU>)(BhF!rFWgdcL>H^uS@}lsXa9867O!}DaxxmKL&tRM&y2y`8(VJ zg3rHUG}5$Z2;-=PWNdIz+%dlXQFzT;8-KUvyT?|LUc}8MAtSR_w4kjJXx#Y2?*94P z!Pz0{Le6U7Qgnk$r=D3S_}2IR^6h=HLT)vNU0(yrGIy{{v+Oz#bd)M#PCo~Tn+0kU z_8rjopet^orbIjnnN4*z&<0Kwr8luR5w{lb1b``3J@Kc57FeMu#XlIB-mwGQR!bp;z+QEXS5e0fTlLb#PpM?@3ZY?&G;Hh6nqIO zqY2IuGs8Lv1Xnu;N;LIo+X*M?a$niaIu0)TH9s_xF#C6F>v2=c>e1@1P&<-Pqr&Ph zO!9E>;e&|QVKs2B%CM=GiUWhkaYf=DU8|NiG)rUIb{pN-t7=9X|1_l?F9nJeu3MaB zj^0mmQEcvgexXOq4@e;(zMau+OCKHY$zv0_GL;nG$vk>Dd~>q!{jBJW)8i06i99fF zyYoy+1RIM!yo@IM^qM0A7%W-DkbQ6-n^wU6ZKCU5gfrk0QzYOJxp=b)Z;^|%S99e@1xE(lReh?yjFN6Kx5Lk`&Hiu4fGDo_$!8d zYm6-FR~Pmzm+OoVu-dzyKE$}wL*g09%Y)^K*|YH-&Sr-NQ@G(kM$%KOYB2goUUf=FcWzSn$?+&y2p1WLs)|z^*5{m77|5(8kOq?hu*7f`HY0xO? zXYNKOlUJ(Jjx05G$K;1fULVta`t2E1d$MA)|P#C{GcAAFG~ zM*A!Wwl*(?`)MT$vgZh}i`q($&zq8^N#nLlbBI>jXEd0g0tl-!#Fu0gyd&e_F)YJP zZ0P>{iKok#xE6n#%JTAnRC#*PQ=e3rBZ>v0)1q9_{zdN{*^*FMojEuxJx}trYyEYY zg86!!`C75es;upi%6V&^to2W(esIo_*IELlXSdgxHeqF6fk;!5LhH#+SI<4IonLrj z;L1{aAl;{@A(hG06Y8uVEPiXU^5p)fx=GE_a#F;hduq;i20kxR$M>fgSX}SS>4t2y zJ{tJ+(GWVqOGA+@q1Ub7fSp#a5$aZg1icNs_#zELM<;sHYV9Y6S{x!Usng^R6Nx)q zTeg6i9f)QZ>)*bpWxTby|+kn`WDs2s{RY@y0? zng~V&(s=04SyUvA#FY_An9EBT6mpmmihSa<`f<{PDmkAcvU7lz`=}NU$VenJ?3g+8 zLF^469BE2Rwvyk`v(EtIDz1lWOnO|fi7l{{It|N-aPk~>q)ufHh29@}M(I-{!Im_Z zdY*k6!9KAEo#S*%Y~g{m14e1d)&uH7&e)d#7=~aFQ>jA_e9`k*iKb6#2~m`0S4iBR zhF74TSPYb+p#+YZ)2pofVUTFU0mtf+Z+Oh9TkkR6^TnCud%*KqZ`8Ru( zQxFx~uSZ{AV;8#6%lp3V;Bgu<=YrA2{^dl1)Nwp0LUNHooeO$`ykOYULeS4CwI_O` zM;QI0Rv53)jM{FAhbZ6UzbUnSh1gny)AB(AMn`rZ>E05wCeVW{ZX;ev>m}m{( z5B=zY2fEb-;u8v^p*a|u*liHPDB-wwB4LFmE!{6`H<+fjV7boMbNip@!fvbkCFq4j zT09aqoZs@E+eE2e;STWd`xFgNu0IKoEbJ||wMTobi7$AfDwycf`ha;p%a<>Om!X0N z=<>MEkJ1h+r~x4LJmMrr^Cj9)6bKGp1jGKZoU5HxL}=Z+Mx^ivbB!tR}*|HA}kwL2??p(61g2)TqaB8NM`l0*zgQ2MdjJaNF{o_YiZe1dI6s&!hvmb z3r<^gr0C2A5Ts#$Up7rPo4Xpjl^lx*O%ajveLlNtLZYHZE~_ame3H3p9q*)v)cg;z z3bh&nG31WU#*$0o^6#|!KfJ#IT}!cl!~g-R@>3rUt=21_g`R#r&(`4EgXcK}0^>R- zI-^y7-SQoG_z+M$cTHRriadIPr^x~iy4fy1$cPLLQ9LLF-R7_FU6N%rm6e|*WC8Q! z+)rAV1O&b$|Bw{5wyF0z0oV1sNY`~75~r&Jdas4ZefEu5yU*3f_5Ig=33MPELZM!v z=eJ0&peLQ=P9;l%V#{o;d$bgMCzb(@)4^;@% zm;aVVp)XNyGnHLJ0R+RW!9;>m(uTF+-u9Oye^k;G?a_D z=oNpuT`1Zp0HJkmBaO)!m@%&YS$nvYlUgyn&LS+mkj>H1X(BEPnn>RSa2-cv_I}qG zc&8(otSSoJu890l)<3^}Jv3j4Cq9p$L4f)F&+T!}sbmT-oLu-~e4V8JM;nr?Sz8y* zBeD<90qO3+=7!=6aC-hH@g@Bb)oa{sv~LY@TdHzuOaAGO?I8}}$TB9z8CK68`H38K z<^kFdGm8!PLW&=NsrVjV)~;#zPBX=7YCF>m5h39?RL3jss3HJe$l-QasAqO1b=N&i zWV!_7hmF{-N5W&m0>*NpkNHI_r=|5}z29G0tDG|QewrJe>6N4{66I;~%B|MAS=hwo z*C~%h6{(}sKc*bBr_x*HXn5>^87z=J@Y5pHA}Uc(B{q0rMW<|dU5Cg0Ie2~7K%x%FMC_0r~mfmhM`?!&^fVE65nH%IBW^_TB-cjv~z+5TRu1NW7V z+;r8XpYu)1c$ACKU+*D30~BBPdZrd;dPHqCkG~$vpFS^JBaz7sWC~p@-nJi|`qw-9 zJE^R=wjGUkGH8#Y<_Rf}+P{U~W-(NnUDi%m$B(0S^suxtxHZzM*B62v0!Ar_k@C`V z-`B4hB&*1rJtClJ-BRqO+;VL_Zk~19%ZJyogV(XZLNgq*&(fK$#^m$hg;SW>!mKI9 zy>(YHX#kOiV@S^iE}+Ukf@hMmD=x%>tAjvR061^=y%f=vKaHfO5i$C69lSgS81a_N7beB zDy5Yr725vkmHGAJbD{br48Rb~nG>TP2RL5_4xmtRv!Iiqm5PrL(pU0clE>@KK81vt zr}CmP8y4e9CoC8ei^WjXMj6$PjAmIijs4g%a%#U8nVg!M=o3z^zjz|i?c9C~Bzm%= z$>2Kb6V3Xh5BQJHzh@hUkn-C;Jt(F^{PQgymAu)p$Rq^IRHLHm>3!}#jm#?97TFgqpD%;tv5F~q2zc(To7=~2oe z`3k;Ui!V54RDO?#sE|gbl@0cav9U@UYg+H0fY(VE-rg?VaMv7B8mKFK8{t z>7kLs-)e4Gb7fF!ahaxFBFFiR*HBiCBEgkigMV-~3Q=6KY1w+n(>4L*or&C%Hd?Y1 z;|uTyCH!pv$$f$#j>KKqR95}5Y`sL!L$1tmk~*p|bskcq&m~$-G>y$dO9D|;et%GP zW$sDe@c{9#0yik3jABbdOA^nHk}LO1&TzXep%RCEsKmzMl4{BO1cWrmJ`jXXyRD^Kwb(-hq7LmOjJE=b@cW zjvCuSorpKLl>z;aEmNq3`49&hB=oe82G6N^c!z!*Z8}SHZ4N|-cS12+bh8P6vuKHT zYZ=lD^X-%6IOY54R!eRdPjnA%3YjrjSIMAkpsduv5Oz`OIm_s^n>sDmfV&yEKtbk z3v?^bXT5uVV4Oa~bo_QX^L~vBM5Ndg?zxiDIpA(7G$#QkVMWvCYqX;l9)=r`u~l!F zV;M>?p3|hmNb!W#U?id2r#0}cqN%uxSnchphQF^!VVtkIx@oq)r)+vGO(68B;0=jg zUT~wbfs517k{X9$!`2KWtYo^GkX4@Fw)sB*hCq40il|ma|NQR}xswd6-@t`Cw_!Ub zM~;kgYI=kYuY+RXlIaZ5MTVdWWz5~z^kWJIASiKP@% z#X8057Cn7glIaf0H6MvhA(f{rCWr)Ad(?UKq6tHDUC3Yl*=v&JxR7xfC%Xy z%pqN!s^^l#Zkml&22`t^li+oIxrd0*E=;8SR`tL8n0a;9j zCr9}7H~)^>RGFdaBmCyieT28&@lGBddIF|>UUSLy>^ruPPyFzI(dl$?%>~!+xqCms zJKpsxe0%@b`I&3p#g4vhjGR2d)Yv#d7}DQAFvsNp=HLLpMmLGprq0M{oBUY}@9;pZOp&jUqeNUP!H3P09Ki!0v?+brhuMZ|pO$dZsmh-E&@T>FeRF2?0pLEjd( zVd0K~6@KO)FV1WeLe23%Gz|<*p=lwAS^mdMnCGOT4Hv6uptfoX+b8TVVDA;Exe0uC$LfkLBz?Lnu}Nc(E*4cZEECgo$jPX z+O{xsbKV1wuN_4ZP2Z>3^eKDM8RYXO^+Z_ z{BxnCD$X4YsM_8WrIz;?uF9&cM4~9*u@}C?#(~Rtc=unEksVxq%{@H!+*kPi?oT3o zlk>M;&xQ>b&mE&_IteF5f8R#>2R7m)lAIjgOS3UeN4gJlFvrZZ`;apd)6mc~4OjRi zQ)>{RV(+)Uf?khErwyD;7u|#BGqCL<_76Qp@4$IvG6lR=6VtItW^)Yfewyu9+{9qt zHr{ymdr4(-n7T$TVPoim?u3J>Y0D0p5I9ni>@F&5!RmAWS1l_cr7mOWjM|}5zKnUI zwl0t|&aWZ_L=u_-cybnG2*PCOQvZAbq*arNk;3S+v#R}W}4DW z6Xoj2nnkk`(Q3Jvjz$oM7`jf_)R2TY1<+F=BO@~yQ3BgB@O+=)lQTT}{0r1u5rc&u z`uYp#mWC!wPL7O|5J@ykA@u;m(2+NS@_CPOo5P$@U@0*{=NLlYXs)-+|eOs(ELlLMm8@$MWQK0>8g;o^%f5iWxBlu4#yUXM<3*w zA3Vk6mrrs3x4*`l?s*%Vw{D}Srw4#-J1%DIZ?27$U^EE!*>(yU?Ju zurK0VhL3rnVGBtXr{|}ID&GoogSC~vrXPDg8tqJ1K|8Ew4tS`uE!s<6aar)uwydOe z=y9McDM%$WbY09#yD`g}h+h~b6;U8@1NF)(s!FvpV4e1WENa=85fwL}5y&?9cq#0b zmoK^y7@8Inwl#6~djtegL?ehZa!K)%)#9}_-{qx-Pp#(hS(R4=fXIkju6Q^54nK;M z=;r2Ye~qSB-%X_?FYJ4e_3JLBRh(q&#W%70fe+!01nBLVRw;#6 z7Bpt|bLhZ+0w+RtD|&9U>FMfXaD;sfm1bPGchFVL6W$aOd0!%*cQ zyC3-hzxoRwBUk7|2+%bRL)S1h{hZ#9*dnbcxp9ci>d;x0rMw_>-Vh0aih)8X6%Aj| zisDRIrXH{NIa`o0V#8xIjI&``dJHn$Fb?-KHON^4<*7OFQu7s)O&G38CK@p5#@VfU zoS3V)skEPsL-&zQ2W)9X7$-W&j~{03rhYs#&B@6zo__WinM8^WgBu{yICgZ5W0m9N za!DM|#Iyy;v_>jx#p4f?;S(h?9R_Q9^Po$HkCZ8o`h-TERDJ-4zx1_SwrwZ*OpYTb zkMI{?{YxI&^BpF~i`;b8P26zF%@l`Zp3e?5hKVM!?c#fLw` z-#_~243+kCqB6#n8?WYxk*7E`@&x`^$jukrMXD>uA3pHg+i`4qiFZr2rDTM#0hPPB|F5 zc{=;moNBBH!hp$!N7;*L{usRs2~#IynRF&?Ox-w}AETh=`Ajz5cKY2P$2up_gupR% zQl>%5)aNqe#UX60@;6rHC!>RD8b?Q;Wlh&cF5Yr8rfHL~(>P8F%SxOzeuNM_`1t=~ zegDNwOdaFosXb_DhTV^Rhv?`GLK7Hlf|?hDiy0S6E)<;jM0G#*bj0CQFx7&wx}w;G zv?-9lv$hiVHh+=PSTN0(z(VV z*{N~p#7TM00SK%tOE`8ty) z>x8}{l{LxaO{(=KQS-Lj#8=4x`BRN-$Me8Mo7}mk+;%-z|KiFZ0IHMB}zgz zo1#(-*?)Y9sc|2r*$7KV7y=y)Lz<-WI=&y`mNYEQ1~VX)HAv?SisfleoS48db-KGV zv}z%`t`n&Uw-FMC5$T*sxmsg%q{7T}os^!Ax!4ADI-MB8V5B_CiRvL*UK5K1d8>e~ zi?cZ(=X(Bno4{SESNP_m-y&;gn8D@b)CvCEpZ^JK``7d9zx4lb>f}kLi$yNE^fF%9 zyNAcV_dSjrI7na7LFRRuMuS9M<15d8k)OKtjlApbpXXcO{3>sM)3xYk5~1m6n!p~B z7-^F|yLYqkyp4;tR?`G)^|ho1-po+rI4@4^=J&txK0a{6|4XA*xbxSJ!$jKL0ktz$KgQ#`BsuPMWY;rBa*Xk>~z~uzG@wI*;bjBV6&u_fRQK;_sb6 z(}+Vu6`&;d{LX*kzy9gnq_j?wb`Qx+hRZIxoogZquNX=wzJq^m1ItrSq4ERu9=LSN!Yhu$?=f>y-3!8MFc z7cu;Zt^u3UF%N*e>SgSh$APJ1*dmQ74MHX8NUw#^WO!l%IWAehb`6%7qGK>l6C9Zu zPB&nA7|jAnJ4qNQs*{RD(qOQ!gV2k|wVlvt6eCs=C(V23Ok*kAzY+X4BCTu$BT4%SxjH!H{Sj`^meY{hU;(Q>T7nf z>xMfSJZ~#cKlyN+eMW+EVd%tBF1qA$3WW~FMu$0m{0LK%V;nntfUkY&6C8a0VG?=@ zS!$w(d*Vt`<2lcAO1;8&(YJm*u{Cs+#}+AOJ~3K~#;1<(2s*JsXSdH&<^!obx>A@^Bzl z)~6-U!Aq+(vd}9c=JiPz@q(gj3Qb6a2#6zu&mDdxCHO&{Znx|z${sYMcu|Ym*(_$` zN9TuJ&0h!?{(dfQkE2806l}~wM_R+O+MJKYEPgU>qvuN|8;U7cQ3=%?Y3`L0Th~Y% z8eOS{{Et}KXnHPF4Ue%#KqLC`S{yY5mZs5>v~U)w!J|;rJ)fzTM>B|Cb#-3|LDDqn zPCBg1r6?pEl9q{W7&xYZp=)vNk06Wz(W>gODzBnerj$YmL8U&$S9X7h<0rp|-Vk(7 z<>}vc8PDwhHbax&q&9w%;}g$vcyc%6rw+4y%WHXd_jfol{tUgwdM2k2QJnrEt_~TR zq_hG0&%ctPgU>Sd+;gbVMF?%Kmco^Hzmpw1Zen!w7VK%B47dgqkZD-dcJtv^1~{(6x4CYkTd;Is!uzL~_+U@UO}X@)Ge(#AyP$R8S3|6+p#>$);km zsVKVf?_LypL?)YxDVMqIn4ye6OO-obAC=iqdzy4IK~HA^KlJJE&XX@V2rD9)wa_9R zi0JOj)4w54CZ8akb+BxW){G*RG4X={>FcOSBiCb*=m4QhP7IH;XXF4Iw&bx)n^PyJ z@jM@-PG=!c&p;L{r7=@%knc_sMG`j%uq=y{#~RE``)CQPou#YA*mQ}k-a|9;@I!&} zEsE6{%B>l;Z(UDEE(=;jBBK)o0maE0fv4~SpG?NaF%tx?#7PS_^!4DmAxcORNfU)) zY^02C>NJ81r^cr!Hj9iGrw~%Zv0^W2u{KRTD&wg-QbzP925AOO#wx?@6#QVYgu!-Y zC{z*3fZx0Ax7aYSi6{0wN>Zix+?W53BS)V{xQZ_x{zpRPgX?2O4)1@<2YKJGeSp5c ze!lpvFY$-}`@dki5k!)a>IwD@J&l$!S+{)~BL@%9MyujBruk2Q^vkR%6fmOzJJ~^3 z?>deieiFai(y8^&!&Ey_V-lWfWu{% zvKLqL{&7mE6pbLH<^}C6SZ9*Zo?ykXenYca&sjA0s3C8J;*wkelJW?zgc2$^35-Qob5ZV zA&NrGltZC^3r;FSBdVPq%c5O(L7ZE0R6xy-CmzSH8)P^F`GhlRsI4pvF%Ho2|>PEukeH9XI!Rg##RL4S8AR!2l}qKeW2?1V+DtdJ^zP|&JDD4G;{ z9h_`}#n&8M7@wRXWu?d@GDM+5*EJHh ziIS3Rr%r(!h7ycdO7!+-uq=(Si4uMgqML%AX7&cZ+1 zM5HBmTy__)yYi=aW_ULjZM=l*ufBn5y~1P9Ji?KaM<_)No_O(5hMwI=s52+NIreQfI(`k>RPMLS#{af7g)_>1yZ@iP?u)==#1)iS%0gui6fFol^m}*Q> zqRM;T_92p1CkKa~CEwG>^%vbjrCjI5((-SkcIq` z`B}Df4Rk$3h!yfbRGjrnMzK4!)h3;J?W`8Tyb9-$T46ntb6N7+l~)H6f`N=i!qLzT zvG~JPG3TS&Qk44v+jO@Agu(lq9{U+q)@1d*iT1=ReYUCU!tcUYBI zN(pO&fcE>}bSs=Xc0XcMF@=UV&7K$rqoeV{j9ha1FMTr!jg0G(m6o zR>qD$$bs>vX&Tc=VbN@yqMixZk^6V3Q-adyK8iz+aWwNhQAR@@kLEJag*J3;-NA|0 zV-#{%FnshF7i`}}Wn_wGt3eQYJo@lg>FORNnM`wR?{n1sDz=p*YWm#qmS5!ZYj5L{ zi?7GB9fS}#rh#c_Bu#_-5*!dkyBMs3qvbg6z8S_|j+6xjN071vNmG!q1^pR8XENTF zG$CaR5{5w61>Gq@-igC(q>4F(;c7vVfB67prJj;S_EYL?L+YXx&R5u!3#$j%s1D&+ zCPa#kwFc>KjYQf;$^fBs{7^DJQHIbUolJs~REHIQRnQFTgi%BgNKyrzP!GxF5=@L$ zIB;-;lhY$?+?He8=JklsrabQB`w^ip$ys?yr3RL*A#^w~G7hHB$Yg_5!l5Idq^BoI zcXxtjEh1`}_;>^^6gsmc^9Gel9X|}PG=r(qB(-K86@g(Zq~4;?nIxOHF%t^g(NSSL zpj%3G1QU}pXoez}$q+^%<6{*PmP5H#W2RmvP(Gd?Fj(kgQ|~$^tJ6$Wi;NUUskBPC zZW9ogrbfoju&J<>t%K{CDb<$=!4fNbfegby*LAjT*v8K7SJF{f!+YQQn{=9eJoeCi z{PO!h%nQY*m?@3&^EbYmBZpt)6JPxVfB(Q2IXZrv(Z&Rx?_mTQt*!`45tWl=P8E+4 zR2y?IjG^m9L4?W(?z--$*|dHWLI^J2av3ikKfs7LitY>Ee8D?--9>luh24L{i4#Mt zHP*7H{vmdN4frjo7sEtF{WD;9@+a{9yxFyVHmN0VlS6(dJQ*RbTeJaUJi~O zU~B*RORXPgDbeDkj=z<#)t4A(XJ1z=tL&evfh+3A3V_LSr1eF?(>ze8&3?29AzW4# zeiidR!bs5y;*1ro=rs6<=H>QQoK;`&thTJACW@g!)_}pZpd&5NO>L2Qw$uMt8nH7?ei|L5M^7M}hK8omMR*nY7|8K0qi# z#>Y!!k~Y;^lUz25Y3S5y4K$@=XePCCK+UUSIv{04u~uZPI!UoUgJDaG^&+n4q9TFg zm0aJtCZIhu8!Y$AOQ4#-N)-?Pe@ZqV1=kFFc|GT^>%{v*#Fd7A5X-p0;tSF>sT zR!q%gW@d)YWPxVXpcPb*EzmuI)D?EGiOPhm?HNS4CaqQtfxz=Z+)|4_{oTJ|%Z9Bu zwgbeZ_?glSC-*#yj>hA~AMmX`U*`AU@KKH**oW=wyl&T9n66B6vUr$dM|Y#SK;Yr~ z4XVONkD#Wt5K_m|Y_8aPC0qKozT|d5kU9tW5F!R3ofh=A zQ|_Lw^>Mbg9R-R?Q*p4SXwFt&e>JW8nxHRblC}*D!#w>U+m#nx-{*MMC;ADkKc{PD zC^`}rmZ6`)1vw2uB3hw*)qs)^(3!C5NhM+{?Yzu)iZ~nBc%#L5!^I7wIHY7%R^=4} zAG5R0-eV6_t4uO<;u(t7z2w6lTEi!J;?%d0RfAKfcH=QaD{#>#%XI2J929LYLUWXFvPLTzSQ9JpKFwjJ>#z%XZz)_{kv-?0JX)7q94X{^eKmzyp6teWc12 z*Wb=p{^8HqwD}Se$#mQ&P2dzTR-hFcZ@h>%Q9k6k}%`z`O)cXt&ZM*VF2XS@Te@18>b&f z=}F2)a>;!%%H!vz|AG$7g-FLt!t_j;$)i4nY@S43M~aBRm6)c1?@8QNfbWI$Z^$5k z$;le3X)(C5gH+Z=w-ohO6UQ;ASA4R0hmnyIo#`%;X&bK&#}CgCrK_}LlPC7=VX867 z@N|)}DGxW$u(dS#yonMG#wUv;GX|AvlgX(v9UU1A-JlwHjE&7OIyQ~l@{m@OR7PXN zz*>4c3Rub^@&yx zpC(41mW_j(@I{Cpg*^J$qZqp^cJFzdwO#AD`<6HJ_@fU}=-GzeQDbJb#_*{sdZd%l z6KveHp5J}vpYZWN|1+L^bac+TVwfiNa*cd8-&Q^)LI@hAD%b6JGdMcmIs9dkp5o{W z`*BCh?0DndTz&a#nJP^(b^I`9-D2a0tGRsVwanC}`O1@j$4wW$krUoAc5S(y%eP!H zZ^BZq$RL={=TJYw*iz?O+-9>$tzds~4(^9I2Mb%N(~cLll(xBoeu%}6dr5I_Dvk@5 z5JZAV#^mnV{8?v$jb*qni+M;EsfS_+NE;&NS}c_wtX+-0)>KTpYL1WcYKsKyc7d_E zqA2YxQpSq(Pnu30C`HAOm~OgQhECGb=2j+M)96el&;V0waH8tYSu)S4s-k}M^thI; zVe8siWO$UK?gdQLTeN}*x$6B`l~={{0hX1Z>DI8b87@u#47xI@O`l|abR#==y_N4i z*Tcb??=W+G21^P~9eo_z&WK*1A-TN! zHpYMOSx#kqtbT=RrzllXNdMODNGbX51D~f<8sUF@_W$OZ&95hsa+n%9MNe{o;hIHY zdaONf8%j#j%>-|J@2^rSPB1=okOMD1&6e#u>FVi6DDc8~%rp`KZe)`{L)XrnC_|~3 zY$%!`)I&v2O0cOQ=t|6nQk^y)0VIrg&W#iVk;0QACJzS+Llbyy!&B7Ww<{%xlwzzV zundT#q7lT#s#WJq6>q3M+!G+(Yq$g3(t?z*Pq6(M_@=)B7};={v$)AoiqajU2NUBmRwhY z$&o76Qj5)lYw7OG)0puXJyK(;R%E7Jq}Hh6`95emrE*9n9pSZnoRonM6w=)kG9isd zKu=GBYSpD)2{9ZHQOM}j7#sQrNu)IL`7V-J72x|JNi)fo&P`;@ zG?A2y)(v+XgAN#JcWHykyi!@FTruGL`SLvO{Li0e82o#4K`U&5|NeD!Oe z;`87BTi$Z}ySQQFUEFZZ?QGh-6(Iya-18X!^L?M?4?p$0I-SKL zQUa;eT-^`F;%@l)X_D2vb}iR$UBp=%(k58?LiiG2NJ)j~#ia9z1{A#?A1P8QHRoBH z%`y>Z*pY-$gdfG@Nc;q|I!Og?B$;aYq-~RgX(GgF5Mt;$xrD=@QZ)RCdJwfk^y1!x zO3@12MHGL8PUu3M;rTcNBt;Q5KO|b!SXSi~RHPOrp5C_hs=1B-^!Ue_Jn;yAA|x~- zHq>t5hKt^Y{&MiGZwiRRgEAO zlDq6m%7=EdCTvkEMhKrdgC0tuX*vS~8yS1?X;f3^#mDX^QMVY{_bh96?7-YSK>FZk#H8AS);&1bJJKGX-`#qIGt7&w4@AMjUM;4MCtFWk97(V9#5EsaDLb zixea+C?w+SSeh1RKJse{Z*@5Tyt<+sW(HC zdVxYZL&C7JY{k@Mg=wu$DxILvoj^$)-IN5O!Vm`Q*Y+?qRi#udlgV_GNm&Rb2>cKc z>7+X)P9{OVVoLPu) zvGAFtJZH^T6Sw8_sYgG}l^d_3x3iZA9=w+WNA_{UwKt)#`2KhA<-h#Vf9KAfcX7=n z*Rr8+6XV4(p059pC?f#LuB-26e7eYn&UO6yzkeTJIQU6Q!wu4Qif12x1c^cy8d8BC zPH|-a6J+!KtlPSs=fGf<_yB)hX$6dGoENA9hCjX#09^Pk(y4y7~=ObS@Zip3{Y+d9I3U=m2R9HuOa{ur&w!V zTxC}-xdbaa$ocEu!RD23qbuLf_a6BYM|M4hwq4G@>>b2<7t5F2#0_uxP4+#pl}22_ z6Ow$z;G^kTeGPl72XTs$NNT!$o94Dh@sy%q9OB7{=I*Fd7G>CQ<4+LyZNB!`A4N74 zUfW{LrmLAQ9m4JHVLBe?rfYu|9l?@io2d9RZMa|2Ly@6u@sh)C?Qe?G%`e_Jsf>m!C*#Ea0J~pWEHq7l{t51`rT9D$&`Jz zI^SIdu1uTJyPWhjw56C!JlR%y%z`U$6g0zBCGlJ}NQ!)hU$G^fyPy=@J!t6=ke%1$eLl#=vjdRZ~F zl&%4f!NEKd3tKs9QY=iEn3|>$G}tqGl*=w&&eokH?4O+E!Zj-y?91}lu3dEXcochV z_8l2zV!Vo@^SD`wQWl9$aI+Q>A-d_%-S4sU=xzkCW@sZ;l4Ecvk1~RM)}c|g@O6lv zM2t<$qHG6Hw40h{BP1pwY-{q_Ecv2Ev*F`9HqBNWNXQp#EE{a4&`H9~R2}UrD&-cI zEg4>zLnlx!H$lbZ+#KcUHWCXVHO*SWbiIo362_|&3>JI1aOGOMGeyt>X=}nHAfIs= z8qN}!78BED99vPyXK-Cb=*RN`$eFTSe&7=)F%dVr(@$Eg|VaE%***|fB znVAwR7p`XKju$A69pnp_snhds}`;1l0{chZd3t5PUgv5IrdKMqA#?$dgWWW zbI(7p<=~^}BLV2t8CGjUX}ZaKf9(&@J(4ZEA13q?OgkiWG>x#rBhTK=^J7o(+wc2h zHgCR|?`{1K_rCB|a`|31EZInJUq4-i9=`ac|4ykj!4F0rAR`LA?V6uppnKpI&I9qv zCeHD`7(YC#_+n6fMm;<8A=K&I)x}wYn^y`kea+vm_bYLP<66Lo9{Bwj`cy;n@zJow6l4$0ldX zPMvqkgq&@Uh7i!7ap}vxD8GCBN2BJ4jMm${=9-b`#*ZBZB2HLzj$efbdY6*Vb(8Um z-1p#@*s|x#v_;GvH~$_hS8V2?onPYJH+~H1SnO#%N#>BC<+ixyO}|Ndv`KNnB97=C zm_(DbG*abIEM@dSiAFu3*+__z1R*6tSnPRW7q#gU?IWXjT?5?w%m1E+ZnCfTEDc>I zYBkxp_fbmz7)Psnx$fGZX8Ed3oOjvvAQV?#@iw;Y`962t`hGHQo}op{ux+Q4j4{MU z6D6A17?hOQN>L6Bvti0iWNks03k6G%w;(4|5MfDy)sf1!guoW*W2&<*r0iuXW|27t zP?VT+w+=dTyh^5kMTwLRslUqRujj_=06<>q{W^ibUKCZiW#;>=t3OCKnZ=zQV=a4F z6YnH9`YgT8QM}3LS?GZj6@s9RHa$$|7h;)&t7^}3O?WTexhB5v6Gs|lNr)7-BWZ>W z%9UB7Fah7jb`|YbK$HYzvo1sqyAB@V@bS>O}W-aSq|++Om((R zqvm5PiRFMMVr;ZQtPKkmKIYmxKxd@dIM;a*vCNTu95Z884LSn@(ioV}7P4sHMxqcx)2b#!u_W8Ac>eG%2HXJ_^$gQ$h4{?~p9ZfYJnua6xje=glv1o(yqXUz{=<3an3^te|98L6 zz2Epdc2*`>v%H_u5>57qM8qb|plHKg-}(mc|GnSEYuoJHwH39j$d2Z-+vI?JplKZAKCS8dJ^?HGt-gCCpY z8qUpJz%N{!t`qyClD|cJ&!fE#Zb;+qTzF}=BLuV`poXZ7^sC2%`hTo z+w-JCg@BBu@RTA*60|vI0&;G=GPdJXQ)+(ErkPjp`{EM}yl>!g zs1TPDp4;&VS6p%n@4Nla`PSi&Qycj%{kJZqa`-v+WVVxu6=+F+ZXvh5`t^ms6?QgCu^{0jps zXR!Pl;Ntc(EKGK=Xa5-eLpiz!3wRkx5X8(jE2wscLZ3}7(}!x-D2N72W*%g1{4h}z zuwY>~*&dg6J%Y$0+i&4FV@i`V4D=NVeV^{`97;Oa$^wxBYcKC0VnuDT#=`spo;x%` z#`f6Qzl2pAhR9eBBTqM2v|xa8I75B5O{U4+s?7*LgzjFCa-~K#V`E#ATBAlUhhJo&Wu32#%TMj;slO!D4e~`LA%}>4c=h(1jBY*kTPjSuWYv^_Q**)?+MQpNz z1N_aspJqw-VulBX*|~QIqhp6D$vM`%2XJyY?mMvILUsvC&2<~6%-&lM8?Tac?T7w@Lj?|$NrS-_>N3>om0k$+KL5KNB??woTk`l*~WUaK`+89Hi z&5uMa#sHBv^tg)Ntk;>dr;;gB(2D2+sOUIXf7STk?GMrh?b_i;j-r9H*>hYgVE}4o_yjiwr{zc z)vK;xaCiw)DvDjbc$q9xDwJiN7Vw9OrWPbjHe&oZA&6oUoy_$kN+Admohl(7+bcW! zpPWx3&D)El5JZE=&wv-5$1ffQ0I7iztjpbVSgE=2$|$ zPf#8U8C;YqOhr0mqFf@I$&m3fWITs@vx(3a*&_oz@o$%OaC0lIyl9 z7PI8D5+x1oR)Cii3=C%QG7jZZgO*>Xt1Ckg2F#Xge2Cz+h8kjvQ=3K^86$mI*< zygZng$WMr4jU^?PB?-fjW<8`?jR=B}LYLq`=`fS!G61%5afM6ofJZiCV}v0|Vzf!< z$rUK(vpBBA%L$|sC}ZPTHkR?Q&IDo(^bPW*k9{M}`WkrRnJ38GJ=CVBdBT5!zNSmP zT4&eZUEH(tJA_HdWlJw(c$8jKETYR-?+j-}x$Q)}7A>?)Vdg z5NzMEozclrUO2Fm15*e2ukZf^N-DNIvxR1>$rTq~!KT%l5r{d{F@QH-e8c?YxOp8m zsI%coj)9Of%mSRv8gNnoex{;d;xy+w3$!%P4PFQg24f@w1wwVU9rLoN!5Bkg1hFw4 zwnLyh+uBQk5A#yE%e)voblEWErRpkK8$4Ga)$vFytz(KJXa=d*NAM%8HLgd7v1Uw= zXnMSaf}`+kg<~m{vXIikQj(mfaBYjC7vfcXjx=MM@ei*qb+$tTjWAuT)Lf`>Mmlb( zGMgZ-Wm<$d^^$m! zWW{L~AamT>1E7uOAHVuv7@c|?VuOih_}Ul#jEgV2g#{~C1BN?3^l@g!M%nYo{Z#ip zg)xR^&8L~0WaWi#<+ zu0^RCQE)6=OOdk`IZI&)F%Qtqy`E-1Xfr02B43zEdjiA6(BlePvB8f81sCjAr~LFB z6Y?)(oZ+&&MAym1B^=u!b_KQBgmS&cBGZe~E|Ui<3>5QBxZTv&6=+rpWE_{_72QN( zf>9y)UYm&n0gmV4dWLc-BuWwrI)iYl0JPfy6Qv3Zm-LWPE{%E%OosYYf>1El9Ot4{ zYv^+GC|lBMgftofPTnR8B8<^EaSl&s7~fZ?ccDi+ZgAK4wlOf&jpNwN1f{uo)8AiU zqFTarEfQl;N)UuLvGNf$i}f3eD5pTP6)-y;P${=qu%L%_OY{8hU4SMUZFd^fL&{~F zIG4fmY;ySw*-VC@nGm*pLYi3GCe|@J1}i6Nx7##k6CCA`?Y1bm7LB@MZQn||WglpP zV_OI}Mi{7-L#&Kurc$Ndju`6e#w}Vj{Qz4i%CjMD-=|(RbaiEpm0-R6hA*W843jgH zeCc~%A|GbByMQV>Ei*15uMG+yzI4{F5iA^^g1wH5O_`sJfu3g zM9cs|WGJ-^wOA1R2vw$3r$JLmF(;F4%!zPJAcR6G$U24|FJdN0@H<9{uTxx?W-v*W zt>y=J=8Qf`$2>)hIeYphmFA4_)jGyGz0yM(fTs%fhW)vcfx$fehp_uPG>sL|hl%1Bxaf(JmLPFh-F*>H|TC~H6 zjBVjs=^R{`^T^r?g_tM(KDUOPu%<`@86{YpO?{UuOgZ=BuWvr4cTr*Wvs@*qht70!QrWCN|ic$-ueq%G`)ulr@n%hQ|#M0N#B5j zP@2X8i`rCz>;czF2%821o7qX9!jMZGnpDwgaX&r1d8WpyG+RFHipElknO24FVwOwJ zUyUVP>a!7hcZ?%#!_vh=B(cO386tc_-NMT_WHT0z>^scH;dOY!aA52x^{|W(f`Zpa zy%eH#gsn1!?HD_o#W*(gQiaRcFGmPN9Kvj+Ny|@Iyu25b;Am-znM#G_0}EL+*hRje zD9^NsLqQ?eMSpJ*TX}x>^9=P5v2N8mwr<_R(x9Jlf1JmjeVp5_xs`wT+mF+9 z3~@Q(irfkgJozYbL$l3!2-zc9P+Um4e1w0v|1WUzy@VL{jBMkwW!DfUAsd#hryVqT z;rS=2=3_))(dXHW9+}~(ty^)NwCU{~Yi{Shhwj31L%#93FY)!yevzxLz799zvi-5g z$%HP~Uvxbym#)IG9Y&9glFer6>+L&zATQ1&W&TPd|C2YfGXf-M@T8Xm2IfpI?G!)E z>kTod_Ru(M=H-NqH{E1phXD~U6@I1x_VEJ5oj7(bP&DF{Aml_|<#>ikkoJ5SQhMK# z;5i~y#E_@C1Cs`{t+-Q@{5tP!LWntkk{(AeoU_Q<5=%*JC9$ovc~hLE-JJS@NRjIA zzg{iZQl#oNJ+5NVv+2t^o$@PlhOpLj%H9&%QA9IJ2(><|38;-Bh&AmfCU$kltKh}J zFJoCODrE62iNG+~^a+!5I-WnyKqO^}UmAp%jxW~nj0WQLJL~a+p(j2^0*>u)+l{}- zlTUw-uRZ$b3jfGw>}LCOU#1nsM6)56UUECv-SIvWVh+V4)E+sAKfDTk ztnr*wB}xgw_dok7sqfgMIax}UFdNvpF z^DU~)X}WU*BuPSbc8cDC1uwhbXaw2_Bzmp{SOCHp5^bml3C%FT7(*inkU~&t1!!$p zRLI~d*#Q`0PSW>ui4A3-%T7T^WKw0VjDo3#q1zMGLukk6914G=tcG~C4kfs3-`6=j zwv%j^z*Qc0LF0NJo7b$t5grxlRP_YAt0k^@@=tlgMa#*p$xxYTQFJoo3l6bP@Iy@; zCm4~?m^Rc}4VDZoAha8pMAM3z6pC4hG&7TRM51Vy1dVo;mTEBV&vL`%n=!FuX10zW zw^_Go0MB!2HzM|pmY5j}Skya6X{yYc6-#*T*&~e19O9ad3rTcLr9Fd}aRDe4a>SiE zp<|5_iaV z{V_o+LP>#A2}z)_u~{_K%Rq0I@=OaSV-PAqXcxz^5O!MXo|pu`l~A1xi2{RVDU3{L zG(-GWOg`s9ED3dl<4Qsu^TNJS@?Ms{Tpv9wAc+i-jz~S;FU-^%0ePIh*@B0p! zP@)CY-I&>IK--FWH{Wn8?|aX`+Lp zGSAOEkFW&~e*ZpPGPt%&qt)brNAKtPz0b4v$UastU4>HWOycmQ}@r0LD!ZHG*4PmF&H%L0lO2@uVqd;|9N#5iBbFAsy zk%C@V(BG+DJms!uAc+kPAI4fHl>&Z^H#R{>Ev5r190^%VFqDxD<#vX@?=D zhR;MRq8012y7pt{sa>8;-m$PxP{R@(wH;eZ5@V=`Y3=&C@#6zI#IZp4gr1I0f|JaMU!1Ly#7GPh)sb8mfWmZG z&~#NkR_1stiKLAo)Cq{xVO;~QSYydfLgghuhy*g0Ag=_T5@Zx)?9}W~0j2hfP3q^y zkC0Y;r5Q{4;;(~7%nG%e-kv-dV2FLTeOxduDp_^*(OmKpnXLc z2E-v`@)mB!!geK%TEOg>Puw=(#0)OYQLa{Syfg+#0;o=f#3E*Lyh0L4o}1mpSbdU9 z*PO>dv6mnU5n2$(nxGvK`U#Ie_6!FO?tsK2oAc-|_Cjd!@Xlwj^NL=lk6NS2-tm#S zzOe;;L$u2c99trVLP-mw9ZKaf?%Vz-Tg*tQ}L5?T!(h!8Snx-!e`bc=WQI@9O@R^vdFgiBPk)svj zHb^6Bg+8GUaV(3B?U7g!ei%|}R%s^zLBp_gxSxF1BWP+Gtu{u*6uK2wR-=?fZ@%kf z0CKFPVbA_O96WM>yB_!!#axl@Vh?-v@20!hO*WIo7{lkj@%Mb=@vrgR?#Gxe*BKo< z$o=F^`Legu-__4!58sDn6iG8iHzg~Vp2uWs6dMOO26r$+9D}F}_8;EC?q_#1 zkQ-!q|4I%V*vr3t&#zG^4D##~kK!bXqIQW$F#Q(qy7|3);Qb%u>T9m$$}6v8!-kFY z_xID^KR|!~0Qr2Lb*t8qM6hM{84_jq{@5ej`PkQJPB(aT$D@38&z;=4>$})BiRX9> z^$pDrL^wIne%XfVGoEl~k5t6Vo#QM(&?^Tb$EUDP`{NlOYFX<2^IaMZ7r013*ZD@34svqBN3wm<`p-z2QMjPram~O$O-%-DM z9Tese+ z#gc-oC0WzuvaCDHKt6-#xJYR+FVZ`0v0o=Z(Fsl8XR_fl+6btJn&@n=yA!}tt z$U4?Z0hACT%@#>PJ&33V=Q>z_oT8-D_*9-CO@8_)_;|)xoZtgun6FZ3V6Ig1>ks?| zlQRcdJhUDuB*qvj%_*+F>>aFKeKB9S_oGxBZJKdJW-O-JW8rn#lqzGiXPbz!u<5clFuY&|rLn^dFI{=s47D}_jp#I(8>G}P3XYs+ zKN6i)KS*L)Q9|CeX-5f%stsJrB5SKTbJCXrA*yo@OA1^Iy501Fi3Zf;bG{%yIy&)( z$XuSV71z3lxmcA^?OCEE)YnoXYti$l7t7JlM$V0Rhp0531-?$2On zQXi^Xy~WP`2N98lw4keyXLhoMv0{)3GPanWY;ox56xCTDzm>3ac7%qmvvO!Lo0qSk z5!T2QY;>G3IW>#zN)8_=Q<@wn@@pIzJ4&j?PTZ+aaY;tQcIyc`MeDakDh434YZOw>5sy0%D|=BrQRG zIv{LE7@bg_X|nIoIJJ5UBV&eoddU|YjD~8h&1|)aR4MbJTNbvo5thbsp|{tgnDynsAc@rZSUcYm)=4> zYBEw9Vd=tUl%^*5+fRRjozFZ)&~AbTTUvO&AhDrdZE(je@0{0Ee*DttFeua&+P-%Chhr_Z0{0 zr}fr&6}gGC3ie+Dl)QXC&zxkwcuEt-Qvi|^H|&$XPO%n=dHyJ-!-Sl$v6<8dBuZXn zK;q-Thv_t>pOyhRp$5y$WxZ2_D^CgRPUfsXD-h~5(TFk3HVl((sKmT3YEn|b(yU}S zC+YJ9eHle>&LZnt*tU&SYM#6JJm8@dqBtgu;uL)N3FR=M9_iQI7o^{{SkvRNppYT& zx~T%5R2}ByxY8D*J6%1xQz38WfN1LK9x+jGbF>jMZ`)Cr3h ztmOyKe1(U%|1FzV-a`=|95Wd!A;~CD&5u?mf-U0h)AP$qxH*`n|`Tv`rcy z)@iBaOgo_FhiM|iwy`@*$eC=XsXCxYWqwnYVM=XtPL}td8z4E;U`NacxzA-cFkbc0 zJD*_j&;Yhl#5!g+nqqKKhMsPhpq234&V$%W(LH2g5YN)?}Sy~+0d`#CZ*!|2o$eh|@)8~Aa1{=O6|JRB0CNsMOu;X}kajcT;k z^yYi9gvF)HuEMol#w#Uitp;JzA`*3+j7CXKyAj|wLxdHP?>1-=Fk7xNSuIiM6^Pho z$)dCwUrK}T$Bd8Hh{6Pcq>#;!%_%HtV+o5yr?FPG5q6R&5tdTu1hOJa5JpT^$`D%E z#z7g2Y{tP4BWjhHRy`pW5#7C6)Q3Ov;g1~u#=5S{%~!pJYNLi@dtA2pa$MVENDgqr zwQu67ty}ryPyH_YCr8P;IVNUGOxC6;P1adHuo^$|xoqQAyz#P|u%yG?Klmn|u;^d7 zlzg_x#L+|8p2eZ^LB8?8*BB@)#Kz_8 zx#5jBVOv>tjXulO>)*g9-~S1Q2Z#CALwE82eC0neU7F&OwHM=bjFnzB*71y(inHJ1 zUMc%HSpYr)J*o z(o9`i;*@6426Hkk!8#29nQj=y+lE&1+IxSb**sWXR16g?y0aFAtirZc>L@Nx{f?yI zLled^m3G98A5m&0%=iiQ$PjisR9;H}vN&h6sy9d0b&=9Oq2x+qbb`?_T1P~2M3N-w zV+RRw+vVK& z(E<>0s`dL7AM#{|uQEN(S0DT^1aSFZ|~rm%ihDr4Og@6>HB#0x%+wc&|_?Q{%!^fOW6JVGenW$ z@yEUnvznFbFJ(pHd>**xuQ~6cn~B4Se6i~!_T$Bs+;oyo=A^{d%e@bV)HleFVq%@n zc_k%|ZDDoH360?;OS0xzk&cO>kb*{NnD*0zjuf1m+dqmS&uA*17JR(8zX|GHi&-OU zEbDI3H=Lzwz{L?Ro|VOQ1hxm=*)E0`^q^eWvUNY1qM<8aq+QndHO=Vw6iHi+s8qXRW7SmEWvmY6B88@lTgTe^KMT0lBOT>!sHkulaoYo%=*PES+{gK zx4!WzmJKhYJKsn5P>#N#0xOm+V6d-;yq&`n9*&Ykx(PBMUzEhA&B3GN>^XdhQez6o z1=qId?JA&@WVX^EXd5cE2JL!6#&O8GE>UQx)*_}GK5jmXvJ}l$ND^pV2W&^+ST>0i zmReZ=03ZNKL_t(eXtZ1SZH-p1g-08^D|yj+H-cRa0cpe|$F=th<0*E>CYyFIS#_1s5*8n42!YiDtXWAO6)J zGL#?WP3PahFW&YGc&_)F1duNY63(>o)KdB`qR_(P-5>ijZ+hpiaPK33PkHwqOeW&G zYv0Y}p@Zz*y@j?2kbXp0IZNr#A;RVi`K;oqbw7jMQ>0p-Vr1(h)Jzk!%LSKQhh^JD zVTev*q&#jO3Fi7fUTKQW%q5fzL6T4lLc&Cou`N6+?cGc|wvMM-+l83ltLa#RFoE%g zA#0`nA?~Za`gr0bK?~k(^KqXWPq2m{S@rA8RX`0bDb zr3oe~EgacRBWlo{&(LlMG;2*V!oqO{MkXkk0*g3KNMyuRa~j)`tXSSdPp?NdtH|XX zyo|#2Bt5+z^=9+bPUsoekL)#zX3tPWPCNlKJ9;$2zW5b>oc4Ip>gML3_JNEFGwU41a!}`se zn3$O2vAx^r%4Yc5qhBC6+#u=^T)ys&3=b_Lu0-7X#m~=Wb5k=iNtPT>zpw>YIsD|s z@8m=O`}eu)z8pV!AA+fOQ839WOlt|6@j@Qr#+W%e0vX6p+I;ELf51=v{D-hz7iC&RCSm=hH}b@RZ_;0O zFoPk(=db0FFMo`<<|C6BKV#F?)rU?JYL!_Y`0kf^c>7nl>6%}_bu(-{|0)KC7R^^H zdrCpD#di>a1RHgPe{h+N)b$>JhMj?CgX zg4vlSx!eG5evn1|S+clzQ4doG40a~V#8ee6G(zWTHUfmvNCR!ZhK>wDTT-6UxVAz` z&^jj3F(%f8Q9_&~%+{M6El-orW|2Z-cY3O{Ne~Do8`G47GM18b7xNrwm08ubhH||^ ztKu_|>p?0()Az~Rk{}8xWIb|4MOaH%JlMlfe>awr7;TVJ60|jOoU)f;sPUT#LhCcz zMUOS7pV)5^Mj^ZQ@8)nYVznIiG{d>P{+jrQx^>YZz#_3(eP1pPu?XZPsWq9;|f08h$ z;^tT4IT<3qP3`FOL{Z3wH@$~}HS2Nn1@3+1bL^gY0+Sf*CU}V=KWX79iFBYTV%#X9 zTiEQIOh9XTvKpln%dWkZ$Z;4wxPyuP&*Q{4GLbmT1(jA4-HeGmL!>k^u<=5TV-(SK z4)N|LS8RAUlLz*5!Bsc1;le9uHS5%8XL{nenMt1G*O*!kVC!G+Df~n=Mc8#j+(! z7WOeZHp3Io9wZ{fbro@(VA%?pIE21t*@7W-8`iH}$l_&1q-AK=4EaI^VZpPHkD(I~ z#X9G0SV%sfBdjWRY%ei#crSH-maLP|j(kSOeKOLeotH>kQ=YBU_B9AWSN9MD#g#;& zPQkLdV)HsOvPfkr#Fs6K3nXnnV*lQ0`g?OI%h2{)G@4Cx2)1@`Z3j1FkSbN6YBoZW z$PmOK)2$lKs6``ebJ?2JtXwe6Y@?3S4z*T`W<4U4u{m0v;%K#mZA%? zXZYUU@ABwBJW+Nfj|2F-$dCi zpZ@Rvz|Omq@M0Z+`Jvg0Gd-_4WpdBFw)dHCE5|V)8i+Z*vrtNKEN~KoqtY_0q~psGi<4fe zGtP=@(w-7y1TSa*U`z4Z%c%%(J94`PS72M>1Xf5K$NRjU_LaX zM|QG({Oj0#UA*}XAEdWy7~6IUrw(&y*VAmg?%gas|DsOU1dJaY;hW#u!j%{O8W&x8 z%bZ%@?Qi;ZmOQ(j?ye!WJo_CEO>C#RASOv7R=7p7b%h9QT5&{91xQ;VWqQor_uok? zvCvv0vXWXpB?RwytX@Bq&P`*XtTy9^>(plh4$e%l zd}SA|HGnp-c#%ss>v81;8;PSNRfJTE-r_VzOJxd979)L(Hk6xnGM>fGvHf&=IX30` z*nRL2%Lf*IUrFLoh9=*qivXKk8R zhE^k_<+rFctJJ2OG{Y7>PLZtb5l1meEEviz0^5+ySwykV#7u>*d9HD{=XRWd5WXf2>W+e?3;3u7h3Q9@!8l!Ri=1r^h121sq=d5R#4 zXa_z@?5pe1=ba_LJQC%(tKxQJt=F$px44SO4E%v0~A3 zcJA9r?*Fj&-cgcXXPy7&-Zxba-PLhYPY#l1G#W)KTe2lU&NkR^j4>wIU|@m6!ouMP zXJMD!h24c+z+l!K6P(s~0S8&OvaBqPG}7eIGt)U$b>*rz-uwHbs(X4gqhMRXHgo5^ z(wyp=uD9Ozz4t!f=leY0Zz4e=mLQo(l1wD&?d@gDmaQB;c9eVW`YP>K6%g#X>N-Y7 zMp#%V@^k*arvV=z0SSbhc?j8LGpF8>qK5+SmF%9c=Gim!yLiRJN zQeydd%@P%_Qm@E)H*|6K=1#Y9@yyR6&WPNuXp!$`o0obp1faS=WVsRj1+lMwg@H%H zfL;d@v2zuYmVRdx!Rfkw%`){J1sBNLqN941=$H$NCHKG=jgrp(!IG~*JJ8evO&IBJ zGo1xX$aLqOE z!!+&Xgn<)FFfy_ODLN%b8~QJ$G&9G|H-3rqgjG*R}^*F*{pjeyYWR z$x|Q{b+1iH)zGFStaVCw>!F7m2A%FDA=$if7kOuZm>tIt+r(oQxunT#$s>{wNpO8g zWRfVQP==!2Xkut^9F4-G)@ssnT~HcZnz(_Fj7f66S!^RoC?YfpQ(L%!kJa6eT`y!| zu}&`UkV_}=U4>x^3fT;6`uZ^qNv+)^pG=d_B*+&`3|pg>KpJ35i(0eE^jrny8zd42 zE#IZuXd#qIHr283&}M+|M_AH)X#iqdHUotL-twlmP@XR{U7zDacYKH_j5suUh@+E- z`LAF6&ur@5%H;GEJ-Iy3?SGC~EXHsA*}unAK6Yp^J#i9^;MUvT&hFipv3m7te&PKe z{3lXHjhWytTo?YBA6I6!;ILqwXW z79qPvQ9;xxzK`1mG@n8{QLa}tSU!SYzMb{&r$dI*&*bN8{kcy{!0X03UC@rQnm zci-?n=8Q3fy~tpCJ%vnx|9;l$C$__5s|eKXDGP>tI&eF<1|M{G^A^z;`|4iVF?jVg9i0cYERY(R)r4UQH^Bp#1 z$(Znr*T>l*?@MRyAucrZmY&Kt<3 z`&qMk2klnCiAV0oGCS_)h%Nxpg4)a}PK@nix^bLXwwGW0=|APlOKxNC;4$9y@n0vG z8RGO44`T#S*=RC6xS6<)QPFkYbn82b0-tP8A3Jtl&5n&%amVc+Vdo_`;aG8o*K8yn zPcqoIjw8qS(%-X|cfJ4P+;;1Sxc%mzB$Mko%aiC;nYZ2f6=_Y&4^di^bS$Fo+PT!2 zu2&Mn-E`KnAb_u#s%y&L1vRYi2LNJfbylKG2}w~VIc*JdapNguWO90XfvuZ*Shud1 z%3_0==_-k&gJU}+5+;XFPGJ~OnssS5e2R??eC6UKEkwe= ztNPSJmxu_h1^s;+*|}po($tJkPvSORg1{yomlU!Vrx#i@ngJmpmStgDF@zS-^zoVj z#Zrx8seuSggf__aXRs4-Mm7vGFpvjewpLjwsL zJ)fgfQ-p!SwhU4Uo3%r|4Ci~njA(>)Y)7I+gpN!ML*TU|+Fpc|l0-@%48?q@fvIf_ zVd6L@iG+dgD?$~ZJ?o_bh?El3G%=*X$Nu)0`P+Z@Nw#m<&b$8d9c} z{^7I#$XA}fi!XicGYk$4^M`-)8%&fZd3O2<2IUaN=?Osa=#!6;U)@iCPd_KePjcY+ z0XC0p24L0DFmJu|tvtT>aUR+K2$Rt%s;wr5FnE0QaVq5|+XlB$u@^hhSVbecjb}<} zTsPn&Kl|$l+hlU$Bwki<^`>iBC{OS!Kk{pA9@s`w$MF{ya0X&z2Yc8$xSig7FNSR~ zT{+J4)6cLYe<_T&dH?MnC6mn)h9T)hng^o9XD?!Lvz~m)-NnY&Vp93AbS$)}cu2M@%SXy*Tsl<8ZcwcGk5i=ld z3VKqqD{=dRH;GQOdZh`qt`Ep-0YG8~48{e0Nr7XZF-g;10CcY8u|EIbm8Q}TIn_}3 zN_PX~mv)c;ZUIQrlnf?J@(BmSG+q#ZEOqZIv<`{Fkd_xvYKP3VBV6_R1_T;N+a_tp z!aR>JNM~IXBrKDB+@X++(HnQj#~f0&Ma(pD350A>Ej1ky><(!Y>v}M4l+M8M)mXoOd*I=XRkC2 zK@e(M?SNL;#F|i8vn}?2<6k-az}G2Hp5%!yeTMO8AH@h^*Lyz5bbXXdx8BTkx4(;j z`NALa&{O})U||Ept2a_9&(msENu_i26b4x{vK7PVWK(+zgY4RQBkgvB-oh}+R0hK^ zUv=>D!pXZV*&9XFy?{`6*&iu7>UCN#dxtFT3ra)D)lAkji!QHQ!sEi=C8c#=Z1j2! zZYw{;Eileo_v0`N6N!ksCkg!m$VObK>Fep_UU%2m6>>jy_)q|^v$KnhR4sq>O*HUUOFn(w+zx1}>zEbsg5a&k<`5H?e8UK+k9j3QHFyUn{+>RyT!t>{cPK` zo88;4jVe23Ob(P&4EHT5#!SoTa=(U|{gJs*~Y{_*Hq&TmeL=ms?sOG?b{A-n9z()-J7ZsE~Hd{AX$;K zL5M!b?R+I`=6VfwZ+a`4RDsho`{~PWV6uLITX%nq!J!SrV<|2gxrr?suOyZ3!RRKp zwALsU@x_1n?>u+(L2MDH)v98eHbMxh)deoQ;uhv+#`)6!{ZAY@@HEfd{YAFyypGAy zr^s41uCF=(L<;;sp(26l2`tO(Jg-tgqy+z7W_W9Mz}Q=Zh*SY4U>K5OrNN_5jgm1ktX`EvM3RAl6s=ms%v2Q_nP|@d z1RF2T;sq{qQx)QIn;?u(3Ys+!MMO_ef@U=&=GeHdPt&U+rQ*cc0)yEMJ2wvzvn^&P z+blHe%$MtEZQ^<%UJ#;`qSgp#HC?pUL`txJ%??J^u0ll$p$wX}sGC^yiP+{O`Mp47X{2#7U=0ov3j5vsbOknk>Wy)YOT$&>2Vqjm#mY%|zWA2-B5*SioNfSkcl+cq+VjC8ouaG9x+bw)Q#4-(RX_HGQS*$i`xgIgg zCJYr`=rUJoP-``bI~KMh2}6xU66z2`+r*O+&kbK5fXpq<@sIa>nt!8FK+9B0!Ky7x>9{{v7ul`7+h= z0>ZI);E``o$PTe>{Wbvh9e$So`sLpvpYCT>d^JDwzMmnllKlL0PAkm-03ZNKL_t&s ze}StnxrRp{c$8v&4vu$RiIvhsN>RwBnV#N9yVYX7&Qk~tTCqBoWpKr{@8oOG{{vTS zzL|BojRYsBNt8m?q_*%Qo8CitZh-?2Jw%cu@BQ&#WzQ9F;>gqy9zOO}@Fj2Aeg{3- z0{`c!Ph!ke*s$k%c5l9#=SQDmbovCBY}j>9z$jj6-2RHTxK|&Dyb?I^MwFO|^T2_# z>adpqNW|GvvtrrUY6)~K`GY7eRy12Lxt^c0VoOLGP)JIodH$;*1n5ZP2GERN zn+?p7khTOpae=wi|M7wV=w(4jSIMsBMNBl+vT38%XO34FICc6z2I2<2af`TZvrOGA z--!sNLVQ1<+V+`kc9@S^&?yglBdV7|t??s`DZw`6d6^K=EdgC(;Ld11cQUXQ*JG;Q zrWr&RO0fPdF(u;M@=gt;;yI-3umio>VN!`6F57qqxlBK@`+S+^*9Kv}WgkshVX$X}>dZ0HmPyNv zI!vt;G+QAG!R~i`5N*XMT(Xm)oqM?LBfrEAKl)Ro6aDO~?M2uU8B0)_9pm;}f0{$j zJkBG}ejc^K!EQtxJpKgPxJ`8_veh&)p62|PQ12e#k90E^qd~}xD zLO>=Jr&enrF>sq9amPjx;kf}3isz4>qOTA`L=rrMRs9*FP*Iw7nJzXswNT{ptvmVk zpLrJ-7q-%B1q8Z5wbmqx6p;eq^s-~e)!5ocYiLw_LRS%lZBUvh^r_Zs96vRWh#Cy$ zl2jW$p|6k#bf8!))xZeo$s~zK>l&6ZiqH@6imK2&oxcoTA#UFJI5TSTB9a z9$e+p^j)fcomk9Z-Ef{lPn>wn!gC{qKYT6O%;$MZdM$s8i3@XZi=LEzhh-oX@B zZ;G(4$;2$GUY%rQqr-^zT>oM2S^OH7;gQ=fDR%?%TDiy<@BJi$>-&l70ajHL#uP>* zs5Yu3VhR4~!7nh>w~qhvPxv{`|W)0zW)VjgV53(QOBrmG?>vv-u%`d=1teXg-0L0hx@<&X%2=d#zvn- z>xi3f`zd;QdO30Y2+xi_NwQ?%BzsZKfRm#~>6x*ZQ!qVonCmy)z^4xUF@-R#q0i3npT~&hh4(Ae9fPV!Y0Q_<#EDyiw54%8fv@zd4nmgP zdOOmf;swu`MynNyyl34tz2g5JreV2c?R9W%H@fVNan`x5l-*URZn?y4Gi0jOab^#- ze#3%*AktJ_p9uk>QVgaNI7WvJIa9vT)ebw4k4(k&n5Z==yB)K%3sPABR>s-S>`UGC zSS)egH?`U|s_g{|>D6eh=+CWTRsSX?NB3bjG$%&yLz@9T$pJq5*S|!gC*aU?4`T!Z zEEDocbWt-qK1wEXFs!rJt3<*gkp%ktN`1-!T;g0Kmk@@;KW>XVo zV?1;8u4Q-CzM<8a*#uD&)^56j)BB&q)e4zXw2~1$sa0fB{iITPO4F0vcklne>hI^r zZvQ=ohc>)1cSCE!NYM%c7Mks@-;pHe*jTdDr)75gz9Q9;Y`;)`^~Ow_R|-C))(kiI zlStakF4U2sg|A#x1m&35gH!C$zz9-;&cmPXr4JTiJ9_PoA0I7_F1<&fg^3S(j*fW zbHxU8#X4R?F;lH$wk_88tio@0N~b*O;JI;vpoCT$r33@-{{vc=-HPiq(VzMaVnUIK zhnT)33N(wQGV|?u)(!R&%cLpS${6_6-56$+p{XN^jSA&pp1=#SNrHx2t3hup-|drC zSRqW;W>G6#bO#fC45kazqY7C&i6=q~3kG|#Sf+{RDPl2`k#!kr)sP^HaNUr2QX`ba z#3B)sNTXvysHM;3e3{{VfmGa}-Ow10AeIm`YCfK;D7UKwO_z23124{i2qD=&`aHA6 zX=WFvxN74KJUjLnG1I^dA_7-2H&w(5O^#KI*i8eiI$4E{{hRrrOYY$Axd)Ib19d7` z&PSDDoG7_a{s@=gEdK#?s>) zT0BJK=mH{S*$rJU)pe#V7&ItOp5pS0Za{@Lhg-)m;szJ>?O|hT3tr%oie*?gIKp3i z<&(VkT_44g78hN41Dp3;O*)prb=x$XO;RGk{PUx{?V1mg&G+#1si*nzJARhq%^8k0 z5Ap2b2go)o7L5h&+y4#9iw%Z)he^g#XP0EXpzlGv813*9QU7=6hyES>lb4}A&d-vZ z`SWUouHprnGG{4diIuCCK64h`Yb=F8c4L81L%5=kK)(pn@nZKwN{C4qNPun0^HU7n z=gCbqfcTe7nGJR*o9ip_wzwxaCm*Iah@mF$NK@FRs6br=jkitwX|Kq=ZmNX_#p zwSDHAZDty6W*cp08!cw*Ehg(NN-ZBRQWv~HE{vC5nw3&`UYq&(37$E6FApC0bDli> z5Qj&fBGQ^wgB#g5doRhuE|=_nH?epxLwzF*ZQRA^$%lFGJARLwZvF`#oBAr(Zht4U z6DOJSPmvY|Imf2j@L<_LOCn7hdw3Pko_>V5vXPDjrp=M*eUz(XXanpT$RI>}KDXTd zVOs45&z*b_?Q1fwPgrZCEJ>&$K6J+)aodd_V(sc}Oizz;@V>j)vF)uKn%_%0*2l=2 z?QigW7KExZhm{7)FmNmrTXy8LBMl2K99qsF z^Yio;5@gaAkq*#WkSkbZ`z*B51T}+vzm2b5`U+_-+CD@k6-Q_|erS<$v5lDu3CtFu z*akOvJ_B;|vlSINo8X!$gdC|j^7Lf{Rc^+D6!cftd zPm@ZUC>c;|wGc{@&Dmf?xL!yYMfj1AuRSK~b0n-7je3aLYBx#5lV@jPye5Bn?_bbt z*4fyz38gh-3#Tw$Fb$J>LQ_3aCK+@j$YL{+mKC8bumZv7zV;dZ?x9bUS8<#~3S&tt zUqY+dO&1fkCt|MgS!_vMHgCc{H%>Ia)dC5@5N zM7G9k3$*MwEOx?AiD+mXVdKR;PRyU+ZEt!v_kZT=T)X=1yk-0C>^=N6@4MkgNyHO8 zzVC6Kn0%0TgzqH1W|05(cmIK*jd?D*_|5$CHNQ&Cj`95I=h*Z1cT$|1#mvX~z^xwy z0oPn~6Z=YgG5d1pa*N9gyI7EQR_9jp2mkcj>=}6zKYGIlNX1g${^UDfpTZId(cdZ0 z@Iswd{hgoFO9k%wZ1}MBqW+FIjg>l6`i#;OptXSz)(gVLB}zbJn3{x8%W5a#veJ|2 zD5ER^5#41(#JRM)?tYlk9S{?QFUA3hWuPL3eoeIGm)7M-pXYjt4)BmmlEvbD_ql^m zw9-`D5%aGD_*gzYy^?X$oGZQCp`HAwbDZ}(z5yXiq%^Kl_+doV4TzZr3CkdEc6wO+ zP%Q(JKy}_9b(0~gD{FiKd|VhWH>&j__doGP_Mg0$L1Qho=5cJ#Kt|ITzF^!wL9zN6 z&6YL#VNGHeTes}t=<%mXDT7L7o=ulr&5^@*;hIs$@XHXLa>nI_ zRkL~fZf?Kr<9zkuPauSW5C$fibwj%mpDP<3w(QqbHx{qODh-)f@79Clf-YP=W3+9#Ycq z1KiLdWg2KYbG03I4r56n>%!Fio?}8Zf>ik^jj~UzT_vB&U>Q}KixF0jNy3Vga1^at zNM)gg+X`^o5&b<0wp}zxyAj~TO@dZ}(Npt0H*tcYz8nd!m;OSEfkFzcKuV2az+ACT zV70j7k~I{Pc_zl{%#D_L`|fQtDn4GI2^uD26BY6~3qvT@4W==KPqP{zg(mbRrCOO2 z#TlNPoTC*qQQ;zK+ad}jBLltked1=&1`W?aZn+t^?olrLs6b#M7)WNYObg*drO`tA zF@$hB{am_=tC}b}C0WHv6;nGDVtGs{unmK%>r!kklCx8cqz3WBkfW6`Y{$k^ZHf(- z`C5Z&yUl8=z)(6#JT94-YocmCrj>(8;x;;yBh(&Y-9TVdcLUN{6Tcl&sVT6!WniHq z3?tGh8zG=nX%Ykq!`4`qpeGw=wpPZt?uW1Y{d6KjDsd)Ye&oQT{N2G%P@EoP`?|~6 zz2S1+e%-s+)PD*8{H?EY)zHm6-#&<0iimrHHOT~pYA)Y#EzeIK zB5Uv58?2l`EfHbHP13^&lD!UkjZHK1sn`Ls6hKLLOp|gF6_<#4 zg=rd{dRx`0YgZBEH|1HiZUevf6aR^!{$aKhE+$kFZ{BkYPaSxYBa=tCbn|Y$c<&cE zabiC|@k2k&okzaRv9V*QVnp4TW@2%k)w#8d&W-Zv1AoTQ;6{!-^9<`pw(^yyzswg7 z{{u$3&K2u!=BIA@7@v9elZ-b`^23+Bi#ztbiuDy2>vtsn;2l%$SD8$RZ_MP=+ zi0_;gd9e=^uY_#*?)eaL4jNm^{>!eP#L{tgH@OfJLw0HmLv=()YE-2lHU2b{75y@_rQh(p$*q2dSI0RF%hu;cJ-=M)A^u{DdS{7AO;p zgu$KTUt*#77*8C#i)Tjf#Tc7o{k9vp^ILz(mQ~mAws(A#gq>pM{`;`n2Dy|)vmFpd z9cEZ-kkVl2qCFT%i^Inr#&T^i1cov&%{XDxqh6aM8Q3`OB$ZP~Id<18W?rR`3$}nacFdwLv!P->B%xVzliTe^yHI-fo5`{NN?6*e6oyVY1*Dk%!#PGEvm%| z<#G{IHyKQXtjVQF%Q(HM82MBTMaS$|5+Tc@OqX3k6=F#PPkRK~Cl=TAlRG^b{YM3H8$QDSUifyG80 zKa5CPaUvDr*cMZZi_9!mX|+NoDzntRCe>CGAq6$JjnWauKm4D6{QYDic~+=6*fYrN z>;gI6LsV?@w}<|UA$u*CZQH|@JFe!69aqqpTA*E?L#(neM`9Q$gLW!pzSP8%20@ZJ#9l^WTe}Id(?_r@@rlgD5p+K}i#04G^-nfTn zYf=pZqpVOZ)wP6Bo#t7k38Ro-`}luE8JcUi-+&N;-fS;p(_^d|SVM27z#o0#cer}% zja<9yS{}UTZj4@s&4sNTEI-S_M1@vP;Lc3&%|l<|ftiO$)Fr3gU4!Kk`KB zUS!P!DOlaNg&(^7N4RR_Mkb3heC5DD@~;QK%p>y;vB6l+Wm~W8g1Xlz;Q!9x#COjx zzg)@KdCWb&+lF>=UJ$j^2V$-;wp+oS2s%wthCl-C;9NsOv7&VAeBW>BWm7`N66BLh zULfbYtQybPGy!K zxc<5iuy_1R2xpP&c6^vUJKn;>`~NRJQ5>N(p{YsM4bWh(iD9+`p&Oy3AX&6HJbyo7 zyGFuVO|x9&*pa93PLE@n2AQNu+YRwUja(A0(2B8>$EckiCq7%Dm5PWhm{>~CY?rCm ziu92n)^ado88W?n)Qa=?HHFcRh)Ijd=O5>p$L?hAv-^+pJMN`cXIhP?_%pE zSFtcX$=Wr$IWh4qT84qwaM?Vv8_Tlan4osWJeE?Dux(;yr>jp2LCJ%$s-_vxm2toD zl)fS3B`OF;7RT9Ex}Q|m!m%7`WtT-&WS}QaUtbDCnn-2Pszx~77OR%)(yE5&NE5gb zb2AN`l%Tga&g$VF5=jH!4Y6Yqfn;vFhT9H^ITrP%N89y@8U|Ww0z8@xALVQ6UK8I{ zOfFQ|xpj!*oQoH_M1IJ`*dlRDV;UMADG(v~bjM3fM+Tk`wj+?*pw`@{idNtv5#&=20|f^u1fd7`5~-o(yUa97_|n4(@!R-Iy_O567dBZVm>N-G>0V<^>!V_Iw+ z7$R*YJ3Syv;G^xf866v?TC1=&vyPrjAOC#p?@5kpzFEGP=Z`(lKi~J)Ozb_vo}F)| z7HCdpr^p5-3qt|F`Q|_5eOJAQpZ>9*ClE0vCJxam1}LpbD6=a^7_jZyo0xCRUoFIFX2F*Yi@lXpZm%mux-nmm}(#A=)`kOJpMETBb(T<>rKqhEKsh`aMjkg zGe0{?E>~D#s`$nr5d}DwNzCeK@Yqr^)6$$+>?Dwa3jpMMlKt2-^$2R}1a9EbZUhtt zVhrRmq|z2)5MVljX1m47iFr(6kjz*JAek{~wS0=DCQeEavuvVEO#EfSVZTsYWP z2aq)DA?-#)5JoICt4!C5SdO9{`83)Am#*Kl}iOtv07$0S^+GKLEgdq)bPKs6LT|Y zsgOchvThy^|Q8k5MpLo4uH~Y`Tr@ zo3`=H6W`)zKXoGVgaD3T3gtj46; zqo_=^k%1^2;0Mt%10oHBE!%gobLTD+u>>bh9phj2e+DfD zSFC#z0C%0d2e($_u{-bMitBD-UeD30w^2o(TxjE0LrSFz6TOpMF?cN(_3z@ey?|W_ zNY6{EC&zIM5DaHn*T0Ep<{#kUu?KnE_ILBvOK)fY+;M{AGZgY`2>KJO$*tvo-T5bM z?%zsZzVCIJq%R-Xzk$Ka`8x8&%dks9$vR7j#OxlBUEq zAmj&IU}_0?$gXUeSb7aE;E(T9=HvL`M>z1rr$D!Ht1T*(S*A|jN6XYm7Y-hM5_fVO z5rED~k}ZQZsR4@F7U{tlj77L}0U~9Rl{VQZMl0}{?F|VGpSk)NamS+46Ovqzq#Og! zSNMVAj8I2MD356i z%H=lCADLxtzRB3sBD0HCdJ}0Hev8Fg6R+0k!RQ;XXf!<)Zk1xY%1o`qbft_J1cWN2<@sG>)NYBjkYwyMBLn@c z>+NH0evm>oO(B`Z2@)jDBn_{{V!MW~eF~X0!-FYI8(N-w27s&@Sj8n44nb+eCkm29|@*nZ$E8omNJ^6WpTF6FrbM46W{MMg;jLPvD z=Bl$;sSstlR05A&Xk#rIkO`<2Yb2VQQt338WOp&#Gs1LZfl)b!*#cJ^7`|f6tCQ@D zK|@nNS!Q(Ky|kJYstuP+%0bWtA%GzzyZ2nfB|CQ^gkYjH$+P<&Al5dycj|urb>Elx z(+~Uw8~b;#_o2I4l^?&Y!p4ubv3a<7Ut>GX7PqEybs$a8^tK&v*06k6zK%F^%h0q$UJ8Druq^WqC zK)-lEZgqQMY(wDvfXik|DZ5R?28IyGt_-k{-$hT?h4F>}$!cwZXZC%S z&9||3>y2!>_-3YB<18BUEQUT|vqdUCfL$n%Xlbt5Dk&3~001BWNkldnlOcUIi^$Y0qys`b!YpYjXc8F%@&cowNL3BI5y&?zf zrb~0Qm5F0oXaiKiXVsNgq78U_;p@bDC2k(vHZ(F3o}tKCy-Y2h;z;lenMEHOP&1q8 zNRYG*s!ofac<+DY;V*rbe}3>!P;-i#f8;004i52j@f)0;IK;M*%dxH4>%QGAsU#*H z2gfvt84@Wahs%niW&H!crhLBwkVqJ;Gg?@+!-T#f9yjS9aWE`sFG@^hQ7SbtY`Ap$ zI-HnEC_LsDs1s-#5 znN~BRR`c=O5sqO~uC_MkB$nanYCwliorG8Mn~3WN=LnDJ#TnmoWsi{E+!p z1Isk&&*gb;^f={14{_<5RjlgCkxewn1zg>x)TmLb`?MPBY#H8!li<4bH*?d)w{iXU+sNexF*0f1y6XuJs<4U%#BU)^yJe#9UQ{j42iNqylFzOL{vL&tdZ0N zX+q%BAoosulAJAD}XC5R~@pwAKX#smpRU>Gk^2KI9IQ=I9Z5xV1% z5-mB$zs5IKb^%DjmMa(>y=;z17l4#qg{NMO4eA&hI!1@pa-$!>U_mUotap4zIxg#- z*W@yB*tvce`cS?BOvU7q?8!50-A7Y z_9&+shY>EghQ}>8{~XgN57H1GWNlKmNx!{?h50E&Z5FRLq!GG|*7oAmJ>00oL}`Lc zx7_#!Y%v097$j{QLrPMXiPnO>vzoEG?yw&hrq%aM46rnME7NQ^{Y7$ViEWw0V%UGh)|^L7z0j@tev3g`OH?!Ojj4_izf+#5TXD(rkO3Zh&vXM9}#*XmL;gV z0h5a^F=5i1w24AG~tP&`VZ3@QcW^sdnxM^|O`c()7b=SpnH3`F^uP1?08XZaMUYnA? z2m%blL@C_`=msL*hZH883wca!qh+V5JPZ{7bpv}Al{mcz$qhy#HoG+o6EU8Njh7@?G8u%inLXW<}1tu$+wuATq= zvbC4<#PgeZa@V8mKK2wMPMGeBaCXEj8(P61{@NdMeC#;?+dqApxH`r3GDErSlgk#E ze6EI^NpPzIIUJ|*69JwbGZuT;wqog$64Qrke0%r(_>%#pfec@GY!^C-p&=m(nK@X- z@g<{{N39+r6bvjY5%~!!qcD*mw;@Y76ES+|7zYm?Amh4>44>qIuYG~OOrFjpVQjX> zV~>25%@hBG<2YzbapdR=c$Dd=Slschk8{-(SMlWI5AeYAkMi|@{4)yDCNVK4F|1m5 z14j-Y;OOD~_+iL{kN*vwSPZBx!rm&T*PsTo{QJ8;&v%~v7KVhq{{ zsBr%i|I9x=@dZA9!zWq0bRCZ6{8X>?)1B&9pG@}#f_z_Rul&vUqB#&ET9PaY#2{Mn zCc>aKbmSyCH=#R9Xhw#5kTBLrm=0P|ux&fz}5yw3$ofU=?Q8P^PRUe%5~wUTQX%<ME?<@sf0{TB0PnZ&~#&p1B3LtEAY)e-hcUTGG04Q@6Zz5T%OTKchNOj zp*Hp+rKTW~5-ArkK7NWgicng=&BufJnPg#{{?-U#qHY$B`>U79j zHmlc`D3|M08g;U+Llh?T4P_{H4&gUrA`>D}JU2edM0J*-VhP(QCaYCE8F8XI#k5z& zGMb)Dj>wB?`Y}QohNqhtpsSEY$ON597%lrmfncbRfmjmz;N}Ejlwc`|V@Z5JVWu8q zVIieJSqWp+8r`)VJzW-wNDxv`uf!xKKv1DltrA5k^D)t^()0r`;D^cl?11wJdeKTS zGFhY2^jXr|fe?~xM$;8#7@uh}-kc_gVqybICDOhGbR^*K5-3W=Z@`c&!-0ve2!118ILMrO*a9PFV~vhbUbm04rFxlVH{(R``q)ckMZ=Won!-v^inz~h-0!n4*4FJ!~)ZdaPk)RVh0%+c0ctX zk34uE&u@PmNlcO?C=aw}&~ch$9EJ(g(+z5w5ZR?Me#||0{UY6q2N+nik`LYfQU2!9 zuaFDio)3S9+wS~0zVEYm$#RyhSi``;B5t|z9@ehBipoTdOD?&N4I3_D&EoU1EQ^a* zY+~bzi@5oMTUfvRDt7GMhBMk^wixld@Bb|82G_Ie&`!1;*h(Q&q`TDpwo{sCZ#{wt*YYHSSCUV;*7dXp3jJI`^FN{Q?i z)6w3IZa0q15fpJeXZ)UHQPO;Itpu(XsWDp#vMTjRWK{aSbH0qZXJM}^=*kFei#GN^ zyw0O>dj00)WzvAFQh$pdLuABT7R{@KAg`h1$d+mCboFeKq&4g>-T!AZqR*{!nnooE zTTz*YGi*O^q$k?a#Q${7-7T+@k}bcSI4ce_t>S6!=Q|#N%paSDhWgXS`k(khe@8ES zk3Pxt>`AV@?4!JNd@F}X9%6-k9oO9U%OsA?GrPXV_Tg_)869Qq(yMsymA}fxt8QoG z`L|KjeQe+NZ8~NxDprJtAZtO^7fe|RGAmei{*?sNBV@Hhx9`$5t>~;-0!c?{hz*zB#CUxl8#ca&i#Oaz-SU{K?Zs;bxKWYa&p*YJ&)mL?#k1@M%^Ov;%`Zoe)SuLb`ffWMVNn z>~Y}K7^9Uk!;>=@U(wO!B8*_8#9D~M-Uon&4?y2 zQLCHi{Je_dYoQ9bJrhm$ND>QgvFI>ucyZu;Kh*_@bezO zdc&va2)j7AZ+9xeiVa~s#*H;`2RMTnR4s;T42_ti8j%ewbWO5X9z-@FYzD}hp-W_V z-+S)m#r=CxOEju!V6lxek&vrOx}ua;b*$7}CnQ)-o?_=Bq{V2HI;VLF)M|t?U`#G2#=KR$cv1;*ZN~KN; zg(Cd}i@4;nYdQGRUOxZ8e`m$gwe*yFnXS)q|F--1!Xy8KTQ}a$wHLgLEmJ%2j*W5g z%B$(=?&GQpui>Iqn=l4k+kNXzd9QgCiFnP)RBv6`AYKzK`+6#%xwNbW5x!y$MWlnc z94#nm=&%JjOW>$f@-t^v4~?K6Lo*V@QELK;OeGBq5n5X0t5%mjh*G%|a9TzqK*`k0 zkhM}@Lsq9AhbR&A@+bpz*@B)-%ReD$^M8o59F5l?&1x|zb14=|K-e;*M@GEqHSL_` zBdY{OTadBa-ukG)5bgK?_WtKlSc{7SMUEb9^U`A6iygo z2lBCG?ed!m_a8#{78&U3rNiyzwoiP9^|#&4==dy^Q-{eoHjdKRiN@3uLN7upkq#|O z43-wymZa~3O)S6k0>&ryGTe9(6S@RmonQRGA8_L>_nl zpr)z}^{wHs*vAE>t66j2CUl~B{=g5ZhvOU>*~9qQN&HTa+T;;3L6-b^8<;8|!xft4 zLzlB^%|;e4UCr+2x3FaSnzv1ooSuu47>O5yZ!8YZ2oBDssenIQ-u^{}K0VDzuAKfV zR^D)IVv^bV6g{G{sIOv8{hl8m&OuAC%lggAjf_9&u8 zOtjahq-^5YFt~I*W1}bNUbO+Q*WnW%{|wjNayvKNayxficQ04n{2u!ImhtSt?OeS0 z8vghr|BX8@xtkB%elIU=JwQHN;M<$O#XYxukiPCd7A;=FlOtOw@88dslaKQB_)gY! zUr0y3BkiUr#j@oqS=zUnhko=ed=vBA5BxfZkM1C-PIIh2$?X^2!R;I0&(Odc{^X%Q zWb47Ll(Jnc?_EwVlWTzw@pjY%ud!AYulr-)dQkF{b-CwF>a?5G+uG-?&REvb6f>Gm zSJCN8a!L@ysr*HWlu_}M)PFz%%A}y->>wm9^!*U(fuRwmpk*#`D@}C*yX6td*@B!! zYuc#5Ye@o%Rti9zc>wZiJL46`)VDDTQk-VKQdTD&$`u;%mUt`d);yKGJ6C+p71XKW zEr<=3xgm*X10b|9L*g_u^^;I^TBVXF*#aW`R7iz%f7n`~50<9#rl4Na7&ek|OeUJ$u+5ijl*W;w%kHg{hCd*lmU zC}pu>`EB&}EW^p2*1E0rjg44Hzp1up%wC?>J`o=%7;kIAk=J)*y zl_cWi@UuL%?;AXO;2~CbT!28)C{I!<+8AT-!Wgd^Aq50c>b26HitGg$ME5k4<>zR` zC-DhbvF;-Dpys9R&#`1^9i`5mw1etqDU>?t8(7S`4OfsacC&lWpHShA67bBw(Qe!$ip51`1h;o|GaWb$w4 ziP^gOY3jb=WX@^6-`ig*mmp$HQ%3?zABl5_SmG6Dvc;16fwQI3`38Z9)jm1Vl>Gu3Dk1_G7X^mJtq zQV@%nTBU+cLL6IBZG@aG*O>I{#KyFbS_2?S64vw$P-!#?OoRZ+RgYLiL~+95u_>ZB zCWs?ywTQt?H}?AXkz0E$R<;ATG=x-k+pyp^kXS2|+x(AY@)pg=XV$NQG~~0+d~dAo zd(6x>>CELRbf&4Kjw2ZvuMs6N{Y96~f=%3gA)|elqc+`v`qZaC^||hRH%}dSf?L*p zfDhmF%XF7|*|m2EpM1}+aeV4H-`M*F_HN(Gw}1E}{AS31`QjgQ_s#ck-xFWw%a4AA zZ9BJd>$SJ@=(C&o-b3HxhmZb{_ulkg3^6+oZ0FFCmpHa>KT=8@M`L8dDYwa_4#=*` z(05rUcDGHgJ5SC@_{CrNG@JK7Ml}}^I?$9L!icUldFq`Zv!PF~$&-YTbV(Yc9!XJC zOJY8F_rGSgkWi^ia#9}U2m8Opo`bvj=KgPR_{0&`4qm{!uf3HGL!0=PKGTnJ;`YOWI7aaYKq6Uf1B}ImCXkpz=WK)W<3XR+RAkx~9cZ5F2VO05Z?SoMUdvT$;_9 zfl%gkfDj>Cb6QkdAkP=~=4}QcV$S=Krd-W^`Pt-Gb5Xo+`#QdXZ91LRFvonPiC(T& zI9g%JxraInSg6-?4ByF%rBi>OQkr6}mz9H?=Km(8N(YO@0h@RJ9ou(*ok&_ZGQ+NC zHgj-zH-)Ulvc9Y6DDdLTJgvl;gVQ6kQMn-nh_ zWA(G;OA3O0qJjgcW!vo%%>^wO-v)XO2wMoclE z!L}us)br$dLE7MMHUWdJEWBERF$rND(9@N6>1QT=awWxdeU^-4GdxnkM9^qNOi%cn zC{J)`dXz>GVpB<9)= zBJIp8p5*G(L5fE=Q|wf!3Ehh5EV_90^f{c#DEu&Byi#RoAWuGLBN9cSXi>;pWV0Pi z|I*)4x#(Uh7u)*i{upZ)T|h^!gHo}B-MhE5YQ_14UPzKZ?K;6X;!G>6A`;;9PPti6GM`|;0m|Ks=Z%`NwF?b_=&Hgb$V|N4LDo4dcw zjC&H{7$$a}LaFotD~%+VwHfLzl94u6!(den)BY4EYgM-I+eKzbppe9VL<67ffQyCfd32WO@z1e&a8A)25|Hty0aTlfB$Q{G8NGZVx~go8!Z%+mB49G^VIL%YAriqiR9 zzTpaVgwf{l*`#?U`qJ@zg%vd(C@6z}2g-C2#exap_fTT6I0! zPdv@Y{ylh+&)&)o%EM(2P8_1A)W6B8WA{7Cdt3KFZ|=D|%P4qJIUK zueg#8-J9?NkJW>#--+spGamlpC;F(@Phyxiwyv*<*-2l(Zj1v$7xNEpG;-Mfu!IO3nxw zShz;%_M6jEvDW$WjwC@uJJ3BXmy<22nG&rBdlaYJ&~^akz?EpHzW#-Fq9c8@*9BD0*};5MF(o+6`rIl1@S`27hNE&e&4KlNRv zNA_arJlEd#VP4$xH2?I}AMwKRrUjuV&)JkC6k4ks*&Mzd<3f z5JQUW#w@DKq8f)xJzZxdSMY&*f1C5VuVZ@q6o+>0CX;k>;l?X*GdbcoV&vpu!oVk+ zOXK6?B;x6(zfUq%rMrJQD^^{=s?{4gbl`cmJ@b98x#9yXU9=9{cGH)Y{_N=JW#!7N zxaz78uyW;kY&(N(yA+FEZ!`Fqi&U31BSj;&81o#Ov7DFLa)we@w`NGG*12b1fBN~) zma{B<^$D&S{W1dsMJn|=y~PrXSLAVBO{LmI*@j5?c#VjXDpH+_8K0b`SacAvrqT3C zM2wTsOi%dOmL!QFlUI~$HNqy?T2pRTC>C6fpPUBZ(5VUXMaiQ6BE~?uR>O5HcI+O( z6&5BjjCs>3DA1Cuvhm{>EhI~`9Smf06dfBcj^_QGm1@FhrAf^Tuq<$tq`P2~&nUbg zW}@m-%BHNZiWTL0Of!iYZ8XS8I~@U#NHUf~J@Gj-K0&2YCZ`ofB*d}d_*9LPwF)ti z)i%A^5*H3GVbhu=*vh7-P{6fyAM1#-001BWNkl$eC}61$E8D8Q1m+4@$?f|+Cs?IgR=pbY`mHk{p)z?@Bs=r2NYxz zO+$P9)(!ubm3`;)+^L<|(xw<|l97b<%dTfh_cF$gAEQ1QAV*??M#Q9QFx6}_duo=9 zQuK}&P$-K!WsV#_#PG>c29~TrNX@a@Fc&Soj7l_1;u{FZ&d+N|-25uzFxMuI;j@Yv>I2gLmGYO}usM^XkJA-vp%dT06CK49QuB z7|zMIM9a7?r9!Kgfn6(XH3wo8t|i;#bZzBw3xp(zpcxq|L0Vj^*4z-?W^|Wg&KDvm zI#6`d_+3l4WJ|AFX__|tAzogMi?&Lv*0{_hgCyj;endF&SGPTl7uix2$R#>aGL!v^Z#f5 zg}0v{dg<>N8Go4Bk>@Fo&#-3ob-XnCEY<15#A7d!2_?bA7-G0eF;KXRR}xl_Ff$af zvEvr@jcmb-3|*yF?ArMx&%X3!@_{B_Nyr~hh?GJ1_w&@qKd^Subxe;v$5T>Q zY7!eVD>F2wLz>eOjXfcaj+nx1#L3xlFmT@bOWAqgA^y#;{mDG@k;E}iZut&7UwE9p z?!^>}om4B+e0SU5koRnstlmg(?_#vJShHpmCtlje_9uV9nhP((&17G;AM*JQl+tfs z{QN7Nl#$VRu|*@Ym<}~j8`y2X>;#b0kkx7Qw-Bd8I?T_&#~WUxF}&}{|4Y$rFg{*G z8JoU=EHNQQ#2h#}Lf}V;SR#xd2qG*u!70W_KSO6{2B8ea9*x$LW-}z4vnZ5wDn0ZA zh9_sJ1q~MU7l|VnnW&-^)T$8~SL14j!^ftXsWzCLY%p61sCpjzCx!`4NME7E@_a8v zna0l+EtkA)Q8NL^gs!ZMM3T!$EXUA@B3z|N;+Dq^MU=#74a%g6aZv~&kq}F4sfa|( zxL2nVc~m2hvV@auxp;9-!-7b~`Q550L zN|Hd3BneVQIIbX03~?w3nueMeU{pePAx{t(rs_5FS&LlG!iyVJ)Fk=Ew_;^FUVg=x zgyP=Ek>z1VW@->hPEM7Xsn%IC(1B&A&#;W;&{=XQ*BT5@R5&&{k?w2dVrML-H{A2G zd%0S2>(J-2iACTi9F{e%T6rB0PkoyVy1HJhG_hkR=Mbz)Sn~^4$JyOeW*_NkS%aDT@k& zr6t^b>pkp0vX3WDJkF6*FS2vr(>%EIyX@Ne42O^Gr71lu*JbVCM(*A45w2W)B~L%} z6c0XgKi}E$ZFZg7MKgkCBciM(+0eI%d$0Ns=Px=RDdg*Yg1HW}t4z{+vO_G(IacZ9l%H}OX<{Yz0 z+ep5*ghYz zC}w)ux%*+NZj(kHqDF!vV7ND=S|7n}x=hy&(X^ZBBQarCpr<+rt92R&L%iV#Z#p0> zLNQi24MS#d39Hs#L?&0@<{LkXH3vSDn61zJfH;iUwf`Y@9C?!S7GFY7&mfntxs~ei zY2N$uzs%;x@8esW|C)l;!PVElpX2-XP-)JxWcm3>sos&ruR#(dDFBI(#0XqzaHPRi zhP*c9b=o}1XjoN%rA0|!7K$1&GM(Kt=aDl%^M|~F$FgD33tvKr2**(*p`kp}pizm* zxHdtr~hofu$9VYDCyH)awC_z$5e%wA4h>C+pfc z%BDQ+W1{pKI#|J!{EWM z(+GT`0HjI5RbN-0?v5;RXi!>WWI{6t5C~#VA*EpTl5Q-i@pO*L#=Bnjz}7N^YDa=h zB=7INiyJSwk*5#+m?SnlvgL=od&f1b(j63p!(_dI9~)+8W(lSnI6{)oC>j+X84E;S zv0{A}V%Fdt_c&i~WF$AmVBa7!Zi9iuO$~`kK{MjX=YGf&FFZ(ML#W^>^AMl^%-8tt zec#}jE%#&TknyUfyw@Y+rO};}FC52OX49L`;V#KBS*|f1HYkP~yD9OLnDaMWz~+}8 z=2W%8+Ng*(KF#2ig(*f9y7OGK@#d6%Ym_;#^8l;5m-B(^KSHzCb@a1pXccjkAS4X*4f3D<*Z<14-P`!%ul`4-nq%C$ z=1%Uu@q=ik+Zy4mzUAv0IPeY%`+sW(ft=;z=T!Nx+Vg*H$mUhnKTQ^r^VOSRZYouq zMC1%sXg-SftkM~^pqf?6VC$Hi1zDX?unk!Yv`UN7xlaArSc+G@r5i)TgGOL*wIG)< zNc~D+>kI%P)A=CTbPgI>C8)D7jmn$@m&(?Jaz{c|r5(efm3m(iV8$1e14AQDnT>HD zdg}=#1lp1<;A2SQ)L3n|=7C59ahoB+oJCG?t}T>v;GtFF&dasTLZ)P{C~nO{WZsiP zD?Zu$lcOKO%RZS0f~FWXJ2T&p!B&XTv5^6=*0V_^BkJoCVxa`lHl%UxIe#{By$^(l6qc$6LfeXQ`u>GEvyvCYKv zF`jtoPtemgGftBWH(bZ~c#VTI&yiR#S&UJm5ZDHahM7Yn^!4QkCj`Yw*m(N~_~BEZ z$8^NxW)-$2X~=|*n$4oMm+`I-ev*TGp5rh6+b6mALw`uqZlDB6V{_T%x3c5;hp{ju zr>gwv7eB>y=f9tuuKysGcFyoej`FR?{|CQ!{$D{(vt!!>RA#5R`L+*H>g;(3 z0ubfJA@PmEl7h8ehW8aQJ zS&Z*%S{5JP&fx>&IJTf8m!qp!)7?{`I+-vz;sFN7)>tLQ_*jDrF6hLBlHRTkv=)qy zRq=v=?yelQN;;K$b}FEIk%jFFrY1aQJddut=D_e2Pr8C&645}|B@&`=Kpvf7{kr_;sN z8dqB_X2lT2KC@N-bdw92dP_Y4(kA0-!YE0DO>CeNp`?wiB~^TKj!ktYAqhfkuR+&} z8_vyG)n^F3kZ}3U#4r2+TUqoKib#_X_z7AI{H9@cHbmKiVm^z`f$d15z+mZwu(0f` zNL}@H6h2p<@$e>ne*UIUuy(~-KK&QJOJ`K#*zuzzvmwW*G23YJl2t<{hEjKiAW3h0 zSFF5_E0hkZmrZV+3mpP`Lb7M{ z07)q5b{vw7V!U|@HxyKR3>yZo!?OUH_ zbbO5O?fDvhA;QE7g@!^SIe7RmZsM|b)djeY!xz5x*ZkaRD8ba@RQCf>*wyqaue zL2{Nj3m_2Zpjz7hUxLsnBO)xMv~ewq4%edSDl)df(&=zQAxJa2C9g9KAk{dTL=Z%R zdL+}E zuFG?EY!{MZ;*DKbul0I63y_%OI^-GYSz>;WXUoVg1X{@XIXz-QMDyvHE~n>=h=u2i zOhL|RR^`oaUrQqif)GE^WM^wIGe-Wr>$vIW-(b2iPCQzrXW8oc?SA&acS)K7QfC=w znBqQzI5kNoGe}Wi$nKL{DNVZ^uOG$E=BSh>@HKdi7%NufMl=Blef=)D5_tle1x@eZ zc?6XjYPdo^bf{!}ih&{@TGXpE6ql~S#4#_<^HR}*svHS3om|36B;vz1;>OJg!=3#~pKF^^&&tthc z28Ncu;~ri?qA^HvDx_$6#>k0*n>2d>2D#KD1Xg6h4$0ln$eef{Vazb8Yi4#NE5FDSJp;3)FHBlkw zYWn*!ym(}SqtjEIzpRgszvoi=JMzqyeRl30$8QF7*fxZV(IE%cy@P@u4F`yEkLolHOjI1VgnRU|R~UTaEQlQLl$6OOnY+ z+>D@JPf&K2$`!vz(7pI&=YkeXI=FttwM-m8i9gZ6Yc_E#i-(6F;a}hVtNiVQe@S5y zW;-L2Fhm3{lQUJMZR0A%f$^;z^)!S&4JV@^X~$Q32Dc({U5k95MO6oEKe>g#Hkgt_mvWI^if$>;3CtRwaF*dT|LRPI%(DJa2DUnY1B>(uU!WT6;GXoS?b zPD|E=L5QUFo&<=`0rA?$jwc`tQVa6RVr@nEhKC1bJYz%#5}b17ohU~HJK9_PLv{Rws^!@3PuyrbkldF_)`={;A81R+e@ zX(|yyAw-0hiZ}*8j8JGCY2hl!76gm)f~5t6s}h!XNScu$HiBJ~h9G|D&j2I5qzaGbR8S6Wh; z4Dp&Fv-Jl3xeSd)z;vUE5)x_P`1B-=#An*Ck~3M>^$n7-EULATqlc>;otVb4B*Wun z{^9%E=*YR0GA>8TGvt&_E%eYz(4BS2W;EHXK!}987g4T7cz%pR(pAz}S|AchUJFDn z#I;503&9{nI)u-)4HK217455t;)G@xV~|J@qotwXsQD&}tHpf7CQb}-%cB@1F;SSH zV~uPZD_}%AtXN1v94CyGJqiVj&U^+f()k>D*CvTUYKagA+ZL#J3)Hq?svVg8{{-$@ zgf6vc3Pt0Czm4_RBS=RO6l`Q=FKTcDQ~44z3i|w)h(sA}8A>GuM&dOz-Zh_O=E}P; z=dd2A-~X-O``on`U(G}?%6E4B6EjC^>^ZoNjBD|+cYT7-{QU2bi}UQ+vz0&jH-FC4 zW6u%`k8n1iPQ+}rK~V9idkHfphFCDGd{ijNjVHuO%(FXpU`L9uLt=nzs0b6o#SI~+QDGRP>Qdc+3{vMVffUSOPrct8==4L4kT8}+_%mJO9iH1r-( zoEoda3JYsMvvhI|AGzhDjGo*}hi&to%kSlv-u3IaQIWA1_fo9dm}-KbOGt8pMxUWs zit$T^Wh>T_*phvX1BAUWW|}kzn67%L08FRk?oA(N?XtB@Ri;_mzmjbe+aQ5Jg+!L& zt}8#pwHx2Xx}_V~ar{}f?0$?FPwr!Orb4Y&XVtRRuO^CljU2&GoBnun3;x&k0q2f5 zIy(s?-o$NQD4}_EM&zvR-?q+cTMn;KK#MJz_mJq;OQv!zbn9n3RU!cgAzYNQu`C|aBPWXtNEK> zd#hh6k$#pd>2d|#jzAlj3}7mNNgrl{RGuYBC22tdff4glzuQM%h_fA;HV?(i&Ihqj z)z3JKMwecm4Fs9fD;2loR&h&el^8H*R`BMG%3i!2gd5(>0fpkt zzvBqzVOKl&Gi?Er=8Vf_KBrEQG8k=hc3uw5+Ar7C6q?R^kto$ZfxV4A5ocbTuWf6M zF??z;B|O2}VecKlWElj!&}v zhkwS*i%*iDv=PI@^w(_$%MOk4gqj!64?s&2ld?ZmiEb#|S%p2LaAqwgj~>RsMva1B z2Hns+JNyWTc5R`zAqgUZL{hL6hE$K97{RXTZ5U(W9XQFf@Q^i$5dslQk{r~hPEplO zs!@QQ2$C?uY6x66Pjz~NL(l$@x|^~vqqSp9?>vTYd_MZ?|A|~jKPQgu!O}U-JO7e* zfcd#+GMoGQt2Eg zDL`9>yrUSMZE|3|%7O739a$S;1aSp5?~Gb297mHFNr;2vxWr+|;qhtwFe0C^$hsPmRsv|C=UElj=Lr`( zt-G!V-qV=Mw@HE!bRR=F<0&YU*Yl%SF>mTF249z{}1PFxP*J} z{4n`Kfp2~D>nNqT@REyp_=QKwD3|X)|2;%Az=Vc+LD4hpk`Pnt2=Povp>9D227(@r z)lXrCir7jRNL(Zu-CyFf|MoxNMNR(si7&Bv&vyR(J^zmT9{MKF9es|BwCFPq1ARrx zmWN*HpdC#lA*{vZBT3&$%}nBR#P#T2pU3u~wl!wS@?{t^OgR&B>GE6fBah@rgZ(?7 zqoRCtzfIhyu<8)y1-^=j4|{y<-Jj&=ZoM1Fc6ssmi)`MynScKFSFn^O5r#&G;Wys> ztK4(T-3;~)0N@8cCZ^T*Z|jL$XDL;q z7KjiF8H<*|Jq0AzS@uf;ge|5eI-}1m&v;+E#n}Q}K(;#a3t#j7X|X`KbVh&woD~~M zlF(=-oTwyB`G$I&cKNd!@){fkwJ=TM@?r=RLp+y?)wT;x!>D#ghgh&SlGFFU`Gl^s z0GVW7b_G$3bx7U>0HRt7b7(!{7mtxW8E&2c0d+#v2uKMoxv)0<})H%~7jjAPEl8f9i#tj=6 zVngUHAvc92kef^HO}l|7;f+&B^5#i-Z%BZUgd~sAS79 z?jQS1)yR?y2HtS=oM+~Y&e><}y;uAGzQ5o1Yb+R(fwx&UL(D0jiMbl9+3RXLoBG*1 zVLE@C{j9Z%%W^Es8?V%wQ`~*{zZf}k2bD${f7R&>^_<4GwU=Uyq0yeE=vUbB*iF=j zche9Js_71d7WA#Znv2hP7eYvOJ$nz&e&g>cYQ=Ob<&cV)ZneQ^D&-vMpdfTLl`%!@ zNsY{99tg^+PKnz5`NcU60-TnjC}SFN78EE43WFi=9Fo*B;l@;QgScS`uHaCvfo@xz zSdjRZbQP3^qTY9mpvAg>6k?$lT*P7wnhyIMQeY+SKC}6EcDo8_1*f!u;x+^|G;A0Y~ z*CS>o6Z-lCnvIk=NvTu<>a`d@FK~RrzTs)U^YktZmV)o0WVTKXl*?2bF=N#lQLHJt zF6XXZfhQIDoWn%DP1Lp|sUb>Jtkm?EeY#3n*+5o*r!zGxW0+~gD6J^v92^ItSmQZ@ zz|T^ic8@lA>`--X4N+1um@hL}a7nd68bNFH(4?N0W{LfGD&bPjY-rhc{Gcz0+9>()L9)IK^ zcHDg@!#j84)>2GSkrWh_g97UardOqeWq}_%_{t?#hI7w)HG3!bkgE&4P|e9s*2e23 zj^x#6yqZ2az;lm3Ofs3WwtqFlPw%8Sr7#VP3p=&~+l_07p zf|7&G3seMc6OoKeQw&^up_tgWm+6^<4401(6*R^bB*J1wVxoG4vlrA(1CuF_-g7Vi z`MH1P^Pm4Lw|?WBJpIU%2no%8L#;>i?rm@8%TIib@7((xN~*-kC!LJzxU}1CD&-1Y zr7qU5T2D_`PnP56I5>_&Z>5*@tJZVfh1YS_`B!n(xmQxi6EIPJ0Hp_FYr;rG#a2-j>6*wK(Gb@kls;rpZbQbrF za?Tv+7oFY`X;-lz{c7pmSju`xaWp$3mclH-%K};F3c|&_nvD|{rA=z<`?&Uu58^sL!v}Wp+?PK||LSwtc=gYcu2{{EiTjA8 z#R(i*sU{gqQInu%B*}_|lP|b}Bk3-RS`j!-2iQW2Mu#bDPd<+o8&9QvcqfU;9Opep zVzD?XV?YA($TTIC2`w3O;nhEjuEuniSJGH}gtL0C;lOh{QLaTwiEM$kDP5b^a_@cr zjvfzb9-g7O?=Z4u89L`ohE6&KYb=iA;(9(OpK?Cmyz!Idy$XY?)-LO^{KE%A=KGuK z+-unZBYD@E10b_CbE?yKJe4sbgN3X%WTa&?KcgQrA#)E`#|#~QjFWEqHP#;bCP{k+ zKad2jhm;mydH7zy+KnaRCdkw$SCDwV!0}M16Y_>M#>*ge`{$4HH|69{sp&#K}IRul*ERgpAp zQ7mSX&O(W-_#8nPTPB(*6+chO_o%gEa-KsFWQFURl$_&I$pz$nhgO(mikVV!xRG$E z>Qm{eQ0j7t+jX2Qff-+VXbmD&C>L674MyPQEMb>IUsTED&KIPk&c_{7Z1N1c_5jwF z5pFNy`GCl*l8$mZMXkpHqTQDbT(4UYiv(vRr8zUr_c=%{G7xkduah?} zF$VTN^DJNc@)x-0?mLK`lxr`43%A^OBUM|aQA}{U6ceIFx0Az96{;pl$5Nt1GhS^n zKGUQ*64E6-`f4u4X+b=d681qj5u@`ijY^8jDN@IBd)aBX%9yNly8kdCGab|E=%m&F8#<_r2xkxp>QKxbXA~ zxcJPfiD+}fryaHgMwKgA>`us&H)s$Y;<}4$3hUZ0Jtp39X&d+X;2J*j0=u3BD4!K zqh7|a>RfxwTm*jJcye*UyEuCLZ5O8&*%vY57J``L=|>#p?J1TYg)iBAM2IDJA>ycO zw(v&Er4qdz0OClABP5PeY9&g6>xd2j$&_^3QA{;yGFGW^>Fa-)vQuXJ*T2H%H@t?X-Gv&h zkQ|vJ%*Tjn5Q#y%n*2DhYw|fsPuU^Wmf@+8MpGkzYCGo0 zberjVLQXk^X^O$JqHha>{S~@b4AM>vMml&ZK{+-Hm?%jYS=y0cDsIzL^jOvJQ_1-m zQ(AH9F9#G{k7_Goe5Oql84gdkI8<+OpxR_#vrd$>kWQ8|=wc8$&C;JeNf>E-PtuBG zV(VixM5TmkA!L7jib7Wb={R#BWH$IU4@Byi_I>E)UZlGY;Z|NACT#Vlq3ekR)>zU; zgVD53C=Cxj`4BgM@2fog*rR;@wl8wqLto>uT@NrNCK%{n!S%oSKe=Q3-Q3;WL8EMF z`6(u_+etqs}BD zDWV{01%@aOQ+|XLmVD|$PLc*1=i~qe6!~dE)GL{Jwux?oo0m-aF>OEQ=db)APwc#( zsU*aA9ZIsBE6@1}-f_u$`0!^w#NE5@V13UZu;h&>X}Vf$~KI%wZ%d#(nnelsb2V8tb#NP zG%|oAGG}ASoEf1jB~Ir(v+7cd7?79P-R2Dr#ax<~c>(Z2*m<7AiWd&|j|n`Ewz)a} z_&DzPd=XH75!POuLN^Bh#Nsp~xgfpDRg%DQ$hi)In*k4JPVGu8VU)zt%Ew|cfL+M0 z&B{!R1#O*WLWB?`X~g6E?_{*Pmu7X8$;o^0CMBDqiEY&BKIKx@_H9L*l)cSo z89q>@yRnAH@4c08KlC~Ll0z`z&{%tjJMQ@gX*B_52?L8)2caa*qQ<0#wg-NXi_Qzu zI3|rX=e_Hfc%*p`NnW6pM1+RHRhy}f4I|n$QX_FyR$FBOM>!cwAsqtYP-^*1Jo7AL z2M(*{T$R7bFgazrFLQwQw zdIAqe$YYL!S(eU`g5JDfWl=EIwoFAoE=&ig_HW|QDQ_k&o=k1^B~;hEj&RLIY|xJp zhAD-jPdkd(ySGZ)w8-aOMvt^{TtN~7iK04Ts5c|x$S~TfvZ~Y%!q5&=CaV$8R1cHd z6d?pT&n4%14CE@Dy>=aqYKtgp5yv4D(=F=Fm>@5(BBk1ln5>3)P8I>1sE0UGPzqdJ z;ZP~Mlnav7Xr}5B!;@{oP~%I9Bf*oBqU$hN_E}N!S<_WuAeX146oCs#tg=LDH&cj8 z!ZtbuQVCX4ZySs>^p$+_o&;s7HxrW7WZZehS*B^ zK8_q3<=^i5EV=O*?Pz39(G)RhmtZn&;spxFcd)}L?jeI03H)X@I+YL|WF^R->Y+=L z_TiZ6R+~n%g`e{t%i@-v=PFaKo^D`=bmEt^Q&2 z>3ZSl-~}X#yy8uHzU`Pe-u6tqKsiwH0{?G`_Nq7$z$1?l4_^*|Jl}m099ynf%x(PU zBkY+T|E$u7pi?l{0V8uMIE&J8mIEKN#*Q8H!CCoMDR4U}I_id-G z57L$qLz~}>>guAgcPEu#BZ)8+%L9}Py=>{bh}!Tpx83s}j33#DXBDDt306A9dt)}O zyMVr)HH=md5?BwfA@JIYDA0H)(!erwP@&2SjYcI}1K1_`v11p0lhe%G&JCR`5Zc4J~NQOc$> zF6PjoolL}!QCYKr*T3o)@VtP*mFqa|j7vEE+^f0u>!0EA+rJ7PRI4?%o_+zRo_Zno zJai-7<$fyN{XYWhkjU!G1h`7l6?pXKyg3H-`5uz2IKAj*b!-P4S&#Z}&x8np6_Q$c z1=aFOYUM!^ZP+k!CtW=`gw@oW5l6;rY*^hxBMfDV7`(oiH)oX7AKE^|ZyA z8&{%SI50Yc)DBZ&gD^>0U+QOdv6t6uTT3OMlZN`Q?_NKM?>o5p0v~?& zNBHBP|6{H>`zkJ4cM)M^nTkiK6g~WsqO5#$DP+gw6DVVF#tlYVbfiHFbWxHt6B{z^#L#*ITbuKI2b==kZE{{L?ICnks z9md8-_#f~31OD)5u4mJlO{`t9mVbZzOVqrGt(8-l45xUev5(VMZ{d;)E(Txl$vgg@ z2cLM5*S_Yp6#9z%^K<{sf870_JbwRUtj!NGIWoq@=U+-xOX#s(Jh10MzWTkd@aacB z%ac2v0n|BrkGnxgq^RSu*c?7#Icdee4CC>@4W;Nvh+w|5gU?$47s2nU0_T{R(HVx z=6b7LI0Tj?d(9nJ%zL#gNUIbJ(!^$g@PoT*Sy!@?aAfAgwc<6GP^;Ey6C>(A%28;eIqiyTx$-@~#Dn+Vz^((& zFnMSX)v%2#C2?vvf7^BZcug$;CfOx!m(Z>y&=4E7XBQ-e($JX~fPA+2^qqnQAfvRmNf_1!cZDY-zg zYOqMIAhQ}JQDm@GX3dHsVM9}Gv`JHgFi;MBq_jAmrK{{vF1fU$6s;2qoqSNuatdnP0y<*`DZ#B&FpVZ1R( zkhqvYV*3<@=MsFQaAZ~tr?sHbPB0Z0zt1IhQX2b0gd-pnIIcokNmz|Z`wd=EP>CF( zSd(B$E8s_#p4ew5h|nIm6_@_4UCihh=dh-GWuCYIaXlq12>!pH{5aF2)BM+iH}LSY z-$Nleb>q4G`7i$&j&k_+eK+&rulz12^_@hJ=D7BZtJ!mS57%694PSroM!vfHM%IoL zX$A?cqQ%R(*mg|8>EeBty^l|R;jf{c5Oo<;!NX5ogiu6|=AzA)@_)Yh18m)}6|5!I zDM!YSaQnmG<$v7%r{E~Q@ZNvqf-^37$%A@$^f327dJig6oOAB^tX{qPd84x5pT{dS z)!JA1`;Plfi+#3_4MN27M-(ry74|rP5O&EmTM8}~zFrP|m}TC(WS4i$4e3%~VzJhc zCMoU2&`1pR*bwThMj|l~X-hn-f!--hpZz91=aV7k4C}K+zf+7n>qR0go|@k@D3QsU z&U%i(tOTN^nOLSGLtAI6O4yf2miMIrUVGerCysF&7WGDJUwjbasBAoO>^6xP%OHtm zLovt}ckf-Cv#SO0`kE6-WyTtj2!A&RERV0s2;o_8t5 zQiYk?7*8L%m#4pT4guM2Vreej8&4_oJgW)><~d<_cDyv6WBX z^hdbXrJyCgRoH66Xm^V~uY~CGdB>$6;?y%QU}kEZo4@uMwm)+d=bUjZD)4yd$Q``* zb-zt*W|GaD&mm0`KK;qxWy~H%Ixg4$`sc~zi$5yidW6itZqfJH&{Jl8xsU}g3 zSqn3XWpBgs+@#^w1BQ0`W6&|b6dATYaSMGr{)?WKF0OB=)#^wI)u|*)S9N0Q?FeC^ zzq`Pm169f;k5)TjXrP3WfZEqJzWbp!U zlpswkabl=88$_{234!ls!7Zz^r!kpFmKByb)imOSMiLV^ijv=vqxU3Ibd>nCCDj=N z(rjzA7C1^^ge4IH?Kq^MK&Tw0?rz$xCVNK4vBolGVvMz{8(fV}1^JxMhJn@iIf+hO zas>zF8NybI<2Y374dN)pHHxvRDtXt%^A)XTirxUu7MF<~lN8#D9+jtAfqi?&>Ah|h zyB^w)FC6+#>Y<&)gpG(|Uy+`bT}zbv#ZhBop%BRIx?-Jkkd?Qh3MZfNUd%bz-J~-4 zI67w;TEC9b@lkf~-ObGpf17+oa*|!c2d?>5hDVMN2#yJ2{npI3~5Qy z5QfXnzlv|&e}etoR04WJV{;0xE-@lg;?Txm5Twl%n+i-z;{*<|qiGE! zSU09S_2}^(bQ`AKgd-}&7J%5|MBumrH&Fz!Luo}Gxk_Q5iE)Pnw$H&f3{D`33h;}k z{wk-e*~}*%_V2;bw6-~OkZv-xa3`qzJi3Ud762mg}u&ODF9BZv6(xBi8@ z_uq+=NH(uJnJw!#V=;_RjdR=mw{zR$xAXMylMLp1xOVe3oO#NbFU!Cl=o{qquYCiz z-*R)Ou*fc=jTgQa-!}*$UKwDpNJ_`PLQB($f0JDpk)BKQ5lgJ;p68;A7jReX3AEN8 z%h*x8h_hSBa4bwf5YGc}7PBit2&4knYJ4LI6~rbp1yLe1IGpv#m zR0{I0B2XQ_2rPlLbo(kx|73ncYOS41y~@n#z?CN3tj3mBI)6EYc;!HdII813Pq%np z-$1(vcfR-$E{*|gkF^oA%R%rLGFlcx;0{_aosna;MGJv4vy6tB3(~n-;>_Lqg|$QT zEplWQg`AT{Uf@Equx7`KSrC#T5g|L~q;vVwc5Xa(75jPjMSqSlhH7)1p7IJjC&$X} z^?d9Tzrv0OZl*bq@YC0P1ZymZcJE~D@P6*S?;q*wI)l(@;x{C|0HNi|ALi*>ZlUGX>6H>;#9ZGM0$P!#8bbBC zrvXdirJQ`;rHqdqV&snf8VlP z_TK-SzFSsv*L`0^Bo>^I+rIuUSS z6wxqk#%nE7ZBYV>ZJ(Ylk48gdQb-d?UMUAC znV4y?W_5+Ao$~bVaaQ*BV}*xrTqKe-GBleJNs`c4DiNpvS{i>g1-I}%hH4sau>D z^d>nRmC0~w1MS#gY-TU73X;iuL@kb}xtcrw?>-wz>^z~D# z*7(Gy{+8EWa}AF@^BCnqnaeM{oZ%yf`L)0NHKx;P9O?4O|L2oDx%Wvv_1#Y)S}7Nv zdK$y}u$k_1_ac+57c)b}NldfZnCme2+;u0CoEJh*J(VG>2NcqX9pk%JZ^<5V3HBJ%9CWjQ{{307*naR8cOJOr{gboMk-b*b+M@Y+#I;1F(yHU1mXmoNr|rL!^`l>;Hl2WkxS^5C61a-q!5ky| z+vK`K>XVk4xQ2toa~;YRMYEMKHJXB}DV7vEvG}fo2_-^Vs_hnuPFdAo#F2t(HD+Wq z#Puy*Wks#sMi@!6VQ>S3?+F_1lrBFYmzP*0kd9(zCPX?hLKvdRptYsoIVcBOVaiM+ zp&llr+TsXFSKcM>OQeK$*a0DAO0ZL5#Nle2ao*~gGQb^KRB4QWZggxiC5e0>gH1%hz zG@h+e+}efT?Ni-3LoIBu?&5VQPm#u&>fRYfCZ;L$=g9Z_tmx}UxoS=_TP${VU7$oR zj`}&fJ{r3M(e*Q^^4ZTn#4i27Synxz`M_^{m`{A=&)9a_MGSVYB(Hq-R`;=E4Ma^ zRHh|1go5iL2Lwlglu9BPuO&!NaCW&HnwEypbX7bKI4R z8~(5VVCCRS02+-3fBjc~&KutNCLVq4QO4?{1YV9!>rN)p5&!U=f8uas80$!k)O5E3 z9O-b;xmVDLTfG1E@5@v{It%TFq4f-p4YP6WrUfCG6C3F5u+7BO1P?xZKaW52IOlCS zhibLPWv{z}-tHc9LGA~(`F`b7vR=9Gf1z@yC#2H*GPZwtt*WIagD(bvbQH71Qit~C zzTG|#=9iv6FDr;&MfS3$0sE$vF>}(=4Wwb0$ zTgc4V(k?J3GI zFXEAVzCg30=_`8>YbLyeH1FWJ7Of54c@LRL3VSWyG)y}&BfT0qDX5Hlq#IKFvSPfN zAO++HBzC8z>8IpFmyMe*WN6*VTzJuSeCeaVO=I)`N_BitgdlJoni15)n5bLhM*`gq zRX0I65~BpM)%16{xSry=vp&R{t*7$IKX@;?Bx&U=ZbP7A5UvF;VfD~Oy!MKBGdX>P z|N7P+^3H32pRK3Aitj!1C3a5V&fCxVC=czwi8yL-@s@W`DGdC`fDkDp<-lW0e}&bh zd=_4Lfkj!?LN&E~d#~n+3Cl>!66*gx0Oa(;_p|1yzd>t>Qi4L!<-ox@?V4p^Fi)eA zqK(1Nr98c7oHc6-lyf=u?4LrqFgDd5WJhiF@3Osl@{$AHf>u=<4_$VWAFrCDaVQx z15D0T3348#d;u#&78n!rb#b$dh@92AXWpO_3r1^%Dw}8`Hf%yc@k+*TH=KYsRXGo7zg4g#ik%M^i&GCj>IBqg$Y9|^K_RyM5kb` zp<|va`&_r>N3I^RlhKj4WVfdR! zSI~dNrMd<}*YG!2e3WgQ&!oS%kMDfkEh&lE6?lU3k)CqBTaWG`8$uQ-iQsREvTj6_&OBS`OG@Hm=&lWv5)iyI%Va`g{A2 zy9d=;&natJYx&ZRUt-_>y~NcfzwOxMsZ&>Xc(!H1wz-hCnf1eUM+kPE=a@c_ti&ZU#;Vyq$6DY4ch+K?JU z*a0K6saCVz4<*mRSI(R~@BF4AD^i~Q4%w;q5J#~;2HVjbT$rX~t)bZtd3dZ%q%D!@ z)S)c&?l?wQd$B`n{tS-8eAwm1r|jYjx%gbgf^dNaOMs00E>k(;pu*1?Dj9Msd0*2+vixVNS7_gD_+vaz5`Ao8H54Sm*S zR2$qOMM)}JyAxC-C}>Nl1RyE$+lMd`r4&*Mv^E63i`JH!n=sj(pdw4ypNTKz zM$tW|6}`Em|DeLGqS+IeU<5(?#&1Wu93;k~Te zbT*e<^j50132qzz8!Apf($j}$>-6mrQc_aM2b?k3O@Gdx zlV*OQ>tkD6Zr-oiJ!5%hx|81d-{4^pT>j)g(0cY;fTp)nB$snIc%+6*Tzu(cVuwh! znVM=c9aTB|)PBM!q1iBKQYL3w40abdG8&T4DROy-vLE33hLOnzB$D24pISZU@MMiR zP3bB7%+z9fi#d!)$@@;0Vg;Q!KTDr7*5#S~RmxsKY&65+G>50E#7RPG48~+Zi=yw4 z^BmT77f@2t3N@3Bka`kRc6>ag7;UvkJD_Cgv;OjK)(P1TTAP$}oB6iRr$!dggUs8&PbmgLCL40@x3 zv4*G}fq>Fr5#?rk!^3;`;U^N?lc&F@7t>5I#^RJb;yA|f9L5fg;`kl|L;Xl8<^trB zc~dR1z`#i^kVs#cDPRnwx{U1kAWrGDqxy!!u9Wu5kZ7$$Yt1Ka{VVFJrb^6N!6w$N zSkJw?{uz~b$dPBw&_)LOSF(5iUOsu_$N96b{4xLfTc6{Cb6&-L58O-cf(qTfAQqO^ zbWC(0Bp8vX1kStca_)cpPV}@Pj8mj^aTK_Y;)sZ-4hZ&5RcV-%wI;{Gsc}BL{j)eF zmtsv}0)r_@`t~WN%bK`PVr)vmN@CB_WnISG5hEn1HE_e>&(WSpn0_uMDj0_HMRe0* zN2XDQJX?CV@a+EWxNS+An&fyymeUlHo>HU1< zlOJMq-(FN9;M^@2@kq}edZQc#RpjAk9^uVbyoq|VfzuPPZv7SxKJ_e>RRdgo;k9(< zyRlfpIONHLPqAij4O$ppwedXSGzMVxzz~N<4>L3{L~mE`Joq@~x-Gczwy)zm9^1B_ ziM5u&ffc;{4R2@9p55GY@7;_|j!|#c_|LEZJJ(+EM$XuLCQ2$AjXKJ4C>CB?Vc?6Y z9(biTAB$5t?8|VL$KF7RB`(ez8U{dPgB(A*V0#-I>li9*u?u&}h~T`a{Ci}&@5 z!G^U*$;?{2WP~1t7nbRacKKT;mV%w<1O7_|89F{3_LZD3tX&o?&cZw`Kx(t7xfyGc zy(88dW9$MYtYxrs=XH`qY}j-fQaT_ktwxPKyPo3V2XEoAiQ92klYm4J$^^68p=cDP#G&b@6dE#<=Z#aGy2I_C`)7vt?%)j{ zyq@p=*T1my;ag~)qG*$l#sZ1r;`6R1oov#c+)0va64{WiefJY2G9qs*)!ae)d>1K) zD778#eeyH(^ljxer@ZNhegi#g7Uy+>d*VepL`gDf@RBEvRgm?+?L%wmE$2wJX86bq zrF?)ghSY{sTM8{T2g# zl5)-`aWqM4@LbE*4P_>)5eh*m?=W4Dh?|z8@1h)-oYdq!7e6oY14X@R@RVYv-KG)8 zB#|Ibj-l=XYkGW!r+a0}FC z60~YEFQVx$c;M@|TnNS=7xu!s|SRo#35=~TT zNKN-(5AES9iPab<3%Cs*9%XQ4AHMG`Vm-tXWq+~IQ@P`#C1&ekM2&RnPl(&^!R@epj!dJ*4JF5;`?M1NmVk@SeI1WI_b?_k6qVPJ2F!|3 z;~9;+#-l9_R#|H8lw2DUq3N!B#61vs8aiqqK|>G)mN>{v6iY`GNslD<41>m}f5as? zEJ;QTi85FT?KGtkq?DVA>FyMX%Sf@#@4fSXaM{^c@W7ELFx8min54fJP?>ab8)BoW=KDUxwU@tzXD9b?;W-y^-l}uBXXX(+;qcyzeu@?SD|q0s2Y7h< zgN#fZVcbrVZ~DZon6Eze6>>JuRBe*6+8955#ZU3p*S?kYtJbk`^+{}8eG>iM{cK!w z68$~>6!Rxmr?FyS1)Dc*AqaAmOXWpV-(Ua5A943nw{p&D7qDV*CDY9*R`#tT7vu?o z0Bh~bYF7At6ytq)0m(}OATRY@OWrF^iqZl_l&J_)RF)GccfyMdSpnrp49_ z>5wG|6mncrZVJLxlCpFNlLVbe#7aY=GPSGxs7v6MNv6lKIzn{(aE#4dp{<31lh0@4 zh6@=8`f+wnP+O^ql}B+{5LN`Dp5n(YGs6d&9*j6JzL&kxPIA+V^(S3OG~GlsW4zR1 zUwse#Za;do&d&C39@%{dej6@*^?Q-E2DO=KCUuH)$^i94E!Gd5N1@O~T#G5q);|8w ztrgjH<|~Jue89>=4p)jrel#!Sky@CHAU3eSW{LkB)PP89=&ud4X8azUaGYi{%~D)V z0s`X1P-}!F#t=5ZYC)|T(QL+)f&$H&AxSLxvd58dJWI7Q1y1T&fg=^AvQMqiq8-QN zyF9{%Ch!yjfle)9oU-pogB3jhl0a?0d1_(Ap(AZn;uA%XT1{e74vf_puQdsj$3VV} zHBj_CJOw=khjx@n<7y!9I~gmlP1Zd+V`^ci8R}Wb#&st#F*BYqEuG0;c`o6hh@sK| z`9R`JgVsJ1tv0cZh?0axGbB(x^|(&1WEtqo5t#_798!~HOl>=$IujAvCcgAYnhK%8 zij-8RIAbv)ws?+WG#=49AE*hh}$5wGff7lqhx;sa5M}47q_4 zE7z~2r?;G`(RO6K#X=c#F|UZ#Suz*=jRikD65z?>r0p82a7HI<0@RvU4_;rMR3yHo zkh*lIE;EVd%@t4aF@52D?j4o0KPJo@BD!#x1)9)of#7v6(Kpv9!H}mP#r2`lvCB(ok-? z*nWq4x4}i>dJ0i9_%(?s2xdftrzKv_VWOOH>VX15TVY$4I88b0qDyI)B4pkYhY7g` zhW+_uP9Y2lgKz zseSGNKAED$GxM16BDEIVne|tM469-8DfAZcu zO0uiI^ZeZ9t+7XLm07#0q>_X-BqX!|GGGICV+;ply!Lo(Jky>T+vAz>^l6`-Zk_2K zPrK)|$8MkT(ze^iZ45RT3U> zu_=D%H}2viAO0eZS_302w_Sh71{&6@os_;_==qwtvAk$I6E4n4xr9xu%m2P$2JO;g z6kZ@e&|bJ_)@~f)+AR*=t|<@BXLE=xg9x|C^wr2-0q4#gXYbByxorP696j{}OD7Idlmv0f;AzRW zXBBQ)b8crwp)8f5LbjkE8;m2NYH?jfzn@VX2m((LjaiD0Ay0EkB~76W1D&FB$WAYT z8Y0b#4X+dw#-jBIfbMM;mH%{o#U98s{?&GA$TZCyeqB)2)8tV8HJY-?7* z2+}wsjw0F%5wlBOBo2;rY1TtrN0X)n{bYc4M|R@A=g_Q&NJiA;v09ng$}(pgUCfju z+9%1X7B?@juEntqffLfVJ;ruSFg`s_rB+6$^Lblqb9`%HL#*jP)>GMLoPO_=Q59up@4^8U-B1 zr3~pw9Hmi1a571f=k&*N;+i2chWbDev?Mxo=}cx=V=0s+4F!5=*%j5uN>I#Ym_dO% z?Lu8qgn~FoS&9 z-vP#(V=laroIs_|SWQk&0jD&p-XATy@>GeC6cV_`P5FU9R4DHARv0_@O5V zJfAD~UBzJ7XSur!7Nk^cpW6Pii3jtG^Bj8aAkQ3mhIhaH2hmD1IWY+c{+~bkzqsw1 zH!+9??3vli&wTJ5eChtfBuR_~o;dg@m+w8mwux=up?kZ1ZHzEpYW2hN62Cujkv*^% z|CD%f1Evi_Mf+lpe4Treut;&SypQ!$;Tv7B?3P2|mnojNTg=73%mi-nyjqvFX>qJI z#92Z+N|}!`7Kb^5eB{n$uxsad4U}wg(w~oRv>pW5O+QzUU0meQ?FCwob>L#tM(xU* z8{fC*hyCkjwl<&d&ELT#i^wl3MBgGOW}Q9tKNfOI91Zx?U;QRuUHnV_=^KBIrw`xD z>#uzWH{SR*o_+RF?*9DmaLhZ7l#(4iAC(GDHDe3~S5Mx_@pJbv{;bAH1gEP7azfyi z1>MIJru_gnfD`*N^2H1%Rg}jyDi`#Eg3^f!GnM@uDjs2M)>7>&l$NBK!C&ExXE~Gu z7o|tq7Az!bL6YYvo6}22RY=@|egc7`iK_)YHzV~8ZlI{lN_u00%Fv-z%TdFWns!n1 zlBMkl!(l;rs8G`K?jQU`p6h%Jbvok7#TYX%L?z1=`Q=RP+{?bJU(Z$7-HacUzT@AW zSj(7^Oq4_R)GKTYS3?M2+B&1c($3&W%ka@d1)YTNipSok{vPN4-(sv5P_8M2mBdNG z!Dp8V8=A3t$Ttrjr#0waI8G3PnqQ?92Ao=)CyH_qlD!iRZaOeSYpzc=OmNi5OC(7Q z!?@s7r_Wd=q#P>ddqe6K2hS7K0-sLXGK>liFD|gJHbG``j`xlWVJfJCwJZ$> z^v#e`wM-OgChJXtlHl;ELoD|OB$?R&KvsLxonx0%2}`tkZI*^-RyofIrPx2don|>i zsREP6oYbv&Z1G|o=4zT=qbJEBDewx7lW6j8M&C(E-2z7|!oGvwQh2ilw@|o3 zqYHtIAPy`lRG6e794b0XF=x{VXG{|9hMvutj|LR&1hr(5sUUI+f=n|g7wk+zYWqXP zeu-apa2gGo+K$+wDt93zY!qxLQ4+FZ6p)x1dtm~`hO}65(Ux#A z@)?_sQLanhUi+HF>KWRo;}9EK!^Weso9bK_I}cKd3#u_*clmXt(Bh`l$za@SC4!`SHie8j8aw9w3g-@YXwihEl195P~l~`DX}UF+L~A z1DGu(SWht4*DPgS^dP2r_4TNFh`-n&uNmsiy}a*-{#Op3xDU5$*j2lgG>pg^DX9;Q zW8g|fJUgIO9iobyOn{UYFOw9;j*`(=T7*<1VS2IR?A0A)-&ZMB6 zNVEcxjePKOso1{vdOSCzEn8Gtiqx@$vl^;~tZvAVgqcGeT27pJh<-b!vd_nCp(JIhoG!m8QrINuIGZ7?S5HBpI$r$fGXH%gdbY_14_* zHut1TYF>ZEl?z;EvsR1B0L-&r;g^93o<(<1voX#QBg$)kkT8 zFc8~_<$j-GoFas!q?<9JvXK6-mWv zMMTJre=9XAIA|TC%;TuiP4&CHRN?gne&8W9O`8bSv-E3F9V_AEz~KbX2(*zz4Z~Q~ zXVR1@d`p(+$U>51$g7rE7E~PuWQT8hMuFq0$k#@gLchIFA zlwT3PYo%Pl7|ZJpypAvox#xj<_}*LJ&Sl&8^7*?z&lUR)@bJ^$V%zvMU%2NpOxAWW zHMNaD{n#H<_3Aux=o$XztDj}>_I->s$N5f4$G({>eDenG<-=Nhwfu8R(z3V3Og|l3F`FptT z`nMpZ;_U2mJlwjQvD2{c`tRdVafBkuDd!T^u_QVnm(UrUW6^Kn#Fkp(VuO&G?N>2b zx{TJ7kE3**mUEo(wu6U6rjqiKpzGx%ae|*2!ot!DEq*aFgOMvK@lh^WObZ4>7$kyz zG^%)N$3aR#np>oH(9$J!4DEWx;&@JMa_U_VnOhdJbJWkY&`OeZ4UIV$lN-z)$?GcD zbJi~6yBa-anF&0WTN#5Uyz`b{;4QcO2t{8of8tqsrHq1{vC4L?zUGbJQB8;x0!M2+ zttoj96Qy9}wkOpKQVTC-!stxTa&Xy_e3t-_wA`R>eS-G0^oIj%F}lX%VZqFfGI73* z{@Z_*; zqV*_KuH-3_JZG+*Fd3Ao`@ty7Bgz>LEY+%Fa!ON(g5@Y;c^FZZAx*bLH;Fji>*8rk z&DUrlRzd^~%gKl9i7Ym}=sFtKuzSaS@N;{0oQz8a!dsGn;7-p2tK);j{dLG&emTaFcDJGO;#v+uWo(sqzvI?af`bCa# zBzjs?Z@Q#OPBJLSY(bLb#M0nNi6cj%6jNBTvLS5>gfD69jCPnK#s!tr3U{YVN97En z0=F%2B1_lLh*}13QZp1e@eV^AT3ib(7@UD7=u0XU#n3nOC>Zt&B4Ze@`Ro`5Og2Nx zj;3rirG|rX4Sih@Oggw(!I3kEIk?JJ$`>JVSD&JE;wLESpsCN?f3*Qg(2MfW0BW|l_(SK`7V z%VzDy`omZS4PtY}V`aHf2F7SxYF&6=$l-XUYu&Z8XXT8MsO2}j>pyFw=qQF># zTn#ef0mP+H>ev1!v-8xLu101&zcZtq8KhFw-g#i=4oW%vGu_P0{V}(CIHQ=3hp1 z`UF?r`7WYPi!g8LmaydFIhyu0KgrqscQEfZSoWLDP29l#+) zESbp}W*KRoW3i-pL1&oK8Kn5qq3Zg?NlsE^EVLq`Jf~Wfc%Gy+h*{`GIL2Wzs8G`G z$aF%cY^!=WT9R83LQ(M@7UPI?CI4ruyZA)CNy#g5y0wUVqla=O?c*K#dBTon1tm3s zr@#~(o^N9jY_E^8YobZ1tSR}LEHP-$;JN}~EkYG|!l72y6j{M=AZR_lL_1leSh6(2 z3iU9+cQq0*s`BIo){L@>q9h|VhR#fm6NGe^x^(l1EH8+bG8*Fz+>%RJ@u)US#833; zJ1J2=p?#){Uv`NGBZpQmbk?dIaukR&%1&AV9~*#%Jb#~D|DIImh3TraqjXo|6vT50 zd1fe@0y~>gP85D$Ft7>rMUTRfw2A?f%O2@C{OWt|LPv`Eb4PKFz|BULkFmBUt4oSm zLtYhVB-xqA? zWEN6w$va?n3byqEbWKobs2EMq6W|NtAm_(#{Q%FJLzKr9mCQlMmdF-JAqiwb&A8OI z@1;_j;b{LP-MS%kH1V*&%LI-CJEyL|T1(Hg@WvI}S`J6^dER-`5Ac>N?_}Ybb1e2x zb0R*?^0DKbX`iH*^uU+Qo;u8|ou@KT+~U58x!xSV|CL|o;}87>J1TqGJ+=E4xyTP6 zeU|$kypJ#l&`L9m`qXN5;yC6LAN>>F_KqLq+H0=o9k;)WJ8ry#Tdu#EcfI-DoH%oW zfB&(6%e{yHp54v;?A>|Uw`un2g$Jy!+2O`ZLP=taxv*Cch+NA0#6@SQH_zOykH_0; zr1^Z#Q~&h<5wRs4UIAP}B89@!4mHoE>grLr-D(Ous}!kq4k6+^SP|<2oK|_Va*ap3 zBDi0vdbmmwXieGElpH+@zY^zXuGd@qvJOmaaNt_Wvse=muKZrjPjR)R;k#TpUSoT$ z#6-zsEc6)&!_5pR0E%i?~)Y-NntkR|6CZ5XfGoAzep?G zngQ=-qJbCbI zeD=ZL#(0X@gB{6k%1^YZOzp$#c8P64*}4oHkQF&$tm%g-&9;LY3eqU2vFOn`dKe`w z%g;SSa;Ake2Je)i=vcf|k_0)OJrE`mKhYQrwis2`!a`#0sNGa&b`WI?$Q*okB)~1Q zf@0jznz3ZQA(lDHI26L7Q$eD0mP3O|1+}pm`Ug)#C#Mk5o=WhB3P-tAY7;CC&Y)80 z7a1UN3XAMOP#R~~&MW!iH~t*mD`<@GAn(QW4;`mJcaB4czrnrte}+A~uf_LEIF36? zpEm_kO4{?Y_%G8seq(1jGP{r~)T@bdKqK&}doDG1bPaBHw|gv&!No7Br0<%+{FEpzhLpCxn7o8nxaoaOTN-L#exPM>O% z4h>6leexs)k*}=QVoX7l7^<LZop$WnXLZEj;Lm})lZL@|ql4xOhv#HWT> z45=xod1Y#Wi;{LE$TtEbBzv|us8u{%ElJaYa!C^e0)eI5j~EU!d{>laN&*pfMv?vEDGjy3oBorK2NGjdwZa_lZP~zi1i83DMD%^o(KphHacYGEdx1 z*>>3&hweUx$iXcnj?}o@d>Z2wgoGkDlxx9x5&8;5@{uomm=heMNDFH2C?IO!=9GPh+$$(*aLu-BnW@h(b$psH&HX*C zNsD~$F@E~PKg@@J>aQsETx9G}Rhs$w5M>lM?|3uM&OS|7&ha+=R>G=FqdviWwac%( z=ikxkci1t$lR-3~^s+^Fg1f(VHw%mNeB$np@r@%7@RkE_<3k_#5HpiA>&8)|FW>ik z-f+z=0F=vRZolzO#Bt2AGe<|4SbZd&I^#{!;`_*&sAiKi8fz+*?fhFYbTu+bnwY(c|Q76L~wQ3^>5Lnls1GQgOT z;iR<~aUPUyZjknZipD1Ewsqn~yM9?~*HuL@spGThk6xFU^QD?mSil4(z;n?g0$T;BKKrp|<5++a? z3g&_osu`Y?s6~kCIZ*?Op}}c`PDg{8YUoiLdRPh8F~q~1qL(8=GooW;Ih8_Ugd_|wOUi3Lspu2BeA^5BurvF)n8{K)tH&wTcGf1T40 zJ%}hQSVMQOWvslDQc>df{@@oGtMB0hANXI`wdVl+Zi{}Wg^3gDQ`0Xm*J&MHQZeGD z%ax?~@xZ6*IRskasgWi3E71iRYw4!nCE#P_+&YzUxc^T{OLeBR4naJJl!}GrA+6W_ zID??JVUYvp{*K&0wGnb^M~$T&6~xkE#=olQ^jipFsaAYyHA$Wd>an6ap>dVN+0zSH z8?E$#C$`^e&g$Nu1P>|#OL@hJ@Cc}|fVu9&Vf5vMG5`^+u(Fu7&A zQ6ca{a#MhTdJwXGA|!AnMQ#avcNB7JG~QB9wI+z7654UlCCHqVevoi%caK`C=(J-} z$5Qx^&t)tGFtcrf*{4radP^N4HEPLXyp%JK%yQr@yH~2)mP21ThMz*3=gjP#SXZfE zmj|-WmU@FN?|OUQEi2xm*J}K_=3Ra&DSVg}5nY>-_67ts&2ckC`kGLC* zvN($dUnxpLuU(j_G7M!#>R3*n8zQvj%B;q|TA8?%(=aZfuQ(MX zW6KJiK}oqZhYq1uh-pn#Yr<)le7olK+;L)Bc*ZhjJp8JI=V~e~Xv_)Xx+M!0$Id>> zGsnNhxrGya;JTmU+MPG^RC0uHKI01ye1V0zL&TvXatemyIYA&e**(QnWtv}j$G@P| zXmH=%f5FM@IQ>BI<8S#%o;>vwe|X>Tc_W@Rr5T#5U*NQXNT%~yVH`Nz$-nOLgT;dry?;*9Z0`hGy zhS;so@@9`K`$DHpY(>pt0|;3ai90JIRacE(n{~9O4O$HW61n!?YBgfjWk)NCBPAtQ zGZDJXR0AeLpNi+=YX?V3ax)5IG;3KE>pFfm21KnkKPd%T3LGh^`VKSIfPG^%cGhcb ztCXmP{#uCR^FFs|+FD9nH3CdxbHQk>6`xnRTvU9&6-8^+=J%o{I`JK^gcL==r~mGE zdGMi6vT*uwgm!t|b?@V7@iejz&dEhiKlybqFg<+(`)_(9{ox{MSFv>R8FF8+t9k`D z-}ye~yJt9Y@E%U@D+uQ;<om zD}u7dJ!8?S#7i|{>fl9!QeWZpEh-jhA<3#4 zN1l0<_P0)vhnD5AOK+^ebu>2|_+DmaF6W>8(1*C?4ew^h%;kLj>z}1jpJdziJ@`RL z`|Js#JfU1`Zm_|AJ_~cXmUh3feUI9*B6J;Gtr!b^cGgOi9EGEZ&QY$0PATA1qS%xb$u2i(+gla?6sD>z~LYkN8#{n|%7;j8)WbX9&i6y)BEoggX zhNf4gY+cgBF|8*$(1IJb?PYSZ0zz|QzKd1`)>^88OK%u4+Z|8|T(*ssSnl6H zMc_$1Pq5UDIJ?xRRt<@gj65$WmlTzfB2NuHGTM_vy48rqsT9#S$g>82yn$>NxN{bN zpl}u}!xKFc*Pwk56B&kQhg|!t~ogFwS#_W?5byFg97nFL~?0 z#`=oJYDMIH#Y1iYA8cCgJUCI?Z<@R-6Nbh4n2L4K3pt*U)Efciie~)E3e6dxq7PwL zVfR?Pu@WUYD&;06f!U^!bA}|zsE+&8l*UN~aW^I#LrY7h#L{3&lDu6| z(GJaWiJA^s$PU|JbmaszH#WwJoe0^{Qbk9;gb)4g2N||aANKR)>tNL z6Bh*|Q5Vlz{fda&ZgW5|GR$pjdDqhxZyht{}i(Adg zfOs_t_5xOocy*hJy-4d>A1Y_o<)E9D=Nd2(FAPL3bO2j*JsG93S6qjx=MXw-M44JG zM+=D(BOsvUim+S?94SVF9!FF0G&Rp*EcBQx1vCSn&~eaGqgDbD3u`detl0gIK!{w? zaHw^3FS%)3T1p%(nJW8itCpyEKCaR$bQ5*nHt|JGYL3<$x-M1U8>RZH^AX{z?Z?p) zSF7{7l}(UC@IqihY^^5|8v){X0)`k4sL z1t+#AERPjb7bHPn(QOo@dj$2|AxInw3*9`XEh83HN(~n;k=WGYEjim#R0S9@c!9sd7lg(YUJ)K(9a>8{}}PZ8+ApJlnRL!t4HVKGOMv6!Q-d zOuYen@=3xsyq|*y@8Ox|t(@BTc9wV5D0}}v#r+2Y`w?9GRkV48rE<)%WWlpIj)?n)9@6nZj7~t(3kj*LRi64E2H1Dc#fjk z@UgB$c@A0#(!9X0)EPtpoy;Pok9IZ6Ehq&J$ImU$9(G<3aP4XCz|o2zl!(j{8qGGZ zPNN#&`mo#`f@5$+8P6#&reLh%6Dpr=jRsmu23o*HN*=I%lkP^oUg*$oin$^%Jye z>h`I-1d3|KhmK*G8)9o&>_=3Di?d*uJv}6v&xrGaXsN)oB4W2-d@Nv)WGr=t*a6gH zO?7ubYmY%yC8yPZj#m)nDYbK;hZa4w_ydPXW-R4hvLwfkB^qGG?$WNznk7z7r9&@cbf@{+kuUS9lb=KkG}rIFVM|?xwU#{3NVAl;-tu<#?Yx3|Z49SW z;q2^5e*Ncvn^IWf@4xanloH&0=bQMUJ3qj_otM*Tw;3NBU!z>DQLi=)4>rF4?YP^E zmo{jA)j)}OWtMpfJ0~vim3ny~M7)%f`XZLKn+E=Cv?hDe6p>4N(_Z}LYFONQP+{%p z247ex%;>jSc^3Bk>%y+j+c*zUHchr)`~I~u@wLKND^Ew^JDR{*d0$IB zJ)%H`j;0Z~Y%7OMl>^2?pNi|^C^brgUpL@i{e0l)ktkiP8-U9Z?^%hJipok=MN5UN zC849)Rtc%E=)=V3YSl|(R*WhfN=ZDesd^scrGTkQiEZVO@sdw7^r`zEp*uQuCFBSI znvGN}@dAxjY?&J(E--ffc0Qz3TzTMT!cvu~ZM%5lxqG?)sm~IgiRtA__`5IXt#|wk zbE3zO{CB_3BY*cv&K!CgYbCvS78x0?zv>5h>zn>5^YgPD?>~u644tsx+R5+Zx#$_f zmZaR)w43n0H~tcNH%863XzeVBE_0Zfcd0IGX1yT`rJO-sVsap56auI{OjZB}FIOZ! z49g%AL+Y3j2#o|$*^-PEO6ly34CO}r9-OMnDBMvWq3wHq47^21q=(t{$>u-JwGc!Bc zHNAtYFT0kHKlo=<^ME5qA0cV?xZ{oAL)9N$7tbAhlu)}=9mN~2x{@8^T`R7VI4jRx^)maKRi-K-Q$4V?W6M*Emg61EeEg4_f|d6d5Xxon+?SwsHJ*W_b%q_m0+9d!AOJ~3K~(AvGN>gFGev;qra_%$OEyEl3iCKo^mnUUFL4^SlsKdv`2IL zz7yQBYl4b)=nYarS5XZelo0d>1%rVhPA!Er2&IT@L6J#nRTt|h%C!Jv1X)qgXgE~L z8l}KdlHsu6*>fi;On%|bXk8~XSsP<}V+^n4pp{FgU1l031cK%6ka%cmjB846fH0aM z43N@d@?um~#-WHb)zGC{Q{;)I7%G&NlpUA)mbA3mlT`YV?Yj zzL(HzSkk(n)KpLpaGEvZp+QUfaunKC zn=1O}h3BjHAJ&Hw3bC=$vA%k~xuSmaKfA%so#`Pmi#8euLG@~nNEzB^VuV#_3FUND zI;F_TD~hg^I73TRwm3*cl2MwKfJN@mAT60^>Gd+SkeJ+}5!4gKSl2@tK`e8II>$za zFjZ)+)^0diZb>pjz73LI#P`4RhxzkI|AJCaGSvwXZwsln1Zh*T;AHH0)}?3&XegFj z1C|FFGB$+TC2(Alpul*e&M(~QQWFm5RD#z6YJ#!U!6_uMFR-4XU6oLhC@au0$d18p zOPpMirr;J`gph=_om~6IH}i%2KF&a9q}t%SmX=DG&ogRg6}6$mm6spjTjCHnl8SKA z#!^lVS6q2J!FYrALZ1&m^p}*JfY9;i67dH=_M2R>_X>7S?tGCQp2b?rGlvh-YAy5g z|J#r8`aQSshkyK0T-V(IES8p+Xf~QGx0e}fj9svDv}cq zeS@c$ze*MgYF$nFoWxU#q-GGM5`%2Oz)fjy7fcwBvBQ$Z>4f5JjvEV>rl2}6$Xr3; zW=s@5VM`N72}(;c-?BU*kps)HRG?hNwAsr$fAr`0oe%#!S_X7&#Lc_j&fZniZ2>2dtZfllQ2A(;hc7$7`02Y(yR*C(4R=rL#PxkMQ3EKzw@#ycrHJP z*K&v}Ik(*L9#mm?@W>bWrJw#y8l@5seC_jm?y=91!~@DfnGfCZ)BMI4ew+XONB@P>4Wz;6Gvs(F{cluQ9y(|E#;oB~-?I3RJb*BZIz&s);U))B=~2pw!rk#SgMKv1 zrpOEYMu1oHR{DySeqg0DSW6hU=lc^FX%FotFBf4f{*eyb9%&Ot1$kZ|0i^|bW=N6( zQ`U4HXrF8|?mH+gaU8{wGZ8!YG+5a0;?CzRJk@2a7P7rwMk+}hL6jPf_h&gbJG-)P zn|s6a`?-638}4M8;IZg&Y4b&{nKM8C1|HHr{WlObp^SvM!(mG+z<>hRL!A4 zvUIY;^i-WQNr!?QxnMEEATDzl_EOxZEwZMGi=4#fT>IvI~itYgR;3Ka{SLQ{AaD=bB9@E2C3k)9;%YHSnovSC3)I9j37(akX~GIn$VN`=PN zdNdnZxfDt#Bs z=mHplqXI=vfu;xrQCQHb7-p(ga{VkDW`Q@8_mVf@!ze2myqF!rUFcdg-_5_3B5Ni!%^>LQl zOVlcLrngNK#}Oa>%ts)X{JY=!KbVwt{?mW{IMdr_s8wp0G>8W!S#h)4Y-zix5_1u-X1AcX3D|me^#wtWB`*qw zc}^!zXvHZ>VJOUK(50oIz+r96M6`pLF;P6k~B1`ba=^-XTQ?fcoYV<&-4sMN+deDrDl_1*t1;Wr%Y$x2J-_kRC-`Qq2^=KuVYe?wF?%nds16O)|Q9rg_!&iEPCF~!bm z$c~-Y^V4tq8QyX0J2tjEHfq$>%5{Ay(@3vGU%T2TJ=ZmS;&8!XEyOWI00Rmhv!1%?~&k#-Kp@9?J14o?W7{tkIz& zYa6^>b?jn?V@J->Z}%_K2JD)7#??1oPV{<@%0$SFs^EP#WogjCF)qU-Bhf>4ZL8C$ z`((M{)Y%?q+bu4i8N<_(+1U=wvPY@x;L_esDWo9vpcmx$oYP(2 zyyyMB-(+Z85n+*vhGfK)X4Wcs=76%FS zN`&mm;A(}X1z|}LRTHvxLGQec?b*mflG2<{jx%c0|k z_}X3nLNQyU>9@#aG7R($a^UcOrlzMzl7!EH^;5j!MYnS2cfUeTWqIi!!5oi%;KWWDUtrDfYT2F?BVexDcK_!6?&Y$w>J+mWf)>rBr~ zQ7V>xI?SbWF65^xJ^%SV#E<^&C)AsZAM;1z`MTzc=eSPsBj{O69fPiBWLc50RA4N7 zHD(b(ScY_*R#Yrs`03xDfuby%Z&43ox>T*ibUFud_Zf9xleC*+ytEBsiOQ9Bf0LNS z-y0Gmh)u`BacTMz?MtlWfB&d3@G}afMGZ;EO4sf>T6tE7>Xo%Edb1uS&n55JWE^`* z^YK%?9-c#wY`M@^c4=a^l0->Dl%}N15UtZg?w5-emm^i;tlT(p8Z~VB)U$Y}o;A2c zoK}fG`}5(azr!6*f1G=s_#D&I&tSFT(yQOhj?Fi5^Y!oHshxN8=#lSp^^R8&rvVke zpWw)0@=vF%yYv=D*BztWa#`49V3UR2@3P?OjutY})SMVAH269t>;m^su?N#Bi~|k-bmyi4Xl1{=-#NqhmuWJ$T7$UdO?!_EA3H<=1cfBi66o z&dw7LAQFKoKEFp?&+4IM>(fx6Y@}%1aJTYZ>d{)zlJMGN>UmlVWi+QqQ4|(w&3gWA{ z+<{E?Bg{!Kg7JgnBu_Q*F6zZtqSKZq8q2l1R=RYJH4G+QNxNEXq}`@w=D&HO+7@bb406h#5o6}1ST~|N15%YtKJ z6^oce(`;7J6@@Ol%*IWoJs)dLmXSk~_!IRrnuZl8hY&c9P5#PW+*KLYoZpA3Yr@AH zWHUC7ZDA?Nx-~`e*$xUFhXU7DluI_ntcOf2Dy0lz9HWFLleL+z1$sWWC46%GuMu2s{|`=^Th`~!;$$ZPS{Nf!|OR%J;HcJ6rq(v;@RJk_wy{R@v1PPe%3f@>)kOZ1j| zx$d&-*|2s48-_PfDOK=Xk9EWA85$fS)tb=6m_Rc#HcPXyz&Cb(l}GkH$hUWYk!v}waO64aMuKXn0muJfl6wk7v zXH9f?9(i5HtbAft76@mc7v{`jg0ro6rB?ZLKXhoa*uMb5U!*>+b9@8YV?O-~8=oY2na zW&dn`va3(Z4mBo9HCk&#mo6ryU`3ETr}2lEiT_W9Uv&lds-t~bzJTSFnw5o#SjI_S zd5V}b)Ffibacud~8S350iSa{>P9DGtC7}m><<-ojCy1heBV&89QXeHN#8!)4lz!^sfK{6;vN|L6hnXwY$AR$wQG}d@?DUAx$g(l1z>OCFH&_ZNW>rH57QVbnk zWgt_miIlWo;-?9sVK4%sj6nt(t0l0Mg|RhLJ%%LJ3^r_JD7gB<8@c=OZ&G%1+;r*X zI7!G|-}(mcdFNZX|L*V6tSx|ntFOI*n_vABYL#gQDr@=G%il^_t|poY`1`MXho{M0;Hz9Q zd@(z=U(A-FO?>*nFY=l#FX1&;--gu?IMbSUzwCYF*AMZ%`rZ8Y%YTQtnK?FBHdAd^ zxnTVTztALg=nPCu2b!4x9vIV%w)i(5JSec4!=gr3JV{PGMp1l(jJOL&>_RaPwDD^` zVIv}_21r|xw_W@>pX`M_?ECB(Sc>`tMfI|YaCBDhQKeYZiDiDC0j z)6v=<4#=O>EKIhk%xkP;Ee?#=Ib5x=uD3#~9g&`&B^-1+%Qc*O?KnIytq%jza*#@4 zXFc+j3b}Hb%wT~~Xl!NEns4Iondu(5vyIxBrS_tu#nw2$P5)iV0hgrkY%?)22(?#vrM;427(PZFSlo*Hg6m49z})XvO$J z$NJn9BtZ#ee+3n1i5E2Sfd~;<=!U?tGT=I(ps^4TWudMj;t;l6ww~&Ai}pf5D~edX zu^%tzbRG2sQVAT_>ZX^Ajys+_rRR{#P>{uGh%Q^`^kQVO%{5>m&GEx0Q8%Bz^#j?K zBF-4XVS(Rc@NG>y4rx5oqS*+^WL(xXU3!LcG>A|cMNjNug$kq~n_A==7Ks8o?cVh2 z2FtQYlqM+}Xd2S2!mP20EI~H4$;K9{!`Py}A;oqq>;ROMXx%yJLP;`-i_=zELO}>3 zwa|$n2ttIFvM^+@@-}1zrlbhUP*oufC!wB?2!|ED`E1AaDKXT%n7pNE^$N5jDHdJa ziIlXS(5qb5I3BBFmz=Ng$}V+1M?I-=Z1e~txrEy;do%4?jeG9-BnMAE&S$5;#Pr-e zue^}G;M97JC;C@hg|Siq?FS zJ07~7);2?SLk^iu(M3aA(^#HO(~bC}7ymB5`?mkgKyUvFUgY@H1mjaD=_#K|R+mDO z%jUTBg3H;ubsM9jV;tK5Bw1nMWh~x!?K`QBPt&f>bK%A-h{K30F1dz_)?dNc+!(_H zYiTu`>_4)P!Tuo{^(Im%EZ5?a?UxgUA+F<6C=~eN4 zKJESTz`P#?KrL?fazv)XDPM_>EEOMVx7b)LM3xsL-6AB=r(UCF#Yo&Oa!hwLO^D}K zh)6n}Z(AxHW#L*Dj_Qci<&U%_{RP2@qO-kO$0q04I7)V1yJRQ7WJz3amR!BWGP}pc zX?9oOpRp{mjzz(7$T{|sWvXP+60+mO)d_R#20jY8!a{PfSUF8C2}02J>x|Am!{L*= z3EMv9;y@SCQ4HlbvUB%$*|G5@=+<%E`YhJ?9CHg#F_W~&SvE(SkJFrZno2vtDcJ-? zg+D0BB?^_dX!DEkwWBuHjG$3AY^%JG^EO?BXQTuN+WELY)$f@)dg24EZk zT2QEW^oq@OlCT=%wBXhky_NpbD#ni&h)ska#2g!~F;%ZoDL52!4z*^?WHlg76iO(np^u0? zYzNw_Eo#@5Nmpl4hZ`iRq18@EL-0=~BqJfg!3JrZQuW*TJt^&M#{?=<&MXSaE2CAAeF<)iFjy2Fqi5oF(pG_f9+!dzR|?KoykBa@PorZA z2!oh~`6jhSlX^SAIzBQ_G@#LeBL9@lTrog+5;YSO^g`r87-;IYq`r`lc!FZfCdeCV zI-ppC`k?9@P*+lQBb>S>&ZJ~>Hhxmh*^?erZoM%h8iJ84ei9Jn2B}8$`b!sa!Cq_8F{y2Z~z#q{!A#nnj zD33BeeUguV>~Fa3hS&3wSG14Df6;eTNwo*-GTNm_={(c}Ed9six1F1en~>ozkr zKgIvJ|5K!O%{LBzrxQ}6UEX==+xhj^{Ms^|#;MVJsRV_-RWw(JY`Ww^UjMqc@!7lo ziK?#BQ|{xzC+?>$1Kx4VyE;PiEWGgAm(Xa|*|L5s|MZW4&-?$=?{vzEu7LgciDT4i zHEz7=1tdv~Wu3jKXt&!~mPI>g6SP8X$03fRv!fY5~N# z_Q|sZ7cM^%XA@tWA2HuqkLa@XnbRpt<{ZoKa=sS@jMAL;UH5|&-B7=?tY4po*60-o zj9Iz~>u#~VsAD*Va-7<@Q{r>c(U%Cbq&0DrAfpYg5=+5nvMYp_oL$H#&T3Wr%YAOz zN>Pv=o^6wJ9qN8SJqT$dhhiqjo6MAB z+VvD`z($T6Ch7?ai*VlXsJss`p}29&bv)x7z%=JkHOZtGqviy@5tIT&LxqUEMWYx~ zc{--hR#>*;iYu<>2TwhS)Hcuw5fnmF=vu(G5`%3?4nDje5==?}K;miw+aiymXQ4xBX0^ zaqR|#7986D460#>%7(PrWH`5)KBvNG9{gwi%i-Td4LSVDkq6NZ4Cl5`uqqs}PH;iy z0}Vl6MMB>l4YrnYq^aTfXq8;fLRo@VQl*ep%=>MMwnx7zVaaag(uzC3 z7t0#&W!o7?5m6L(5SLIBix?|)h=UMe3HsOd5l1nTkB?w>*H(@KE#54|G7E7bC|=P| zey9M(&}amVPtD>=3){1CU#^Ju`NSiNVp=4LAdR6^$e>#m1LcU-{ryO-NYc)LGtHPx zt}{q-{6v6P$dU@lo+qdAv`<-eLJ8xzW6MqqQYrK%i_EZ1(nu-U6+#s+{nf< z4jPL@L$;tG)=MK-#%PpONC8olU`s(ZBS^9alp%@|{GOD#TtIA~Rn)X~iVkB;EWid; z*N8;ZP6CpN5LK|y1xes0yy3bxu>0sfnmVQQh)Zh#03ZNKL_t)UH;AlFBaASK#`uDu zm15PwNJ*jv@4ohZyz-G%`5rp1OG^SqDB4KNpzxVWHr6hWxjvMeVjaYl*_KVhGM?R6MG-!h6``xs`c0K zmKVK+>$YFb=2aWHVZ$}#b9uh~@Yh+>JIu%K{4k>@_H*OL7cvu%QL$mVIm_n4d7TkH zsW^D#AfNg2XL$J0AJAS{;F3#kQ{_EAY@0KVaL|?M%#!6UQ-yT!C`AhkCO{rCecZc9OoH{e-@-f zoZfz&g(`K%d_M{WIlWLh4V5{=Olbvwm2=v~3bTmqvE+cI&*tc~%ni$&W(OSWQ#7tH z6@+P5Q_}se5gQ_X$|(zemI05?Bbd`X*J9NyBR!pogh(lHltsq2$+|Y4Z6T#VYtyw( z?dn<_hn&|zIP#v$U_Qs1VxCIIqu|&}7RQc~xT<5nnz1c1R>z(-?{t=}WQTX%u`{;u zEQM=Xc*;Uac}75_5Q2JRhT7CT?f4{_lQD;)C)juRn}{Ig;!W3K3!ADxM{D!|)0R)w z4=G3+I|LdAHxxMYkP{ZQfrMka&3G-O<|d?}!Im~wC{eyZSr!V3)07x(7_cpF*m5;N zYk?`d#%wmhb|l)D5Zkl_G!so!G&rdst86k=g%W~I=U+_Pj5x4w4>IZaJuPy#y-<=* z6lt2Gq=nW7OG^R~5|s^CTzDn_*MI$E4on^5$g#tCu17<(s6|aOmd6+V+duRBZ~4!Z zYc5x=xs1){Z)NLw7w}u}{4Kus;N4um;cEJ2Msj{-6aBsY z?4H=i?#ZVxMk8WKN`iM?{6;QaeIdKX_HpFl{Tx4djIVz4izp;%RzPSFQnKsuM|o=Z z9@-`$?E$kvvB}+zvOUJ8jxd`}(i`>g>dRio$9DZS`|C&8nmg}#J4!yUR=azhw^GC2 z8O@}2}n$R7LzTIv=*>3rC++j!xhu?Sl^~({R6gm8bQz|Iq-Qbwn%l)XH|tBdqjT!NsD=UI%;`jnjKv$pRVe!gPxu@v-9&F%#jGGPJ5bt)1hDP@k5QwDQig7)o2SHMzkoC-={G>~I%C zg84Q{Go?{)5vr8bi^$9?lGu zmJ0qgdAy5Dh>RlGGlwfAA)2TF)+&p5tHE6ZwoI@WB>9TMFUM5e9$NJ_NA`^}J~~I3 zwuw!OHEnRR5;rk~ZG-I#DwmWnaYB18V*5p#=WaHK~*-(*MhPs`0 zM&a6qBrA#Y7CGNgJ}$Aeq+QY2Mlz9)DYPsaxfI!m5&agl!Lwb`ASFr@Y*!Fg6H3D_ z)?*3U>d+Is*ru^2q&M%9Or|JpD5n-W)fgj@LgGgW!LXoI$lx?2!WfQ<1Wb-z~6Oxg+Ioh)U>nA<3nrMNL{%*wYeWI<$ec zgPXYSvYYwpmp%b1My|909F0aT1}mq19?pE|vM*=l_{dg`B@>8z(16iIR|p zUt=i0mbI(a(L313SMK~DyynHfie=lJw|?u=W!q}EIB@7`q?AmZoZ>|s`!g`$Gz_R0kaqfM-M55fmMP)kQ;ovdZ{unA155 z;AMONT*p)!LzI{$w5CI+diDxeoN zd_8-PeUDt!k8LD3U3(kHS_jBR1wQ)25Avof-^oKWw__`X8w>&xYE|D#bkV%3O0!wwQUJwGuwull#wVi@12<(KYY#7Y+(Fhw1_Y9MI zf>&PoE36(|O|@BN^V&@uA3M&kzUo)`@Q41AxBR=eF+4oXt|y*gW@ef%fARAiKYkdk zQ({juJ>X*!Ln0tslPD~P1_n9Vm||^l6-UK5#j1rVS=icPPSwy#uz^8ddfAKlt+&6I z1BajH-km?-TaSI6KY!m}^3B`7!k3TSjZC3DZDWj~nhy}0ZNByX&(mM&=g{aOP=XCZ z8wkUIq23`5j~?dg3$A+J?cj5rUmIwrh9ET@nlpUkh-S3i`E}B+VuA+Z*e=v%ufpi$ zmkI%K#VjT3dpP1Dpc7KE+yrE)&0G?UcRsgkZRU^7;1sg7=UTL@Em8w(FJ6nAcQMtF z+P6>OpO-_H97cAYq`b9Eb-K>bmVOqFEzrBQm%ep9i(2j_DrB*qvTaXFsAB?OvteBc zB@|<0vlyXiL@_;1g^8&q&A3I*5jeIc3KhvEdFC%Dkt%^s4QXOnn3+SwDPUuJSz1S? z31@wBo<*t*&88tu6I4-QPP7P4)K238n==Mb1Yj(QSYKe%E$cZvIl-EBy;Q3$WM~+a zIRwz~+qk6+-lHLx_YP9X+k|04s}-S;V5RI=ZL}*XU(`zug$9n)<`I)Ix$R}7W8qXh z#*fb;kJl(Q6|t|Wt^rmlQUy|_Ozvy3Ig>%Jk_4_M&0EYo)lz~Vayg)&a5az%*l0tu;wHpV>WSukUSS)vo zTx^@W^tOe$1_!6d5vc)Rqqb}q{6Lx-=5uYbu18VX7+-?|?Frn1hg&ts7=pY3A<0h) zJZaPJ)g5t6pil<AU1}aYtcT`q}2!+bThbpHo}oy(sw1}lgEjigo(x^_wBov zJ>R~coxAU&5m!;RM5P^MNJ@c>J7`Jfq(b^YOB2;%CiEn4dhI*8^;K_Xv~dvo0*~3% zHKsEWwOoSbT7(4{FE@Ghb+2H@_KP?=eu&AVliYRxcNh=n7?~KwRtjG?s5K%~zhrD| zo{DFaZCPZL;%I%IL$e1s8Jys|Ke&^B_``o9X&ZJO+e1FeAhR9=l>w$_ruf(UzQuvV z`S=d<7aCpN9x!V9mtg$-*r(pz4cC*s%+j_opbatzB-#7T@&3fs1k=kBdMHS5N8(YXDKun z3#hb9*$L89dX_LTM5&<_8Rh~*BhrNF@?4W=KT}p3QY{nJTNZiOq2PHGJ&&^IQS@B$ zjzivY$k{fIr8=~NU)^HdUd>DjR?&f6Awx07g}CLzt{Jjaec z&dk(N*2p1F9NR;!QDfgzkD+Jb&9}aj7u@)AUUB^`yzrtIaNWgMbIXR8@b$aD!pJk@ z*i(kq(EzUk%o{G*dL55Ec?V(8Qk~j4N_Ilb zP!68zbmZf9z(@Y*qg=do2VeTZm-(&R-pl)b?Y&%h{smld@#SnO4O3e|&_f5z^Pw$FIHe z?F{t|aqWgH*uHujy?%)g|F;jZxv-wkJ@F;J`iEcOt*?74xm=#%)oVF$Y%kNz!~FJJ zf1k;t#~Db=l=Eed`eS&Jjj#ppd*N^5N|$SPT*b!K8`-#OBb7ph{&GJVH^Z9#H9wOv zp2cf-Au>ERrFn8n^XQaev}Km4ngW9~DQ0{>YTXW+C!Z#bqt1Yz{fjL`%IXm+)~B)L zUNFf@2f{9Tpf#P2eA*FL_I){FM5>8qSU$!n%(M zd>kR^SyRC)XUGrbupA59wU#xl1|i`5Dagk#Hy={UdRVTZ(Q4DE1+?Orp`jv$tV0;2 z6e`eaCMacSv=a(*8h?ET-PM}t)X)w?94|-BpCO$OXzG+SZ}5poiXMqEL|T)i3CS}H zr+BufHTKJ${W{l_%f{DkW?`a^j#E@t(HlG1o+9!(^iCp;8t||OTzV%gl0Z<;YFgK3 zY1A4V%C+&=It;#G4eqKey3axPIh59v@z&>wk`x^o+6NZMRBUn!Dbx&et77OAI9Ca zRIssAK`WDzwH#6snqERnCG-uJ*|NQp_`Z~gzAT7PuE+p6MG=-t;(9hR5i~|>^cPB~ zjq3(J&>qkz0Rah4-B2Gg=s=@fi5Ci(O9^^9qvPdCfoIvwfhDQx7@-YzTM#rO z3=p*wRuwb!ZZFU}8E_zJkfbT4evgxC6g6Y0kF}Xy@X_-rmgn%=*S?+Ep*r-AwMD=H)Mc6^}moLsk`6p=^uCo_>Tay<3^9&2h~Y*DX8o zR#GuM*CU7mO8FB1^u@nrc=b94`&XT!YKZ5PW^8^$H~8mYeEh`pr=J#c=4VkL{RrD$ zaSr;`vx(Ht6+-xI^e#A4*nYO+>bcCbSip*NQL)Zi>6{Y0h_e(mhBJ$gv)UIw3%_kS z`m$*KD}}(b=!nao%i$6~>I^(ZcSucFKz|l-eWW2s4fPlfRyD_)hOwq*q+uATYfjWO zqYcee%P`$GRD;e!Gd4KZ>CRElf!eni#@IzXl$2fj)Xp^7r4cQ40G`h!B39Z0pZ;95 zYPE!5Z2TCX_~wWB;)8$1lOsEMWa5V$8acoXt6ssnf%7<0I?nlFFHO_nulD>kYs3(K z&|-A_1fSXYNp?;@j3*?%32_~XJ8ILeX&$ORO=>A(BRTFLq-muXW2mSMy`hI|Nld?> z;U>%)pJ_j2!VWQOEZ+9|w{qo0SF!W4-P9Wig;a6A$kA32fdHo=(YB!)#FQHXyPTm| zaHymfK`Vkq3fAI7N?L(IS{6w7m6zYf>t69jKK{kO|cKJ=ZBap9V6{IBo+ZLYrbDzZ8)D#KK?a?NwKF4Yu2pc=*i=Fw#T|P z>wY59`ExBiA`K%A%|uJ{#FXZ~G0pxe%miKIq%ItnEF3|#swCyLq(aaf+lx*OQd!u! z@-K|$+hg5N!TKc7>=YgPw7jLRJC*Jh9$I&@X0+}UBSJ`Q*Cp~J;v^vsB1~4{7BVQ$ zhQoE5<36e+NRo)Y3)awVwy-N6ZpI-9VhTOE6?DzT<5rl7$%jzLJG7b!Gjl#u(={@V zORFtNOhP{6A}zy0Jz#vcg-8{~2-=N=^olatRhSgQD8#WmblMT4XL~BRC6{8Ug5_l> z^b{zqDp4FN5+7V3nQotP*H~t0aR zMvJEopP)Wl=b}qCGqkZEam$Sto5oN|BO4>Kik=ZgZH*=o23IJ2nW7^>Qcx5o4Uwnu zJwp(tIMZMx;6d68QbWF>$g~upNRSnWdJq!X2G6pH!-R}$V^CNzwBrzC2^?b~0)vVL zZ7Zf&g@RC&;*N+sN>a4xRI|yTCcnzX8}yhu)@DBS!6=MKP?4mBOV+oLF~m8ITqOu~ zLO!*rSKA~xkXm8o6t$C0T3(9n2wcaaM`SP=O|=mqB0*TtY{~Xve9ehQ6{n`Dxe(}2vZK}#WqYtucYArdX`!0(Vv+?vPi!<)#KNknaaI9pJed{xjfwP%+&RjcENg?He|&zPg|eX zr?!9ja&-4p&RBxp43r#!r^HfX`x)$jMZx+q2d~pb`pfrGYM>q&CfbHtV3zbJi$Q7H zbf$$JZ71Jn&hj=1;P1 z$55GvFQ#@bNw`L8OZ@iQ{_TNR)^hu=Q z|NGrf@WSg~M65M8-gYf-dDT03>%0B~_uO|oU;f_bIXZHfR?@-}iWJSZwOe`pb+_{6 zzx#8(cIQ*f%+7H68!v`+{dh*7P0$J9>`{mUqS`SkB8Oib#u?uB3m2hVqRpWFaU=&iVr*7wJhWMClMFiT zXxL1*@X(94x!v!QD8`?yk@kZBtu_ zD3m0#JMu*5R|u1o=ENLv5TJT`m~BteD^zf~1*}AL*cRwzNp4;aIK>RYBqzwCY&;_F>bry2xl_fznVOZAl8n zENj;fEh=B2Yk__`^1*5ESFi_w>A5PN>rl*RXf*>yPfVk7FYo<8E2pXZ8UjPhGpri1 zNMcP*r1Z5MW^yr7N?Mr|-!=5tKo{v$SQ+s09bumo8WncD$h{d!KDIHAfjL8N3I^&P zLr#GOCqP>o?Mbq}zz9v8rX&K~d4p<0f7Zdo%Uqmr?lX5-PRW~w(k(xD(tBrppiBBp23+( zXsZ;jZLxZ2fLe8dOD?;DzrW{0OqUzncJo_!-Amuj+QDr+aPl6mI{#*FzWl|k9o)dc zzz~zQDQ>y+R_@(@JN?cY)(otruXlh4c0Rz&>|IUp_PLNJ~y&Ffrrt#i?|R?@FlTB@9mhAf9X&b5qFS=-CU@t2Lfi|6ovPosC8 zk)a~a09IDayE3DsTuQFyq5Q(CJjwBWT3Xj61K3?}OBwvJLK1u@WshpSz;@KzHWNS%TGtjw_WolW%nz zC+%l@MQC&8`E@o0%*?_xpZ?yb7_W{|OItL&kh`Aw7T5LP$OFgj;ggSjj8EP34^-<- z+U+I}o%lX)-tlfueE%`}CKctTgJ`E@T9T8wkbnQ`|Ah_18yM_a#dvd?{;0%Ad5&aS zQw$3f+#-3E=U1-#6%IV`FrK!_XhlW~7F3LJ1Tug$W7t*QPqgniVlF{+^PRLKP+Ad1 z;5H>rHNlG{Di-t=U5*@knz=(`kZN?2kZOZcvO6f>5!h>?00^y!whSRL*xg=5is8ud zr1BBxS{ouiram)I?8gK%4Kh{+ zGv30l*tBI#u3Utt7D!gxXceQA&T>qmiKB#*PftQ>h?+6kiiho4r*b8Pz|Pv77q|=+ z@?<=lR@*0+b;xEtvN=gUZ&AoNB(WxmH9?S2%YuJHFUhttfgjMAn8UU#oMIW{Ycef~ zEEI4KwaJ8v3>J23Bib?HXoI=?Pk>%b{Sl`WYs)BCiv}kE+gb#Ix!F2)-etbtB4~$* zRFK6Y0nGp8?#;t(z3Mv8&syu9_I&o4?m2h9Np5cDgfJvP01H%x5^V!0j`&!mZI?qe zU6xu(S5uTj+xnD>+7DtYs0}D0B_Kk8K$wz{Ipij}L+*I)y=UC>e&=_s)qm_W?0fD_ zKn2=zKhJsgIq!bYJMH&fYkk-6J46NDXWFzLU4y3+$}LF}<%q?cN?RgYhOBQe*DK~sFB480j9u}igrCmObet?SS+PAfi7ES{Sqg`5b0R<4?T!2j*=K7Hj%nEqq$4n z)FiWlzOShcBw58!PF!qeuxkcq(nm)*RiQ{HVR5d2$TD%>L(GBJ89SzC$m4=DgFY(P zWPV1DV5(API7o4GL3JP~l%SkDSl?2=smAHEEu2h|YmGk{ps>vEt+IP{blrx_8Q#>$ zbtTCStF4H*Ebs@GAeOjVkkti^s?V$T|0@nZ^*D0X!LOA`rY&!M{m*gx^KRR;)BW_9 zKf}NK;QvM=Q`FsnqLVUJonuwD07DXn{K6alGmT1v6H6!g(@(z(zheo8E{6_24@WsX zdicwT-0*+@(FeKVh8uX|*jL%LV;6t*u@7>`3+`ZUdJg3(e(kT`hD0zhF+X_gkMfm= zKhHh=Pw|H9-@H}Ic7{PXsu?fRZZ;WMd;(5GnWe24VMbp&1J;!*mdAAn&HgMD5*KyNP9OIpXWyPMz2>wE)t`f zORuwCznWLoB(K=3X!vqnw<5k}wTx3aQKeQIV?ld>_OFxIYTg1{i^bJwGvBrkGq z-hVUK?Yo|*PCvyvzxaE!dM&!WH3}PYTk|F8LB_GQhmjdrZMgl=zvc_w&++F!{Wtv5 zAO8|-XP=0iYP>f+}D%vMihLUw~j3TRmO)}MmXr18;A6my z^Dd-4dT~3nAuitt1l*`}*zvzF{#_RaT^RDTAnu3gqF`{gMI2@{gF0C|VcJ(@jS^~q ziO%^Iicp{j22pcSo{uz7?*rW&WfW0daAt8p5J-0I zsM1~0c)nrvO2zP&CRPfvte~^fp;E8YURkA-moT1>QGz5Mp!);LjVX|tXr+yaGu9q$ zW0&(S8u%rXR$KRpYPd9By^Bn0^iocd8tfs3Ur6#+PMBK`UN=jYYYyJ93sYF4m55WP zE}$atJA#gvl1NKAbjZt~cS7z6D#s0RV5kU%iY!jm!L7JRz!b3O&>Yz(&k<#sL0Ayq zE@*ZXC-Rs|>L6Xkj)se_ScbmFM22?HQskD2n#7hBl{U2JN6{EIHC%iBRk*%O8mA27 zn3?J3rBxqsu@-V84EC~FAlv4dHiv5KV|QyU=Pst%te(YxgMptSWnV-HL))ULQAEm@T|by@38lVGMR4>iKcZRN6kAF zZcdOo_*PNLUEH3)x|$-^bj!s^`~yTKgZ2bv*Fz2Tdhit3bx%woA$Ki7p(qa(^`T;- z?^4M|L0skBrHVs+D5+{ms0&(w!DNz#^%1#3_MvBU+)(4xTzn}oR#3AF--5_3PDOzb z3@NCe6L>uk`%569o(aOVK*R=>SmuTmY+-0Bmr9~&4jiU>F0K)HB}voune}}tB?noS zbUjV3HUHDq-$gX&ay~o57oD>#<%{IY13vQD$2faxfjv9+Fx{MH&-@;)t{&j2GmrA7 z7yk$?+v7}niuQ1TBTM|~%YTdy-2Xx5t8*NF`Vmg7oMI?*0>8vH*IYwEPW$wET;(t` zx0kD~KFF{B{@eJ_U4O)x^M|R}CTEw&F*Unv!!E)VIH*?L-n`!#f zWMRswFC62{+6AsZbUh#c{71R3ZtzNiT;_N#5~pv|jErw<<9!2I@GR?$ zQ>F?#Zr!^f2p@rsxEN8Tx~Zj?S)#%c7HdNgq6s$ zmRJ%4iLn$$bMyY|x#f!IG20x449+%ZdHEGD=gqgjnOEQRI$m|{YpGTzc=gL)Pg?ic zf5nYFkRIcU%U|K&yx=G44txB;{qJU16!3z5-_G~F_|1I!p}P=$%db7~-( z(&GjG9h_M`PBU<5FP~)4YjMN#zm0RI!_w{^YttD*LA=YNw51bgbp4p*I!Rb55Rt(v z6rSr4c#1sNWLZ86cyts}I^=oI?A#vS@qfOPr;ZQM zU=+$K+_fAz&_p8Vmw*1Zx$nNu5-q2=Mv%IeZf}4e3eqg(Z1*Tj#gInsF+aDPAG!12 z^3dZC@*h6p+5ej#PV8?ZQ{L8;jx$lycEW@>9tPY;U zDnVuFkolGjjcS5leIXM`8V%nooZ#w=zW83rMCcwHDgq)F}juz66FUtUI3ntTMp1tU`&kc0_6a$LkjCM zJR6~V8mSc1*G`l6GW@znQ1v$_R^$c^O9-rlVMDPr=a8C$Mtd}I;JDyekBaYOM9$(I z#5YfXH_D?+vW$AYM!VkwA#sE92;3Jrj&yJ<6_hKnVHYnKbdL1N&&FHz?(O=)ZSCKl zI}cL7vQDMy;Wb>mT|Pn0XQtVth&74G@CpNt#AcRfPM&9G#{~0N&C(Ys+S7D(hHn*0 z2|OclGK=36R2+xunqaM5(06m9lBD63x#DF9@LL7u-c_s+{hYi9X$2fd z5d{Sf(3hIQz;NJ-om_d#ZggPTwSOnNq$v9V`}gf+_r5tCS0SaqbsZ|@(q+R0$15B{ z2s#%!bk21M+adk6AxW4LR6HCy)C-SZ-HiBQ#(^BV^#ZHFZwpM@ zpcf2l2Q`zqOIX(AlLE(s(96MCWJTiSihAKu(;gTQ8jLTnLK694j39R{o&jmsi4|55 zP8e35oQ84mbA=V)WP&izB!xli0+Sn1f|7BV9J*9<7`PT^2$`Ex$~?5NCfZx%!|qtw|% z8hRAuhcm)P0kK6@Bw4IEJ$!~Y-1hw(n7oo7y!CtewI6y1t6_(QaFJt+$GPX3FY%Hq zZewP0h6B6y^W87GliP2;jc>p8JNVI8{utl&g4c8B9d~m3O}BIP)Ir|&_wVDoU-7*> z_S9DyuCDObANdsqtv)Bto#AA-KsEPx=IEoGIQb0A{o}YZReCn#3!lE1SKaZQy#EXT zFAEC`+;sKL?4H}rh4UBq$|GOl@y8ygv(}+ps&M}o?&ghm{t$ci?j=cweEbW4%^SY` zhuAZ@kL9H$hDk)H+on`1)2KH#AK;a>72fk#?; z)-qRLdFWd*(EcA0kbEmQ{14ja_`q3weVFlbG$SrEh`&4s_tIm$oVU|>=W$tp^DKa3 zyNlL1NZ6iFvfTx1`|oUX!MYsy*#6FCz=sf*4!O4~6sTkNDCfsTb}A#j&&`k`_M`(Yccqq$3&n|^5WpE zzzLUd(iPn$P_Grx*^p^r9h;pL&d_v&P=WL0)v-i|Iri zzOwo-s|zQIoKYB}tp&X0mfz*jOWsWP(Ff>HwK+MTlBj}5+~XufM83f~66*?tf~+Qy zg(TanNWz?WsL3V`x~1{$C^N-#CDuv=2BQrI3Cdxu-QmRX6C7PU0>gM@VXPEdTcjF& zk5Wnmmbs}Cy)dO6M7;Xd-^YP#Zs2_XC?7cdA#%4MD;cCGM~a$kZHWHp!6DW=S z;UaS{`guCx34{z$1$e0xf=`4B6n zN_FNcRz-tjJvh>{Jl(Y%=~+$<;ncu#qHj6bAJM1QQfQ@c|DxsoMZ*(omM7bWBW=sE zj^%jA^2Dm;;bp^DS4Yc^bSx)_miCCL_BAUXR%c{O_oKTD1b7S{{{%^W2aN-_;+7la zVRvLs6I8#c^}tE>NgDD`k@k`GD#p5_)jGh?+W^P7&SNt@d?ReojJ+F6mgW?hCK+T5 zTOmbO5DkV@$`zawF$@LjmMY;uldTkplEaQ$=jgTuIIg6*cY;#YA9GR?>y?moaq~J5 zkwQ>^utTpY2rN{jhjhUYB(|<-zo>yNJDUxM~13{mANApCPu<13FK@Q^~%tknq09s?7DvADiVo)@ep1DZjZ z!i6}@ICr*%jtX*LP>B?{3dah(6-ZM}>OfM;2$m&AfENj}3kkjBeTritC2u1p!IETV z{XW!Gq)X_Hm_j;*a4{!Y&6(acMSZr8U-GHftGJFsZK6V>S;cYHb6Qajmj|SS1h49E zw%ZquEU|cYl|0MYdDR@1i3&)_(}Fa~(b^D{M-$J3K}c(*%dj7@cxHuKM>2WE6npp0 z(G7>3U0J~?g^JFM!7-MpQ;;gjN+ZX=-lcjb9wE+HqNhRR0>=nyyFJROrEdz38_RY5K_ zMa`urGt!pD@3~Z67hwx*ZYdl%ibieZlHs~86Ygk0->i>HWE1tRQrXP(48QUdzry?e z`}-KQm+-8^Uw-zFX}9~V_4}hhNhwG(!4(H@HpAY}thxw&5Z{x0eKh5r` z{p_E)k}wKcT3+N=-~A4DP3_?`Cq9QP;CU0bFgZKVnbW6;b;8kw!@TXMf0KtEevp#y z^T=23=SP0{E&Rvd`}e4O;f??5hdFlkX@24j|Bf$x5I*uo$+h;jP@wEt|G@$lFx^hZmO9I1iPz(D;tstU#z=ZT^@KCyI!eT=VQYNYzPFd9L-So)Ad1= zg;oM5`j+L`vNW_rxgiTXWO|n3nX|a{X`G<4SuJX(mW3fy97`_+S4s9&M@jT*Lz5#e z|Gc%k9X|fqk8?ggO=BQ=Xzg)=!l5K3580{)6Vv}a?!f9{uAXls_c z&(Pr*k*ld#$u3!Dv2KV|N)QPu13{oh<}2Ck1;6q40OOwlX2aqrEf zCyt`cC_kpqIeB7{uEXPBeQcDmQn)xa!*#)8utp)q09R%2^+b&$)cSSqcMtX|pz35Kv zyYLA_w?O*>;}~w8eGQMa?}8}i??3*F-1eG-?7uqZ_-ctgyY6B4+yraq1q+WXA__zE zr9VNkb~m-Xw_cC?D5oJzLgul_w7vX8EHQXu~8+oI2-MQ z08fA~N8e^Q9aTCuDZE2jlXrMkY3fnJ98M~$tufCgD|N0T3R zH0xBItBqxQj9TJd*UoQtOj3@*swT>fP5PD5hF)vPYP*eG%Lrm9q-9F_=)zD}K1Ez` z;`}mhBv1!-?sC!p5QHa{v;Fi3EuUY-@^7JoeL{0ET84r(*3ma z7CTD^xaa9lb8!Az4(z>xLsuT6h%?TfKh2A8`!;^#_kW2W_@4iTC>(Olp=&ptv%cxv zrhh?nt#2yIdG5tu7d1cA1Qk z%TcYiS6H@|*~|M8U$z1=>Lxen08(6foww872*PSx)l^y*pdEZqchFN?0<*(#*8&wh(^}GPq!^+hNIc* zXL^Ruoi{wXVt9OYG~0bX8i9#i112Y2K90?Ej7dp5r*NDAH>hqNlUdir#Ooo7RbNnb z+0=%NU-ymIkrPLF^vEMT^5jF^~7gr-~VCG9Wa!nLZ+5bX{HAbaoIvPIzWd(-g07cgb&jx*oQ{~geikb=y`@!V_Rf+H6YOHn z>hQDdC>gq^Kg06E`zg&inBV}dqkqS_`+tsbDPp*Imax6Z&O3gL^5jm0a?#_D)cQc$ zuti^t*MD*YQDMpTR{qYoM(XQ*nW&4&6Vmo+5C&5uc=cTbyIx9WG*um-o4ax6uHfij z{U>yiP$^ZwuMsro|4B`@qK{`6aA;HI?`vlyMFHc59#eP$AoT0~zXS2Ie9z?*4e!vvKZoN|TP6+?QVpnBU5yt+%!tRPAO zD`#4GwG!7_1VhBG_3WCsi`<5`zqM7gYhM4-N958y5V3wxka7g zVmGfM)2uDE$)X|EWl72Pa8n1{PMKI!bf4)Hof}+Ij^AEA-)Ib~H%;R1s5 zUZzqFSUA_gE+ym>7NZ^((EcbOawl)vcz>D%{5tO$#aV+De?m@Ehj@wYrF+Xx$vmO zKC%ubw{(Xg7tXBETkcTnj@)L`z*0Dt@^l@i=HpgyvBd2wlB%Y!G=*>Q97V7qC=DI_+(Qbr{(u;K1(C0b zCLBy?$ShQ~gP%!^w)A%x1{0Pb7lgT{-WFuOVeLAB=SzZ2VKakpCGm`=A{~YmOHo*+ zI+DcC3F`*gH55Lq?kh+pEpAC+OM>2%#=4LwLC@9r1x)!a<It4a zb(ozKJ9+Avr+;r$x z-hBHTN#mF|e9s%0ZZ?>zH~H&_-%lYdQW}n~KF#U;1nszws9M&Joo9G3!P!y4@qCV) zJj{hwi=>@1vtyctvkR0e0U>?vdf=n#^)ZJ%o!Pd&d3fElMsjnksW_aVoqQflm7tpf?Q4l2||0{4r7$mX^$b1qhn?PuG0 zYzIhoomamcTh0tdw3y|{66Tgc4oAC&<6X;BZNp=$qxUmI%lRQ(7{Y2i;_NSmmJ8v? zK6u0VD_f_SjSrl3IzWd#io#Ogbq!v9$3@?f9XVu@u7eOqLem%c>S7Qw{yKK@D8Kh- zzsZeP+`^a6&PHyr001BWNkl?&+!v~iA)uNQS_z8F?XO=at^%iofN9V`D1@hspHXi3nrEwN^OOy zSh}^53s(_VumfKGg7cOSu3G(nUc3wTt(i8VGdG)tZ7)xR0W`>S20=<5pY|s!3J7&r-ri1#& zR6DHEm@FnbaSt#+ry=o)&(nMIz4$ZFr!;jX`BQfj4p->6mMMxhiX3&ui=RPDU0!?5K<8z9@K1#*Bhm!dWzWEfMy&KPd5ou0=Ssa=6=n=rM>+iZ)2Oovm z(tB(JAB;Uif=k1S_SSPd59~f&` zXsys%X<-V(&VBQgYi0WFK5OkBQ_~ap6^}GbiB@Bjqu6)HKAif5$8tTR+VLr$w?wrR zzX}Q%)=<7R;S@aD>1cfa@qy&(bQVL}(l< z(bAAOIju%c35BBtam`}Ma0`!GTt?P3xz30^gPjq`fgukQ93&Gy^pPamV5^c+Y|*|z z7J>yGGoMMCUWvS|DGx2ix2W~%j_O)eC&wui=MUvLXL6ctpS+xr&$u{&q*8Y1><6c% zm|pS;uh4`Q%~a}8YDtp1rkIdu7iO9PZn=h9gFKJv>@YMgIVkdDl<#`s@ES zAHDx?@tXlxs%eH^jwuXB4?oPqXYS)QFS(Q7edlj+{GkWfeboVW)#rHEAO1JmrbTZ$ z=Og!ih^h(*Kbcck9NGZcBj!Gl+i%8>tzC|dR#wK4lo+~2lsh_Auxw_=k=b?N%+ zBUmwJuscr0+N4@-!V$aqxv-a-rfpKRE<+a+TUPa7^T5ZcUG`b@DkB%3OX*p18%4_s zdy&RsV|~dM&1r*MFi!C@8F2^WeazltNwvNl#E%33iT#l;s zo9AxC=m70{WkIY{x5h=`X6#zz7P8FJ%SY6y^Fxa-M>EoTy(*CvTLVUG?N)Bex=WNX zqvKNJo#6U+lt*23o+3?w5)KGKo~I~lM)tGo;Aq@|Y&C|*mMxw%Ja0zQ@YeMzYzZ)< zD5Tr(@g29np6`9loxK0izd@}=)P%!N-T5Bt}S$s4L^&Kf^d?R}`~kc*m&)^A zMIo0N^zVVPW%cPts8n7{FZcx0D<1ViF*x(bh~QeHXaK21luCvh97t&1$_YVAhrRn+|{%HC|hu)mCijz5wzhCrdMe zl8=rHq${a6>tLWdQA0Q$SKM(BQy83fJgT%QK@>&|PY*Cvfj<*asg=kZ1#uc9rDXYB zi@mq*!Y_MUSrTJ2>X%NuYz>mf9h$Hs7cFZ?LTt|;RTPV|qMvv1LWfNEDIcs8_Ctmr zYh5x6^=#lnSi$rwcB8Z)IXXaH$YENsW1@;~D3mvH`&+Xa)`v>XA*%`KXiNszrxTnH zLh@EdQD_VXU3GZi*eM)qY0j1Dtz;Bchdn!*bowc_ZYVoGb5~DOs(2U+&Tc_yRyN(q zuojUE%BL-zC4Y^!h_;p-XtRL+havsDsnH z-mVKvUK0oxY{jA7uowk}N}2EbESEBRyIm$-hl5_3A~PrnsbeS-P1i4on=UHGeh$7xWR@LCiTTh+2Lh25co9TpgECMJJ!(TAuLDX*qI!WWByL*Z zmlZ4fEy8ihlqQn-C|E@a3Sr5t;nsb#1VhPMlu$@0$`X{Kw*&H6<9d?RwWt{Kx}{)IaNldl0lT>X+hA1N>36t3fc{ep9&7tt2iY^R?3N+8JVvsq$SHV=BUPv zp|`W3YYJRX;`!i|6{SQm->=eK_K+)v3lkw{dIL~`foIs)DI>cvgI1eLZ4yt`c>IyW z6ss9_wV4$y@VDuUh!aC#p78;?c$QJ z;8HRCw%^C?e&x39Y*ad=uw&wUvE|~$*tw7GXXCR?3YXZTXQgK3&XtePQnP)37yo_H zce|}hquc-)R58|2teqw4oTan)D2;tDBpLHVLUv9CmH%g`;ztzd4?t7sklJXuxHjh~?Coh+`t4I>dI3Ka7~fEtanS{InmN){Bz{3=%?Lo& zM|ZK5l9|0z_%kKe7T3s!8Z8WyI~%Mm_0UTxst;LS5H<`+&5+j&rK%!~3iez%MYUO? zR4d_>+;x<@2Kix#KMC=l&eZXrDN zF>DeteDs|N?cg`}6W;w_ac+78VrDOsFZgi=r#?qe-AUSA!kgHQ3Mzo5Bu-KlU!o@e zhVZL@Kz-&2(j3L=VnmrT>s1UhR^2cbJ67qi#;z|nn}2UsI`p{3?mGA|;{blWvVgeA zQgyi6CtB=M408tAkm=?mgD02irhVeIKKa4`Z=y<+M6^yWQT05;a!i_o&=!dj^gBajBFM6w#%vYojIx79q?vUA`sTd~LWxbAUMaU6nZ%fLme_23Bui@{ zj#p-O=wYiqj_2b^kLbZQvJ3HLx;t?x_&}gs#jY3aCLd&6=(XwXhSE+S&r#%7qY98q z1wCI=b6tYEhjG9bmR6K9wW<&k0z2c;w<)shKuHiJl1Wu2UrLw@0}kH0n@Uh(YG<9G z>`|(D*g=6;8;!lpnE~mUkhCzQ*~pGtDaqPuhBgvc8j6V#y-s=(C$=58c_Kt+- z{UoBBMRZzSdMiDIkVr=o4ioY$AKfcJ5~sM1v#AvuH*>iJxCyA2E7VFQ(D20ZQ!IAd zL}A9DpVIHeB&lZCp*bR_z>5UVa)DI_Rk>s4?O6@v&>*G6>p(4c@jHfzbAm7^Xw4Vc zTwt|Bw^1;?(?=B!Qd*)ZO)DF@a@5)qGiRB-xrVdTr|y?nRS~Okh|+>|QXs8G4K+og zQHiB)T+Z%=de6ZRB~GRYr!+~kpw_nxyqtOnRx1J}@ua1-2g;#?QwYq2GirB+1!%$I zVnj03_(qUSXiQlVdWLE&!IgxLCQuF$1&Oo_8NOuv3c@t!%3aseN>;e%nNM@qeRuKs)1POT zyOX=``Z(v+Du?E-rEB}NJB#=Nw1TRu5WYh;%<+ti@Fck4&6GKC=Rq#4E)!M_S=}<} zl(0J#_1!gs%t7TNPx_@SWWp&kNMo|pP!D`$pePDMk``oMhBph%hD#b)bgxUYHXvE( z(C&q(Fv6*O)TSq}NkO_4(^+hxGQd>?6_<+8Xr*bbuCNrI=kU2Fd9?F5pFRFrKK1k` zaJ5U|mhfF4N4ej0{#6u(JowQ4yzqs$i{gmGPd~xj>>Sh6Ga&wXib=k?AjCe) zs$WB;@tnbgm+A+eOE)6Kv)K4@8LQsQfeCS`?eAsRd6soIfX^kCx|^WPUKBzoo>d1j zK9C*(l*<8#@q}~4rQn0F6M$?71snaf*pZMmhk)>4g)VTfV@Xe&>65{{tUjdAZHf>LS&0lV{crla_tf)|Pp? zcbp6P3SK6N%bHwedb9b3w-X%Gb;dCv9l4z}v z%aY2fM|ssH9~yS%0lCc4ksuI0qyo#quDoTQqMs02jT>1UPohi$nIUSYbo(LYsK9d^ ziX{!9A#GTSx+RD$^E)TmfAb#p&NL8Nf!nB%40EDxOctgjVT^PY%5kt}4YJ1}{4}=k ziQ66A+3OJN`C8wIm(5f3$}<=zB|iIQY`=$DdlK#YxCNfDjM=S@4dex^F0J9X4#8xFiJcRabC+U}VR{AiMh(vkNPSIju|oolbHbA2AYTuuomH1!Nf_yOu0(! z0@OMZw{KBxLn&2gt?8fcV@@TUJGMgksejNE;g6&?Ih7eXc@TxXAMvla&UwJq^yBU!>jY&{}Mh z_fsx(TEvGttf>g10&NXJ;FBdetE(M+&t0eRS&Y#rr8b=!d)*;Tzf8Iq6XXsiA32*e zmn7**M3EHusiapcxaF1Cq2x=OZ+BC}03CuOaXqLraCkl0+1l_fMCf{te3<^%(W zb0R_emT)zpd_s*B``X1ZiWR3I?u3**hYR75R0%pVhq6Fd6navj%aAo;t(LL21AOfg zB!b~I=(45oV6Nv-OI(_fi!u^N7z+6Rn0wP0%dP{z?{~JlzODAE-n-c(o1_*>n$ch^ z%hJS|!Nhg|D+ug39~|V19UxxL|TK3a~ir6kOn- zrO1>c>`S~8)QLbupr)R1BDvF>a%VDOWwC|3RdahcV_rr?J&inN$ZyPiF401OwVttS zXcdYw_V~1-DJj-i;{#`zN=@Xn;JjcE7UgedoSJ*gMC$XTK4+8vs`lLh@%*Z;45GI z5-34dO(p=MS|RQ?o;y$G8_HJ0P`-(Gf_Nmbslb$i zI)+Bh0N&-?&E}SlZiyFxLc| zHQ}Bh+!n}BDr6Yot!6wdu-_E z-z1I$c5m+?q@s6rfu^!3t&SO~8=9RzM^3(nFePQVgh{%;kTEvD_hWQ-m1^Tvg43TQ z8@|b4>vvGerzmf}NjH)Q4}9CfC7j;H&dNfqlsNj)l2i8)F)@`svB@BE3f*9QwD$JmZzz6&7* zbzPIBF|OE@1a74HipgwVxzF5j7mZ}Qm9@))DCcS3VAxE zb$Xuobd2o*9Ze@nXe5mLQCZ%0Y$gdrH|*{_p^oy9cAU5KjmhneCY{q|@oZm4NV6fZZ(FeRWK&EUV`` zv{xhU-t9B>HSv7Fz*gLGQ|ipoO;WaZ2l&{dO2O3B^i{`y8-+68;Mz^+NQ z`cv{bOYSUrSg{$`#FyJF|D_ew*_is~h^F?`jian)l2W4u!h3q{5MO}vHNI`B=Rt>x zI8YEkEuk_FpVzduJl&C*?bn|9xP>kSVp`#_*xX`ch$o)9DcNmCh(@sS%3ZjXvA?y) zy-}a_VV^9|i2_X+8njU)?S!w)I>ckT_o}$%|&0AJPi&0$>_61=rv4JG4C3#-4v<^->Gy&0$WHMJ%^aQ#0 zr;XfL-rj`dwk;w-V@B% znz_O-pKIC^g`JZqBS-^9yJJ}PA+50@o406_;yMj015J@SR&P2?(ctDa=Uj^~ZM@92 zH{Rf-doS_Y_kX}I{mQ3Vd}@I&zxoBj1w-0bbk|b47u&@1A#PL?m=IePG-Hcb4RWVJ z6wJz`S|0h)4xKBf3EMGMyJ6w-S(5oKTazJWQZq{B9@-( zp}Zp~6iPst2Q(5~XsK$8>_$Y|A_9%t%McpI!vWq)w3aAokg>)uX^O0&s!H;#BIvY; zdz}-5End(s`rI1c=DWAQ!*||!ncLg9S#B+phAHY7&?^a6FV1 zFCI3{Kl*+B!=UEjGR7wWhZ6}~9{`9v_FUpYl%?ck!j(D>G{i$PrzaWMB?xcPau!#6 zUw-w##4a8+$UiK-I{}^qTesf8Tr)_kzen6UcDu z9pcs^JJ-KXM@N{sGi<;8E$YG&ch=}Go<$v=!#yV000BF9Ug5jn`1{Cl%>2eZcCP<` zLN-XHnBFbfc;knB`$vC_bCNo2IDh3o;h9hVJ$mz>=FYAEi@SD+>HsOqIMQz zC3*@r^u$h)P8EA$#q?gubXXHggZGZ619~h_3L>e94-~!hMNK^{X!a_sx(UU%P+|aT1)*C%|7wwQ$goAVw@z~D zGnn34{H?dB!lw!6pJA~1hb-2HYTFZ>e;$`!VfXvLP1=rm_T#7NJkz7M+CEC7vW=%2 zR#@w3Mip6B5wwE`Amb=Lmm^Sd+&J#0H7d~vEsuO5p5w23Fn%|qnrc{LTES5R`2!F# z10}|2w9zDKM0>7<4m4pB5hMXp&3Y=5#SW3vG}4nLp4!$#qD^qOK{}9UBgATpsF$Ek z1vD6`2)hxzxh_dNBrIU*LXRLeC@mi}qCW&a#IarwspOFy3klnI`ZR^5&Kfqa@3Q;e zKEs_6*_{D$Cu2IS$ZpTt&Y!ptcEs*J_QMQg`sQn0To`gy_GPpr{Cm2&RcRrYU>VCXPYXtzUT=8O+sj=)eHF_+VBn~}xtiBV_^c#Y0k2~YZJF@{W?rXwEGwNCT zoeE`U)L&~?6IJlkg*lQiAzziJwn-k(o0jd;q zYE2kKuv?)=9wh~?6a*^~)K(ZZ)!0M3TX{s5UIiH43uYoH^;6CftWUxhMK@6mjO%8I~895JIqi z_b%Ui{X1N_^gO@+#os3iB371{dFg9k9CPs)Kp`G7_=(3PWj)-iejJF%$H=%&NT?oj z98Lm?hvRvV%cV~EPwpGHZNp?VAdI4;DA(gH=MP`g!=UEjd(v_SFv`(BUP`o5#7TQL zskjd~9=hh^{u6P?%&0?_MtW%XmN7xd@-v@haQ*vCH*OH0xltT}S8KUn5+- z$o9Q&vORej(+QEOM>xwu?{j3=|20m~iFL`)QcR>(xr9(p1v5vc?tn8uFQ zrldO%_)ri{CF5lXgvR2S{`eaNx4w&-6O89e7|%L8;ygf&J!0ZOIZQ0+PCP*+5mFwF zpGH6EO|SwcrzEX7LN}5og=SRI-c*FeEWHw-NG+X#BpeGQX66S}3O$tgi6<=tQDzVg z*s4JXpoAx|FzH&fR1~>GGy)rVgcA5Yhm{g{&|sCv?$+oUiuEaZKPP!Q;iG@~DMTR1 zHwq#IE1z2B&Yc|wL5U0@T1>!t;xjE)pIK%5CmRf>6Iz`%&UxyxL5Bw2iIAHU^8E?H za)^|7@zbwBH3GeY&_5d^QjhMD-Ft;%=Q_#8H3oz0Ot!8w>fc3129>OmxFz(R>(oh2 zIrkYhzWrZu>V*~NE_QHAaOxw=4~qW|{TwLReX9=*Gc$htA#%_#Z5;jghP<=g=kD!2(jcI- zno@67%s!QI&DHlYraF0MCi(s-`qtj&+f9N*X!`i zh11LtGQ2ZjI?k~HT=>j+c5e2WG?vTHpJj1n4y9)D((Ro-gYlT1(U8~Qy^F6M$z05( z=T33%(h6l+v-$20NjD}=LULE*+o00Z-Os0mAQg(8rbM?5-6F)c75z@dkebXmnh8`+ zP-#cFFNnt)bpXMR#7+gS>lua>$)3XRICLZ_hdCBWVl`MdODM>}6d)@I28yg@K?@qy zprj+rHO@5H%#%fssfONsK)Y7#yMoF%vbaVHMO1luBS|<^$iAfN)r1{`u!rSUfuO-JJp2KXII%hm@?j*VsZ;wBl{A$F9;(@QcZXd^1PwlNSu)~ zdR{v)f+BDP88{OVv=YiuLDEf0+8ye$hG~hcJy{9*Oa~oBxY8o9$o&TOLYI1yW2Hm1 zLYgW^IgJR_$u`#G1FwI;jEu@L*LJV*tsCFu+TClUCS|3!@^3U@zxLLfy!7?2@*n=K zze^NEyl~|OoOi@w%C#hZtslWkTie@oyWOArKHe95iJ$F9WUb|mH?Q*cyEiy@_QE4T;BhAq zkMn{&282A$w2pu<2x;n?wAEr|ZH@7GL>$LQZ+@&- z0fXTHyK#flzxE%Ik9SCWr_e!knDFy>kBn4?^&2lScmCgI^~zsmVeN15{4f3IG*v~= zEFy1xnVlt%FC2+!h^7Mf04N)mr-Vf;P3R;CCZ6wh?M3p8PDP#d+NwJVdtWF~ADT!+$rXA38U_`@!k|5Uv zG5`c7gVsp0)0Ir-nAt6zzNBC)iI80q<7TXvAP#x z?V)+SZm2D2EzwF)MvkmEn-m3BaxmYpf65U)AK-Q^K`j||DunSgYfx4eA)y$S*s-U1 zyCAF-K_O}SHN~Q3Wv)f@x7#qva(XJjEE-B2<$DvH_B7iC`Cdl%R2x5? zQa2^aLf2vOmF3TQ7UtUSGdX&JWO-NQKu6LaL*$j8+zRjzgf z3lTvw^B>mJnVJ8QXw>7EI;t^C@v%6+hZbRu4Lr@T#3Tk4s@ebdai-yZu!MXd%Nh;F zFszBJqN7{*?UH2EV((@|TQz#Oq~!vP5cKvc^3oDqnAHwUc1ni6VscP2%qomY=?@2l z2af6fm`Pg@2*vi>edf=!G2zVotfV|C!4fBdk~lKU!+Ss3V6ZWw7?rraia1kfAxV1? zqrHs$#t`55M?W%-dD>2-U`a{5*v2nNrZ^7roJxB{;bGHKM-Y2OdrQ$W2IT}QQ1}ZG zNfB_cpEFJ^ZEaB3YKqEHu6R1NK~@5@e^~P%JRkY&CEmTZ&6!gREIvQS&dWR0{fcm? zm<%TPGQ(|6(L0W+_7vr89w?-wKI`!Pl5TAnmzMaMlwF-MI`1(`(d|T}ks%oi#I|M4 z&5^EGtgb8O_B`sHDb4i}b!BOt>9M-HgxPcK?)5nsjd2H#fvBjnn)cA6G#DeXdBtFV z%;x4UWnL2mhSimM7P@WDuP$-^>@sIhFQSZMIGFP0)!XEoQ?~E***zE#$055n_7Ru< z`ZM0fQ1w8yGry2Zo+JbreSMob9r&GJ-%dN-IW{BeVvz=WIWrFLL(dhD3)< zvMD;!1WwVr=V<2v!%2l`Ifl!g1cN#g5Iap-*KBW3=?YCR4{?Qo#$)S}xF^}r1?fbh zw7{H;P}bu|j{0tmRO(2cVy&Zg4RarAp^TbELJChM8#Ib+Tr=6uS?YxN13|hH5OxKl zqGGGANR|wzPNnQ*CE0r=!Nrhv*Psp9&5~jcXho!{WciNdcCRFT8?qJ8nV(3yosgpI z$z+2;vUT2JCk>G`Xa@?3HiBv0aPRg6(Lm1`o(VhL_7j%VhyJP17)*jJf*SYrOEG4>LbM|6sE3EO}m_wLbB4 z`8gF?AMEA+{SRHc@g_}Kv#_wp!r~%<34i)2{K;efryU3Cx?wmTQkEq*Z@tT#S6|~Z zpZN`*y8QIfCxc#6RgdLDiJxP0ro^ z4W`wQNj2cjy{{cfQ|?D_9u<%A0Ne{CFRp$LgkT{(LoZ!LtBCh*yh;DwP1Y_w$L{_H z&wu2vpiFS$9{pkef<3nHj$fmP&5fH3`@57yMq~up!H5el{$=7;7cV5%J@g(PLXr`N|)Ck}K+OGuin=`p-(z=HFsGew(@Z4dis!@`mKhKplEe9Ix7;9%ZjL(RSU9GwUjT|nh5R)V?hD9#D|xFHTB=C99KjQmAK z92%zcfckajI={*KwSP&wKgPZH2Gc-LV~Dfa@5D8hP*eoU69k6FHh3=x0)2SHg6*(k zI6w2;oVlebQ%@elG;{H}#}dh-UWL=iDr`riv{G3k^bRR3PwGO>0M>rN&)> zYz5@&7Bht^@zfD?tB}rz+U!pTG*Yo_dJMM4Di6(-;R-zlROa(bKL?H|%~)>yjm z39_Gjg%xWEKGJ3NFRf5cYyRR7-lVD<)-KLdRyA5HKJ*)xafdz*XFY>=2Q>R7$=McW zK0+CVvySQdl=N)t*m!do%iVbDgOce^M(3H{jLkk;u=9^bjRW;Tj!0%vtWhgC0Y1br zNmhU7fMP#me}9BZ1!_YOMv6LhIOSp2(XSd>D&h2VEA0QpHmikaARNv>*>!|h)=*M2 zeC-~MZzvK+ku`L;HR@tSHKCSQ9!5Puz7dz=*RDqB(wEW!+s*BcW#cs8wcc*DK3T$TXM0E znRXqWB*Bgwya87=OzWEYOA9Q|b?J7Kqn~G0)V%ZVCY#%R^cWiJh=fEHV64QqBx?DY zmCt8qAd;FS2nicO6T(4U<79&X!l|OuSImt9L?xIkl*C5he1i==O;}SzmPypmI1dvj zqMF8filSl^mq;L%A;~nDWqNyw9802+p*7ajLr*x-2(L(MLpLxCea$pM8x`tMxm=gi-?v0^z^j0IpmL=b5P(ER=F6q||MjDoAql<=dKk6 z?3}S2%z0EQ>D`8*YDl7(2!VGVkvVp3&Tv#=ai~nP8u8~3z zXhYN}dZA`M)TB!i)1GM=<$TCO=9%}J&2CM{1jKzoAsXyngUDd01WgTjK1)vNu9q}z z4>5%{=u z=N7yByPQ3J7OgcueDxJR`76K5_4lq3MiEV2v)EnY8!!DaXP$Y6ySHy6JY0G9xu1^~ zcp_Es;8SC1af$8iZR)yYd1(c$^a;t=-Ss=fafDLu?}53!eus_C4Tj_4jOEzeByF{r z>pdvKa@O(s8?OMFKxV%a$1&bJf*|~bn&QRJ@mgyw=gywztKaxC?M`{CUvYErL)OPv*~#9)<8Z#gd3(4u*!z#pV%_X` z;~MUbUSoaq8aH;o%}?%qiQ9Xx(})7&H0^Y8R$QedY0`Pri*ihIb=;JGKZ3W@nP+kN zG`22?gVt z7^M&ns%)R(_UkOJJkR|gt%p;#?(59&x4&<__gx0tUnY6y7Vein%a!N;0asr9j|t2& z2lba}r2(5FCvIxy`ijsfv=HPgg2A++QyR(`mQE+w#-T@oxRAK4qFGV|X!52eSBL9! zPE)7`DKtSQ7_}>E;pyEJ6y7rRj(l>L#WSBn4jR(SzfS(@|AT5YLP}&clj$g9a8i@k zprt#u$RJP>#$C_e;$e47<*AIL2qabuv=ewQX_O?7VLl59yqbYF>+sGoTCt2ySqjnM zwI^AYNDYIoBN%#gBas1!K1`zqEhQpV$i!2=x%O!AseH$)~8 zdS$b*-)d`5^VvIH*VX{48?(|GX+YBaXE2!Ss z!_I~HvO%XIVGv;R1`%q6QQ#fkjqv$*@cEmFrjO7|pdK*Www$ti^-E+MZ!vo7zd@A- z)lSh1XQ}V((k<>0*eUJSE=^%cN*GN`u7C3mx4*Z696RREb+O*jUTd*%u1DAkk!to2 zBc&kjhS<{6y3j!yg)1yRYmlJ=2`bP>00ANB-#$P(LF;^*d_SWsYl1X*P$+jlu;KoD zyeGRkB3Vh0Mxu;50Y2_apz5Mx_uei^8WD9{EG+iuoaB298d+8CUSHSG$c^eV8$?CN;cXhx)Eq05q*zMXED>`oeI^~%?|~FgazdiWRXQb(_vSS5T`;~cNB3i zMxTn9hL(XUX(s{33XmS%3Yjzw{W3?*1*B2Pw4X8RPng=8I5en3|B$erZW6OO9h2LJ z)rBs0qd>iouu+Ur>SO8WliX2`9IEm}Vx~=XrKOb6BVej)TK}k_rhD#+ptB5Cp$)v## zB<*cYYpk)mvq4YoT6(*la57_DIzvG?nmwnr!spEByQ!z%EQvEoyABCUMNh{Z9E=$G zjG%<5QAEn1f~w^(ABo7jmg1m>p+l5{y}Y2` zluWf_xzMD6X6aIkat+>lZNPNYFf1))*>L))7IjN7yjxJsdxA*Q7X?jOV_Oo&H5W0Y zBgN9DMwgPoa>H&^Qzt1+QKAPS)5PKF7eV6$j4Y=1 z_}r0u5LV6_!Tc=RPqhTCUtVFbVwv_TCZ|DkB<)<_S{AP$UN+RuLNBJ+nG$ME`h1L8 zjG&abxWPpbF7~J>u(cy;NpwrIKbd82hpA#PDv(~_hZVW2(0z{`G?=v%T}lj4k3Fp@ zLgoT`2~|HMbCx)Yz#M9s^9GkS_?AJmf=5=4kAsoQ)!ZE1=G*W788veH_?*Pfd< zZ}PwX_W#0%KKc>btu|6hvMlGH{!jmet(`4?>7&2IAO7C&(3@Z6)4%!|p1$}rNu2Wa zm;RKS*WTps|GnQrO2w&DXYk&UB+2_GYrU`8`-DsUWK_w{?k?Z@?n|`0UEa92=Q{J|IhZ=Qed!~CQF?jQ2mPyHHF zO8N(V@+@O(XM?%!JW&+W@9#hU-o(!jMDG8Rws&?&(-iT9lL_F9FZ}_%&OCt(xV8Qc zlYD}Zl6KPish9Mm#&hwQ1TC#JopzU{#aV(%krm9%&GW^te1Wxk_U9%)S%k2lpH2Oo_qd1v=^{`jqb&a0bW=8fGyV=uqUr0ye-$5stbb}HUq z89g$#J|uB`u)r!1Nb-8b-sC15cYer^zWQ~`l{`wxI^oygLHw>d?mam? z9tHt>8}D)PL%+=F^UpH3uu5RU*+f-x6lHv0?j?`;OvJ;cc>%?A$i|%?aQlt#aOUzS zu+syE>+kWx-~0yztyT68-lUrJDYAWv;Wpjnr!aC>A|?;zT;i~V?f!KalYNwqNJmR- z@IB@i|6R^p`V3NO(%vaz`C+OuLe@7(PNk%gLTo!su4oM*8iSg6V(XC&wB}=`>p4b9 z0xxOr3gRtCF!Cf5NpRpm!9o$Tq(6tc_BOgw9L!tP)Y8iWajDPB1?%?o^GbtO&cm}dFt{K{d)rtk~obB(~zhY zp{>NA=%g(Md;8eRQI;MZ2FPiRINJm5Y5Eh~s6d*4U@1O|HMlQL^S+O-uR-=_kpBdM z2EBlg8Z9e~yiMrdf!-DBTQ4E1*Rb6?5NI-8Ba~#}YzMZgS#N{4WXqmlK~oJXvZA7y zTISBQ8SG8zF13zK;C9>~q`>rMUMrh5l%tw_RMJ{)A*DJ56B3^{_}tMPl(;~mg|ek+ikj)PA~lwSX~F4>i)05A+}Vg$D`fNT z0jDo7kalB~J{ie-|9;+h=MMMo?Xj{nM;I7(HwG-pn2-P36*gbrCaW5%y#il*id&Oe zMZ*VTKW2MN%N-&SVr%Fo0j8~}mtmARq=ho_gs%y@p`>-T#a@+DXP(m4)Cq)0=7#}c z1<9f&Su)5(pj(=;@+cuWz0x8pD-N;}(=q6$4dQe_)$+KuVqvL;cQDLLI=Lj1jy3_h zrHSVZ!C8%3&@7n%tvp16zzWhzkf)aMvSQL?xQ}-kB?aXWwi*8_qnp%Dvq_uJ&B{=tZ0p>~D=Q@77cXR_3~_oStXt^gODi zF`-5)MVVFXZy%8DPccd{EJ|8BK!=(a|N0e_)*Rd#pq{z7_IVY|N?v^93HpL$Z#M8W z^BSZiatfPD#!C%VXbBsz32gg{Qg|{NGG&=_g59VAEl8q(Xewdqk&lU+2mk;e07*na zR7POig4VVoU-S@oVx!4gmLQdsa~|1M)J`%AEqU8fB#tU*VCu1LN4jkAxugjUwl;Vq z`tU=@T6eS}>bHj$47-UzCJMSgUSt&Kjz zw=-lZNP-T-^#KznF-x-*No^FQ7Ga>-stHd8G^xXuC7nXRnue;x@6}|>0;43URG2iv zmk`>BR-_180RaK|Bu6BIP#c``)Tt(KONb?|6%tEL6H0;xRO8X9!C8;cv$Ta~RL($0 zWf76SU#ERSPB8-_;;0RFW3tKDuYQfaon5Y6xu+7~tB!e~5ZWp$N1cW=?@ zbRG+Ilu{_AXk5d5Z;o$&{TqDl-~0EuaOM&}y82_h_q380*WP-APyOnrX?Hra^S=+U z`k=H%UDxbvZ_{qK58pPEaa?=zDpgfsOmNcle(bBAw7Gcp5?}espYZH6&vX9Nd6pKI z4=3S|>e?R1g#0wq`SH)7-Q6uVHrE*sM||X?FY>Vuf1JiP#9@3gVN5&**gOg3JjM+F zuovNBP4^R%u7qHe_xb*vukZ)g{~0&>uaMUhtg}ad`{I#kWPjA4>pfWOvDV`(4|)QQ zC+r-%T9?(JCDpV-dqFlFP_O0O$zSD%xBrOAc*uOROgrvA#>nnZv>4xioQ(FFj`q0y z!*4UUc7debnN5zW9BqO}7$Nx>Kz5>>(L28NNB@{+y2ar2-{#)>|BT@x$V!+(eCDb7RxetntGfho3<<;-}5A@&r7J=?^t9qFiKmK1} zwBXGj{Bv%<_gf_T65YAK!rtTy^n!%84N#4s9@Vp+4Lggp?@TnoF4VUQggsnkRuUr= zu{NYGpjBx))hv2Go(SaLbpj=btz>y>XsLj}XyPCsH6dvjk_3h{)Wk-UMw&QO#GxVz z6|Gp)P_y4I8ASz+nKdW-5GJjfI(AIk4KkP|22a|KKxv#2lxag2)KtnMw8F=VqT`6h z0xcDJ;utSk^Z-IDN%jTPMNb`g(z~DWF1Foe3?-2SNktMRSrR2daxB<}{xBQ|NMPiT0ErOI4@i~;dzW^}W(lMH2`g1F-d!@C#ki?pd9;Lag~%;JOX9XBaVnh1 zvbdVEOmp0^rQ7zgiN(4lgEIqU1?^#r%~L(Xj*sU%_a#`zLzKG{l&V;A(}9 z4Dps>BI}K{a4fEsh%HGFON=L2lqJFl!kYrK)aVV#+*EXAZBa;t!6uf6hC}T0Dc*H~ zTz4sNXNXG$Q!@MwkFep;?}a$7gE63uW!;2yvw$kCSlN=oHKa{JvMw=AMK~7>f9Mp8 zDkZZOs*)t5m~>uX^Sb(c+%`msVn#_A`V6{l#`{wUB<&wqBWi~nzIs5b7jo*%Mk#JDH!@@5xEsJOi zL>qby2Q##Y{S;v|l~okFE?1Jm)|;!$u+W8>OljoW}l~6erw~%DIq}-771|DmT zkUf=9W(HR%ycATXunve!lNpP)f-J2#eWFe4RK%M0P!9z7EtfPc$n%O)8dA5!F$yOE zt2CxBX}Lb`La^2kar-W5Suz=C=yAyqkG;oX7H5>F`q+&QH#ZjOs3e?8+(CoMevUU2 zm`RE^RIt)a?TXc%IrssqWEuJJ2{^#qA)5s^SelIdPar%>p; zZd=bwO%S+vnP6#hmWw62)TAQAl$Lq6!Ye%-Tx4p{^NOG+DMu;QLZgjkm1USpGh5CX zoZH69Eu!Tg`v5KZD8`WzyDCtIT81Tntim3TO7Cu@>^p?^R!OeD^cr8e^cO6WIWNBT z96$8frx^4G_@2+k`X)dBlRwYq`X+wZ;hiLH|aen6IIT)zA!yZgJe8ci;}d6CnnAN)|JMM}x;{vGl>=arXU$vaOsN3%Yh`j&r+uPq|wOqar&>W3M zJofnGXsvM_=Y6kVEan^?jc7ER{K3EZ*F5o&XBe&xab5QV6RqyQ1M$7nu1go%HLZV8kH-fwCGTTJK4gP^ADCFKk1z4>F8?Oq zy#0sVSX{suaSR^b5z%??z10i%U3SBmx>G=Fi>~U}PhFW~Fj60_IR+`_eun^#1Y_BM z;U>*~qXsaJVR>hQu`oBgymsen+&sL9vMy_#Eu@g|ZX7>88l(B@m;X-=53ci(r+`z??mUt2N%DI8(qCX~%xv*GMNrUdf0lOlJn`g! z+gG3E7yse!(deFGuyvNG(WBkj#Px!E;NxBWD97jj=G))k^-KSlXg}q_&-@p7wo6ug zn~QJ#cg${IAge5alas~QC{{Np+X{DN$ZqDip@ZLcd26eHro*IH;&vrYDv(Ij-Scyo zeRCvANgPL^q{MX;uB&iVeRPi>zyCcxmWoMuwnhdYL2E z8^kxpINc_G=-u0fIt?Fvlpq`4`@hV<>cWWRU``rO@KZyUf0MB2kQ}@~WBWGCJR>VA z3N#&DOk7bcG^Vt49_-+EJ;I%c(?4{QosVwOKi4H3gq(VK15;WKZ%sLIZv8$0x|`H? z*XMMYqPiZ+bME`13>0a>-b;4~Jdfx^o9rM)_{ZH^cf$q{=(GZD2s#lu)95=1?el&7 zmVe)8p(IiYtToKX39ZoMyWhMkv~BPm7k^O)3OQ1dYfWP+5p9LtltgV8(NowVjJzCkv!Zb% zXy2ABY)M*HxJHn?9kXhbOt&klMTPMN-kOUzQzuvXnLzCsVqa4P1~9~<90r!CVuB zN!V{@w39k1B;54bYDU-rkk*T25V%w=1EUJp5k#J>r>R!llci`O=yqIOCFrz0mZId) z&2UPKJr|%Gg37fFt2!T$Q?jeaQHxllUo)KC?@+Uj+L|*4m#I(VGA1={KAqI6?YafP7eJ}z`*)6 z9Ty#IjD(iwF^*%B0JH<0Ox3?*ZjmcNsXz=}mhqAU5i`$HtSd>&k}|Kb(&BnPxtkLX z1GI5i=z>*|v(}3k<{t8vX1`g|dORYzQXo7*+w&-eq0SQ#}b8w_W zYAD+V)eb4D9JkwmqnzgHHjP0SCkm(zmi1U7a9CX5M>q=KD(rX(>kaT6Oj1$JvU&sR z$oCk81-j78?@Y;V&1szMFnQw^;%vlox4w-S3DPXZb6j4z@G@Wdt1q#;*yZxg%XGVa zKJ}4Lb1>fL)~%adzjBdZ`5*ozKl907LK(%G)8{$4b@Bt_c%vxd%9YDRjRv0Qz7M3N zY08T)zQESj_Px)r5R%Xj7!HQ~&%gRldHmdC_@2kl{^T!kX6G!uPVL*ce)Bqi{KtR9 z$3ON74o3%A3sIx-J=3ygiy2Z#UU}seKKnC23qr73tr*Y7^x8eFHk>$ll2a#6aqIR? z#?vty!}afv@c57?7-LwiR-8I@iZ|YTgD?p3T$e0M>GpcOef0`!Ywzz=@qM47EV+F3 zGEYA7QHFyd*Kgn8i(mNzJTG8#ee-*$!Nj}dUia^@AIO#nKuU$Q3eWLKvK70NJNUj& zyV3sOM5_;zV10m$>V1!MpTQ9y+EpS*%N4h0SNYOgzsa|D|Cnh$qSOW2SoCo@nKAd7 z5Ahy<%3bEeXiKH-J>XH5=KfLJV{me}Y59JGvbC@{S|JKudtt1=8HBja0IN01_psKm z$VOZlJxO(YXZh!N4c=Shp8ST&Uwc_&Ye}wBd z$kH*5<`CEMJ~*-%sLG5B-}x=f(It{-#VU(=^5g%2&67V(Hfdw7KF_jY*>3(UMqH(= zMx;jt>XnjsqaZxnAm7y#M&oM5v{BL8^vNEU1g-Ndu8%+|G7VXl*QsO2#eh|*$?}*Y zFQ_U_siCMeWoan2uJ5ykveFcVrqTw9;2_G_YZ;IdVI;DUC|?m6g(|=iin0lLx0X&h zTH+J}H8XgJ7I9GV=#QVkSj}j%M3siJAvkd=AQ2iHNES^)B_U~-__-piB(YPGDNQ0v zWXr`1J+v`stqC&+$4VR}!IKnQP)sW%5`CEBq!Qr>_9ioETapuXw?X5v0k>YBU_yn; zVXid&k;FTc^ghyM@bOKSHhEhOhyNeq*NY^2l#l()p3mt;Z z9z~K7HbbNmI9(sH;EH6*cjv!f;=!2BvAj3wA)!~wCQDE*>oeT0frAP{9 zZ%^p$bXi_Ff|laS*RQjhrQ}&bccY0^$3WPX6j{mj3%f9>h*uRx85+J1k>v2&g0eE` z08}o}sX?ZuZZ#L+l!DTMU@Ky^n~Wy zlJTt>^Knen^oUwMx-?A2OR}Sk-SLDhEy<0>TL^|9-Cz}GtSG7W3mU0U`o@BMKmI^Q z`~!{WwgzC^8$+a)WO?mpmII0ZxQi5mPShk{rJUMcLrP2Fd)&!mVp|dILMwKdJ_s}w z)}tQy%r#SG=wxo)t#itQEydKYyMUasmX|KqAjlV12toqZu+-YZ5gB z{6>K5N~EJujyw(v5bqeGiF+(~Sya4z;Wn!O)W+w^CRDDa@JhNfhn@-WOnqS};sWg$ zgzwBAvyib4wW#k^m4gr{Nl;4S zfj~8Crpaz-1`|p5wqias9Az1;#32t12a6cHr}6T-rB(<5osh8AWOs3d>`UB3LyV^3 z)TL9IG|Zfw&dCtDXK_*3-3lQrWm(h2kyJQZA~Vpd3UyEr=91=85iJDjj>em7^rWaK zRxO3&I(TC!REcy1`BBMak#b`0b4Y<&lXR7XYX!}zps*DxRCun!v=wG-&5^ROYOj5)dYSTfvnkZBVQIa3c$TN)_3!IihD?za;5gM$t%$6yBGeY_f!c$cH zE5uPs<$w&`d(y1CChKyQQRI0YAt@vjIhkX5_Tpdi=dXU5-~5gLgFEwGhFfd=)wlnY zy@P8Qt@-C){1yJ-FTcRm3l|9shtBpE^Tm{njdi~M{MV>VMI(%`*5bMMckbNAaXr?LH~H@z%2ZXwk9_h+c=fec`PPen$v^qMf5bBneTq{j zb^z%2*SLM>78~muAOx4+e3P}|fWe0(a*f7E#7Rux2Ymf&e@=7I=1b515mp*pxMo@0Hu&TKwoJRUO|9g-vo zkDPz_1L=&HUVWJ?%lOh)zr>(30AqRk_FFvh@KZc|=8<=uXYqYvBJm+zBLYEIWF)I4 zpa1+nL52>^pv}{df3)6szXx!9P`t1Bpcvrq;qMUdndHB7(jVswUcB=S{^;_*;-$l{ zGSA2N0EgBVQ`viL#od0DyWr!U9-+GcBA=_cgM=s|@iy49Hz$d#AIGQi|_9_kZ*93%^2>0olQI zvI=Wl`o^c}teqfg_EE~Y7ZLnUwgq5*bb}Wz{!d^kN`JtoKJ__zgNJaG z$BnCBBb|O12UwI5PkiFPN85t(>P4g#ct83#na-}zTv_B);*}1;1mqIr5lnig(dHKZ zQX$bad}q?u*4Z8%yha7Qjx zrIAwLlpg)euVe08AbSQeuryEl^h1v#vt$tnV=<1PYDdGLB7BLm0+m?2wu5qA`ej5>l*EyyaxB9K zx&)fvTLcW}>ytiChFYJ=18 zSS%8h77QNj;Y!8o#*{Qqn7w^~&<3jo;(AOr&T!AIVT>l9EYWd{F%qpy%4LqTo1nIu zb&+3OQcNZ`AZEHqh{BNNJYl>$N4k>5oh6GKOB$O^jJ70432rZBwYTEv?J3zL!ylFCfk!&a z3EDow3J#yW%6Jl^lZu_Ewkb2iEH04NlE)d*pn>un+`wUZI7O6}A}$C!5%H^2^uQtN zM{GYnWbITJbu7Oc-JEj$^*ye=aECxE93&5aW`}r{vvso1;Y%aRmc=RyMxe%)X4@l( z9HP0vt0Xf~U^aa63g$^hHn6Ok8k<^rUIXPDm}>&h8{Y*muJxu^>m|No>{@0|K{J#?sO zI*K&aSS-OKEt>0X)*ji!l!itSQF*YOFWH^0XhuGvt`n;emRMBS*is76Q;oXOtqzGUX%1T?dvlJ4741jY3AS6P$fa^DCXn2@aX_9IwA>lL?~fusIymvOHTW z0gMHMB?x?c--Y9jCM+}}AK$AL2fpv%IFjz5Nf>(fB*FK5I(Orn#r-u^!o8j`dpsmN z+Mkmxb5!{8!RJc9!p#I4&B7@-Y*kFUmT9{pRhBHRs1id~R5+eu-FSpJ+;&%_d5#Dy ziC57(5coZxt$v5CwH}ub4v|99m_uM(3eVsd612b?!OSaJbA1jb8D7g_IEbhmgBuGX z>!A+~`K&@rz!_V-Sl~_t&ZyqVTcc5;M(kB(j1nx=Jdh7S1&hwiRna9t1x#k`}5#z4?v zwv%!CPKa{|@dS9a(SOCT>KKds*HORP)M#AR8Q+WP z0vQG57bb}H5Il(=Mg;vPWmRyLjCk$h%S^KszVC89zQvPkpQJ5&ERQCXF8shpKFL#$ zJ;@ip@w>cm<1e^)@e*l~^E+St4R+SgFzgS}M&r32zUMQZjR}K@R`cCOiIvtAc@7Bj zJSPYO-oAd7(d3AolRGpT4YDlbft`o&WRr&;IK!)#U*+7+IbOZ+UE*X>Q}NR~9PIDW zh+3=wYscdUlsNq17hEq=WA==Vehga z+OixiiH}w+cV{&FEl3K~W{Y5>i*)aMukM$I)+N~>8UO$w07*naRDaE?nDEx&x4C%x zTXeiNdd+plM|b$jm;W!;*H5vv^&l6X|2n_)_x~GCoP3Zl3Rz4JX*S#U8{6MwUVm>o z*xgq1>sMdmcYo`@WpDO8Hg56RU;ba2+}I`D+Q93!IsfF(k>+Dgo&5yye3v&~`8|4r zvxHImeI6SCKWOpYH-3vm#Qfsl_#M`^9=-=qiq(QU2VbUtQ!#JfAYSEk7H!IxUt#}5 zLAkh0oTp@G6rF`jnQ4-Bjfpk;50qr$CXrM$rx3W3tZT^6{T#PDuTyj!CeaZ`*|SV% ze+fm4+k;n`hZV&MXwO{^K3-r;OL1BeEi^$T$sLtD=$GdUCO4w?>cZ>Q+c3Ejh9%0Tp|&a(h&GAeyKoMv?C}) zMPuUNuIhdkKds~23t@4a4$(@nc6LChT)fvbNwZ=w=rg~wq&O-_JJ8yzP5CyG*i^F` zXPkX_jrolgcGHsN8WTtwLNI)w&s3+3Ou}TA&{Q5)84?{6s|vR#DIJ69!u-;V?gMMc zy%;rYAvzAuEP*tp8MVlbCTxZHod~T>-4^XCmTyn6fke8pX8tBA$#TJ&A3i}=B^H$ z4TCd%(piSg48{{2e(N@!2RpcdN10cwRw?l^#SL623|1<#tRU(|$VG+I^iiIoGKP&u zHwn5S(p6MxiQkH96Z?7#cUGcKHCP->SbKO#l~**n0YzM*Ji%*MZnD~o**>?%_R||U z1CRY@_X&i97rHE8ni5R}Jtv@*If#}ZjVk&Z9i}#;y>!s7pxm#Jeu-L_E{_;)+?4bM?(T z1URfk9(k;hOG9EwHYUW1C z`yQjaMYmGj_3RuUkHJTomAvu7Rc>8AAU;~v#`Vs_?ayt|L@W*Y%Aiw05IZW+j1i**rZ!UPy2whg(NuR#i!NDQPZUlAz>h!!UCz zQ~-^Mz!_QQlMLxu5@py(Jf^FRN?1;x?jf2MhLS`U1VfiZRpc0umgYuCd6Xeltz)gU zsddN4q6V!EMc2}~0pU_oIR;aK%t3pGqk(4Ol{iR_;)HRQQf3uh?a{0xua*-6S92z7 zpi;x6DoCv+E-OYw#?`Q5x+zJwLl#39(^iyjMSrV7*zu5_gL`0+z92FI{yC4vx=*v? z6RrhBg~Yw3@nXqpQ{p9-MIR>3iX2PJYTS-uHZ){;L7rAfU$7QNjD1aTrc1S#5iK=3 z)3v;!C+OdBD1~9EN)n-I%_Ux8iTj#mWO0yq*02~X{PHXtEwQL<&-PUhTmYcR&dp>I0{o1M&s;3*zyQFA!|ELq%RSp z0=e#D*B!)CQ)MMVKfq)aVr(c{20IYsElIhuXva{@4Vg7mvi_{u%CO2Z)GDD01N4n~ z&1y_j-0fDqA*u{CJmSk^yrv7S0IQBSj@nY}E${;$xylgp3f91k6LM=QjiIsLChE8F zBEOCuKFT1r+`e<2aXR6dM?cPFcbAKk7bvWO)FUig{Pa)!0?(ZP0lMu0=XcK22pc3x z!tK4=+`M+3gVBgH51nBZuioW@h@yzY!$aPe}d6;#IOGL|Hj2PFY>i-e2p~8 z@Rd)N=REVo4|4J9MZWd?Uo-4)@U?G#mBn(&jceCz^ux63CW&jtvwr9ZeIBYR+nUNUZD~*nyJK8SEyck znZ=eyY&$H|f>!h(4=s1-ocS@Xxi277!{LrbbR`29$>-M@5P<0xO|%EU~A_RqfgAuIkN8 z5gG!w9_A%}g|8LMASdZsGF6unIt`b#vuijRh_=IABviR(b7RQfoiVPi&FW|ixkV{~ znbp^Rzu{t?3hw~MB4^#Wc!?x9(_r`7h-9J>OHieuKWN}@MNHqEv9%H4BT%8Dak2p` zi#sk6TTO_kl(NF{BgFM3@>ClM)FbPJIW*7o zC`(NcdZdR5**wSJh{z@h!c~}SG3`eObT->)YtdI`l#wDniWxqJ)&qCT2UYtWv<62?a$&Kq zW}qEZVpw%8K`$a%<#dKEZoM|9R07q4K`UVEbeD$bQEH7sqC$lg;59vpw3dh8dh>wk z%_-wIr}%}Syt?|};n)Wi*xnr#JrR67%UZjGP?9k4@3HwvkhaDg;#g`c1W+276*xVgJW`O zm5^g_BGmn;XYt+u0bnsr@S_?`Z#}fh+Q}a3(XCUTlUia{kZo9O-=TlfW3BJAFm;Sy zwKA+igKq?Lw_@cOVk{=Fr`c43a;eE@73E4Wo@X313!+pJP84aYV$wBy#tu2>G`SKj zNFt537AJ;usIdjyb~B=pz%&HQmge?i$;f8p(hx6mQe7fqOWZMJS&BawD5;Q2VsxE$ zB-OFxAhC2CAztWVD~AZ56$L1mw>0INLzqg&$%=fG5={hX%hD8>nI_K-)4XI-6*M*) z*s~G)W`*9cWNcFA^I+>qQnY8EGx!~yl(My6|+*~%_Q+GC7~o-g0S`f$R3sW3qd%S z3}TO_@8W7uB`iG%SGB(fPvA(Gq7+1lK&K_Ps&m^{L51BAlvqRoTf%21Dz>ADnJUOm zNt!*6DuDc;pirPIO&VAAhtwAgc3RjSMO8?m1d0%2+MB5l9Pe+mOvNlDMKQD(o_)bOr88W84bYYN}a@>$zB0 zVgsixT~u`n$ZGG9O|g;3@@PuA8UpZSlOF2=n2`YV*$Qj{fe9P>kue~gn`C%Jg}67h0@ATpp7Fti$Id;5Qi^6X zqAW|EdiWz0RY{qb{HrhgbAItBeu;~YBoU#e(hiX8c7`U>tFbn zJa_5qeEHA5z$+KtV5`5)PyN)-@U54>$*=wSKV`kWgK{Kad-hNHlV|^wCm(r&^AA0Y z=XnHP@ZsPiUa@zuN4M8|chsm znY^5`x=;{bCX-JHp2CM!cLbrZhnoA zKJg3qCgN!MRfZ4!2=Vv=be&oQznpXG^ryJ-)^l`wCkTS(`;6!Sfgdv1c#y%ygLP7t zg#DWr__M$I&nfq=kj8sVdKRZEXuW31(Hxz&IG#fmTTVRGrF|QggEltUAuFy?4rJ5iAn}q2$43fLkfj8!-?3z!u51 z1Shw6O@}lR933vufuNdH9Hu4KGZcH4&Z$1(VFnMhakqQeRFmv4DV++Z7f>8bnNL?V zhkcUWIWll5u1padA=!9Be>*}*IJ&taS_uwUDH|txWPS-6Q~`{jQ`HHZc$WEW2}c!V zU^R5k^tm${Gb&={qnJV&!pJ9EO&L`yk3pGG%AYK<4V1RaO;))H@G2%qROJxWQI zIccw?5qbruzCFcM_5%k`AI5%Iz#T@I6l|<% zP93UiC2}b#_ZH-@&Zyp4LaJH3oFbRt_7!Un`7}?4s138lg*Xt3|fTiN`Aru1r`zKdhNGsb~%wh}Y&c<__|q`SV~@4ofN8wMSy*f+D3%%BZjXcO`;qV$aG}4s>4WC9QV(mm9 z&v$t1_3Nl7f9mY#T&YOiifNHSY0y)Pcj(YqDWXEr4qg1z;tD}nNupd3Wi>VFSxfI! zmom?&+J>+pIO{h#j7o$S#4SS{)u`7omVHk%PYVLi;xr|z4QT8+n8cubhswA3Q^7$M zlWRj*I20HhM36B&uw~X_Y!=T`xEbwB9Ne!)u#G4AHae@uODZy6YyDpuHgG?++O3Xk~jVnf3 ziC!6OB5(=^Qwm5dm9n%K9$si^pX)Pxa)BIrN%lMz2VX*6uv8{mWGjApcPbWpnOGDXx2t9qg6&Qh0`BjM(sNkd$S4wxYaLu8YdKZdMLL$;gETjI zfs0etRA5zs^j&PMkzq(^6x}m@JgYEA1yxhfTW=y(8E(g;b)vz>*#V7iK(px*HC?hK zC2U3<-aI1FnsBA?Pj(Pm6AFb4pu5>4&~@6E(+DYc6J|PRd2_~<@g=U_xka}MxW;9c z{+NULgq5Cfb$o?SKmOx5{~u#-9%NZ|*LQx-Id^~i%e^wQvbL^P^{VdH0$Pw-3rH{; zFc^dbkIguO!4omqj_?eQ0FFR$zc56M#tsLz!x%h+SO$#5NFXF3T0%`DHCnpWEvePj z`%?Rwm3!vf-@E%gXa2ZZS=~~5sfZUp9OC@7^Bg&R1kd%#1;7|CU%5n46kNJ=f%DhTva_>`(VCT|6?AHto0?~FVUbUN z`4cQGEK$UooxL6Iy!{S-?GJvPU;e586<>MG&o7W=DU0(<>~%Y=99}^HGwo?++p`>M zE%KcwpJJ|ln5Ngln1WMx-@&7&zrqLa`3NfuNAY~0OD|mHH~!Us;N-EB*p^Mj5B{s{ zN3Y-I?AbG}HQWlj;g~z`64UQf^#%^barNw1le)&Z@-Cf!{NeYretnfjt3kC^rQhpw+p*gZB9@CHV=(A5nM^>y?Cc!%T5TVE zyg{B5JiTv6iUeQn%-nzfX=m7alHV?ae4BI z-$ZO&AS=2scar!0$ZxQbKY~0LG54W=hN@kLBBh80A`LmCHrO4UC(G9v7BRM`nB9^D zS0J=9LX}}+aD5A53KFd`;UyeS5LY_XbIDBKrmVwT*$h(^QKU`TbrWBth;rry-#^mnggONrYt)N&Us!A%uf zKrfAPXFbNNW2`~WL}VyoVe*`$lai8SJb`6f40=%+8YKuzfN#<4mInMRHKd-QzcD1M%%-(Ali4yla$fc zn40IIl;qk=o4Af-@s3$)4WG&R5t-5WHJ3`;XXf4+QcsgjQhcp&Yzw)q@j{7>z@&mn zo)Gmj97mB)!?2DPMRdXOBxpf8%vfHWV(pb3ysCpT z0$D3#q9^@`m6NmNc|zTFiFzsdT7=$7-#~WtM&RQ$0HkSQ=3Hi)9-;-JDnnurN?4F zNJPBO=TS25uLmChW`7YMT^wLlY~;=QgskA==_@4t6jgh3^J5d05w#$wxl{v>syV^$`(N+V75Zh8$*&)uh`5U zs&jqP$0R@@@dpMmhN7;q3yC|Ch#)T~??-B-Y``+Op}^_`k;c`M)GM$7qn;66%RhzmijnY=n|zjz;E+ zIFE?)oV{>_2*6o2;49+5AOpd0N|P)p!b(Bv6^O_n4fwglb}VvH`eLRh5|Mz648t14 zmSILa1g#2=rwE)1HCd&&p%I>;ek7o>=o5J{g=QIBp z?u3f(V}>bNH$zQ(*fo!0J4H1V@n}pqNw5N+I7&&v3@7k$Y5_(HT8$>c7*Lv!935#? z;FsMa3oQ~9p0p^gg^aQh&AN{mf|n>fV=*)tGEm6e;sbYon6rClnRVwlb>b9*;eds? z1u8+nnTu!GTwUkb$>ZcAW2!k#ty()sg;?KS=Z`-5pIBZvPOLK~<1t|v^3a#Qz#~sS z#Q*eD|1;ZLTkNcFaq8|n8I8tlb+@^)dX)$7c@Nb}m4E$*zeeCRv8Cel^H1>ykNihI z@}8feR;h96`X#pZwm5(F0)Ou(e}O;zv)^KAcA4*9e~iyO{R!s1B?j>x4}be1ma9kj z(=Yu#ANla#Wn*idk3aOEICJq;cDs9A+qlMTdk**e+R>}k8W%5INX>+!W;@I8-1bBAy&o8SG? zZ}O3M{uICZzkigU{pc^@`#$F`o#*J`Bcy4HV_W2T&etFR8n+$4jmMt&IxnAlk$dmF z?+42QU-SQk*@WxeD?EDf%Y5bATO^x%*sEjm%?+&a z5YgMidw&&c+Ph^mSE2+S)-3>n*pKbhWujG{mvXCgpZzGZn|_x4&BIa@X;G$@DDk?t zE>A-8FhdVhRG45l11#HS^xPiRQ%&rnZHhD_XgBwJ1~@1;d|eXRzC=t|0_9oQQx)1P zb7Yf@bI*N;p&TNoA+YMWj*nxz-`9Kcdhjvm@ABoZew<-%i}mg++`tyRKl@Hjo_IgUj@{4J#(CD(zDuR8*z7$_ zfBZbA$k0Vpb_o;)%W;XLAx}R2+f1rMX4@a+wv``c*xzKZ_8p4Q(7fxt1Z?WS-CLp`WDRIgPOlNnOzK zb0%#;kr)C?p<=_Xmr>}Dx8DEf=#gQ2fvW%jAOJ~3K~x7jXRu{iMmVl(ycDdVIk+K9 zN!~5+fhpV4iyW@JxJ$B~bN12>mM0+5)UH9{z@U<0q`{3Ol?9Ju?H18@$Ef>V#$m){ zJLT}9Hsh@j6$?CVBLPoQ!HF$SuQQD`9YPLUB~l*9o<%#1R&v1~Ss6*E$-Jzk7x1e8BaWw@BlZ`g{d1F$_l;pmAyr z+c)~e6ewkpNeHGYOf5~Zd$xm}ORDuM@kT_hL57Ax!}Jd=;0-kKYKGTzFohwm2qvLM zM4C`Zs_iP*o>@apxy&t3BZe84YqN4}3R$tSDvGHiO%gJ^>oHkXVzphARR-VqN9#yc zeh!NyBTqBNgAtDFQjDN^*DU(Rn9LSLn_aqZhc6ffN$I<}-Y?2a!PM0xwpyg@clY(IjVwuuPMiF0kh z(t<<*slZhVG_;o5Y@O{gxf-)~ZpdzTM5+xsHHsr%3!}uHn#~1MKu-( zX^4{?g+-(_yJActG?s4>se(ibv}G{1#EHu2G)Gu;rZm+}%~a-69a|I_5?e!J@S6dh zBH~zehUDBBFYu@YK2k^qmwRNr2sToRZpLK6u-D94X#1?J%rQUP##ZH|C$|*EZdTq* zMYiMkW) zJ%fcqQYm{xEZZWl0Jfqi6e5=h1p_}LZ9(R0BB?0=ZG+N=aa}VEG}B|7)P}TXpb5Dw zXhs!K22~SC%c2qqDrsp%^n`_-O4?Tim66Rr<*2d1o-NZ|@?l2Ja&R4+qFzpUb2P*T zr{tmE6m~9}0VPkC%R~XVs0WD3O zV)6o-7{+g~G2LMG9e zyH4H1k)>nI&(0rsBhFts&&I|&%L_+owWfH}$y0punQzjpw%F=#^V2`}b4Vpwy?&Lo zjaByI4v#+d6}E>Pytr|iU;Rh_63_FvW943M?5=Wnei;gQ{?bd_zI+$6(=)6ru5jYW z2_CrT0V=-FUwrP=C2;&pZ;(Eg0Ft( z5$-*5FXQo$h4vzu$#86!spixVMC|VF?9gg8F$R3!<4+&{6oWyZPkjFOx&O|$@bved z;YZ*7cle{veVkwZxnJSozkZ0NLo0N{U7kPlEE~I<2m^}?OIVhLF@`H^SGcl%nF|-r z@zB>lPvBPg#+M%9SN_Sr;P&Hh;>xuvJo(CF*p@@1+GM6ZL%-i6xXIZ3H=??XG5pRa ze}`{==NrsT&rt~~+;{vfILcuXYQFaL-|{D)`yD#t5ug6+Px0QjJV?D($5M)^sVSa+ z{#ow6>t2o@IYE{s2PXQP3vgB>oZWhbZ(jZ?Up)62zPFrEX{BN=QaM1 z*LZF;Sh;|4Mz%e|X;;y`gz<$gd+S|xcdqfR7aro38{efn*+3~tGng(Vwg;27@@EBp zz+Jb$lV)Rvh3Px+ynr{~|30RsjxjrPg4N9@a3jI?+9l*2Q`qJ(7oPbXR^}i^nnH(c zE#-glNDB~b;2tXqPih5 zn(F0@q_0^z+@#10hI=vfrq6IU#7PyYZ%8VJncHWXnQKvNRSvqCq$TMmT`X;5l#S?X z27>`!Ca|SKosBScjpbO()f%WcC$GTVu{K_+sSg#2&Dou~3qo{8RJf#R? zi5DwCV;xmg#}<>Kz?u>S8-l)b6g3wadnC7oBOcLKAJqxRIi1Y_co|BMF0? z%~uCRGlrz0u{_99O=H8tN(I9rrE{qdg&_$u_WDDN(oCJ4rP2s++CH_#COa3l5DDa+ zoccXe%)e=tpzh(#SIQP@N8-2&$G5Phf=-GYXsni?`^pYtEhDLx$$9H9516XdY0lNC zHhsoq=(^(Y(K)hi%K7KlSi8|7@(Mcr35^pC_Ogg#m=pFQX6~NGUkDJsq@RXFq^JmV zCXh{qax9#gD$y{-@v8*&3TBd`q{U#6(2Zh(z9MonI-L+XD5YYNU6jnLC|G-?%kI{Q zr8{O(Z6BxMF?;(g^_d34?uaYh0W*i%_(l<47`~zD{0Bw3uUP;cK`|c?G%cJ!l0*f0 zLz7sBV75Z@Xbr#VQ=6{QSZpAbMXgn%d8o_b;K-0^3(qe6N(oW`@RGow?&}g0^2a$j3P8VugA@Za4AIT z70EQpQ3rtJK$3Oy-{zolt^C~k);{%QFf{+xW1gqhf{)U>3tb6FQV{}*$ zv;wvUV+v`gCpLXQXHqxhiNTCCmS>U02DJ+{sCw2=|vVT!#1(irZT3*~v zJ7;6wkkll~DRZ0s(80zgb2XW#NqmWoqCk`Bf+jxp5N6^E!49~Q#M&!w&dANF-%vPP znzmJ?-W9N&QrT08^@Qx=gy_r=vz4MZQsSM6%FzI?E@=5S?YTDbR)$IqL@7EoL}z32 zHI2}vnSV%zHD!@2jWm*>NU&=GR-;OqBqW(8cLlXti!ct6o@A!(F|}01Hj>rLJ2Y!` z+BKJE+r`xqwJB*V`}kPMZOAB%=T-vNSm5Rg$C6le3#}CHSTH@53<6DiXfbIBx-z9+ zv#HlB$Q&A>N4;win*w_XjR`7#@?L}(X4rLyweMZWY1vqThwZy0VM2AbNxVD3pKjny2S{nit(>@sX;fW| zGMFSI$V#)D&@kymq;+r-Nfnnk$uY4;rGjv&pa>1Mg&MV5g+{Z%kN@yb@FQ=1PnmcX zG}KS>Jw!$aMIn|KXq08}#_=Z-0qDe)#uLsl$8T{$BRF zyS%)4n&;0v$J_6I2kToK%uLNN2`4=J!n1Vu2Hbty{YWVoj)pvP`eCG_IlFO&aX+SW z=^Af&$Gfp?hgNNx!WbTW=YuTF9Aa^H@dpm_Uw`cDJp9*R-?5i(GOZ5r@=GuBQ$PJt{^H@!(5kk0{||kLlSgjHac$B#VK^EvJvIIM zB0^!_XbWO$A6^2;`YOD z;=bGOZfKX1~I0a;V-zX?w)5o zf0d_KzeE(pbVnNmP6a6ip6wz9gp&c$XvqBRGD1ksU3wbN^SJHg0~|a2Rz`b!te<_B zR_!n|&12|VO4J%M338lim|dzdwNj(G*g$qN+?fi-m|HB40Zm5Qzr^R7)dJ^`Lwl-1)XmG@#(^fOX+l?%EGjZl;P)ian*@_;IT5ezmIEKF zW-)bJol&}nZU_!_B-x6fkxTLxI7q5piz3o^J)3IJMN_~;kZioj{COIM(6pI#DMj?uloln;iMjJ8dMut<^C=8>j zMr{iGIT!DQLnoh*bq!L3HOPs*Qg(6Vz7^W@O}vUnX0rVhwt~&xI`k6isbWG-UTAD# z(@i7BI>NJTD#x1)hZC%}LnsT3Cull8L1Cf$8N;eZy8@LMYF$m5 zHG)J?4HQHLwZj!0Wl+W<7Mj|;hZY)d+GaGGAcmUJg&uL5k|i3alVdk*##ux(%n17t zjoIqKM7m^0CCat1Yc5X3!JDZwbN4*%ZB5*kPiDaL96&Q3O;|cUiw+A;-M7Mp=hry* zy=&AGo45bWT}SD8#AtW+^O-{9V#Ji*p#mx|{w&Qq$s$2| z9>a?REZ3sGRK=}0jCMxsUfN@Ld5>^6p>ecL`mG(*(HiQd9(i1l7lt?~$a1hOfxYZg zJ=G|Ge_h6XWE4d(JDQ!e*YLH8wA`_Da)W~owAbrXEtN>~&` zuk>-|gVI~}nr;svUhlYky$WEToyU+x1(#mEikcWy``+1)9d6AM1U}<1Vrss9>wPk& zoL&eJw#8(%kBJJDk`%>$)_f|+rl7Sl!|?Km=~^AHQ!wiEC`JX*D24(;Pt)5RaYKhx zJqLdb)HpMunX}L%t&|!g+ifSaO zjlmrYjFzOHCah-|-{1%f$Fgu78$3v5L2heus~{_Kk^nLnM%98zMUxjAE0koWKzI_7 zXsigB81m(^&tf+pGt?p0tV=YGP>zM(Enw4Nx|+$w5tCtreI=newDI;JvkW`aDMTqSQ=((b*879)MuwCJjM2Qk0KKk!;Ep5qEO^p z8P$eOt+26dNs?<+$KZD))yToi71hAQ>Vmzi@J3J#6`rz5$qDP4)}}<;CHpfMIyCzM zGKGm(P_M$wSTTi#?MlorBU-Al+V8Rzj~V0%xzgB&9rR&E-^~bH5Gq4eSol&Q1Icib zp`<|N0@F7P!ox@Q;+O>ql0O@t?o?yWG8UA3-DF;^lK}bk><~F7ToE zf0)nw$shB95B~&jec=5Zo4c1VjM(1WCTLZ;_s$2nPeu&Rn}d8pl|fAk4e0_d7@_dDEdgIQ!}g{F7h#RW>#^ z`P!3T=L7Hh08t#FguE4%`$bbu=xp+xou~Ne zyZ-_2eaHLw#-o43#laQ2@gCbZw%P7)b7+2vd+)e+zfszvR;#~}1o#Kixt>4w948K) zU_6@e>h+hX)N8D*t#j|GdwKNJf6g!bgMZAz>;l)}#`#H+8o%*NgZ zCe_%EL$lfB)mNYArE|~ng>U~Ue|7rLIDh43lAVZjFC^=PWZjs&7u|aFBl3Po(u__kMA>oE0bQ+}1DbmIaX={dD+xSa%$$Th@Wr>6Aej!S;>n-r1e*k=l*EYbv zrX)laK&rvAz*XpRPCpr|vjNj@o#WElCUq=kw=G&@hkDOq+{nnaU_wD6 z4a?FYX$Yu6y-}rDjTzTVmBjMO9F=AT@TRK7 zGR3cZNDsC)cF`D`N8422)S}ZFAY6%6QPgsU@JdNk*H5uSNH#|#wT!$e2r3dw3wBjR zXf)D5VhW6bqo)=q!jzz0LD`bvP?PqFHXu;8pmC&)Rrm3#F3s6$d4RO!!NeN`MN&$u z!gD>WSs%CNVEYzM&80q9qkXJJb+(4^ABAg@))0kd=f^Jw? zg}}Iw*oLgogrgDJD52@tFa|4!M#TY7P)I{8H6{^cO-)qInOraBroBN(ZC9du2D>Jx zH>#+e0)(c!J7#Bl#9i+?%3bd`LOe?G8!m3(9)OFi$VpAk-0T$FH+I-~^cuR8@%kK+ z{}Kqfb^m)uYb?I!2w9qQ_FN_#Y5~8>u8*744(9#;Y7b2?;VkSUXrH|@>b(Vsl z;gQA(^T(!8Qc|6%plz65ZV(M)Hdgm&9d0lfMF>lnY=yF36Rju($NYI^( z+3Qc(>JOQWGm1=>257&OL5(YhRAjiRg}Y|32AY~>W9Nc##gJ4DlU6~b6a3WP*W`j{ zS)^k_JSycf!Wb+ik%b}bYh+~Mj};;Vy8zp>F$!|WP}l-#DRNza1*tLzlkSRkF$#1= zFsW!penBcVeK%!T%Sfz(*kr^iqo_&>zcgBfm5gz#z|2`#ZHMYY4S%LebbU;gXc9D& zJZCba5fzKr%aBzYjiI0Cc$2bYCFy9gp~mC}oq|>Oke%rF&#-cdHKPzCjTl2z$!XRkRq4RQV5K1KvJun(GM22|wMgA@m<$reTVvAk0H-cE zbbN*FD?4~YkX1o8&M>0D*An+|opGEJOjWU6i}BVjCd(-%5lzoWj3?v>@&Lv@_?f7>Z$S~DD5I?AcTcVgQ%7go>l^}qch*VnI5R7dp2yR1wdgGIr8cizvPb9eK^ zGhf3F1#fxVyQtKvtnX}c>GDPHy!}qjT|AF5hIXsXYge9rugB5l<79cx!rTILvvbs{ zHEuh8f~wo%&%W^~sYT z)0{YdqAZ#FZ*-NcEUXat0lw$)(GUFs%Tp`-=(~T6Ua!kHzVSCK9Y4uTYlerP{4%Zj z6ezS(ySRAi0{{Lm{xx5H>B~I#g->(#i6_{8?kdHzJ@V(f6fgBDUM?T` z%YE|a`{d7cNuS#$IlV*pyXbN8su7%X$ew-lAsiNED+zi zLi+e+!f)MR^jIn9O1lx^+K_N(eIGYM11>tp8MvVajF>kh6Tlrn+WY(}O? zA7kJNO#8gD6&a`eY8Q+?c+`iQ*$-6W2ntc;a0r;ahfROe2X!obdP>- zozqW!6{%B#x<^9>WJ!kCfwip{*wq*44z3W6HyC7>h;)}Yiz#e~RgNE)eHP*Rgz9V+ zB}!Ib+Uk~e*?^Jdh8>M#EZ+euq28=ht5hir+_UnFxS~O^eih?On$p3x?xTHVnx#0! zQIa@Ja67QIq7e~zH47s^S0#mpP-}8kAT`(_*g`S#QX13m!M$2wTXz%o1X0>0-MoZV zo#&3f|J!sfzJv&e$XH;f`?rWxnB1T&MN#AjQj?pY+a9g-rVK4qhKH2z&SVp-9<9-%MgxVb_^U@uxU5(|GiVE0C!*2*->R^^Zh zLDBC}D1kFF$bQZ<@|pkuAOJ~3K~#(gAaDegnuC)V0!v~^kT%qsRc5v<+@_5+?SK(9 zY@c*JBF_xd_qN$R*CSgSaaj2{ZH2z4NipRxXn~DpJq)SU9U76qsoR)CC0m&6#;7e# zlaoriNP`!)ww3yYrABLp?$bTGzc+~K|4?} z4(aBYif^MF!E~icv6(TBGjs$iZ(AbV37I<7!0N{=FD+oL$3zW{W&22}sMJap$7xwC zziAn_RVB_7^py~I$}f|I>K>gl9X!{jezZYvV?aDkXfD(a4xDnI2~mzD??n`ylu4H2 z)!nigUfz=0*sevT9k6kA4})a4-^b1cVVvPakarUjU7%(h)GG;=qv(%Aqy?-Mm_0)p zf-6fuL@*Mh+nTY-NDKr@;0KC)YzT6T+KNN-sE6%XWK~UYqQY%IvckgsGi%(1VkasUL38C$eBs0le$8V%idZ-?&5c*Lpa7j4hTVwxYD7^KRQej5a(zfL zO`H}b@Kl2O56|FK%g_+CxfOeRQ}HTqN}=}s8~dMmDFwokSmM@Np!T1u_Mgjsl>C9o z{52r!W~?sz(kn=VuK7djohYEu^6~9VV)rb_*fW6A#H_m1==ccaWGcYIyPPi)se!P zfW&|cg)4~s0%coNBSq*Jm_T6J4uvj=M9wZD)v7~W(QMX2R3OMa7}j!*oIH%|8FVkf zD=bV=&@5bz-m^k2HY8R?v{#Ug3or(qYZ~nq#?~llA%!~Nw`|8or<$pm27}&!aTZgZ z_Hk{S>-|1sX&C1jCe!4)^hOB4M376EZaSqYJ=A0rpbF%$z)}jW%Qoc2Wgk}vMpjN| z&f-GSCtq$dtWQeNmKk)Xpcon~Rb!Ne$f*jfCyYcwe-bksCrm~eUgl%PW#n)_j7pPW z1oi~{z$a}fWVaxbz_cLrAkPeKr%F7TFjO(JBFT#!)08Y6KY|j1sbkZ~ykI*x%{D5u*QmD*{e$+SUchI+L@F&I;; zR!Dj=J1S)o<&1X{RH5(^Lp~`G+E8~D!GdBSGOQ_=B+97PTS%pN>fCqu&c;(*KKn9% z{-saxor~Y#eQ*0QzV`UnIez#!?|$dI_`th=6xa6n4}bFS7+W!ywl0w;hU15B=VyQB z=b2iZ=35sY=cT8fWw1S>H`S+dTN@d;BwjqFbmNFr=UnKXCzL7IJFC2O`DMaMiYG0;`TWCt_A8&|W^XJb~4{Gdo_c*_O zmJ3_wh&G43bp095uAXH)3VHhalf3KR_wl_;-=^U-Y1La)y?`L7Fbs#xPS292rLSVH zKF{LR0^j=HV?1~H2{w~Un7APB6zGOP>xd#1Jahgu@4WxrZ`|B&-WY^zZf&wKyMSZa z^oIjJ{+Zw6L+|GnASTGC$5-riR zIW(tMv#DlxRae)LRh3maojFd-dtQSt_NlDuZqaf8`|89&Aa+EowZ89r-{&Pj5(-Hq z6hU3lq#3RK#VEyoUXTbuC>5d5@TA1Ozrnn>#=f_~KgyAhE7a2h{k$TY8=;{bP^yI4XPg!jzUb;zu2ZWx&&Q%1mQX zL5D^Ew9VL78-!4u+y_a~Zt1^qk7yVW7(?~6z(~jo9e~aznLwY+wa_MQjr%pV**|$->6qPMWqwnCRQ|!Bc!2TQmm~37! zef>Xy=zY%K{4qLtOuIJN*5g!k`(1HJ;gL$=i~%8EYP4^K6`g9~CH@;4+f^fN&$4>x z*p4i6Yf&qUI*K@d=Zd;@xD&-IUp-*?gEjG9L~8py~D-<1CeOv>(^F4a957V5hM2mdHz*MMGn| z6!tr>4O!3NMYyH+g$WlQU32~3n(NCgxiz%UEyZ=i$=45g_H;#YarjX{IvFsS_K@oqDIiiBIn>a2R0Y~- zC@f(C4ITD+a<_+x1UH)%!*A_VqnPUrWn);@6;~f`sqz|9$==}%g`_`D352FO-O^f5 zZCVtb@nN50Uh(l?ydK=}Exl5s=MLRUZ0HfOrwj~r

g=#!Xq%r%;BLw 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

QyRHsGq9}Itcno=V>B?8t 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 a^ZJtu0x!XO<ZBEPM0=k&t`m_@?0O zrSm%jbYl!X2x75wK}$*voq|Gfg{?p?WS6W2CO+3GG5>ECfi1PpgS7x7n5ok3=4TQCR8jz<0(nMxRwQ84mrHZ(}?GmC9)|D@3H3ZLvE+A>PGb-aHDImw^vfG_>4 z0(y$1QyF+d`q*;XydVj6xx@;hZ?(j4H-5n)Wk3Oi3eb0)D2XLL^k;6SyCb=6)A42} zLSQA>sn9XXntD|To79)$h;gm~VOiwVKp?mEKO#C2FDO1J`wy8;NZes3yS7?cU0GL= zvm~4H+43l`627w*%8Sh`_u%5Ua>zQV_EVU*rZsKfo|KG9(uW#hEyR4r!KZt9`)GpE zKpC*2);=m`O44$kW|b3pg$|PmRn0M!%YPJNInBbc;bRGny)KlS4vbX4|4--ZONZYk z4=V$ta?`lFPSriEC7QUAR?s^~pX^ z-Td?8D;Vf$%&EP;JHVH1$^;pOeByz#dgNyd>pl1qOFiXcW=r;V{e^n3S5ANN$@RxD zTVc@pr$*X{;5A}r&keIwB9R~ZmdREh3eAMB>x8ch;TW8f@qH2VXD|Lx2JQ<@y0t8u zk=g*XOr8^sD}^naYkf@lF~3Iu6eaO}T|SFsw6j9ESl(r$l{(>?ou&3vYkREJo|eR&ku$pYIYx$v?(Ay>{$I|!XS8t zDQCSHcJgw#&oTho{7ix}Rh&&?lE6C;Y18J6mw!Yr#Nuvk*!=SE_iXW*d`MSriAzr#>mpb ze!CxMREaLB2FIlGIx%z3ce#&vN}8Q3C!J;WQVSd2p0dV->}e{u8yc^6_W$Q$9sZn! z=4lOqz5rRfq6G`hSm!u$!=TD{CS8QOa!hHv_;x6U9Prpw1#`rE?ruC8tP6tQ)scr+U};9^a9_o-rY zSMMpr|CBHnLTovJge}|y#=8S0bzdIaKb#CP4W|Svodb9nq<<*p2KX2$5@`{WblyFFXR;w;(_g zfzo-W4fM;|1;g+b+UiDzg*-k-I_M3v2DBT$2+!s+rLlVXZtY< zgFNN%eN>J)1z9ly(a9VGvdrjI3-!QdXjzw2tm}o@!7b>ht zHsi>zeb-xz@8u>I27qcCG;H})>_U$DRu<~4U- zo&-WH^3okf3Zv|@wAAsajxkG@&wdP>CS2ENe#p9oL6x-+BY)Ej#)%r_(puXv^KCn! z4YY8`Qd{~8`ijkIu2_^K#X$q0YDt!R)@drn)Qr*b7=k1<$ERH_aCnQ!X?0j=!#5o! zG_AZy%hL~Vs^^;wKq714H-EIPmV8IHFdFow&NDFJD5f?!ClE8}V{Wy|m;eQI=@mE` z`u&jVoA`0lDE^L<*hf?GOY4+;1q@?smIE``ruaK2-cwj_b|@Y&shY+`U9?!ba1%eZ zEdxLB`qV70tK78_@<9**aY+WKTwLOX+wLr8O(+Xhn$7zg_V1kRirDZNLxw`^ThWo; zU!v^Gb)rg!fygtEEK{^~&KZ4a*wxI(#x*T4qtnPgX%|CH zMa7zEThQum^YWb6st1q8bO%xZku#G9h%vjUV5rkFpUJUwF=SP_e``R^&Q7Kit9ph?Cz=^#*a8H&6+dUgV zSJ`*GBM4P+PHUhLCTH6g)a_%q=D~8@v>?GD1PewE*X&`jLuEZ18ZP~tAmhc#6CIDq zh9cb8N^{q&T6_r|K4u{t{Hi-0Z{8Uss=oRl`^iIl{`4nL0!IFE!y zWihPk*i(RMvXy4|gQg;)9c^s@)$VoI26gLj{zA9pk>y4B*ADX_yzZfWqCrqGR0gbA zJUtrV!D=XG_5jo1p40GDu%*9#f1X}tH|5wk^wr*w&`#e1cwG`$B*^OrH&mLRklrDQ zz25%I6QEx=4(3)>oa2?PBxBK*z#N|!?xmf`F9+UsG#lhy{y}TD5w^ZA zl4V!Zv8KR9$Z3Pn?i?=1=0l_~`FcCO`SW4hMm!^XegF77z$z%Dy(#b}?*TD|v@Vso zSQ`9r`ic&VS-`tgm_`Zy-A$)7YL95zZLUe}a?d>bE{5H5ce96|CvQ=hh8R-@ypHOsd;iQzEN};J4wMEpw*G7!Mk2XFfMbBm#|R* z7kwlb*NoqVIo?FeXCx2Ggnc{0LI7m1h?}fU*{FeQ1#X|v@3kT$p-klJ%d{2tjtv-8%3XXA^GVZxqO4m4( zpoo&uZT4`F)I@#eRzkwsAXhQV`UjDE5pB0 z8$RuC+~7`vq$&r}y9k<$_!NvMa1cCb6EJ>03itYv71$&AWsT>YFve}gx8ww{#DoAu zTroU$9U?F`Wv74V5h=`CdXF|T86ardefU%6XvG$`-#fgW`eS_g%%B%(a_5HUII_1+ zYq2@r%pIMY8=wR|uTGZ8;FCps$52SNFhp`3JGv+iyj4b7X8gnf@By>kTo~h0$W@RY zK1{iIxOm%IRksPpJac^$+>E+P1%sdEq)$go66#v0VH&8UnwmAt9b#3o+&Pv*Ar2?0 z3|6)stn~-KS3bT&@0U$zNgS>q+}Nx%|C0v>_`YLa=RH+TM!?CzHk$^N0M;b|aZVf{ zX7kywuid0C@veEA)V7e>*b_)v- z_~fd{p52r&&~8r@4Zr&6E2qx>t}fA`DTc>=cj7fsPr`0)%yyyd|8NIrIhW~>V24m- z(dqXv$`LP$Q#JLvUhXYd3G-%W(qPrh*~Gto(REekS)f7Ka0Dgh43vS5csZ#>l-?R~ z>VDp7c;^>=;Nc8R2y@V2=Zu<`ZHx@=G$KNF9m6A1(L;I5UPjMH%SnpCFM(r@#Ad>m z8uOSpEC6ve}e%9^u@uE9U3r^ z@wKwX+xCRJ_7pUu%058Mo--DRxCLw9r^e=@ru1_55fe~K#?;7EkTw{tjXI?%p@NL1 zvKsR)Y^M{;rUIBc8cM_qm4MzTNS;)3?xxxVhgi@ZY6Gc_<9YULJaMh7pSoxq`r%7K zh}iH8tXOA8N`L64l4HdhA7qpA?xf@fkzWxYUvcGv?^%T`JcFMSqJtgiOd!B7oEW)b zgv<*|YO%+0YxnR5(So1$tJKBxvDs?V+_R0)R8yRej;(zq3t*G;Eigk4knGR)ydflV z?F9t{$AW{$z-X&;INZyTF+z7cqIA3;0Y@%8HvHzZOv0=d2CcN0U*0hA`I(+!bD@jwIpV2}AuVPRfIDR8 zA<6`VQpuWm=uU1Jz#9+tPF_q-%$a(rOD-27rzwXa|C;bFZru@e9rLF(g;)ntdDX71 zaQ_BpKTwJp(AhsUK6;iu~8%o)RkM>U2|3oSb zw>StqeHNbE+Ph5hlh{;L_kDV|4wb|0j>5izQH8haCz(gyJJyqT84=<@!>gEG*x)UH z@V^5o#|z(hGiI!@`7vitOBoR`osibMpe*v&r~%{*Czc3#0v5GF`L_VUwg{{0{^1J| zzJF}dCp?p%#t<9JPQPO^>oT#iur{M^m{!vubamk=RFIBA&=%{=D&#g(AFINh6Ye>I zs-mpw%fxh1Pf14fPHaBg_rW%e&k!xw*h3O*` z02c74KBHCAuQJ)~`-@g0(11w!=+3U67ElsA2mXdEjkfuV(BAa&%bU{;ZV@67*-V5B zF;Y?O8+IG6-c9_W9$0DXGoedWW%JyGRJ_i0F(Q{2r9^*&uzG`%Wx6mt!Htj^Ax{4L z@)~<{2l&dZj&5QrH>z04xE&z%a2h%i;G>$rz8;9M=_oMCdomeK@Vlorc30nke@Js; z8HH8Bug?8oy^h9_@M%f?3mK!ArlUt}^2XBs=7%;WIPmy6wjG2~QC8-nl2fXjw(Lya zsy!dmEH8zJR%4Ga*M1}_R0jdTHl`RQLj;rKa#pulp^Se+Hx8`3x!sR8^Kn81wXY zD0or%E8yG$HiP2@aZ5+C;lRCYMg|Dw(&^)B#fQ-x%)d*??4_W^^hQ2d{its z!0Md2!E0*>7?4%qvHNllpdv^8ZFXuV3xbA~uC)n3K)sG)La+^;_Buy$&6!fbbzSdJ z7ACs@m$vLctX)(As_MOb?yRNS=BA@dXAF}@MznM%z_s_044MlJyfw(g>g?{#mLg8? ziWybch-2XT+@+AtHGR{Q12Vd~@)}$)&}u(_Ddjev#XSU2y#x=b$wbHzu@9EXZ>Ex- zXN*|C`}*}LBs;b3ghm4OJiydJlvUY1&D1}9zqK@2pPPUF`HL5wJ13<4>Qeit6Z@x7m{aB3z1OWiK{^$b*1;pTI9j=+%IE!?B?Inb za?d|y83i&yMMx0^eMIv{K1(J?#e(Cyer!rC@`hnqa{`w?dOz)IB%&rIz<*!Q>z4qi z!7)`6?T$Ia9)2NLYa@K!nI+fl(|~?3urU~KcExsnI4}!Qe3+t}9h*adh}v(^AFU*` zYt5VGwINd_p`b?BXYm0+D0vo~@po~R4Oo#UtkGZ6(=kPcdaZE&D10&CWvzHU9eSV2 zhe>%SO%+iED4;n1d5Px6P*xj&uziWC{qej4jVRMYWx(iI;emnJEu<{wac4!Tio}U| zgC&@sweS&1jNdgTcAx0&apjaI7?~tU(3mQ@+Y@Gg*9oUbPwSAI)mp@DHo({OJb({#8fa!sb-IAHqE8u_-$L5 zj`3`b04cQ#MK*`P!{5)*Kt+2PgW=pCk|i<{g5KfJtJVa&09fd_-u*f} zYa^ByZi7cOIYWMUE$s#ul{u(u|E0PNdJZ+!Y_cs!dMxh#*GGC2*d`N@NjHW0>}g81 zll9JbDJ!fw8GleT&5`u$HJtT442+_f5qc-2wnXx!5VgbUC|`ddOi3%RyWS%X{zq?6 z!^E0*R<`N^>C8gWpHsaOq0vmVdPNClpk>kJOOBa56BN1OAXeK&5V)*M5eowD1Oy6M zh37Ub>ZOWXoSA71SW=q1)L#Eg1n^{~9oSbnIj<>*BO>gM?(4!oI;i)^graE}m=W46 z6(X|me`+hnTAZmJQQ8Bh8s5v#{JmmhOXm>VA57P!4kj`r2dl&yCQxgNj;$^Hp{dKW z9)!r0o_f-+C7_ovNXW&c6V5wAzp?HgCX{C6t&^b4=lxwiLWBIs&7AQqAy3sWIW%k& z%%x?0i}T|a%^0*!%d9`S&^r zX~+LjZ2>0dtt6we-LUt05f8UM;lOB0I=y3dw3}7HOdi{CuBc&=b0+_9HuZX@YoN}ek z;(h*}0pVT{8x1{8(^q*Kle4c>1g-bt*w#QQ>y1M;I~|kyFvjGM`2;-TRxG}GKz;qD z=ZNnY=o2r80z5|tuG|%t$x-d1>&qi7NtdX+zGH;sM5Ow$^O12^FL0H7Qf9J!oPl>Y z2CTTi1)uR~zN5 z^0gid&&~+z)U92MF`ynVau)_TY-MSkq0+Gn%5URAR(I|hdB{~Fus1Ae=qKKh0Xyv; z01qp03&6vT;(qoD2!-f$H?#S<3HI>bia)U`E$@8(HLy8(0IbLZ{k(%{4h-<4@o9zH9J9!EhIW`sc#gXDUY}z$k;(v>-N_ay2kHcbPw-uvxnc+LN2Q?xWGmxC z-pgZ&rsHzh6FX0)vfy3k3l5iGG#C3_0shzerqkyal-48wtAlsiAai8!up8T9GhK5c zw-q@nlrpOFe40fU*6C*R0Uk!*WM}eX(iPasVo(J7cn2L%FVhZS&IvF;+pQgG(Q$bL>To)(6S@UpyD(t2~L56(}T z+%qE=vrD|lTu@EkEva{?tcL?I0#A7!F)Hn1JG8W1IlU4F$e28=TrjdR!_AjeO*PeQ z!eIy4hL)dfgo-mCX?$6m^N(vV(4KjOZ0M^Ultd1Fi^i^c{pG#tm;Z-nv&KMWo7 z^?XSfl7Ph3lRxq2UIUc;)Q~ow<5v~gM~2oL ziuSTnME*m=@vg3(e}{ZE_AX{0fL94%KK>-QT!NlAi)_Q-nl~14jcGI%HkL9_0#{Ax z%k<$5ieIYSSkOs+ig6+dX0jdf~YxVrZRe+Z^tK)|yIOl#Gvx64*B@u?y`vXYF57kin;e z45c^C;Sy&o7XZRSHk)=t*_MT*Nf^{lQeG%?{@J++8ZU{PvL}L@SMH~^U@bmip1+j!iO-cbvt5VWcG`@wDbZ{bld25@ zuT=j`mWq=U@o;)wcW@}z~wGV)poF9sV3z=#am6^~k=QnVwAo-QU z)XD*{h`A86y`)#e%`4WCrhPjh>uyIO>vUU#AWH+l7?Y{QT?@svx<-$(T6|1u<;mMW zqvNwiWHs*lVM4*#qu}4*O%UJBqPT3Pa2ZwmaoZwO?f?RBrA*!a1nV9W$(1_IxAhniD&<=oj~&f`YSuvhPLp@;Fj@5_Wf#mUut4mnR^ss=pMC?cTttrqQ{7%X@S?$5&g{kAi1alIIa#W zAYHC^5VUePm6YanI5tMdRgth+FO<)}pwATmmvfD>wENvh+}4pwNQI2XrFL!W%nx%K z4PcFcQ*oH3{tpzXw3g-mhkg6#a$GM_iXAI{dh+_~OXrnhMD|6)e*NI23k!bgb|>8^ ztuuwy#k#7eINA{y!ZCVIrH^)NG}CMa1Q&-6dmf>%bo-Fmqk1g>?7@-IL?^F6COOVl z>s$f>A{(&IFj0vl{>MHiFRfx1zd>tMJ?4Kb02=`DpreA7n4pqcXfmg8 zH=bnKFX@Og6=f{E%F+)loGkGXU?IA*;GIYbuT$skRpY=fm z-$I5a(hZr^aazO1|8PrCKCjfBr3CA`MnFuc-;=#^vJkftnOwxs|UN$1M6ugyL{oP^HN*$sc1P*c6;k{yh`Y6GFBF96{IY} zDS1F^Pf2%22@?s1c`0dfnxBzV649I&aruI?vPhO@q4c6uAF{d5lw1<`N8xMA@cb_z z;~{Rr%?LanJKKEM5I#QD^a>O}ze*_Db|JUG^TI}Z&umC9L>T_=l(;E>*9++0_Nsha z&=8<6h?#+l6=Z0rE8aCDFdNKmEXi&Aa(E5gkib0d*w+m-N^Q8nEb@!3+REuCbai$~ z8R-b3hywG^P*1q$W<4Yg5c(LJ^wlPBrYQwn?qeO%K8YAtx>6L`B19E7$m5|~mZ&Gy zG0=HQBW*yGO3w=`TR00OWGA`3Pi&yT9Sw!vCxN0_RE&d1$_8>R>kxWdcxW80V*xOv zmRcyk$ia(?tTs?)b)-HqN|R*;%4-A9w6#ohT_?vt8kP{=VGh(C)NH(t!N91}C8o6# ze&ty?3E|xihV*!{VHhEo!#%t3%ctskagl7b?RI<|Z6>AhrSR6&0k{Dmsz)_da*+Ty z{ryV6eK|G-E`nd6uso2JBSfFTmL{j>s%l6BDp`)iaAZ9VM^ZB6wu_g73R9Q-y3Uyfino9yrf1Pr%!z}@Tp-4;G zw2b?c!n8>4oI3Ndy1&pW*r~fcE8*@}>Z8+|Nj`h9D&-7Bsc-2NqBOE^n_ni(`)$HS zmG0>4Z`dz(ilsZ{Adg4~`#&T+TbW3CHQMnVT*h>3h!SM25thaF|JqSk`DQP$atc!S ze6x6mUK7XH6Rd%{u<#-bKW;_<0YR>(l+ZE!lfeKi9DFEs zn%wM(1#QKRx`9p#m4$_k4G#k4O|VBSI7=WWpHw|O|N7T^T~D#PhK9%^-_=>*b?T*>L&MOV{3_EW`QBJpev^#weR z5}HoYOfiS+hc%=E-$`LiJ7aVLR$N+pL~6qxD^56M-niU3aQxqLkX$bMW+PLSBgL-0 zvSHjy{?`JHp!^Ge?$aVfYD90&fKDS?HgvDF@QZ{`1TBS{aP~SndQMtvGN{Q=I0D3c zi22?sF&FEW+tSF>#i}30_TnR&odytE@|&myTbq96RQkiLFM}&B{93pvl%6eTWxja$SAOWC|Pf zhr@@WR6S8|h?#xC&~X+{s%eQ#eL?L=sK)(85~NH=zhTUF^`$c`zXF&>d&iddrs1@P zi7Etpux%Dg?W1*lrQ5fT^Xe>dO8!0~xvEhI0Z5XSR95{YVU?7U(Irx?9eo0$7>4Rl z@;(ZtZwyFGwM%rh{rC3L3+o;EYl*x{appzT~muyGlo_ zU}P#AxmMpIGCui7#X(tjl1})3wqqnCk<-kOIy?XYmr8yoNQ~^&DDbK(c!7mi8>eYh zg<`Rl3BnqJB_w=)Qs*(DtvC^LD|Mm|RLd{{0pVSoR^ycr`-c`iIyQR=4bE#v6}We^ zQ;`>bq^wi8ScV`IH0GNCP7-Ew5G!RnM^_!%Q7repu!}lFi1^L-F(n>BZ6=>gX{0#1L-KB@a zMhyGZpq3j>R#c<&^w%Ls%r~lWa!PR`$h$%6Lwhe3wQ6XUGX&oA5{MaXk-6(X<|$|! zli0B2#O{!KLKC-3nyWF{(+%6ZHh{QV3}dqD`@u^`{6=cje?KuAC4pe5zZ@q>-o{!B z_=isGqp5~>Kaa48o5`h_On;U$*$E zD6ky0p@h?O3I(9(r33y56(c;roeB0ic1jPU5ZUySBzv19E6*_L~31h^YqHic@V=lv3DK85({NgsxSPAWt9VK#=o7@ow z2}2z+h#%P_ULgsqReR-quqpDHwjp*JwH&JvmLyCLP|ZwX#f{Xrzi-b!48q-X2vkFh z--~vf{K`UF@lmk-83tnDrOEpoQjjQ-Hm{dE)benO3BBja1cwGbp1^F9;~QISwT+v| zQ6b3%$|xfHth-bp=L8skiRh`leA#<<)OY6eRz2ge55Chm^7FpO{Eda&?kkH(wU_f) zyX{hEFuYN^VE0x-mt;?KY@s#cw=N1pLD|xV(fWgp-XjOMTE`M({VRJ!!ntYruO=)Qa{!6KROM^r4b8 z;41;KaK4|lvVjITKelqWR{9!oG5JvuOpu$}T$#au6YP+|=^bNsj4 zgN*qKu&tU_El8jP6zz6JC|41Q_>KRO{|6O`f-)@ADeHJ>8O{FBk#+tkR#`u{P)ry1 zkx?CPV-?zJK*SG+;@Lisxre7!l@r7?I*h)KgUYN`j|VKIDY2%_w)6n^Nrd%L%SNG| z9P_ALcRdFG$;^tL);z}s2C8CiRg!g^y*MeOr?)^$AG8# zI4`|;UgipT9Ozh-#^JCxDSz9R-lWO|&(;Krbjg{_SN<#s$+t&f*Cn{q=L@Uz`z6rJ zdrPIFBR;QP4Mhlix2D5gAsX!L8|k?9T(_?h z-|Pl?M^}KuZomk61FW~T0)>!@p3Fai+DdDRxOiB&9m|^Bb>%F?zB2VEx$l&|cTvn# zTJ(Ncgvxdo{+w7Wfswg)RS9eNZ^DF+sJcTa6lB!L!9`)#V{=i3PPpHHOSB~}D{;wp zzPjC*vGamaKNyc)zN8w%hckaDsQiz|_LdPVlbgCI;1ZqY;R~zkyC_@UT*Tc?NU00U zCj-PcQF6do1&M_g25+-W)F^S&d&{PP(>14z$3h^s{u{a)eB?+5P@<4jlybn0+Wz|} z#t9!Q<-MJ)<$a3xN?iHWm-9o_My1XE@a)#;#*1d3KWPupWaXsZ z-Z?|v*7z}(BBmGN)*ZCwQ?)x2qHUL?dRX0S#ZUZ3zbY^@Kv1d#0Azv83JgEVedXgE zblhFCvQ1)BW@a%jtmfLfW|5fqU0 zPj{EI7Y2g23GCRyDiro|QjIj8l-%A@cVpS%eBPY#pFfg4du(1pwP{z9jPzUOykS^K zK9Wgla%#;2Fu-SPL!<%%yAE#(hNv4n%`XEnW|%)?Qm$Z-cWX*c8z8Z63xNk7n2Wrw zB4|-dJ(!=;PxI{x8~J%LJ?Ijz`>j(B^ynE@h=9;e-+c7dsei>~xVN#|tl_mX|9R>pN*UcNn)L<1rg@bqa2|{t803G% zchJ3bc={D5E~<6)21yKHq=$L|Ms>;IsWGsn#|r~*3YNbKuvHmA&6q#kXAos~vKuIp zou=h_56w+S5h?2Ts57@6{DwUqA^dynRt*7~i+p<%Ei(bHIgIUoE;Bo&3478mn7`TCMwAJYMLMTqDn{5 z5RzYk*7+fG$A!Bk9ID-Xy}?xAM=|m)9y;}fNg&sw&$3%JJ!Ygb7uz z;(!n&tPTo5L5OPUh6;+G4+6d2;=0|Ol5*RZIY^eJD0Wn zIuug?9pJ{ncJ1CqU< ziwfG&dxzleMi)*DPAqc0h{wW`Vml_kbDxwg5N)->))HWJwJnR#&@Q?^`2s^^-=q*D ziq-yMBk1D@;s;q2hy~N$FCqXm2ce3MdFQ5VtaE=aapTo822p$6)Twd%wV1cSl086j z%p?c}8q48YibqNvS8T~zJ<#KkO3iFPF^|WojX9KpgIrLviO2i_{$a9Hr?P!`6ip-ZUSB;y zcFARv-<(uVJn<|IK~^>^$2uEY>44$?4j(kK5$V5H%?xzra6{{N-+0h;7NeNhUffob zwetyi%gP+0>q?X48R|TOEsSY1hM05-S4x958dJwbTxta{Tm(_0GPi|leEv8no4?0Y zq>9>KzqRXOvEjANL{nZgC*?&wsi|2fqo;pqmR+ajaImt*WLEsR!2ltBzVICBH|_!b zVrt>@QEEW5mTC9^*Mns!H!B}3r=C>7)Ly0`>?0rAQu%NG+d!t~WHAx~nx5N=6zo{M zL=PmnnIoo^Or-eoUiaVa1v{8`RItoIsg$B~g4b5qChMix)>Cs<6*u~y1U5s9;HZ)? zc|kTv3>dtQgiu5c{*pMhd}A{vs3nQ%ZKivFHsM>9fW}~Y zQS`eMfdA@&e;aj+VfBeey&|)2D4WqXBlTK3Y%rXCfc(}yR8@YksZ1tUR2%qg(|YHv zq{z)vM8!Jg#-72Ry1i==+ftg(viD(XY1}z0jQ-A-vwzoaJRV0+h8Zx!)+(Z_3F$5^ z2@mpObe29QvU!&T2zN=Q;>#Yb7LY{z=-ob73taZCi_$cLXc7P`YmQ=g73m+O6;GRT z-fO11^E(s!t!l%uUpO&p1g?LqIf;TITMT5sJLB(t3$n=o_NIcwh%S(ulyEQ@y}iv~ zXZJT!BY_te*46K6j63`=(w^?ra(i_?Jji=o8wP+IPD_lY1zC4?6rI4J-Td=r{1uhFMK|?}DIGt}ZN3rvUoIbAOoI5kD5XNAp9N!`!XV1&C zJ{$_uC7!wUcRMck2T^Gz(klHBpH@;`Oh+gh--7f|50wdp8G(rE`$D;z{!KBX9bu)s zGSZDd@j{1#N0W=|ssK#(@ampWzmMc=9uyeh594f;a#a@GzxN) zlYqte21k021nW3PJ?^Db6PByK2ILA8!3o>MB^AaA2#o%$d<||;X<{mmnUKdaCHK)j zLi#iEa3)Qa>;!bCcJD`s_-}sht{t6a_3=;7>k zCk8Sstq>UoOyyBY(~1B~5#Z0>L-vb!E8jO?wNT!USgoX%NVKse^|D7*0*}ji z>+S9*=uw4*h7BG;{hk{ieAw;DHq&-| zD?T>26!x>$I~{}!En16iVbb8^t#$G&#nDuf3nz7f?1--dhRoCU&Wqdhl?khVZ`)_0 zU+71!E4$oOvwmebU{f$Fd8$rgL?Gz;VT2%v!x3!8P*VkM^||yA_8|VE9zNWP%qY{D z2Qy2z^0QrZ7(G{K_*zAjms1iY#gN zab7{#Qp@c_BzfbLLosD4p;TeXtkU7a_XMqTUCWLcl16;GW#14BV?Yr zJ66DjCFeg1zx0Dvhk>2Qu-(v6eI65T5r`2({*L9N5QEm7g%Zmtt+@bW3+2BOje~#J zdFl?53qeC+Ff5-Jtw9fZue~(+mtT`Zp5hRw7#GQv&~jK452R04?_++q!G+4`BlxH9 zo++?+KZ0jVARM`gyM<}YwGoXlAWh}pYAxp`8+Qhkp{O%aB^rh*y zlwr2fPia3RSzsgB&E+aaQOcb37+Wp7x^w`J2Ln+x_%x&M|4JS2+O9<&ia@`mwbkb_ zIRNU|Dt#YlOk?4;J>Hic7%=C|yEIyypXPaGbRU7J)ErF>e=*7}7jg+3(wNNN$({Bi zoTfBMvZh??-uvu??joLEzexeE4Gw8~Z%k&%;^(A~+NI|;4%J-3Bl@dGP1Fc5EhgbD zD>75WmlkpZbyapZQ*J*a`*5h1vcG}jRaLwx%}sin z*~sJJRFGws>_ycJ4XX){V@josaIW^f2+U?Km=TU=e=h+NVkCC+utP$=&Gvuwa+e)8 zo2Qx~Xy@3AdV@lav)!I0T7W5X@*hta&V%6Q7T~S;_H}1_wH}_hHKB5e#!6?U9YFK;i8Z~!=BE7&a_;Enc_1m%6t@_hM9 zDv*U@x!JebCEU~P`Gb!&s-FB^EE|yq+!+1$p@z*>+=twLys?RbrY?=xI`YK|9AK8R z(}!0H&7aUidpz47a70l55}g$HL_Q)>r5ipZgmNSR zJog@~BO#`S!In;V(g`UYYwIBt7Y_LAS(SM`_)LqvnyZ_YE8*0n5ea>gK^$L)j(%ZL z2RGzl_OOhaWgsO)h=~kIY4AnW;o0ejxWNwUy`zVeu^Ex+9j)+sJ9lt^0T;BDo;!Ex2=A(@vO!vl@z6s};hFDd?d91r#%%CgMq&By9G3a}O@95vAj@g9wsJDo zT@1dG?R19>dl%Wc$-dxf+b>wWFC;ZkB0E!UU|kE8Gcc9Q(cC@>Qr?#xzjyF6as;YN z$B{&Vg!L`4**3Q>=Wt6xkXOa{lS**jCx5E6BG3FTI}J%V`(Y&yPhZn_9-*zcE)Y0M z%v95x`gZ6fSG#WnI}ObM`;}3YPA>gCnF9RmvAMZ$XfY4B6>bGzgYNKPzEC)y=az&6tS)xB0~8t7W4IUql7-Vh7C#waU&Eiau6iH<<#6D z8C0+|m}`IEG|~W0ne6ABLJ2O$-C~(ebuY?pqD%-4^zsM`m^{19)0DDPfKmb17PZnEh z)u(Bu?!3b<93fwBmMCF0?Ti`3XzG|Jr-dh6$Uq7eNSZjV;mj#{&a*N{R%?+j3RnZx zf7Jm&ZVVhX29~*IkEEBYH-|A)tUv#rO7rD#Q}ke=DGI1wy@7;0(Uauk*r62*H+`Uy6OgyWD`m0M=H1_@eLasC`GHS!{^k@1(;v!>Y%CiKQK0>yB0AS4Ii@?;MA7b zRWr{Zk_)aYm@kE?K*~p5olX!jnROrTC&YhMKhMRRXYVeQhZT0fJL_kpv4TBGN zm;j<-H!flS6Dh@V)3bQY8L7y?>NsK=G! zQj-c*iH?k!D7RCHp-gfYVsrQ&5v)54J3+YePh%+w*RVNd#WK4lsDfcSn5ASF1Qe@!gp*>6~Z8Ns5r1|aAC$5=TE!O;n~ukf?DFZ zjzIp^Q!5ejQoQ6+s)0o~iAEZ-Xjmq0srupEtQwA=_r}Nvie)GkIUTtFX?!<_*=$7V zSaRdMHhxf=nL9b+o%cFwm7-`ij9n0ndYR{9Bn?T%>G#G&l?2K5g<0FzxEH*CT~+S; zz7WscmPplG%?M6(HOxjo$F6$dJrP4mG|C|iF;cFo zc)hBM8>ULeQ-jl!gqD|7DS!4kp8_mrd=q=IqH31)S!TAV@y$Ro-tbL%FNpa|19_vW zJ?1N(df5y{LQ#*VYP|K)sL`RM?(YI1jxlpL@~d0FEUL1=<;Uu;uAC>k!S_^|5mSJ5 z1_)B6v%@E*`3&z|5(vh$VVu``Tje)}&W_;ZN|Pu<+*a-HucC)kO6?X|R8k2l3ss?V0J`F^ z>nMEWGSG!o)FJ*i4UeFl80b|BA0BPxsc3cs3JQaw>*(%5gKeMcAey{Lx8y5+h9J8m z=O)~ocPvY1E(B&vZX?50wWiPH?On#(*i`RWf?Q%a5=yiQ6eNNQM=Yo;Y8byUgwR++ zjesebA+m~x{HqU;6H8z+>qGEL9p3*}n4UT)@!>On_o6-g%unX~^V&dvxA6Dj6yhY0 z4?DI<#&nfu+@rOMZrbrjA$G`}%7|{0;e*7l&sTuJNt~9y3skrR!PhKGuJ!qnVa2fZ z-F>HhT)6XM%*139wM%$Km@oj@B`8k3{{9!PrbTBokV=g>Q`dVnJmh&8=>j<&iQpem zT63aZW3i37FhDUHZK(Nn-jVa?Wb|nPX%9?DSaZWUz%l{ktXn?;?ggJIRtB4IO34*G z#W1{9xz4!Voen!@64%$Q2Q7L|z+J-x-7<^H-;@SCEV3j!*}Y#?Lwjmj5vo*$jGJH= zi?fR!`3EN#(Np8Qk6W-;d0lD~rd$$cU8$vLZ&dmZiWZ$E4l z>#~rGF|?NeDGo8M=g;2YzG)XM)dGmiB>(Y!u~2ztA7^RMMVY7M*0QmJ>j#B2-_G?r zY$||>(b|XF$`(C z0hM)X_23S=&C_QNh@-@>^o)1q5OGV41Z%S$-|v|IHE)k^4;)qn$8$lYrg$rd($^o^ zDSZ!Co}6d=M5dxR6NeCdKVvr@6{3$Ed2T1s58qj6%}NURJ3NOL$NX(d*K|heG5n<$ z@18;XD>`Wn6ty|96&=Jt0yoxQc(LU|khe*fR{v8)s+C2Iw9F(?34WOrmWClSqL@uz zpN_+Uc=X4%KImU=Z%IbPid4;qwDt=H|r zc~qu?XL-nB$5;uLj-TNlNlGPDJ@Ieu>uoadzKfz)L4k@E%7!+HjSf1+_({!%+>y{=6koPp&X99flR?zih;9Q4;{$sy@pE zu6q9;P3Qbj=l{R)Y};G!Z0uw#`($giYS~`a$yi>sY`d0?Wvr9!mhJET`QiH))H&zA zU#};w>v5$-?3%hsdk6{CkSS+U$q!l@FDw?){=olOK2*8UZyOd3a(mTLh0@LjOT+@c zu=?_#YOZlOVul@9i0G){f6`_Kbfi(`YJ(p`?8y$>i6A0CW-_yUw!1->Hm|&l9W~vb zVt_JRdJI_e8|TXO!H-3S)))uni)I)Q`mGgSz|)*<#zY!eE$99nn%*+E6^0hdY%5Vl z))tiZiMblH3H1%zkzI`^KdCInx5dY_HTAZF?wf?#B9PvaS4xf$7j{1R4QP>b2**8Y zXp1T@?!JXZYemS&J;a4MDiOzSbD7(k*Cn6xPxj!`T)l%lBNTJ~rg#o=*5CEvWgJwIBUDlr66( z==-qG4@$j5^fvk*-AW-sHZ&DTvTc)sHPqCjKVVd5O*V4~!uLbr=ZEu&8h(Hx%fp;$ZFrIL8A38%KZvbi$u}ow-kV z;q8sV#_ESw`kK0fK!FvUoQz+<1pzNOJU3Q5&!k{ZSDAmL~EgJ zG+j;{VZ8d_bs4yx3=blmANXh0%!|;{R;-)1Zm>K=i|ZHo zi+1{DlH^Bwd0Wzr&7V*FC-+wRb_O@u8X5l8^v}D0xlJ=8tsu*;A?Qb$Bqd6mLY(Hy9XgLRGJ)yO zcS)uRG78ZFXG+rnYsIzhI0Vf zApyo>LQdWWyD5cOL2bHRst}<*@oZGDJA5uO@kO+*s)9U@mW6=vzYu#8ev&5}lKENA z9MJ>$v&_wd6T+(~^`$9GNthT~XXmKO$}J&YdIc;8gHv8LkLmi>NA7C}ldMq^UgCoXeNen+vJ5&DfSQ7%0`rxEaQntMX{G zA*0ocY?>v6R|gL>;`bh-p#JL}YJN3lGEw&M4=XGsD2npO8sp466{%H6vr^Ky;-qYr z7xyc!p8Iwd+0Vvd`*OXaINp!oH#PX#&pB9p%1>qnjCgxW-?uV|1XzTpK@=Fi6c}X} zcG1T4sDFJe`>H!W@i0X6o$`w7|HYB$na5l%yft)x^>E{rz#f?l?=4d0S1ud*+HO5t z5)vYV2&3-8qY+NZV;?6!)aSgJcaG~_XwNTH@F-H;n_un>Ff#nRWDIc}9!)kiJO&u9 za$oz|SR%(g+QFRI`12B_u<)86e_0Jx$Dk#498pbZ~8E0=X#7rg}XskxA}f&rVJtE}jeW zfI$kF@syHb4TCsQ4Joj!D&}p0wILgC;aXp<{sDz6p1iQ(9jNH%q8R&r_k*QyfL`HZI2up@!%CX* zJ4R#8iK+dlvHi7cRPSBYED29nM&d8PPfUUHoE?7-4A zU{ha}5de=di28f_uM!?U8yEAI&`r7+R!Xo+kP)P}#hp)KJByN^l1a%^yGl|1;fhxe zwT`T$-B6$6&HGdZ?>cXTG6$l7!z0s(t(57{t+Z+ThYSS?{xOPvJZs*e>_tK|uj_A3 zV)_ih=@H-P2l5+RaTbdO0JCvrrI3av%WI)Lw~2vZE({R`MlsT@Aud5-sjX(yVIXtW zR8SIyy_}jND7MH~)+wAyIfC%du76NywN``t$_#tHNnFRtOg zyfVOv+I|hM^z!;qG~VdUKWPD#zqa!3~9xWb=<1u$}j+2A$r#{f|4 zL+z@BSRWTyOaTZmgCg&+qqyRiJY3oYmG1)pl%d|~VSrmOcZ-He{IG8xRd9*LJ_lJ} zbC4L9WHw=Vr2?P$-4k2bp^A&v@$s>Q>Y*w!ATib8d5eoW1(#y_CHM-;J-sHioIbn1spZkI%dp zcDFxkWpm>5E1l{vfEO&tp6ubuD|l%-Jnx9nHt}E04#p4eKgiWp|Iu2R%zoQ<4pZ8o z6z!$UM?KW1_5F6A8Ca zAF}7$xD_sTlj`HMS!Azn-M&NUOC;CO1pkF4;ADkB;lN9|Og8hwJFC&p6E{h4b^rl6>!_PVQSAaWDvKK$Hys` z+k-2+@^Bmcab8B>OJ7;uj4o=2c_s0hb=uaTHV2tB@78%qEc=OetPg$w$wWv&XSbGU z!HH3N8{e%wDBPKw4HET)2AeV9i}M?-qCnbw3Om`vR{UUeu%ylvg2v^|k;QWvLLr_1 zVFm;k|6-pz{zxS(4vOCB77cqI5SJV6M0~qliu(j%XJ(1PsN7Xm(JM%f?Ee>LUR{T{Au4D%W$Z_5hn*4Rb zN+{S_Nw#Vy@#5AXvjhtKIR4#dQcS^0(0kWTGNg)I#TP2GxmXTEziLOrU#(;C;?*gk zzfg+_|K&sMJtJ_|5}dfGO*NZg6PBzyOuEj&3lo^uK;0!O@{d02nYzKVxOzb;_A`J2H@aa7$8XB7wzP)O!=JJU2*#6;+q5D9;%N@AIH%VMCS$*LLI=p_++w$Y zm0=tMJV{2J#IKWzh~|uBhMm57o>09=d+k8>gN6I9+2rMZ)u&eie$>)|;vIN>Y952$kA!=e#jW z`Cu*qT`EAdXNgBkg3AO+<_F>=1&(i1{#7}Hm(_o)>(S;(&7>Xf%?$_Y@EgAtnta~i z>~~t01cIjE)oCADOIk`dr6?W~KtBAGqc}7oHL00bLHga25y+B}HCH-qOq7QOGrpX4 z&Hmz&+hhAtH3=T=*xmTrKBMl{3ggJ{MWkMd5Ikz z8CPIxOOuiaUTK7QJ4rC<-l2a#crp?QXT}z zksyvbd2V38uO}a*0Jum@^Q;WwGEhzn)!Xf(ePsd`@mgE|ThuIHRL~0cm|!ZLQjKhC zt9B1D@qq_V4j;U4t1PbnNv8TZD8%Hu<{?z!3x|+>AN}=j* zEDF?|r4(c_p~f5gr!f!HXfqurVPp)_OdON0r&It7vsLKs6&IFm@!y4^E;xuR@Jd|AnE^6W;cd~IV!p?LW7 z>^0@K^5PSFe$7Gh#Xkf!CxXBjDc{C~R1m`KZnQ%4yQ!XPs@deH;DTDzXWw+dqzL#_ zYT|~{5vbh2=k)i_{PX-Am;KK`r-T86!%rU<4xj(Ah}5A4wZ0r;OGfg%i%#}bomlqo zN{62~-O=pj=xbb~l?fS{u`)7{Iu67LGlNA7RuKvP_W&8#u-^j~osCdx5IAc~g}7ye zC2meF@cavvJN|5VW1qL)cFuuqx{ZLXf zi7Wg`MM5F+k-o3HqgzJJRmqn);QbgO=;S5;J{2d}w5>$ST0f8?TQX&URo%;4b$Osd>bRunwWhTnJOux4HkhWrqc@OXCg+rGN4eca@ zBw#tPQP#N21jo>Fm>dcMA6eufNct2Zlug0TjvZoBWs=?1627!tzn<&%?1X>KAqQ}UJtGDd9 zdmdw=ERB2?an?Wpc9iGE1@O-FAQfv>h94A!M=E? zqLsQVR}k;uwWnk;?{a_1DUsfE^##N#S3{5vuGGscx2$R@{w^73dC zDV_XvxBX#%7e;*Q5n))VzQQ{l*b~boyG?UjnRtj&_5oB-K2-Kv6zhJi`5Qf8b)=@= z*ZFK5QB7nWf@g6uVIM>$9R~Qwqdoyru0X&ol>Q*Px5X6Mc{km(g#NffFQDxl+*q3T z$>gw|G08x}h^1z+F|^;t$_o(2D&^9d zU2fjDOQ8Zw9!vn*gU-kwsdSjM@8R#y-R-tX4|GQdxx22CPU&FyBy_9%Ao|)Q2q#jW z^=3w#e#sX@hW_?}4P9fp^9l>`+SX+XF79$VIw6 z<2m|skQLm`x!Yy>Y}>}#;YCKlAFB#=OTzLFnO}by`{0i3gTHF^Dj^O*V%1E{xDR{l z*wTwp*Q|~-KzR)@yr-G<%*&%?)@OYepknv^kuO=CRT%cBsaxM9z40>s`wv4{R$eYJ zzq%dOup*!_MP^ksQ^2TzP1SbOg1I0pgR06_>+VaT1fDQ86B^L|IY|De<%Q!krCO1mN9)+|rmbxgrr7JQW?a6>5T`TtCbSl{X*B@(vi47mNO)#dK+jC3Z74Vxm*+yAcGI|hS)r#}X4wpFH zAX-^@c2WoJ`IuNEzK&`TH5FV9BGcd%PDEl%-<96a9il_DR!h(3yGl`bCyay4qjmBw zPGNE%N@1FQByPSu?odEiNHA_bWr2}#@KEM3t~s@WAdP^cmp5)0R+%A0NZ+*=v3h~p zzss1Koq1U~Yn)2@p91ye++VnWwsc9j|AjKe*QikKohvdq*DY=X!k5xxvKs8+hqt}U z1~h9XI$mc;w;@11CM59!GK8-}-CnwxVUi1jO%<$`T1z=^D6g0iJHt^$Y!r2vYb2BR zOlz12iB5ez) z32-fNd^l)bltQsX-{|HaFc(wjoMc+xRPVI(9qya2;Xm_B7OgqRf)^<^GVl&$)^IZ4TmgPfS@ZhBXlJNqOorP)Vw`zMz2jn>ywG zA_}gHuZK&+$U0E`e=We+1>biu!PSZWIJPPI`n6Qa;DzmXdLS?k^G9(oHV;#t zeAuD=(rtNb8pfuQ&H%?LRzve()D_XYf%64K(j~}&uyFA{1F+n>T~#znUo!0bfzb{V z`)&AHCrv>-Zj-%*hulK6FlAhzwzxl>YNSXu6M@qpIbk;30#?Gvw(ZhcxJ%)oJHOD= z6}I|l0!CUpqyC--XI}J+W2YzpbCDFJGJ0LLd+g{dzq}8mApt#11;1oJo$v6#OvFt* z!M6f;L}gnU$4_+2Y|?8NlPA4lVtI{|c;>9%dV~b@0Z8!(wSB zES8W5wrzoatPKDTjrXJbFRM&M%NxYSq@v?|t+DEhf=4f3C}QS&Z^wcYk0CTl_3TZ2 zHRK9gXZQ0`U&D?3ZQR#ERZARw_Q?`v7-k#2OKx)1%8|GIQ^0mqqqM%JLW2@Mv>+%x+YHu3sv-)X)*BHvZ?c~9c61(05$`wt zB#OlRF4caWpMR>NuG-+;8HGbcmtJUooq-=HrqIJH|KB3YjOhsFTo14Y>P=9c723Uj zeR}`g(LD&Ha@^SiL(YElsg>)a&+@4|U)I-5NG&)qF*kBPY!3E5%pBBj!JRwmL~viF zP{cBha9*r39GS4K?E?s>Tl(PYBmSQV{1ocWmsteYDt?w#o*zdQR~<$O>_`N^iDM^; zV+S3S#*hfAWGvipppH5olCdW7E|}^A19Q5*4ulY-l|}o0`{>C{tfiPWv6|A6XRFNQ za~FOLoYH}#DJH2KR>LX@!zvmSCLpX3$U@!H9l}rYjRR&86HTQN(ROW;2Ga*-0;?;K zuA2TDZhq~QHr7gi5TU>*&HGc)rbx}OO<7V^qi*fhT!iBH6asC3H3o(fhSicNy#PCt zBGwn7y5dal^leL9JR#a$3H}o->PGXtwkh#KD+)e9JQw`EI2!5_XG8bcp(}&ZfCoqL z1rTo_#QlA=wm#9JsbDs=|C+2NnXD>41vy{jr$okqS>OuN7Y>imPU<;P9gqJ-tfswr zIzhI=+JEU3czpy!7|w1O{UtcZIRIu4gbY(vLvDvkeIPeo!7$I03>mZ_)^M|*{5cq$ z+V{29S4yD-MwIk)^EgbB>ZzO{%AKD6(t}dd^U0ihzE62$8#iHBXV9_sCq7~A&iOZJHd8v$@UQllQ^LB2Kp1zU;B(UaoP4?=Uq9mtjJz%Yg6NoScGa6 zD*Ut`sl26`s`Zv~aVd%&HhmQ$5AEmFUE>&wobvcNP{$5+`Bm|udFN|?(a$OMD>wl@ z7LvT41Qe7pfPFOOS?LFVdo3!IQCrlyMyp%mP3$0Vz^p+yB@_^C-|WJF8dp<>Y22=p&d?MEU>;_T^HkWNCtkG z#2(`OAbvum6&pQB=IFq;De?7R`@`K$?n-pRvsD>wgsy7jy zfH#(a(FVwQ=iPn%gol>gUO;^BKfbY!ACfY}1AC3!;Ekp#<*##O8({>$SU=Tx$h;Po znpy#*D%i>5{xjS2XVTdY+7BAZILQ(-nugIM)_y5nwiTyi4hBy*mRb9B{#|<8-;(;c z0EEBC#Yg!_^dQdBi~a9mU~Lm3uZJshq>ZK=R#pSrBLMoz$bwr+-Jjd?$@|1-@$wa3 zLN2nA@xr;Qmzy3>Wm7L5Nkr*MWd0bIut?uX`Gt;@pIC~6 zY{uy@uki#Dy;e&<`LS?-(TPj@Q8(0-fe8bCG(|~LR$o+Z52dA@b7nM>b}Y^GBNySS1`2uu`E0r_e_H>$W{g}q8Nd`WT0i$*q>oK6EO z^qJ61Ov`nb5OLqe1gO;?wJ8mL*4<8F^|3ojk9uC$_vTu%v_<)#8F*6L=KM_<+ITp!jn}z@b0;mKj;$DQv#ThqclJ_4f5@UISd577K zy|>#Rj=dmx=O1gBEAy2`3(+3pB16Q*BzI-ud^3yHZiY|*wMl~#(DXugF=^n4Lu}PU z_*DIcRzP`2LQEYvcomF;Q+$d9T61}I=TnDjwE8J5vfg|G&GL})JeZ?8g$B#_w}5v~ zbu_w01P}ct5t_E*B=Ic2eCL$ze0@9g-8*7O1X^O7CXVyNVqIG$9a5UMJohdF-&xMa zb_9A@%x$dfmfMUG5p0F_Uyp8mv&vz#2RIZrouloV@Zd-D^y*VOqxa+WXbG6VyI))~ zaL$!(ZIWh@L~Y1&t#jK#M1Fo}BMYL}xvI2)c>VaV3qy?+{h}74rB*u;9U`h+A_+L0 z)3KPAJU(DPsH)8oJy+oh*OUgvCl41okR4{kWt-*Kken1NOCdl(j4wx2W)CH(*WJ}( zc&&P}z|sgPvil6mk0{MB5M(cv4UWTf-P`;Sp8pp4+kEi{^$*gu-5h zwY8YFnrSAHTohil1#pUxltG5q=b&S+mVO(RmBPZ-djBb)axFQ*&T--}dWT!$SL9?Q zzUB%?*8g{UKdco|Z@sBU1PD9R%jpYKh*lZ6PIgm$Ae}bx^MnU<_4yK`sPrwb)pKLGf00L? zdQdOV_JKiWBx1PmeyT41jNSlNwU?inlZ+FW&UJ&r3b_14#+1sX5nf8E2$A}T{c8?1 zPU0jpkqUeZAE=?I;vDZeHN?6y0^j2zbv|)tixMlY8lSgq$+)K-jKVsQ3{f`ZbvBFi7vE$u( zCF@nPNws-`;zeF(wmmuMlEYy!oN1UkoGJ?a-lf*Hjj4U}1m}sxBQW#oWM> zIm!?T5W}D);f>Oqr@`GKcmTIYV?`F{*~0ST)(Mx^GXfO+l=-E$l{*yj;!go9^IPdi z!kJD@Y`MAGs5duRuqU+A+B|{Dhf8;Hn$~1M*PSh?{wv$I!qz9iRb3l%eU;Vu_i`UM zhVR;TOVe}gtp(U^Oe<0SO<9YkmaRjSV#i7NqaaaxO&Q0RldkjsL#{$-1$0iX4Y9EwO6xHudd}LgeBixsT3FV?BdgTxQd0B-FrEIv87U_nf z=2s3(H#l?tGn>87M)|P1<_N?=0P$6k!Kk`OqdyGC5OlG3^Qeac6cG{k2Fj`P2{LzNy(Xe>&(_q0wqU_$$Fpy27WQ{I)Ck!v*)7% zu>i9XA2lpaXnsWoB(BRW2|DSywN(74W5!d@CC7Lwf1o{+2SBX@w0XW^4U81K>$0zD z(Z48s@HMh=o@?IH-eZoPenWj3$q0Woxmz(e#-Db#F4fqH4oot#+bH8(F;N$(XK=wN zFwc-}yEhD8*#!9XdqvNs1QM8|IqvC5AaZz2gdE6c9HvChh%WsB&Ld@2twjLtKVjhi=#U8R!D)%^u@TDJc7B^w0aWV<)&CVch;3@^t5fbqzl7Wf&Z0WP3J zS3&`Gcp4Zi1=(t?ZMqNwNUj@0{0)jJPI9E<^L5J23>qDwwW~vGhB<~X`Y;XPhSmAa|CEI2 zn|bweFb2Sm@ZySgK764v^X1UKHa!;yJUP0dfcuKE93t^+UWP?=?%g5ytt?a;jNr(- z>kT;JfW4lZa8GXnz4g$i#HJO?8;y9QiQn85;UmYzW69Q$;{Sdi6<3lEkmh}FvBqNO z_l5ROUr)O-P4z!XF)QF@lYKVgaB7I8hRuq5=KqDYDHPW>b;omOj>cxo4N;#_6d=lM z%$2ek;zTo~h}T?91LP9e9hw5e+zJ=_5R75uS1M!5xVFlK5?4%GfKh)+KlGQrucwLY z$OnhniHnVy;P^SkC%NB4sG5b@Xw50qJFatfB|;pK_(ljs4qD?+k&(dB@U*VysW`M3B4qOwc~J4Ib3N+NDC=v7&PtRv<- z?cX-z;c{IIezNZmZ-b~5EB_#DWoVh>fAqyaw_Z8UPlG50C5e*_7Nj^66PVuzft+DR z8#1ZCvCG;_(_^^@Uk{gP$)6E|l+rf<_CRpg$>vEClT6V2L$h&WPWW^Ob?a`eTc_gV zSw+v}nkxfN5#pPRbF{lY@HFG+4%XM!_>~32YX$=EW{9K&#?CcbjV*}o?!kxWcb zej<2SfpZ*maMq{uVX=N5ESX&Qh(wt7KWRCZ3}DdxKtv53pumojBfiA5aJwp;Rv8^Y z7z5A7bS(V-yO2Lmk?`)!Q0F&t+-CYujT=!MB66~Hs;!R>fL8q^Fp@V-%QpPrIw z^wGz{UJ2Zv=q)9SvvN9cS>hM&|%7>rLLvdrJU$c8&LwrKt9ga zKzjaE!jBm8~fxW{3V>l_*>Vy0vDzUe^!soqhkM_OV1Pd;&o8+D(Vo-~~?Gmhw*X>NbCG}_+1IdPcvM%Dsa>I1z=%&3Yl?BT!UP2>E~I!*%7k!@G5Lk}ycqGWs758zO?7>u>Q4C!gk=)5LxpyX=814AjKJU{asg2e zB#~c@NOns~!aQyd_%Qwn913{IVxO#&`XpVbSS#$J%U}9aZS(%g<@%4gGyTq4kP>&I ztg~tN?b<(0(j#6WmzkCLajuTKY0 z`(!OED9{QN>%R%4THrSK*xm*P}C^Mp?!lWcvgw-V2)?u zhf*l5o`oKMb<;LQ3iJ0i7+Lq&v9@03QQSQ`5X@X|_)=|nkVH!&h3)72&}>gMzd0tp zg38(`z^(tExiscnZrXF{!PjZm%|&{<5T_zcoy<_JP^~OUD5;DHadls5Gc-HH^ol}G z{`+3Dnyuz>ecAsC%1tlfj}vWo9d3{H<<3pZ+utOI=71@|Cazg`(Mi*yCU`WV?Z&L> zR~sPy?~G)sbmGmYAitfZ4yj)p;}Pd8w1%Ys76~6dPyWy*1n5J6oK8OfIwmJ?P0TmF z=F*uo--iEtT$m2BBt<+j;CMfG&;dNl{n?5jE~vPALV$VMbRn?P8S=ZO_#8~{H~HC6 zHOT#UzN*FsFQAO*>*Wkgz)Oo}1De88f$($Hu0c1P9&KtzQveZuLN}W~G|In-K2Q*R z|DAAqxPq>}93i(~HIrs;I@vJYAB%e)pRS_P<}a%QEN6!>$=s)csI%fNfVlVO!Zlo+ zGFAR*i3`K`eH$m-$D0KE7oh}c^2&3;go}O{>f6N@k+oKyrNP77KS1*1&!BZ+^Psta z8C5TnP8e|w1i*OYXk?BNwqgNW*UU`9#QdJd^PQDBc(3Z~0gD2*>&z3xbynU4xWgqR zQ0%%SatKVgY-mUC@Cv4Xn~}H~#zwZ1 zvoNVBn&*Szv4Z74VA)YtTa#Mt?nF7|kVisKF{a+?5LsEuwE+SAXEy9koFAFW&ILJd zhh2GXq%%5nX9LH1F|x`a;|*2FIiJhcnbOAC)+Yc9az1vK=2daM!v$~w*=v6#^0FcK z`TSU2J{m2bI6z^j;6;>oM6OIq8%yA%gdg6Yy_}Va6Z}FJZ6D0Zg42riErbflWjge! z8pH#}e@>l|xUIZhs*-T8KhL>gOx}0iuQxo%ag4x!+~wU^s;*T>s zXqKQ9(ptlqnxiry8eV?JBm8fpxp$GFZ$xMfTlA4?an1nq_X_(z;`_FbA-|i$w-aN; z5A_d(%G^Tm4gx~{Z9z%h?k-2{ER8wHrTB371B}1ELfN7+351DjL08cof)qP|Sh0hj z%xqqVDdRr9RX=N+S;>i9tu?{kDjh*&JQ>wKE&t7T%}>jf$9d%|=>Y)a1HNc2M*Q|` zoVQz-AnXd9ATz+B9e*ZgD3?gM&7q?RGTdyRBaQnz7MQ_+_5*zm?t>2XZ15qw*~Z{e zVZ8Hn!EIB^5+|Tvy(Srn-qy7kN!1pvVRy8l-;y(3y2OiJ(TSdr?K)6&gd(aXSUh*z}fAYT_NIudV~mH;Wb~TKE!8 zZ^p)0+aK|4OGP#a%#&Km$fHyYLE$}3LcU(;rL`DOpYocS0Ik=DR9rWt4pFilD=CiS z15y0sS9Q}&^Z(5yhX52$%3~+y2Tgs?v46fS+4gz3aKL-v&_@zy{q>*E?&lMMT2>9U z+r?K64*AUFoSHPC7=tOWpH3T|Lv~xv@!iPU@xb4yfdW=jL?9OA_7VX&7x)P6TYGqw zotv-#oF#@IHba4^%%9=LD0Q?AB}Uu4LB=^v!}G2Hh)Ov5A@BRMtez4n%qa#$8 zK>#q0SWovi^#ziV^^dm31HQ5xTu(A~r>50y;LoI!fful4#7k_y*wFw2Y9Jll14^S2 z^05p>`czfj@?&{?-)8lWrZ=KJU^?fdR6RT$bWzOn#YBcjq00ZXYXNW7Gwlj24@?%X zHw70szJEy7iv7T`@70X~E0-0I3@9g1n(c+Ze>;7_pj$x2-Tu=CN6Q04c)$t5=ZWwX^7}6m7L!jq})8MO(z+>%0D6TdGT-d0>fWxAY@$!0t%v)<`&@B)u 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

b&2EzagXF+!t?|1|;C)OHR&aKqQc?f-U_6GaY& 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 literal 444432 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 z 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 z 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

{^RpW_mC!wp}GWTJ*yCV|sD>y*-Y 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

m*5|~19 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