diff --git a/lib/chess/board.ex b/lib/chess/board.ex
new file mode 100644
index 0000000..20e8880
--- /dev/null
+++ b/lib/chess/board.ex
@@ -0,0 +1,73 @@
+defmodule Chess.Board do
+ defstruct a1: %{ square_color: "white", figure: {"black", "rook"}},
+ b1: %{ square_color: "black", figure: {"black", "knight"}},
+ c1: %{ square_color: "white", figure: {"black", "bishop"}},
+ d1: %{ square_color: "black", figure: {"black", "queen"}},
+ e1: %{ square_color: "white", figure: {"black", "king"}},
+ f1: %{ square_color: "black", figure: {"black", "bishop"}},
+ g1: %{ square_color: "white", figure: {"black", "knight"}},
+ h1: %{ square_color: "black", figure: {"black", "rook"}},
+
+ a2: %{ square_color: "black", figure: {"black", "pawn"}},
+ b2: %{ square_color: "white", figure: {"black", "pawn"}},
+ c2: %{ square_color: "black", figure: {"black", "pawn"}},
+ d2: %{ square_color: "white", figure: {"black", "pawn"}},
+ e2: %{ square_color: "black", figure: {"black", "pawn"}},
+ f2: %{ square_color: "white", figure: {"black", "pawn"}},
+ g2: %{ square_color: "black", figure: {"black", "pawn"}},
+ h2: %{ square_color: "white", figure: {"black", "pawn"}},
+
+ a3: %{ square_color: "white", figure: nil},
+ b3: %{ square_color: "black", figure: nil},
+ c3: %{ square_color: "white", figure: nil},
+ d3: %{ square_color: "black", figure: nil},
+ e3: %{ square_color: "white", figure: nil},
+ f3: %{ square_color: "black", figure: nil},
+ g3: %{ square_color: "white", figure: nil},
+ h3: %{ square_color: "black", figure: nil},
+
+ a4: %{ square_color: "black", figure: nil},
+ b4: %{ square_color: "white", figure: nil},
+ c4: %{ square_color: "black", figure: nil},
+ d4: %{ square_color: "white", figure: nil},
+ e4: %{ square_color: "black", figure: nil},
+ f4: %{ square_color: "white", figure: nil},
+ g4: %{ square_color: "black", figure: nil},
+ h4: %{ square_color: "white", figure: nil},
+
+ a5: %{ square_color: "white", figure: nil},
+ b5: %{ square_color: "black", figure: nil},
+ c5: %{ square_color: "white", figure: nil},
+ d5: %{ square_color: "black", figure: nil},
+ e5: %{ square_color: "white", figure: nil},
+ f5: %{ square_color: "black", figure: nil},
+ g5: %{ square_color: "white", figure: nil},
+ h5: %{ square_color: "black", figure: nil},
+
+ a6: %{ square_color: "black", figure: nil},
+ b6: %{ square_color: "white", figure: nil},
+ c6: %{ square_color: "black", figure: nil},
+ d6: %{ square_color: "white", figure: nil},
+ e6: %{ square_color: "black", figure: nil},
+ f6: %{ square_color: "white", figure: nil},
+ g6: %{ square_color: "black", figure: nil},
+ h6: %{ square_color: "white", figure: nil},
+
+ a7: %{ square_color: "white", figure: {"white", "pawn"}},
+ b7: %{ square_color: "black", figure: {"white", "pawn"}},
+ c7: %{ square_color: "white", figure: {"white", "pawn"}},
+ d7: %{ square_color: "black", figure: {"white", "pawn"}},
+ e7: %{ square_color: "white", figure: {"white", "pawn"}},
+ f7: %{ square_color: "black", figure: {"white", "pawn"}},
+ g7: %{ square_color: "white", figure: {"white", "pawn"}},
+ h7: %{ square_color: "black", figure: {"white", "pawn"}},
+
+ a8: %{ square_color: "black", figure: {"white", "rook"}},
+ b8: %{ square_color: "white", figure: {"white", "knight"}},
+ c8: %{ square_color: "black", figure: {"white", "bishop"}},
+ d8: %{ square_color: "white", figure: {"white", "queen"}},
+ e8: %{ square_color: "black", figure: {"white", "king"}},
+ f8: %{ square_color: "white", figure: {"white", "bishop"}},
+ g8: %{ square_color: "black", figure: {"white", "knight"}},
+ h8: %{ square_color: "white", figure: {"white", "rook"}}
+end
diff --git a/lib/chess/dashboard.ex b/lib/chess/dashboard.ex
new file mode 100644
index 0000000..4cbe580
--- /dev/null
+++ b/lib/chess/dashboard.ex
@@ -0,0 +1,83 @@
+defmodule Chess.Dashboard do
+
+ alias Chess.Board
+ alias Chess.Coordinate
+
+ def build_dashboard() do
+ new_board = %Board{}
+ coordinate = [:a1,
+ :b1,
+ :c1,
+ :d1,
+ :e1,
+ :f1,
+ :g1,
+ :h1,
+
+ :a2,
+ :b2,
+ :c2,
+ :d2,
+ :e2,
+ :f2,
+ :g2,
+ :h2,
+
+ :a3,
+ :b3,
+ :c3,
+ :d3,
+ :e3,
+ :f3,
+ :g3,
+ :h3,
+
+ :a4,
+ :b4,
+ :c4,
+ :d4,
+ :e4,
+ :f4,
+ :g4,
+ :h4,
+
+ :a5,
+ :b5,
+ :c5,
+ :d5,
+ :e5,
+ :f5,
+ :g5,
+ :h5,
+
+ :a6,
+ :b6,
+ :c6,
+ :d6,
+ :e6,
+ :f6,
+ :g6,
+ :h6,
+
+ :a7,
+ :b7,
+ :c7,
+ :d7,
+ :e7,
+ :f7,
+ :g7,
+ :h7,
+
+ :a8,
+ :b8,
+ :c8,
+ :d8,
+ :e8,
+ :f8,
+ :g8,
+ :h8
+ ]
+ {%Board{}, coordinate}
+ end
+
+end
diff --git a/lib/chess/figure_move.ex b/lib/chess/figure_move.ex
new file mode 100644
index 0000000..2001472
--- /dev/null
+++ b/lib/chess/figure_move.ex
@@ -0,0 +1,96 @@
+defmodule Chess.FigureMove do
+
+ @rows [1, 2, 3, 4 ,5 ,6 ,7, 8]
+
+ @columns [1, 2, 3, 4 ,5 ,6 ,7, 8]
+ @columns_value %{ "a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5, "f" => 6, "g" => 7, "h" => 8 }
+ @columns_key %{ 1 => "a", 2 => "b", 3 => "c", 4 => "d", 5 => "e", 6 => "f", 7 => "g", 8 => "h" }
+
+ def move(%{"cor" => cor, "player" => "white", "figure" => "pawn"}) do
+ [column, row] = String.codepoints(cor)
+ row = String.to_integer(row)
+ moves = Enum.filter(@columns, fn y -> row > y end)
+
+ total_move = case length(moves) == 6 do
+ true -> [ row - 1 , row - 2]
+ false -> [ row - 1 ]
+ end
+
+ Enum.map(total_move, fn move -> column <> "#{move}" end)
+ end
+
+ def move(%{"cor" => cor, "player" => "black", "figure" => "pawn"}) do
+ [column, row] = String.codepoints(cor)
+ row = String.to_integer(row)
+ moves = Enum.filter(@columns, fn y -> row < y end)
+
+ total_move = case length(moves) == 6 do
+ true -> [ row + 1 , row + 2]
+ false -> [ row + 1 ]
+ end
+
+ Enum.map(total_move, fn move -> column <> "#{move}" end)
+ end
+
+ def move(%{"cor" => cor, "player" => player, "figure" => "rook"}) do
+ [x, y] = String.codepoints(cor)
+ move_x_y(x, y)
+ end
+
+ def move(%{"cor" => cor, "player" => player, "figure" => "bishop"}) do
+ [x, y] = String.codepoints(cor)
+ diagonal_move(x, y)
+ end
+
+ def kill?(%{"cor" => cor, "player" => player} = params, coordinate, active_player, _move, {_color, "pawn"}) do
+ [column_kill, row_kill] = String.codepoints(cor)
+ row_kill = String.to_integer(row_kill)
+
+ figure = Atom.to_string(coordinate)
+
+ [column, row] = String.codepoints(figure)
+
+ row_left = String.to_integer(row) + 1
+ row_right = String.to_integer(row) - 1
+
+ column_value = Map.get(@columns_value, column)
+ column_kill_value = Map.get(@columns_value, column_kill)
+
+ column_left = column_value - 1
+ column_right = column_value + 1
+
+ (row_left == row_kill or row_right == row_kill) and (column_left == column_kill_value or column_right == column_kill_value) and player != active_player
+ end
+
+ def kill?(%{"cor" => cor, "player" => player} = params, _coordinate, active_player, move, {_color, "rook"}) do
+ Enum.member?(move, cor) and player != active_player
+ end
+
+ defp move_x_y(x,y) do
+ x_value = Map.get(@columns_value, x)
+ y = String.to_integer(y)
+
+ x_left = Enum.filter(@columns, fn column -> x_value < column end)
+ x_right = Enum.filter(@columns, fn column -> x_value > column end)
+
+ x_left = Enum.map(x_left, fn x_number -> Map.get(@columns_key, x_number) end)
+ x_right = Enum.map(x_right, fn x_number -> Map.get(@columns_key, x_number) end)
+
+ move_in_x = x_left ++ x_right
+
+ y_up = Enum.filter(@rows, fn row -> row < y end)
+ y_down = Enum.filter(@rows, fn row -> row > y end)
+
+ move_in_y = y_up ++ y_down
+
+ move_in_x = Enum.map(move_in_x, fn move -> move <> "#{y}" end)
+ move_in_y = Enum.map(move_in_y, fn move -> x <> "#{move}" end)
+
+ move_in_x ++ move_in_y
+ end
+
+ defp diagonal_move(x, y) do
+ # aqui va la logica en diagonal del alfil
+
+ end
+end
diff --git a/lib/chess_web/live/components/square/index.ex b/lib/chess_web/live/components/square/index.ex
new file mode 100644
index 0000000..7bd0641
--- /dev/null
+++ b/lib/chess_web/live/components/square/index.ex
@@ -0,0 +1,22 @@
+defmodule ChessWeb.SquareLiveComponent do
+
+ use ChessWeb, :live_component
+ use Phoenix.HTML
+
+ def square( %{id: id, square: %{square_color: square_color, figure: {player, figure_type}} } = assigns) do
+ square_color = "square" <> " " <> square_color
+ figure = "figure" <> " " <> player <> " " <> figure_type
+ ~H"""
+
+ """
+ end
+
+ def square( %{id: id, square: %{square_color: square_color, figure: nil} } = assigns) do
+ square_color = "square" <> " " <> square_color
+ ~H"""
+
+ """
+ end
+end
diff --git a/lib/chess_web/live/page/game/index.ex b/lib/chess_web/live/page/game/index.ex
new file mode 100644
index 0000000..f03329b
--- /dev/null
+++ b/lib/chess_web/live/page/game/index.ex
@@ -0,0 +1,88 @@
+defmodule ChessWeb.GameLive.Index do
+
+ use ChessWeb, :live_view
+
+ alias Chess.Dashboard
+ alias ChessWeb.SquareLiveComponent
+ alias Chess.FigureMove
+ alias Chess.Board
+
+ def mount(_params, _session, socket) do
+ {:ok, assign_initial_game(socket)}
+ end
+
+ def handle_event("select", %{"player" => figure_color, "cor" => cor } = params,
+ %{assigns: %{move: nil, selected_figure: nil,
+ board: board, player: player}} = socket) do
+ case figure_color == player do
+ true -> move = FigureMove.move(params)
+ coordinate = String.to_atom(cor)
+ selected_coordinate = Map.get(board, coordinate)
+ {:noreply, socket
+ |> assign(move: move)
+ |> assign(selected_figure: Map.get(selected_coordinate, :figure))
+ |> assign(prev_coordinate: coordinate )
+ }
+ false -> {:noreply, socket}
+ end
+ end
+
+ def handle_event("select", %{"player" => figure_color, "cor" => cor } = params,
+ %{assigns: %{move: move, selected_figure: selected_figure,
+ board: board, prev_coordinate: prev_coordinate, player: player}} = socket) do
+ IO.puts "KILL"
+ IO.inspect selected_figure
+ case FigureMove.kill?(params, prev_coordinate, player, move, selected_figure) do
+ true -> update_board(cor, socket)
+ false -> {:noreply, socket}
+ end
+ end
+
+ def handle_event("select", %{"cor" => cor}, socket) do
+ move = socket.assigns.move || []
+ case Enum.member?(move, cor) do
+ true -> update_board(cor, socket)
+ false -> {:noreply, socket}
+ end
+ end
+
+ defp assign_initial_game(socket) do
+ {new_board, coordinates} = Dashboard.build_dashboard()
+ socket
+ |> assign(board: new_board)
+ |> assign(coordinates: coordinates)
+ |> assign(player: "white")
+ |> assign(move: nil)
+ |> assign(selected_figure: nil)
+ end
+
+ defp update_board(cor, socket) do
+ coordinate = String.to_atom(cor)
+
+ first_change = socket.assigns.board
+ |> Map.get(socket.assigns.prev_coordinate)
+ |> Map.replace(:figure, nil)
+
+ second_change = socket.assigns.board
+ |> Map.get(coordinate)
+ |> Map.replace(:figure, socket.assigns.selected_figure)
+
+ board = socket.assigns.board
+ |> Map.replace(coordinate, second_change)
+ |> Map.replace(socket.assigns.prev_coordinate, first_change)
+
+ player = case socket.assigns.player == "white" do
+ true -> "black"
+ false -> "white"
+ end
+
+ {:noreply,
+ socket
+ |> assign(board: board)
+ |> assign(player: player)
+ |> assign(move: nil)
+ |> assign(selected_figure: nil)
+ }
+ end
+
+end
diff --git a/lib/chess_web/live/page/game/index.html.heex b/lib/chess_web/live/page/game/index.html.heex
new file mode 100644
index 0000000..0020b53
--- /dev/null
+++ b/lib/chess_web/live/page/game/index.html.heex
@@ -0,0 +1,11 @@
+
+ Player <%= @player %>
+
+ <%= for coordinate <- @coordinates do %>
+
+ <% end %>
+
+
\ No newline at end of file
diff --git a/lib/chess_web/live/page/home/index.ex b/lib/chess_web/live/page/home/index.ex
new file mode 100644
index 0000000..f6740f7
--- /dev/null
+++ b/lib/chess_web/live/page/home/index.ex
@@ -0,0 +1,13 @@
+defmodule ChessWeb.HomeLive.Index do
+
+ use ChessWeb, :live_view
+
+ def mount(_params, _session, socket) do
+ {:ok, socket}
+ end
+
+ def handle_event("create_game", _value, socket) do
+ { :noreply, push_redirect(socket, to: "/game")}
+ end
+
+end
diff --git a/lib/chess_web/live/page/home/index.html.heex b/lib/chess_web/live/page/home/index.html.heex
new file mode 100644
index 0000000..0bbf00a
--- /dev/null
+++ b/lib/chess_web/live/page/home/index.html.heex
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/lib/chess_web/router.ex b/lib/chess_web/router.ex
index 6545232..1e0137c 100644
--- a/lib/chess_web/router.ex
+++ b/lib/chess_web/router.ex
@@ -17,7 +17,13 @@ defmodule ChessWeb.Router do
scope "/", ChessWeb do
pipe_through :browser
- get "/", PageController, :index
+ get "/dashboard", PageController, :index
+
+ # live "/", Page.Home.Index, :index
+ live_session :default do
+ live "/", HomeLive.Index, :index
+ live "/game", GameLive.Index, :index
+ end
end
# Other scopes may use custom stacks.
diff --git a/mix.lock b/mix.lock
new file mode 100644
index 0000000..e827ca2
--- /dev/null
+++ b/mix.lock
@@ -0,0 +1,25 @@
+%{
+ "castore": {:hex, :castore, "0.1.18", "deb5b9ab02400561b6f5708f3e7660fc35ca2d51bfc6a940d2f513f89c2975fc", [:mix], [], "hexpm", "61bbaf6452b782ef80b33cdb45701afbcf0a918a45ebe7e73f1130d661e66a06"},
+ "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"},
+ "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
+ "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"},
+ "esbuild": {:hex, :esbuild, "0.5.0", "d5bb08ff049d7880ee3609ed5c4b864bd2f46445ea40b16b4acead724fb4c4a3", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "f183a0b332d963c4cfaf585477695ea59eef9a6f2204fdd0efa00e099694ffe5"},
+ "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
+ "floki": {:hex, :floki, "0.33.1", "f20f1eb471e726342b45ccb68edb9486729e7df94da403936ea94a794f072781", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "461035fd125f13fdf30f243c85a0b1e50afbec876cbf1ceefe6fddd2e6d712c6"},
+ "html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"},
+ "jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"},
+ "mime": {:hex, :mime, "2.0.3", "3676436d3d1f7b81b5a2d2bd8405f412c677558c81b1c92be58c00562bb59095", [:mix], [], "hexpm", "27a30bf0db44d25eecba73755acf4068cbfe26a4372f9eb3e4ea3a45956bff6b"},
+ "phoenix": {:hex, :phoenix, "1.6.14", "57678366dc1d5bad49832a0fc7f12c2830c10d3eacfad681bfe9602cd4445f04", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d48c0da00b3d4cd1aad6055387917491af9f6e1f1e96cedf6c6b7998df9dba26"},
+ "phoenix_html": {:hex, :phoenix_html, "3.2.0", "1c1219d4b6cb22ac72f12f73dc5fad6c7563104d083f711c3fcd8551a1f4ae11", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "36ec97ba56d25c0136ef1992c37957e4246b649d620958a1f9fa86165f8bc54f"},
+ "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.3.3", "3a53772a6118d5679bf50fc1670505a290e32a1d195df9e069d8c53ab040c054", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "766796676e5f558dbae5d1bdb066849673e956005e3730dfd5affd7a6da4abac"},
+ "phoenix_live_view": {:hex, :phoenix_live_view, "0.17.12", "74f4c0ad02d7deac2d04f50b52827a5efdc5c6e7fac5cede145f5f0e4183aedc", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.0 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "af6dd5e0aac16ff43571f527a8e0616d62cb80b10eb87aac82170243e50d99c8"},
+ "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"},
+ "phoenix_view": {:hex, :phoenix_view, "1.1.2", "1b82764a065fb41051637872c7bd07ed2fdb6f5c3bd89684d4dca6e10115c95a", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "7ae90ad27b09091266f6adbb61e1d2516a7c3d7062c6789d46a7554ec40f3a56"},
+ "plug": {:hex, :plug, "1.13.6", "187beb6b67c6cec50503e940f0434ea4692b19384d47e5fdfd701e93cadb4cc2", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "02b9c6b9955bce92c829f31d6284bf53c591ca63c4fb9ff81dfd0418667a34ff"},
+ "plug_cowboy": {:hex, :plug_cowboy, "2.5.2", "62894ccd601cf9597e2c23911ff12798a8a18d237e9739f58a6b04e4988899fe", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ea6e87f774c8608d60c8d34022a7d073bd7680a0a013f049fc62bf35efea1044"},
+ "plug_crypto": {:hex, :plug_crypto, "1.2.3", "8f77d13aeb32bfd9e654cb68f0af517b371fb34c56c9f2b58fe3df1235c1251a", [:mix], [], "hexpm", "b5672099c6ad5c202c45f5a403f21a3411247f164e4a8fab056e5cd8a290f4a2"},
+ "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
+ "telemetry": {:hex, :telemetry, "1.1.0", "a589817034a27eab11144ad24d5c0f9fab1f58173274b1e9bae7074af9cbee51", [:rebar3], [], "hexpm", "b727b2a1f75614774cff2d7565b64d0dfa5bd52ba517f16543e6fc7efcc0df48"},
+ "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"},
+ "telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"},
+}